Archives: Assessments
-
Parking Forces Assessment
PHNjcmlwdD5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLXRoZW1lJywgJ2RhcmsnKTs8L3NjcmlwdD4KPCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CiAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+CiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgICA8dGl0bGU+QTdNUSBQYXJraW5nIEZvcmNlcyBBc3Nlc3NtZW50PC90aXRsZT4KICAgIAogICAgPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tIj4KICAgIDxsaW5rIHJlbD0icHJlY29ubmVjdCIgaHJlZj0iaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbSIgY3Jvc3NvcmlnaW4+CiAgICA8bGluayBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PVBsdXMrSmFrYXJ0YStTYW5zOndnaHRAMzAwOzQwMDs1MDA7NjAwOzcwMDs4MDA7OTAwJmZhbWlseT1QbGF5ZmFpcitEaXNwbGF5Oml0YWwsd2dodEAwLDcwMDsxLDQwMCZmYW1pbHk9TGF0bzp3Z2h0QDQwMDs3MDA7OTAwJmRpc3BsYXk9c3dhcCIgcmVsPSJzdHlsZXNoZWV0Ij4KICAgIAogICAgPHN0eWxlPgogICAgLyogPCFbQ0RBVEFbICovCiAgICA6cm9vdCB7CiAgICAgICAgLS1icmFuZC1ibHVlOiAjMGQwZjZhOyAKICAgICAgICAtLWJyYW5kLXllbGxvdzogI2ZmZTQwMjsKICAgICAgICAtLWJyYW5kLWRhcms6ICMwNDA2MGY7IAogICAgICAgIC0tYnJhbmQtcmVkOiAjZWIwMDAxOwoKICAgICAgICAvKiBMaWdodCBUaGVtZSBUb2tlbiBNYXRyaXggKi8KICAgICAgICAtLWJnLWdyYWRpZW50OiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjZjhmYWZjIDAlLCAjZmVlMmUyIDEwMCUpOwogICAgICAgIC0tZ2xhc3MtYmc6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NSk7CiAgICAgICAgLS1nbGFzcy1ib3JkZXI6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsKICAgICAgICAtLWdsYXNzLXNoYWRvdzogMCAyMHB4IDQwcHggLTE1cHggcmdiYSgyMjAsIDM4LCAzOCwgMC4wNSk7CiAgICAgICAgCiAgICAgICAgLS10ZXh0LWRhcms6ICMwZjE3MmE7CiAgICAgICAgLS10ZXh0LW11dGVkOiAjNDc1NTY5OwogICAgICAgIC0tYm9yZGVyLWxpZ2h0OiAjY2JkNWUxOwogICAgICAgIC0taW5wdXQtYmc6ICNmZmZmZmY7CiAgICAgICAgCiAgICAgICAgLS10b3AtYmc6IHJnYmEoMjIwLCAzOCwgMzgsIDAuMDYpOyAtLXRvcC1ib3JkZXI6IHZhcigtLWJyYW5kLXJlZCk7IC0tdG9wLXRleHQ6ICM5OTFiMWI7CiAgICAgICAgLS1taWQtYmc6IHJnYmEoMjUzLCAyMjQsIDcxLCAwLjE1KTsgLS1taWQtYm9yZGVyOiAjY2E4YTA0OyAtLW1pZC10ZXh0OiAjOTI0MDBlOyAKICAgICAgICAtLWJvdC1iZzogcmdiYSgxNywgMjQsIDEwNywgMC4wNSk7IC0tYm90LWJvcmRlcjogdmFyKC0tYnJhbmQtYmx1ZSk7IC0tYm90LXRleHQ6IHZhcigtLWJyYW5kLWJsdWUpOwogICAgfQoKICAgIFtkYXRhLXRoZW1lPSJkYXJrIl0gewogICAgICAgIC8qIERhcmsgVGhlbWUgVG9rZW4gTWF0cml4ICovCiAgICAgICAgLS1iZy1ncmFkaWVudDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzBmMTcyYSAwJSwgIzMxMDgwOCAxMDAlKTsKICAgICAgICAtLWdsYXNzLWJnOiByZ2JhKDE1LCAyMywgNDIsIDAuNTUpOwogICAgICAgIC0tZ2xhc3MtYm9yZGVyOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwogICAgICAgIC0tZ2xhc3Mtc2hhZG93OiAwIDI0cHggNTBweCAtMTJweCByZ2JhKDAsIDAsIDAsIDAuNik7CiAgICAgICAgCiAgICAgICAgLS1icmFuZC1ibHVlOiAjNjBhNWZhOyAKICAgICAgICAtLXRleHQtZGFyazogI2Y4ZmFmYzsKICAgICAgICAtLXRleHQtbXV0ZWQ6ICNjYmQ1ZTE7CiAgICAgICAgLS1ib3JkZXItbGlnaHQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgICAgICAtLWlucHV0LWJnOiByZ2JhKDMwLCA0MSwgNTksIDAuNyk7CiAgICAgICAgCiAgICAgICAgLS10b3AtYmc6IHJnYmEoMjIwLCAzOCwgMzgsIDAuMTUpOyAtLXRvcC1ib3JkZXI6IHZhcigtLWJyYW5kLXJlZCk7IC0tdG9wLXRleHQ6ICNmY2E1YTU7CiAgICAgICAgLS1taWQtYmc6IHJnYmEoMjUzLCAyMjQsIDcxLCAwLjEpOyAtLW1pZC1ib3JkZXI6IHZhcigtLWJyYW5kLXllbGxvdyk7IC0tbWlkLXRleHQ6ICNmZWYwOGE7CiAgICAgICAgLS1ib3QtYmc6IHJnYmEoOTYsIDE2NSwgMjUwLCAwLjEpOyAtLWJvdC1ib3JkZXI6IHZhcigtLWJyYW5kLWJsdWUpOyAtLWJvdC10ZXh0OiAjOTNjNWZkOwogICAgfQoKICAgICNhN21xLWFzc2Vzc21lbnQtcm9vdCB7IGZvbnQtZmFtaWx5OiAnUGx1cyBKYWthcnRhIFNhbnMnLCBzYW5zLXNlcmlmOyBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1ncmFkaWVudCk7IGNvbG9yOiB2YXIoLS10ZXh0LWRhcmspOyBtYXJnaW46IDA7IHBhZGRpbmc6IDIwcHg7IHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4zcywgY29sb3IgMC4zczsgbWluLWhlaWdodDogMTAwdmg7IHBvc2l0aW9uOiByZWxhdGl2ZTsgb3ZlcmZsb3cteDogaGlkZGVuOyB9CiAgICAjYTdtcS1hc3Nlc3NtZW50LXJvb3QgKiB7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH0KICAgICNhN21xLWFzc2Vzc21lbnQtcm9vdCAqOmZvY3VzLXZpc2libGUgeyBvdXRsaW5lOiAzcHggc29saWQgdmFyKC0tYnJhbmQteWVsbG93KTsgb3V0bGluZS1vZmZzZXQ6IDJweDsgYm9yZGVyLXJhZGl1czogNHB4OyB9CiAgICAjYTdtcS1hc3Nlc3NtZW50LXJvb3QgaDEsICNhN21xLWFzc2Vzc21lbnQtcm9vdCBoMiwgI2E3bXEtYXNzZXNzbWVudC1yb290IGgzLCAjYTdtcS1hc3Nlc3NtZW50LXJvb3QgcCB7IG1hcmdpbi10b3A6IDA7IH0KICAgIC5jYWxpZm9ybmlhLWZiIHsgZm9udC1mYW1pbHk6ICdDYWxpZm9ybmlhIEZCJywgJ0dlb3JnaWEnLCAnUGxheWZhaXIgRGlzcGxheScsIHNlcmlmICFpbXBvcnRhbnQ7IH0KCiAgICAudGhlbWUtdG9nZ2xlIHsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDIwcHg7IHJpZ2h0OiAyMHB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1nbGFzcy1iZyk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWdsYXNzLWJvcmRlcik7IHBhZGRpbmc6IDEwcHggMTZweDsgYm9yZGVyLXJhZGl1czogNTBweDsgY3Vyc29yOiBwb2ludGVyOyBjb2xvcjogdmFyKC0tdGV4dC1kYXJrKTsgZm9udC13ZWlnaHQ6IDgwMDsgZm9udC1zaXplOiAwLjg1cmVtOyBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMjVweCkgc2F0dXJhdGUoMTIwJSk7IHotaW5kZXg6IDEwMDsgYm94LXNoYWRvdzogdmFyKC0tZ2xhc3Mtc2hhZG93KTsgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnM7IH0KICAgIC50aGVtZS10b2dnbGU6aG92ZXIgeyB0cmFuc2Zvcm06IHNjYWxlKDEuMDUpOyB9CgogICAgLyogQW1iaWVudCBBbmltYXRlZCBGbHVpZCBNZXNoIEVuZ2luZSAqLwogICAgQGtleWZyYW1lcyBmbG9hdEJsb2IgeyAwJSwgMTAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApIHNjYWxlKDEpOyB9IDMzJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlKDMwcHgsIC00MHB4KSBzY2FsZSgxLjEpOyB9IDY2JSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlKC0yMHB4LCAyMHB4KSBzY2FsZSgwLjk1KTsgfSB9CiAgICAuYW5pbWF0ZS1ibG9iIHsgYW5pbWF0aW9uOiBmbG9hdEJsb2IgMTJzIGluZmluaXRlIGVhc2UtaW4tb3V0OyB9CgogICAgLyogQ2luZW1hdGljIEdsYXNzIENvbnRhaW5lcnMgKi8KICAgIC5jeWJlci1nbGFzcyB7IGJhY2tncm91bmQ6IHZhcigtLWdsYXNzLWJnKTsgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDI1cHgpIHNhdHVyYXRlKDEyMCUpOyAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cigyNXB4KSBzYXR1cmF0ZSgxMjAlKTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZ2xhc3MtYm9yZGVyKTsgYm9yZGVyLXJhZGl1czogMjRweDsgYm94LXNoYWRvdzogdmFyKC0tZ2xhc3Mtc2hhZG93KTsgcG9zaXRpb246IHJlbGF0aXZlOyB6LWluZGV4OiAxMDsgbWF4LXdpZHRoOiAxMTAwcHg7IG1hcmdpbjogNjBweCBhdXRvIDQwcHg7IHBhZGRpbmc6IDQwcHg7IH0KICAgIEBtZWRpYShtYXgtd2lkdGg6IDc2OHB4KSB7IC5jeWJlci1nbGFzcyB7IHBhZGRpbmc6IDIwcHg7IG1hcmdpbi10b3A6IDgwcHg7IH0gfQoKICAgIC5hN21xLWJ0biB7IGJhY2tncm91bmQ6IHZhcigtLWJyYW5kLXJlZCk7IGNvbG9yOiAjZmZmZmZmOyBwYWRkaW5nOiAxNnB4IDMycHg7IGZvbnQtc2l6ZTogMS4xcmVtOyBmb250LXdlaWdodDogOTAwOyBib3JkZXI6IG5vbmU7IGJvcmRlci1yYWRpdXM6IDEycHg7IGN1cnNvcjogcG9pbnRlcjsgdHJhbnNpdGlvbjogYWxsIDAuMnM7IHRleHQtYWxpZ246IGNlbnRlcjsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogMTAwJTsgYm94LXNoYWRvdzogMCA0cHggMTVweCByZ2JhKDIzNSwgMCwgMSwgMC4zKTsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgbGV0dGVyLXNwYWNpbmc6IDFweDsgfQogICAgLmE3bXEtYnRuOmRpc2FibGVkIHsgYmFja2dyb3VuZDogdmFyKC0tYm9yZGVyLWxpZ2h0KTsgY29sb3I6IHZhcigtLXRleHQtbXV0ZWQpOyBjdXJzb3I6IG5vdC1hbGxvd2VkOyBib3gtc2hhZG93OiBub25lOyBvcGFjaXR5OiAwLjY7IHRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50OyB9CiAgICAuYTdtcS1idG46bm90KDpkaXNhYmxlZCk6aG92ZXIgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7IGJveC1zaGFkb3c6IDAgNnB4IDIwcHggcmdiYSgyMzUsIDAsIDEsIDAuNSk7IGZpbHRlcjogYnJpZ2h0bmVzcygxLjEpOyB9CgogICAgLmE3bXEtaW5wdXQgeyB3aWR0aDogMTAwJTsgcGFkZGluZzogMThweDsgYm9yZGVyOiAycHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsgYm9yZGVyLXJhZGl1czogMTJweDsgZm9udC1mYW1pbHk6IGluaGVyaXQ7IGZvbnQtc2l6ZTogMS4xcmVtOyBtYXJnaW4tdG9wOiAxMHB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1pbnB1dC1iZyk7IGNvbG9yOiB2YXIoLS10ZXh0LWRhcmspOyB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4yczsgcmVzaXplOiB2ZXJ0aWNhbDsgbWluLWhlaWdodDogMTIwcHg7IH0KICAgIC5hN21xLWlucHV0OmZvY3VzIHsgb3V0bGluZTogbm9uZTsgYm9yZGVyLWNvbG9yOiB2YXIoLS1icmFuZC1yZWQpOyBib3gtc2hhZG93OiAwIDAgMCAzcHggcmdiYSgyMzUsIDAsIDEsIDAuMSk7IH0KCiAgICAuYTdtcS1ncmlkLTMgeyBkaXNwbGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsgZ2FwOiAyMHB4OyBtYXJnaW4tdG9wOiAyMHB4OyB9CiAgICBAbWVkaWEobWluLXdpZHRoOiA5MDBweCkgeyAuYTdtcS1ncmlkLTMgeyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgzLCAxZnIpOyB9IH0KICAgIC5hN21xLWdyaWQtMiB7IGRpc3BsYXk6IGdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOyBnYXA6IDIwcHg7IG1hcmdpbi1ib3R0b206IDMwcHg7IH0KICAgIEBtZWRpYShtaW4td2lkdGg6IDgwMHB4KSB7IC5hN21xLWdyaWQtMiB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsgfSB9CgogICAgLyogU29ydGluZyBNZWNoYW5pY3MgUGFuZWxzICovCiAgICAuYTdtcS13b3JkLWJhbmsgeyBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMDIpOyBwYWRkaW5nOiAyNXB4OyBib3JkZXItcmFkaXVzOiAxNnB4OyBtYXJnaW4tYm90dG9tOiAzMHB4OyBkaXNwbGF5OiBmbGV4OyBmbGV4LXdyYXA6IHdyYXA7IGdhcDogMTJweDsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGJvcmRlcjogMnB4IGRhc2hlZCB2YXIoLS1ib3JkZXItbGlnaHQpOyBtaW4taGVpZ2h0OiAxNDBweDsgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMnMsIGJhY2tncm91bmQgMC4yczsgfQogICAgW2RhdGEtdGhlbWU9ImRhcmsiXSAuYTdtcS13b3JkLWJhbmsgeyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDIpOyB9CiAgICAuYTdtcS13b3JkLWJhbmsuZHJhZy1vdmVyIHsgYm9yZGVyLWNvbG9yOiB2YXIoLS1icmFuZC1yZWQpOyBiYWNrZ3JvdW5kOiByZ2JhKDIzNSwgMCwgMSwgMC4wNSk7IH0KCiAgICAuZm9yY2UtY2hpcCB7IGJhY2tncm91bmQ6IHZhcigtLWlucHV0LWJnKTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsgYm9yZGVyLXJhZGl1czogNTBweDsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgb3ZlcmZsb3c6IGhpZGRlbjsgYm94LXNoYWRvdzogMCA0cHggMTBweCByZ2JhKDAsMCwwLDAuMDQpOyBjdXJzb3I6IGdyYWI7IHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjFzOyB9CiAgICAuZm9yY2UtY2hpcDphY3RpdmUgeyBjdXJzb3I6IGdyYWJiaW5nOyB0cmFuc2Zvcm06IHNjYWxlKDAuOTUpOyB9CiAgICAuY2hpcC1sYWJlbCB7IHBhZGRpbmc6IDEwcHggMThweDsgZm9udC13ZWlnaHQ6IDgwMDsgZm9udC1zaXplOiAwLjk1cmVtOyBjdXJzb3I6IGluaGVyaXQ7IGNvbG9yOiB2YXIoLS10ZXh0LWRhcmspOyB9CiAgICAuY2hpcC1hY3Rpb25zIHsgZGlzcGxheTogZmxleDsgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItbGlnaHQpOyB9CiAgICAuY2hpcC1idG4geyBib3JkZXI6IG5vbmU7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyBwYWRkaW5nOiAxMHB4IDE0cHg7IGN1cnNvcjogcG9pbnRlcjsgZm9udC1zaXplOiAxcmVtOyBmb250LXdlaWdodDogOTAwOyB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMXM7IH0KICAgIC5jaGlwLWJ0bjpob3ZlciB7IGJhY2tncm91bmQ6IHJnYmEoMTUsIDIzLCA0MiwgMC4wNSk7IH0KICAgIFtkYXRhLXRoZW1lPSJkYXJrIl0gLmNoaXAtYnRuOmhvdmVyIHsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjEpOyB9CiAgICAuY2hpcC1idG4tdG9wIHsgY29sb3I6IHZhcigtLXRvcC10ZXh0KTsgfQogICAgLmNoaXAtYnRuLW1pZCB7IGNvbG9yOiB2YXIoLS1taWQtdGV4dCk7IGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsgfQogICAgLmNoaXAtYnRuLWJvdCB7IGNvbG9yOiB2YXIoLS1ib3QtdGV4dCk7IH0KCiAgICAuYTdtcS1ib3ggeyBib3JkZXItcmFkaXVzOiAxNnB4OyBwYWRkaW5nOiAyMHB4OyBtaW4taGVpZ2h0OiA1NTBweDsgZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgZ2FwOiAxMHB4OyBib3JkZXI6IDJweCBkYXNoZWQ7IHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4yczsgfQogICAgLmE3bXEtYm94LXRvcCB7IGJhY2tncm91bmQ6IHZhcigtLXRvcC1iZyk7IGJvcmRlci1jb2xvcjogdmFyKC0tdG9wLWJvcmRlcik7IH0KICAgIC5hN21xLWJveC1taWQgeyBiYWNrZ3JvdW5kOiB2YXIoLS1taWQtYmcpOyBib3JkZXItY29sb3I6IHZhcigtLW1pZC1ib3JkZXIpOyB9CiAgICAuYTdtcS1ib3gtYm90IHsgYmFja2dyb3VuZDogdmFyKC0tYm90LWJnKTsgYm9yZGVyLWNvbG9yOiB2YXIoLS1ib3QtYm9yZGVyKTsgfQogICAgLmE3bXEtYm94LXRpdGxlIHsgdGV4dC1hbGlnbjogY2VudGVyOyBmb250LXdlaWdodDogOTAwOyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBmb250LXNpemU6IDAuODVyZW07IG1hcmdpbi1ib3R0b206IDE1cHg7IGxldHRlci1zcGFjaW5nOiAxcHg7IHBvaW50ZXItZXZlbnRzOiBub25lOyB9CgogICAgLnJhbmtlZC1pdGVtIHsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgYmFja2dyb3VuZDogdmFyKC0taW5wdXQtYmcpOyBwYWRkaW5nOiAxMHB4OyBib3JkZXItcmFkaXVzOiAxMnB4OyBib3gtc2hhZG93OiAwIDRweCAxMHB4IHJnYmEoMCwwLDAsMC4wNCk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7IGN1cnNvcjogZ3JhYjsgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMXMsIGJvcmRlci10b3AgMC4yczsgfQogICAgLnJhbmtlZC1pdGVtOmFjdGl2ZSB7IGN1cnNvcjogZ3JhYmJpbmc7IHRyYW5zZm9ybTogc2NhbGUoMC45OCk7IH0KICAgIC5yYW5rLW51bSB7IGZvbnQtc2l6ZTogMS4ycmVtOyBmb250LXdlaWdodDogOTAwOyBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7IHdpZHRoOiA0MHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGJvcmRlci1yaWdodDogMnB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7IG1hcmdpbi1yaWdodDogMTJweDsgcGFkZGluZy1yaWdodDogNXB4OyBwb2ludGVyLWV2ZW50czogbm9uZTsgfQogICAgLnJhbmstY29udGVudCB7IGZsZXg6IDE7IGZvbnQtd2VpZ2h0OiA4MDA7IGZvbnQtc2l6ZTogMC45NXJlbTsgcG9pbnRlci1ldmVudHM6IG5vbmU7IGNvbG9yOiB2YXIoLS10ZXh0LWRhcmspOyBsaW5lLWhlaWdodDogMS4zOyB9CiAgICAucmFuay1jb250cm9scyB7IGRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogM3B4OyB9CiAgICAuYXJyb3ctYnRuIHsgYm9yZGVyOiBub25lOyBiYWNrZ3JvdW5kOiByZ2JhKDE1LCAyMywgNDIsIDAuMDUpOyBjdXJzb3I6IHBvaW50ZXI7IGJvcmRlci1yYWRpdXM6IDZweDsgcGFkZGluZzogNHB4IDEwcHg7IGZvbnQtc2l6ZTogMC43NXJlbTsgY29sb3I6IHZhcigtLXRleHQtbXV0ZWQpOyB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnM7IH0KICAgIFtkYXRhLXRoZW1lPSJkYXJrIl0gLmFycm93LWJ0biB7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4xKTsgY29sb3I6ICNjYmQ1ZTE7IH0KICAgIC5hcnJvdy1idG46aG92ZXIgeyBiYWNrZ3JvdW5kOiB2YXIoLS1icmFuZC1yZWQpOyBjb2xvcjogd2hpdGU7IH0KICAgIC5yZW1vdmUtYnRuIHsgYm9yZGVyOiBub25lOyBiYWNrZ3JvdW5kOiByZ2JhKDIyMCwgMzgsIDM4LCAwLjEpOyBjb2xvcjogdmFyKC0tYnJhbmQtcmVkKTsgcGFkZGluZzogOHB4OyBib3JkZXItcmFkaXVzOiA4cHg7IGN1cnNvcjogcG9pbnRlcjsgZm9udC13ZWlnaHQ6IDkwMDsgZm9udC1zaXplOiAwLjlyZW07IG1hcmdpbi1sZWZ0OiAxMHB4OyB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnM7IH0KICAgIC5yZW1vdmUtYnRuOmhvdmVyIHsgYmFja2dyb3VuZDogdmFyKC0tYnJhbmQtcmVkKTsgY29sb3I6IHdoaXRlOyB9CgogICAgLmE3bXEtcHJvZ3Jlc3MtYmFyIHsgYmFja2dyb3VuZDogdmFyKC0tYm9yZGVyLWxpZ2h0KTsgaGVpZ2h0OiAxMHB4OyBib3JkZXItcmFkaXVzOiA1cHg7IG1hcmdpbi1ib3R0b206IDMwcHg7IG92ZXJmbG93OiBoaWRkZW47IGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDNweCByZ2JhKDAsMCwwLDAuMSk7IH0KICAgIC5hN21xLXByb2dyZXNzLWZpbGwgeyBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHZhcigtLWJyYW5kLWJsdWUpLCB2YXIoLS1icmFuZC1yZWQpKTsgaGVpZ2h0OiAxMDAlOyB0cmFuc2l0aW9uOiB3aWR0aCAwLjRzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7IH0KCiAgICAuYTdtcS1zcGluIHsgYW5pbWF0aW9uOiBhN21xU3BpbiAxcyBsaW5lYXIgaW5maW5pdGU7IH0KICAgIEBrZXlmcmFtZXMgYTdtcVNwaW4geyBmcm9tIHsgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7IH0gdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOyB9IH0KCiAgICAvKiBDaGVja2xpc3QgTGF5b3V0IE1lY2hhbmljcyAqLwogICAgLmNoZWNrLWl0ZW0geyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogZmxleC1zdGFydDsgZ2FwOiAxNHB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1pbnB1dC1iZyk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7IHBhZGRpbmc6IDE4cHg7IGJvcmRlci1yYWRpdXM6IDE0cHg7IG1hcmdpbi1ib3R0b206IDEycHg7IGN1cnNvcjogcG9pbnRlcjsgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsgfQogICAgLmNoZWNrLWl0ZW06aG92ZXIgeyBib3JkZXItY29sb3I6IHZhcigtLWJyYW5kLXJlZCk7IH0KICAgIC5jaGVjay1pdGVtLnNlbGVjdGVkIHsgYmFja2dyb3VuZDogdmFyKC0tdG9wLWJnKTsgYm9yZGVyLWNvbG9yOiB2YXIoLS1icmFuZC1yZWQpOyB9CiAgICAuY2hlY2stYm94IHsgd2lkdGg6IDI0cHg7IGhlaWdodDogMjRweDsgYm9yZGVyOiAycHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsgYm9yZGVyLXJhZGl1czogNnB4OyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgbWFyZ2luLXRvcDogMXB4OyBmbGV4LXNocmluazogMDsgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjJzLCBib3JkZXItY29sb3IgMC4yczsgfQogICAgLmNoZWNrLWl0ZW0uc2VsZWN0ZWQgLmNoZWNrLWJveCB7IGJhY2tncm91bmQ6IHZhcigtLWJyYW5kLXJlZCk7IGJvcmRlci1jb2xvcjogdmFyKC0tYnJhbmQtcmVkKTsgfQogICAgLmNoZWNrLW1hcmsgeyBjb2xvcjogd2hpdGU7IGZvbnQtd2VpZ2h0OiBib2xkOyBkaXNwbGF5OiBub25lOyBmb250LXNpemU6IDAuODVyZW07IH0KICAgIC5jaGVjay1pdGVtLnNlbGVjdGVkIC5jaGVjay1tYXJrIHsgZGlzcGxheTogYmxvY2s7IH0KCiAgICAvKiBBbmFseXRpY2FsIE1hdHJpY2VzIFN1bW1hcmllcyBSZXBvcnQgRm9ybWF0dGluZyAqLwogICAgLnJlc3VsdC1zZWN0aW9uIHsgYmFja2dyb3VuZDogdmFyKC0taW5wdXQtYmcpOyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItbGlnaHQpOyBib3JkZXItcmFkaXVzOiAxNnB4OyBwYWRkaW5nOiAzMHB4OyBtYXJnaW4tYm90dG9tOiAyMHB4OyBib3gtc2hhZG93OiAwIDRweCAxNXB4IHJnYmEoMCwwLDAsMC4wMik7IH0KICAgIC5yZXN1bHQtbGlzdCB7IGxpc3Qtc3R5bGU6IG5vbmU7IHBhZGRpbmc6IDA7IG1hcmdpbjogMDsgZm9udC1zaXplOiAxLjFyZW07IGZvbnQtd2VpZ2h0OiA4MDA7IGxpbmUtaGVpZ2h0OiAyOyB9CiAgICAucmVzdWx0LWxpc3QgbGkgeyBtYXJnaW4tYm90dG9tOiAxMnB4OyBib3JkZXItYm90dG9tOiAxcHggZGFzaGVkIHZhcigtLWJvcmRlci1saWdodCk7IHBhZGRpbmctYm90dG9tOiAxMnB4OyBkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGFsaWduLWl0ZW1zOiBjZW50ZXI7IH0KICAgIC5zdGF0LXBpbGwgeyBmb250LXNpemU6IDAuODVyZW07IHBhZGRpbmc6IDZweCAxMnB4OyBib3JkZXItcmFkaXVzOiAxMnB4OyBoZWlnaHQ6IGZpdC1jb250ZW50OyBkaXNwbGF5OiBpbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA2cHg7IGZvbnQtd2VpZ2h0OiA5MDA7IH0KCiAgICAubWF0cml4LXdyYXBwZXIgeyBvdmVyZmxvdy14OiBhdXRvOyBtYXJnaW4tdG9wOiAxNXB4OyBib3JkZXItcmFkaXVzOiAxMnB4OyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItbGlnaHQpOyB9CiAgICAubWF0cml4LXRhYmxlIHsgd2lkdGg6IDEwMCU7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7IG1pbi13aWR0aDogOTAwcHg7IGJhY2tncm91bmQ6IHZhcigtLWlucHV0LWJnKTsgdGV4dC1hbGlnbjogY2VudGVyOyBmb250LXNpemU6IDAuOXJlbTsgY29sb3I6IHZhcigtLXRleHQtZGFyayk7IH0KICAgIC5tYXRyaXgtdGFibGUgdGggeyBiYWNrZ3JvdW5kOiByZ2JhKDE1LCAyMywgNDIsIDAuMDMpOyBwYWRkaW5nOiAxNHB4OyBmb250LXdlaWdodDogOTAwOyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBmb250LXNpemU6IDAuNzVyZW07IGxldHRlci1zcGFjaW5nOiAxcHg7IGNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTsgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7IH0KICAgIFtkYXRhLXRoZW1lPSJkYXJrIl0gLm1hdHJpeC10YWJsZSB0aCB7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wMyk7IH0KICAgIC5tYXRyaXgtdGFibGUgdGQgeyBwYWRkaW5nOiAxNHB4OyBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsgfQogICAgLm1hdHJpeC10YWJsZSB0cjpsYXN0LWNoaWxkIHRkIHsgYm9yZGVyLWJvdHRvbTogbm9uZTsgfQogICAgLm1hdHJpeC10YWJsZSAuZm9yY2UtbmFtZSB7IGZvbnQtd2VpZ2h0OiA4MDA7IHRleHQtYWxpZ246IGxlZnQ7IH0KCiAgICAucmFuay1iYWRnZSB7IGRpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgd2lkdGg6IDMwcHg7IGhlaWdodDogMzBweDsgYm9yZGVyLXJhZGl1czogOHB4OyBmb250LXdlaWdodDogOTAwOyBmb250LXNpemU6IDAuODVyZW07IH0KICAgIC5yYi10b3AgeyBiYWNrZ3JvdW5kOiB2YXIoLS10b3AtYmcpOyBjb2xvcjogdmFyKC0tdG9wLXRleHQpOyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS10b3AtYm9yZGVyKTsgfQogICAgLnJiLW1pZCB7IGJhY2tncm91bmQ6IHZhcigtLW1pZC1iZyk7IGNvbG9yOiB2YXIoLS1taWQtdGV4dCk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1pZC1ib3JkZXIpOyB9CiAgICAucmItYm90IHsgYmFja2dyb3VuZDogdmFyKC0tYm90LWJnKTsgY29sb3I6IHZhcigtLWJvdC10ZXh0KTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm90LWJvcmRlcik7IH0KICAgIC5yYi1wY3QgeyBmb250LXdlaWdodDogOTAwOyBjb2xvcjogdmFyKC0tYnJhbmQtcmVkKTsgYmFja2dyb3VuZDogcmdiYSgyMzUsIDAsIDEsIDAuMSk7IHBhZGRpbmc6IDZweCAxMHB4OyBib3JkZXItcmFkaXVzOiA4cHg7IGZvbnQtc2l6ZTogMC44NXJlbTsgfQoKQG1lZGlhIHByaW50IHsKICAgIDpyb290LCBbZGF0YS10aGVtZT0iZGFyayJdIHsKICAgICAgICAtLWJyYW5kLWJsdWU6ICMwZDBmNmEgIWltcG9ydGFudDsgCiAgICAgICAgLS1icmFuZC15ZWxsb3c6ICNmZmU0MDIgIWltcG9ydGFudDsKICAgICAgICAtLWJyYW5kLWRhcms6ICMwNDA2MGYgIWltcG9ydGFudDsgCiAgICAgICAgLS1icmFuZC1yZWQ6ICNlYjAwMDEgIWltcG9ydGFudDsKICAgICAgICAtLWJnLWdyYWRpZW50OiBub25lICFpbXBvcnRhbnQ7IAogICAgICAgIC0tZ2xhc3MtYmc6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgICAgICAgLS1nbGFzcy1ib3JkZXI6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgICAgICAgLS1nbGFzcy1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKICAgICAgICAtLXRleHQtZGFyazogIzBmMTcyYSAhaW1wb3J0YW50OwogICAgICAgIC0tdGV4dC1tdXRlZDogIzQ3NTU2OSAhaW1wb3J0YW50OwogICAgICAgIC0tYm9yZGVyLWxpZ2h0OiAjY2JkNWUxICFpbXBvcnRhbnQ7CiAgICAgICAgLS1pbnB1dC1iZzogI2ZmZmZmZiAhaW1wb3J0YW50OwogICAgICAgIC0tdG9wLWJnOiByZ2JhKDIyMCwgMzgsIDM4LCAwLjA2KSAhaW1wb3J0YW50OyAKICAgICAgICAtLXRvcC1ib3JkZXI6ICNlYjAwMDEgIWltcG9ydGFudDsgCiAgICAgICAgLS10b3AtdGV4dDogIzk5MWIxYiAhaW1wb3J0YW50OwogICAgICAgIC0tbWlkLWJnOiByZ2JhKDI1MywgMjI0LCA3MSwgMC4xNSkgIWltcG9ydGFudDsgCiAgICAgICAgLS1taWQtYm9yZGVyOiAjY2E4YTA0ICFpbXBvcnRhbnQ7IAogICAgICAgIC0tbWlkLXRleHQ6ICM5MjQwMGUgIWltcG9ydGFudDsgCiAgICAgICAgLS1ib3QtYmc6IHJnYmEoMTcsIDI0LCAxMDcsIDAuMDUpICFpbXBvcnRhbnQ7IAogICAgICAgIC0tYm90LWJvcmRlcjogIzBkMGY2YSAhaW1wb3J0YW50OyAKICAgICAgICAtLWJvdC10ZXh0OiAjMGQwZjZhICFpbXBvcnRhbnQ7CiAgICB9CiAgICBib2R5LCBodG1sIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmICFpbXBvcnRhbnQ7CiAgICAgICAgY29sb3I6IHZhcigtLXRleHQtZGFyaykgIWltcG9ydGFudDsKICAgICAgICAtd2Via2l0LXByaW50LWNvbG9yLWFkanVzdDogZXhhY3QgIWltcG9ydGFudDsKICAgICAgICBwcmludC1jb2xvci1hZGp1c3Q6IGV4YWN0ICFpbXBvcnRhbnQ7CiAgICAgICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgfQojYTdtcS1hc3Nlc3NtZW50LXJvb3QsIC5jeWJlci1nbGFzcyB7CiAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgICAgIG1hcmdpbjogMCAhaW1wb3J0YW50OwogICAgICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwogICAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogICAgfQoKICAgICN0aGVtZS1idG4sIGJ1dHRvbiwgLmNoaXAtYWN0aW9ucywgLnJhbmstY29udHJvbHMsIC5yZW1vdmUtYnRuLCAubmF2LWJhciwgI21vdXNlLWdsb3csICN2aWV3LWludHJvLCAjdmlldy12aXNpb24sICN2aWV3LXJhbmssICN2aWV3LXdoYXRpZnMsICN2aWV3LWxvYWRpbmcgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KICAgIEBwYWdlIHsKICAgICAgICBzaXplOiBsZXR0ZXIgcG9ydHJhaXQ7CiAgICAgICAgbWFyZ2luOiAwLjJpbjsKICAgIH0KICAgICN2aWV3LXJlc3VsdHMgewogICAgICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7CiAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgICAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICAgICAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50OwogICAgICAgIHpvb206IDAuNjU7CiAgICB9CiAgICBoMSB7IGZvbnQtc2l6ZTogMTZweCAhaW1wb3J0YW50OyBtYXJnaW46IDRweCAwICFpbXBvcnRhbnQ7IH0KICAgIGgyIHsgZm9udC1zaXplOiAxNHB4ICFpbXBvcnRhbnQ7IG1hcmdpbjogNHB4IDAgIWltcG9ydGFudDsgfQogICAgaDMgeyBmb250LXNpemU6IDEycHggIWltcG9ydGFudDsgbWFyZ2luOiA0cHggMCAhaW1wb3J0YW50OyB9CiAgICBwIHsgbWFyZ2luOiAwIDAgNnB4IDAgIWltcG9ydGFudDsgZm9udC1zaXplOiAxMHB4ICFpbXBvcnRhbnQ7IH0KICAgICNzZWdtZW50LWJyZWFrZG93bi1jb250YWluZXIgewogICAgICAgIGdhcDogNnB4ICFpbXBvcnRhbnQ7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgZGlzcGxheTogZ3JpZCAhaW1wb3J0YW50OwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDIsIDFmcikgIWltcG9ydGFudDsKICAgIH0KICAgICNzZWdtZW50LWJyZWFrZG93bi1jb250YWluZXIgPiBkaXYgewogICAgICAgIHBhZGRpbmc6IDZweCAhaW1wb3J0YW50OwogICAgICAgIG1hcmdpbjogMCAhaW1wb3J0YW50OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweCAhaW1wb3J0YW50OwogICAgfQogICAgdGFibGUgeyB3aWR0aDogMTAwJSAhaW1wb3J0YW50OyBmb250LXNpemU6IDlweCAhaW1wb3J0YW50OyB9CiAgICB0aCwgdGQgeyBwYWRkaW5nOiA0cHggIWltcG9ydGFudDsgbGluZS1oZWlnaHQ6IDEgIWltcG9ydGFudDsgfQogICAgLnJhbmstYmFkZ2UgeyB3aWR0aDogMTZweCAhaW1wb3J0YW50OyBoZWlnaHQ6IDE2cHggIWltcG9ydGFudDsgZm9udC1zaXplOiA5cHggIWltcG9ydGFudDsgbGluZS1oZWlnaHQ6IDE2cHggIWltcG9ydGFudDsgfQogICAgLnN0YXQtcGlsbCB7IHBhZGRpbmc6IDJweCA2cHggIWltcG9ydGFudDsgZm9udC1zaXplOiA5cHggIWltcG9ydGFudDsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KSAhaW1wb3J0YW50OyBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OyBjb2xvcjogdmFyKC0tdGV4dC1kYXJrKSAhaW1wb3J0YW50OyB9CiAgICAucmFua2VkLWl0ZW0sIHRyLCAjc2VnbWVudC1icmVha2Rvd24tY29udGFpbmVyID4gZGl2LCAjc3Vic2NvcmVzLWNvbnRhaW5lciA+IGRpdiB7IHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZCAhaW1wb3J0YW50OyBicmVhay1pbnNpZGU6IGF2b2lkICFpbXBvcnRhbnQ7IH0KICAgIHVsLCBvbCB7IG1hcmdpbi1ib3R0b206IDRweCAhaW1wb3J0YW50OyB9CiAgICBsaSB7IHBhZGRpbmc6IDNweCAhaW1wb3J0YW50OyBtYXJnaW4tYm90dG9tOiAycHggIWltcG9ydGFudDsgZm9udC1zaXplOiAxMHB4ICFpbXBvcnRhbnQ7IH0KCi8qIEZvcmNlIGNvbXBsZXRlbHkgZGFyayB0ZXh0IGZvciBQREYgcmVhZGFiaWxpdHkgKi8KICAgIGJvZHksIHAsIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIHNwYW4sIGRpdiwgbGksIHRkLCB0aCwgbGFiZWwsIC50ZXh0LW11dGVkLCAudGV4dC1zbGF0ZS00MDAsIC50ZXh0LXNsYXRlLTUwMCB7CiAgICAgICAgY29sb3I6ICMwMDAwMDAgIWltcG9ydGFudDsKICAgICAgICB0ZXh0LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAvKiBFbnN1cmUgdGhlIHN0YXQgcGlsbHMgbWFpbnRhaW4gcmVhZGFibGUgY29udHJhc3QgKi8KICAgIC5zdGF0LXBpbGwsIC5yYW5rLWJhZGdlIHsKICAgICAgICBjb2xvcjogIzAwMDAwMCAhaW1wb3J0YW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMwMDAwMDAgIWltcG9ydGFudDsKICAgIH0KfQoKLyogQXNzZXNzbWVudCBOYXZpZ2F0aW9uIEJhciAqLwojYTdtcS1hc3Nlc3NtZW50LXJvb3QgeyBwYWRkaW5nLXRvcDogODBweDsgfSAvKiBQdXNoZXMgY29udGVudCBkb3duIHNvIG5hdiBkb2Vzbid0IG92ZXJsYXAgKi8KLmE3bXEtdG9wLW5hdiB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMjBweDsgbGVmdDogMjBweDsgcmlnaHQ6IDIwcHg7CiAgICBkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICB6LWluZGV4OiAxMDA7IG1heC13aWR0aDogMTEwMHB4OyBtYXJnaW46IDAgYXV0bzsKfQoubmF2LXJpZ2h0LWdyb3VwIHsgZGlzcGxheTogZmxleDsgZ2FwOiAxMHB4OyB9Ci5uYXYtYnRuIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWdsYXNzLWJnKTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZ2xhc3MtYm9yZGVyKTsKICAgIHBhZGRpbmc6IDEwcHggMTZweDsgYm9yZGVyLXJhZGl1czogNTBweDsgY3Vyc29yOiBwb2ludGVyOwogICAgY29sb3I6IHZhcigtLXRleHQtZGFyayk7IGZvbnQtd2VpZ2h0OiA4MDA7IGZvbnQtc2l6ZTogMC44NXJlbTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigyNXB4KSBzYXR1cmF0ZSgxMjAlKTsgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoMjVweCkgc2F0dXJhdGUoMTIwJSk7CiAgICBib3gtc2hhZG93OiB2YXIoLS1nbGFzcy1zaGFkb3cpOyB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycywgZmlsdGVyIDAuMnM7Cn0KLm5hdi1idG46aG92ZXIgeyB0cmFuc2Zvcm06IHNjYWxlKDEuMDUpOyBmaWx0ZXI6IGJyaWdodG5lc3MoMS4xKTsgfQogICAgLyogSG92ZXIgVG9vbHRpcHMgZm9yIENhcmVlciBEZWZpbml0aW9ucyAqLwogICAgLmE3bXEtdG9vbHRpcCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOyBjdXJzb3I6IGhlbHA7IGJvcmRlci1ib3R0b206IDJweCBkb3R0ZWQgdmFyKC0tYnJhbmQtcmVkKTsgZm9udC13ZWlnaHQ6IDkwMDsKICAgIH0KICAgIC5hN21xLXRvb2x0aXA6OmJlZm9yZSB7CiAgICAgICAgY29udGVudDogYXR0cihkYXRhLXRvb2x0aXApOyBwb3NpdGlvbjogYWJzb2x1dGU7IGJvdHRvbTogMTAwJTsgbGVmdDogNTAlOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgtOHB4KTsKICAgICAgICBiYWNrZ3JvdW5kOiAjMGYxNzJhOyBjb2xvcjogI2ZmZmZmZjsgcGFkZGluZzogMTJweCAxNnB4OyBib3JkZXItcmFkaXVzOiA4cHg7IGZvbnQtc2l6ZTogMC44NXJlbTsgZm9udC13ZWlnaHQ6IDYwMDsgbGluZS1oZWlnaHQ6IDEuNDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOyB3aWR0aDogbWF4LWNvbnRlbnQ7IG1heC13aWR0aDogMzQwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsgb3BhY2l0eTogMDsgdmlzaWJpbGl0eTogaGlkZGVuOyB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOyB6LWluZGV4OiAxMDAwOyBib3gtc2hhZG93OiAwIDEwcHggMjVweCByZ2JhKDAsMCwwLDAuMyk7IHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgfQogICAgLmE3bXEtdG9vbHRpcDo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOyBwb3NpdGlvbjogYWJzb2x1dGU7IGJvdHRvbTogMTAwJTsgbGVmdDogNTAlOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7IGJvcmRlci13aWR0aDogNnB4OyBib3JkZXItc3R5bGU6IHNvbGlkOyBib3JkZXItY29sb3I6ICMwZjE3MmEgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7IG9wYWNpdHk6IDA7IHZpc2liaWxpdHk6IGhpZGRlbjsgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsgei1pbmRleDogMTAwMDsgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB9CiAgICAuYTdtcS10b29sdGlwOmhvdmVyOjpiZWZvcmUsIC5hN21xLXRvb2x0aXA6aG92ZXI6OmFmdGVyIHsgb3BhY2l0eTogMTsgdmlzaWJpbGl0eTogdmlzaWJsZTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoMCk7IH0KICAgIC5hN21xLXRvb2x0aXA6aG92ZXI6OmFmdGVyIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoNnB4KTsgfQogICAgLyogXV0+ICovCgogICAgPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4KICAgIDxkaXYgaWQ9ImE3bXEtYXNzZXNzbWVudC1yb290Ij4KICAgICAgIDxuYXYgY2xhc3M9ImE3bXEtdG9wLW5hdiBuby1wcmludCI+CiAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Im5hdi1idG4iIG9uY2xpY2s9IndpbmRvdy5sb2NhdGlvbi5ocmVmPScvZGFzaGJvYXJkJyI+4oaQIERhc2hib2FyZDwvYnV0dG9uPgogICAgPGRpdiBjbGFzcz0ibmF2LXJpZ2h0LWdyb3VwIj4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Im5hdi1idG4iIGlkPSJidG4tc2F2ZS1yZXR1cm4iPvCfkr4gU2F2ZSAmIFJldHVybjwvYnV0dG9uPgogICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0ibmF2LWJ0biIgaWQ9InRoZW1lLWJ0biI+4piA77iPIExpZ2h0IE1vZGU8L2J1dHRvbj4KICAgIDwvZGl2Pgo8L25hdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQgaW5zZXQtMCBvdmVyZmxvdy1oaWRkZW4gcG9pbnRlci1ldmVudHMtbm9uZSB6LTAiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSB0b3AtWy01JV0gbGVmdC1bLTUlXSB3LVs1MDBweF0gaC1bNTAwcHhdIGJnLXJlZC01MDAvMTAgZGFyazpiZy1yZWQtNjAwLzEwIHJvdW5kZWQtZnVsbCBibHVyLVsxMjBweF0gYW5pbWF0ZS1ibG9iIj48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWJzb2x1dGUgYm90dG9tLVs1JV0gcmlnaHQtWy01JV0gdy1bNjAwcHhdIGgtWzYwMHB4XSBiZy1wdXJwbGUtNDAwLzEwIGRhcms6YmctcHVycGxlLTYwMC8xMCByb3VuZGVkLWZ1bGwgYmx1ci1bMTQwcHhdIGFuaW1hdGUtYmxvYiIgc3R5bGU9ImFuaW1hdGlvbi1kZWxheTogNHM7Ij48L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iY3liZXItZ2xhc3MiPgogICAgICAgICAgICAKICAgICAgICAgICAgPCEtLSBNT0RVTEUgTEFZRVIgMDogSU5UUk9EVUNUSU9OIFBSSU1FUiBPVkVSVklFVyAtLT4KICAgICAgICAgICAgPGRpdiBpZD0idmlldy1pbnRybyIgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsgcGFkZGluZzogMjBweCAxMHB4OyI+CiAgICAgICAgICAgICAgICA8aDEgY2xhc3M9ImNhbGlmb3JuaWEtZmIiIHN0eWxlPSJmb250LXNpemU6IDMuNXJlbTsgY29sb3I6IHZhcigtLWJyYW5kLXJlZCk7IG1hcmdpbi1ib3R0b206IDE1cHg7IGZvbnQtd2VpZ2h0OiA5MDA7IGxpbmUtaGVpZ2h0OiAxLjE7Ij5NeSBQYXJraW5nIEZvcmNlcyBNYXRyaXg8L2gxPgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWF4LXdpZHRoOiA4NTBweDsgbWFyZ2luOiAwIGF1dG8gNDBweCBhdXRvOyB0ZXh0LWFsaWduOiBsZWZ0OyBmb250LXNpemU6IDEuMXJlbTsgY29sb3I6IHZhcigtLXRleHQtbXV0ZWQpOyBiYWNrZ3JvdW5kOiB2YXIoLS1pbnB1dC1iZyk7IHBhZGRpbmc6IDQwcHg7IGJvcmRlci1yYWRpdXM6IDIwcHg7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7IGJveC1zaGFkb3c6IDAgMTBweCAzMHB4IHJnYmEoMCwwLDAsMC4wMyk7Ij4KICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMjBweDsiPkFkdWx0cyBlbmNvdW50ZXIgbnVtZXJvdXMgb2JzdGFjbGVzIHRoYXQgbWFrZSBpdCBkaWZmaWN1bHQgdG8gaW1wbGVtZW50IHRoZWlyIHN0cmF0ZWdpYyBwbGFucy4gT2JzdGFjbGVzIGFyZSB0aGUgcm9hZGJsb2NrcywgYmFycmllcnMsIGRldG91cnMsIG9yIHNldGJhY2tzIHlvdSBmYWNlIG9uIHlvdXIgcGF0aCB0aGF0IGplb3BhcmRpemUgeW91ciBhYmlsaXR5IHRvIG1ha2UgeW91ciBmb3Jlc2VlYWJsZSBmdXR1cmUgYSByZWFsaXR5LjwvcD4KICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMjBweDsiPlRoaXMgYXNzZXNzbWVudCBoZWxwcyB5b3UgcHJlZGljdCB0aGUgaW50ZXJuYWwgPHN0cm9uZz4icGFya2luZyBmb3JjZXMiPC9zdHJvbmc+IHRoYXQgbGVhdmUgeW91IGhlc2l0YW50LCByZWx1Y3RhbnQsIG9yIHVud2lsbGluZyB0byBpbXBsZW1lbnQgeW91ciBwbGFuLiBUaGVzZSBwYXJraW5nIGZvcmNlcyBhY3QgYXMgdGhlIHBvbGFyIG9wcG9zaXRlcyBvZiB5b3VyIGRyaXZpbmcgZm9yY2VzLiBQcmVkaWN0aW5nIHlvdXIgb2JzdGFjbGVzIGJlZm9yZWhhbmQgaGVscHMgcmVkdWNlIHlvdXIgY2hhbmNlcyBvZiBiZWluZyBjYXVnaHQgb2ZmIGd1YXJkLCBhbGxvd2luZyB5b3UgdG8gaWRlbnRpZnkgZWFybHkgd2FybmluZyBzaWducyBhbmQgc2VsZi1jb3JyZWN0LjwvcD4KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiByZ2JhKDIzNSwgMCwgMSwgMC4wNCk7IHBhZGRpbmc6IDI1cHg7IGJvcmRlci1sZWZ0OiA0cHggc29saWQgdmFyKC0tYnJhbmQtcmVkKTsgYm9yZGVyLXJhZGl1czogMCAxMnB4IDEycHggMDsgbWFyZ2luLXRvcDogMzBweDsiPgogICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nIHN0eWxlPSJjb2xvcjogdmFyKC0tYnJhbmQtcmVkKTsgZGlzcGxheTogYmxvY2s7IG1hcmdpbi1ib3R0b206IDhweDsgZm9udC1zaXplOiAxLjFyZW07Ij5UaGUgSW5zdHJ1Y3Rpb25zOjwvc3Ryb25nPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luOiAwOyBjb2xvcjogdmFyKC0tdGV4dC1kYXJrKTsgZm9udC1zaXplOiAxcmVtOyBsaW5lLWhlaWdodDogMS42OyI+SW4gZWFjaCBvZiB0aGUgNyBzZWdtZW50cyBvZiBsaWZlLCB5b3Ugd2lsbCB3cml0ZSBhbiBpbmRlcGVuZGVudCBwcmVkaWN0aW9uIHN0YXRlbWVudC4gTmV4dCwgeW91IHdpbGwgY2F0ZWdvcml6ZSBhbmQgcmFuayB0aGUgMTUgcGFya2luZyBmb3JjZXMgZnJvbSB5b3VyIEhpZ2hlc3QgQ29uY2VybiAoIzEpIHRvIHlvdXIgTG93ZXN0IENvbmNlcm4gKCMxNSkgYmFzZWQgb24gdGhhdCBzZWdtZW50J3Mgc3BlY2lmaWMgZ29hbHMuPC9wPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8IS0tIHR5cGU9ImJ1dHRvbiIgYWRkZWQgdG8gYnlwYXNzIFdQIGZvcm0gc3VibWlzc2lvbiBvdmVycmlkZXMgLS0+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgaWQ9ImJ0bi1zdGFydCIgY2xhc3M9ImE3bXEtYnRuIiBzdHlsZT0ibWF4LXdpZHRoOiAzNTBweDsiPkJlZ2luIEFzc2Vzc21lbnQ8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIE1PRFVMRSBMQVlFUiAxOiBQUkVESUNUIE9CU1RBQ0xFUyBXUklUSU5HIFNQQUNFIC0tPgogICAgICAgICAgICA8ZGl2IGlkPSJ2aWV3LXZpc2lvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgYWxpZ24taXRlbXM6IGNlbnRlcjsgbWFyZ2luLWJvdHRvbTogMTVweDsiPgogICAgICAgICAgICAgICAgICAgIDxoMiBpZD0idmlzaW9uLWhlYWRlciIgc3R5bGU9ImNvbG9yOiB2YXIoLS1icmFuZC1yZWQpOyBmb250LXdlaWdodDogOTAwOyBmb250LXNpemU6IDEuMnJlbTsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgbWFyZ2luOiAwOyBsZXR0ZXItc3BhY2luZzogMXB4OyI+U2VnbWVudCAxIG9mIDc8L2gyPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiB2YXIoLS1icmFuZC1yZWQpOyBjb2xvcjogI2ZmZmZmZjsgcGFkZGluZzogNnB4IDE2cHg7IGJvcmRlci1yYWRpdXM6IDIwcHg7IGZvbnQtc2l6ZTogMC44NXJlbTsgZm9udC13ZWlnaHQ6IDgwMDsgbGV0dGVyLXNwYWNpbmc6IDFweDsiPlN0ZXAgMTogUHJlZGljdCBPYnN0YWNsZXM8L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImE3bXEtcHJvZ3Jlc3MtYmFyIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PGRpdiBpZD0idmlzaW9uLXByb2dyZXNzIiBjbGFzcz0iYTdtcS1wcm9ncmVzcy1maWxsIj48L2Rpdj48L2Rpdj4KCiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IG1hcmdpbi1ib3R0b206IDMwcHg7Ij4KICAgICAgICAgICAgICAgICAgICA8aDEgaWQ9InZpc2lvbi10aXRsZSIgY2xhc3M9ImNhbGlmb3JuaWEtZmIiIHN0eWxlPSJjb2xvcjogdmFyKC0tYnJhbmQtcmVkKTsgZm9udC1zaXplOiAzcmVtOyBtYXJnaW4tYm90dG9tOiA1cHg7IGZvbnQtd2VpZ2h0OiA5MDA7Ij5TZWdtZW50IFRpdGxlPC9oMT4KICAgICAgICAgICAgICAgICAgICA8cCBpZD0idmlzaW9uLWRlc2MiIHN0eWxlPSJjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7IGZvbnQtc2l6ZTogMS4ycmVtOyBmb250LXdlaWdodDogNjAwOyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBsZXR0ZXItc3BhY2luZzogMXB4OyI+Rm9jdXMgQXJlYTwvcD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8IS0tIEdlb21ldHJpYyBSZWZsZWN0aW9uIENhcmQgLS0+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiB2YXIoLS1pbnB1dC1iZyk7IHBhZGRpbmc6IDUwcHggMzBweDsgYm9yZGVyLXJhZGl1czogMjRweDsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsgYm94LXNoYWRvdzogMCAxMHB4IDMwcHggcmdiYSgwLDAsMCwwLjAzKTsgdGV4dC1hbGlnbjogY2VudGVyOyBwb3NpdGlvbjogcmVsYXRpdmU7IG92ZXJmbG93OiBoaWRkZW47IG1heC13aWR0aDogODAwcHg7IG1hcmdpbjogMCBhdXRvOyI+CiAgICAgICAgICAgICAgICAgICAgPCEtLSBJbnN0cnVjdGlvbmFsIEdlb21ldHJpYyBTaGFwZXMgLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyB0b3A6IC0zMHB4OyByaWdodDogLTMwcHg7IHdpZHRoOiAxMjBweDsgaGVpZ2h0OiAxMjBweDsgYmFja2dyb3VuZDogcmdiYSgyMzUsIDAsIDEsIDAuMDQpOyB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7IGJvcmRlci1yYWRpdXM6IDIwcHg7Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IGJvdHRvbTogMjBweDsgbGVmdDogLTIwcHg7IHdpZHRoOiA4MHB4OyBoZWlnaHQ6IDgwcHg7IGJvcmRlci1yYWRpdXM6IDUwJTsgYm9yZGVyOiA4cHggc29saWQgcmdiYSgyMzUsIDAsIDEsIDAuMSk7Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogNDBweDsgbGVmdDogNDBweDsgd2lkdGg6IDEycHg7IGhlaWdodDogMTJweDsgYm9yZGVyLXJhZGl1czogNTAlOyBiYWNrZ3JvdW5kOiB2YXIoLS1icmFuZC1yZWQpOyBvcGFjaXR5OiAwLjI7Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICA8aDMgaWQ9InZpc2lvbi1wcm9tcHQiIHN0eWxlPSJmb250LXdlaWdodDogOTAwOyBjb2xvcjogdmFyKC0tdGV4dC1kYXJrKTsgZm9udC1zaXplOiAxLjZyZW07IGxpbmUtaGVpZ2h0OiAxLjQ7IG1hcmdpbi1ib3R0b206IDI1cHg7IHBvc2l0aW9uOiByZWxhdGl2ZTsgei1pbmRleDogMjsiPlByb21wdDwvaDM+CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9ImNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTsgZm9udC1zaXplOiAxLjFyZW07IGZvbnQtc3R5bGU6IGl0YWxpYzsgbWF4LXdpZHRoOiA1NTBweDsgbWFyZ2luOiAwIGF1dG87IHBvc2l0aW9uOiByZWxhdGl2ZTsgei1pbmRleDogMjsgbGluZS1oZWlnaHQ6IDEuNjsiPlRha2UgYSBtb21lbnQgdG8gaW50ZXJuYWxseSByZWZsZWN0IG9uIHRoZSBvYnN0YWNsZXMgdGhhdCBjb3VsZCBzdGFsbCBvciBwYXJrIHlvdXIgcHJvZ3Jlc3MgaW4gdGhpcyBzZWdtZW50LiBWaXN1YWxpemUgcG90ZW50aWFsIHJlc2lzdGFuY2UgYmVmb3JlIHByb2NlZWRpbmcgdG8gc29ydCB5b3VyIHBhcmtpbmcgZm9yY2VzLjwvcD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IG1hcmdpbi10b3A6IDQwcHg7Ij4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgaWQ9ImJ0bi1uZXh0LXZpc2lvbiIgY2xhc3M9ImE3bXEtYnRuIiBzdHlsZT0ibWF4LXdpZHRoOiA0NTBweDsiIGRpc2FibGVkPlByb2NlZWQgdG8gTWF0cml4IFNvcnRpbmc8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwhLS0gTU9EVUxFIExBWUVSIDI6IEZPUkNFRCBCVUNLRVQgUkFOS0lORyBNQVRSSUNFUyAtLT4KICAgICAgICAgICAgPGRpdiBpZD0idmlldy1yYW5rIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyBhbGlnbi1pdGVtczogY2VudGVyOyBtYXJnaW4tYm90dG9tOiAxNXB4OyI+CiAgICAgICAgICAgICAgICAgICAgPGgyIGlkPSJyYW5rLWhlYWRlciIgc3R5bGU9ImNvbG9yOiB2YXIoLS1icmFuZC1yZWQpOyBmb250LXdlaWdodDogOTAwOyBmb250LXNpemU6IDEuMnJlbTsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgbWFyZ2luOiAwOyBsZXR0ZXItc3BhY2luZzogMXB4OyI+U2VnbWVudCAxIG9mIDc8L2gyPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiB2YXIoLS1icmFuZC1yZWQpOyBjb2xvcjogI2ZmZmZmZjsgcGFkZGluZzogNnB4IDE2cHg7IGJvcmRlci1yYWRpdXM6IDIwcHg7IGZvbnQtc2l6ZTogMC44NXJlbTsgZm9udC13ZWlnaHQ6IDgwMDsgbGV0dGVyLXNwYWNpbmc6IDFweDsiPlN0ZXAgMjogVGhyZWF0IFNvcnRpbmcgTWF0cml4PC9zcGFuPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhN21xLXByb2dyZXNzLWJhciIgYXJpYS1oaWRkZW49InRydWUiPjxkaXYgaWQ9InJhbmstcHJvZ3Jlc3MiIGNsYXNzPSJhN21xLXByb2dyZXNzLWZpbGwiPjwvZGl2PjwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXYgaWQ9InJhbmstaW5zdHJ1Y3Rpb25zLWNvbnRlbnQiIHN0eWxlPSJiYWNrZ3JvdW5kOiB2YXIoLS1pbnB1dC1iZyk7IHBhZGRpbmc6IDI1cHg7IGJvcmRlci1yYWRpdXM6IDE2cHg7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7IG1hcmdpbi1ib3R0b206IDMwcHg7IGNvbG9yOiB2YXIoLS10ZXh0LWRhcmspOyBmb250LXNpemU6IDEuMDVyZW07IGxpbmUtaGVpZ2h0OiAxLjY7Ij4KICAgICAgICAgICAgICAgICAgICA8IS0tIEluc3RydWN0aW9ucyBtYXBwZWQgZGlyZWN0bHkgdGhyb3VnaCBKYXZhU2NyaXB0IG9uIGNvbXBvbmVudCBtb3VudHMgLS0+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8aDMgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsgY29sb3I6IHZhcigtLXRleHQtZGFyayk7IGZvbnQtc2l6ZTogMS4zcmVtOyBtYXJnaW4tYm90dG9tOiAxNXB4OyBmb250LXdlaWdodDogOTAwOyI+V29yZCBCYW5rIChSZW1haW5pbmc6IDxzcGFuIGlkPSJwb29sLWNvdW50IiBhcmlhLWxpdmU9InBvbGl0ZSI+MTU8L3NwYW4+KTwvaDM+CiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJib3gtcG9vbCIgY2xhc3M9ImE3bXEtd29yZC1iYW5rIiBkYXRhLXRhcmdldD0icG9vbCIgcm9sZT0icmVnaW9uIiBhcmlhLWxhYmVsPSJXb3JkIEJhbmsgVGhyZWF0IFBvb2wiPjwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImE3bXEtZ3JpZC0zIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJib3gtdG9wIiBjbGFzcz0iYTdtcS1ib3ggYTdtcS1ib3gtdG9wIiBkYXRhLXRhcmdldD0idG9wIiByb2xlPSJyZWdpb24iIGFyaWEtbGFiZWw9IkhpZ2hlc3QgVGhyZWF0IENvbmNlcm5zIEJ1Y2tldCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImE3bXEtYm94LXRpdGxlIiBzdHlsZT0iY29sb3I6IHZhcigtLXRvcC10ZXh0KTsiPlByaW1hcnkgQ29uY2VybnMgKDxzcGFuIGlkPSJjb3VudC10b3AiIGFyaWEtbGl2ZT0icG9saXRlIj4wPC9zcGFuPi81KTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJsaXN0LXRvcCIgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogOHB4OyI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iYm94LW1pZCIgY2xhc3M9ImE3bXEtYm94IGE3bXEtYm94LW1pZCIgZGF0YS10YXJnZXQ9Im1pZCIgcm9sZT0icmVnaW9uIiBhcmlhLWxhYmVsPSJOZXV0cmFsIFRocmVhdCBDb25jZXJucyBCdWNrZXQiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhN21xLWJveC10aXRsZSIgc3R5bGU9ImNvbG9yOiB2YXIoLS1taWQtdGV4dCk7Ij5NaWRkbGUgNSBOZXV0cmFsICg8c3BhbiBpZD0iY291bnQtbWlkIiBhcmlhLWxpdmU9InBvbGl0ZSI+MDwvc3Bhbj4vNSk8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0ibGlzdC1taWQiIHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBnYXA6IDhweDsiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJib3gtYm90IiBjbGFzcz0iYTdtcS1ib3ggYTdtcS1ib3gtYm90IiBkYXRhLXRhcmdldD0iYm90IiByb2xlPSJyZWdpb24iIGFyaWEtbGFiZWw9IkRpc21pc3NlZCBUaHJlYXQgQ29uY2VybnMgQnVja2V0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYTdtcS1ib3gtdGl0bGUiIHN0eWxlPSJjb2xvcjogdmFyKC0tYm90LXRleHQpOyI+RGlzbWlzc2VkIFJpc2tzICg8c3BhbiBpZD0iY291bnQtYm90IiBhcmlhLWxpdmU9InBvbGl0ZSI+MDwvc3Bhbj4vNSk8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0ibGlzdC1ib3QiIHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBnYXA6IDhweDsiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBtYXJnaW4tdG9wOiA0MHB4OyI+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSJidG4tbmV4dC1yYW5rIiBjbGFzcz0iYTdtcS1idG4iIHN0eWxlPSJtYXgtd2lkdGg6IDQ1MHB4OyIgZGlzYWJsZWQ+Q29tcGxldGUgUmFua2luZ3MgdG8gQ29udGludWU8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwhLS0gTU9EVUxFIExBWUVSIDM6IFdIQVQgSUYgU0NFTkFSSU8gQ0hFQ0tMSVNUIFNFTEVDVElPTlMgLS0+CiAgICAgICAgICAgIDxkaXYgaWQ9InZpZXctd2hhdGlmcyIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4KICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0iY2FsaWZvcm5pYS1mYiIgc3R5bGU9ImNvbG9yOiB2YXIoLS1icmFuZC1yZWQpOyBmb250LXNpemU6IDIuNXJlbTsgdGV4dC1hbGlnbjogY2VudGVyOyBtYXJnaW4tYm90dG9tOiAxMHB4OyBmb250LXdlaWdodDogOTAwOyI+TXkgIldoYXQgSWYuLi4iIFNjZW5hcmlvczwvaDI+CiAgICAgICAgICAgICAgICA8cCBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7IG1hcmdpbi1ib3R0b206IDMwcHg7IGZvbnQtc2l6ZTogMS4xcmVtOyBmb250LXdlaWdodDogNTAwOyI+U2VsZWN0IHRoZSBzcGVjaWZpYyBzY2VuYXJpb3MgeW91IHByZWRpY3Qgd2lsbCAicGFyayIgeW91IG9yIHN0b3AgeW91IGZyb20gaW1wbGVtZW50aW5nIHlvdXIgc3RyYXRlZ2ljIHBsYW4uPC9wPgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJ3aGF0aWZzLWNvbnRhaW5lciIgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogNHB4OyI+CiAgICAgICAgICAgICAgICAgICAgPCEtLSBTY3JpcHQgYXV0byBtYXBzIGludGVybmFsIGFycmF5IGluZGljZXMgaGVyZSBkeW5hbWljYWxseSAtLT4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsgbWFyZ2luLXRvcDogNDBweDsiPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBpZD0iYnRuLXN1Ym1pdC13aGF0aWZzIiBjbGFzcz0iYTdtcS1idG4iIHN0eWxlPSJtYXgtd2lkdGg6IDQ1MHB4OyI+U3VibWl0ICYgR2VuZXJhdGUgUmlzayBBcmNoaXRlY3R1cmU8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwhLS0gTU9EVUxFIExBWUVSIDQ6IExPQURJTkcgU1BJTk5FUiBTWU5DIElOIFBST0dSRVNTIC0tPgogICAgICAgICAgICA8ZGl2IGlkPSJ2aWV3LWxvYWRpbmciIHN0eWxlPSJkaXNwbGF5OiBub25lOyB0ZXh0LWFsaWduOiBjZW50ZXI7IHBhZGRpbmc6IDEyMHB4IDIwcHg7Ij4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9IndpZHRoOiA5MHB4OyBoZWlnaHQ6IDkwcHg7IGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjM1LCAwLCAxLCAwLjEpOyBib3JkZXI6IDRweCBzb2xpZCB2YXIoLS1icmFuZC1yZWQpOyBib3JkZXItcmFkaXVzOiA1MCU7IG1hcmdpbjogMCBhdXRvIDM1cHg7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYTdtcS1zcGluIiBzdHlsZT0id2lkdGg6IDQ1cHg7IGhlaWdodDogNDVweDsgYm9yZGVyOiA1cHggc29saWQgdmFyKC0tYnJhbmQtYmx1ZSk7IGJvcmRlci10b3AtY29sb3I6IHRyYW5zcGFyZW50OyBib3JkZXItcmFkaXVzOiA1MCU7Ij48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJjYWxpZm9ybmlhLWZiIiBzdHlsZT0iZm9udC1zaXplOiAzcmVtOyBmb250LXdlaWdodDogOTAwOyBjb2xvcjogdmFyKC0tYnJhbmQtcmVkKTsgbWFyZ2luLWJvdHRvbTogMTVweDsiPlN5bnRoZXNpemluZyBSaXNrIEFyY2hpdGVjdHVyZS4uLjwvaDI+CiAgICAgICAgICAgICAgICA8cCBzdHlsZT0iY29sb3I6IHZhcigtLXRleHQtbXV0ZWQpOyBmb250LXNpemU6IDEuMnJlbTsgZm9udC13ZWlnaHQ6IDYwMDsiPlByb2Nlc3NpbmcgMTA1IHN0cnVjdHVyYWwgdmFyaWFibGVzIGFuZCBleGVjdXRpbmcgc2VjdXJlIGRhdGFiYXNlIHN1Ym1pc3Npb24gc2VxdWVuY2VzLjwvcD4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIE1PRFVMRSBMQVlFUiA1OiBDT01QUkVIRU5TSVZFIE9VVFBVVCBNQVRSSVggQU5EIEVWQUxVQVRJT05TIFJFUE9SVCAtLT4KICAgICAgICAgICAgPGRpdiBpZD0idmlldy1yZXN1bHRzIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgZmxleC13cmFwOiB3cmFwOyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsgbWFyZ2luLWJvdHRvbTogNDBweDsgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7IHBhZGRpbmctYm90dG9tOiAyNXB4OyBnYXA6IDE1cHg7Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9ImNhbGlmb3JuaWEtZmIiIHN0eWxlPSJmb250LXNpemU6IDNyZW07IGNvbG9yOiB2YXIoLS1icmFuZC1yZWQpOyBtYXJnaW4tYm90dG9tOiA1cHg7IGZvbnQtd2VpZ2h0OiA5MDA7Ij5QYXJraW5nIEZvcmNlcyBBcmNoaXRlY3R1cmU8L2gyPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT0iY29sb3I6IHZhcigtLXRleHQtbXV0ZWQpOyBmb250LXdlaWdodDogOTAwOyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBmb250LXNpemU6IDAuOXJlbTsgbGV0dGVyLXNwYWNpbmc6IDJweDsgbWFyZ2luOiAwOyI+UmlzayBBbmFseXNpcyBTeW50aGVzaXMgQ29tcGxldGU8L3A+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSJidG4tcHJpbnQiIGNsYXNzPSJuby1wcmludCIgc3R5bGU9ImJhY2tncm91bmQ6IHZhcigtLWlucHV0LWJnKTsgY29sb3I6IHZhcigtLWJyYW5kLXJlZCk7IGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWJyYW5kLXJlZCk7IHBhZGRpbmc6IDE0cHggMjhweDsgYm9yZGVyLXJhZGl1czogMTJweDsgZm9udC13ZWlnaHQ6IDkwMDsgY3Vyc29yOiBwb2ludGVyOyB0cmFuc2l0aW9uOiBhbGwgMC4yczsgYm94LXNoYWRvdzogMCA0cHggMTBweCByZ2JhKDAsMCwwLDAuMDUpOyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBmb250LXNpemU6IDAuOXJlbTsgbGV0dGVyLXNwYWNpbmc6IDFweDsiPvCflqjvuI8gU2F2ZSBhcyBQREY8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImE3bXEtZ3JpZC0yIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZXN1bHQtc2VjdGlvbiIgc3R5bGU9ImJhY2tncm91bmQ6IHZhcigtLXRvcC1iZyk7IGJvcmRlci1jb2xvcjogdmFyKC0tdG9wLWJvcmRlcik7IG1hcmdpbi1ib3R0b206IDA7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGgzIHN0eWxlPSJjb2xvcjogdmFyKC0tdG9wLXRleHQpOyBmb250LXdlaWdodDogOTAwOyBmb250LXNpemU6IDEuMnJlbTsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgbWFyZ2luLWJvdHRvbTogMTVweDsgbGV0dGVyLXNwYWNpbmc6IDFweDsiPlByaW1hcnkgUGFya2luZyBSb2FkYmxvY2tzPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9ImZvbnQtc2l6ZTogMXJlbTsgY29sb3I6IHZhcigtLXRvcC10ZXh0KTsgbWFyZ2luLWJvdHRvbTogMjBweDsgZm9udC13ZWlnaHQ6IDYwMDsgbGluZS1oZWlnaHQ6IDEuNTsiPkhpZ2hlc3QgdGhyZWF0IGNvbmNlbnRyYXRpb24gc2NvcmVzIGJhc2VkIG9uIHlvdXIgMS0xNSBtYXRoZW1hdGljYWwgcmFua2luZ3MgYWNyb3NzIGFsbCA3IHNlZ21lbnRzLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGlkPSJsaXN0LWRvbWluYW50IiBjbGFzcz0icmVzdWx0LWxpc3QiIHN0eWxlPSJjb2xvcjogdmFyKC0tdGV4dC1kYXJrKTsiPjwvdWw+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVzdWx0LXNlY3Rpb24iIHN0eWxlPSJiYWNrZ3JvdW5kOiB2YXIoLS1ib3QtYmcpOyBib3JkZXItY29sb3I6IHZhcigtLWJvdC1ib3JkZXIpOyBtYXJnaW4tYm90dG9tOiAwOyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBzdHlsZT0iY29sb3I6IHZhcigtLWJvdC10ZXh0KTsgZm9udC13ZWlnaHQ6IDkwMDsgZm9udC1zaXplOiAxLjJyZW07IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IG1hcmdpbi1ib3R0b206IDE1cHg7IGxldHRlci1zcGFjaW5nOiAxcHg7Ij5EaXNtaXNzZWQgUmlzayBGYWN0b3JzPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9ImZvbnQtc2l6ZTogMXJlbTsgY29sb3I6IHZhcigtLWJvdC10ZXh0KTsgbWFyZ2luLWJvdHRvbTogMjBweDsgZm9udC13ZWlnaHQ6IDYwMDsgbGluZS1oZWlnaHQ6IDEuNTsiPkVsZW1lbnRzIHJlcGVhdGVkbHkgcHVzaGVkIHRvIHlvdXIgQm90dG9tIDUgc2FjcmlmaWNlcy4gVGhlc2UgcmVwcmVzZW50IGFyZWFzIHdoZXJlIHlvdSBwb3NzZXNzIGxvdyByaXNrIGFueGlldHkuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8dWwgaWQ9Imxpc3Qtc2FjcmlmaWNlZCIgY2xhc3M9InJlc3VsdC1saXN0IiBzdHlsZT0iY29sb3I6IHZhcigtLXRleHQtZGFyayk7Ij48L3VsPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBpZD0idnVsbmVyYWJpbGl0aWVzLXNlY3Rpb24iIGNsYXNzPSJyZXN1bHQtc2VjdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IG1hcmdpbi10b3A6IDQwcHg7Ij4KICAgICAgICAgICAgICAgICAgICA8aDMgc3R5bGU9ImNvbG9yOiB2YXIoLS1icmFuZC1yZWQpOyBmb250LXdlaWdodDogOTAwOyBmb250LXNpemU6IDEuMnJlbTsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgbWFyZ2luLWJvdHRvbTogMTVweDsgbGV0dGVyLXNwYWNpbmc6IDFweDsiPkRvY3VtZW50ZWQgUGxhbiBWdWxuZXJhYmlsaXRpZXM8L2gzPgogICAgICAgICAgICAgICAgICAgIDx1bCBpZD0ibGlzdC13aGF0aWZzIiBzdHlsZT0ibGlzdC1zdHlsZTogbm9uZTsgcGFkZGluZzogMDsgbWFyZ2luOiAwOyBsaW5lLWhlaWdodDogMS44OyBmb250LXdlaWdodDogNjAwOyBmb250LXNpemU6IDEuMDVyZW07Ij48L3VsPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVzdWx0LXNlY3Rpb24iIHN0eWxlPSJwYWRkaW5nOiAwOyBvdmVyZmxvdzogaGlkZGVuOyBtYXJnaW4tdG9wOiA0MHB4OyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0icGFkZGluZzogMzBweDsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7IGJhY2tncm91bmQ6IHZhcigtLWlucHV0LWJnKTsiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDMgc3R5bGU9ImNvbG9yOiB2YXIoLS1icmFuZC1yZWQpOyBmb250LXdlaWdodDogOTAwOyBmb250LXNpemU6IDEuM3JlbTsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgbWFyZ2luOiAwOyBsZXR0ZXItc3BhY2luZzogMXB4OyI+RnVsbCBSaXNrIEFsaWdubWVudCBUYWJsZSBNYXRyaXg8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT0iY29sb3I6IHZhcigtLXRleHQtbXV0ZWQpOyBmb250LXNpemU6IDFyZW07IG1hcmdpbi10b3A6IDhweDsgZm9udC13ZWlnaHQ6IDYwMDsiPllvdXIgZXhhY3QgMS0xNSByYW5raW5nIGZvciBldmVyeSBmb3JjZSBmcmFtZXdvcmsgaXRlbSwgYWxvbmdzaWRlIGl0cyBmdWxsIGN1bXVsYXRpdmUgcG9pbnQgdGhyZWF0IGludGVuc2l0eS48L3A+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWF0cml4LXdyYXBwZXIiIHN0eWxlPSJib3JkZXI6bm9uZTsgbWFyZ2luOjA7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJtYXRyaXgtdGFibGUiIGlkPSJtYXRyaXgtdGFibGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBQb3B1bGF0ZWQgZHluYW1pY2FsbHkgdmlhIEpTIG9uIGNhbGN1bGF0aW9uIGV4ZWN1dGlvbiBjeWNsZXMgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVzdWx0LXNlY3Rpb24iIHN0eWxlPSJtYXJnaW4tdG9wOiA0MHB4OyI+CiAgICAgICAgICAgICAgICAgICAgPGgzIHN0eWxlPSJjb2xvcjogdmFyKC0tYnJhbmQtcmVkKTsgZm9udC13ZWlnaHQ6IDkwMDsgZm9udC1zaXplOiAxLjNyZW07IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IG1hcmdpbi1ib3R0b206IDIwcHg7IGxldHRlci1zcGFjaW5nOiAxcHg7Ij5TZWdtZW50LWJ5LVNlZ21lbnQgVGhyZWF0IFN1bW1hcnk8L2gzPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9InNlZ21lbnQtYnJlYWtkb3duLWNvbnRhaW5lciIgY2xhc3M9ImE3bXEtZ3JpZC0yIj48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlc3VsdC1zZWN0aW9uIiBzdHlsZT0ibWFyZ2luLXRvcDogNDBweDsiPgogICAgICAgICAgICAgICAgICAgIDxoMyBzdHlsZT0iY29sb3I6IHZhcigtLWJyYW5kLXJlZCk7IGZvbnQtd2VpZ2h0OiA5MDA7IGZvbnQtc2l6ZTogMS4ycmVtOyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBtYXJnaW4tYm90dG9tOiAyMHB4OyBsZXR0ZXItc3BhY2luZzogMXB4OyI+Q2hhcHRlciA2IENvcmUgQ291bnNlbG9yIERpYWdub3N0aWNzIEludHJvc3BlY3Rpb248L2gzPgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZGlzcGxheTogYmxvY2s7IGZvbnQtd2VpZ2h0OiA4MDA7IG1hcmdpbi1ib3R0b206IDEwcHg7IGZvbnQtc2l6ZTogMS4wNXJlbTsgY29sb3I6IHZhcigtLXRleHQtZGFyayk7Ij5XaGljaCBwYXJraW5nIGZvcmNlcyB3ZXJlIGFscmVhZHkgZmFtaWxpYXIgdG8geW91LCBhbmQgd2hpY2ggd2VyZSBuZXcsIHN1cnByaXNpbmcsIG9yIHB1enpsaW5nPzwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIHN0eWxlPSJ3aWR0aDogMTAwJTsgcGFkZGluZzogMTVweDsgYm9yZGVyLXJhZGl1czogOHB4OyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItbGlnaHQpOyBtaW4taGVpZ2h0OiAxMDBweDsgbWFyZ2luLWJvdHRvbTogMzBweDsgZm9udC1mYW1pbHk6IGluaGVyaXQ7IGZvbnQtc2l6ZTogMXJlbTsgYmFja2dyb3VuZDogdmFyKC0taW5wdXQtYmcpOyBjb2xvcjogdmFyKC0tdGV4dC1kYXJrKTsgcmVzaXplOiB2ZXJ0aWNhbDsiPjwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJkaXNwbGF5OiBibG9jazsgZm9udC13ZWlnaHQ6IDgwMDsgbWFyZ2luLWJvdHRvbTogMTBweDsgZm9udC1zaXplOiAxLjA1cmVtOyBjb2xvcjogdmFyKC0tdGV4dC1kYXJrKTsiPkhvdyBkbyB5b3UgaW50ZW5kIHRvIGFwcGx5IHdoYXQgeW91IGxlYXJuZWQgYWJvdXQgeW91ciBQcmltYXJ5IFBhcmtpbmcgT2JzdGFjbGVzIHRvIHJlc3BvbmQgd2lzZWx5PzwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIHN0eWxlPSJ3aWR0aDogMTAwJTsgcGFkZGluZzogMTVweDsgYm9yZGVyLXJhZGl1czogOHB4OyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItbGlnaHQpOyBtaW4taGVpZ2h0OiAxMDBweDsgZm9udC1mYW1pbHk6IGluaGVyaXQ7IGZvbnQtc2l6ZTogMXJlbTsgYmFja2dyb3VuZDogdmFyKC0taW5wdXQtYmcpOyBjb2xvcjogdmFyKC0tdGV4dC1kYXJrKTsgcmVzaXplOiB2ZXJ0aWNhbDsiPjwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1wcmludCIgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsgbWFyZ2luLXRvcDogNTBweDsiPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBpZD0iYnRuLXJlc3RhcnQiIHN0eWxlPSJiYWNrZ3JvdW5kOiBub25lOyBib3JkZXI6IG5vbmU7IGNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTsgZm9udC13ZWlnaHQ6IDkwMDsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IGN1cnNvcjogcG9pbnRlcjsgZm9udC1zaXplOiAxLjFyZW07IHRyYW5zaXRpb246IGNvbG9yIDAuMnM7IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IGxldHRlci1zcGFjaW5nOiAxcHg7Ij7wn5SEIFJlc3RhcnQgSW5pdGlhbGl6YXRpb24gU2VxdWVuY2U8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDwhLS0gU2NyaXB0cyBFeGVjdXRpb24gRW5naW5lIExheWVyIC0tPgogICAgPHNjcmlwdD4KICAgIC8qIDwhW0NEQVRBWyAqLwogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGZ1bmN0aW9uKCkgewoKICAgICAgICB2YXIgdGhlbWVCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGhlbWUtYnRuJyk7CiAgICAgICAgdmFyIGlzRGFyayA9IHRydWU7CiAgICAgICAgCiAgICAgICAgZnVuY3Rpb24gYXBwbHlUaGVtZSgpIHsKICAgICAgICAgICAgaWYgKGlzRGFyaykgeyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLXRoZW1lJywgJ2RhcmsnKTsgdGhlbWVCdG4udGV4dENvbnRlbnQgPSAn4piA77iPIExpZ2h0IE1vZGUnOyB9IAogICAgICAgICAgICBlbHNlIHsgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS10aGVtZScpOyB0aGVtZUJ0bi50ZXh0Q29udGVudCA9ICfwn4yZIERhcmsgTW9kZSc7IH0KICAgICAgICB9CiAgICAgICAgYXBwbHlUaGVtZSgpOwogICAgICAgIHRoZW1lQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7IGlzRGFyayA9ICFpc0Rhcms7IGFwcGx5VGhlbWUoKTsgfSk7CgogICAgICAgIHZhciBGT1JDRVMgPSBbCiAgICAgICAgICAgIHsgaWQ6ICdDb25maW5lbWVudCcsIGRlc2M6ICJjb25jZXJuZWQgSSB3aWxsIGJlIHJlc3RyaWN0ZWQsIHNpbGVuY2VkLCBvciBkZXByaXZlZCIgfSwgCiAgICAgICAgICAgIHsgaWQ6ICdDb25mbGljdCcsIGRlc2M6ICJjb25jZXJuZWQgSSB3aWxsIGRpc2FncmVlLCBvcHBvc2UsIHBvbGFyaXplLCBvciBjbGFzaCB3aXRoIG90aGVycyIgfSwKICAgICAgICAgICAgeyBpZDogJ0NvbmZvcm1pdHknLCBkZXNjOiAiY29uY2VybmVkIEkgd2lsbCBhc3NpbWlsYXRlLCBjb25zZW50IHRvIGltaXRhdGUgdGhlIGxpa2VuZXNzIG9yIGJlaGF2aW9yIG9mIG90aGVycyIgfSwgCiAgICAgICAgICAgIHsgaWQ6ICdDcml0aWNpc20nLCBkZXNjOiAiY29uY2VybmVkIEkgd2lsbCByZWNlaXZlIHVuZmF2b3JhYmxlIG9yIG5lZ2F0aXZlIGZlZWRiYWNrLCBldmFsdWF0aW9ucywgY3JpdGlxdWVzLCBvciByZXZpZXdzIiB9LAogICAgICAgICAgICB7IGlkOiAnRGFuZ2VyJywgZGVzYzogImNvbmNlcm5lZCBJIHdpbGwgYmUgdnVsbmVyYWJsZSwgZXhwb3NlZCwgYWJ1c2VkLCBvciBhdHRhY2tlZCIgfSwgCiAgICAgICAgICAgIHsgaWQ6ICdEZWZlcmVuY2UnLCBkZXNjOiAiY29uY2VybmVkIEkgd2lsbCBiZSBzdWJvcmRpbmF0ZSwgc3Vic2VydmllbnQsIHN1Ym1pc3NpdmUsIG9yIHlpZWxkIHRvIHRoZSB3aWxsIG9mIG90aGVycyIgfSwKICAgICAgICAgICAgeyBpZDogJ0ZhaWx1cmUnLCBkZXNjOiAiY29uY2VybmVkIEkgd2lsbCB3YXZlciwgZ2l2ZSB1cCwgd2l0aGRyYXcsIGFiYW5kb24sIG9yIGZhbGwgc2hvcnQiIH0sIAogICAgICAgICAgICB7IGlkOiAnSWdub3JhbmNlJywgZGVzYzogImNvbmNlcm5lZCBJIHdpbGwgYmUgdW5hd2FyZSwgdW5mYW1pbGlhciwgdW5pbmZvcm1lZCwgb3IgaW5leHBlcmllbmNlZCIgfSwKICAgICAgICAgICAgeyBpZDogJ0lsbG5lc3MnLCBkZXNjOiAiY29uY2VybmVkIEkgd2lsbCBiZWNvbWUgYW54aW91cywgYWZyYWlkLCBhbmdyeSwgZXhoYXVzdGVkLCBvciBpbXBhaXJlZCIgfSwgCiAgICAgICAgICAgIHsgaWQ6ICdJbW1vcmFsaXR5JywgZGVzYzogImNvbmNlcm5lZCBJIHdpbGwgYnJlYWsgdGhlIHJ1bGVzLCBhY3F1aXJlIHNvbWV0aGluZyBJIGFtIG5vdCBlbnRpdGxlZCB0bzsgZ2FpbiBhbiB1bmZhaXIgYWR2YW50YWdlIG9yIGluZnJpbmdlIHVwb24gdGhlIHJpZ2h0cyBvZiBvdGhlcnMiIH0sCiAgICAgICAgICAgIHsgaWQ6ICdJbmNvbnNwaWN1b3VzbmVzcycsIGRlc2M6ICJjb25jZXJuZWQgSSB3aWxsIGJlIHVubm90aWNlZCwgb3Zlcmxvb2tlZCwgb3IgbWFyZ2luYWxpemVkIiB9LCAKICAgICAgICAgICAgeyBpZDogJ0lzb2xhdGlvbicsIGRlc2M6ICJjb25jZXJuZWQgSSB3aWxsIGJlIGFsb25lLCBzZXBhcmF0ZWQsIGV4Y2x1ZGVkLCBhbGllbmF0ZWQsIG9yIHJlamVjdGVkIiB9LAogICAgICAgICAgICB7IGlkOiAnTG9zcycsIGRlc2M6ICJjb25jZXJuZWQgSSB3aWxsIGxldCBnbywgZGV0YWNoLCBkaXNjYXJkLCB2YWNhdGUsIG9yIGZvcmZlaXQgb2JqZWN0cyBvciBwcm9wZXJ0eSBJIHRyZWFzdXJlIiB9LCAKICAgICAgICAgICAgeyBpZDogJ05lZ2xpZ2VuY2UnLCBkZXNjOiAiY29uY2VybmVkIEkgd2lsbCBiZSBmb3JnZXRmdWwsIGNhcmVsZXNzLCBtYWtlIG1pc3Rha2VzLCBlcnJvcnMsIG9yIG9taXNzaW9ucyIgfSwgCiAgICAgICAgICAgIHsgaWQ6ICdQb3ZlcnR5JywgZGVzYzogImNvbmNlcm5lZCBJIHdpbGwgbGFjayBzdWZmaWNpZW50IGZ1bmRzIG9yIHJlc291cmNlcywgYmVjb21lIGluZGVidGVkLCBnbyB3aXRob3V0IiB9CiAgICAgICAgXTsKCiAgICAgICAgdmFyIFNFR01FTlRTID0gWwogICAgICAgICAgICB7IGlkOiAicGVyc29uYWwiLCB0aXRsZTogIlBlcnNvbmFsIiwgcHJvbXB0OiAiV2hhdCBvYnN0YWNsZXMgZG8geW91IHByZXN1bWUsIGV4cGVjdCwgb3IgYmVsaWV2ZSB3aWxsIHByZXZlbnQgeW91IGZyb20gaW1wbGVtZW50aW5nIHlvdXIgcGVyc29uYWwgcGxhbj8gKEZvY3VzOiBwaHlzaWNhbCwgZW1vdGlvbmFsLCBhbmQgbWVudGFsIGhlYWx0aCBvbmx5KSIsIHNob3J0X2NvZGU6ICJzMSIgfSwKICAgICAgICAgICAgeyBpZDogImludGVycGVyc29uYWwiLCB0aXRsZTogIkludGVycGVyc29uYWwiLCBwcm9tcHQ6ICJXaGF0IG9ic3RhY2xlcyBkbyB5b3UgcHJlc3VtZSwgZXhwZWN0LCBvciBiZWxpZXZlIHdpbGwgcHJldmVudCB5b3UgZnJvbSBpbXBsZW1lbnRpbmcgeW91ciBpbnRlcnBlcnNvbmFsIHBsYW4/IChGb2N1czogaHVtYW4gaW50ZXJhY3Rpb25zIG9ubHkpIiwgc2hvcnRfY29kZTogInMyIiB9LAogICAgICAgICAgICB7IGlkOiAiY2FyZWVyIiwgdGl0bGU6ICJDYXJlZXIiLCBwcm9tcHQ6ICJXaGF0IG9ic3RhY2xlcyBkbyB5b3UgcHJlc3VtZSwgZXhwZWN0LCBvciBiZWxpZXZlIHdpbGwgcHJldmVudCB5b3UgZnJvbSBpbXBsZW1lbnRpbmcgeW91ciBjYXJlZXIgcGxhbj8gKEZvY3VzOiA8c3BhbiBjbGFzcz1cJ2E3bXEtdG9vbHRpcFwnIGRhdGEtdG9vbHRpcD1cJ2Egd29yayBwYXRoIHlvdSBzdHJvbmdseSBiZWxpZXZlIGlzIHlvdXIgY2FsbGluZywgeW91ciBnaWZ0LCBvciB5b3VyIHB1cnBvc2UgaW4gbGlmZSwgZXZlbiBpZiB5b3UgZG8gbm90IHJlY2VpdmUgY29tcGVuc2F0aW9uLlwnPnZvY2F0aW9uPC9zcGFuPiwgPHNwYW4gY2xhc3M9XCdhN21xLXRvb2x0aXBcJyBkYXRhLXRvb2x0aXA9XCdhIGdlbmVyYWwgdGVybSB1c2VkIHRvIGRlc2NyaWJlIHdvcmsgeW91IGFyZSBwYWlkIHRvIHBlcmZvcm0gdGhhdCBvY2N1cGllcyBhIHNpZ25pZmljYW50IGFtb3VudCBvZiB5b3VyIHRpbWU7IHZzLiBhIGpvYiwgd2hpY2ggaXMgYSBkdXR5LCBjaG9yZSwgb3IgdGFzayBhc3NpZ25lZCB0byBhbiBpbmRpdmlkdWFsIHRoYXQgaXMgcm91dGluZWx5IHBlcmZvcm1lZCB3aXRoIG9yIHdpdGhvdXQgcGF5LlwnPm9jY3VwYXRpb248L3NwYW4+LCBvciA8c3BhbiBjbGFzcz1cJ2E3bXEtdG9vbHRpcFwnIGRhdGEtdG9vbHRpcD1cJ2Egd29yayBwYXRoIHdpdGggYSBzZXQgb2Ygc3RhbmRhcmRzIGFuZCBjb2RlIG9mIGV0aGljcyBlc3RhYmxpc2hlZCBieSBhIHBlZXIgZ3JvdXAgdGhhdCByZXF1aXJlcyB5b3UgdG8gdGFrZSBhbiBvYXRoLCBwbGVkZ2UsIG9yIHByb2Zlc3MgdG8gdXBob2xkLlwnPnByb2Zlc3Npb248L3NwYW4+IG9ubHkpIiwgc2hvcnRfY29kZTogInMzIiB9LAogICAgICAgICAgICB7IGlkOiAiZmluYW5jaWFsIiwgdGl0bGU6ICJGaW5hbmNpYWwiLCBwcm9tcHQ6ICJXaGF0IG9ic3RhY2xlcyBkbyB5b3UgcHJlc3VtZSwgZXhwZWN0LCBvciBiZWxpZXZlIHdpbGwgcHJldmVudCB5b3UgZnJvbSBpbXBsZW1lbnRpbmcgeW91ciBmaW5hbmNpYWwgcGxhbj8gKEZvY3VzOiBkZXNpcmVkIGluY29tZSBsZXZlbCBvbmx5KSIsIHNob3J0X2NvZGU6ICJzNCIgfSwKICAgICAgICAgICAgeyBpZDogImVudmlyb25tZW50YWwiLCB0aXRsZTogIkVudmlyb25tZW50YWwiLCBwcm9tcHQ6ICJXaGF0IG9ic3RhY2xlcyBkbyB5b3UgcHJlc3VtZSwgZXhwZWN0LCBvciBiZWxpZXZlIHdpbGwgcHJldmVudCB5b3UgZnJvbSBpbXBsZW1lbnRpbmcgeW91ciBlbnZpcm9ubWVudGFsIHBsYW4/IChGb2N1czogY29tbXVuaXR5IGFuZCBpbW1lZGlhdGUgc3Vycm91bmRpbmdzIG9ubHkpIiwgc2hvcnRfY29kZTogInM1IiB9LAogICAgICAgICAgICB7IGlkOiAiZWR1Y2F0aW9uYWwiLCB0aXRsZTogIkVkdWNhdGlvbmFsIiwgcHJvbXB0OiAiV2hhdCBvYnN0YWNsZXMgZG8geW91IHByZXN1bWUsIGV4cGVjdCwgb3IgYmVsaWV2ZSB3aWxsIHByZXZlbnQgeW91IGZyb20gaW1wbGVtZW50aW5nIHlvdXIgZWR1Y2F0aW9uYWwgcGxhbj8gKEZvY3VzOiBkZXNpcmVkIGxldmVsIG9mIGxlYXJuaW5nIG9ubHkpIiwgc2hvcnRfY29kZTogInM2IiB9LAogICAgICAgICAgICB7IGlkOiAic3Bpcml0dWFsIiwgdGl0bGU6ICJTcGlyaXR1YWwiLCBwcm9tcHQ6ICJXaGF0IG9ic3RhY2xlcyBkbyB5b3UgcHJlc3VtZSwgZXhwZWN0LCBvciBiZWxpZXZlIHdpbGwgcHJldmVudCB5b3UgZnJvbSBpbXBsZW1lbnRpbmcgeW91ciBzcGlyaXR1YWwgcGxhbj8gKEZvY3VzOiBtb3JhbCwgb3IgZXRoaWNhbCBiZWxpZWZzIGFuZCBwcmFjdGljZXMgb25seSkiLCBzaG9ydF9jb2RlOiAiczciIH0KICAgICAgICBdOwoKICAgICAgICB2YXIgV0hBVF9JRlMgPSBbCiAgICAgICAgICAgIHsgaWQ6ICJ3aV8xIiwgdGV4dDogIldoYXQgaWYgSSBuZWVkIHBlcm1pc3Npb24gdG8gYmVnaW4sIGFwcHJvdmFsIHRvIGVuZCwgb3IgYW0gbGFiZWxlZCBvciBzdGVyZW90eXBlZD8gKENvbmZpbmVtZW50KSIgfSwKICAgICAgICAgICAgeyBpZDogIndpXzIiLCB0ZXh0OiAiV2hhdCBpZiBJIGhhdmUgdG8gZ2V0IGFsb25nIHdpdGggZGlmZmljdWx0IHBlb3BsZSwgZGlzYWdyZWUgd2l0aCBhdXRob3JpdHksIG9yIGV4cGVyaWVuY2UgcmV0YWxpYXRpb24/IChDb25mbGljdCkiIH0sCiAgICAgICAgICAgIHsgaWQ6ICJ3aV8zIiwgdGV4dDogIldoYXQgaWYgSSBhbSBjb21wYXJlZCB0byBvdGhlcnMgb3IgaGF2ZSB0byBjaGFuZ2UgbXkgYXBwZWFyYW5jZSwgbGFuZ3VhZ2UsIG9yIGxpZmVzdHlsZT8gKENvbmZvcm1pdHkpIiB9LAogICAgICAgICAgICB7IGlkOiAid2lfNCIsIHRleHQ6ICJXaGF0IGlmIEkgYW0gdG9sZCBJIGFtIHRvbyB5b3VuZy9vbGQsIHBlcmZvcm0gcG9vcmx5LCBvciBhbSBub3QgcXVhbGlmaWVkPyAoQ3JpdGljaXNtKSIgfSwKICAgICAgICAgICAgeyBpZDogIndpXzUiLCB0ZXh0OiAiV2hhdCBpZiBJIHRoaW5rIGl0IGlzIHJpc2t5IG9yIGhhemFyZG91cywgb3IgZmluZCBteXNlbGYgaW50aW1pZGF0ZWQgb3IgdGhyZWF0ZW5lZD8gKERhbmdlcikiIH0sCiAgICAgICAgICAgIHsgaWQ6ICJ3aV82IiwgdGV4dDogIldoYXQgaWYgSSBmZWVsIHVud29ydGh5LCBub3QgaW1wb3J0YW50IGVub3VnaCwgb3IgaGF2ZSB0byAnc3RheSBpbiBteSBwbGFjZSc/IChEZWZlcmVuY2UpIiB9LAogICAgICAgICAgICB7IGlkOiAid2lfNyIsIHRleHQ6ICJXaGF0IGlmIEkgdHJpZWQgdGhhdCBhbHJlYWR5LCBkb24ndCB0aGluayBpdCB3aWxsIHdvcmssIG9yIGZlZWwgbGlrZSBxdWl0dGluZy9naXZpbmcgdXA/IChGYWlsdXJlKSIgfSwKICAgICAgICAgICAgeyBpZDogIndpXzgiLCB0ZXh0OiAiV2hhdCBpZiBJIGFtIG5vdCBwcmVwYXJlZCwgaGF2ZSBuZXZlciBiZWVuIHRhdWdodCBob3csIG9yIGFtIG5vdCBzbWFydCBlbm91Z2g/IChJZ25vcmFuY2UpIiB9LAogICAgICAgICAgICB7IGlkOiAid2lfOSIsIHRleHQ6ICJXaGF0IGlmIEkgZmluZCBpdCBkaWZmaWN1bHQgdG8gcmVzdCwgZ2V0IHNpY2svaW5qdXJlZCwgb3IgYW0gZGlhZ25vc2VkIHdpdGggYSBkaXNhYmlsaXR5PyAoSWxsbmVzcykiIH0sCiAgICAgICAgICAgIHsgaWQ6ICJ3aV8xMCIsIHRleHQ6ICJXaGF0IGlmIEkgYnJlYWsgYSBwcm9taXNlLCBsb29rIHRoZSBvdGhlciB3YXksIGNoZWF0LCBvciBnZXQgc3VlZC9hcnJlc3RlZD8gKEltbW9yYWxpdHkpIiB9LAogICAgICAgICAgICB7IGlkOiAid2lfMTEiLCB0ZXh0OiAiV2hhdCBpZiBteSBpZGVhcyBhcmVuJ3QgdGFrZW4gc2VyaW91c2x5LCBjb250cmlidXRpb25zIGFyZSBpZ25vcmVkLCBvciBJIGZlZWwgaW52aXNpYmxlPyAoSW5jb25zcGljdW91c25lc3MpIiB9LAogICAgICAgICAgICB7IGlkOiAid2lfMTIiLCB0ZXh0OiAiV2hhdCBpZiBJIGFtIG5vdCB3ZWxjb21lL2Nvbm5lY3RlZCwgb3IgZmluZCBteXNlbGYgbGVmdCBvdXQsIGFiYW5kb25lZCwgb3IgbG9uZWx5PyAoSXNvbGF0aW9uKSIgfSwKICAgICAgICAgICAgeyBpZDogIndpXzEzIiwgdGV4dDogIldoYXQgaWYgSSBoYXZlIHRvIGxlYXZlIGhvbWUsIHJlbG9jYXRlLCBzaGFyZS9sZW5kLCBvciBzZWUgdGhpbmdzIHN0b2xlbi9kZXN0cm95ZWQ/IChMb3NzKSIgfSwKICAgICAgICAgICAgeyBpZDogIndpXzE0IiwgdGV4dDogIldoYXQgaWYgSSB0YWtlIG9uIHRhc2tzIGJleW9uZCBteSB3b3JrbG9hZCwgb3IgZmFjZSBzdHJpY3QgZGVhZGxpbmVzIGFuZCBkZXRhaWxlZCBzcGVjcz8gKE5lZ2xpZ2VuY2UpIiB9LAogICAgICAgICAgICB7IGlkOiAid2lfMTUiLCB0ZXh0OiAiV2hhdCBpZiBpdCBpcyBleHBlbnNpdmUsIHVuLXByb2ZpdGFibGUsIG9yIEkgcnVuIG91dCBvZiBtb25leSBhbmQgbG9zZSBlbXBsb3ltZW50PyAoUG92ZXJ0eSkiIH0KICAgICAgICBdOwoKICAgICAgICB2YXIgY3VycmVudFNlZ0lkeCA9IDA7CiAgICAgICAgdmFyIGFwcERhdGEgPSBbXTsgCiAgICAgICAgdmFyIHNlbGVjdGVkV2hhdElmcyA9IFtdOwoKICAgICAgICBmdW5jdGlvbiBkaXNwbGF5QWN0aXZlUGFuZWwocGFuZWxJZCkgewogICAgdmFyIHBhbmVscyA9IFsndmlldy1pbnRybycsICd2aWV3LXZpc2lvbicsICd2aWV3LXJhbmsnLCAndmlldy13aGF0aWZzJywgJ3ZpZXctcXVpeicsICd2aWV3LWxvYWRpbmcnLCAndmlldy1yZXN1bHRzJ107CiAgICBwYW5lbHMuZm9yRWFjaChmdW5jdGlvbihpZCkgewogICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKICAgICAgICBpZiAoZWwpIGVsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICB9KTsKICAgIAogICAgdmFyIHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHBhbmVsSWQpOwogICAgaWYgKHRhcmdldCkgdGFyZ2V0LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgd2luZG93LnNjcm9sbFRvKHsgdG9wOiAwLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7CgogICAgLy8gSGlkZSB0aGUgJ1NhdmUgJiBSZXR1cm4nIGJ1dHRvbiB3aGVuIG9uIExvYWRpbmcgb3IgUmVzdWx0cyBzY3JlZW5zCiAgICB2YXIgc2F2ZUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG4tc2F2ZS1yZXR1cm4nKTsKICAgIGlmIChzYXZlQnRuKSB7CiAgICAgICAgaWYgKHBhbmVsSWQgPT09ICd2aWV3LWxvYWRpbmcnIHx8IHBhbmVsSWQgPT09ICd2aWV3LXJlc3VsdHMnKSB7CiAgICAgICAgICAgIHNhdmVCdG4uc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzYXZlQnRuLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJzsKICAgICAgICB9CiAgICB9Cn0KCmNvbnN0IFNBVkVfS0VZX1BGID0gJ2E3bXFfcGZfcHJvZ3Jlc3MnOwoKZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi1zYXZlLXJldHVybicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgewogICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgaWYgKGFwcERhdGEubGVuZ3RoID4gMCkgewogICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNBVkVfS0VZX1BGLCBKU09OLnN0cmluZ2lmeSh7CiAgICAgICAgICAgIHNhdmVkSW5kZXg6IGN1cnJlbnRTZWdJZHgsCiAgICAgICAgICAgIHNhdmVkRGF0YTogYXBwRGF0YSwKICAgICAgICAgICAgc2F2ZWRXaGF0SWZzOiBzZWxlY3RlZFdoYXRJZnMKICAgICAgICB9KSk7CiAgICAgICAgYWxlcnQoIlByb2dyZXNzIHNhdmVkIHN1Y2Nlc3NmdWxseSEgWW91IGNhbiBzYWZlbHkgbGVhdmUgdGhpcyBwYWdlLiIpOwogICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJy9kYXNoYm9hcmQnOwogICAgfQp9KTsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLXN0YXJ0JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsKICAgIGNvbnN0IHNhdmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oU0FWRV9LRVlfUEYpOwogICAgCiAgICBpZiAoc2F2ZWQpIHsKICAgICAgICAvLyBSZXN0b3JlIGZyb20gTG9jYWxTdG9yYWdlCiAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShzYXZlZCk7CiAgICAgICAgYXBwRGF0YSA9IHBhcnNlZC5zYXZlZERhdGE7CiAgICAgICAgY3VycmVudFNlZ0lkeCA9IHBhcnNlZC5zYXZlZEluZGV4OwogICAgICAgIHNlbGVjdGVkV2hhdElmcyA9IHBhcnNlZC5zYXZlZFdoYXRJZnMgfHwgW107CiAgICAgICAgCiAgICAgICAgLy8gUm91dGUgYmFjayB0byB0aGUgY29ycmVjdCBzY3JlZW4KICAgICAgICBpZiAoY3VycmVudFNlZ0lkeCA+PSA3KSB7CiAgICAgICAgICAgIHJlbmRlcldoYXRJZnNTY3JlZW4oKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZW5kZXJWaXNpb25TY3JlZW4oKTsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIC8vIEZyZXNoIFN0YXJ0IChZb3VyIG9yaWdpbmFsIGxvZ2ljKQogICAgICAgIGFwcERhdGEgPSBbXTsKICAgICAgICBzZWxlY3RlZFdoYXRJZnMgPSBbXTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IFNFR01FTlRTLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBzaHVmZmxlZCA9IEZPUkNFUy5zbGljZSgpOwogICAgICAgICAgICBmb3IgKHZhciBrID0gc2h1ZmZsZWQubGVuZ3RoIC0gMTsgayA+IDA7IGstLSkgewogICAgICAgICAgICAgICAgdmFyIGogPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoayArIDEpKTsKICAgICAgICAgICAgICAgIHZhciB0ID0gc2h1ZmZsZWRba107IHNodWZmbGVkW2tdID0gc2h1ZmZsZWRbal07IHNodWZmbGVkW2pdID0gdDsKICAgICAgICAgICAgfQogICAgICAgICAgICBhcHBEYXRhLnB1c2goeyAKICAgICAgICAgICAgICAgIGlkOiBTRUdNRU5UU1tpXS5pZCwgCiAgICAgICAgICAgICAgICB0aXRsZTogU0VHTUVOVFNbaV0udGl0bGUsIAogICAgICAgICAgICAgICAgcHJvbXB0OiBTRUdNRU5UU1tpXS5wcm9tcHQsIAogICAgICAgICAgICAgICAgc2hvcnRfY29kZTogU0VHTUVOVFNbaV0uc2hvcnRfY29kZSwgCiAgICAgICAgICAgICAgICB2aXNpb246ICIiLCAKICAgICAgICAgICAgICAgIHRvcDogW10sIG1pZDogW10sIGJvdDogW10sIHBvb2w6IHNodWZmbGVkIAogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgY3VycmVudFNlZ0lkeCA9IDA7CiAgICAgICAgcmVuZGVyVmlzaW9uU2NyZWVuKCk7CiAgICB9Cn0pOwoKICAgICAgICB2YXIgcmVmbGVjdGlvblRpbWVyOwoKICAgICAgICBmdW5jdGlvbiByZW5kZXJWaXNpb25TY3JlZW4oKSB7CiAgICAgICAgICAgIHZhciBzZWcgPSBhcHBEYXRhW2N1cnJlbnRTZWdJZHhdOwogICAgICAgICAgICB2YXIgaGRyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Zpc2lvbi1oZWFkZXInKTsKICAgICAgICAgICAgaWYoaGRyKSBoZHIudGV4dENvbnRlbnQgPSAiU2VnbWVudCAiICsgKGN1cnJlbnRTZWdJZHggKyAxKSArICIgb2YgNzogIiArIHNlZy50aXRsZTsKICAgICAgICAgICAgdmFyIHR0bCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2aXNpb24tdGl0bGUnKTsKICAgICAgICAgICAgaWYodHRsKSB0dGwudGV4dENvbnRlbnQgPSBzZWcudGl0bGU7CiAgICAgICAgICAgIHZhciBwcm9tcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndmlzaW9uLXByb21wdCcpOwogICAgICAgICAgICBpZihwcm9tcHQpIHByb21wdC5pbm5lckhUTUwgPSBzZWcucHJvbXB0OwogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHByb2cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndmlzaW9uLXByb2dyZXNzJyk7CiAgICAgICAgICAgIGlmKHByb2cpIHByb2cuc3R5bGUud2lkdGggPSAoKGN1cnJlbnRTZWdJZHggLyA3KSAqIDEwMCkgKyAiJSI7CiAgICAgICAgICAgIAogICAgICAgICAgICBkaXNwbGF5QWN0aXZlUGFuZWwoJ3ZpZXctdmlzaW9uJyk7CgogICAgICAgICAgICAvLyAxNS1TZWNvbmQgU2lsZW50IFRpbWVyIChObyB2aXNpYmxlIGNvdW50ZG93biBudW1iZXJzKQogICAgICAgICAgICB2YXIgYnRuTmV4dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG4tbmV4dC12aXNpb24nKTsKICAgICAgICAgICAgaWYoYnRuTmV4dCkgewogICAgICAgICAgICAgICAgYnRuTmV4dC5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgICAgICAgICBidG5OZXh0LnRleHRDb250ZW50ID0gIlByb2NlZWQgdG8gTWF0cml4IFNvcnRpbmciOwogICAgICAgICAgICAgICAgaWYocmVmbGVjdGlvblRpbWVyKSBjbGVhclRpbWVvdXQocmVmbGVjdGlvblRpbWVyKTsKICAgICAgICAgICAgICAgIHJlZmxlY3Rpb25UaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgYnRuTmV4dC5kaXNhYmxlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgfSwgMTUwMDApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLW5leHQtdmlzaW9uJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsgCiAgICAgICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkgcmVuZGVyUmFua2luZ1NjcmVlbigpOyAKICAgICAgICB9KTsKCiAgICAgICAgZnVuY3Rpb24gcmVuZGVyUmFua2luZ1NjcmVlbigpIHsKICAgICAgICAgICAgdmFyIHNlZyA9IGFwcERhdGFbY3VycmVudFNlZ0lkeF07CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyYW5rLWhlYWRlcicpLnRleHRDb250ZW50ID0gIlNlZ21lbnQgIiArIChjdXJyZW50U2VnSWR4ICsgMSkgKyAiIG9mIDc6ICIgKyBzZWcudGl0bGU7CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgaW5zdEh0bWwgPSAiPHAgc3R5bGU9J21hcmdpbi1ib3R0b206IDVweDsnPlJhbmsgZWFjaCBwYXJraW5nIGZvcmNlIGluIG9yZGVyIG9mIGNvbmNlcm4gdG8geW91ciA8c3Ryb25nPiIgKyBzZWcudGl0bGUgKyAiPC9zdHJvbmc+IHBsYW4uPC9wPjxwIHN0eWxlPSdtYXJnaW4tYm90dG9tOiA1cHg7Jz48c3Ryb25nPlJhbmsgeW91ciBoaWdoZXN0IGNvbmNlcm4gIzEuIFJhbmsgeW91ciBsb3dlc3QgY29uY2VybiAjMTUuPC9zdHJvbmc+IEVhY2ggbnVtYmVyIG11c3QgYmUgdXNlZCBhbmQgbWF5IG9ubHkgYmUgdXNlZCBvbmNlLjwvcD48cCBzdHlsZT0nbWFyZ2luOiAwOyBmb250LXNpemU6IDAuODVyZW07IGNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTsnPjxlbT4oRHJhZyBpdGVtcyBpbnRvIGJ1Y2tldHMsIGRyb3AgdGhlbSBvbnRvIG90aGVyIGNhcmRzIHRvIHN3YXAsIG9yIHVzZSBkaXJlY3Rpb25hbCBhcnJvdyBjbGlja3MgdG8gbG9jayByYW5raW5ncy4pPC9lbT48L3A+IjsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JhbmstaW5zdHJ1Y3Rpb25zLWNvbnRlbnQnKS5pbm5lckhUTUwgPSBpbnN0SHRtbDsKICAgICAgICAgICAgCiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyYW5rLXByb2dyZXNzJykuc3R5bGUud2lkdGggPSAoKChjdXJyZW50U2VnSWR4ICsgMC41KSAvIDcpICogMTAwKSArICIlIjsKICAgICAgICAgICAgcmVuZGVyQm94ZXMoKTsKICAgICAgICAgICAgZGlzcGxheUFjdGl2ZVBhbmVsKCd2aWV3LXJhbmsnKTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGNsZWFyQm94KGJveCkgeyAKICAgICAgICAgICAgaWYoYm94KSB7IHdoaWxlIChib3guZmlyc3RDaGlsZCkgeyBib3gucmVtb3ZlQ2hpbGQoYm94LmZpcnN0Q2hpbGQpOyB9IH0KICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHJlbmRlckJveGVzKCkgewogICAgICAgICAgICB2YXIgc2VnID0gYXBwRGF0YVtjdXJyZW50U2VnSWR4XTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBib3hQb29sID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JveC1wb29sJyk7CiAgICAgICAgICAgIHZhciBsaXN0VG9wID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpc3QtdG9wJyk7CiAgICAgICAgICAgIHZhciBsaXN0TWlkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpc3QtbWlkJyk7CiAgICAgICAgICAgIHZhciBsaXN0Qm90ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpc3QtYm90Jyk7CgogICAgICAgICAgICBjbGVhckJveChib3hQb29sKTsgY2xlYXJCb3gobGlzdFRvcCk7IGNsZWFyQm94KGxpc3RNaWQpOyBjbGVhckJveChsaXN0Qm90KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwb29sLWNvdW50JykudGV4dENvbnRlbnQgPSBzZWcucG9vbC5sZW5ndGg7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb3VudC10b3AnKS50ZXh0Q29udGVudCA9IHNlZy50b3AubGVuZ3RoOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY291bnQtbWlkJykudGV4dENvbnRlbnQgPSBzZWcubWlkLmxlbmd0aDsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvdW50LWJvdCcpLnRleHRDb250ZW50ID0gc2VnLmJvdC5sZW5ndGg7CgogICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2VnLnBvb2wubGVuZ3RoOyBpKyspIHsgYm94UG9vbC5hcHBlbmRDaGlsZChjcmVhdGVDaGlwKHNlZy5wb29sW2ldKSk7IH0KICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHNlZy50b3AubGVuZ3RoOyBpKyspIHsgbGlzdFRvcC5hcHBlbmRDaGlsZChjcmVhdGVSYW5rZWRDYXJkKHNlZy50b3BbaV0sICd0b3AnLCBpKSk7IH0KICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHNlZy5taWQubGVuZ3RoOyBpKyspIHsgbGlzdE1pZC5hcHBlbmRDaGlsZChjcmVhdGVSYW5rZWRDYXJkKHNlZy5taWRbaV0sICdtaWQnLCBpKSk7IH0KICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHNlZy5ib3QubGVuZ3RoOyBpKyspIHsgbGlzdEJvdC5hcHBlbmRDaGlsZChjcmVhdGVSYW5rZWRDYXJkKHNlZy5ib3RbaV0sICdib3QnLCBpKSk7IH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHZhbGlkYXRlUmFua2luZygpOwogICAgICAgIH0KCiAgICAgICAgLy8gUGFyZW50IERyb3AgWm9uZXMgKEJ1Y2tldHMpCiAgICAgICAgdmFyIGRyb3Bab25lcyA9IFsnYm94LXBvb2wnLCAnYm94LXRvcCcsICdib3gtbWlkJywgJ2JveC1ib3QnXTsKICAgICAgICBkcm9wWm9uZXMuZm9yRWFjaChmdW5jdGlvbih6b25lSWQpIHsKICAgICAgICAgICAgdmFyIHpvbmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh6b25lSWQpOwogICAgICAgICAgICBpZih6b25lKSB7CiAgICAgICAgICAgICAgICB6b25lLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgZnVuY3Rpb24oZSkgeyBlLnByZXZlbnREZWZhdWx0KCk7IHRoaXMuY2xhc3NMaXN0LmFkZCgnZHJhZy1vdmVyJyk7IH0pOwogICAgICAgICAgICAgICAgem9uZS5hZGRFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCBmdW5jdGlvbihlKSB7IHRoaXMuY2xhc3NMaXN0LnJlbW92ZSgnZHJhZy1vdmVyJyk7IH0pOwogICAgICAgICAgICAgICAgem9uZS5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLmNsYXNzTGlzdC5yZW1vdmUoJ2RyYWctb3ZlcicpOwogICAgICAgICAgICAgICAgICAgIHZhciBmb3JjZUlkID0gZS5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgndGV4dC9wbGFpbicpOwogICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2VMb2MgPSBlLmRhdGFUcmFuc2Zlci5nZXREYXRhKCdzb3VyY2VMb2MnKTsKICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0TG9jID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGFyZ2V0Jyk7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3JjZUlkIHx8IHNvdXJjZUxvYyA9PT0gdGFyZ2V0TG9jKSByZXR1cm47CgogICAgICAgICAgICAgICAgICAgIHZhciBzZWcgPSBhcHBEYXRhW2N1cnJlbnRTZWdJZHhdOwogICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRMb2MgIT09ICdwb29sJyAmJiBzZWdbdGFyZ2V0TG9jXS5sZW5ndGggPj0gNSkgewogICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgnQnVja2V0IHNlbGVjdGlvbiBjYXBhY2l0eSBsaW1pdGVkIHRvIDUgZWxlbWVudHMgbWF4aW11bS4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgdmFyIGZvcmNlT2JqID0gc2VnW3NvdXJjZUxvY10uZmluZChmdW5jdGlvbihmKSB7IHJldHVybiBmLmlkID09PSBmb3JjZUlkOyB9KTsKICAgICAgICAgICAgICAgICAgICBpZihmb3JjZU9iaikgeyBtb3ZlSXRlbShmb3JjZU9iaiwgc291cmNlTG9jLCB0YXJnZXRMb2MpOyB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICBmdW5jdGlvbiBjcmVhdGVDaGlwKGZvcmNlT2JqKSB7CiAgICAgICAgICAgIHZhciBjaGlwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7IAogICAgICAgICAgICBjaGlwLmNsYXNzTmFtZSA9ICdmb3JjZS1jaGlwJzsKICAgICAgICAgICAgY2hpcC5kcmFnZ2FibGUgPSB0cnVlOwogICAgICAgICAgICBjaGlwLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIGZ1bmN0aW9uKGUpIHsgCiAgICAgICAgICAgICAgICBlLmRhdGFUcmFuc2Zlci5zZXREYXRhKCd0ZXh0L3BsYWluJywgZm9yY2VPYmouaWQpOwogICAgICAgICAgICAgICAgZS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgnc291cmNlTG9jJywgJ3Bvb2wnKTsKICAgICAgICAgICAgICAgIGUuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQgPSAnbW92ZSc7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIGxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgICAgIGxhYmVsLmNsYXNzTmFtZSA9ICdjaGlwLWxhYmVsJzsKICAgICAgICAgICAgbGFiZWwudGV4dENvbnRlbnQgPSBmb3JjZU9iai5pZDsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBhY3Rpb25zID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7IAogICAgICAgICAgICBhY3Rpb25zLmNsYXNzTmFtZSA9ICdjaGlwLWFjdGlvbnMnOwogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIGJ0blRvcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOyBidG5Ub3AudHlwZSA9ICdidXR0b24nOyBidG5Ub3AuY2xhc3NOYW1lID0gJ2NoaXAtYnRuIGNoaXAtYnRuLXRvcCc7IGJ0blRvcC5pbm5lckhUTUwgPSAnJiM5NjUwOyc7CiAgICAgICAgICAgIGJ0blRvcC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgeyAKICAgICAgICAgICAgICAgIHZhciBzZWcgPSBhcHBEYXRhW2N1cnJlbnRTZWdJZHhdOwogICAgICAgICAgICAgICAgaWYoc2VnLnRvcC5sZW5ndGggPCA1KSBtb3ZlSXRlbShmb3JjZU9iaiwgJ3Bvb2wnLCAndG9wJyk7IGVsc2UgYWxlcnQoJ1ByaW1hcnkgQ29uY2VybnMgYnVja2V0IGxpbWl0IHJlYWNoZWQuJyk7IAogICAgICAgICAgICB9KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBidG5NaWQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsgYnRuTWlkLnR5cGUgPSAnYnV0dG9uJzsgYnRuTWlkLmNsYXNzTmFtZSA9ICdjaGlwLWJ0biBjaGlwLWJ0bi1taWQnOyBidG5NaWQuaW5uZXJIVE1MID0gJyYjOTY0NDsnOwogICAgICAgICAgICBidG5NaWQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsgCiAgICAgICAgICAgICAgICB2YXIgc2VnID0gYXBwRGF0YVtjdXJyZW50U2VnSWR4XTsKICAgICAgICAgICAgICAgIGlmKHNlZy5taWQubGVuZ3RoIDwgNSkgbW92ZUl0ZW0oZm9yY2VPYmosICdwb29sJywgJ21pZCcpOyBlbHNlIGFsZXJ0KCdOZXV0cmFsIGJ1Y2tldCBsaW1pdCByZWFjaGVkLicpOyAKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgYnRuQm90ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7IGJ0bkJvdC50eXBlID0gJ2J1dHRvbic7IGJ0bkJvdC5jbGFzc05hbWUgPSAnY2hpcC1idG4gY2hpcC1idG4tYm90JzsgYnRuQm90LmlubmVySFRNTCA9ICcmIzk2NjA7JzsKICAgICAgICAgICAgYnRuQm90LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7IAogICAgICAgICAgICAgICAgdmFyIHNlZyA9IGFwcERhdGFbY3VycmVudFNlZ0lkeF07CiAgICAgICAgICAgICAgICBpZihzZWcuYm90Lmxlbmd0aCA8IDUpIG1vdmVJdGVtKGZvcmNlT2JqLCAncG9vbCcsICdib3QnKTsgZWxzZSBhbGVydCgnRGlzbWlzc2VkIFJpc2tzIGJ1Y2tldCBsaW1pdCByZWFjaGVkLicpOyAKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBhY3Rpb25zLmFwcGVuZENoaWxkKGJ0blRvcCk7IGFjdGlvbnMuYXBwZW5kQ2hpbGQoYnRuTWlkKTsgYWN0aW9ucy5hcHBlbmRDaGlsZChidG5Cb3QpOwogICAgICAgICAgICBjaGlwLmFwcGVuZENoaWxkKGxhYmVsKTsgY2hpcC5hcHBlbmRDaGlsZChhY3Rpb25zKTsKICAgICAgICAgICAgcmV0dXJuIGNoaXA7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBjcmVhdGVSYW5rZWRDYXJkKGZvcmNlT2JqLCBidWNrZXRTdHIsIGluZGV4KSB7CiAgICAgICAgICAgIHZhciBjYXJkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7IAogICAgICAgICAgICBjYXJkLmNsYXNzTmFtZSA9ICdyYW5rZWQtaXRlbSc7CiAgICAgICAgICAgIGNhcmQuZHJhZ2dhYmxlID0gdHJ1ZTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIERyYWcgU3RhcnQKICAgICAgICAgICAgY2FyZC5hZGRFdmVudExpc3RlbmVyKCdkcmFnc3RhcnQnLCBmdW5jdGlvbihlKSB7IAogICAgICAgICAgICAgICAgZS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgndGV4dC9wbGFpbicsIGZvcmNlT2JqLmlkKTsKICAgICAgICAgICAgICAgIGUuZGF0YVRyYW5zZmVyLnNldERhdGEoJ3NvdXJjZUxvYycsIGJ1Y2tldFN0cik7CiAgICAgICAgICAgICAgICBlLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gJ21vdmUnOwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIC8vIEhhbmRsZSBEcmFnIE92ZXIgKFZpc3VhbCBmZWVkYmFjayBmb3Igc3dhcCkKICAgICAgICAgICAgY2FyZC5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgIHRoaXMuc3R5bGUuYm9yZGVyVG9wID0gIjJweCBzb2xpZCB2YXIoLS1icmFuZC1yZWQpIjsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBjYXJkLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdsZWF2ZScsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgIHRoaXMuc3R5bGUuYm9yZGVyVG9wID0gIjFweCBzb2xpZCB2YXIoLS1ib3JkZXItbGlnaHQpIjsKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAvLyBIYW5kbGUgRHJvcCAoQWxsb3dzIFN3YXBwaW5nIGl0ZW1zIFdJVEhJTiB0aGUgc2FtZSBidWNrZXQpCiAgICAgICAgICAgIGNhcmQuYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7IAogICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5ib3JkZXJUb3AgPSAiMXB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCkiOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgc291cmNlSWQgPSBlLmRhdGFUcmFuc2Zlci5nZXREYXRhKCd0ZXh0L3BsYWluJyk7CiAgICAgICAgICAgICAgICB2YXIgc291cmNlTG9jID0gZS5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgnc291cmNlTG9jJyk7CiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0SWQgPSBmb3JjZU9iai5pZDsKICAgICAgICAgICAgICAgIHZhciB0YXJnZXRMb2MgPSBidWNrZXRTdHI7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBzZWcgPSBhcHBEYXRhW2N1cnJlbnRTZWdJZHhdOwoKICAgICAgICAgICAgICAgIGlmIChzb3VyY2VJZCAmJiBzb3VyY2VMb2MgPT09IHRhcmdldExvYyAmJiBzb3VyY2VJZCAhPT0gdGFyZ2V0SWQpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IHNlZ1t0YXJnZXRMb2NdOwogICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2VJZHggPSBsaXN0LmZpbmRJbmRleChmdW5jdGlvbihmKSB7IHJldHVybiBmLmlkID09PSBzb3VyY2VJZDsgfSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldElkeCA9IGxpc3QuZmluZEluZGV4KGZ1bmN0aW9uKGYpIHsgcmV0dXJuIGYuaWQgPT09IHRhcmdldElkOyB9KTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IGxpc3Rbc291cmNlSWR4XTsKICAgICAgICAgICAgICAgICAgICBsaXN0W3NvdXJjZUlkeF0gPSBsaXN0W3RhcmdldElkeF07CiAgICAgICAgICAgICAgICAgICAgbGlzdFt0YXJnZXRJZHhdID0gdGVtcDsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICByZW5kZXJCb3hlcygpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzb3VyY2VJZCAmJiBzb3VyY2VMb2MgIT09IHRhcmdldExvYykgewogICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRMb2MgIT09ICdwb29sJyAmJiBzZWdbdGFyZ2V0TG9jXS5sZW5ndGggPj0gNSkgewogICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgnQnVja2V0IHNlbGVjdGlvbiBjYXBhY2l0eSBsaW1pdGVkIHRvIDUgZWxlbWVudHMgbWF4aW11bS4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB2YXIgb2JqVG9Nb3ZlID0gc2VnW3NvdXJjZUxvY10uZmluZChmdW5jdGlvbihmKSB7IHJldHVybiBmLmlkID09PSBzb3VyY2VJZDsgfSk7CiAgICAgICAgICAgICAgICAgICAgaWYob2JqVG9Nb3ZlKSB7IG1vdmVJdGVtKG9ialRvTW92ZSwgc291cmNlTG9jLCB0YXJnZXRMb2MpOyB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgdmFyIG9mZnNldCA9IGJ1Y2tldFN0ciA9PT0gJ3RvcCcgPyAwIDogKGJ1Y2tldFN0ciA9PT0gJ21pZCcgPyA1IDogMTApOwogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmtOdW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgICAgICAgcmFua051bS5jbGFzc05hbWUgPSAncmFuay1udW0nOwogICAgICAgICAgICByYW5rTnVtLnRleHRDb250ZW50ID0gKGluZGV4ICsgMSArIG9mZnNldCk7CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgICAgICBjb250ZW50LmNsYXNzTmFtZSA9ICdyYW5rLWNvbnRlbnQnOwogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHRpdGxlRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgICAgIHRpdGxlRGl2LnRleHRDb250ZW50ID0gZm9yY2VPYmouaWQ7CiAgICAgICAgICAgIHZhciBkZXNjRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgICAgIGRlc2NEaXYudGV4dENvbnRlbnQgPSBmb3JjZU9iai5kZXNjLnNwbGl0KCdbJylbMF07IC8vIENsZWFuIG91dCBpbm5lciBicmFja2V0IGNpdGF0aW9uIHRhZ3MKICAgICAgICAgICAgZGVzY0Rpdi5zdHlsZS5mb250U2l6ZSA9ICcwLjc1cmVtJzsgZGVzY0Rpdi5zdHlsZS5jb2xvciA9ICd2YXIoLS10ZXh0LW11dGVkKSc7IGRlc2NEaXYuc3R5bGUuZm9udFdlaWdodCA9ICdub3JtYWwnOwogICAgICAgICAgICAKICAgICAgICAgICAgY29udGVudC5hcHBlbmRDaGlsZCh0aXRsZURpdik7IGNvbnRlbnQuYXBwZW5kQ2hpbGQoZGVzY0Rpdik7CgogICAgICAgICAgICB2YXIgY29udHJvbHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgICAgICAgY29udHJvbHMuY2xhc3NOYW1lID0gJ3JhbmstY29udHJvbHMnOwogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIGJ0blVwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7IGJ0blVwLnR5cGUgPSAnYnV0dG9uJzsgYnRuVXAuY2xhc3NOYW1lID0gJ2Fycm93LWJ0bic7IGJ0blVwLmlubmVySFRNTCA9ICcmIzk2NTA7JzsKICAgICAgICAgICAgYnRuVXAuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsgcmVvcmRlckl0ZW0oYnVja2V0U3RyLCBpbmRleCwgJ3VwJyk7IH0pOwogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIGJ0bkRvd24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsgYnRuRG93bi50eXBlID0gJ2J1dHRvbic7IGJ0bkRvd24uY2xhc3NOYW1lID0gJ2Fycm93LWJ0bic7IGJ0bkRvd24uaW5uZXJIVE1MID0gJyYjOTY2MDsnOwogICAgICAgICAgICBidG5Eb3duLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7IHJlb3JkZXJJdGVtKGJ1Y2tldFN0ciwgaW5kZXgsICdkb3duJyk7IH0pOwoKICAgICAgICAgICAgY29udHJvbHMuYXBwZW5kQ2hpbGQoYnRuVXApOyBjb250cm9scy5hcHBlbmRDaGlsZChidG5Eb3duKTsKCiAgICAgICAgICAgIHZhciBidG5SZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsgYnRuUmVtLnR5cGUgPSAnYnV0dG9uJzsgYnRuUmVtLmNsYXNzTmFtZSA9ICdyZW1vdmUtYnRuJzsgYnRuUmVtLmlubmVySFRNTCA9ICcmIzEwMDA1Oyc7CiAgICAgICAgICAgIGJ0blJlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgeyBtb3ZlSXRlbShmb3JjZU9iaiwgYnVja2V0U3RyLCAncG9vbCcpOyB9KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGNhcmQuYXBwZW5kQ2hpbGQocmFua051bSk7IGNhcmQuYXBwZW5kQ2hpbGQoY29udGVudCk7IGNhcmQuYXBwZW5kQ2hpbGQoY29udHJvbHMpOyBjYXJkLmFwcGVuZENoaWxkKGJ0blJlbSk7CiAgICAgICAgICAgIHJldHVybiBjYXJkOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gbW92ZUl0ZW0oZm9yY2VPYmosIGZyb21TdHIsIHRvU3RyKSB7CiAgICAgICAgICAgIHZhciBzZWcgPSBhcHBEYXRhW2N1cnJlbnRTZWdJZHhdOyAKICAgICAgICAgICAgdmFyIGluZGV4ID0gc2VnW2Zyb21TdHJdLmZpbmRJbmRleChmdW5jdGlvbihmKSB7IHJldHVybiBmLmlkID09PSBmb3JjZU9iai5pZDsgfSk7CiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7IAogICAgICAgICAgICAgICAgc2VnW2Zyb21TdHJdLnNwbGljZShpbmRleCwgMSk7IAogICAgICAgICAgICAgICAgc2VnW3RvU3RyXS5wdXNoKGZvcmNlT2JqKTsgCiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmVuZGVyQm94ZXMoKTsgdmFsaWRhdGVTdGVwKCk7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiByZW9yZGVySXRlbShidWNrZXQsIGluZGV4LCBkaXJlY3Rpb24pIHsKICAgICAgICAgICAgdmFyIGxpc3QgPSBhcHBEYXRhW2N1cnJlbnRTZWdJZHhdW2J1Y2tldF07CiAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICd1cCcgJiYgaW5kZXggPiAwKSB7CiAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IGxpc3RbaW5kZXhdOyBsaXN0W2luZGV4XSA9IGxpc3RbaW5kZXggLSAxXTsgbGlzdFtpbmRleCAtIDFdID0gdGVtcDsKICAgICAgICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdkb3duJyAmJiBpbmRleCA8IGxpc3QubGVuZ3RoIC0gMSkgewogICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBsaXN0W2luZGV4XTsgbGlzdFtpbmRleF0gPSBsaXN0W2luZGV4ICsgMV07IGxpc3RbaW5kZXggKyAxXSA9IHRlbXA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmVuZGVyQm94ZXMoKTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlUmFua2luZygpIHsKICAgICAgICAgICAgdmFyIHNlZyA9IGFwcERhdGFbY3VycmVudFNlZ0lkeF07IAogICAgICAgICAgICB2YXIgaXNCYWxhbmNlZCA9IHNlZy50b3AubGVuZ3RoID09PSA1ICYmIHNlZy5taWQubGVuZ3RoID09PSA1ICYmIHNlZy5ib3QubGVuZ3RoID09PSA1OwogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIGJ0bk5leHRSbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLW5leHQtcmFuaycpOwogICAgICAgICAgICBpZiAoaXNCYWxhbmNlZCkgewogICAgICAgICAgICAgICAgYnRuTmV4dFJuay5kaXNhYmxlZCA9IGZhbHNlOyAKICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U2VnSWR4ID09PSA2KSB7IGJ0bk5leHRSbmsudGV4dENvbnRlbnQgPSAiUHJvY2VlZCB0byBNeSBTY2VuYXJpbyBDaGVja2xpc3QiOyB9IAogICAgICAgICAgICAgICAgZWxzZSB7IGJ0bk5leHRSbmsudGV4dENvbnRlbnQgPSAiU2F2ZSAmIE5leHQgU2VnbWVudCI7IH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGJ0bk5leHRSbmsuZGlzYWJsZWQgPSB0cnVlOyAKICAgICAgICAgICAgICAgIGJ0bk5leHRSbmsudGV4dENvbnRlbnQgPSAiUmFuayBleGFjdGx5IDUgaXRlbXMgcGVyIGJ1Y2tldCB0byBjb250aW51ZSI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG4tbmV4dC1yYW5rJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYoY3VycmVudFNlZ0lkeCA8IDYpIHsgCiAgICAgICAgICAgICAgICBjdXJyZW50U2VnSWR4Kys7IHJlbmRlclZpc2lvblNjcmVlbigpOyAKICAgICAgICAgICAgfSBlbHNlIHsgCiAgICAgICAgICAgICAgICByZW5kZXJXaGF0SWZzU2NyZWVuKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgLy8gLS0tIE1PRFVMRSBMQVlFUiAzOiBXSEFUIElGIENIRUNLTElTVCBCVUlMRCBMQVlFUiAtLS0KICAgICAgICBmdW5jdGlvbiByZW5kZXJXaGF0SWZzU2NyZWVuKCkgewogICAgICAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3doYXRpZnMtY29udGFpbmVyJyk7CiAgICAgICAgICAgIGNsZWFyQm94KGNvbnRhaW5lcik7CgogICAgICAgICAgICBXSEFUX0lGUy5mb3JFYWNoKGZ1bmN0aW9uKHdpKSB7CiAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgICAgICAgICAgaXRlbS5jbGFzc05hbWUgPSAnY2hlY2staXRlbSc7CiAgICAgICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnZGF0YS1pZCcsIHdpLmlkKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGJveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgICAgICAgICAgYm94LmNsYXNzTmFtZSA9ICdjaGVjay1ib3gnOwogICAgICAgICAgICAgICAgdmFyIG1hcmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CiAgICAgICAgICAgICAgICBtYXJrLmNsYXNzTmFtZSA9ICdjaGVjay1tYXJrJzsKICAgICAgICAgICAgICAgIG1hcmsudGV4dENvbnRlbnQgPSAn4pyTJzsKICAgICAgICAgICAgICAgIGJveC5hcHBlbmRDaGlsZChtYXJrKTsKCiAgICAgICAgICAgICAgICB2YXIgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgICAgICAgICAgdGV4dC5zdHlsZS5mb250U2l6ZSA9ICcxLjA1cmVtJzsKICAgICAgICAgICAgICAgIHRleHQuc3R5bGUuZm9udFdlaWdodCA9ICc2MDAnOwogICAgICAgICAgICAgICAgdGV4dC50ZXh0Q29udGVudCA9IHdpLnRleHQuc3BsaXQoJ1snKVswXTsgLy8gQ2xlYW5zIGNpdGF0aW9uIGJyYWNrZXRzIGZvciB0aGUgZnJvbnQtZW5kIHZpZXcKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaXRlbS5hcHBlbmRDaGlsZChib3gpOwogICAgICAgICAgICAgICAgaXRlbS5hcHBlbmRDaGlsZCh0ZXh0KTsKCiAgICAgICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHdpSWQgPSB0aGlzLmdldEF0dHJpYnV0ZSgnZGF0YS1pZCcpOwogICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFdoYXRJZnMuaW5jbHVkZXMod2lJZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRXaGF0SWZzID0gc2VsZWN0ZWRXaGF0SWZzLmZpbHRlcihmdW5jdGlvbih4KSB7IHJldHVybiB4ICE9PSB3aUlkOyB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGFzc0xpc3QucmVtb3ZlKCdzZWxlY3RlZCcpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkV2hhdElmcy5wdXNoKHdpSWQpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsYXNzTGlzdC5hZGQoJ3NlbGVjdGVkJyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGl0ZW0pOwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIGRpc3BsYXlBY3RpdmVQYW5lbCgndmlldy13aGF0aWZzJyk7CiAgICAgICAgfQoKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLXN1Ym1pdC13aGF0aWZzJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgZGlzcGxheUFjdGl2ZVBhbmVsKCd2aWV3LWxvYWRpbmcnKTsKICAgICAgICAgICAgc2V0VGltZW91dChjYWxjdWxhdGVBbmRTdWJtaXRSZXN1bHRzLCAyNTAwKTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gLS0tIFNFQ1VSRSBESVNQQVRDSCBQSVBFTElORSBJTlRFR1JBVElPTiBUTyBUSEUgV09SRFBSRVNTIENVU1RPTSBQTFVHSU5TIFRBQkxFUyAtLS0KICAgICAgICBmdW5jdGlvbiBjYWxjdWxhdGVBbmRTdWJtaXRSZXN1bHRzKCkgewogICAgICAgICAgICB2YXIgc2NvcmVzID0ge307CiAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBGT1JDRVMubGVuZ3RoOyBpKyspIHsgc2NvcmVzW0ZPUkNFU1tpXS5pZF0gPSAwOyB9CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBFeGVydGlvbiBXZWlnaHQgTWF0cml4IE11bHRpcGxpZXIgU3RyYXRlZ3kgKDE1IHB0cyBkb3duIHRvIDEgcHQgYWNyb3NzIDcgdHJhY2tzID0gTWF4IDEwNSB0b3RhbCkKICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFwcERhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBzZWcgPSBhcHBEYXRhW2ldOwogICAgICAgICAgICAgICAgZm9yKHZhciB0ID0gMDsgdCA8IHNlZy50b3AubGVuZ3RoOyB0KyspIHsgc2NvcmVzW3NlZy50b3BbdF0uaWRdICs9ICgxNSAtIHQpOyB9CiAgICAgICAgICAgICAgICBmb3IodmFyIG0gPSAwOyBtIDwgc2VnLm1pZC5sZW5ndGg7IG0rKykgeyBzY29yZXNbc2VnLm1pZFttXS5pZF0gKz0gKDEwIC0gbSk7IH0KICAgICAgICAgICAgICAgIGZvcih2YXIgYiA9IDA7IGIgPCBzZWcuYm90Lmxlbmd0aDsgYisrKSB7IHNjb3Jlc1tzZWcuYm90W2JdLmlkXSArPSAoNSAtIGIpOyB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBhcGlQYXlsb2FkID0gewogICAgICAgICAgICAgICAgYXNzZXNzbWVudF9pZDogIlBGLSIgKyBEYXRlLm5vdygpICsgIi0iICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMCksIAogICAgICAgICAgICAgICAgZm9yY2VzOiBbXQogICAgICAgICAgICB9OwoKICAgICAgICAgICAgdmFyIHNvcnRlZCA9IE9iamVjdC5rZXlzKHNjb3JlcykubWFwKGZ1bmN0aW9uKGspIHsgcmV0dXJuIHsgbmFtZTogaywgc2NvcmU6IHNjb3Jlc1trXSB9OyB9KS5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsgcmV0dXJuIGIuc2NvcmUgLSBhLnNjb3JlOyB9KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGZvciAodmFyIGYgPSAwOyBmIDwgc29ydGVkLmxlbmd0aDsgZisrKSB7CiAgICAgICAgICAgICAgICB2YXIgZm9yY2VJZCA9IHNvcnRlZFtmXS5uYW1lOwogICAgICAgICAgICAgICAgdmFyIGZvcmNlVG90YWwgPSBzb3J0ZWRbZl0uc2NvcmU7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBmb3JjZUVudHJ5ID0gewogICAgICAgICAgICAgICAgICAgIGZvcmNlX3R5cGU6ICJQIiwgCiAgICAgICAgICAgICAgICAgICAgZm9yY2VfdGV4dDogZm9yY2VJZCwKICAgICAgICAgICAgICAgICAgICB0b3RhbF9yYXRpbmc6IGZvcmNlVG90YWwsCiAgICAgICAgICAgICAgICAgICAgaW5mbHVlbmNlX3N0cmVuZ3RoOiAoZm9yY2VUb3RhbCA+PSA3MCkgPyAiSGlnaCIgOiAoKGZvcmNlVG90YWwgPj0gNDApID8gIk1lZGl1bSIgOiAiTG93IiksCiAgICAgICAgICAgICAgICAgICAgczFfcmF0aW5nOiAwLCBzMl9yYXRpbmc6IDAsIHMzX3JhdGluZzogMCwgczRfcmF0aW5nOiAwLCBzNV9yYXRpbmc6IDAsIHM2X3JhdGluZzogMCwgczdfcmF0aW5nOiAwCiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIGZvcih2YXIgcyA9IDA7IHMgPCBhcHBEYXRhLmxlbmd0aDsgcysrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHNlZyA9IGFwcERhdGFbc107CiAgICAgICAgICAgICAgICAgICAgdmFyIHNlZ0tleU5hbWUgPSAicyIgKyAocyArIDEpICsgIl9yYXRpbmciOyAKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICB2YXIgdG9wSWR4ID0gc2VnLnRvcC5maW5kSW5kZXgoZnVuY3Rpb24oeCkgeyByZXR1cm4geC5pZCA9PT0gZm9yY2VJZDsgfSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRvcElkeCA+IC0xKSB7IGZvcmNlRW50cnlbc2VnS2V5TmFtZV0gPSAoMTUgLSB0b3BJZHgpOyB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtaWRJZHggPSBzZWcubWlkLmZpbmRJbmRleChmdW5jdGlvbih4KSB7IHJldHVybiB4LmlkID09PSBmb3JjZUlkOyB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1pZElkeCA+IC0xKSB7IGZvcmNlRW50cnlbc2VnS2V5TmFtZV0gPSAoMTAgLSBtaWRJZHgpOyB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJvdElkeCA9IHNlZy5ib3QuZmluZEluZGV4KGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHguaWQgPT09IGZvcmNlSWQ7IH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJvdElkeCA+IC0xKSB7IGZvcmNlRW50cnlbc2VnS2V5TmFtZV0gPSAoNSAtIGJvdElkeCk7IH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGFwaVBheWxvYWQuZm9yY2VzLnB1c2goZm9yY2VFbnRyeSk7CmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFNBVkVfS0VZX1BGKTsKICAgICAgICAgICAgfQoKdmFyIHJlc3ROb25jZSA9ICh0eXBlb2Ygd2luZG93LmE3bXFfcmVzdF9ub25jZSAhPT0gJ3VuZGVmaW5lZCcpID8gd2luZG93LmE3bXFfcmVzdF9ub25jZSA6ICcnOwp2YXIgcmVzdEVuZHBvaW50ID0gJy93cC1qc29uL2E3bXEvdjEvc3VibWl0L2ZvcmNlcyc7CgppZiAoIXJlc3ROb25jZSkgewogICAgY29uc29sZS5lcnJvcigiTWlzc2luZyBSRVNUIG5vbmNlLiBVc2VyIG1heSBub3QgYmUgbG9nZ2VkIGluIG9yIHdwX2hlYWQoKSBmYWlsZWQgdG8gZmlyZS4iKTsKfQoKICAgICAgICAgICAgZmV0Y2gocmVzdEVuZHBvaW50LCB7CiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJywKICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ1gtV1AtTm9uY2UnOiByZXN0Tm9uY2UgfSwKICAgICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGFwaVBheWxvYWQpCiAgICAgICAgICAgIH0pCiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHJlcykgeyByZXR1cm4gcmVzLmpzb24oKTsgfSkKICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24oZGF0YSkgewogICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0E3TVEgQVBJIFN5bmMgQ29uZmlybWF0aW9uIE1hdHJpeCBMb2cgT3V0cHV0OicsIGRhdGEpOwogICAgICAgICAgICAgICAgcmVuZGVyRmluYWxSZXN1bHRzU2NyZWVuKHNvcnRlZCk7CiAgICAgICAgICAgIH0pCiAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbihlcnIpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignQVBJIEVuZHBvaW50IHN0cnVjdHVyYWwgdHJhbnNmZXIgYnlwYXNzZWQgb2ZmbGluZS4gU3luY2luZyBsb2NhbGl6ZWQgdmlld3MgZGlyZWN0bHk6JywgZXJyKTsKICAgICAgICAgICAgICAgIHJlbmRlckZpbmFsUmVzdWx0c1NjcmVlbihzb3J0ZWQpOwogICAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIC8vIC0tLSBNT0RVTEUgTEFZRVIgNTogQVJUSUZBQ1QgR1JBUEggUkVOREVSIElOVEVSRkFDRSAtLS0KICAgICAgICBmdW5jdGlvbiByZW5kZXJGaW5hbFJlc3VsdHNTY3JlZW4oc29ydGVkKSB7CiAgICAgICAgICAgIHZhciBsaXN0RG9tID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpc3QtZG9taW5hbnQnKTsgCiAgICAgICAgICAgIHZhciBsaXN0U2FjID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpc3Qtc2FjcmlmaWNlZCcpOyAKICAgICAgICAgICAgY2xlYXJCb3gobGlzdERvbSk7IGNsZWFyQm94KGxpc3RTYWMpOwoKICAgICAgICAgICAgLy8gVG9wIDUgUHJpbWFyeSBPYnN0YWNsZXMgVGhyZWF0cyBPdXRwdXQgUmVuZGVyCiAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCA1OyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBwY3QgPSBNYXRoLnJvdW5kKChzb3J0ZWRbaV0uc2NvcmUgLyAxMDUpICogMTAwKTsKICAgICAgICAgICAgICAgIHZhciBsaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7IAogICAgICAgICAgICAgICAgbGkuaW5uZXJIVE1MID0gIjxzcGFuPuKaoO+4jyAiICsgKGkrMSkgKyAiLiAiICsgc29ydGVkW2ldLm5hbWUgKyAiPC9zcGFuPjxkaXY+PHNwYW4gY2xhc3M9J3N0YXQtcGlsbCBiZy1yZWQtNTAwIHRleHQtd2hpdGUgZm9udC1ibGFjayc+IiArIHBjdCArICIlIEluZmx1ZW5jZTwvc3Bhbj48L2Rpdj4iOwogICAgICAgICAgICAgICAgbGlzdERvbS5hcHBlbmRDaGlsZChsaSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIEJvdHRvbSA1IERpc21pc3NlZCBSaXNrcyBPdXRwdXQgUmVuZGVyCiAgICAgICAgICAgIHZhciBib3RGaXZlID0gc29ydGVkLnNsaWNlKC01KS5yZXZlcnNlKCk7CiAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCA1OyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBwY3QgPSBNYXRoLnJvdW5kKChib3RGaXZlW2ldLnNjb3JlIC8gMTA1KSAqIDEwMCk7CiAgICAgICAgICAgICAgICB2YXIgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpOyBsaS5zdHlsZS5vcGFjaXR5ID0gIjAuOSI7CiAgICAgICAgICAgICAgICBsaS5pbm5lckhUTUwgPSAiPHNwYW4+8J+boe+4jyAiICsgKDE1LWkpICsgIi4gIiArIGJvdEZpdmVbaV0ubmFtZSArICI8L3NwYW4+PGRpdj48c3BhbiBjbGFzcz0nc3RhdC1waWxsIGJnLWJsdWUtNTAwIHRleHQtd2hpdGUgZm9udC1ibGFjayc+IiArIHBjdCArICIlIEluZmx1ZW5jZTwvc3Bhbj48L2Rpdj4iOwogICAgICAgICAgICAgICAgbGlzdFNhYy5hcHBlbmRDaGlsZChsaSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFNjZW5hcmlvIENoZWNrbGlzdCBWdWxuZXJhYmlsaXRpZXMgQmxvY2sgUmVuZGVyCiAgICAgICAgICAgIHZhciB2U2VjID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Z1bG5lcmFiaWxpdGllcy1zZWN0aW9uJyk7CiAgICAgICAgICAgIHZhciB2TGlzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsaXN0LXdoYXRpZnMnKTsKICAgICAgICAgICAgY2xlYXJCb3godkxpc3QpOwogICAgICAgICAgICBpZiAoc2VsZWN0ZWRXaGF0SWZzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgIHNlbGVjdGVkV2hhdElmcy5mb3JFYWNoKGZ1bmN0aW9uKHdpSWQpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgd2lPYmogPSBXSEFUX0lGUy5maW5kKGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHguaWQgPT09IHdpSWQ7IH0pOwogICAgICAgICAgICAgICAgICAgIHZhciBsaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7CiAgICAgICAgICAgICAgICAgICAgbGkuc3R5bGUubWFyZ2luQm90dG9tID0gIjEwcHgiOwogICAgICAgICAgICAgICAgICAgIGxpLnN0eWxlLmJvcmRlckJvdHRvbSA9ICIxcHggZGFzaGVkIHZhcigtLWJvcmRlci1saWdodCkiOwogICAgICAgICAgICAgICAgICAgIGxpLnN0eWxlLnBhZGRpbmdCb3R0b20gPSAiNnB4IjsKICAgICAgICAgICAgICAgICAgICBsaS5jbGFzc05hbWUgPSAidGV4dC1zbGF0ZS03MDAgZGFyazp0ZXh0LXNsYXRlLTMwMCI7CiAgICAgICAgICAgICAgICAgICAgbGkudGV4dENvbnRlbnQgPSAi4paqICIgKyB3aU9iai50ZXh0LnNwbGl0KCdbJylbMF07IAogICAgICAgICAgICAgICAgICAgIHZMaXN0LmFwcGVuZENoaWxkKGxpKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgdlNlYy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZTZWMuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gU2VnbWVudCBHcmlkIEJsb2NrIEZyYW1ld29yayBNYXRyaXggQ2FyZHMKICAgICAgICAgICAgdmFyIHNlZ0NvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWdtZW50LWJyZWFrZG93bi1jb250YWluZXInKTsKICAgICAgICAgICAgY2xlYXJCb3goc2VnQ29udGFpbmVyKTsKICAgICAgICAgICAgYXBwRGF0YS5mb3JFYWNoKGZ1bmN0aW9uKHNlZykgewogICAgICAgICAgICAgICAgdmFyIGNhcmQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgICAgICAgICAgIGNhcmQuc3R5bGUuYmFja2dyb3VuZCA9ICJ2YXIoLS1pbnB1dC1iZykiOyBjYXJkLnN0eWxlLmJvcmRlciA9ICIxcHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KSI7IGNhcmQuc3R5bGUuYm9yZGVyUmFkaXVzID0gIjE0cHgiOyBjYXJkLnN0eWxlLnBhZGRpbmcgPSAiMjBweCI7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgICAgICAgICAgdGl0bGUuc3R5bGUuZm9udFdlaWdodCA9ICI5MDAiOyB0aXRsZS5zdHlsZS5jb2xvciA9ICJ2YXIoLS1icmFuZC1yZWQpIjsgdGl0bGUuc3R5bGUudGV4dFRyYW5zZm9ybSA9ICJ1cHBlcmNhc2UiOyB0aXRsZS5zdHlsZS5ib3JkZXJCb3R0b20gPSAiMnB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCkiOyB0aXRsZS5zdHlsZS5wYWRkaW5nQm90dG9tID0gIjEwcHgiOyB0aXRsZS5zdHlsZS5tYXJnaW5Cb3R0b20gPSAiMTVweCI7IHRpdGxlLnN0eWxlLmZvbnRTaXplID0gIjAuOTVyZW0iOwogICAgICAgICAgICAgICAgdGl0bGUudGV4dENvbnRlbnQgPSBzZWcudGl0bGUgKyAiIFNlZ21lbnQgQnJlYWtkb3duIjsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgZ3JpZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgICAgICAgICAgZ3JpZC5zdHlsZS5kaXNwbGF5ID0gImdyaWQiOyBncmlkLnN0eWxlLmdyaWRUZW1wbGF0ZUNvbHVtbnMgPSAiMWZyIDFmciI7IGdyaWQuc3R5bGUuZ2FwID0gIjEwcHgiOwoKICAgICAgICAgICAgICAgIHZhciB0b3AzVGV4dCA9ICIxLiAiICsgc2VnLnRvcFswXS5pZCArICIsIDIuICIgKyBzZWcudG9wWzFdLmlkICsgIiwgMy4gIiArIHNlZy50b3BbMl0uaWQ7CiAgICAgICAgICAgICAgICB2YXIgYm90M1RleHQgPSAiMTUuICIgKyBzZWcuYm90WzRdLmlkICsgIiwgMTQuICIgKyBzZWcuYm90WzNdLmlkICsgIiwgMTMuICIgKyBzZWcuYm90WzJdLmlkOwoKICAgICAgICAgICAgICAgIHZhciB0b3BDb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgICAgICAgICAgIHZhciB0b3BIZWFkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7IHRvcEhlYWQuc3R5bGUuZm9udFNpemUgPSAiMC43NXJlbSI7IHRvcEhlYWQuc3R5bGUuZm9udFdlaWdodCA9ICI5MDAiOyB0b3BIZWFkLnN0eWxlLnRleHRUcmFuc2Zvcm0gPSAidXBwZXJjYXNlIjsgdG9wSGVhZC5zdHlsZS5jb2xvciA9ICJ2YXIoLS10b3AtdGV4dCkiOyB0b3BIZWFkLnN0eWxlLm1hcmdpbkJvdHRvbSA9ICI0cHgiOyB0b3BIZWFkLnRleHRDb250ZW50ID0gIlByaW1hcnkgUm9hZGJsb2NrcyI7CiAgICAgICAgICAgICAgICB2YXIgdG9wTGlzdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyB0b3BMaXN0LnN0eWxlLmZvbnRTaXplID0gIjAuOXJlbSI7IHRvcExpc3Quc3R5bGUuZm9udFdlaWdodCA9ICI4MDAiOyB0b3BMaXN0LnN0eWxlLmNvbG9yID0gInZhcigtLXRleHQtZGFyaykiOyB0b3BMaXN0LnRleHRDb250ZW50ID0gdG9wM1RleHQ7CiAgICAgICAgICAgICAgICB0b3BDb2wuYXBwZW5kQ2hpbGQodG9wSGVhZCk7IHRvcENvbC5hcHBlbmRDaGlsZCh0b3BMaXN0KTsKCiAgICAgICAgICAgICAgICB2YXIgYm90Q29sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgICAgICAgICB2YXIgYm90SGVhZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyBib3RIZWFkLnN0eWxlLmZvbnRTaXplID0gIjAuNzVyZW0iOyBib3RIZWFkLnN0eWxlLmZvbnRXZWlnaHQgPSAiOTAwIjsgYm90SGVhZC5zdHlsZS50ZXh0VHJhbnNmb3JtID0gInVwcGVyY2FzZSI7IGJvdEhlYWQuc3R5bGUuY29sb3IgPSAidmFyKC0tYm90LXRleHQpIjsgYm90SGVhZC5zdHlsZS5tYXJnaW5Cb3R0b20gPSAiNHB4IjsgYm90SGVhZC50ZXh0Q29udGVudCA9ICJEaXNtaXNzZWQgRmFjdG9ycyI7CiAgICAgICAgICAgICAgICB2YXIgYm90TGlzdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyBib3RMaXN0LnN0eWxlLmZvbnRTaXplID0gIjAuOXJlbSI7IGJvdExpc3Quc3R5bGUuZm9udFdlaWdodCA9ICI4MDAiOyBib3RMaXN0LnN0eWxlLmNvbG9yID0gInZhcigtLXRleHQtZGFyaykiOyBib3RMaXN0LnRleHRDb250ZW50ID0gYm90M1RleHQ7CiAgICAgICAgICAgICAgICBib3RDb2wuYXBwZW5kQ2hpbGQoYm90SGVhZCk7IGJvdENvbC5hcHBlbmRDaGlsZChib3RMaXN0KTsKCiAgICAgICAgICAgICAgICBncmlkLmFwcGVuZENoaWxkKHRvcENvbCk7IGdyaWQuYXBwZW5kQ2hpbGQoYm90Q29sKTsKICAgICAgICAgICAgICAgIGNhcmQuYXBwZW5kQ2hpbGQodGl0bGUpOyBjYXJkLmFwcGVuZENoaWxkKGdyaWQpOwogICAgICAgICAgICAgICAgc2VnQ29udGFpbmVyLmFwcGVuZENoaWxkKGNhcmQpOwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIC8vIEFsaWdubWVudCBNYXRyaXggVGFibGUgR3JpZCBPdXRwdXQgR2VuZXJhdGlvbiBMb29wCiAgICAgICAgICAgIHZhciBtYXRyaXhUYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXRyaXgtdGFibGUnKTsKICAgICAgICAgICAgY2xlYXJCb3gobWF0cml4VGFibGUpOwoKICAgICAgICAgICAgdmFyIHRoZWFkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGhlYWQnKTsKICAgICAgICAgICAgdmFyIHRySGVhZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CiAgICAgICAgICAgIHZhciB0aEJsYW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGgnKTsgdGhCbGFuay50ZXh0Q29udGVudCA9ICJQYXJraW5nIE9ic3RhY2xlIEZvcmNlIjsgdGhCbGFuay5zdHlsZS50ZXh0QWxpZ24gPSAibGVmdCI7IHRySGVhZC5hcHBlbmRDaGlsZCh0aEJsYW5rKTsKICAgICAgICAgICAgU0VHTUVOVFMuZm9yRWFjaChmdW5jdGlvbihzKSB7CiAgICAgICAgICAgICAgICB2YXIgdGggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0aCcpOyB0aC50ZXh0Q29udGVudCA9IHMuaWQuc3Vic3RyaW5nKDAsMyk7IHRySGVhZC5hcHBlbmRDaGlsZCh0aCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB2YXIgdGhQY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0aCcpOyB0aFBjdC50ZXh0Q29udGVudCA9ICJDdW11bGF0aXZlIFRocmVhdCI7IHRySGVhZC5hcHBlbmRDaGlsZCh0aFBjdCk7CiAgICAgICAgICAgIHRoZWFkLmFwcGVuZENoaWxkKHRySGVhZCk7CiAgICAgICAgICAgIG1hdHJpeFRhYmxlLmFwcGVuZENoaWxkKHRoZWFkKTsKCiAgICAgICAgICAgIHZhciB0Ym9keSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3Rib2R5Jyk7CiAgICAgICAgICAgIHNvcnRlZC5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pIHsKICAgICAgICAgICAgICAgIHZhciBmb3JjZUlkID0gaXRlbS5uYW1lOyAvLyBGaXhlZCBtYXBwaW5nIHJlbmRlcmluZyBidWcgaGVyZSEKICAgICAgICAgICAgICAgIHZhciBwY3RJbnQgPSBNYXRoLnJvdW5kKChpdGVtLnNjb3JlIC8gMTA1KSAqIDEwMCk7CiAgICAgICAgICAgICAgICB2YXIgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgdGROYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsgCiAgICAgICAgICAgICAgICB0ZE5hbWUuY2xhc3NOYW1lID0gImZvcmNlLW5hbWUiOwogICAgICAgICAgICAgICAgdGROYW1lLnRleHRDb250ZW50ID0gZm9yY2VJZDsKICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkTmFtZSk7CgogICAgICAgICAgICAgICAgYXBwRGF0YS5mb3JFYWNoKGZ1bmN0aW9uKHNlZykgewogICAgICAgICAgICAgICAgICAgIHZhciBleGFjdFJhbmsgPSAwOwogICAgICAgICAgICAgICAgICAgIHZhciB0b3BJZHggPSBzZWcudG9wLmZpbmRJbmRleChmdW5jdGlvbih4KSB7IHJldHVybiB4LmlkID09PSBmb3JjZUlkOyB9KTsKICAgICAgICAgICAgICAgICAgICBpZiAodG9wSWR4ID4gLTEpIGV4YWN0UmFuayA9IHRvcElkeCArIDE7CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtaWRJZHggPSBzZWcubWlkLmZpbmRJbmRleChmdW5jdGlvbih4KSB7IHJldHVybiB4LmlkID09PSBmb3JjZUlkOyB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1pZElkeCA+IC0xKSBleGFjdFJhbmsgPSBtaWRJZHggKyA2OwogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBib3RJZHggPSBzZWcuYm90LmZpbmRJbmRleChmdW5jdGlvbih4KSB7IHJldHVybiB4LmlkID09PSBmb3JjZUlkOyB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib3RJZHggPiAtMSkgZXhhY3RSYW5rID0gYm90SWR4ICsgMTE7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHZhciB0ZFJhbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwogICAgICAgICAgICAgICAgICAgIHZhciBiYWRnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKICAgICAgICAgICAgICAgICAgICBiYWRnZS5jbGFzc05hbWUgPSAicmFuay1iYWRnZSAiICsgKGV4YWN0UmFuayA8PSA1ID8gInJiLXRvcCIgOiAoZXhhY3RSYW5rIDw9IDEwID8gInJiLW1pZCIgOiAicmItYm90IikpOwogICAgICAgICAgICAgICAgICAgIGJhZGdlLnRleHRDb250ZW50ID0gZXhhY3RSYW5rOwogICAgICAgICAgICAgICAgICAgIHRkUmFuay5hcHBlbmRDaGlsZChiYWRnZSk7CiAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGRSYW5rKTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIHZhciB0ZFBjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CiAgICAgICAgICAgICAgICB2YXIgcGN0QmFkZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CiAgICAgICAgICAgICAgICBwY3RCYWRnZS5jbGFzc05hbWUgPSAicmItcGN0IjsKICAgICAgICAgICAgICAgIHBjdEJhZGdlLnN0eWxlLmJhY2tncm91bmQgPSAicmdiYSgyMzUsIDAsIDEsIDAuMSkiOyBwY3RCYWRnZS5zdHlsZS5jb2xvciA9ICJ2YXIoLS1icmFuZC1yZWQpIjsKICAgICAgICAgICAgICAgIHBjdEJhZGdlLnRleHRDb250ZW50ID0gcGN0SW50ICsgIiUgSW5mbHVlbmNlIjsKICAgICAgICAgICAgICAgIHRkUGN0LmFwcGVuZENoaWxkKHBjdEJhZGdlKTsKICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkUGN0KTsKCiAgICAgICAgICAgICAgICB0Ym9keS5hcHBlbmRDaGlsZCh0cik7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBtYXRyaXhUYWJsZS5hcHBlbmRDaGlsZCh0Ym9keSk7CgogICAgICAgICAgICBkaXNwbGF5QWN0aXZlUGFuZWwoJ3ZpZXctcmVzdWx0cycpOwogICAgICAgIH0KCiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi1wcmludCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7IHdpbmRvdy5wcmludCgpOyB9KTsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLXJlc3RhcnQnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgeyB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7IH0pOwogICAgfSk7CiAgICAvKiBdXT4gKi8KICAgIDwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K
-
Adult Life Readiness Indicator
CjxzY3JpcHQ+ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS10aGVtZScsICdkYXJrJyk7IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdkYXJrJyk7PC9zY3JpcHQ+CjwhRE9DVFlQRSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgogICAgPHRpdGxlPkFkdWx0IExpZmUgUmVhZGluZXNzIEluZGljYXRvciAoQUxSSSkgLSBBN01RPC90aXRsZT4KICAgIAogICAgPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tIj4KICAgIDxsaW5rIHJlbD0icHJlY29ubmVjdCIgaHJlZj0iaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbSIgY3Jvc3NvcmlnaW4+CiAgICA8bGluayBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PVBsdXMrSmFrYXJ0YStTYW5zOndnaHRAMzAwOzQwMDs1MDA7NjAwOzcwMDs4MDA7OTAwJmZhbWlseT1QbGF5ZmFpcitEaXNwbGF5Oml0YWwsd2dodEAwLDcwMDsxLDQwMCZmYW1pbHk9TGF0bzp3Z2h0QDQwMDs3MDA7OTAwJmRpc3BsYXk9c3dhcCIgcmVsPSJzdHlsZXNoZWV0Ij4KICAgIAogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLnRhaWx3aW5kY3NzLmNvbSI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0PgogICAgICAgIHRhaWx3aW5kLmNvbmZpZyA9IHsKICAgICAgICAgICAgZGFya01vZGU6ICdjbGFzcycsCiAgICAgICAgICAgIHRoZW1lOiB7CiAgICAgICAgICAgICAgICBleHRlbmQ6IHsKICAgICAgICAgICAgICAgICAgICBjb2xvcnM6IHsgYnJhbmQ6IHsgYmx1ZTogJyMwZDBmNmEnLCBnb2xkOiAnI2ZmZTQwMicsIGRhcms6ICcjMDQwNjBmJywgcmVkOiAnI2ViMDAwMScsIHllbGxvdzogJyNmZmU0MDInLCBncmVlbjogJyMxNjY1MzQnIH0gfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgPC9zY3JpcHQ+CiAgICAKICAgIDxzdHlsZT4KICAgIC8qIDwhW0NEQVRBWyAqLwogICAgOnJvb3QgewogICAgICAgIC0tYnJhbmQtYmx1ZTogIzBkMGY2YTsgCiAgICAgICAgLS1icmFuZC1nb2xkOiAjZmZlNDAyOwogICAgICAgIC0tYnJhbmQteWVsbG93OiAjZmZlNDAyOwogICAgICAgIC0tYnJhbmQtcmVkOiAjZWIwMDAxOwoKICAgICAgICAtLWJnLWdyYWRpZW50OiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjZmVmY2U4IDAlLCAjZmVmOWMzIDEwMCUpOwogICAgICAgIC0tZ2xhc3MtYmc6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44NSk7CiAgICAgICAgLS1nbGFzcy1ib3JkZXI6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44NSk7CiAgICAgICAgLS1nbGFzcy1zaGFkb3c6IDAgMjBweCA0MHB4IC0xNXB4IHJnYmEoMjAyLCAxMzgsIDQsIDAuMSk7CiAgICAgICAgCiAgICAgICAgLS10ZXh0LWRhcms6ICMwZjE3MmE7CiAgICAgICAgLS10ZXh0LW11dGVkOiAjNDc1NTY5OwogICAgICAgIC0tYm9yZGVyLWxpZ2h0OiAjY2JkNWUxOwogICAgICAgIC0taW5wdXQtYmc6ICNmZmZmZmY7CiAgICB9CgogICAgW2RhdGEtdGhlbWU9ImRhcmsiXSB7CiAgICAgICAgLS1iZy1ncmFkaWVudDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzBmMTcyYSAwJSwgIzFlMWI0YiAxMDAlKTsKICAgICAgICAtLWdsYXNzLWJnOiByZ2JhKDE1LCAyMywgNDIsIDAuNzUpOwogICAgICAgIC0tZ2xhc3MtYm9yZGVyOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgICAgIC0tZ2xhc3Mtc2hhZG93OiAwIDI0cHggNTBweCAtMTJweCByZ2JhKDAsIDAsIDAsIDAuNik7CiAgICAgICAgCiAgICAgICAgLS10ZXh0LWRhcms6ICNmOGZhZmM7CiAgICAgICAgLS10ZXh0LW11dGVkOiAjY2JkNWUxOwogICAgICAgIC0tYm9yZGVyLWxpZ2h0OiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICAgICAgLS1pbnB1dC1iZzogcmdiYSgzMCwgNDEsIDU5LCAwLjcpOwogICAgfQoKICAgIGJvZHkgeyBmb250LWZhbWlseTogJ1BsdXMgSmFrYXJ0YSBTYW5zJywgc2Fucy1zZXJpZjsgYmFja2dyb3VuZDogdmFyKC0tYmctZ3JhZGllbnQpOyBjb2xvcjogdmFyKC0tdGV4dC1kYXJrKTsgbWFyZ2luOiAwOyBwYWRkaW5nOiAyMHB4OyB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuM3MsIGNvbG9yIDAuM3M7IG1pbi1oZWlnaHQ6IDEwMHZoOyBwb3NpdGlvbjogcmVsYXRpdmU7IG92ZXJmbG93LXg6IGhpZGRlbjsgfQogICAgKiB7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH0KICAgICo6Zm9jdXMtdmlzaWJsZSB7IG91dGxpbmU6IDNweCBzb2xpZCB2YXIoLS1icmFuZC1nb2xkKTsgb3V0bGluZS1vZmZzZXQ6IDJweDsgYm9yZGVyLXJhZGl1czogNHB4OyB9CiAgICAuc2VyaWYgeyBmb250LWZhbWlseTogJ1BsYXlmYWlyIERpc3BsYXknLCBzZXJpZjsgfQogICAgLmNhbGlmb3JuaWEtZmIsIGgxLCBoMiwgaDMsIGg0IHsgZm9udC1mYW1pbHk6ICdDYWxpZm9ybmlhIEZCJywgJ0NhbGlmb3JuaWFuIEZCJywgJ0Nvcm1vcmFudCBHYXJhbW9uZCcsICdQbGF5ZmFpciBEaXNwbGF5Jywgc2VyaWYgIWltcG9ydGFudDsgZm9udC12YXJpYW50LW51bWVyaWM6IGxpbmluZy1udW1zIHByb3BvcnRpb25hbC1udW1zICFpbXBvcnRhbnQ7IGZvbnQtZmVhdHVyZS1zZXR0aW5nczogImxudW0iIDEsICJwbnVtIiAxICFpbXBvcnRhbnQ7IC13ZWJraXQtZm9udC1mZWF0dXJlLXNldHRpbmdzOiAibG51bSIgMSwgInBudW0iIDEgIWltcG9ydGFudDsgLW1vei1mb250LWZlYXR1cmUtc2V0dGluZ3M6ICJsbnVtIiAxLCAicG51bSIgMSAhaW1wb3J0YW50OyB9CgogICAgLnRoZW1lLXRvZ2dsZSB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAyMHB4OyByaWdodDogMjBweDsgYmFja2dyb3VuZDogdmFyKC0tZ2xhc3MtYmcpOyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1nbGFzcy1ib3JkZXIpOyBwYWRkaW5nOiAxMHB4IDE2cHg7IGJvcmRlci1yYWRpdXM6IDUwcHg7IGN1cnNvcjogcG9pbnRlcjsgY29sb3I6IHZhcigtLXRleHQtZGFyayk7IGZvbnQtd2VpZ2h0OiA4MDA7IGZvbnQtc2l6ZTogMC44NXJlbTsgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDI1cHgpIHNhdHVyYXRlKDEyMCUpOyB6LWluZGV4OiAxMDA7IGJveC1zaGFkb3c6IHZhcigtLWdsYXNzLXNoYWRvdyk7IHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzOyB9CiAgICAudGhlbWUtdG9nZ2xlOmhvdmVyIHsgdHJhbnNmb3JtOiBzY2FsZSgxLjA1KTsgfQoKICAgIC5jeWJlci1nbGFzcyB7IGJhY2tncm91bmQ6IHZhcigtLWdsYXNzLWJnKTsgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDI1cHgpIHNhdHVyYXRlKDEyMCUpOyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1nbGFzcy1ib3JkZXIpOyBib3JkZXItcmFkaXVzOiAyMHB4OyBib3gtc2hhZG93OiB2YXIoLS1nbGFzcy1zaGFkb3cpOyBwb3NpdGlvbjogcmVsYXRpdmU7IHotaW5kZXg6IDEwOyBtYXgtd2lkdGg6IDgyMHB4OyBtYXJnaW46IDMwcHggYXV0bzsgcGFkZGluZzogY2xhbXAoMjBweCwgNHZ3LCAzNnB4KTsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfQogICAgQG1lZGlhKG1heC13aWR0aDogNzY4cHgpIHsgLmN5YmVyLWdsYXNzIHsgcGFkZGluZzogMjBweDsgbWFyZ2luLXRvcDogODBweDsgfSB9CgogICAgLmE3bXEtYnRuIHsgYmFja2dyb3VuZDogdmFyKC0tYnJhbmQtZ29sZCk7IGNvbG9yOiB2YXIoLS1icmFuZC1ibHVlKTsgcGFkZGluZzogMTZweCAzMnB4OyBmb250LXNpemU6IDEuMXJlbTsgZm9udC13ZWlnaHQ6IDkwMDsgYm9yZGVyOiBub25lOyBib3JkZXItcmFkaXVzOiAxMnB4OyBjdXJzb3I6IHBvaW50ZXI7IHRyYW5zaXRpb246IGFsbCAwLjJzOyB0ZXh0LWFsaWduOiBjZW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgd2lkdGg6IDEwMCU7IGJveC1zaGFkb3c6IDAgNHB4IDE1cHggcmdiYSgyNTMsIDIyNCwgNzEsIDAuMyk7IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IGxldHRlci1zcGFjaW5nOiAxcHg7IH0KICAgIC5hN21xLWJ0bjpkaXNhYmxlZCB7IGJhY2tncm91bmQ6IHZhcigtLWJvcmRlci1saWdodCkgIWltcG9ydGFudDsgY29sb3I6IHZhcigtLXRleHQtbXV0ZWQpICFpbXBvcnRhbnQ7IGN1cnNvcjogbm90LWFsbG93ZWQ7IGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsgb3BhY2l0eTogMC44OyB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDsgfQogICAgLmE3bXEtYnRuOm5vdCg6ZGlzYWJsZWQpOmhvdmVyIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpOyBmaWx0ZXI6IGJyaWdodG5lc3MoMS4wOCk7IGJveC1zaGFkb3c6IDAgNnB4IDIwcHggcmdiYSgyNTMsIDIyNCwgNzEsIDAuNSk7IH0KCiAgICAucmF0aW5nLWJ0biB7IGRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyBnYXA6IDRweDsgcGFkZGluZzogMTJweCA0cHg7IGJvcmRlci1yYWRpdXM6IDE2cHg7IGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7IGJhY2tncm91bmQ6IHZhcigtLWlucHV0LWJnKTsgY29sb3I6IHZhcigtLXRleHQtZGFyayk7IGN1cnNvcjogcG9pbnRlcjsgdHJhbnNpdGlvbjogYWxsIDAuMnM7IH0KICAgIC5yYXRpbmctYnRuOmhvdmVyIHsgYm9yZGVyLWNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTsgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjAyKTsgfQogICAgW2RhdGEtdGhlbWU9ImRhcmsiXSAucmF0aW5nLWJ0bjpob3ZlciB7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wNSk7IH0KICAgIC5yYXRpbmctYnRuLmFjdGl2ZSB7IGJvcmRlci1jb2xvcjogI2NhOGEwNDsgYmFja2dyb3VuZDogcmdiYSgyNTMsIDIyNCwgNzEsIDAuMTUpOyB0cmFuc2Zvcm06IHNjYWxlKDEuMDUpOyBib3gtc2hhZG93OiAwIDRweCAxMHB4IHJnYmEoMjAyLCAxMzgsIDQsIDAuMTUpOyB9CiAgICBbZGF0YS10aGVtZT0iZGFyayJdIC5yYXRpbmctYnRuLmFjdGl2ZSB7IGJvcmRlci1jb2xvcjogdmFyKC0tYnJhbmQtZ29sZCk7IGJhY2tncm91bmQ6IHJnYmEoMjUzLCAyMjQsIDcxLCAwLjEyKTsgYm94LXNoYWRvdzogMCA0cHggMTBweCByZ2JhKDI1MywgMjI0LCA3MSwgMC4yNSk7IH0KCiAgICAuYTdtcS1wcm9ncmVzcy1iYXIgeyBiYWNrZ3JvdW5kOiB2YXIoLS1ib3JkZXItbGlnaHQpOyBoZWlnaHQ6IDEwcHg7IGJvcmRlci1yYWRpdXM6IDVweDsgbWFyZ2luLWJvdHRvbTogMzBweDsgb3ZlcmZsb3c6IGhpZGRlbjsgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggM3B4IHJnYmEoMCwwLDAsMC4xKTsgfQogICAgLmE3bXEtcHJvZ3Jlc3MtZmlsbCB7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgdmFyKC0tYnJhbmQtYmx1ZSksIHZhcigtLWJyYW5kLWdvbGQpKTsgaGVpZ2h0OiAxMDAlOyB0cmFuc2l0aW9uOiB3aWR0aCAwLjRzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7IH0KCiAgICAuYTdtcS1zcGluIHsgYW5pbWF0aW9uOiBhN21xU3BpbiAxcyBsaW5lYXIgaW5maW5pdGU7IH0KICAgIEBrZXlmcmFtZXMgYTdtcVNwaW4geyBmcm9tIHsgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7IH0gdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOyB9IH0KCiAgICAuc3RhdC1waWxsIHsgZm9udC1zaXplOiAwLjg1cmVtOyBwYWRkaW5nOiA2cHggMTJweDsgYm9yZGVyLXJhZGl1czogMTJweDsgaGVpZ2h0OiBmaXQtY29udGVudDsgZGlzcGxheTogaW5saW5lLWZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogNnB4OyBmb250LXdlaWdodDogOTAwOyB9CiAgICAucmVzdWx0LXNlY3Rpb24geyBiYWNrZ3JvdW5kOiB2YXIoLS1pbnB1dC1iZyk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7IGJvcmRlci1yYWRpdXM6IDE2cHg7IHBhZGRpbmc6IDMwcHg7IG1hcmdpbi1ib3R0b206IDIwcHg7IGJveC1zaGFkb3c6IDAgNHB4IDE1cHggcmdiYSgwLDAsMCwwLjAyKTsgfQoKLyogQXNzZXNzbWVudCBOYXZpZ2F0aW9uIEJhciAqLwojYTdtcS1hc3Nlc3NtZW50LXJvb3QgeyBwYWRkaW5nLXRvcDogODBweDsgfSAvKiBQdXNoZXMgY29udGVudCBkb3duIHNvIG5hdiBkb2Vzbid0IG92ZXJsYXAgKi8KLmE3bXEtdG9wLW5hdiB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMjBweDsgbGVmdDogMjBweDsgcmlnaHQ6IDIwcHg7CiAgICBkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICB6LWluZGV4OiAxMDA7IG1heC13aWR0aDogMTEwMHB4OyBtYXJnaW46IDAgYXV0bzsKfQoubmF2LXJpZ2h0LWdyb3VwIHsgZGlzcGxheTogZmxleDsgZ2FwOiAxMHB4OyB9Ci5uYXYtYnRuIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWdsYXNzLWJnKTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZ2xhc3MtYm9yZGVyKTsKICAgIHBhZGRpbmc6IDEwcHggMTZweDsgYm9yZGVyLXJhZGl1czogNTBweDsgY3Vyc29yOiBwb2ludGVyOwogICAgY29sb3I6IHZhcigtLXRleHQtZGFyayk7IGZvbnQtd2VpZ2h0OiA4MDA7IGZvbnQtc2l6ZTogMC44NXJlbTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigyNXB4KSBzYXR1cmF0ZSgxMjAlKTsgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoMjVweCkgc2F0dXJhdGUoMTIwJSk7CiAgICBib3gtc2hhZG93OiB2YXIoLS1nbGFzcy1zaGFkb3cpOyB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycywgZmlsdGVyIDAuMnM7Cgp9Ci5uYXYtYnRuOmhvdmVyIHsgdHJhbnNmb3JtOiBzY2FsZSgxLjA1KTsgZmlsdGVyOiBicmlnaHRuZXNzKDEuMSk7IH0KICAgIC8qIF1dPiAqLwoKCiAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICBXQ0FHIDIuMSBBQSBTVFJJQ1QgQURBIENPTVBMSUFOQ0U6IENPTlRSQVNUIE1BVFJJWAogICAgICAgTGlnaHQgTW9kZTogU29saWQgTmF2eSAoIzBkMGY2YSAvICMwZjE3MmEpIG9uIHdoaXRlICgxNS4yOjEgY29udHJhc3QpCiAgICAgICBEYXJrIE1vZGU6IFB1cmUgTHVtaW5lc2NlbnQgV2hpdGUgKCNmZmZmZmYpIG9uIGRhcmsgKDE2LjU6MSBjb250cmFzdCkKICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCiAgICBoMSwgaDIsIGgzLCBoNCwgaDUsIGg2LCAuY2FsaWZvcm5pYS1mYiwgLmJyYW5kLWhlYWRlci10ZXh0IHsKICAgICAgICBjb2xvcjogdmFyKC0tYnJhbmQtYmx1ZSk7CiAgICB9CgogICAgW2RhdGEtdGhlbWU9ImRhcmsiXSBoMSwKICAgIFtkYXRhLXRoZW1lPSJkYXJrIl0gaDIsCiAgICBbZGF0YS10aGVtZT0iZGFyayJdIGgzLAogICAgW2RhdGEtdGhlbWU9ImRhcmsiXSBoNCwKICAgIFtkYXRhLXRoZW1lPSJkYXJrIl0gaDUsCiAgICBbZGF0YS10aGVtZT0iZGFyayJdIGg2LAogICAgW2RhdGEtdGhlbWU9ImRhcmsiXSAuY2FsaWZvcm5pYS1mYiwKICAgIFtkYXRhLXRoZW1lPSJkYXJrIl0gLmJyYW5kLWhlYWRlci10ZXh0LAogICAgW2RhdGEtdGhlbWU9ImRhcmsiXSB0aCwKICAgIFtkYXRhLXRoZW1lPSJkYXJrIl0gc3Ryb25nLAogICAgW2RhdGEtdGhlbWU9ImRhcmsiXSAjcXVpei1oZWFkZXIsCiAgICBbZGF0YS10aGVtZT0iZGFyayJdICNxdWVzdGlvbi10ZXh0LAogICAgW2RhdGEtdGhlbWU9ImRhcmsiXSAjcmVzLXRvdGFsLXNjb3JlLAogICAgW2RhdGEtdGhlbWU9ImRhcmsiXSAucmVzdWx0LXNlY3Rpb24gaDIsCiAgICBbZGF0YS10aGVtZT0iZGFyayJdIC5yZXN1bHQtc2VjdGlvbiBoMywKICAgIFtkYXRhLXRoZW1lPSJkYXJrIl0gLnJlc3VsdC1zZWN0aW9uIGg0IHsKICAgICAgICBjb2xvcjogI2ZmZmZmZiAhaW1wb3J0YW50OwogICAgICAgIHRleHQtc2hhZG93OiAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjYpICFpbXBvcnRhbnQ7CiAgICB9CgogICAgW2RhdGEtdGhlbWU9ImRhcmsiXSBbc3R5bGUqPSJjb2xvcjogdmFyKC0tYnJhbmQtYmx1ZSkiXSwKICAgIFtkYXRhLXRoZW1lPSJkYXJrIl0gW3N0eWxlKj0iY29sb3I6ICMwZDBmNmEiXSwKICAgIFtkYXRhLXRoZW1lPSJkYXJrIl0gW3N0eWxlKj0iY29sb3I6IzBkMGY2YSJdLAogICAgW2RhdGEtdGhlbWU9ImRhcmsiXSBbc3R5bGUqPSJjb2xvcjogcmdiKDEzLCAxNSwgMTA2KSJdIHsKICAgICAgICBjb2xvcjogI2ZmZmZmZiAhaW1wb3J0YW50OwogICAgfQoKICAgIFtkYXRhLXRoZW1lPSJkYXJrIl0gLnJlc3VsdC1zZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE1LCAyMywgNDIsIDAuOTUpICFpbXBvcnRhbnQ7CiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMikgIWltcG9ydGFudDsKICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCByZ2JhKDAsIDAsIDAsIDAuNSkgIWltcG9ydGFudDsKICAgICAgICBjb2xvcjogI2ZmZmZmZiAhaW1wb3J0YW50OwogICAgfQoKICAgIFtkYXRhLXRoZW1lPSJkYXJrIl0gLnJlc3VsdC1zZWN0aW9uIHAsCiAgICBbZGF0YS10aGVtZT0iZGFyayJdIC5yZXN1bHQtc2VjdGlvbiB0ZCB7CiAgICAgICAgY29sb3I6ICNmMWY1ZjkgIWltcG9ydGFudDsKICAgIH0KCiAgICBbZGF0YS10aGVtZT0iZGFyayJdIC5yZXN1bHQtc2VjdGlvbiB0aCB7CiAgICAgICAgYmFja2dyb3VuZDogIzFlMjkzYiAhaW1wb3J0YW50OwogICAgICAgIGNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKSAhaW1wb3J0YW50OwogICAgfQoKICAgIFtkYXRhLXRoZW1lPSJkYXJrIl0gLnJlc3VsdC1zZWN0aW9uIHRyOm50aC1jaGlsZChldmVuKSB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KSAhaW1wb3J0YW50OwogICAgfQoKICAgIFtkYXRhLXRoZW1lPSJkYXJrIl0gLnJlc3VsdC1zZWN0aW9uIHRyOm50aC1jaGlsZChvZGQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE1LCAyMywgNDIsIDAuOCkgIWltcG9ydGFudDsKICAgIH0KCiAgICBbZGF0YS10aGVtZT0iZGFyayJdICNyZXMtdG90YWwtc2NvcmUgc3BhbiB7CiAgICAgICAgY29sb3I6ICNjYmQ1ZTEgIWltcG9ydGFudDsKICAgIH0KCiAgICBbZGF0YS10aGVtZT0iZGFyayJdICNyZXMtc3RhdHVzLWRlc2MgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMzAsIDQxLCA1OSwgMC45KSAhaW1wb3J0YW50OwogICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpICFpbXBvcnRhbnQ7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCAjNjBhNWZhICFpbXBvcnRhbnQ7CiAgICAgICAgY29sb3I6ICNmOGZhZmMgIWltcG9ydGFudDsKICAgIH0KCiAgICBbZGF0YS10aGVtZT0iZGFyayJdICNzdWJzY29yZXMtY29udGFpbmVyID4gZGl2IHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDMwLCA0MSwgNTksIDAuOCkgIWltcG9ydGFudDsKICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgIWltcG9ydGFudDsKICAgIH0KCiAgICBbZGF0YS10aGVtZT0iZGFyayJdICNzdWJzY29yZXMtY29udGFpbmVyIHN0cm9uZyB7CiAgICAgICAgY29sb3I6ICNmZmZmZmYgIWltcG9ydGFudDsKICAgIH0KCiAgICBbZGF0YS10aGVtZT0iZGFyayJdICNzdWJzY29yZXMtY29udGFpbmVyIHAgewogICAgICAgIGNvbG9yOiAjY2JkNWUxICFpbXBvcnRhbnQ7CiAgICB9CgogICAgW2RhdGEtdGhlbWU9ImRhcmsiXSAjc3Vic2NvcmVzLWNvbnRhaW5lciBkaXZbc3R5bGUqPSJmb250LXNpemU6IDEuMzVyZW0iXSB7CiAgICAgICAgY29sb3I6ICNmZmZmZmYgIWltcG9ydGFudDsKICAgIH0KCiAgICBbZGF0YS10aGVtZT0iZGFyayJdICNxdWl6LXBpbGxhci1iYWRnZSB7CiAgICAgICAgYmFja2dyb3VuZDogIzI1NjNlYiAhaW1wb3J0YW50OwogICAgICAgIGNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgQVVUSE9SSVRBVElWRSBQUklOVCAmIFBERiBFWFBPUlQgU1RZTEVTSEVFVCAoV0NBRyBBQSAmIFpFUk8gUEFHRSBDTElQUElORykKICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KICAgIEBtZWRpYSBwcmludCB7CiAgICAgICAgQHBhZ2UgewogICAgICAgICAgICBzaXplOiBsZXR0ZXIgcG9ydHJhaXQ7CiAgICAgICAgICAgIG1hcmdpbjogMC40aW4gMC40NWluIDAuNDVpbiAwLjQ1aW47CiAgICAgICAgfQoKICAgICAgICA6cm9vdCwgW2RhdGEtdGhlbWU9ImRhcmsiXSwgYm9keSwgaHRtbCB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmYgIWltcG9ydGFudDsKICAgICAgICAgICAgY29sb3I6ICMwMDAwMDAgIWltcG9ydGFudDsKICAgICAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgUm9ib3RvLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogOXB0ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjM1ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIC13ZWJraXQtcHJpbnQtY29sb3ItYWRqdXN0OiBleGFjdCAhaW1wb3J0YW50OwogICAgICAgICAgICBwcmludC1jb2xvci1hZGp1c3Q6IGV4YWN0ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIG1hcmdpbjogMCAhaW1wb3J0YW50OwogICAgICAgICAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgICAgICAgfQoKICAgICAgICAjYTdtcS1hc3Nlc3NtZW50LXJvb3QsIC5jeWJlci1nbGFzcyB7CiAgICAgICAgICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgICAgICAgICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwogICAgICAgICAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50OwogICAgICAgIH0KCiAgICAgICAgLm5vLXByaW50LCBuYXYsIC5hN21xLXRvcC1uYXYsICNzdWJtaXNzaW9uLXN1Y2Nlc3MtYmFubmVyLCAjdGhlbWUtYnRuLCBidXR0b24sIC5uYXYtYmFyLCAjbW91c2UtZ2xvdywgI3ZpZXctaW50cm8sICN2aWV3LXF1aXosICN2aWV3LWxvYWRpbmcsIC5maXhlZCwgLmZsb2F0aW5nLWJhciB7CiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgICB9CgogICAgICAgICN2aWV3LXJlc3VsdHMgewogICAgICAgICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OwogICAgICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50OwogICAgICAgICAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICAgICAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgICAgICAgICBvdmVyZmxvdzogdmlzaWJsZSAhaW1wb3J0YW50OwogICAgICAgIH0KCiAgICAgICAgLyogU0VDVElPTiAvIENBUkQgUEFHRSBCUkVBSyBHVUFSRFMgKi8KICAgICAgICAucmVzdWx0LXNlY3Rpb24gewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM5NGEzYjggIWltcG9ydGFudDsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKICAgICAgICAgICAgcGFkZGluZzogMTRweCAxOHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE0cHggIWltcG9ydGFudDsKICAgICAgICAgICAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGJyZWFrLWluc2lkZTogYXZvaWQgIWltcG9ydGFudDsKICAgICAgICAgICAgY29sb3I6ICMwMDAwMDAgIWltcG9ydGFudDsKICAgICAgICB9CgogICAgICAgIC5yZXN1bHQtc2VjdGlvbiAqIHsKICAgICAgICAgICAgY29sb3I6ICMwMDAwMDAgIWltcG9ydGFudDsKICAgICAgICAgICAgdGV4dC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKICAgICAgICB9CgogICAgICAgIC8qIEhFQURJTkdTIE1VU1QgTkVWRVIgQkUgT1JQSEFORUQgQVQgQk9UVE9NIE9GIFBBR0VTICovCiAgICAgICAgaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgLmNhbGlmb3JuaWEtZmIsIC5icmFuZC1oZWFkaW5nLCAuc2VjdGlvbi10aXRsZSB7CiAgICAgICAgICAgIHBhZ2UtYnJlYWstYWZ0ZXI6IGF2b2lkICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGJyZWFrLWFmdGVyOiBhdm9pZCAhaW1wb3J0YW50OwogICAgICAgICAgICBicmVhay1pbnNpZGU6IGF2b2lkICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGNvbG9yOiAjMDAwMDAwICFpbXBvcnRhbnQ7CiAgICAgICAgfQoKICAgICAgICAvKiBUQUJMRSBNVUxUSS1QQUdFIFNQTElUICYgUkVQRUFURUQgSEVBREVSUyAqLwogICAgICAgIHRhYmxlIHsKICAgICAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSAhaW1wb3J0YW50OwogICAgICAgICAgICBwYWdlLWJyZWFrLWluc2lkZTogYXV0byAhaW1wb3J0YW50OwogICAgICAgICAgICBicmVhay1pbnNpZGU6IGF1dG8gIWltcG9ydGFudDsKICAgICAgICAgICAgbWFyZ2luLXRvcDogOHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgfQoKICAgICAgICB0aGVhZCB7CiAgICAgICAgICAgIGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cCAhaW1wb3J0YW50OwogICAgICAgIH0KCiAgICAgICAgdGZvb3QgewogICAgICAgICAgICBkaXNwbGF5OiB0YWJsZS1mb290ZXItZ3JvdXAgIWltcG9ydGFudDsKICAgICAgICB9CgogICAgICAgIHRyIHsKICAgICAgICAgICAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGJyZWFrLWluc2lkZTogYXZvaWQgIWltcG9ydGFudDsKICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNjYmQ1ZTEgIWltcG9ydGFudDsKICAgICAgICB9CgogICAgICAgIHRoIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogI2YxZjVmOSAhaW1wb3J0YW50OwogICAgICAgICAgICBjb2xvcjogIzAwMDAwMCAhaW1wb3J0YW50OwogICAgICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgIzAwMDAwMCAhaW1wb3J0YW50OwogICAgICAgICAgICBmb250LXdlaWdodDogOTAwICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIHBhZGRpbmc6IDZweCAxMHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogOC41cHQgIWltcG9ydGFudDsKICAgICAgICB9CgogICAgICAgIHRkIHsKICAgICAgICAgICAgcGFkZGluZzogNXB4IDEwcHggIWltcG9ydGFudDsKICAgICAgICAgICAgZm9udC1zaXplOiA4cHQgIWltcG9ydGFudDsKICAgICAgICAgICAgY29sb3I6ICMwMDAwMDAgIWltcG9ydGFudDsKICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZSAhaW1wb3J0YW50OwogICAgICAgIH0KCiAgICAgICAgLnByb2dyZXNzLXRyYWNrIHsKICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzMzMzMzMyAhaW1wb3J0YW50OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZjFmNWY5ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGhlaWdodDogOHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgfQoKICAgICAgICAucHJvZ3Jlc3MtdHJhY2sgPiBkaXYgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDAwMDAwICFpbXBvcnRhbnQ7CiAgICAgICAgfQogICAgfQoKICAgIDwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CiAgICA8ZGl2IGlkPSJhN21xLWFzc2Vzc21lbnQtcm9vdCI+CiAgICAgICAgPG5hdiBjbGFzcz0iYTdtcS10b3AtbmF2IG5vLXByaW50Ij4KICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0ibmF2LWJ0biIgaWQ9Im5hdi1iYWNrLWJ0biIgb25jbGljaz0id2luZG93LmxvY2F0aW9uLmhyZWY9Jy9kYXNoYm9hcmQnIj7ihpAgRGFzaGJvYXJkPC9idXR0b24+CiAgICA8ZGl2IGNsYXNzPSJuYXYtcmlnaHQtZ3JvdXAiPgogICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0ibmF2LWJ0biIgaWQ9ImJ0bi1zYXZlLXJldHVybiI+8J+SviBTYXZlICYgUmV0dXJuPC9idXR0b24+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJuYXYtYnRuIiBpZD0idGhlbWUtYnRuIj7imIDvuI8gTGlnaHQgTW9kZTwvYnV0dG9uPgogICAgPC9kaXY+CjwvbmF2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZCBpbnNldC0wIG92ZXJmbG93LWhpZGRlbiBwb2ludGVyLWV2ZW50cy1ub25lIHotMCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFic29sdXRlIHRvcC1bLTUlXSBsZWZ0LVstNSVdIHctWzUwMHB4XSBoLVs1MDBweF0gYmcteWVsbG93LTUwMC8xNSBkYXJrOmJnLXllbGxvdy02MDAvMTUgcm91bmRlZC1mdWxsIGJsdXItWzEyMHB4XSBhbmltYXRlLWJsb2IiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBib3R0b20tWzUlXSByaWdodC1bLTUlXSB3LVs2MDBweF0gaC1bNjAwcHhdIGJnLWJsdWUtNDAwLzEwIGRhcms6YmctYmx1ZS02MDAvMTAgcm91bmRlZC1mdWxsIGJsdXItWzE0MHB4XSBhbmltYXRlLWJsb2IiIHN0eWxlPSJhbmltYXRpb24tZGVsYXk6IDRzOyI+PC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9ImN5YmVyLWdsYXNzIj4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxkaXYgaWQ9InZpZXctaW50cm8iIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IHBhZGRpbmc6IDIwcHggMTBweDsiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImJnLXllbGxvdy01MDAvMTUgdGV4dC1hbWJlci05MDAgZGFyazpiZy15ZWxsb3ctNDAwLzIwIGRhcms6dGV4dC15ZWxsb3ctMzAwIGZvbnQtZXh0cmFib2xkIHRleHQtWzEwcHhdIHRyYWNraW5nLXdpZGVzdCB1cHBlcmNhc2UgcHgtNCBweS0xLjUgcm91bmRlZC1mdWxsIG1iLTQgaW5saW5lLWJsb2NrIj5PcGVyYXRpb25hbCBJbnZlbnRvcnk8L3NwYW4+CiAgICAgICAgICAgICAgICA8aDEgY2xhc3M9ImNhbGlmb3JuaWEtZmIiIHN0eWxlPSJmb250LXNpemU6IGNsYW1wKDEuOHJlbSwgNHZ3LCAyLjVyZW0pOyBjb2xvcjogdmFyKC0tdGV4dC1kYXJrKTsgbWFyZ2luLWJvdHRvbTogMTVweDsgZm9udC13ZWlnaHQ6IDkwMDsgbGluZS1oZWlnaHQ6IDEuMTsiPkFkdWx0IExpZmUgUmVhZGluZXNzIEluZGljYXRvcjwvaDE+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXgtd2lkdGg6IDc1MHB4OyBtYXJnaW46IDAgYXV0byAyNHB4IGF1dG87IHRleHQtYWxpZ246IGxlZnQ7IGZvbnQtc2l6ZTogMXJlbTsgY29sb3I6IHZhcigtLXRleHQtbXV0ZWQpOyBiYWNrZ3JvdW5kOiB2YXIoLS1pbnB1dC1iZyk7IHBhZGRpbmc6IGNsYW1wKDE4cHgsIDN2dywgMjhweCk7IGJvcmRlci1yYWRpdXM6IDE2cHg7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7IGJveC1zaGFkb3c6IDAgNHB4IDE1cHggcmdiYSgwLDAsMCwwLjAyKTsgbGluZS1oZWlnaHQ6IDEuNTsiPgogICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAyMHB4OyI+VGhlIHB1cnBvc2Ugb2YgdGhpcyBpbnZlbnRvcnkgaXMgdG8gaGVscCB5b3UgYXNzZXNzIGhvdyBvZnRlbiB5b3UgcHJhY3RpY2UgY29tcGV0ZW5jaWVzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCBtYW5hZ2luZyB5b3VyIHdob2xlIGxpZmUgYXMgYW4gYWR1bHQuPC9wPgogICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAyMHB4OyI+VGhpcyBpcyBub3QgYSB0ZXN0LiBUaGVyZSBhcmUgbm8gcmlnaHQgb3Igd3JvbmcgcmF0aW5ncy4gVGhlcmUgYXJlIG5vIGJldHRlciBvciB3b3JzZSByYXRpbmdzLiBEbyBub3QgcmF0ZSBhIHN0YXRlbWVudCBiYXNlZCBvbiB3aGF0IHlvdSB0aGluayBpcyBzb2NpYWxseSBkZXNpcmFibGUgb3IgZXhwZWN0ZWQgb2YgeW91LiBZb3VyIGludmVudG9yeSByZXN1bHRzIHdpbGwgb25seSBiZSBtZWFuaW5nZnVsIHRvIHRoZSBleHRlbnQgdGhhdCB5b3UgYXJlIGhvbmVzdCB3aGVuIHJhdGluZy48L3A+CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDogcmdiYSgyNTMsIDIyNCwgNzEsIDAuMDgpOyBwYWRkaW5nOiAyNXB4OyBib3JkZXItbGVmdDogNHB4IHNvbGlkIHZhcigtLWJyYW5kLWdvbGQpOyBib3JkZXItcmFkaXVzOiAwIDEycHggMTJweCAwOyBtYXJnaW4tdG9wOiAzMHB4OyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmcgc3R5bGU9ImNvbG9yOiB2YXIoLS1icmFuZC1ibHVlKTsgZGlzcGxheTogYmxvY2s7IG1hcmdpbi1ib3R0b206IDhweDsgZm9udC1zaXplOiAxLjFyZW07Ij5UaGUgSW5zdHJ1Y3Rpb25zOjwvc3Ryb25nPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luOiAwOyBjb2xvcjogdmFyKC0tdGV4dC1kYXJrKTsgZm9udC1zaXplOiAxcmVtOyBsaW5lLWhlaWdodDogMS42OyI+VGhlcmUgYXJlIDQ5IHN0YXRlbWVudHMgZGVzY3JpYmluZyB2YXJpb3VzIGFkdWx0IGxpZmUgbWFuYWdlbWVudCBjb21wZXRlbmNpZXMuIFBsZWFzZSByZWFkIHRoZSBzdGF0ZW1lbnQgY2FyZWZ1bGx5IGFuZCBzZWxlY3QgdGhlIHJhdGluZyB0aGF0IGJlc3QgZGVzY3JpYmVzIGhvdyBvZnRlbiB5b3UgPGVtPmFjdHVhbGx5PC9lbT4gcHJhY3RpY2UgdGhlIGNvbXBldGVuY3kuIFJhdGUgZWFjaCBzdGF0ZW1lbnQuPC9wPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgaWQ9ImJ0bi1zdGFydCIgY2xhc3M9ImE3bXEtYnRuIiBzdHlsZT0ibWF4LXdpZHRoOiAzNTBweDsiPkJlZ2luIEFzc2Vzc21lbnQ8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGlkPSJ2aWV3LXF1aXoiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGFsaWduLWl0ZW1zOiBjZW50ZXI7IG1hcmdpbi1ib3R0b206IDE1cHg7Ij4KICAgICAgICAgICAgICAgICAgICA8aDIgaWQ9InF1aXotaGVhZGVyIiBzdHlsZT0iY29sb3I6IHZhcigtLXRleHQtbXV0ZWQpOyBmb250LXdlaWdodDogOTAwOyBmb250LXNpemU6IDFyZW07IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IG1hcmdpbjogMDsgbGV0dGVyLXNwYWNpbmc6IDFweDsiPlF1ZXN0aW9uIDEgb2YgNDk8L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhN21xLXByb2dyZXNzLWJhciIgYXJpYS1oaWRkZW49InRydWUiPjxkaXYgaWQ9InF1aXotcHJvZ3Jlc3MiIGNsYXNzPSJhN21xLXByb2dyZXNzLWZpbGwiPjwvZGl2PjwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsgbWFyZ2luLWJvdHRvbTogMjRweDsgbWluLWhlaWdodDogOTBweDsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7Ij4KICAgICAgICAgICAgICAgICAgICA8aDEgaWQ9InF1ZXN0aW9uLXRleHQiIGNsYXNzPSJzZXJpZiIgc3R5bGU9ImNvbG9yOiB2YXIoLS10ZXh0LWRhcmspOyBmb250LXNpemU6IGNsYW1wKDEuMjVyZW0sIDIuNXZ3LCAxLjY1cmVtKTsgZm9udC13ZWlnaHQ6IDkwMDsgbGluZS1oZWlnaHQ6IDEuMzsiPkxvYWRpbmcgcXVlc3Rpb24uLi48L2gxPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDUsIDFmcik7IGdhcDogOHB4OyBtYXJnaW4tYm90dG9tOiAyNHB4OyIgaWQ9InJhdGluZy1idXR0b25zLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJyYXRpbmctYnRuIiBkYXRhLXZhbD0iMSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMS4ycmVtOyBmb250LXdlaWdodDogOTAwOyI+MTwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAwLjY1cmVtOyBmb250LXdlaWdodDogODAwOyBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IGxldHRlci1zcGFjaW5nOiAxcHg7Ij5SYXJlbHkgLyBOZXZlcjwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InJhdGluZy1idG4iIGRhdGEtdmFsPSIyIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxLjJyZW07IGZvbnQtd2VpZ2h0OiA5MDA7Ij4yPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDAuNjVyZW07IGZvbnQtd2VpZ2h0OiA4MDA7IGNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgbGV0dGVyLXNwYWNpbmc6IDFweDsiPlNlbGRvbTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InJhdGluZy1idG4iIGRhdGEtdmFsPSIzIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxLjJyZW07IGZvbnQtd2VpZ2h0OiA5MDA7Ij4zPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDAuNjVyZW07IGZvbnQtd2VpZ2h0OiA4MDA7IGNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgbGV0dGVyLXNwYWNpbmc6IDFweDsiPlVzdWFsbHk8L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJyYXRpbmctYnRuIiBkYXRhLXZhbD0iNCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMS4ycmVtOyBmb250LXdlaWdodDogOTAwOyI+NDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAwLjY1cmVtOyBmb250LXdlaWdodDogODAwOyBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IGxldHRlci1zcGFjaW5nOiAxcHg7Ij5GcmVxdWVudGx5PC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0icmF0aW5nLWJ0biIgZGF0YS12YWw9IjUiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEuMnJlbTsgZm9udC13ZWlnaHQ6IDkwMDsiPjU8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMC42NXJlbTsgZm9udC13ZWlnaHQ6IDgwMDsgY29sb3I6IHZhcigtLXRleHQtbXV0ZWQpOyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBsZXR0ZXItc3BhY2luZzogMXB4OyI+QWxtb3N0IEFsd2F5czwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItbGlnaHQpOyBwYWRkaW5nLXRvcDogMjBweDsiPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBpZD0iYnRuLXByZXYiIHN0eWxlPSJiYWNrZ3JvdW5kOiBub25lOyBib3JkZXI6IG5vbmU7IGNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTsgZm9udC13ZWlnaHQ6IDgwMDsgY3Vyc29yOiBwb2ludGVyOyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBsZXR0ZXItc3BhY2luZzogMXB4OyBmb250LXNpemU6IDAuODVyZW07IiBkaXNhYmxlZD7ihpAgQmFjazwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBpZD0iYnRuLW5leHQiIHN0eWxlPSJiYWNrZ3JvdW5kOiBub25lOyBib3JkZXI6IG5vbmU7IGNvbG9yOiAjY2E4YTA0OyBmb250LXdlaWdodDogODAwOyBjdXJzb3I6IHBvaW50ZXI7IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IGxldHRlci1zcGFjaW5nOiAxcHg7IGZvbnQtc2l6ZTogMC44NXJlbTsiIGRpc2FibGVkPk5leHQg4oaSPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSJidG4tc3VibWl0IiBjbGFzcz0iYTdtcS1idG4iIHN0eWxlPSJtYXgtd2lkdGg6IDI4MHB4OyBkaXNwbGF5OiBub25lOyBiYWNrZ3JvdW5kOiAjMTBiOTgxOyBjb2xvcjogI2ZmZmZmZjsgYm94LXNoYWRvdzogMCA0cHggMTVweCByZ2JhKDE2LCAxODUsIDEyOSwgMC40KTsiPlN1Ym1pdCBBc3Nlc3NtZW50IOKGkjwvYnV0dG9uPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBpZD0idmlldy1sb2FkaW5nIiBzdHlsZT0iZGlzcGxheTogbm9uZTsgdGV4dC1hbGlnbjogY2VudGVyOyBwYWRkaW5nOiAxMjBweCAyMHB4OyI+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogOTBweDsgaGVpZ2h0OiA5MHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1MywgMjI0LCA3MSwgMC4xKTsgYm9yZGVyOiA0cHggc29saWQgdmFyKC0tYnJhbmQtZ29sZCk7IGJvcmRlci1yYWRpdXM6IDUwJTsgbWFyZ2luOiAwIGF1dG8gMzVweDsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhN21xLXNwaW4iIHN0eWxlPSJ3aWR0aDogNDVweDsgaGVpZ2h0OiA0NXB4OyBib3JkZXI6IDVweCBzb2xpZCB2YXIoLS1icmFuZC1nb2xkKTsgYm9yZGVyLXRvcC1jb2xvcjogdHJhbnNwYXJlbnQ7IGJvcmRlci1yYWRpdXM6IDUwJTsiPjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9ImNhbGlmb3JuaWEtZmIiIHN0eWxlPSJmb250LXNpemU6IGNsYW1wKDEuNnJlbSwgMy41dncsIDIuMnJlbSk7IGZvbnQtd2VpZ2h0OiA5MDA7IGNvbG9yOiB2YXIoLS1icmFuZC1ibHVlKTsgbWFyZ2luLWJvdHRvbTogMTVweDsiPkNhbGN1bGF0aW5nIFJlYWRpbmVzcy4uLjwvaDI+CiAgICAgICAgICAgICAgICA8cCBzdHlsZT0iY29sb3I6IHZhcigtLXRleHQtbXV0ZWQpOyBmb250LXNpemU6IDEuMnJlbTsgZm9udC13ZWlnaHQ6IDYwMDsiPlByb2Nlc3Npbmcgc3Vic2NvcmVzIGFuZCBlc3RhYmxpc2hpbmcgc2VjdXJlIGRhdGFiYXNlIGNvbm5lY3Rpb24uPC9wPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgaWQ9InZpZXctcmVzdWx0cyIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IiByb2xlPSJyZWdpb24iIGFyaWEtbGFiZWw9IkFkdWx0IExpZmUgUmVhZGluZXNzIEluZGljYXRvciBSZXN1bHRzIFJlcG9ydCI+CiAgICAgICAgICAgICAgICA8IS0tIFNVQ0NFU1MgU1VCTUlTU0lPTiBOT1RJRklDQVRJT04gQkFOTkVSIC0tPgogICAgICAgICAgICAgICAgPGRpdiBpZD0ic3VibWlzc2lvbi1zdWNjZXNzLWJhbm5lciIgc3R5bGU9ImJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICMwNjVmNDYsICMwNDc4NTcpOyBjb2xvcjogI2ZmZmZmZjsgYm9yZGVyLXJhZGl1czogMTRweDsgcGFkZGluZzogMTZweCAyNHB4OyBtYXJnaW4tYm90dG9tOiAyNXB4OyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGJveC1zaGFkb3c6IDAgMTBweCAyNXB4IHJnYmEoNCwgMTIwLCA4NywgMC4yNSk7IGJvcmRlcjogMnB4IHNvbGlkICMzNGQzOTk7IGZsZXgtd3JhcDogd3JhcDsgZ2FwOiAxMnB4OyIgcm9sZT0ic3RhdHVzIiBhcmlhLWxpdmU9InBvbGl0ZSI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiAxNHB4OyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6IDIuMnJlbTsiIGFyaWEtaGlkZGVuPSJ0cnVlIj7inIU8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6IDEuMTVyZW07IGZvbnQtd2VpZ2h0OiA5MDA7IGxldHRlci1zcGFjaW5nOiAwLjVweDsiPkFzc2Vzc21lbnQgU3VjY2Vzc2Z1bGx5IFN1Ym1pdHRlZDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAwLjg4cmVtOyBvcGFjaXR5OiAwLjk1OyI+WW91ciA0OSBzdGF0ZW1lbnQgcmF0aW5ncyBoYXZlIGJlZW4gcmVjb3JkZWQgYW5kIHN5bmNocm9uaXplZCB3aXRoIHRoZSBBZG1pbmlzdHJhdG9yIERhc2hib2FyZC48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSJiYW5uZXItcmV0dXJuLXBvcnRhbC1idG4iIGNsYXNzPSJhN21xLWJ0biBuby1wcmludCIgc3R5bGU9ImJhY2tncm91bmQ6ICNmZmZmZmY7IGNvbG9yOiAjMDY1ZjQ2OyBmb250LXNpemU6IDAuODVyZW07IHBhZGRpbmc6IDEwcHggMjBweDsgd2lkdGg6IGF1dG87IGZvbnQtd2VpZ2h0OiA5MDA7IGJvcmRlci1yYWRpdXM6IDUwcHg7IGRpc3BsYXk6IG5vbmU7IG1hcmdpbjogMDsgYm94LXNoYWRvdzogMCA0cHggMTJweCByZ2JhKDAsMCwwLDAuMTUpOyIgYXJpYS1sYWJlbD0iQ2xvc2UgVmlldyBhbmQgUmV0dXJuIHRvIFBvcnRhbCIgb25jbGljaz0iaGFuZGxlQ2xvc2VWaWV3KCkiPuKclSBDbG9zZSBWaWV3PC9idXR0b24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8IS0tIFJFUE9SVCBIRUFERVIgJiBQUklOVCBDT05UUk9MUyAtLT4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtd3JhcDogd3JhcDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyBhbGlnbi1pdGVtczogZmxleC1lbmQ7IG1hcmdpbi1ib3R0b206IDMwcHg7IGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjY2JkNWUxOyBwYWRkaW5nLWJvdHRvbTogMjBweDsgZ2FwOiAxNXB4OyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICNmZWYzYzc7IGNvbG9yOiAjOTI0MDBlOyBib3JkZXI6IDFweCBzb2xpZCAjZmRlNjhhOyBwYWRkaW5nOiA0cHggMTRweDsgYm9yZGVyLXJhZGl1czogNTBweDsgZm9udC1zaXplOiAwLjc1cmVtOyBmb250LXdlaWdodDogOTAwOyBsZXR0ZXItc3BhY2luZzogMXB4OyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IG1hcmdpbi1ib3R0b206IDhweDsiPk9mZmljaWFsIEV2YWx1YXRpb24gUmVwb3J0PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9ImNhbGlmb3JuaWEtZmIiIHN0eWxlPSJmb250LXNpemU6IGNsYW1wKDEuOHJlbSwgMy41dncsIDIuNHJlbSk7IGNvbG9yOiAjMGQwZjZhOyBtYXJnaW46IDAgMCA0cHggMDsgZm9udC13ZWlnaHQ6IDkwMDsgbGluZS1oZWlnaHQ6IDEuMTU7Ij5BZHVsdCBMaWZlIFJlYWRpbmVzcyBJbmRpY2F0b3IgKEFMUkkpPC9oMj4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9ImNvbG9yOiAjNDc1NTY5OyBmb250LXdlaWdodDogODAwOyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBmb250LXNpemU6IDAuODVyZW07IGxldHRlci1zcGFjaW5nOiAxLjVweDsgbWFyZ2luOiAwOyI+Q29tcHJlaGVuc2l2ZSBEaWFnbm9zdGljIEV2YWx1YXRpb24g4oCiIDQ5IENvbXBldGVuY3kgSXRlbXM8L3A+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgZ2FwOiAxMHB4OyBmbGV4LXdyYXA6IHdyYXA7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSJidG4tcHJpbnQiIGNsYXNzPSJuby1wcmludCIgc3R5bGU9ImJhY2tncm91bmQ6ICNmZmZmZmY7IGNvbG9yOiAjMGQwZjZhOyBib3JkZXI6IDJweCBzb2xpZCAjMGQwZjZhOyBwYWRkaW5nOiAxMnB4IDIycHg7IGJvcmRlci1yYWRpdXM6IDEwcHg7IGZvbnQtd2VpZ2h0OiA5MDA7IGN1cnNvcjogcG9pbnRlcjsgdHJhbnNpdGlvbjogYWxsIDAuMnM7IGJveC1zaGFkb3c6IDAgNHB4IDEwcHggcmdiYSgwLDAsMCwwLjA1KTsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgZm9udC1zaXplOiAwLjg1cmVtOyBsZXR0ZXItc3BhY2luZzogMXB4OyBkaXNwbGF5OiBpbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA2cHg7IiBhcmlhLWxhYmVsPSJQcmludCBldmFsdWF0aW9uIHJlc3VsdHMgb3Igc2F2ZSBhcyBQREYiPvCflqjvuI8gU2F2ZSBhcyBQREY8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSJidG4tdG9wLWNsb3NlLXZpZXciIGNsYXNzPSJuby1wcmludCIgc3R5bGU9ImJhY2tncm91bmQ6ICMwZDBmNmE7IGNvbG9yOiAjZmZmZmZmOyBib3JkZXI6IG5vbmU7IHBhZGRpbmc6IDEycHggMjJweDsgYm9yZGVyLXJhZGl1czogMTBweDsgZm9udC13ZWlnaHQ6IDkwMDsgY3Vyc29yOiBwb2ludGVyOyB0cmFuc2l0aW9uOiBhbGwgMC4yczsgZm9udC1zaXplOiAwLjg1cmVtOyBsZXR0ZXItc3BhY2luZzogMC41cHg7IGRpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDZweDsiIGFyaWEtbGFiZWw9IkNsb3NlIFZpZXcgYW5kIFJldHVybiB0byBQb3J0YWwiIG9uY2xpY2s9ImhhbmRsZUNsb3NlVmlldygpIj7inJUgQ2xvc2UgVmlldzwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPCEtLSBWRVJJRklFRCBDQU5ESURBVEUgJiBJTlNUSVRVVElPTkFMIE1FVEFEQVRBIENBUkQgKFdDQUcgQUEgSGlnaC1Db250cmFzdCkgLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZXN1bHQtc2VjdGlvbiIgc3R5bGU9ImJhY2tncm91bmQ6ICNmZmZmZmY7IGJvcmRlcjogMS41cHggc29saWQgI2NiZDVlMTsgYm9yZGVyLXJhZGl1czogMTRweDsgcGFkZGluZzogMjBweCAyNHB4OyBtYXJnaW4tYm90dG9tOiAyNXB4OyBib3gtc2hhZG93OiAwIDRweCAxNXB4IHJnYmEoMCwwLDAsMC4wMyk7Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDIwMHB4LCAxZnIpKTsgZ2FwOiAxNnB4OyBhbGlnbi1pdGVtczogY2VudGVyOyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6IDAuNzJyZW07IGZvbnQtd2VpZ2h0OiA4MDA7IGNvbG9yOiAjNDc1NTY5OyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBsZXR0ZXItc3BhY2luZzogMC4wNWVtOyBtYXJnaW4tYm90dG9tOiAzcHg7Ij5DYW5kaWRhdGUgLyBVc2VyIENvZGU8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IGZvbnQtc2l6ZTogMS4xNXJlbTsgZm9udC13ZWlnaHQ6IDkwMDsgY29sb3I6ICMwZDBmNmE7IiBpZD0icmVzLXVzZXItY29kZSI+4oCUPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAwLjcycmVtOyBmb250LXdlaWdodDogODAwOyBjb2xvcjogIzQ3NTU2OTsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTsgbWFyZ2luLWJvdHRvbTogM3B4OyI+Q29ob3J0IE9yZ2FuaXphdGlvbjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAxcmVtOyBmb250LXdlaWdodDogODAwOyBjb2xvcjogIzBmMTcyYTsiIGlkPSJyZXMtY29ob3J0LXRpdGxlIj5EaXJlY3QgQ2FuZGlkYXRlPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAwLjcycmVtOyBmb250LXdlaWdodDogODAwOyBjb2xvcjogIzQ3NTU2OTsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTsgbWFyZ2luLWJvdHRvbTogM3B4OyI+RGlhZ25vc3RpYyBQaGFzZTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAwLjk1cmVtOyBmb250LXdlaWdodDogODAwOyIgaWQ9InJlcy1waGFzZS1sYWJlbCI+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICNlMGU3ZmY7IGNvbG9yOiAjMzczMGEzOyBwYWRkaW5nOiAzcHggMTBweDsgYm9yZGVyLXJhZGl1czogNTBweDsgZm9udC1zaXplOiAwLjc4cmVtOyI+UHJlLUFMUkkgQmFzZWxpbmU8L3NwYW4+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAwLjcycmVtOyBmb250LXdlaWdodDogODAwOyBjb2xvcjogIzQ3NTU2OTsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTsgbWFyZ2luLWJvdHRvbTogM3B4OyI+RGF0ZSBDb21wbGV0ZWQ8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZTogMC45MnJlbTsgZm9udC13ZWlnaHQ6IDgwMDsgY29sb3I6ICMzMzQxNTU7IiBpZD0icmVzLWNvbXBsZXRpb24tZGF0ZSI+4oCUPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPCEtLSBFWEVDVVRJVkUgUkVBRElORVNTIFNDT1JFIFNVTU1BUlkgQ0FSRCAtLT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlc3VsdC1zZWN0aW9uIiBzdHlsZT0iYmFja2dyb3VuZDogI2ZmZmZmZjsgYm9yZGVyOiAycHggc29saWQgIzBkMGY2YTsgYm9yZGVyLXJhZGl1czogMTZweDsgcGFkZGluZzogMjhweDsgbWFyZ2luLWJvdHRvbTogMjVweDsgYm94LXNoYWRvdzogMCA2cHggMjBweCByZ2JhKDEzLCAxNSwgMTA2LCAwLjA2KTsiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtd3JhcDogd3JhcDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDI0cHg7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZmxleDogMTsgbWluLXdpZHRoOiAyNTBweDsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMC43NXJlbTsgZm9udC13ZWlnaHQ6IDkwMDsgY29sb3I6ICM0NzU1Njk7IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IGxldHRlci1zcGFjaW5nOiAxcHg7IGRpc3BsYXk6IGJsb2NrOyBtYXJnaW4tYm90dG9tOiA0cHg7Ij5HcmFuZCBSZWFkaW5lc3MgSW5kZXg8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogYmFzZWxpbmU7IGdhcDogMTJweDsgZmxleC13cmFwOiB3cmFwOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAzLjVyZW07IGZvbnQtd2VpZ2h0OiA5MDA7IGNvbG9yOiAjMGQwZjZhOyBsaW5lLWhlaWdodDogMTsiIGlkPSJyZXMtdG90YWwtc2NvcmUiPjAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMS4yNXJlbTsgY29sb3I6ICM0NzU1Njk7IGZvbnQtd2VpZ2h0OiA3MDA7Ij4vIDI0NSBwdHM8L3NwYW4+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAxLjZyZW07IGZvbnQtd2VpZ2h0OiA5MDA7IGNvbG9yOiAjMDQ3ODU3OyIgaWQ9InJlcy1zY29yZS1wY3QiPuKAlDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOiAxMHB4OyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9InJlcy1zdGF0dXMtbGFiZWwiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGZvbnQtc2l6ZTogMC44OHJlbTsgZm9udC13ZWlnaHQ6IDkwMDsgcGFkZGluZzogNnB4IDE0cHg7IGJvcmRlci1yYWRpdXM6IDUwcHg7IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IGxldHRlci1zcGFjaW5nOiAwLjVweDsgYmFja2dyb3VuZDogI2VjZmRmNTsgY29sb3I6ICMwNjVmNDY7IGJvcmRlcjogMS41cHggc29saWQgI2E3ZjNkMDsiPlJlYWRpbmVzcyBJbmRpY2F0b3I8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZsZXg6IDEuNTsgbWluLXdpZHRoOiAyODBweDsgYmFja2dyb3VuZDogI2Y4ZmFmYzsgYm9yZGVyOiAxcHggc29saWQgI2NiZDVlMTsgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCAjMGQwZjZhOyBib3JkZXItcmFkaXVzOiAwIDEycHggMTJweCAwOyBwYWRkaW5nOiAxOHB4IDIycHg7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmcgc3R5bGU9ImNvbG9yOiAjMGQwZjZhOyBmb250LXNpemU6IDAuOTJyZW07IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IGxldHRlci1zcGFjaW5nOiAwLjVweDsgZGlzcGxheTogYmxvY2s7IG1hcmdpbi1ib3R0b206IDZweDsiPkV2YWx1YXRpb24gSW50ZXJwcmV0YXRpb246PC9zdHJvbmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBpZD0icmVzLXN0YXR1cy1kZXNjIiBzdHlsZT0ibWFyZ2luOiAwOyBmb250LXNpemU6IDAuOTVyZW07IGxpbmUtaGVpZ2h0OiAxLjY7IGNvbG9yOiAjMWUyOTNiOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kaXZpZHVhbCBpbmRpY2F0ZXMgc3VzdGFpbmVkIGVuZ2FnZW1lbnQgaW4gaW5kZXBlbmRlbnQgcHJhY3RpY2UgYWNyb3NzIGFkdWx0IGxpZmUgbWFuYWdlbWVudCBjb21wZXRlbmNpZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPCEtLSA3IE1FQ0hBTklTTSBDT01QRVRFTkNZIEJSRUFLRE9XTiBTRUNUSU9OIC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVzdWx0LXNlY3Rpb24iIHN0eWxlPSJiYWNrZ3JvdW5kOiAjZmZmZmZmOyBib3JkZXI6IDEuNXB4IHNvbGlkICNjYmQ1ZTE7IGJvcmRlci1yYWRpdXM6IDE2cHg7IHBhZGRpbmc6IDI4cHg7IG1hcmdpbi1ib3R0b206IDI1cHg7IGJveC1zaGFkb3c6IDAgNHB4IDE1cHggcmdiYSgwLDAsMCwwLjAzKTsiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgYWxpZ24taXRlbXM6IGNlbnRlcjsgbWFyZ2luLWJvdHRvbTogMjRweDsgZmxleC13cmFwOiB3cmFwOyBnYXA6IDEwcHg7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTJlOGYwOyBwYWRkaW5nLWJvdHRvbTogMTRweDsiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIHN0eWxlPSJjb2xvcjogIzBkMGY2YTsgZm9udC13ZWlnaHQ6IDkwMDsgZm9udC1zaXplOiAxLjNyZW07IG1hcmdpbjogMDsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgbGV0dGVyLXNwYWNpbmc6IDAuNXB4OyI+U2V2ZW4tTWVjaGFuaXNtIENvbXBldGVuY3kgQnJlYWtkb3duPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW46IDRweCAwIDAgMDsgZm9udC1zaXplOiAwLjg4cmVtOyBjb2xvcjogIzQ3NTU2OTsiPkRpYWdub3N0aWMgc3Vic2NvcmVzIGFjcm9zcyB0aGUgNyBmb3VuZGF0aW9uYWwgYWR1bHQgbGlmZSBtYW5hZ2VtZW50IG1lY2hhbmlzbXMgKE91dCBvZiAzNSBQb2ludHMgcGVyIFBpbGxhcikuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAwLjc4cmVtOyBmb250LXdlaWdodDogODAwOyBjb2xvcjogIzQ3NTU2OTsgYmFja2dyb3VuZDogI2Y4ZmFmYzsgcGFkZGluZzogNnB4IDEycHg7IGJvcmRlci1yYWRpdXM6IDhweDsgYm9yZGVyOiAxcHggc29saWQgI2NiZDVlMTsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NhbGU6IDI44oCTMzUgSGlnaCDigKIgMjHigJMyNyBNb2RlcmF0ZSDigKIgJmx0OzIxIERldmVsb3BpbmcKICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0ic3Vic2NvcmVzLWNvbnRhaW5lciIgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogMjBweDsiPgogICAgICAgICAgICAgICAgICAgICAgICA8IS0tIER5bmFtaWNhbGx5IHBvcHVsYXRlZCA3IGNvbXBldGVuY3kgcGlsbGFycyB3aXRoIGFjY2Vzc2libGUgQVJJQSBwcm9ncmVzcyBiYXJzIC0tPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPCEtLSBGVUxMIElURU1JWkVEIDQ5LVNUQVRFTUVOVCBSQVRJTkdTIEFVRElUIFRBQkxFIChXQ0FHIEFBIENvbXBsaWFudCkgLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZXN1bHQtc2VjdGlvbiIgc3R5bGU9ImJhY2tncm91bmQ6ICNmZmZmZmY7IGJvcmRlcjogMS41cHggc29saWQgI2NiZDVlMTsgYm9yZGVyLXJhZGl1czogMTZweDsgcGFkZGluZzogMjhweDsgbWFyZ2luLWJvdHRvbTogMzBweDsgYm94LXNoYWRvdzogMCA0cHggMTVweCByZ2JhKDAsMCwwLDAuMDMpOyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyBhbGlnbi1pdGVtczogY2VudGVyOyBtYXJnaW4tYm90dG9tOiAyMHB4OyBmbGV4LXdyYXA6IHdyYXA7IGdhcDogMTBweDsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlMmU4ZjA7IHBhZGRpbmctYm90dG9tOiAxNHB4OyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgc3R5bGU9ImNvbG9yOiAjMGQwZjZhOyBmb250LXdlaWdodDogOTAwOyBmb250LXNpemU6IDEuM3JlbTsgbWFyZ2luOiAwOyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBsZXR0ZXItc3BhY2luZzogMC41cHg7Ij5JdGVtaXplZCBEaWFnbm9zdGljIFN0YXRlbWVudCBSZXNwb25zZXMgKFN0YXRlbWVudHMgMeKAkzQ5KTwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luOiA0cHggMCAwIDA7IGZvbnQtc2l6ZTogMC44OHJlbTsgY29sb3I6ICM0NzU1Njk7Ij5BdWRpdGVkIHN0YXRlbWVudCByYXRpbmdzIHN1Ym1pdHRlZCBieSBjYW5kaWRhdGUgYWNyb3NzIHRoZSBjb21wbGV0ZSA0OS1pdGVtIG9wZXJhdGlvbmFsIGludmVudG9yeS48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6IDAuNzhyZW07IGZvbnQtd2VpZ2h0OiA4MDA7IGNvbG9yOiAjMGQwZjZhOyBiYWNrZ3JvdW5kOiAjZTBlN2ZmOyBwYWRkaW5nOiA2cHggMTRweDsgYm9yZGVyLXJhZGl1czogNTBweDsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgNDkgb2YgNDkgU3RhdGVtZW50cyBFdmFsdWF0ZWQKICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9Im92ZXJmbG93LXg6IGF1dG87Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIHN0eWxlPSJ3aWR0aDogMTAwJTsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgZm9udC1zaXplOiAwLjlyZW07IHRleHQtYWxpZ246IGxlZnQ7IiByb2xlPSJ0YWJsZSIgYXJpYS1sYWJlbD0iSXRlbWl6ZWQgU3RhdGVtZW50IFJlc3BvbnNlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIHN0eWxlPSJiYWNrZ3JvdW5kOiAjZjhmYWZjOyBib3JkZXItYm90dG9tOiAycHggc29saWQgI2NiZDVlMTsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9ImNvbCIgc3R5bGU9InBhZGRpbmc6IDEycHggMTRweDsgd2lkdGg6IDQ1cHg7IGZvbnQtd2VpZ2h0OiA4MDA7IGNvbG9yOiAjMGQwZjZhOyI+IzwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT0iY29sIiBzdHlsZT0icGFkZGluZzogMTJweCAxNHB4OyB3aWR0aDogMTQwcHg7IGZvbnQtd2VpZ2h0OiA4MDA7IGNvbG9yOiAjMGQwZjZhOyI+RG9tYWluPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPSJjb2wiIHN0eWxlPSJwYWRkaW5nOiAxMnB4IDE0cHg7IGZvbnQtd2VpZ2h0OiA4MDA7IGNvbG9yOiAjMGQwZjZhOyI+QWR1bHQgTGlmZSBNYW5hZ2VtZW50IENvbXBldGVuY3kgU3RhdGVtZW50PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPSJjb2wiIHN0eWxlPSJwYWRkaW5nOiAxMnB4IDE0cHg7IHdpZHRoOiAxODBweDsgdGV4dC1hbGlnbjogY2VudGVyOyBmb250LXdlaWdodDogODAwOyBjb2xvcjogIzBkMGY2YTsiPkNhbmRpZGF0ZSBSYXRpbmc8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5IGlkPSJyZXMtc3RhdGVtZW50cy10Ym9keSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBEeW5hbWljYWxseSBwb3B1bGF0ZWQgNDkgcm93cyB3aXRoIHNvcnRlZCBxdWVzdGlvbnNEYXRhIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDwhLS0gQUNUSU9OIEZPT1RFUiBDT05UUk9MUyAtLT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLXByaW50IiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBtYXJnaW4tdG9wOiA0MHB4OyBwYWRkaW5nOiAyMHB4IDA7IGJvcmRlci10b3A6IDFweCBzb2xpZCAjY2JkNWUxOyBkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiAyMHB4OyBmbGV4LXdyYXA6IHdyYXA7Ij4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgaWQ9ImJ0bi1yZXR1cm4tcG9ydGFsIiBjbGFzcz0iYTdtcS1idG4iIHN0eWxlPSJtYXgtd2lkdGg6IDMyMHB4OyBtYXJnaW46IDA7IGJhY2tncm91bmQ6ICMwZDBmNmE7IGNvbG9yOiAjZmZmZmZmOyIgYXJpYS1sYWJlbD0iQ2xvc2UgVmlldyBhbmQgUmV0dXJuIHRvIFBvcnRhbCIgb25jbGljaz0iaGFuZGxlQ2xvc2VWaWV3KCkiPuKclSBDbG9zZSBWaWV3ICYgUmV0dXJuIHRvIFBvcnRhbDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBpZD0iYnRuLXJlc3RhcnQiIHN0eWxlPSJiYWNrZ3JvdW5kOiBub25lOyBib3JkZXI6IDEuNXB4IHNvbGlkICNjYmQ1ZTE7IGNvbG9yOiAjNDc1NTY5OyBwYWRkaW5nOiAxMnB4IDI0cHg7IGJvcmRlci1yYWRpdXM6IDEwcHg7IGZvbnQtd2VpZ2h0OiA4MDA7IGN1cnNvcjogcG9pbnRlcjsgZm9udC1zaXplOiAwLjlyZW07IHRyYW5zaXRpb246IGFsbCAwLjJzOyIgYXJpYS1sYWJlbD0iUmV0YWtlIHRoaXMgYXNzZXNzbWVudCI+8J+UhCBSZXRha2UgQXNzZXNzbWVudDwvYnV0dG9uPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPHNjcmlwdD4KICAgIC8qIDwhW0NEQVRBWyAqLwogICAgLy8gLS0tIEdMT0JBTCBTRUNVUkUgRVZFTlQgREVMRUdBVElPTiBMT09QIChJSUZFKSAtLS0KICAgIChmdW5jdGlvbiBpbml0QTdNUUFMUkkoKSB7CiAgICAgICAgaWYgKHdpbmRvdy5hN21xQUxSSUxvYWRlZCkgcmV0dXJuOwogICAgICAgIHdpbmRvdy5hN21xQUxSSUxvYWRlZCA9IHRydWU7CgogICAgICAgIHZhciBpc0RhcmtUaGVtZUFjdGl2ZSA9IHRydWU7CgogICAgICAgIHZhciB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpOwogICAgICAgIHZhciBjb2hvcnRDb2RlID0gKHVybFBhcmFtcy5nZXQoJ2NvaG9ydCcpIHx8ICcnKS50cmltKCkudG9VcHBlckNhc2UoKTsKICAgICAgICB2YXIgdXNlckNvZGUgPSAodXJsUGFyYW1zLmdldCgnY29kZScpIHx8ICcnKS50cmltKCkudG9VcHBlckNhc2UoKTsKICAgICAgICB2YXIgcmF3UGhhc2UgPSAodXJsUGFyYW1zLmdldCgncGhhc2UnKSB8fCAnYWxyaV9wcmUnKS50cmltKCkudG9Mb3dlckNhc2UoKTsKICAgICAgICB2YXIgcGhhc2UgPSAocmF3UGhhc2UgPT09ICdwb3N0JyB8fCByYXdQaGFzZSA9PT0gJ2FscmlfcG9zdCcpID8gJ2FscmlfcG9zdCcgOiAnYWxyaV9wcmUnOwoKICAgICAgICBpZiAoIWNvaG9ydENvZGUpIHsKICAgICAgICAgICAgdmFyIGNvb2tpZU1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefCApYTdtcV9wcm9tb191bmxvY2tlZD0oW147XSspJykpOwogICAgICAgICAgICBpZiAoY29va2llTWF0Y2ggJiYgY29va2llTWF0Y2hbMl0gJiYgY29va2llTWF0Y2hbMl0ubGVuZ3RoIDw9IDUpIHsKICAgICAgICAgICAgICAgIGNvaG9ydENvZGUgPSBjb29raWVNYXRjaFsyXS50cmltKCkudG9VcHBlckNhc2UoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGNvaG9ydENvZGUpIHsKICAgICAgICAgICAgdmFyIG5hdkJhY2tCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmF2LWJhY2stYnRuJyk7CiAgICAgICAgICAgIGlmIChuYXZCYWNrQnRuKSB7CiAgICAgICAgICAgICAgICBuYXZCYWNrQnRuLnRleHRDb250ZW50ID0gJ+KGkCBSZXR1cm4gdG8gUG9ydGFsJzsKICAgICAgICAgICAgICAgIG5hdkJhY2tCdG4ub25jbGljayA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJy9uZWVkcy8nICsgKHVzZXJDb2RlID8gKCc/Y29ob3J0PScgKyBjb2hvcnRDb2RlICsgJyZjb2RlPScgKyB1c2VyQ29kZSkgOiAoJz9jb2hvcnQ9JyArIGNvaG9ydENvZGUpKTsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgdmFyIFNDQUxFUyA9IFsKICAgICAgICAgICAgeyAKICAgICAgICAgICAgICAgIGlkOiAiRkkiLCAKICAgICAgICAgICAgICAgIG5hbWU6ICJGb3Jlc2VlIHRoZSBJZGVhbCIsIAogICAgICAgICAgICAgICAgZGVzYzogIkZvcmVzaWdodCAodnMuIGhpbmRzaWdodCkgaXMgdGhlIGxpZmUgbWFuYWdlbWVudCBtZWNoYW5pc20gdGhhdCBlbmFibGVzIHlvdSB0byBpbWFnaW5lLCBwcmV2aWV3LCBhbmQgcmV2aWV3IHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIGZ1dHVyZSBsaWZlc3R5bGUgeW91IHByZWZlciBsaXZpbmcgaW4gdGhlIHBlcnNvbmFsLCBpbnRlcnBlcnNvbmFsLCBjYXJlZXIsIGZpbmFuY2lhbCwgZW52aXJvbm1lbnRhbCwgZWR1Y2F0aW9uYWwsIGFuZCBzcGlyaXR1YWwgc2VnbWVudHMgb2YgeW91ciBsaWZlLiBBZHVsdHMgd2hvIGZvcmVzZWUgdGhlIGlkZWFsIGhhdmUgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgaXQgbG9va3MgbGlrZSB0byBsaXZlIGEgcHVycG9zZWZ1bCBhbmQgc2F0aXNmeWluZyBsaWZlLiBUaGV5IHJvdXRpbmVseSBhbnN3ZXIgdGhlIHF1ZXN0aW9uIFwiV2hhdCBkbyBJIHdhbnQ/XCIgWW91ciBzY29yZSBvbiB0aGUgRkkgc2NhbGUgaW5kaWNhdGVzIGhvdyBvZnRlbiB5b3UgcmVwb3J0ZWQgcHJhY3RpY2luZyB0YXNrcyBhc3NvY2lhdGVkIHdpdGggbG9va2luZyBmb3J3YXJkIGFuZCBwZXJjZWl2aW5nIHdoYXQgeW91IGRlc2lyZSBhbmQgaG9wZSBtaWdodCBvY2N1ciBpbiB0aGUgZnV0dXJlLiIsCiAgICAgICAgICAgICAgICBzdW1tYXJ5OiAiWW91ciBzY29yZSBvbiB0aGUgRkkgc2NhbGUgaW5kaWNhdGVzIGhvdyBvZnRlbiB5b3UgcmVwb3J0ZWQgcHJhY3RpY2luZyB0YXNrcyBhc3NvY2lhdGVkIHdpdGggbG9va2luZyBmb3J3YXJkIGFuZCBwZXJjZWl2aW5nIHdoYXQgeW91IGRlc2lyZSBhbmQgaG9wZSBtaWdodCBvY2N1ciBpbiB0aGUgZnV0dXJlLiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgeyAKICAgICAgICAgICAgICAgIGlkOiAiSUQiLCAKICAgICAgICAgICAgICAgIG5hbWU6ICJJZGVudGlmeSBEcml2ZXJzIiwgCiAgICAgICAgICAgICAgICBkZXNjOiAiRHJpdmUgKHZzLiBwYXJrKSBpcyB0aGUgbGlmZSBtYW5hZ2VtZW50IG1lY2hhbmlzbSB0aGF0IGVuYWJsZXMgeW91IHRvIGlnbml0ZSwgc2hpZnQsIGFuZCBhY2NlbGVyYXRlIHRoZSBpbnRyaW5zaWMgZm9yY2VzIHRoYXQgY29tcGVsIHlvdSB0byBwdXJzdWUgeW91ciBmb3Jlc2VlYWJsZSBmdXR1cmUsIGUuZy4sIGFjY291bnRhYmlsaXR5LCBhY2hpZXZlbWVudCwgYWZmaWxpYXRpb24sIGZyZWVkb20sIGlkZW50aXR5LCBpbnRlZ3JpdHksIGludGVsbGlnZW5jZSwgcGVhY2UsIHBvc3Nlc3Npb24sIHBvd2VyLCBwcmFpc2UsIHByb21pbmVuY2UsIHNhZmV0eSwgd2VhbHRoLCBhbmQgd2VsbG5lc3MuIEFkdWx0cyB3aG8gaWRlbnRpZnkgdGhlaXIgZHJpdmluZyBmb3JjZXMgZGlzY292ZXIgdGhlIHVuZGVybHlpbmcgaW5jZW50aXZlcyB0aGF0IGZ1ZWwgdGhlaXIgbGl2ZXMuIFRoZXkgcm91dGluZWx5IGFuc3dlciB0aGUgcXVlc3Rpb24gXCJXaHkgZG8gSSB3YW50IGl0P1wiIFlvdXIgc2NvcmUgb24gdGhlIElEIHNjYWxlIGluZGljYXRlcyBob3cgb2Z0ZW4geW91IHJlcG9ydGVkIHByYWN0aWNpbmcgdGFza3MgYXNzb2NpYXRlZCB3aXRoIHVzaW5nIHlvdXIgaW5uYXRlIGZvcmNlcywgdXJnZXMsIGFuZCB3aWxscG93ZXIgdG8gbW92ZSBvciBwcm9wZWwgZm9yd2FyZC4iLAogICAgICAgICAgICAgICAgc3VtbWFyeTogIllvdXIgc2NvcmUgb24gdGhlIElEIHNjYWxlIGluZGljYXRlcyBob3cgb2Z0ZW4geW91IHJlcG9ydGVkIHByYWN0aWNpbmcgdGFza3MgYXNzb2NpYXRlZCB3aXRoIHVzaW5nIHlvdXIgaW5uYXRlIGZvcmNlcywgdXJnZXMsIGFuZCB3aWxscG93ZXIgdG8gbW92ZSBvciBwcm9wZWwgZm9yd2FyZC4iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICBpZDogIklDIiwgCiAgICAgICAgICAgICAgICBuYW1lOiAiSW52ZW50b3J5IENhcGFjaXR5IiwgCiAgICAgICAgICAgICAgICBkZXNjOiAiQ2FwYWNpdHkgKHZzLiBsaW1pdGF0aW9uKSBpcyB0aGUgbGlmZSBtYW5hZ2VtZW50IG1lY2hhbmlzbSB0aGF0IGVuYWJsZXMgeW91IHRvIG1lYXN1cmUsIHJlY2VpdmUsIGFuZCBkZW1vbnN0cmF0ZSB0aGUga25vd2xlZGdlLCBza2lsbHMsIGFuZCBhYmlsaXRpZXMgeW91IHBvc3Nlc3MuIEFkdWx0cyB3aG8gaW52ZW50b3J5IHRoZWlyIGNhcGFjaXR5IGRpc2NvdmVyIHRoZSB0b3RhbGl0eSBvZiB0aGUgY29tcGV0ZW5jaWVzIHRoZXkgcG9zc2VzcyBhbmQgZGV0ZXJtaW5lIHdoYXQgbXVzdCBiZSBkb25lIHRvIGJ1aWxkIGNhcGFjaXR5LiBUaGV5IHJvdXRpbmVseSBhbnN3ZXIgdGhlIHF1ZXN0aW9uIFwiV2hhdCBwb3RlbnRpYWwgZG8gSSBoYXZlIHRvIGdldCBpdD9cIiBZb3VyIHNjb3JlIG9uIHRoZSBJQyBzY2FsZSBpbmRpY2F0ZXMgaG93IG9mdGVuIHlvdSByZXBvcnRlZCBwcmFjdGljaW5nIHRhc2tzIGFzc29jaWF0ZWQgd2l0aCBwcm9kdWNpbmcsIHlpZWxkaW5nLCBjb25zdW1pbmcsIGFuZCBjb250YWluaW5nIHNvbWV0aGluZyBhdCB0aGUgbWF4aW11bSBsZXZlbC4iLAogICAgICAgICAgICAgICAgc3VtbWFyeTogIllvdXIgc2NvcmUgb24gdGhlIElDIHNjYWxlIGluZGljYXRlcyBob3cgb2Z0ZW4geW91IHJlcG9ydGVkIHByYWN0aWNpbmcgdGFza3MgYXNzb2NpYXRlZCB3aXRoIHByb2R1Y2luZywgeWllbGRpbmcsIGNvbnN1bWluZywgYW5kIGNvbnRhaW5pbmcgc29tZXRoaW5nIGF0IHRoZSBtYXhpbXVtIGxldmVsLiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgeyAKICAgICAgICAgICAgICAgIGlkOiAiQ0UiLCAKICAgICAgICAgICAgICAgIG5hbWU6ICJDb25jZW50cmF0ZSBFbmVyZ3kiLCAKICAgICAgICAgICAgICAgIGRlc2M6ICJDb25jZW50cmF0ZSAodnMuIGRpbHV0ZSkgaXMgdGhlIGxpZmUgbWFuYWdlbWVudCBtZWNoYW5pc20gdGhhdCBlbmFibGVzIHlvdSB0byBmb2N1cywgdGFyZ2V0LCBhbmQgcHJhY3RpY2Ugd2hhdCBtdXN0IGJlIGFjcXVpcmVkLCBleHBlcmllbmNlZCwgaW1wcm92ZWQsIG9ic2VydmVkLCBvciB1dGlsaXplZCB0byBicmlkZ2UgdGhlIGdhcCBiZXR3ZWVuIHRoZSBjYXBhY2l0eSB5b3UgcG9zc2VzcyBhbmQgdGhlIGNhcGFjaXR5IHJlcXVpcmVkIHRvIG1ha2UgeW91ciBmb3Jlc2VlYWJsZSBmdXR1cmUgYSByZWFsaXR5LiBBZHVsdHMgd2hvIGNvbmNlbnRyYXRlIHRoZWlyIGVuZXJneSBzZXQgYm91bmRhcmllcyBhbmQgc2VsZWN0IGdvYWxzIHRoYXQgYXJlIGFsaWduZWQgd2l0aCB0aGVpciBmb3Jlc2VlYWJsZSBmdXR1cmUuIFRoZXkgcm91dGluZWx5IGFuc3dlciB0aGUgcXVlc3Rpb24gXCJXaGF0IGFyZSBteSBnb2Fscz9cIiBZb3VyIHNjb3JlIG9uIHRoZSBDRSBzY2FsZSBpbmRpY2F0ZXMgaG93IG9mdGVuIHlvdSByZXBvcnRlZCBwcmFjdGljaW5nIHRhc2tzIGFzc29jaWF0ZWQgd2l0aCBicmluZ2luZyBhbGwgb2YgeW91ciBhdHRlbnRpb24gYW5kIGVuZXJneSB0byBiZWFyIG9uIGEgc2luZ2xlIG9iamVjdCwgcHVycG9zZSwgb3IgYWN0aXZpdHkgYW5kIG5vdGhpbmcgZWxzZS4iLAogICAgICAgICAgICAgICAgc3VtbWFyeTogIllvdXIgc2NvcmUgb24gdGhlIENFIHNjYWxlIGluZGljYXRlcyBob3cgb2Z0ZW4geW91IHJlcG9ydGVkIHByYWN0aWNpbmcgdGFza3MgYXNzb2NpYXRlZCB3aXRoIGJyaW5naW5nIGFsbCBvZiB5b3VyIGF0dGVudGlvbiBhbmQgZW5lcmd5IHRvIGJlYXIgb24gYSBzaW5nbGUgb2JqZWN0LCBwdXJwb3NlLCBvciBhY3Rpdml0eSBhbmQgbm90aGluZyBlbHNlLiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgeyAKICAgICAgICAgICAgICAgIGlkOiAiRFMiLCAKICAgICAgICAgICAgICAgIG5hbWU6ICJEZXNpZ24gU3RyYXRlZ3kiLCAKICAgICAgICAgICAgICAgIGRlc2M6ICJEZXNpZ24gKHZzLiBkZWZhdWx0KSBpcyB0aGUgbGlmZSBtYW5hZ2VtZW50IG1lY2hhbmlzbSB0aGF0IGVuYWJsZXMgeW91IHRvIHNoYXBlLCBvcmdhbml6ZSwgYW5kIGltcGxlbWVudCBhIHNlcXVlbmNlIG9mIGV2ZW50cyBvciBzdGVwcyB0byBiZSB0YWtlbiB0byBhY2NvbXBsaXNoIHlvdXIgZ29hbHMgdGhhdCBpbmNsdWRlIG1hbmFnaW5nIHlvdXIgZW5lcmd5LCB0aW1lLCBzcGFjZSwgaHVtYW4sIGFuZCBtYXRlcmlhbCByZXNvdXJjZXMuIEFkdWx0cyB3aG8gZGVzaWduIGEgc3RyYXRlZ3kgbWFwIG91dCBhIHJvdXRlLCBwYXRoLCBvciBtZXRob2QgZm9yIGF0dGFpbmluZyB0aGVpciBhc3BpcmF0aW9ucy4gVGhleSByb3V0aW5lbHkgYW5zd2VyIHRoZSBxdWVzdGlvbiBcIldoYXQgaXMgbXkgc3RyYXRlZ3k/XCIgWW91ciBzY29yZSBvbiB0aGUgRFMgc2NhbGUgaW5kaWNhdGVzIGhvdyBvZnRlbiB5b3UgcmVwb3J0ZWQgcHJhY3RpY2luZyB0YXNrcyBhc3NvY2lhdGVkIHdpdGggb3V0bGluaW5nLCBkaWFncmFtbWluZywgb3IgZHJhd2luZyBpbiBkZXRhaWwgdGhlIGFwcGVhcmFuY2UsIGZ1bmN0aW9uLCBvciBhcHByb2FjaCB0byBzb21ldGhpbmcgYmVmb3JlIGl0IGlzIGNyZWF0ZWQuIiwKICAgICAgICAgICAgICAgIHN1bW1hcnk6ICJZb3VyIHNjb3JlIG9uIHRoZSBEUyBzY2FsZSBpbmRpY2F0ZXMgaG93IG9mdGVuIHlvdSByZXBvcnRlZCBwcmFjdGljaW5nIHRhc2tzIGFzc29jaWF0ZWQgd2l0aCBvdXRsaW5pbmcsIGRpYWdyYW1taW5nLCBvciBkcmF3aW5nIGluIGRldGFpbCB0aGUgYXBwZWFyYW5jZSwgZnVuY3Rpb24sIG9yIGFwcHJvYWNoIHRvIHNvbWV0aGluZyBiZWZvcmUgaXQgaXMgY3JlYXRlZC4iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICBpZDogIlBPIiwgCiAgICAgICAgICAgICAgICBuYW1lOiAiUHJlZGljdCBPYnN0YWNsZXMiLCAKICAgICAgICAgICAgICAgIGRlc2M6ICJQcmVkaWN0ICh2cy4gc3VycHJpc2UpIGlzIHRoZSBsaWZlIG1hbmFnZW1lbnQgbWVjaGFuaXNtIHRoYXQgZW5hYmxlcyB5b3UgdG8gaWRlbnRpZnkgdGhlIGludHJpbnNpYyBmb3JjZXMgeW91IHByZXN1bWUsIGV4cGVjdCBhbmQgYmVsaWV2ZSB3aWxsIGludGVyZmVyZSB3aXRoIGltcGxlbWVudGluZyB5b3VyIHN0cmF0ZWd5IG9yIHN0b3AgeW91IGZyb20gdHJ5aW5nLCBlLmcuLCBjb25mb3JtaXR5LCBjb25maW5lbWVudCwgY29uZmxpY3QsIGNyaXRpY2lzbSwgZGFuZ2VyLCBkZWZlcmVuY2UsIGZhaWx1cmUsIGlnbm9yYW5jZSwgaWxsbmVzcywgaW1tb3JhbGl0eSwgaW5jb25zcGljdW91c25lc3MsIGlzb2xhdGlvbiwgbG9zcywgbmVnbGlnZW5jZSwgb3IgcG92ZXJ0eS4gQWR1bHRzIHdobyBwcmVkaWN0IG9ic3RhY2xlcyBhbnRpY2lwYXRlIHNvdXJjZXMgb2YgdW5kZXNpcmFibGUgY2hhbGxlbmdlcyBhbmQgcmVkdWNlIHRoZWlyIGNoYW5jZXMgb2YgYmVpbmcgY2F1Z2h0IG9mZiBndWFyZC4gVGhleSByb3V0aW5lbHkgYW5zd2VyIHRoZSBxdWVzdGlvbiBcIldoYXQgY2FuIGdvIHdyb25nP1wiIFlvdXIgc2NvcmUgb24gdGhlIFBPIHNjYWxlIGluZGljYXRlcyBob3cgb2Z0ZW4geW91IHJlcG9ydGVkIHByYWN0aWNpbmcgdGFza3MgYXNzb2NpYXRlZCB3aXRoIGluZGljYXRpbmcgb3IgZXN0aW1hdGluZyB0aGF0IHNvbWV0aGluZyBtaWdodCBoYXBwZW4gYmVmb3JlaGFuZC4iLAogICAgICAgICAgICAgICAgc3VtbWFyeTogIllvdXIgc2NvcmUgb24gdGhlIFBPIHNjYWxlIGluZGljYXRlcyBob3cgb2Z0ZW4geW91IHJlcG9ydGVkIHByYWN0aWNpbmcgdGFza3MgYXNzb2NpYXRlZCB3aXRoIGluZGljYXRpbmcgb3IgZXN0aW1hdGluZyB0aGF0IHNvbWV0aGluZyBtaWdodCBoYXBwZW4gYmVmb3JlaGFuZC4iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICBpZDogIlJXIiwgCiAgICAgICAgICAgICAgICBuYW1lOiAiUmVzcG9uZCBXaXNlbHkiLCAKICAgICAgICAgICAgICAgIGRlc2M6ICJSZXNwb25kICh2cy4gaWdub3JlKSBpcyB0aGUgbGlmZSBtYW5hZ2VtZW50IG1lY2hhbmlzbSB0aGF0IGVuYWJsZXMgeW91IHRvIHZlcmlmeSwgcHJldmVudCwgYW5kIGFsbGV2aWF0ZSB0aGUgdGhpbmtpbmcsIGNvbW11bmljYXRpb24sIGJlaGF2aW9yLCBhbmQgc3RhdGVzIG9mIGJlaW5nIHlvdSBwcmVkaWN0ZWQgd291bGQgaW50ZXJmZXJlIHdpdGggaW1wbGVtZW50aW5nIHlvdXIgc3RyYXRlZ3kuIEFkdWx0cyB3aG8gcmVzcG9uZCB3aXNlbHkgZGV2aXNlIGFsdGVybmF0aXZlcyB0byBhYmFuZG9uaW5nIHRoZWlyIHN0cmF0ZWd5IHdoZW4gZmFjZWQgd2l0aCBhZHZlcnNpdHkuIFRoZXkgcm91dGluZWx5IGFuc3dlciB0aGUgcXVlc3Rpb24gXCJXaGF0IGNhbiBJIGRvIGFib3V0IGl0P1wiIFlvdXIgc2NvcmUgb24gdGhlIFJXIHNjYWxlIGluZGljYXRlcyBob3cgb2Z0ZW4geW91IHJlcG9ydGVkIHByYWN0aWNpbmcgdGFza3MgYXNzb2NpYXRlZCB3aXRoIGFuc3dlcmluZywgcmVhY3RpbmcsIGFkanVzdGluZywgb3IgYWRhcHRpbmcgdG8gc29tZXRoaW5nIHRoYXQgb2NjdXJzLiIsCiAgICAgICAgICAgICAgICBzdW1tYXJ5OiAiWW91ciBzY29yZSBvbiB0aGUgUlcgc2NhbGUgaW5kaWNhdGVzIGhvdyBvZnRlbiB5b3UgcmVwb3J0ZWQgcHJhY3RpY2luZyB0YXNrcyBhc3NvY2lhdGVkIHdpdGggYW5zd2VyaW5nLCByZWFjdGluZywgYWRqdXN0aW5nLCBvciBhZGFwdGluZyB0byBzb21ldGhpbmcgdGhhdCBvY2N1cnMuIgogICAgICAgICAgICB9CiAgICAgICAgXTsKCiAgICAgICAgdmFyIFJBV19RVUVTVElPTlMgPSBbCiAgICAgICAgICAgICJJIHNlZSBteXNlbGYgbGl2aW5nIGEgaGVhbHRoeSBsaWZlIHBoeXNpY2FsbHksIGVtb3Rpb25hbGx5LCBhbmQgbWVudGFsbHkuIiwKICAgICAgICAgICAgIkkgZm9sbG93IHRocm91Z2ggb24gYSB0YXNrIGZyb20gc3RhcnQgdG8gZmluaXNoIGV2ZW4gaWYgSSByZWNlaXZlIG5vIHByYWlzZSBvciByZWNvZ25pdGlvbiBmb3IgbXkgd29yay4iLAogICAgICAgICAgICAiSSBmb2xsb3cgdGhlIGRpcmVjdGlvbnMgcHJvdmlkZWQgdG8gY29tcGxldGUgYSB0YXNrLiIsCiAgICAgICAgICAgICJJIGZlZWwgY29tZm9ydGFibGUgc2F5aW5nIFx1MjAxY25vXHUyMDFkIG9yIFx1MjAxY25vdCBub3dcdTIwMWQgdG8gYWN0aXZpdGllcyB0aGF0IGRvIG5vdCBhbGlnbiB3aXRoIG15IGdvYWxzLiIsCiAgICAgICAgICAgICJXaGVuIHN0YXJ0aW5nIGEgbmV3IHRhc2ssIEkgc3BlbmQgdGltZSB0aGlua2luZyBhYm91dCB0aGUgc3RlcHMgSSBuZWVkIHRvIHRha2UgdG8gY29tcGxldGUgaXQuIiwKICAgICAgICAgICAgIkkgc3RheSB1cC10by1kYXRlIG9uIGNoYW5nZXMgaW4gdHJlbmRzLCBpbm5vdmF0aW9ucywgYW5kIGxhd3MgdGhhdCBjb3VsZCBtYWtlIG15IHN0cmF0ZWdpYyBwbGFuIG9ic29sZXRlIG9yIGluZWZmZWN0aXZlLiIsCiAgICAgICAgICAgICJJIGdhdGhlciBmYWN0cyB0byBkZXRlcm1pbmUgdGhlIGFjY3VyYWN5IG9mIHRoZSBhZHZpY2Ugb3IgaW5mb3JtYXRpb24gSSByZWNlaXZlLiIsCiAgICAgICAgICAgICJJIHNlZSBteXNlbGYgaW4gbXV0dWFsbHkgYmVuZWZpY2lhbCByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXJzIHdobyBzaGFyZSBvciBzdXBwb3J0IG15IGFtYml0aW9ucy4iLAogICAgICAgICAgICAiV2hlbiBjb21wbGV0aW5nIGEgdGFzayB0aGF0IEkgZGlzbGlrZSwgSSByZW1pbmQgbXlzZWxmIG9mIFx1MjAxOHdoYXRcdTIwMTlzIGluIGl0IGZvciBtZS5cdTIwMTkiLAogICAgICAgICAgICAiSSBoYXZlIHRoZSBzdWJqZWN0IG1hdHRlciBrbm93bGVkZ2UgdG8gY29tcGxldGUgYSB0YXNrIGNvcnJlY3RseS4iLAogICAgICAgICAgICAiSSBmb2N1cyBteSBlbmVyZ3kgb24gYWNxdWlyaW5nIHRoZSBpbmZvcm1hdGlvbiBvciBvYmplY3RzIEkgbmVlZCB0byBhY2NvbXBsaXNoIG15IGdvYWxzLiIsCiAgICAgICAgICAgICJJIGNyZWF0ZSwgcHJpb3JpdGl6ZSwgYW5kIHJlZmVyIHRvIGEgbGlzdCBvZiB0aGluZ3MgdG8gZG8gdGhhdCBhcmUgY29ubmVjdGVkIHdpdGggbXkgYW1iaXRpb25zLiIsCiAgICAgICAgICAgICJJIGxvb2sgZm9yIGZsYXdzIGluIG15IHN0cmF0ZWdpYyBwbGFuIHRvIGRldGVybWluZSB3aGF0IG1heSBoaW5kZXIgbXkgYWJpbGl0eSB0byBleGVjdXRlIGl0LiIsCiAgICAgICAgICAgICJJIHBheSBhdHRlbnRpb24gd2hlbiBJIGhhdmUgYSBndXQgZmVlbGluZyBvciBodW5jaCBhYm91dCBhIHRhc2sgb3Igc2l0dWF0aW9uLiIsCiAgICAgICAgICAgICJJIHNlZSBteXNlbGYgZW1wbG95ZWQgaW4gbXkgaWRlYWwgb2NjdXBhdGlvbiwgdm9jYXRpb24sIG9yIHByb2Zlc3Npb24uIiwKICAgICAgICAgICAgIldoZW4gSSBleHBlcmllbmNlIGEgc2V0YmFjayBvciBkaXNhcHBvaW50bWVudCwgSSBrZWVwIHdvcmtpbmcgb24gYSB0YXNrIGV2ZW4gaWYgaXQgdGFrZXMgbG9uZ2VyIHRoYW4gSSB0aG91Z2h0LiIsCiAgICAgICAgICAgICJJIGZlZWwgY29tZm9ydGFibGUgdGFsa2luZyB0byBvdGhlcnMgYWJvdXQgbXkgdGFsZW50cywgc2tpbGxzLCBhbmQgdGFza3MgSSBwZXJmb3JtIHdlbGwuIiwKICAgICAgICAgICAgIkkgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHdoYXQgSSBuZWVkIHRvIGV4cGVyaWVuY2UgdG8gYWNjb21wbGlzaCBteSBnb2Fscy4iLAogICAgICAgICAgICAiSSB1c2UgYSBjYWxlbmRhciBvciBwbGFubmVyIHRvIGtlZXAgdHJhY2sgb2YgbXkgZGFpbHkgYXBwb2ludG1lbnRzLCBhc3NpZ25tZW50cywgYW5kIGRlYWRsaW5lcy4iLAogICAgICAgICAgICAiSSBpZGVudGlmeSB0aGUgc2FjcmlmaWNlcyBvciB0cmFkZS1vZmZzIEkgbWF5IGhhdmUgdG8gbWFrZSB0byBpbXBsZW1lbnQgbXkgc3RyYXRlZ2ljIHBsYW4uIiwKICAgICAgICAgICAgIldoZW4gdGhpbmdzIHNlZW0gaW1wb3NzaWJsZSwgSSBob3BlIGZvciB0aGUgYmVzdCBhbmQgbWFpbnRhaW4gYSBwb3NpdGl2ZSBvdXRsb29rLiIsCiAgICAgICAgICAgICJJIHNlZSBteXNlbGYgZWFybmluZyB0aGUgc3BlY2lmaWMgYW1vdW50IG9mIG1vbmV5IHRoYXQgd2lsbCBzdXBwb3J0IG15IGlkZWFsIGxpZmVzdHlsZS4iLAogICAgICAgICAgICAiSSBkbyB3aGF0IGlzIHJlcXVpcmVkIHRvIGFjY29tcGxpc2ggYSB0YXNrIHdpdGhvdXQgYmVpbmcgZm9yY2VkLCB3YXRjaGVkLCBvciByZW1pbmRlZC4iLAogICAgICAgICAgICAiSSBsb29rIGZvciB3YXlzIHRvIGdhaW4gdGhlIGtub3dsZWRnZSwgdHJhaW5pbmcsIHByYWN0aWNlLCBvciBleHBlcmllbmNlIEkgbGFjayBpbiBteSBjdXJyZW50IHNraWxsIHNldC4iLAogICAgICAgICAgICAiSSBmb2N1cyBteSBtaW5kIG9uIHdoYXQgSSBuZWVkIHRvIGltcHJvdmUgdG8gYWNjb21wbGlzaCBteSBnb2Fscy4iLAogICAgICAgICAgICAiSSBpZGVudGlmeSwgaW4gYWR2YW5jZSwgd2hlcmUgSSBhbSBzdXBwb3NlZCB0byBnbyB0byBjb21wbGV0ZSBhIHRhc2suIiwKICAgICAgICAgICAgIkkgaWRlbnRpZnkgdGhlIGNvbXBldGluZyBwcmlvcml0aWVzIGluIG15IGxpZmUgdGhhdCBtYXkgcHVsbCBtZSBhd2F5IGZyb20gbXkgc3RyYXRlZ2ljIHBsYW4uIiwKICAgICAgICAgICAgIldoZW4gSSBjb21lIHRvIGEgZGVhZCBlbmQsIEkgYnJhaW5zdG9ybSBhIHdheSB0byB3b3JrIGFyb3VuZCBpdC4iLAogICAgICAgICAgICAiSSBzZWUgbXlzZWxmIGxpdmluZyBpbiBteSBpZGVhbCBob21lLCBuZWlnaGJvcmhvb2QsIGNvbW11bml0eSwgYW5kIGdlb2dyYXBoaWMgc2V0dGluZy4iLAogICAgICAgICAgICAiQXMgc29vbiBhcyBJIGNvbXBsZXRlIG9uZSB0YXNrLCBJIHN0YXJ0IHdvcmtpbmcgb24gdGhlIG5leHQgb25lIHdpdGhvdXQgd2FpdGluZyB0byBiZSB0b2xkLiIsCiAgICAgICAgICAgICJJIGtlZXAgdXAgd2l0aCB0aGUgdm9sdW1lLCBwYWNlIGFuZCBkZW1hbmRzIG9mIGEgdHlwaWNhbCB3b3JrbG9hZCBpbiBteSBkYXktdG8tZGF5IHJvdXRpbmUuIiwKICAgICAgICAgICAgIkkgZGlyZWN0IG15IGF0dGVudGlvbiB0b3dhcmQgd2hhdCBJIG5lZWQgdG8gb2JzZXJ2ZSB0byBhY2NvbXBsaXNoIG15IGdvYWxzLiIsCiAgICAgICAgICAgICJJIG9idGFpbiB0aGUgbmFtZXMgb2YgdGhlIHJpZ2h0IHBlb3BsZSBJIG5lZWQgdG8gY29udGFjdCB0byBoZWxwIG1lIGNvbXBsZXRlIGEgdGFzay4iLAogICAgICAgICAgICAiSSBub3RpY2Ugd2hlbiBteSBmZWFycywgZG91YnRzLCBvciB3b3JyaWVzIG1heSBjYXVzZSBtZSB0byBhdm9pZCBvciBzdG9wIGltcGxlbWVudGluZyBteSBzdHJhdGVnaWMgcGxhbi4iLAogICAgICAgICAgICAiSSBhc2sgZm9yIGhlbHAsIGZlZWRiYWNrLCBvciBzdXBwb3J0IHdoZW4gSSBydW4gb3V0IG9mIG9wdGlvbnMgb24gbXkgb3duLiIsCiAgICAgICAgICAgICJJIHNlZSBteXNlbGYgZWFybmluZyB0aGUgaWRlYWwgY3JlZGVudGlhbHMgSSBuZWVkIHRvIGF0dGFpbiBteSBhc3BpcmF0aW9ucy4iLAogICAgICAgICAgICAiSSBrZWVwIHdvcmtpbmcgb24gYSB0YXNrLCBldmVuIHdoZW4gbW9yZSBpbW1lZGlhdGVseSByZXdhcmRpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLiIsCiAgICAgICAgICAgICJJIGZlZWwgY29uZmlkZW50IGluIG15IGFiaWxpdHkgdG8gY29tcGxldGUgYSB0YXNrIGFjY3VyYXRlbHkgd2l0aGluIHRoZSBleHBlY3RlZCB0aW1lZnJhbWUuIiwKICAgICAgICAgICAgIkFmdGVyIGFjY29tcGxpc2hpbmcgYSBnb2FsLCBJIGZvY3VzIG9uIGhvdyBJIHdpbGwgdXRpbGl6ZSBpdCB0byBhdHRhaW4gbXkgYXNwaXJhdGlvbnMuIiwKICAgICAgICAgICAgIkkgaGF2ZSBhY2Nlc3MgdG8gdGhlIHRvb2xzLCB0ZWNobm9sb2d5LCBtYXRlcmlhbHMsIGFuZCBzdXBwbGllcyBJIG5lZWQgdG8gY29tcGxldGUgYSB0YXNrIGNvcnJlY3RseS4iLAogICAgICAgICAgICAiV2hlbiBvYnN0YWNsZXMgYXJpc2UsIEkgZGlzdGluZ3Vpc2ggYmV0d2VlbiB3aGF0IGlzIHdpdGhpbiBteSBjb250cm9sIGFuZCB3aGF0IGlzIG91dHNpZGUgb2YgbXkgY29udHJvbC4iLAogICAgICAgICAgICAiSSBmb2xsb3cgdGhlIHJ1bGVzIGFuZCByZWd1bGF0aW9ucyB0aGF0IGdvdmVybiBob3cgYSB0YXNrIG9yIGFjdGl2aXR5IGlzIHRvIGJlIHBlcmZvcm1lZC4iLAogICAgICAgICAgICAiSSBzZWUgbXlzZWxmIGhhdmluZyBmYWl0aCBvciB0cnVzdCBpbiBhIHNldCBvZiBjb3JlIHByaW5jaXBsZXMgdGhhdCBpbmZsdWVuY2UgbXkgY2hvaWNlcy4iLAogICAgICAgICAgICAiV2hlbiBJIGNvbW1pdCB0byBhIHRhc2ssIEkgcHVzaCBteXNlbGYgdG8gZnVsZmlsbCBpdCwgZXZlbiBpZiBpdCBpcyBoYXJkZXIgdGhhbiBJIHRob3VnaHQuIiwKICAgICAgICAgICAgIkkgY29tcGxldGUgYXNzaWduZWQgdGFza3Mgb24gbXkgb3duIHdpdGhvdXQgdGhlIG5lZWQgZm9yIHVubmVjZXNzYXJ5IHN1cGVydmlzaW9uLiIsCiAgICAgICAgICAgICJXaGVuIG15IG1pbmQgZHJpZnRzLCB3YW5kZXJzLCBvciBJIGxvc2UgdHJhY2ssIEkgcmVkaXJlY3QgbXkgYXR0ZW50aW9uIHRvIHRoZSB0YXNrIGF0IGhhbmQuIiwKICAgICAgICAgICAgIkkgc2V0IGFzaWRlIHRpbWUgdG8gcmVzdCwgcmVsYXgsIGNlbGVicmF0ZSwgYW5kIGhhdmUgZnVuLiIsCiAgICAgICAgICAgICJXaGVuIEkgZmVlbCBwcmVzc3VyZWQgb3Igb3ZlcndoZWxtZWQsIEkgY29uc2lkZXIgdGhlIGNvbnNlcXVlbmNlcyBvZiBnaXZpbmcgdXAgb24gaW1wbGVtZW50aW5nIG15IHN0cmF0ZWdpYyBwbGFuLiIsCiAgICAgICAgICAgICJJIHBhdXNlLCBzdGF5IGNhbG0sIGFuZCBtYWludGFpbiBteSBjb21wb3N1cmUgd2hlbiBmYWNlZCB3aXRoIHN1ZGRlbiBvciB1bmV4cGVjdGVkIHNpdHVhdGlvbnMuIgpdOwoKICAgICAgICB2YXIgcXVlc3Rpb25zRGF0YSA9IFtdOwogICAgICAgIHZhciBjdXJyZW50SW5kZXggPSAwOwoKICAgICAgICBmdW5jdGlvbiB0b2dnbGVBN01RVGhlbWUoKSB7CiAgICAgICAgICAgIGlzRGFya1RoZW1lQWN0aXZlID0gIWlzRGFya1RoZW1lQWN0aXZlOwogICAgICAgICAgICB2YXIgdGhlbWVCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGhlbWUtYnRuJyk7CiAgICAgICAgICAgIGlmIChpc0RhcmtUaGVtZUFjdGl2ZSkgeyAKICAgICAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtdGhlbWUnLCAnZGFyaycpOyAKICAgICAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdkYXJrJyk7CiAgICAgICAgICAgICAgICBpZih0aGVtZUJ0bikgdGhlbWVCdG4udGV4dENvbnRlbnQgPSAn4piA77iPIExpZ2h0IE1vZGUnOyAKICAgICAgICAgICAgfSBlbHNlIHsgCiAgICAgICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdkYXRhLXRoZW1lJyk7IAogICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2RhcmsnKTsKICAgICAgICAgICAgICAgIGlmKHRoZW1lQnRuKSB0aGVtZUJ0bi50ZXh0Q29udGVudCA9ICfwn4yZIERhcmsgTW9kZSc7IAogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBkaXNwbGF5QWN0aXZlUGFuZWwocGFuZWxJZCkgewogICAgdmFyIHBhbmVscyA9IFsndmlldy1pbnRybycsICd2aWV3LXZpc2lvbicsICd2aWV3LXJhbmsnLCAndmlldy13aGF0aWZzJywgJ3ZpZXctcXVpeicsICd2aWV3LWxvYWRpbmcnLCAndmlldy1yZXN1bHRzJ107CiAgICBwYW5lbHMuZm9yRWFjaChmdW5jdGlvbihpZCkgewogICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKICAgICAgICBpZiAoZWwpIGVsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICB9KTsKICAgIAogICAgdmFyIHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHBhbmVsSWQpOwogICAgaWYgKHRhcmdldCkgdGFyZ2V0LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgd2luZG93LnNjcm9sbFRvKHsgdG9wOiAwLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7CgogICAgLy8gSGlkZSB0aGUgJ1NhdmUgJiBSZXR1cm4nIGJ1dHRvbiB3aGVuIG9uIExvYWRpbmcgb3IgUmVzdWx0cyBzY3JlZW5zCiAgICB2YXIgc2F2ZUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG4tc2F2ZS1yZXR1cm4nKTsKICAgIGlmIChzYXZlQnRuKSB7CiAgICAgICAgaWYgKHBhbmVsSWQgPT09ICd2aWV3LWxvYWRpbmcnIHx8IHBhbmVsSWQgPT09ICd2aWV3LXJlc3VsdHMnKSB7CiAgICAgICAgICAgIHNhdmVCdG4uc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzYXZlQnRuLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJzsKICAgICAgICB9CiAgICB9Cn0KY29uc3QgU0FWRV9LRVkgPSAnYTdtcV9hbHJpX3Byb2dyZXNzJzsKCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG4tc2F2ZS1yZXR1cm4nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgIGlmIChxdWVzdGlvbnNEYXRhLmxlbmd0aCA+IDApIHsKICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTQVZFX0tFWSwgSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICBzYXZlZEluZGV4OiBjdXJyZW50SW5kZXgsCiAgICAgICAgICAgIHNhdmVkRGF0YTogcXVlc3Rpb25zRGF0YQogICAgICAgIH0pKTsKICAgICAgICBhbGVydCgiUHJvZ3Jlc3Mgc2F2ZWQgc3VjY2Vzc2Z1bGx5ISBZb3UgY2FuIHNhZmVseSBsZWF2ZSB0aGlzIHBhZ2UuIik7CiAgICAgICAgaWYgKGNvaG9ydENvZGUpIHsKICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnL25lZWRzLycgKyAodXNlckNvZGUgPyAoJz9jb2hvcnQ9JyArIGNvaG9ydENvZGUgKyAnJmNvZGU9JyArIHVzZXJDb2RlKSA6ICgnP2NvaG9ydD0nICsgY29ob3J0Q29kZSkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJy9kYXNoYm9hcmQnOwogICAgICAgIH0KICAgIH0KfSk7CiAgICAgICAgLy8gMS4gU3RyaWN0IFNlcXVlbnRpYWwgQ2hyb25vbG9naWNhbCBPcmRlciAoU3RhdGVtZW50cyAxIHRvIDQ5KQogICAgICAgIC8vIEVuYWJsZXMgRHIuIFdpbGxpYW1zIGFuZCBzdGFmZiB0byBlbnRlciBoaXN0b3JpY2FsIGNhc2UgZGF0YSBkaXJlY3RseSBpbiBzZXF1ZW50aWFsIG9yZGVyCiAgICAgICAgZnVuY3Rpb24gaGFuZGxlU3RhcnQoKSB7CiAgICAgICAgICAgIHZhciBtYXBwZWQgPSBSQVdfUVVFU1RJT05TLm1hcChmdW5jdGlvbihxLCBpbmRleCkgewogICAgICAgICAgICAgICAgdmFyIHNjYWxlID0gU0NBTEVTW2luZGV4ICUgN107CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsSW5kZXg6IGluZGV4ICsgMSwKICAgICAgICAgICAgICAgICAgICB0ZXh0OiBxLAogICAgICAgICAgICAgICAgICAgIHNjYWxlSWQ6IHNjYWxlLmlkLAogICAgICAgICAgICAgICAgICAgIHNjYWxlTmFtZTogc2NhbGUubmFtZSwKICAgICAgICAgICAgICAgICAgICBhbnN3ZXI6IG51bGwKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgLy8gRmFzdC1sb2FkIHNhdmVkIHNlc3Npb24gaWYgaWRlbnRpY2FsIHNjaGVtYQogICAgICAgICAgICBjb25zdCBzYXZlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFNBVkVfS0VZKTsKICAgICAgICAgICAgaWYgKHNhdmVkKSB7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc2F2ZWQpOwogICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZWQuc2F2ZWREYXRhICYmIHBhcnNlZC5zYXZlZERhdGEubGVuZ3RoID09PSA0OSkgewogICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbnNEYXRhID0gcGFyc2VkLnNhdmVkRGF0YTsKICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEluZGV4ID0gcGFyc2VkLnNhdmVkSW5kZXggfHwgMDsKICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyUXVpelNjcmVlbigpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7fQogICAgICAgICAgICB9CgogICAgICAgICAgICBxdWVzdGlvbnNEYXRhID0gbWFwcGVkOwogICAgICAgICAgICBjdXJyZW50SW5kZXggPSAwOwogICAgICAgICAgICByZW5kZXJRdWl6U2NyZWVuKCk7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHJlbmRlclF1aXpTY3JlZW4oKSB7CiAgICAgICAgICAgIHZhciBxID0gcXVlc3Rpb25zRGF0YVtjdXJyZW50SW5kZXhdOwogICAgICAgICAgICAKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3F1aXotaGVhZGVyJykudGV4dENvbnRlbnQgPSAiU3RhdGVtZW50ICIgKyAoY3VycmVudEluZGV4ICsgMSkgKyAiIG9mICIgKyBxdWVzdGlvbnNEYXRhLmxlbmd0aDsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3F1aXotcHJvZ3Jlc3MnKS5zdHlsZS53aWR0aCA9ICgoKGN1cnJlbnRJbmRleCArIDEpIC8gcXVlc3Rpb25zRGF0YS5sZW5ndGgpICogMTAwKSArICIlIjsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3F1ZXN0aW9uLXRleHQnKS50ZXh0Q29udGVudCA9IHEudGV4dDsKCiAgICAgICAgICAgIHZhciBwaWxsYXJUYWcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncXVpei1waWxsYXItYmFkZ2UnKTsKICAgICAgICAgICAgaWYgKCFwaWxsYXJUYWcpIHsKICAgICAgICAgICAgICAgIHBpbGxhclRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKICAgICAgICAgICAgICAgIHBpbGxhclRhZy5pZCA9ICdxdWl6LXBpbGxhci1iYWRnZSc7CiAgICAgICAgICAgICAgICBwaWxsYXJUYWcuY2xhc3NOYW1lID0gJ3N0YXRlbWVudC1jYXQtdGFnJzsKICAgICAgICAgICAgICAgIHBpbGxhclRhZy5zdHlsZS5jc3NUZXh0ID0gJ2Rpc3BsYXk6IGlubGluZS1ibG9jazsgYmFja2dyb3VuZDogIzBkMGY2YTsgY29sb3I6ICNmZmZmZmY7IGZvbnQtd2VpZ2h0OiA4MDA7IGZvbnQtc2l6ZTogMC44cmVtOyBwYWRkaW5nOiA0cHggMTJweDsgYm9yZGVyLXJhZGl1czogNnB4OyBtYXJnaW4tYm90dG9tOiAxMnB4OyBsZXR0ZXItc3BhY2luZzogMC41cHg7JzsKICAgICAgICAgICAgICAgIHZhciBxQ2FyZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2aWV3LXF1aXonKTsKICAgICAgICAgICAgICAgIGlmIChxQ2FyZCkgewogICAgICAgICAgICAgICAgICAgIHZhciBxVGV4dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdxdWVzdGlvbi10ZXh0Jyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHFUZXh0ICYmIHFUZXh0LnBhcmVudE5vZGUpIHFUZXh0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHBpbGxhclRhZywgcVRleHQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChwaWxsYXJUYWcpIHsKICAgICAgICAgICAgICAgIHBpbGxhclRhZy50ZXh0Q29udGVudCA9IChjdXJyZW50SW5kZXggKyAxKSArICIuICIgKyAocS5zY2FsZU5hbWUgfHwgcS5zY2FsZUlkKSArICIgKCIgKyBxLnNjYWxlSWQgKyAiKSI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBidG5zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnJhdGluZy1idG4nKTsKICAgICAgICAgICAgYnRucy5mb3JFYWNoKGZ1bmN0aW9uKGJ0bikgewogICAgICAgICAgICAgICAgaWYgKHEuYW5zd2VyICE9PSBudWxsICYmIHBhcnNlSW50KGJ0bi5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsJykpID09PSBxLmFuc3dlcikgewogICAgICAgICAgICAgICAgICAgIGJ0bi5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgYnRuLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIHZhciBidG5QcmV2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi1wcmV2Jyk7CiAgICAgICAgICAgIHZhciBidG5OZXh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi1uZXh0Jyk7CiAgICAgICAgICAgIHZhciBidG5TdWJtaXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLXN1Ym1pdCcpOwoKICAgICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gMCkgeyBidG5QcmV2LnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCAndHJ1ZScpOyB9IAogICAgICAgICAgICBlbHNlIHsgYnRuUHJldi5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7IH0KCiAgICAgICAgICAgIGlmIChxLmFuc3dlciA9PT0gbnVsbCkgeyBidG5OZXh0LnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCAndHJ1ZScpOyB9IAogICAgICAgICAgICBlbHNlIHsgYnRuTmV4dC5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7IH0KCiAgICAgICAgICAgIGlmIChjdXJyZW50SW5kZXggPT09IHF1ZXN0aW9uc0RhdGEubGVuZ3RoIC0gMSkgewogICAgICAgICAgICAgICAgYnRuTmV4dC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgICAgICAgICAgYnRuU3VibWl0LnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJzsKICAgICAgICAgICAgICAgIGlmIChxLmFuc3dlciA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIGJ0blN1Ym1pdC5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJ3RydWUnKTsKICAgICAgICAgICAgICAgICAgICBidG5TdWJtaXQudGV4dENvbnRlbnQgPSAnU3VibWl0IEFzc2Vzc21lbnQg4oaSJzsKICAgICAgICAgICAgICAgICAgICBidG5TdWJtaXQuc3R5bGUuYmFja2dyb3VuZCA9ICd2YXIoLS1ib3JkZXItbGlnaHQpJzsKICAgICAgICAgICAgICAgICAgICBidG5TdWJtaXQuc3R5bGUuY29sb3IgPSAndmFyKC0tdGV4dC1tdXRlZCknOwogICAgICAgICAgICAgICAgICAgIGJ0blN1Ym1pdC5zdHlsZS5ib3hTaGFkb3cgPSAnbm9uZSc7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGJ0blN1Ym1pdC5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7CiAgICAgICAgICAgICAgICAgICAgYnRuU3VibWl0LnRleHRDb250ZW50ID0gJ+KckyBTdWJtaXQgQXNzZXNzbWVudCDihpInOwogICAgICAgICAgICAgICAgICAgIGJ0blN1Ym1pdC5zdHlsZS5iYWNrZ3JvdW5kID0gJyMxMGI5ODEnOwogICAgICAgICAgICAgICAgICAgIGJ0blN1Ym1pdC5zdHlsZS5jb2xvciA9ICcjZmZmZmZmJzsKICAgICAgICAgICAgICAgICAgICBidG5TdWJtaXQuc3R5bGUuYm94U2hhZG93ID0gJzAgNHB4IDE1cHggcmdiYSgxNiwgMTg1LCAxMjksIDAuNSknOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgYnRuTmV4dC5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7CiAgICAgICAgICAgICAgICBidG5TdWJtaXQuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZGlzcGxheUFjdGl2ZVBhbmVsKCd2aWV3LXF1aXonKTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gaGFuZGxlUmF0ZSh2YWwpIHsKICAgICAgICAgICAgcXVlc3Rpb25zRGF0YVtjdXJyZW50SW5kZXhdLmFuc3dlciA9IHZhbDsKICAgICAgICAgICAgcmVuZGVyUXVpelNjcmVlbigpOyAvLyBJbnN0YW50bHkgYXBwbHkgYWN0aXZlIHN0YXRlCiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoY3VycmVudEluZGV4IDwgcXVlc3Rpb25zRGF0YS5sZW5ndGggLSAxKSB7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIGN1cnJlbnRJbmRleCsrOwogICAgICAgICAgICAgICAgICAgIHJlbmRlclF1aXpTY3JlZW4oKTsKICAgICAgICAgICAgICAgIH0sIDI1MCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBBdXRvLWFkdmFuY2UgbGFzdCBxdWVzdGlvbiAoUXVlc3Rpb24gNDkpIGludG8gc3VibWlzc2lvbgogICAgICAgICAgICAgICAgdmFyIGJ0blN1Ym1pdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG4tc3VibWl0Jyk7CiAgICAgICAgICAgICAgICBpZiAoYnRuU3VibWl0KSB7CiAgICAgICAgICAgICAgICAgICAgYnRuU3VibWl0LnRleHRDb250ZW50ID0gJ1N1Ym1pdHRpbmcgQXNzZXNzbWVudC4uLic7CiAgICAgICAgICAgICAgICAgICAgYnRuU3VibWl0LnN0eWxlLmJhY2tncm91bmQgPSAnIzA1OTY2OSc7CiAgICAgICAgICAgICAgICAgICAgYnRuU3VibWl0LnN0eWxlLmNvbG9yID0gJyNmZmZmZmYnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICBjYWxjdWxhdGVBbmRTdWJtaXRSZXN1bHRzKCk7CiAgICAgICAgICAgICAgICB9LCA0MDApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyAtLS0gQ0xPU0UgVklFVyAvIFBPUlRBTCBSRVRVUk4gUFJPVE9DT0wgLS0tCiAgICAgICAgZnVuY3Rpb24gaGFuZGxlQ2xvc2VWaWV3KCkgewogICAgICAgICAgICB2YXIgZGVzdCA9ICcvbmVlZHMvJyArIChjb2hvcnRDb2RlID8gKCc/Y29ob3J0PScgKyBjb2hvcnRDb2RlICsgKHVzZXJDb2RlID8gKCcmY29kZT0nICsgdXNlckNvZGUpIDogJycpKSA6ICcnKTsKICAgICAgICAgICAgaWYgKHdpbmRvdy5vcGVuZXIgJiYgIXdpbmRvdy5vcGVuZXIuY2xvc2VkKSB7CiAgICAgICAgICAgICAgICB0cnkgeyB3aW5kb3cub3BlbmVyLmZvY3VzKCk7IH0gY2F0Y2goZSkge30KICAgICAgICAgICAgICAgIHdpbmRvdy5jbG9zZSgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBkZXN0OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyAtLS0gU0VDVVJFIERJU1BBVENIIFBJUEVMSU5FIElOVEVHUkFUSU9OIFRPIFRIRSBXT1JEUFJFU1MgUkVTVCBBUEkgLS0tCiAgICAgICAgZnVuY3Rpb24gY2FsY3VsYXRlQW5kU3VibWl0UmVzdWx0cygpIHsKCiAgICAgICAgICAgIGRpc3BsYXlBY3RpdmVQYW5lbCgndmlldy1sb2FkaW5nJyk7CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgdG90YWxTY29yZSA9IDA7CiAgICAgICAgICAgIHZhciBzdWJzY29yZXMgPSB7IEZJOiAwLCBJRDogMCwgSUM6IDAsIENFOiAwLCBEUzogMCwgUE86IDAsIFJXOiAwIH07CiAgICAgICAgICAgIHZhciBvcmRlcmVkUmF0aW5ncyA9IG5ldyBBcnJheSg0OSkuZmlsbCgxKTsKICAgICAgICAgICAgdmFyIGxlZ2FjeVJhdGluZ3MgPSBbXTsKCiAgICAgICAgICAgIC8vIEFzc2VtYmxlIFBheWxvYWQgZXhhY3RseSBtYXRjaGluZyBBUEkgc3BlY2lmaWNhdGlvbgogICAgICAgICAgICBxdWVzdGlvbnNEYXRhLmZvckVhY2goZnVuY3Rpb24ocSkgewogICAgICAgICAgICAgICAgdmFyIGFucyA9IHBhcnNlSW50KHEuYW5zd2VyKTsKICAgICAgICAgICAgICAgIGlmIChpc05hTihhbnMpIHx8IGFucyA8IDEpIGFucyA9IDE7CiAgICAgICAgICAgICAgICB0b3RhbFNjb3JlICs9IGFuczsKICAgICAgICAgICAgICAgIGlmIChzdWJzY29yZXNbcS5zY2FsZUlkXSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgc3Vic2NvcmVzW3Euc2NhbGVJZF0gKz0gYW5zOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgb3JpZ0lkeCA9IChxLm9yaWdpbmFsSW5kZXggIT09IHVuZGVmaW5lZCkgPyBwYXJzZUludChxLm9yaWdpbmFsSW5kZXgpIDogMTsKICAgICAgICAgICAgICAgIHZhciB6ZXJvSWR4ID0gb3JpZ0lkeCAtIDE7CiAgICAgICAgICAgICAgICBpZiAoemVyb0lkeCA+PSAwICYmIHplcm9JZHggPCA0OSkgewogICAgICAgICAgICAgICAgICAgIG9yZGVyZWRSYXRpbmdzW3plcm9JZHhdID0gYW5zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGxlZ2FjeVJhdGluZ3MucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgaW5kaWNhdG9yX251bWJlcjogb3JpZ0lkeCwKICAgICAgICAgICAgICAgICAgICBpbmRpY2F0b3JfdGV4dDogcS50ZXh0LAogICAgICAgICAgICAgICAgICAgIGluZGljYXRvcl9zZWdtZW50OiBxLnNjYWxlTmFtZSwKICAgICAgICAgICAgICAgICAgICBpbmRpY2F0b3Jfc2VnbWVudF9jb2RlOiBxLnNjYWxlSWQsCiAgICAgICAgICAgICAgICAgICAgaW5kaWNhdG9yX3JhdGluZzogYW5zCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAvLyBGYWxsYmFjayB0byBjb29raWUvc3RvcmFnZSBpZiBVUkwgcGFyYW0gbWlzc2luZyBidXQgc3R1ZGVudCBzZXNzaW9uIGFjdGl2ZQogICAgICAgICAgICBpZiAoIWNvaG9ydENvZGUpIHsKICAgICAgICAgICAgICAgIHZhciBjb29raWVNYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCcoXnwgKWE3bXFfcHJvbW9fdW5sb2NrZWQ9KFteO10rKScpKTsKICAgICAgICAgICAgICAgIGlmIChjb29raWVNYXRjaCAmJiBjb29raWVNYXRjaFsyXSAmJiBjb29raWVNYXRjaFsyXS5sZW5ndGggPD0gNSkgewogICAgICAgICAgICAgICAgICAgIGNvaG9ydENvZGUgPSBjb29raWVNYXRjaFsyXS50cmltKCkudG9VcHBlckNhc2UoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gU3luYyB3aXRoIGxvY2FsIHN1Ym1pc3Npb25zIGRiIGltbWVkaWF0ZWx5IGZvciBvZmZsaW5lL2luc3RhbnQgZmVlZGJhY2sKICAgICAgICAgICAgaWYgKGNvaG9ydENvZGUgJiYgdXNlckNvZGUpIHsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGRiID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYTdtcV9zdWJtaXNzaW9uc19kYicpIHx8ICd7fScpOwogICAgICAgICAgICAgICAgICAgIHZhciBkYktleSA9IGNvaG9ydENvZGUgKyAnXycgKyB1c2VyQ29kZTsKICAgICAgICAgICAgICAgICAgICBpZiAoIWRiW2RiS2V5XSkgZGJbZGJLZXldID0geyBjb2hvcnRJZDogY29ob3J0Q29kZSwgdXNlckNvZGU6IHVzZXJDb2RlIH07CiAgICAgICAgICAgICAgICAgICAgZGJbZGJLZXldW3BoYXNlXSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmU6IHRvdGFsU2NvcmUsCiAgICAgICAgICAgICAgICAgICAgICAgIHJhdGluZ3M6IG9yZGVyZWRSYXRpbmdzLAogICAgICAgICAgICAgICAgICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLnRvTG9jYWxlRGF0ZVN0cmluZygpLAogICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKQogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgaWYgKHBoYXNlID09PSAnYWxyaV9wcmUnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRiW2RiS2V5XVsnYWxyaSddID0gZGJbZGJLZXldW3BoYXNlXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2E3bXFfc3VibWlzc2lvbnNfZGInLCBKU09OLnN0cmluZ2lmeShkYikpOwogICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7IGNvbnNvbGUud2FybignTG9jYWxTdG9yYWdlIHN5bmMgZXJyb3I6JywgZSk7IH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gUHJpbWFyeTogRGlzcGF0Y2ggdG8gQ29ob3J0IFNPV0IgUkVTVCBBUEkgaWYgY29ob3J0IHN0dWRlbnQKICAgICAgICAgICAgdmFyIGNvaG9ydFByb21pc2UgPSBudWxsOwogICAgICAgICAgICBpZiAoY29ob3J0Q29kZSAmJiB1c2VyQ29kZSkgewogICAgICAgICAgICAgICAgY29ob3J0UHJvbWlzZSA9IGZldGNoKCcvd3AtanNvbi9hN21xL3YxL3Nvd2Ivc3VibWlzc2lvbnMvc3VibWl0JywgewogICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLAogICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LAogICAgICAgICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsKICAgICAgICAgICAgICAgICAgICAgICAgY29ob3J0X2NvZGU6IGNvaG9ydENvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfY29kZTogdXNlckNvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHBoYXNlOiBwaGFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgcmF0aW5nczogb3JkZXJlZFJhdGluZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgIHRvcF90aHJlZV9pdGVtczogW10sCiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJ3cml0ZTogdHJ1ZQogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24ocmVzKSB7IHJldHVybiByZXMuanNvbigpOyB9KQogICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24oZGF0YSkgewogICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDb2hvcnQgU09XQiBTdWJtaXNzaW9uIFJlc3BvbnNlOicsIGRhdGEpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhOwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbihlcnIpIHsKICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0NvaG9ydCBTT1dCIHN1Ym1pc3Npb24gZXJyb3I6JywgZXJyKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBTZWNvbmRhcnk6IERpc3BhdGNoIHRvIGluZGl2aWR1YWwgQTdNUS1NYW5hZ2VyIFJFU1QgQVBJIChmb3IgbG9nZ2VkLWluIFdQIHVzZXJzKQogICAgICAgICAgICB2YXIgcmVzdE5vbmNlID0gKHR5cGVvZiB3aW5kb3cuYTdtcV9yZXN0X25vbmNlICE9PSAndW5kZWZpbmVkJykgPyB3aW5kb3cuYTdtcV9yZXN0X25vbmNlIDogJyc7CiAgICAgICAgICAgIHZhciBsZWdhY3lQYXlsb2FkID0gewogICAgICAgICAgICAgICAgYXNzZXNzbWVudF9pZDogJ0EtJyArIERhdGUubm93KCkgKyAnLScgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwKSwgCiAgICAgICAgICAgICAgICByYXRpbmdzOiBsZWdhY3lSYXRpbmdzCiAgICAgICAgICAgIH07CgogICAgICAgICAgICB2YXIgdXNlclByb21pc2UgPSBmZXRjaCgnL3dwLWpzb24vYTdtcS92MS9zdWJtaXQvYWxyaScsIHsKICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLAogICAgICAgICAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnWC1XUC1Ob25jZSc6IHJlc3ROb25jZSB9LAogICAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkobGVnYWN5UGF5bG9hZCkKICAgICAgICAgICAgfSkKICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24ocmVzKSB7IHJldHVybiByZXMuanNvbigpOyB9KQogICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0xlZ2FjeSBzdWJtaXQvYWxyaSBieXBhc3NlZDonLCBlcnIpOwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIFByb21pc2UuYWxsU2V0dGxlZChbY29ob3J0UHJvbWlzZSwgdXNlclByb21pc2VdKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmVuZGVyRmluYWxSZXN1bHRzU2NyZWVuKHRvdGFsU2NvcmUsIHN1YnNjb3Jlcyk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgLy8gLS0tIE1PRFVMRSBMQVlFUiA0OiBBUlRJRkFDVCBHUkFQSCBSRU5ERVIgSU5URVJGQUNFIChBREEgLyBXQ0FHIDIuMSBBQSBDT01QTElBTlQpIC0tLQogICAgICAgIGZ1bmN0aW9uIHJlbmRlckZpbmFsUmVzdWx0c1NjcmVlbih0b3RhbFNjb3JlLCBzdWJzY29yZXMpIHsKICAgICAgICAgICAgLy8gRW5zdXJlIExpZ2h0IE1vZGUgZm9yIGhpZ2gtY29udHJhc3QgYWNjZXNzaWJpbGl0eSAoV0NBRyAyLjEgQUEpCiAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtdGhlbWUnKTsKICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2RhcmsnKTsKICAgICAgICAgICAgaXNEYXJrVGhlbWVBY3RpdmUgPSBmYWxzZTsKICAgICAgICAgICAgdmFyIHRoZW1lQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RoZW1lLWJ0bicpOwogICAgICAgICAgICBpZiAodGhlbWVCdG4pIHRoZW1lQnRuLnRleHRDb250ZW50ID0gJ/CfjJkgRGFyayBNb2RlJzsKCiAgICAgICAgICAgIC8vIDEuIFBvcHVsYXRlIENhbmRpZGF0ZSAmIENvaG9ydCBNZXRhZGF0YQogICAgICAgICAgICB2YXIgdXNlckNvZGVFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXMtdXNlci1jb2RlJyk7CiAgICAgICAgICAgIGlmICh1c2VyQ29kZUVsKSB1c2VyQ29kZUVsLnRleHRDb250ZW50ID0gdXNlckNvZGUgfHwgJ0lORElWSURVQUwnOwogICAgICAgICAgICB2YXIgY29ob3J0VGl0bGVFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXMtY29ob3J0LXRpdGxlJyk7CiAgICAgICAgICAgIGlmIChjb2hvcnRUaXRsZUVsKSB7CiAgICAgICAgICAgICAgICB2YXIgY01hcCA9IHsKICAgICAgICAgICAgICAgICAgICAnREEzNic6ICdEQTM2IOKAlCBBTFJJIEFnZW5jeSBEZW1vJywKICAgICAgICAgICAgICAgICAgICAnRlA2Qyc6ICdGUDZDIOKAlCBBTFJJIEhpZ2ggU2Nob29sIERlbW8nLAogICAgICAgICAgICAgICAgICAgICdaSFVBJzogJ1pIVUEg4oCUIEFMUkkgQWR1bHQgQ2xpZW50cyBEZW1vJywKICAgICAgICAgICAgICAgICAgICAnTTQ4WCc6ICdNNDhYIOKAlCBNYWNBcnRodXIgSGlnaCBTY2hvb2wgMjAyNuKAkzIwMjcnLAogICAgICAgICAgICAgICAgICAgICc1UEhTJzogJzVQSFMg4oCUIFRlc3QgQ29ob3J0JwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIGNvaG9ydFRpdGxlRWwudGV4dENvbnRlbnQgPSBjb2hvcnRDb2RlID8gKGNNYXBbY29ob3J0Q29kZV0gfHwgKGNvaG9ydENvZGUgKyAnIENvaG9ydCcpKSA6ICdEaXJlY3QgQ2FuZGlkYXRlJzsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgcGhhc2VCYWRnZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXMtcGhhc2UtbGFiZWwnKTsKICAgICAgICAgICAgaWYgKHBoYXNlQmFkZ2UpIHsKICAgICAgICAgICAgICAgIHZhciBpc1Bvc3QgPSAocGhhc2UgPT09ICdhbHJpX3Bvc3QnKTsKICAgICAgICAgICAgICAgIHBoYXNlQmFkZ2UuaW5uZXJIVE1MID0gaXNQb3N0IAogICAgICAgICAgICAgICAgICAgID8gJzxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiAjZWNmZGY1OyBjb2xvcjogIzA0Nzg1NzsgYm9yZGVyOiAxcHggc29saWQgIzEwYjk4MTsgcGFkZGluZzogNHB4IDEycHg7IGJvcmRlci1yYWRpdXM6IDUwcHg7IGZvbnQtc2l6ZTogMC44cmVtOyBmb250LXdlaWdodDogODAwOyI+RW5kbGluZSBQb3N0LUFMUkk8L3NwYW4+JwogICAgICAgICAgICAgICAgICAgIDogJzxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiAjZWZmNmZmOyBjb2xvcjogIzFlNDBhZjsgYm9yZGVyOiAxcHggc29saWQgIzNiODJmNjsgcGFkZGluZzogNHB4IDEycHg7IGJvcmRlci1yYWRpdXM6IDUwcHg7IGZvbnQtc2l6ZTogMC44cmVtOyBmb250LXdlaWdodDogODAwOyI+QmFzZWxpbmUgUHJlLUFMUkk8L3NwYW4+JzsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgZGF0ZUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlcy1jb21wbGV0aW9uLWRhdGUnKTsKICAgICAgICAgICAgaWYgKGRhdGVFbCkgewogICAgICAgICAgICAgICAgdmFyIG5vdyA9IG5ldyBEYXRlKCk7CiAgICAgICAgICAgICAgICBkYXRlRWwudGV4dENvbnRlbnQgPSBub3cudG9Mb2NhbGVEYXRlU3RyaW5nKCdlbi1VUycsIHsgbW9udGg6ICdzaG9ydCcsIGRheTogJ251bWVyaWMnLCB5ZWFyOiAnbnVtZXJpYycgfSkgKyAnICcgKyBub3cudG9Mb2NhbGVUaW1lU3RyaW5nKCdlbi1VUycsIHsgaG91cjogJ251bWVyaWMnLCBtaW51dGU6ICcyLWRpZ2l0JyB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gMi4gU2NvcmUgJiBRdWFsaXRhdGl2ZSBDbGFzc2lmaWNhdGlvbgogICAgICAgICAgICB2YXIgcGN0TnVtID0gTWF0aC5yb3VuZCgodG90YWxTY29yZSAvIDI0NSkgKiAxMDApOwogICAgICAgICAgICB2YXIgcGN0RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzLXNjb3JlLXBjdCcpOwogICAgICAgICAgICBpZiAocGN0RWwpIHBjdEVsLnRleHRDb250ZW50ID0gcGN0TnVtICsgJyUgUmVhZGluZXNzJzsKCiAgICAgICAgICAgIHZhciBzdGF0dXNMYWJlbCA9ICdFbWVyZ2luZyBSZWFkaW5lc3MgLyBTdHJ1Y3R1cmVkIEd1aWRhbmNlIFJlY29tbWVuZGVkICgw4oCTNTklKSc7CiAgICAgICAgICAgIHZhciBzdGF0dXNEZXNjID0gJ0luZGl2aWR1YWwgaW5kaWNhdGVzIGxpbWl0ZWQgaW5kZXBlbmRlbnQgcHJhY3RpY2UgYWNyb3NzIGFkdWx0IGxpZmUgbWFuYWdlbWVudCBjb21wZXRlbmNpZXMuIFN0cnVjdHVyZWQgY29tcGV0ZW5jeS1idWlsZGluZyBtb2R1bGVzIGFuZCBndWlkZWQgaGFiaXQgZm9ybWF0aW9uIGFyZSByZWNvbW1lbmRlZCB0byBlc3RhYmxpc2ggZXNzZW50aWFsIGFkdWx0aG9vZCByb3V0aW5lcy4nOwogICAgICAgICAgICB2YXIgc3RhdHVzQmFkZ2VCZyA9ICcjZmVlMmUyJzsKICAgICAgICAgICAgdmFyIHN0YXR1c0JhZGdlVGV4dCA9ICcjOTkxYjFiJzsKICAgICAgICAgICAgdmFyIHN0YXR1c0JvcmRlciA9ICcjZmNhNWE1JzsKCiAgICAgICAgICAgIGlmICh0b3RhbFNjb3JlID49IDIyMSkgewogICAgICAgICAgICAgICAgc3RhdHVzTGFiZWwgPSAnUmVhZHkgdG8gTWFuYWdlIExpZmUgKDkw4oCTMTAwJSknOwogICAgICAgICAgICAgICAgc3RhdHVzRGVzYyA9ICdJbmRpdmlkdWFsIGluZGljYXRlcyBzdXN0YWluZWQsIGNvbnNpc3RlbnQgaW5kZXBlbmRlbnQgcHJhY3RpY2Ugb2YgY29tcGV0ZW5jaWVzIGFzc29jaWF0ZWQgd2l0aCBtYW5hZ2luZyB0aGVpciB3aG9sZSBhZHVsdCBsaWZlLiBDYW5kaWRhdGUgZGVtb25zdHJhdGVzIGF1dG9ub21vdXMgaGFiaXQgZXhlY3V0aW9uIGFjcm9zcyBhbGwgNyBwc3ljaG9sb2dpY2FsIG1lY2hhbmlzbXMuJzsKICAgICAgICAgICAgICAgIHN0YXR1c0JhZGdlQmcgPSAnI2VjZmRmNSc7CiAgICAgICAgICAgICAgICBzdGF0dXNCYWRnZVRleHQgPSAnIzA2NWY0Nic7CiAgICAgICAgICAgICAgICBzdGF0dXNCb3JkZXIgPSAnIzZlZTdiNyc7CiAgICAgICAgICAgIH0gZWxzZSBpZiAodG90YWxTY29yZSA+PSAxOTYpIHsKICAgICAgICAgICAgICAgIHN0YXR1c0xhYmVsID0gJ0ltbWluZW50IFJlYWRpbmVzcyB0byBNYW5hZ2UgTGlmZSAoODDigJM4OSUpJzsKICAgICAgICAgICAgICAgIHN0YXR1c0Rlc2MgPSAnSW5kaXZpZHVhbCBpbmRpY2F0ZXMgYWN0dWFsIHByZXBhcmF0aW9uLCB3aWxsaW5nbmVzcywgYW5kIGNhcGFjaXR5IGZvciBlbmdhZ2luZyBpbiBjb25zaXN0ZW50IGluZGVwZW5kZW50IHByYWN0aWNlIGFjcm9zcyBrZXkgYWR1bHQgbGlmZSBkb21haW5zIHdpdGggbWluaW1hbCBleHRlcm5hbCBzdXBlcnZpc2lvbi4nOwogICAgICAgICAgICAgICAgc3RhdHVzQmFkZ2VCZyA9ICcjZjNlOGZmJzsKICAgICAgICAgICAgICAgIHN0YXR1c0JhZGdlVGV4dCA9ICcjNmIyMWE4JzsKICAgICAgICAgICAgICAgIHN0YXR1c0JvcmRlciA9ICcjZDhiNGZlJzsKICAgICAgICAgICAgfSBlbHNlIGlmICh0b3RhbFNjb3JlID49IDE3MikgewogICAgICAgICAgICAgICAgc3RhdHVzTGFiZWwgPSAnQnVpbGRpbmcgUmVhZGluZXNzIHRvIE1hbmFnZSBMaWZlICg3MOKAkzc5JSknOwogICAgICAgICAgICAgICAgc3RhdHVzRGVzYyA9ICdJbmRpdmlkdWFsIGluZGljYXRlcyBpbmNyZWFzaW5nIHByZXBhcmVkbmVzcywgZ3Jvd2luZyB3aWxsaW5nbmVzcywgYW5kIGFuIGV4cGFuZGluZyBjYXBhY2l0eSB0byBjb25zaXN0ZW50bHkgcHJhY3RpY2UgYWR1bHQgbGlmZSBtYW5hZ2VtZW50IGNvbXBldGVuY2llcyBpbmRlcGVuZGVudGx5Lic7CiAgICAgICAgICAgICAgICBzdGF0dXNCYWRnZUJnID0gJyNlZmY2ZmYnOwogICAgICAgICAgICAgICAgc3RhdHVzQmFkZ2VUZXh0ID0gJyMxZTQwYWYnOwogICAgICAgICAgICAgICAgc3RhdHVzQm9yZGVyID0gJyM5M2M1ZmQnOwogICAgICAgICAgICB9IGVsc2UgaWYgKHRvdGFsU2NvcmUgPj0gMTQ3KSB7CiAgICAgICAgICAgICAgICBzdGF0dXNMYWJlbCA9ICdNaW5pbWFsIFJlYWRpbmVzcyB0byBNYW5hZ2UgTGlmZSAoNjDigJM2OSUpJzsKICAgICAgICAgICAgICAgIHN0YXR1c0Rlc2MgPSAnSW5kaXZpZHVhbCBpbmRpY2F0ZXMgaW5jb25zaXN0ZW50IHByYWN0aWNlLCBsaW1pdGVkIHByZXBhcmVkbmVzcywgb3IgZW1lcmdpbmcgY2FwYWNpdHkgdG8gaW5kZXBlbmRlbnRseSBtYW5hZ2Uga2V5IGFkdWx0IGxpZmUgc2l0dWF0aW9ucyB3aXRob3V0IGV4dGVybmFsIHByb21wdHMuJzsKICAgICAgICAgICAgICAgIHN0YXR1c0JhZGdlQmcgPSAnI2ZmZmJlYic7CiAgICAgICAgICAgICAgICBzdGF0dXNCYWRnZVRleHQgPSAnIzkyNDAwZSc7CiAgICAgICAgICAgICAgICBzdGF0dXNCb3JkZXIgPSAnI2ZkZTY4YSc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciB0b3RhbFNjb3JlRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzLXRvdGFsLXNjb3JlJyk7CiAgICAgICAgICAgIGlmICh0b3RhbFNjb3JlRWwpIHsKICAgICAgICAgICAgICAgIHRvdGFsU2NvcmVFbC5pbm5lckhUTUwgPSB0b3RhbFNjb3JlICsgJyA8c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxLjI1cmVtOyBjb2xvcjogIzQ3NTU2OTsgZm9udC13ZWlnaHQ6IDcwMDsiPi8gMjQ1IHB0czwvc3Bhbj4nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBzdGF0RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzLXN0YXR1cy1sYWJlbCcpOwogICAgICAgICAgICBpZiAoc3RhdEVsKSB7CiAgICAgICAgICAgICAgICBzdGF0RWwudGV4dENvbnRlbnQgPSBzdGF0dXNMYWJlbDsKICAgICAgICAgICAgICAgIHN0YXRFbC5zdHlsZS5iYWNrZ3JvdW5kID0gc3RhdHVzQmFkZ2VCZzsKICAgICAgICAgICAgICAgIHN0YXRFbC5zdHlsZS5jb2xvciA9IHN0YXR1c0JhZGdlVGV4dDsKICAgICAgICAgICAgICAgIHN0YXRFbC5zdHlsZS5ib3JkZXJDb2xvciA9IHN0YXR1c0JvcmRlcjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgZGVzY0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlcy1zdGF0dXMtZGVzYycpOwogICAgICAgICAgICBpZiAoZGVzY0VsKSBkZXNjRWwudGV4dENvbnRlbnQgPSBzdGF0dXNEZXNjOwoKICAgICAgICAgICAgLy8gMy4gUmVuZGVyIDcgTWVjaGFuaXNtIENvbXBldGVuY3kgQnJlYWtkb3duIENhcmRzCiAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3Vic2NvcmVzLWNvbnRhaW5lcicpOwogICAgICAgICAgICBpZiAoY29udGFpbmVyKSB7CiAgICAgICAgICAgICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gJyc7CiAgICAgICAgICAgICAgICBTQ0FMRVMuZm9yRWFjaChmdW5jdGlvbihzY2FsZSwgc0lkeCkgewogICAgICAgICAgICAgICAgICAgIHZhciBzY29yZSA9IHN1YnNjb3Jlc1tzY2FsZS5pZF0gfHwgMDsKICAgICAgICAgICAgICAgICAgICB2YXIgc1BjdCA9IE1hdGgucm91bmQoKHNjb3JlIC8gMzUpICogMTAwKTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICB2YXIgdGllckxhYmVsID0gJ0RldmVsb3BpbmcgQ29tcGV0ZW5jeSc7CiAgICAgICAgICAgICAgICAgICAgdmFyIHRpZXJCZyA9ICcjZmVlMmUyJzsKICAgICAgICAgICAgICAgICAgICB2YXIgdGllclRleHQgPSAnIzk5MWIxYic7CiAgICAgICAgICAgICAgICAgICAgdmFyIHRpZXJCb3JkZXIgPSAnI2ZjYTVhNSc7CiAgICAgICAgICAgICAgICAgICAgdmFyIGJhckNvbG9yID0gJyNkYzI2MjYnOwoKICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcmUgPj0gMjgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGllckxhYmVsID0gJ0hpZ2ggUmVhZGluZXNzJzsKICAgICAgICAgICAgICAgICAgICAgICAgdGllckJnID0gJyNlY2ZkZjUnOwogICAgICAgICAgICAgICAgICAgICAgICB0aWVyVGV4dCA9ICcjMDY1ZjQ2JzsKICAgICAgICAgICAgICAgICAgICAgICAgdGllckJvcmRlciA9ICcjNmVlN2I3JzsKICAgICAgICAgICAgICAgICAgICAgICAgYmFyQ29sb3IgPSAnIzA1OTY2OSc7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzY29yZSA+PSAyMSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aWVyTGFiZWwgPSAnTW9kZXJhdGUgUmVhZGluZXNzJzsKICAgICAgICAgICAgICAgICAgICAgICAgdGllckJnID0gJyNlZmY2ZmYnOwogICAgICAgICAgICAgICAgICAgICAgICB0aWVyVGV4dCA9ICcjMWU0MGFmJzsKICAgICAgICAgICAgICAgICAgICAgICAgdGllckJvcmRlciA9ICcjOTNjNWZkJzsKICAgICAgICAgICAgICAgICAgICAgICAgYmFyQ29sb3IgPSAnIzI1NjNlYic7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB2YXIgY2FyZEh0bWwgPSBgCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6ICNmOGZhZmM7IGJvcmRlcjogMS41cHggc29saWQgI2UyZThmMDsgYm9yZGVyLXJhZGl1czogMTJweDsgcGFkZGluZzogMThweCAyMHB4OyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OyBtYXJnaW4tYm90dG9tOiAxMHB4OyBmbGV4LXdyYXA6IHdyYXA7IGdhcDogMTBweDsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZsZXg6IDE7IG1pbi13aWR0aDogMjYwcHg7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA4cHg7IG1hcmdpbi1ib3R0b206IDRweDsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICMwZDBmNmE7IGNvbG9yOiAjZmZmZmZmOyBmb250LXdlaWdodDogOTAwOyBmb250LXNpemU6IDAuNzVyZW07IHBhZGRpbmc6IDJweCA3cHg7IGJvcmRlci1yYWRpdXM6IDRweDsgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsiPiR7c2NhbGUuaWR9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZyBzdHlsZT0iY29sb3I6ICMwZDBmNmE7IGZvbnQtc2l6ZTogMS4wNXJlbTsiPiR7c0lkeCArIDF9LiAke3NjYWxlLm5hbWV9PC9zdHJvbmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luOiAwOyBmb250LXNpemU6IDAuODRyZW07IGNvbG9yOiAjNDc1NTY5OyBsaW5lLWhlaWdodDogMS40NTsiPiR7c2NhbGUuZGVzY308L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IGRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsgZ2FwOiA0cHg7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAxLjM1cmVtOyBmb250LXdlaWdodDogOTAwOyBjb2xvcjogIzBkMGY2YTsiPiR7c2NvcmV9IDxzcGFuIHN0eWxlPSJmb250LXNpemU6IDAuODVyZW07IGNvbG9yOiAjNjQ3NDhiOyBmb250LXdlaWdodDogNzAwOyI+LyAzNSBwdHM8L3NwYW4+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiAke3RpZXJCZ307IGNvbG9yOiAke3RpZXJUZXh0fTsgYm9yZGVyOiAxcHggc29saWQgJHt0aWVyQm9yZGVyfTsgZm9udC1zaXplOiAwLjcycmVtOyBmb250LXdlaWdodDogODAwOyBwYWRkaW5nOiAycHggOHB4OyBib3JkZXItcmFkaXVzOiA1MHB4OyI+JHt0aWVyTGFiZWx9ICgke3NQY3R9JSk8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzLXRyYWNrIiByb2xlPSJwcm9ncmVzc2JhciIgYXJpYS12YWx1ZW5vdz0iJHtzY29yZX0iIGFyaWEtdmFsdWVtaW49IjAiIGFyaWEtdmFsdWVtYXg9IjM1IiBhcmlhLWxhYmVsPSIke3NjYWxlLm5hbWV9OiAke3Njb3JlfSBvZiAzNSBwb2ludHMsICR7dGllckxhYmVsfSIgc3R5bGU9IndpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwcHg7IGJhY2tncm91bmQ6ICNlMmU4ZjA7IGJvcmRlci1yYWRpdXM6IDUwcHg7IG92ZXJmbG93OiBoaWRkZW47IG1hcmdpbi10b3A6IDhweDsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9IndpZHRoOiAke3NQY3R9JTsgaGVpZ2h0OiAxMDAlOyBiYWNrZ3JvdW5kOiAke2JhckNvbG9yfTsgYm9yZGVyLXJhZGl1czogNTBweDsgdHJhbnNpdGlvbjogd2lkdGggMC42cyBlYXNlOyI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgYDsKICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuaW5zZXJ0QWRqYWNlbnRIVE1MKCdiZWZvcmVlbmQnLCBjYXJkSHRtbCk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gNC4gUmVuZGVyIDQ5IEl0ZW1pemVkIFN0YXRlbWVudCBSYXRpbmdzIFRhYmxlCiAgICAgICAgICAgIHZhciB0Ym9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXMtc3RhdGVtZW50cy10Ym9keScpOwogICAgICAgICAgICBpZiAodGJvZHkpIHsKICAgICAgICAgICAgICAgIHRib2R5LmlubmVySFRNTCA9ICcnOwogICAgICAgICAgICAgICAgdmFyIHNvcnRlZFF1ZXN0aW9ucyA9IHF1ZXN0aW9uc0RhdGEuc2xpY2UoKS5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgaWR4QSA9IChhLm9yaWdpbmFsSW5kZXggIT09IHVuZGVmaW5lZCkgPyBwYXJzZUludChhLm9yaWdpbmFsSW5kZXgpIDogMDsKICAgICAgICAgICAgICAgICAgICB2YXIgaWR4QiA9IChiLm9yaWdpbmFsSW5kZXggIT09IHVuZGVmaW5lZCkgPyBwYXJzZUludChiLm9yaWdpbmFsSW5kZXgpIDogMDsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWR4QSAtIGlkeEI7CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICB2YXIgcmF0aW5nTWV0YSA9IHsKICAgICAgICAgICAgICAgICAgICA1OiB7IGxhYmVsOiAnNSDigKIgQWxtb3N0IEFsd2F5cycsIGJnOiAnI2VjZmRmNScsIGNvbG9yOiAnIzA2NWY0NicsIGJvcmRlcjogJyNhN2YzZDAnIH0sCiAgICAgICAgICAgICAgICAgICAgNDogeyBsYWJlbDogJzQg4oCiIEZyZXF1ZW50bHknLCBiZzogJyNlZmY2ZmYnLCBjb2xvcjogJyMxZTQwYWYnLCBib3JkZXI6ICcjYmZkYmZlJyB9LAogICAgICAgICAgICAgICAgICAgIDM6IHsgbGFiZWw6ICczIOKAoiBVc3VhbGx5JywgYmc6ICcjZmVmY2U4JywgY29sb3I6ICcjODU0ZDBlJywgYm9yZGVyOiAnI2ZlZjA4YScgfSwKICAgICAgICAgICAgICAgICAgICAyOiB7IGxhYmVsOiAnMiDigKIgU2VsZG9tJywgYmc6ICcjZmZmN2VkJywgY29sb3I6ICcjOWEzNDEyJywgYm9yZGVyOiAnI2ZlZDdhYScgfSwKICAgICAgICAgICAgICAgICAgICAxOiB7IGxhYmVsOiAnMSDigKIgUmFyZWx5IC8gTmV2ZXInLCBiZzogJyNmZWYyZjInLCBjb2xvcjogJyM5OTFiMWInLCBib3JkZXI6ICcjZmVjYWNhJyB9CiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIHNvcnRlZFF1ZXN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHEsIHFJZHgpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgYW5zID0gcGFyc2VJbnQocS5hbnN3ZXIpIHx8IDE7CiAgICAgICAgICAgICAgICAgICAgdmFyIG1ldGEgPSByYXRpbmdNZXRhW2Fuc10gfHwgcmF0aW5nTWV0YVsxXTsKICAgICAgICAgICAgICAgICAgICB2YXIgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwogICAgICAgICAgICAgICAgICAgIHRyLnN0eWxlLmJvcmRlckJvdHRvbSA9ICcxcHggc29saWQgI2UyZThmMCc7CiAgICAgICAgICAgICAgICAgICAgdHIuc3R5bGUuYmFja2dyb3VuZCA9IChxSWR4ICUgMiA9PT0gMCkgPyAnI2ZmZmZmZicgOiAnI2Y4ZmFmYyc7CiAgICAgICAgICAgICAgICAgICAgdHIuaW5uZXJIVE1MID0gYAogICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmc6IDEwcHggMTRweDsgZm9udC13ZWlnaHQ6IDgwMDsgY29sb3I6ICMwZDBmNmE7Ij4ke3Eub3JpZ2luYWxJbmRleH08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmc6IDEwcHggMTRweDsiPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiAjZTBlN2ZmOyBjb2xvcjogIzM3MzBhMzsgZm9udC13ZWlnaHQ6IDgwMDsgZm9udC1zaXplOiAwLjc1cmVtOyBwYWRkaW5nOiAycHggN3B4OyBib3JkZXItcmFkaXVzOiA0cHg7IGRpc3BsYXk6IGlubGluZS1ibG9jazsiPiR7cS5zY2FsZU5hbWUgfHwgcS5zY2FsZUlkfTwvc3Bhbj48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmc6IDEwcHggMTRweDsgY29sb3I6ICMxZTI5M2I7IGxpbmUtaGVpZ2h0OiAxLjQ1OyI+JHtxLnRleHR9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nOiAxMHB4IDE0cHg7IHRleHQtYWxpZ246IGNlbnRlcjsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICR7bWV0YS5iZ307IGNvbG9yOiAke21ldGEuY29sb3J9OyBib3JkZXI6IDFweCBzb2xpZCAke21ldGEuYm9yZGVyfTsgZm9udC13ZWlnaHQ6IDgwMDsgZm9udC1zaXplOiAwLjc4cmVtOyBwYWRkaW5nOiA0cHggMTBweDsgYm9yZGVyLXJhZGl1czogNTBweDsgZGlzcGxheTogaW5saW5lLWJsb2NrOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHttZXRhLmxhYmVsfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgIGA7CiAgICAgICAgICAgICAgICAgICAgdGJvZHkuYXBwZW5kQ2hpbGQodHIpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIDUuIER5bmFtaWMgUmV0dXJuIE5hdmlnYXRpb24gQnV0dG9uIFdpcmluZwogICAgICAgICAgICB2YXIgYnRuUG9ydGFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi1yZXR1cm4tcG9ydGFsJyk7CiAgICAgICAgICAgIGlmIChidG5Qb3J0YWwpIHsKICAgICAgICAgICAgICAgIGJ0blBvcnRhbC5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7CiAgICAgICAgICAgICAgICBidG5Qb3J0YWwub25jbGljayA9IGhhbmRsZUNsb3NlVmlldzsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgYmFubmVyQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Jhbm5lci1yZXR1cm4tcG9ydGFsLWJ0bicpOwogICAgICAgICAgICBpZiAoYmFubmVyQnRuKSB7CiAgICAgICAgICAgICAgICBiYW5uZXJCdG4uc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snOwogICAgICAgICAgICAgICAgYmFubmVyQnRuLm9uY2xpY2sgPSBoYW5kbGVDbG9zZVZpZXc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHRvcENsb3NlQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi10b3AtY2xvc2UtdmlldycpOwogICAgICAgICAgICBpZiAodG9wQ2xvc2VCdG4pIHsKICAgICAgICAgICAgICAgIHRvcENsb3NlQnRuLm9uY2xpY2sgPSBoYW5kbGVDbG9zZVZpZXc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGRpc3BsYXlBY3RpdmVQYW5lbCgndmlldy1yZXN1bHRzJyk7CiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFNBVkVfS0VZKTsKICAgICAgICB9CgogICAgICAgIC8vIC0tLSBHTE9CQUwgU0VDVVJFIEVWRU5UIERFTEVHQVRJT04gTE9PUCAtLS0KICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIgdGFyZ2V0QnRuID0gZS50YXJnZXQuY2xvc2VzdCgnYnV0dG9uJyk7CiAgICAgICAgICAgIGlmICghdGFyZ2V0QnRuKSByZXR1cm47CgogICAgICAgICAgICBpZiAodGFyZ2V0QnRuLmlkID09PSAndGhlbWUtYnRuJykgewogICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgdG9nZ2xlQTdNUVRoZW1lKCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0QnRuLmlkID09PSAnYnRuLXN0YXJ0JykgewogICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgaGFuZGxlU3RhcnQoKTsKICAgICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXRCdG4uY2xhc3NMaXN0LmNvbnRhaW5zKCdyYXRpbmctYnRuJykpIHsKICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgIHZhciB2YWwgPSBwYXJzZUludCh0YXJnZXRCdG4uZ2V0QXR0cmlidXRlKCdkYXRhLXZhbCcpKTsKICAgICAgICAgICAgICAgIGhhbmRsZVJhdGUodmFsKTsKICAgICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXRCdG4uaWQgPT09ICdidG4tcHJldicpIHsKICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgIGlmIChjdXJyZW50SW5kZXggPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgY3VycmVudEluZGV4LS07CiAgICAgICAgICAgICAgICAgICAgcmVuZGVyUXVpelNjcmVlbigpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldEJ0bi5pZCA9PT0gJ2J0bi1uZXh0JykgewogICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA8IHF1ZXN0aW9uc0RhdGEubGVuZ3RoIC0gMSkgewogICAgICAgICAgICAgICAgICAgIGN1cnJlbnRJbmRleCsrOwogICAgICAgICAgICAgICAgICAgIHJlbmRlclF1aXpTY3JlZW4oKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXRCdG4uaWQgPT09ICdidG4tc3VibWl0JykgewogICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgY2FsY3VsYXRlQW5kU3VibWl0UmVzdWx0cygpOwogICAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldEJ0bi5pZCA9PT0gJ2J0bi1wcmludCcpIHsKICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgIHdpbmRvdy5wcmludCgpOwogICAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldEJ0bi5pZCA9PT0gJ2J0bi1yZXN0YXJ0JykgewogICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIEluaXRpYWxpemUgVGhlbWUgLSBEZWZhdWx0IERhcmsgTW9kZQogICAgICAgIGlzRGFya1RoZW1lQWN0aXZlID0gZmFsc2U7CiAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS10aGVtZScpOwogICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdkYXJrJyk7CiAgICAgICAgdmFyIHRoZW1lQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RoZW1lLWJ0bicpOwogICAgICAgIGlmKHRoZW1lQnRuKSB0aGVtZUJ0bi50ZXh0Q29udGVudCA9ICfwn4yZIERhcmsgTW9kZSc7CgogICAgfSkoKTsKICAgIC8qIF1dPiAqLwogICAgPC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPg==
-
Driving Forces Assessment
PHNjcmlwdD5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLXRoZW1lJywgJ2RhcmsnKTs8L3NjcmlwdD4KPCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CiA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+CiA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiA8dGl0bGU+QTdNUSBEcml2aW5nIEZvcmNlcyBBc3Nlc3NtZW50PC90aXRsZT4KCiA8bGluayByZWw9InByZWNvbm5lY3QiIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20iPgogPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tIiBjcm9zc29yaWdpbj4KIDxsaW5rIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9UGx1cytKYWthcnRhK1NhbnM6d2dodEAzMDA7NDAwOzUwMDs2MDA7NzAwOzgwMDs5MDAmZmFtaWx5PVBsYXlmYWlyK0Rpc3BsYXk6aXRhbCx3Z2h0QDAsNzAwOzEsNDAwJmZhbWlseT1MYXRvOndnaHRANDAwOzcwMDs5MDAmZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPgoKIDxzdHlsZT4KIC8qIDwhW0NEQVRBWyAqLwogOnJvb3QgewogLS1icmFuZC1ibHVlOiAjMGQwZjZhOwogLS1icmFuZC15ZWxsb3c6ICNmZmU0MDI7CiAtLWJyYW5kLWRhcms6ICMwNDA2MGY7CiAtLWJyYW5kLXJlZDogI2ViMDAwMTsKCiAvKiBMaWdodCBUaGVtZSBUb2tlbiBNYXRyaXggKi8KIC0tYmctZ3JhZGllbnQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICNmMGY0ZmYgMCUsICNkYmVhZmUgMTAwJSk7CiAtLWdsYXNzLWJnOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTUpOwogLS1nbGFzcy1ib3JkZXI6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsKIC0tZ2xhc3Mtc2hhZG93OiAwIDIwcHggNDBweCAtMTVweCByZ2JhKDE3LCAyNCwgMTA3LCAwLjA4KTsKCiAtLXRleHQtZGFyazogIzBmMTcyYTsKIC0tdGV4dC1tdXRlZDogIzQ3NTU2OTsKIC0tYm9yZGVyLWxpZ2h0OiAjY2JkNWUxOwogLS1pbnB1dC1iZzogI2ZmZmZmZjsKCiAtLXRvcC1iZzogcmdiYSgxNywgMjQsIDEwNywgMC4wOCk7IC0tdG9wLWJvcmRlcjogdmFyKC0tYnJhbmQtYmx1ZSk7IC0tdG9wLXRleHQ6IHZhcigtLWJyYW5kLWJsdWUpOwogLS1taWQtYmc6IHJnYmEoMjUzLCAyMjQsIDcxLCAwLjE1KTsgLS1taWQtYm9yZGVyOiAjY2E4YTA0OyAtLW1pZC10ZXh0OiAjOTI0MDBlOwogLS1ib3QtYmc6IHJnYmEoMjIwLCAzOCwgMzgsIDAuMDgpOyAtLWJvdC1ib3JkZXI6IHZhcigtLWJyYW5kLXJlZCk7IC0tYm90LXRleHQ6ICM5OTFiMWI7CiB9CgogW2RhdGEtdGhlbWU9ImRhcmsiXSB7CiAvKiBEYXJrIFRoZW1lIFRva2VuIE1hdHJpeCAqLwogLS1iZy1ncmFkaWVudDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzBmMTcyYSAwJSwgIzFlMWI0YiAxMDAlKTsKIC0tZ2xhc3MtYmc6IHJnYmEoMTUsIDIzLCA0MiwgMC41NSk7CiAtLWdsYXNzLWJvcmRlcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTsKIC0tZ2xhc3Mtc2hhZG93OiAwIDI0cHggNTBweCAtMTJweCByZ2JhKDAsIDAsIDAsIDAuNik7CgogLS1icmFuZC1ibHVlOiAjNjBhNWZhOwogLS10ZXh0LWRhcms6ICNmOGZhZmM7CiAtLXRleHQtbXV0ZWQ6ICNjYmQ1ZTE7CiAtLWJvcmRlci1saWdodDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogLS1pbnB1dC1iZzogcmdiYSgzMCwgNDEsIDU5LCAwLjcpOwoKIC0tdG9wLWJnOiByZ2JhKDk2LCAxNjUsIDI1MCwgMC4xKTsgLS10b3AtYm9yZGVyOiB2YXIoLS1icmFuZC1ibHVlKTsgLS10b3AtdGV4dDogIzkzYzVmZDsKIC0tbWlkLWJnOiByZ2JhKDI1MywgMjI0LCA3MSwgMC4xKTsgLS1taWQtYm9yZGVyOiB2YXIoLS1icmFuZC15ZWxsb3cpOyAtLW1pZC10ZXh0OiAjZmVmMDhhOwogLS1ib3QtYmc6IHJnYmEoMjIwLCAzOCwgMzgsIDAuMTUpOyAtLWJvdC1ib3JkZXI6IHZhcigtLWJyYW5kLXJlZCk7IC0tYm90LXRleHQ6ICNmY2E1YTU7CiB9CgogI2E3bXEtYXNzZXNzbWVudC1yb290IHsgZm9udC1mYW1pbHk6ICdQbHVzIEpha2FydGEgU2FucycsIHNhbnMtc2VyaWY7IGJhY2tncm91bmQ6IHZhcigtLWJnLWdyYWRpZW50KTsgY29sb3I6IHZhcigtLXRleHQtZGFyayk7IG1hcmdpbjogMDsgcGFkZGluZzogMjBweDsgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjNzLCBjb2xvciAwLjNzOyBtaW4taGVpZ2h0OiAxMDB2aDsgcG9zaXRpb246IHJlbGF0aXZlOyBvdmVyZmxvdy14OiBoaWRkZW47IH0KICNhN21xLWFzc2Vzc21lbnQtcm9vdCAqIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfQogI2E3bXEtYXNzZXNzbWVudC1yb290ICo6Zm9jdXMtdmlzaWJsZSB7IG91dGxpbmU6IDNweCBzb2xpZCB2YXIoLS1icmFuZC15ZWxsb3cpOyBvdXRsaW5lLW9mZnNldDogMnB4OyBib3JkZXItcmFkaXVzOiA0cHg7IH0KICNhN21xLWFzc2Vzc21lbnQtcm9vdCBoMSwgI2E3bXEtYXNzZXNzbWVudC1yb290IGgyLCAjYTdtcS1hc3Nlc3NtZW50LXJvb3QgaDMsICNhN21xLWFzc2Vzc21lbnQtcm9vdCBwIHsgbWFyZ2luLXRvcDogMDsgfQogLmNhbGlmb3JuaWEtZmIsIGgxLCBoMiwgaDMsIGg0IHsgZm9udC1mYW1pbHk6ICdDYWxpZm9ybmlhIEZCJywgJ0NhbGlmb3JuaWFuIEZCJywgJ0Nvcm1vcmFudCBHYXJhbW9uZCcsICdQbGF5ZmFpciBEaXNwbGF5Jywgc2VyaWYgIWltcG9ydGFudDsgZm9udC12YXJpYW50LW51bWVyaWM6IGxpbmluZy1udW1zIHByb3BvcnRpb25hbC1udW1zICFpbXBvcnRhbnQ7IGZvbnQtZmVhdHVyZS1zZXR0aW5nczogImxudW0iIDEsICJwbnVtIiAxICFpbXBvcnRhbnQ7IC13ZWJraXQtZm9udC1mZWF0dXJlLXNldHRpbmdzOiAibG51bSIgMSwgInBudW0iIDEgIWltcG9ydGFudDsgLW1vei1mb250LWZlYXR1cmUtc2V0dGluZ3M6ICJsbnVtIiAxLCAicG51bSIgMSAhaW1wb3J0YW50OyB9CgogLnRoZW1lLXRvZ2dsZSB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAyMHB4OyByaWdodDogMjBweDsgYmFja2dyb3VuZDogdmFyKC0tZ2xhc3MtYmcpOyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1nbGFzcy1ib3JkZXIpOyBwYWRkaW5nOiAxMHB4IDE2cHg7IGJvcmRlci1yYWRpdXM6IDUwcHg7IGN1cnNvcjogcG9pbnRlcjsgY29sb3I6IHZhcigtLXRleHQtZGFyayk7IGZvbnQtd2VpZ2h0OiA4MDA7IGZvbnQtc2l6ZTogMC44NXJlbTsgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDI1cHgpIHNhdHVyYXRlKDEyMCUpOyB6LWluZGV4OiAxMDA7IGJveC1zaGFkb3c6IHZhcigtLWdsYXNzLXNoYWRvdyk7IHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzOyB9CiAudGhlbWUtdG9nZ2xlOmhvdmVyIHsgdHJhbnNmb3JtOiBzY2FsZSgxLjA1KTsgfQoKIC8qIEFtYmllbnQgQW5pbWF0ZWQgRmx1aWQgTWVzaCBFbmdpbmUgKi8KIEBrZXlmcmFtZXMgZmxvYXRCbG9iIHsgMCUsIDEwMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKSBzY2FsZSgxKTsgfSAzMyUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgzMHB4LCAtNDBweCkgc2NhbGUoMS4xKTsgfSA2NiUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMjBweCwgMjBweCkgc2NhbGUoMC45NSk7IH0gfQogLmFuaW1hdGUtYmxvYiB7IGFuaW1hdGlvbjogZmxvYXRCbG9iIDEycyBpbmZpbml0ZSBlYXNlLWluLW91dDsgfQoKIC8qIENpbmVtYXRpYyBHbGFzcyBDb250YWluZXJzICovCiAuY3liZXItZ2xhc3MgeyBiYWNrZ3JvdW5kOiB2YXIoLS1nbGFzcy1iZyk7IGJhY2tkcm9wLWZpbHRlcjogYmx1cigyNXB4KSBzYXR1cmF0ZSgxMjAlKTsgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoMjVweCkgc2F0dXJhdGUoMTIwJSk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWdsYXNzLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6IDI0cHg7IGJveC1zaGFkb3c6IHZhcigtLWdsYXNzLXNoYWRvdyk7IHBvc2l0aW9uOiByZWxhdGl2ZTsgei1pbmRleDogMTA7IG1heC13aWR0aDogMTEwMHB4OyBtYXJnaW46IDYwcHggYXV0byA0MHB4OyBwYWRkaW5nOiA0MHB4OyB9CiBAbWVkaWEobWF4LXdpZHRoOiA3NjhweCkgeyAuY3liZXItZ2xhc3MgeyBwYWRkaW5nOiAyMHB4OyBtYXJnaW4tdG9wOiA4MHB4OyB9IH0KCiAvKiBVbml2ZXJzYWwgQnV0dG9uczogQURBIENvbXBsaWFudCBDb2xvcnMgbWFwcGVkICovCiAuYTdtcS1idG4geyBiYWNrZ3JvdW5kOiB2YXIoLS1icmFuZC15ZWxsb3cpOyBjb2xvcjogdmFyKC0tYnJhbmQtYmx1ZSk7IHBhZGRpbmc6IDE2cHggMzJweDsgZm9udC1zaXplOiAxLjFyZW07IGZvbnQtd2VpZ2h0OiA5MDA7IGJvcmRlcjogbm9uZTsgYm9yZGVyLXJhZGl1czogMTJweDsgY3Vyc29yOiBwb2ludGVyOyB0cmFuc2l0aW9uOiBhbGwgMC4yczsgdGV4dC1hbGlnbjogY2VudGVyOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiAxMDAlOyBib3gtc2hhZG93OiAwIDRweCAxNXB4IHJnYmEoMjUzLCAyMjQsIDcxLCAwLjMpOyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBsZXR0ZXItc3BhY2luZzogMXB4OyB9CiAuYTdtcS1idG46ZGlzYWJsZWQgeyBiYWNrZ3JvdW5kOiB2YXIoLS1ib3JkZXItbGlnaHQpICFpbXBvcnRhbnQ7IGNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKSAhaW1wb3J0YW50OyBjdXJzb3I6IG5vdC1hbGxvd2VkOyBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7IG9wYWNpdHk6IDAuODsgdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7IH0KIC5hN21xLWJ0bjpub3QoOmRpc2FibGVkKTpob3ZlciB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTsgZmlsdGVyOiBicmlnaHRuZXNzKDEuMSk7IGJveC1zaGFkb3c6IDAgNnB4IDIwcHggcmdiYSgyNTMsIDIyNCwgNzEsIDAuNSk7IH0KCiAuYTdtcS1pbnB1dCB7IHdpZHRoOiAxMDAlOyBwYWRkaW5nOiAxOHB4OyBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1ib3JkZXItbGlnaHQpOyBib3JkZXItcmFkaXVzOiAxMnB4OyBmb250LWZhbWlseTogaW5oZXJpdDsgZm9udC1zaXplOiAxLjFyZW07IG1hcmdpbi10b3A6IDEwcHg7IGJhY2tncm91bmQ6IHZhcigtLWlucHV0LWJnKTsgY29sb3I6IHZhcigtLXRleHQtZGFyayk7IHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjJzOyByZXNpemU6IHZlcnRpY2FsOyBtaW4taGVpZ2h0OiAxMjBweDsgfQogLmE3bXEtaW5wdXQ6Zm9jdXMgeyBvdXRsaW5lOiBub25lOyBib3JkZXItY29sb3I6IHZhcigtLWJyYW5kLWJsdWUpOyBib3gtc2hhZG93OiAwIDAgMCAzcHggcmdiYSgxMywgMTUsIDEwNiwgMC4xKTsgfQogW2RhdGEtdGhlbWU9ImRhcmsiXSAuYTdtcS1pbnB1dDpmb2N1cyB7IGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2JhKDk2LCAxNjUsIDI1MCwgMC4yKTsgfQoKIC5hN21xLWdyaWQtMyB7IGRpc3BsYXk6IGdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOyBnYXA6IDIwcHg7IG1hcmdpbi10b3A6IDIwcHg7IH0KIEBtZWRpYShtaW4td2lkdGg6IDkwMHB4KSB7IC5hN21xLWdyaWQtMyB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDMsIDFmcik7IH0gfQogLmE3bXEtZ3JpZC0yIHsgZGlzcGxheTogZ3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7IGdhcDogMjBweDsgbWFyZ2luLWJvdHRvbTogMzBweDsgfQogQG1lZGlhKG1pbi13aWR0aDogODAwcHgpIHsgLmE3bXEtZ3JpZC0yIHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOyB9IH0KCiAvKiBTb3J0aW5nIE1lY2hhbmljcyBQYW5lbHMgKi8KIC5hN21xLXdvcmQtYmFuayB7IGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4wMik7IHBhZGRpbmc6IDI1cHg7IGJvcmRlci1yYWRpdXM6IDE2cHg7IG1hcmdpbi1ib3R0b206IDMwcHg7IGRpc3BsYXk6IGZsZXg7IGZsZXgtd3JhcDogd3JhcDsgZ2FwOiAxMnB4OyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgYm9yZGVyOiAycHggZGFzaGVkIHZhcigtLWJvcmRlci1saWdodCk7IG1pbi1oZWlnaHQ6IDE0MHB4OyB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4ycywgYmFja2dyb3VuZCAwLjJzOyB9CiBbZGF0YS10aGVtZT0iZGFyayJdIC5hN21xLXdvcmQtYmFuayB7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wMik7IH0KIC5hN21xLXdvcmQtYmFuay5kcmFnLW92ZXIgeyBib3JkZXItY29sb3I6IHZhcigtLWJyYW5kLWJsdWUpOyBiYWNrZ3JvdW5kOiByZ2JhKDEzLCAxNSwgMTA2LCAwLjA1KTsgfQoKIC5mb3JjZS1jaGlwIHsgYmFja2dyb3VuZDogdmFyKC0taW5wdXQtYmcpOyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItbGlnaHQpOyBib3JkZXItcmFkaXVzOiA1MHB4OyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBvdmVyZmxvdzogaGlkZGVuOyBib3gtc2hhZG93OiAwIDRweCAxMHB4IHJnYmEoMCwwLDAsMC4wNCk7IGN1cnNvcjogZ3JhYjsgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMXM7IH0KIC5mb3JjZS1jaGlwOmFjdGl2ZSB7IGN1cnNvcjogZ3JhYmJpbmc7IHRyYW5zZm9ybTogc2NhbGUoMC45NSk7IH0KIC5jaGlwLWxhYmVsIHsgcGFkZGluZzogMTBweCAxOHB4OyBmb250LXdlaWdodDogODAwOyBmb250LXNpemU6IDAuOTVyZW07IGN1cnNvcjogaW5oZXJpdDsgY29sb3I6IHZhcigtLXRleHQtZGFyayk7IH0KIC5jaGlwLWFjdGlvbnMgeyBkaXNwbGF5OiBmbGV4OyBib3JkZXItbGVmdDogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7IH0KIC5jaGlwLWJ0biB7IGJvcmRlcjogbm9uZTsgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7IHBhZGRpbmc6IDEwcHggMTRweDsgY3Vyc29yOiBwb2ludGVyOyBmb250LXNpemU6IDFyZW07IGZvbnQtd2VpZ2h0OiA5MDA7IHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xczsgfQogLmNoaXAtYnRuOmhvdmVyIHsgYmFja2dyb3VuZDogcmdiYSgxNSwgMjMsIDQyLCAwLjA1KTsgfQogW2RhdGEtdGhlbWU9ImRhcmsiXSAuY2hpcC1idG46aG92ZXIgeyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMSk7IH0KIC5jaGlwLWJ0bi10b3AgeyBjb2xvcjogdmFyKC0tdG9wLXRleHQpOyB9CiAuY2hpcC1idG4tbWlkIHsgY29sb3I6IHZhcigtLW1pZC10ZXh0KTsgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItbGlnaHQpOyBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItbGlnaHQpOyB9CiAuY2hpcC1idG4tYm90IHsgY29sb3I6IHZhcigtLWJvdC10ZXh0KTsgfQoKIC5hN21xLWJveCB7IGJvcmRlci1yYWRpdXM6IDE2cHg7IHBhZGRpbmc6IDIwcHg7IG1pbi1oZWlnaHQ6IDU1MHB4OyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBnYXA6IDEwcHg7IGJvcmRlcjogMnB4IGRhc2hlZDsgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjJzOyB9CiAuYTdtcS1ib3gtdG9wIHsgYmFja2dyb3VuZDogdmFyKC0tdG9wLWJnKTsgYm9yZGVyLWNvbG9yOiB2YXIoLS10b3AtYm9yZGVyKTsgfQogLmE3bXEtYm94LW1pZCB7IGJhY2tncm91bmQ6IHZhcigtLW1pZC1iZyk7IGJvcmRlci1jb2xvcjogdmFyKC0tbWlkLWJvcmRlcik7IH0KIC5hN21xLWJveC1ib3QgeyBiYWNrZ3JvdW5kOiB2YXIoLS1ib3QtYmcpOyBib3JkZXItY29sb3I6IHZhcigtLWJvdC1ib3JkZXIpOyB9CiAuYTdtcS1ib3gtdGl0bGUgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IGZvbnQtd2VpZ2h0OiA5MDA7IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IGZvbnQtc2l6ZTogMC44NXJlbTsgbWFyZ2luLWJvdHRvbTogMTVweDsgbGV0dGVyLXNwYWNpbmc6IDFweDsgcG9pbnRlci1ldmVudHM6IG5vbmU7IH0KCiAucmFua2VkLWl0ZW0geyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBiYWNrZ3JvdW5kOiB2YXIoLS1pbnB1dC1iZyk7IHBhZGRpbmc6IDEwcHg7IGJvcmRlci1yYWRpdXM6IDEycHg7IGJveC1zaGFkb3c6IDAgNHB4IDEwcHggcmdiYSgwLDAsMCwwLjA0KTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsgY3Vyc29yOiBncmFiOyB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4xcywgYm9yZGVyLXRvcCAwLjJzOyB9CiAucmFua2VkLWl0ZW06YWN0aXZlIHsgY3Vyc29yOiBncmFiYmluZzsgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KTsgfQogLnJhbmstbnVtIHsgZm9udC1zaXplOiAxLjJyZW07IGZvbnQtd2VpZ2h0OiA5MDA7IGNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTsgd2lkdGg6IDQwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsgYm9yZGVyLXJpZ2h0OiAycHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsgbWFyZ2luLXJpZ2h0OiAxMnB4OyBwYWRkaW5nLXJpZ2h0OiA1cHg7IHBvaW50ZXItZXZlbnRzOiBub25lOyB9CiAucmFuay1jb250ZW50IHsgZmxleDogMTsgZm9udC13ZWlnaHQ6IDgwMDsgZm9udC1zaXplOiAwLjk1cmVtOyBwb2ludGVyLWV2ZW50czogbm9uZTsgY29sb3I6IHZhcigtLXRleHQtZGFyayk7IGxpbmUtaGVpZ2h0OiAxLjM7IH0KIC5yYW5rLWNvbnRyb2xzIHsgZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgZ2FwOiAzcHg7IH0KIC5hcnJvdy1idG4geyBib3JkZXI6IG5vbmU7IGJhY2tncm91bmQ6IHJnYmEoMTUsIDIzLCA0MiwgMC4wNSk7IGN1cnNvcjogcG9pbnRlcjsgYm9yZGVyLXJhZGl1czogNnB4OyBwYWRkaW5nOiA0cHggMTBweDsgZm9udC1zaXplOiAwLjc1cmVtOyBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7IHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4yczsgfQogW2RhdGEtdGhlbWU9ImRhcmsiXSAuYXJyb3ctYnRuIHsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjEpOyBjb2xvcjogI2NiZDVlMTsgfQogLmFycm93LWJ0bjpob3ZlciB7IGJhY2tncm91bmQ6IHZhcigtLWJyYW5kLWJsdWUpOyBjb2xvcjogd2hpdGU7IH0KIC5yZW1vdmUtYnRuIHsgYm9yZGVyOiBub25lOyBiYWNrZ3JvdW5kOiByZ2JhKDIyMCwgMzgsIDM4LCAwLjEpOyBjb2xvcjogdmFyKC0tYnJhbmQtcmVkKTsgcGFkZGluZzogOHB4OyBib3JkZXItcmFkaXVzOiA4cHg7IGN1cnNvcjogcG9pbnRlcjsgZm9udC13ZWlnaHQ6IDkwMDsgZm9udC1zaXplOiAwLjlyZW07IG1hcmdpbi1sZWZ0OiAxMHB4OyB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnM7IH0KIC5yZW1vdmUtYnRuOmhvdmVyIHsgYmFja2dyb3VuZDogdmFyKC0tYnJhbmQtcmVkKTsgY29sb3I6IHdoaXRlOyB9CgogLmE3bXEtcHJvZ3Jlc3MtYmFyIHsgYmFja2dyb3VuZDogdmFyKC0tYm9yZGVyLWxpZ2h0KTsgaGVpZ2h0OiAxMHB4OyBib3JkZXItcmFkaXVzOiA1cHg7IG1hcmdpbi1ib3R0b206IDMwcHg7IG92ZXJmbG93OiBoaWRkZW47IGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDNweCByZ2JhKDAsMCwwLDAuMSk7IH0KIC5hN21xLXByb2dyZXNzLWZpbGwgeyBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHZhcigtLWJyYW5kLWJsdWUpLCB2YXIoLS1icmFuZC15ZWxsb3cpKTsgaGVpZ2h0OiAxMDAlOyB0cmFuc2l0aW9uOiB3aWR0aCAwLjRzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7IH0KCiAuYTdtcS1zcGluIHsgYW5pbWF0aW9uOiBhN21xU3BpbiAxcyBsaW5lYXIgaW5maW5pdGU7IH0KIEBrZXlmcmFtZXMgYTdtcVNwaW4geyBmcm9tIHsgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7IH0gdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOyB9IH0KCiAvKiBBbmFseXRpY2FsIE1hdHJpY2VzIFN1bW1hcmllcyBSZXBvcnQgRm9ybWF0dGluZyAqLwogLnJlc3VsdC1zZWN0aW9uIHsgYmFja2dyb3VuZDogdmFyKC0taW5wdXQtYmcpOyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItbGlnaHQpOyBib3JkZXItcmFkaXVzOiAxNnB4OyBwYWRkaW5nOiAzMHB4OyBtYXJnaW4tYm90dG9tOiAyMHB4OyBib3gtc2hhZG93OiAwIDRweCAxNXB4IHJnYmEoMCwwLDAsMC4wMik7IH0KIC5yZXN1bHQtbGlzdCB7IGxpc3Qtc3R5bGU6IG5vbmU7IHBhZGRpbmc6IDA7IG1hcmdpbjogMDsgZm9udC1zaXplOiAxLjFyZW07IGZvbnQtd2VpZ2h0OiA4MDA7IGxpbmUtaGVpZ2h0OiAyOyB9CiAucmVzdWx0LWxpc3QgbGkgeyBtYXJnaW4tYm90dG9tOiAxMnB4OyBib3JkZXItYm90dG9tOiAxcHggZGFzaGVkIHZhcigtLWJvcmRlci1saWdodCk7IHBhZGRpbmctYm90dG9tOiAxMnB4OyBkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGFsaWduLWl0ZW1zOiBjZW50ZXI7IH0KIC5zdGF0LXBpbGwgeyBmb250LXNpemU6IDAuODVyZW07IHBhZGRpbmc6IDZweCAxMnB4OyBib3JkZXItcmFkaXVzOiAxMnB4OyBoZWlnaHQ6IGZpdC1jb250ZW50OyBkaXNwbGF5OiBpbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA2cHg7IGZvbnQtd2VpZ2h0OiA5MDA7IH0KCiAubWF0cml4LXdyYXBwZXIgeyBvdmVyZmxvdy14OiBhdXRvOyBtYXJnaW4tdG9wOiAxNXB4OyBib3JkZXItcmFkaXVzOiAxMnB4OyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItbGlnaHQpOyB9CiAubWF0cml4LXRhYmxlIHsgd2lkdGg6IDEwMCU7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7IG1pbi13aWR0aDogOTAwcHg7IGJhY2tncm91bmQ6IHZhcigtLWlucHV0LWJnKTsgdGV4dC1hbGlnbjogY2VudGVyOyBmb250LXNpemU6IDAuOXJlbTsgY29sb3I6IHZhcigtLXRleHQtZGFyayk7IH0KIC5tYXRyaXgtdGFibGUgdGggeyBiYWNrZ3JvdW5kOiByZ2JhKDE1LCAyMywgNDIsIDAuMDMpOyBwYWRkaW5nOiAxNHB4OyBmb250LXdlaWdodDogOTAwOyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBmb250LXNpemU6IDAuNzVyZW07IGxldHRlci1zcGFjaW5nOiAxcHg7IGNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTsgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7IH0KIFtkYXRhLXRoZW1lPSJkYXJrIl0gLm1hdHJpeC10YWJsZSB0aCB7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wMyk7IH0KIC5tYXRyaXgtdGFibGUgdGQgeyBwYWRkaW5nOiAxNHB4OyBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsgfQogLm1hdHJpeC10YWJsZSB0cjpsYXN0LWNoaWxkIHRkIHsgYm9yZGVyLWJvdHRvbTogbm9uZTsgfQogLm1hdHJpeC10YWJsZSAuZm9yY2UtbmFtZSB7IGZvbnQtd2VpZ2h0OiA4MDA7IHRleHQtYWxpZ246IGxlZnQ7IH0KCiAucmFuay1iYWRnZSB7IGRpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgd2lkdGg6IDMwcHg7IGhlaWdodDogMzBweDsgYm9yZGVyLXJhZGl1czogOHB4OyBmb250LXdlaWdodDogOTAwOyBmb250LXNpemU6IDAuODVyZW07IH0KIC5yYi10b3AgeyBiYWNrZ3JvdW5kOiB2YXIoLS10b3AtYmcpOyBjb2xvcjogdmFyKC0tdG9wLXRleHQpOyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS10b3AtYm9yZGVyKTsgfQogLnJiLW1pZCB7IGJhY2tncm91bmQ6IHZhcigtLW1pZC1iZyk7IGNvbG9yOiB2YXIoLS1taWQtdGV4dCk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1pZC1ib3JkZXIpOyB9CiAucmItYm90IHsgYmFja2dyb3VuZDogdmFyKC0tYm90LWJnKTsgY29sb3I6IHZhcigtLWJvdC10ZXh0KTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm90LWJvcmRlcik7IH0KIC5yYi1wY3QgeyBmb250LXdlaWdodDogOTAwOyBjb2xvcjogdmFyKC0tYnJhbmQtYmx1ZSk7IGJhY2tncm91bmQ6IHJnYmEoMTMsIDE1LCAxMDYsIDAuMSk7IHBhZGRpbmc6IDZweCAxMHB4OyBib3JkZXItcmFkaXVzOiA4cHg7IGZvbnQtc2l6ZTogMC44NXJlbTsgfQogW2RhdGEtdGhlbWU9ImRhcmsiXSAucmItcGN0IHsgYmFja2dyb3VuZDogcmdiYSg5NiwgMTY1LCAyNTAsIDAuMik7IH0KCiBAbWVkaWEgcHJpbnQgewogOnJvb3QsIFtkYXRhLXRoZW1lPSJkYXJrIl0gewogLS1icmFuZC1ibHVlOiAjMGQwZjZhICFpbXBvcnRhbnQ7CiAtLWJyYW5kLXllbGxvdzogI2ZmZTQwMiAhaW1wb3J0YW50OwogLS1icmFuZC1kYXJrOiAjMDQwNjBmICFpbXBvcnRhbnQ7CiAtLWJyYW5kLXJlZDogI2ViMDAwMSAhaW1wb3J0YW50OwogLS1iZy1ncmFkaWVudDogbm9uZSAhaW1wb3J0YW50OwogLS1nbGFzcy1iZzogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKIC0tZ2xhc3MtYm9yZGVyOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogLS1nbGFzcy1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKIC0tdGV4dC1kYXJrOiAjMGYxNzJhICFpbXBvcnRhbnQ7CiAtLXRleHQtbXV0ZWQ6ICM0NzU1NjkgIWltcG9ydGFudDsKIC0tYm9yZGVyLWxpZ2h0OiAjY2JkNWUxICFpbXBvcnRhbnQ7CiAtLWlucHV0LWJnOiAjZmZmZmZmICFpbXBvcnRhbnQ7CiAtLXRvcC1iZzogcmdiYSgxNywgMjQsIDEwNywgMC4wOCkgIWltcG9ydGFudDsKIC0tdG9wLWJvcmRlcjogIzBkMGY2YSAhaW1wb3J0YW50OwogLS10b3AtdGV4dDogIzBkMGY2YSAhaW1wb3J0YW50OwogLS1taWQtYmc6IHJnYmEoMjUzLCAyMjQsIDcxLCAwLjE1KSAhaW1wb3J0YW50OwogLS1taWQtYm9yZGVyOiAjY2E4YTA0ICFpbXBvcnRhbnQ7CiAtLW1pZC10ZXh0OiAjOTI0MDBlICFpbXBvcnRhbnQ7CiAtLWJvdC1iZzogcmdiYSgyMjAsIDM4LCAzOCwgMC4wOCkgIWltcG9ydGFudDsKIC0tYm90LWJvcmRlcjogI2ViMDAwMSAhaW1wb3J0YW50OwogLS1ib3QtdGV4dDogIzk5MWIxYiAhaW1wb3J0YW50OwogfQogYm9keSwgaHRtbCB7CiBiYWNrZ3JvdW5kOiAjZmZmZmZmICFpbXBvcnRhbnQ7CiBjb2xvcjogdmFyKC0tdGV4dC1kYXJrKSAhaW1wb3J0YW50OwogLXdlYmtpdC1wcmludC1jb2xvci1hZGp1c3Q6IGV4YWN0ICFpbXBvcnRhbnQ7CiBwcmludC1jb2xvci1hZGp1c3Q6IGV4YWN0ICFpbXBvcnRhbnQ7CiBtYXJnaW46IDAgIWltcG9ydGFudDsKIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKIH0KCiNhN21xLWFzc2Vzc21lbnQtcm9vdCwgLmN5YmVyLWdsYXNzIHsKIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKIG1hcmdpbjogMCAhaW1wb3J0YW50OwogYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7CiBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7CiBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogfQogI3RoZW1lLWJ0biwgYnV0dG9uLCAuY2hpcC1hY3Rpb25zLCAucmFuay1jb250cm9scywgLnJlbW92ZS1idG4sIC5uYXYtYmFyLCAjbW91c2UtZ2xvdywgI3ZpZXctaW50cm8sICN2aWV3LXZpc2lvbiwgI3ZpZXctcmFuaywgI3ZpZXctd2hhdGlmcywgI3ZpZXctbG9hZGluZyB7CiBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiB9CiBAcGFnZSB7CiBzaXplOiBsZXR0ZXIgcG9ydHJhaXQ7CiBtYXJnaW46IDAuMmluOwogfQogI3ZpZXctcmVzdWx0cyB7CiBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50Owogd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKIG1hcmdpbjogMCAhaW1wb3J0YW50OwogcGFkZGluZzogMCAhaW1wb3J0YW50Owogb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50Owogem9vbTogMC42NTsKIH0KIGgxIHsgZm9udC1zaXplOiAxNnB4ICFpbXBvcnRhbnQ7IG1hcmdpbjogNHB4IDAgIWltcG9ydGFudDsgfQogaDIgeyBmb250LXNpemU6IDE0cHggIWltcG9ydGFudDsgbWFyZ2luOiA0cHggMCAhaW1wb3J0YW50OyB9CiBoMyB7IGZvbnQtc2l6ZTogMTJweCAhaW1wb3J0YW50OyBtYXJnaW46IDRweCAwICFpbXBvcnRhbnQ7IH0KIHAgeyBtYXJnaW46IDAgMCA2cHggMCAhaW1wb3J0YW50OyBmb250LXNpemU6IDEwcHggIWltcG9ydGFudDsgfQogI3NlZ21lbnQtYnJlYWtkb3duLWNvbnRhaW5lciB7CiBnYXA6IDZweCAhaW1wb3J0YW50OwogbWFyZ2luLWJvdHRvbTogOHB4ICFpbXBvcnRhbnQ7CiBkaXNwbGF5OiBncmlkICFpbXBvcnRhbnQ7CiBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCAxZnIpICFpbXBvcnRhbnQ7CiB9CiAjc2VnbWVudC1icmVha2Rvd24tY29udGFpbmVyID4gZGl2IHsKIHBhZGRpbmc6IDZweCAhaW1wb3J0YW50OwogbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiBib3JkZXItcmFkaXVzOiA0cHggIWltcG9ydGFudDsKIH0KIHRhYmxlIHsgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsgZm9udC1zaXplOiA5cHggIWltcG9ydGFudDsgfQogdGgsIHRkIHsgcGFkZGluZzogNHB4ICFpbXBvcnRhbnQ7IGxpbmUtaGVpZ2h0OiAxICFpbXBvcnRhbnQ7IH0KIC5yYW5rLWJhZGdlIHsgd2lkdGg6IDE2cHggIWltcG9ydGFudDsgaGVpZ2h0OiAxNnB4ICFpbXBvcnRhbnQ7IGZvbnQtc2l6ZTogOXB4ICFpbXBvcnRhbnQ7IGxpbmUtaGVpZ2h0OiAxNnB4ICFpbXBvcnRhbnQ7IH0KIC5zdGF0LXBpbGwgeyBwYWRkaW5nOiAycHggNnB4ICFpbXBvcnRhbnQ7IGZvbnQtc2l6ZTogOXB4ICFpbXBvcnRhbnQ7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCkgIWltcG9ydGFudDsgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsgY29sb3I6IHZhcigtLXRleHQtZGFyaykgIWltcG9ydGFudDsgfQogLnJhbmtlZC1pdGVtLCB0ciwgI3NlZ21lbnQtYnJlYWtkb3duLWNvbnRhaW5lciA+IGRpdiwgI3N1YnNjb3Jlcy1jb250YWluZXIgPiBkaXYgeyBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQgIWltcG9ydGFudDsgYnJlYWstaW5zaWRlOiBhdm9pZCAhaW1wb3J0YW50OyB9CiB1bCwgb2wgeyBtYXJnaW4tYm90dG9tOiA0cHggIWltcG9ydGFudDsgfQogbGkgeyBwYWRkaW5nOiAzcHggIWltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTogMnB4ICFpbXBvcnRhbnQ7IGZvbnQtc2l6ZTogMTBweCAhaW1wb3J0YW50OyB9Ci8qIEZvcmNlIGNvbXBsZXRlbHkgZGFyayB0ZXh0IGZvciBQREYgcmVhZGFiaWxpdHkgKi8KIGJvZHksIHAsIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIHNwYW4sIGRpdiwgbGksIHRkLCB0aCwgbGFiZWwsIC50ZXh0LW11dGVkLCAudGV4dC1zbGF0ZS00MDAsIC50ZXh0LXNsYXRlLTUwMCB7CiBjb2xvcjogIzAwMDAwMCAhaW1wb3J0YW50OwogdGV4dC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKIH0KCiAvKiBFbnN1cmUgdGhlIHN0YXQgcGlsbHMgbWFpbnRhaW4gcmVhZGFibGUgY29udHJhc3QgKi8KIC5zdGF0LXBpbGwsIC5yYW5rLWJhZGdlIHsKIGNvbG9yOiAjMDAwMDAwICFpbXBvcnRhbnQ7CiBib3JkZXI6IDFweCBzb2xpZCAjMDAwMDAwICFpbXBvcnRhbnQ7CiB9Cn0KCi8qIEFzc2Vzc21lbnQgTmF2aWdhdGlvbiBCYXIgKi8KI2E3bXEtYXNzZXNzbWVudC1yb290IHsgcGFkZGluZy10b3A6IDgwcHg7IH0gLyogUHVzaGVzIGNvbnRlbnQgZG93biBzbyBuYXYgZG9lc24ndCBvdmVybGFwICovCi5hN21xLXRvcC1uYXYgewogcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDIwcHg7IGxlZnQ6IDIwcHg7IHJpZ2h0OiAyMHB4OwogZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyBhbGlnbi1pdGVtczogY2VudGVyOwogei1pbmRleDogMTAwOyBtYXgtd2lkdGg6IDExMDBweDsgbWFyZ2luOiAwIGF1dG87Cn0KLm5hdi1yaWdodC1ncm91cCB7IGRpc3BsYXk6IGZsZXg7IGdhcDogMTBweDsgfQoubmF2LWJ0biB7CiBiYWNrZ3JvdW5kOiB2YXIoLS1nbGFzcy1iZyk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWdsYXNzLWJvcmRlcik7CiBwYWRkaW5nOiAxMHB4IDE2cHg7IGJvcmRlci1yYWRpdXM6IDUwcHg7IGN1cnNvcjogcG9pbnRlcjsKIGNvbG9yOiB2YXIoLS10ZXh0LWRhcmspOyBmb250LXdlaWdodDogODAwOyBmb250LXNpemU6IDAuODVyZW07CiBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMjVweCkgc2F0dXJhdGUoMTIwJSk7IC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDI1cHgpIHNhdHVyYXRlKDEyMCUpOwogYm94LXNoYWRvdzogdmFyKC0tZ2xhc3Mtc2hhZG93KTsgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMsIGZpbHRlciAwLjJzOwp9Ci5uYXYtYnRuOmhvdmVyIHsgdHJhbnNmb3JtOiBzY2FsZSgxLjA1KTsgZmlsdGVyOiBicmlnaHRuZXNzKDEuMSk7IH0KCi8qIEhvdmVyIFRvb2x0aXBzIGZvciBDYXJlZXIgRGVmaW5pdGlvbnMgKi8KIC5hN21xLXRvb2x0aXAgewogcG9zaXRpb246IHJlbGF0aXZlOyBjdXJzb3I6IGhlbHA7IGJvcmRlci1ib3R0b206IDJweCBkb3R0ZWQgdmFyKC0tYnJhbmQtYmx1ZSk7IGZvbnQtd2VpZ2h0OiA5MDA7CiB9CiAuYTdtcS10b29sdGlwOjpiZWZvcmUgewogY29udGVudDogYXR0cihkYXRhLXRvb2x0aXApOyBwb3NpdGlvbjogYWJzb2x1dGU7IGJvdHRvbTogMTAwJTsgbGVmdDogNTAlOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgtOHB4KTsKIGJhY2tncm91bmQ6ICMwZjE3MmE7IGNvbG9yOiAjZmZmZmZmOyBwYWRkaW5nOiAxMHB4IDE0cHg7IGJvcmRlci1yYWRpdXM6IDhweDsgZm9udC1zaXplOiAwLjg1cmVtOyBmb250LXdlaWdodDogNjAwOyBsaW5lLWhlaWdodDogMS40Owogd2hpdGUtc3BhY2U6IG5vcm1hbDsgd2lkdGg6IG1heC1jb250ZW50OyBtYXgtd2lkdGg6IDM0MHB4OyBwYWRkaW5nOiAxMnB4IDE2cHg7IHRleHQtYWxpZ246IGNlbnRlcjsgb3BhY2l0eTogMDsgdmlzaWJpbGl0eTogaGlkZGVuOyB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOyB6LWluZGV4OiAxMDAwOyBib3gtc2hhZG93OiAwIDEwcHggMjVweCByZ2JhKDAsMCwwLDAuMyk7IHBvaW50ZXItZXZlbnRzOiBub25lOwogfQogLmE3bXEtdG9vbHRpcDo6YWZ0ZXIgewogY29udGVudDogJyc7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgYm90dG9tOiAxMDAlOyBsZWZ0OiA1MCU7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsgYm9yZGVyLXdpZHRoOiA2cHg7IGJvcmRlci1zdHlsZTogc29saWQ7IGJvcmRlci1jb2xvcjogIzBmMTcyYSB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDsgb3BhY2l0eTogMDsgdmlzaWJpbGl0eTogaGlkZGVuOyB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOyB6LWluZGV4OiAxMDAwOyBwb2ludGVyLWV2ZW50czogbm9uZTsKIH0KIC5hN21xLXRvb2x0aXA6aG92ZXI6OmJlZm9yZSwgLmE3bXEtdG9vbHRpcDpob3Zlcjo6YWZ0ZXIgeyBvcGFjaXR5OiAxOyB2aXNpYmlsaXR5OiB2aXNpYmxlOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgwKTsgfQogLmE3bXEtdG9vbHRpcDpob3Zlcjo6YWZ0ZXIgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSg2cHgpOyB9CiAvKiBdXT4gKi8KCiA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgogPGRpdiBpZD0iYTdtcS1hc3Nlc3NtZW50LXJvb3QiPgogPG5hdiBjbGFzcz0iYTdtcS10b3AtbmF2IG5vLXByaW50Ij4KIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0ibmF2LWJ0biIgb25jbGljaz0id2luZG93LmxvY2F0aW9uLmhyZWY9Jy9kYXNoYm9hcmQnIj7ihpAgRGFzaGJvYXJkPC9idXR0b24+CiA8ZGl2IGNsYXNzPSJuYXYtcmlnaHQtZ3JvdXAiPgogPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJuYXYtYnRuIiBpZD0iYnRuLXNhdmUtcmV0dXJuIj7wn5K+IFNhdmUgJiBSZXR1cm48L2J1dHRvbj4KIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0ibmF2LWJ0biIgaWQ9InRoZW1lLWJ0biI+4piA77iPIExpZ2h0IE1vZGU8L2J1dHRvbj4KIDwvZGl2Pgo8L25hdj4KCiA8ZGl2IGNsYXNzPSJmaXhlZCBpbnNldC0wIG92ZXJmbG93LWhpZGRlbiBwb2ludGVyLWV2ZW50cy1ub25lIHotMCI+CiA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSB0b3AtWy01JV0gbGVmdC1bLTUlXSB3LVs1MDBweF0gaC1bNTAwcHhdIGJnLWJsdWUtNTAwLzEwIGRhcms6YmctYmx1ZS02MDAvMTAgcm91bmRlZC1mdWxsIGJsdXItWzEyMHB4XSBhbmltYXRlLWJsb2IiPjwvZGl2PgogPGRpdiBjbGFzcz0iYWJzb2x1dGUgYm90dG9tLVs1JV0gcmlnaHQtWy01JV0gdy1bNjAwcHhdIGgtWzYwMHB4XSBiZy1wdXJwbGUtNDAwLzEwIGRhcms6YmctcHVycGxlLTYwMC8xMCByb3VuZGVkLWZ1bGwgYmx1ci1bMTQwcHhdIGFuaW1hdGUtYmxvYiIgc3R5bGU9ImFuaW1hdGlvbi1kZWxheTogNHM7Ij48L2Rpdj4KIDwvZGl2PgoKIDxkaXYgY2xhc3M9ImN5YmVyLWdsYXNzIj4KCiA8ZGl2IGlkPSJ2aWV3LWludHJvIiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBwYWRkaW5nOiAyMHB4IDEwcHg7Ij4KIDxoMSBjbGFzcz0iY2FsaWZvcm5pYS1mYiIgc3R5bGU9ImZvbnQtc2l6ZTogMy41cmVtOyBjb2xvcjogdmFyKC0tYnJhbmQtYmx1ZSk7IG1hcmdpbi1ib3R0b206IDE1cHg7IGZvbnQtd2VpZ2h0OiA5MDA7IGxpbmUtaGVpZ2h0OiAxLjE7Ij5NeSBEcml2aW5nIEZvcmNlcyBNYXRyaXg8L2gxPgogPGRpdiBzdHlsZT0ibWF4LXdpZHRoOiA4NTBweDsgbWFyZ2luOiAwIGF1dG8gNDBweCBhdXRvOyB0ZXh0LWFsaWduOiBsZWZ0OyBmb250LXNpemU6IDEuMXJlbTsgY29sb3I6IHZhcigtLXRleHQtbXV0ZWQpOyBiYWNrZ3JvdW5kOiB2YXIoLS1pbnB1dC1iZyk7IHBhZGRpbmc6IDQwcHg7IGJvcmRlci1yYWRpdXM6IDIwcHg7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7IGJveC1zaGFkb3c6IDAgMTBweCAzMHB4IHJnYmEoMCwwLDAsMC4wMyk7Ij4KIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAyMHB4OyI+UHJlcGFyaW5nIHRvIG1ha2UgeW91ciBmb3Jlc2VlYWJsZSBmdXR1cmUgYSByZWFsaXR5IHJlcXVpcmVzIGFuIGVub3Jtb3VzIGFtb3VudCBvZiB0aW1lIGFuZCBlZmZvcnQuIERyaXZlICh2cy4gcGFyaykgaXMgdGhlIG1lY2hhbmlzbSB0aGF0IGVuYWJsZXMgeW91IHRvIGlnbml0ZSwgc2hpZnQsIGFuZCBhY2NlbGVyYXRlIHlvdXIgaW5uYXRlIGZvcmNlcywgdXJnZXMsIG9yIHdpbGxwb3dlciB0byBtb3ZlIG9yIHByb3BlbCBmb3J3YXJkLjwvcD4KIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAyMHB4OyI+VGhlIGFjdGlvbiB5b3UgdGFrZSBpcyBwZXJjZWl2ZWQgdG8gbWVldCBhIHBoeXNpb2xvZ2ljYWwsIHBzeWNob2xvZ2ljYWwsIGFuZCBzb2Npb2xvZ2ljYWwgd2FudCwgbmVlZCwgZGVzaXJlLCBiZW5lZml0LCBzYXRpc2ZhY3Rpb24sIHJld2FyZCwgb3IgYWR2YW50YWdlLiBUaGluayBvZiB0aGVzZSBkcml2aW5nIGZvcmNlcyBhcyB0aGUgdW5kZXJseWluZyBpbmNlbnRpdmVzIG9yICJwYXlvZmZzIiB5b3UgZGVzaXJlIHRvIHJlY2VpdmUgZm9yIGRvaW5nIHdoYXRldmVyIG11c3QgYmUgZG9uZSB0byBtYWtlIHlvdXIgZm9yZXNlZWFibGUgZnV0dXJlIGEgcmVhbGl0eS48L3A+CgogPGRpdiBzdHlsZT0iYmFja2dyb3VuZDogcmdiYSgxMywgMTUsIDEwNiwgMC4wNCk7IHBhZGRpbmc6IDI1cHg7IGJvcmRlci1sZWZ0OiA0cHggc29saWQgdmFyKC0tYnJhbmQtYmx1ZSk7IGJvcmRlci1yYWRpdXM6IDAgMTJweCAxMnB4IDA7IG1hcmdpbi10b3A6IDMwcHg7Ij4KIDxzdHJvbmcgc3R5bGU9ImNvbG9yOiB2YXIoLS1icmFuZC1ibHVlKTsgZGlzcGxheTogYmxvY2s7IG1hcmdpbi1ib3R0b206IDhweDsgZm9udC1zaXplOiAxLjFyZW07Ij5UaGUgR3JvdW5kIFJ1bGVzOjwvc3Ryb25nPgogPHAgc3R5bGU9Im1hcmdpbjogMDsgY29sb3I6IHZhcigtLXRleHQtZGFyayk7IGZvbnQtc2l6ZTogMXJlbTsgbGluZS1oZWlnaHQ6IDEuNjsiPlJlbWVtYmVyLCB5b3UgYXJlIHVuaXF1ZS4gVGhlcmUgYXJlIG5vIHJpZ2h0IG9yIHdyb25nIHJhbmtpbmdzLCBubyBiZXR0ZXIgb3Igd29yc2UgcmFua2luZ3MuIERvIG5vdCByYW5rIGJhc2VkIG9uIHdoYXQgeW91IHRoaW5rIGlzIGRlc2lyYWJsZSBvciBleHBlY3RlZCBvZiB5b3UuIFlvdXIgcmVzdWx0cyB3aWxsIG9ubHkgYmUgbWVhbmluZ2Z1bCB0byB0aGUgZXh0ZW50IHRoYXQgeW91IGFyZSBob25lc3Qgd2l0aCB5b3Vyc2VsZi48L3A+CiA8L2Rpdj4KIDwvZGl2PgogPGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSJidG4tc3RhcnQiIGNsYXNzPSJhN21xLWJ0biIgc3R5bGU9Im1heC13aWR0aDogMzUwcHg7Ij5CZWdpbiBBc3Nlc3NtZW50PC9idXR0b24+CiA8L2Rpdj4KCiA8ZGl2IGlkPSJ2aWV3LXZpc2lvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4KIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgYWxpZ24taXRlbXM6IGNlbnRlcjsgbWFyZ2luLWJvdHRvbTogMTVweDsiPgogPGgyIGlkPSJ2aXNpb24taGVhZGVyIiBzdHlsZT0iY29sb3I6IHZhcigtLWJyYW5kLWJsdWUpOyBmb250LXdlaWdodDogOTAwOyBmb250LXNpemU6IDEuMnJlbTsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgbWFyZ2luOiAwOyBsZXR0ZXItc3BhY2luZzogMXB4OyI+U2VnbWVudCAxIG9mIDc8L2gyPgogPHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6IHZhcigtLWJyYW5kLWJsdWUpOyBjb2xvcjogI2ZmZmZmZjsgcGFkZGluZzogNnB4IDE2cHg7IGJvcmRlci1yYWRpdXM6IDIwcHg7IGZvbnQtc2l6ZTogMC44NXJlbTsgZm9udC13ZWlnaHQ6IDgwMDsgbGV0dGVyLXNwYWNpbmc6IDFweDsiPlN0ZXAgMTogUmVmbGVjdCAmIEludGVybmFsaXplPC9zcGFuPgogPC9kaXY+CiA8ZGl2IGNsYXNzPSJhN21xLXByb2dyZXNzLWJhciIgYXJpYS1oaWRkZW49InRydWUiPjxkaXYgaWQ9InZpc2lvbi1wcm9ncmVzcyIgY2xhc3M9ImE3bXEtcHJvZ3Jlc3MtZmlsbCI+PC9kaXY+PC9kaXY+CgogPGRpdiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBtYXJnaW4tYm90dG9tOiAzMHB4OyI+CiA8aDEgaWQ9InZpc2lvbi10aXRsZSIgY2xhc3M9ImNhbGlmb3JuaWEtZmIiIHN0eWxlPSJjb2xvcjogdmFyKC0tYnJhbmQtYmx1ZSk7IGZvbnQtc2l6ZTogM3JlbTsgbWFyZ2luLWJvdHRvbTogNXB4OyBmb250LXdlaWdodDogOTAwOyI+U2VnbWVudCBUaXRsZTwvaDE+CiA8cCBpZD0idmlzaW9uLWRlc2MiIHN0eWxlPSJjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7IGZvbnQtc2l6ZTogMS4ycmVtOyBmb250LXdlaWdodDogNjAwOyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBsZXR0ZXItc3BhY2luZzogMXB4OyI+SWRlbnRpZnkgRHJpdmVyczwvcD4KIDwvZGl2PgoKIDwhLS0gTkVXOiBHZW9tZXRyaWMgSm91cm5hbGluZyBDYXJkIC0tPgogPGRpdiBzdHlsZT0iYmFja2dyb3VuZDogdmFyKC0taW5wdXQtYmcpOyBwYWRkaW5nOiA1MHB4IDMwcHg7IGJvcmRlci1yYWRpdXM6IDI0cHg7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7IGJveC1zaGFkb3c6IDAgMTBweCAzMHB4IHJnYmEoMCwwLDAsMC4wMyk7IHRleHQtYWxpZ246IGNlbnRlcjsgcG9zaXRpb246IHJlbGF0aXZlOyBvdmVyZmxvdzogaGlkZGVuOyBtYXgtd2lkdGg6IDgwMHB4OyBtYXJnaW46IDAgYXV0bzsiPgogPCEtLSBJbnN0cnVjdGlvbmFsIEdlb21ldHJpYyBTaGFwZXMgLS0+CiA8ZGl2IHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogLTMwcHg7IHJpZ2h0OiAtMzBweDsgd2lkdGg6IDEyMHB4OyBoZWlnaHQ6IDEyMHB4OyBiYWNrZ3JvdW5kOiByZ2JhKDEzLCAxNSwgMTA2LCAwLjA0KTsgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpOyBib3JkZXItcmFkaXVzOiAyMHB4OyI+PC9kaXY+CiA8ZGl2IHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IGJvdHRvbTogMjBweDsgbGVmdDogLTIwcHg7IHdpZHRoOiA4MHB4OyBoZWlnaHQ6IDgwcHg7IGJvcmRlci1yYWRpdXM6IDUwJTsgYm9yZGVyOiA4cHggc29saWQgcmdiYSgyNTMsIDIyNCwgNzEsIDAuMTUpOyI+PC9kaXY+CiA8ZGl2IHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogNDBweDsgbGVmdDogNDBweDsgd2lkdGg6IDEycHg7IGhlaWdodDogMTJweDsgYm9yZGVyLXJhZGl1czogNTAlOyBiYWNrZ3JvdW5kOiB2YXIoLS1icmFuZC1yZWQpOyBvcGFjaXR5OiAwLjI7Ij48L2Rpdj4KCiA8aDMgaWQ9InZpc2lvbi1wcm9tcHQiIHN0eWxlPSJmb250LXdlaWdodDogOTAwOyBjb2xvcjogdmFyKC0tdGV4dC1kYXJrKTsgZm9udC1zaXplOiAxLjZyZW07IGxpbmUtaGVpZ2h0OiAxLjQ7IG1hcmdpbi1ib3R0b206IDI1cHg7IHBvc2l0aW9uOiByZWxhdGl2ZTsgei1pbmRleDogMjsiPlByb21wdDwvaDM+CgogPHAgc3R5bGU9ImNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTsgZm9udC1zaXplOiAxLjFyZW07IGZvbnQtc3R5bGU6IGl0YWxpYzsgbWF4LXdpZHRoOiA1NTBweDsgbWFyZ2luOiAwIGF1dG87IHBvc2l0aW9uOiByZWxhdGl2ZTsgei1pbmRleDogMjsgbGluZS1oZWlnaHQ6IDEuNjsiPlRha2UgYSBtb21lbnQgdG8gaW50ZXJuYWxseSByZWZsZWN0IG9uIHlvdXIgaWRlYWwgZGVzdGluYXRpb24gZm9yIHRoaXMgc2VnbWVudC4gVmlzdWFsaXplIHlvdXIgc3VjY2VzcyBiZWZvcmUgcHJvY2VlZGluZyB0byBzb3J0IHlvdXIgZHJpdmluZyBmb3JjZXMuPC9wPgogPC9kaXY+CgogPGRpdiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBtYXJnaW4tdG9wOiA0MHB4OyI+CiA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgaWQ9ImJ0bi1uZXh0LXZpc2lvbiIgY2xhc3M9ImE3bXEtYnRuIiBzdHlsZT0ibWF4LXdpZHRoOiA0NTBweDsiIGRpc2FibGVkPlByb2NlZWQgdG8gTWF0cml4IFNvcnRpbmc8L2J1dHRvbj4KIDwvZGl2PgogPC9kaXY+CgogPGRpdiBpZD0idmlldy1yYW5rIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPgogPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyBhbGlnbi1pdGVtczogY2VudGVyOyBtYXJnaW4tYm90dG9tOiAxNXB4OyI+CiA8aDIgaWQ9InJhbmstaGVhZGVyIiBzdHlsZT0iY29sb3I6IHZhcigtLWJyYW5kLWJsdWUpOyBmb250LXdlaWdodDogOTAwOyBmb250LXNpemU6IDEuMnJlbTsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgbWFyZ2luOiAwOyBsZXR0ZXItc3BhY2luZzogMXB4OyI+U2VnbWVudCAxIG9mIDc8L2gyPgogPHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6IHZhcigtLWJyYW5kLWJsdWUpOyBjb2xvcjogI2ZmZmZmZjsgcGFkZGluZzogNnB4IDE2cHg7IGJvcmRlci1yYWRpdXM6IDIwcHg7IGZvbnQtc2l6ZTogMC44NXJlbTsgZm9udC13ZWlnaHQ6IDgwMDsgbGV0dGVyLXNwYWNpbmc6IDFweDsiPlN0ZXAgMjogVGhyZWF0IFNvcnRpbmcgTWF0cml4PC9zcGFuPgogPC9kaXY+CiA8ZGl2IGNsYXNzPSJhN21xLXByb2dyZXNzLWJhciIgYXJpYS1oaWRkZW49InRydWUiPjxkaXYgaWQ9InJhbmstcHJvZ3Jlc3MiIGNsYXNzPSJhN21xLXByb2dyZXNzLWZpbGwiPjwvZGl2PjwvZGl2PgoKIDxkaXYgaWQ9InJhbmstaW5zdHJ1Y3Rpb25zLWNvbnRlbnQiIHN0eWxlPSJiYWNrZ3JvdW5kOiB2YXIoLS1pbnB1dC1iZyk7IHBhZGRpbmc6IDI1cHg7IGJvcmRlci1yYWRpdXM6IDE2cHg7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCk7IG1hcmdpbi1ib3R0b206IDMwcHg7IGNvbG9yOiB2YXIoLS10ZXh0LWRhcmspOyBmb250LXNpemU6IDEuMDVyZW07IGxpbmUtaGVpZ2h0OiAxLjY7Ij4KIDwvZGl2PgoKIDxoMyBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogdmFyKC0tdGV4dC1kYXJrKTsgZm9udC1zaXplOiAxLjNyZW07IG1hcmdpbi1ib3R0b206IDE1cHg7IGZvbnQtd2VpZ2h0OiA5MDA7Ij5Xb3JkIEJhbmsgKFJlbWFpbmluZzogPHNwYW4gaWQ9InBvb2wtY291bnQiIGFyaWEtbGl2ZT0icG9saXRlIj4xNTwvc3Bhbj4pPC9oMz4KIDxkaXYgaWQ9ImJveC1wb29sIiBjbGFzcz0iYTdtcS13b3JkLWJhbmsiIGRhdGEtdGFyZ2V0PSJwb29sIiByb2xlPSJyZWdpb24iIGFyaWEtbGFiZWw9IldvcmQgQmFuayBGb3JjZSBQb29sIj48L2Rpdj4KCiA8ZGl2IGNsYXNzPSJhN21xLWdyaWQtMyI+CiA8ZGl2IGlkPSJib3gtdG9wIiBjbGFzcz0iYTdtcS1ib3ggYTdtcS1ib3gtdG9wIiBkYXRhLXRhcmdldD0idG9wIiByb2xlPSJyZWdpb24iIGFyaWEtbGFiZWw9IkhpZ2hlc3QgUHJpb3JpdGllcyBCdWNrZXQiPgogPGRpdiBjbGFzcz0iYTdtcS1ib3gtdGl0bGUiIHN0eWxlPSJjb2xvcjogdmFyKC0tdG9wLXRleHQpOyI+UHJpbWFyeSBEcml2ZXJzICg8c3BhbiBpZD0iY291bnQtdG9wIiBhcmlhLWxpdmU9InBvbGl0ZSI+MDwvc3Bhbj4vNSk8L2Rpdj4KIDxkaXYgaWQ9Imxpc3QtdG9wIiBzdHlsZT0iZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgZ2FwOiA4cHg7Ij48L2Rpdj4KIDwvZGl2PgoKIDxkaXYgaWQ9ImJveC1taWQiIGNsYXNzPSJhN21xLWJveCBhN21xLWJveC1taWQiIGRhdGEtdGFyZ2V0PSJtaWQiIHJvbGU9InJlZ2lvbiIgYXJpYS1sYWJlbD0iTmV1dHJhbCBQcmlvcml0aWVzIEJ1Y2tldCI+CiA8ZGl2IGNsYXNzPSJhN21xLWJveC10aXRsZSIgc3R5bGU9ImNvbG9yOiB2YXIoLS1taWQtdGV4dCk7Ij5NaWRkbGUgNSBOZXV0cmFsICg8c3BhbiBpZD0iY291bnQtbWlkIiBhcmlhLWxpdmU9InBvbGl0ZSI+MDwvc3Bhbj4vNSk8L2Rpdj4KIDxkaXYgaWQ9Imxpc3QtbWlkIiBzdHlsZT0iZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgZ2FwOiA4cHg7Ij48L2Rpdj4KIDwvZGl2PgoKIDxkaXYgaWQ9ImJveC1ib3QiIGNsYXNzPSJhN21xLWJveCBhN21xLWJveC1ib3QiIGRhdGEtdGFyZ2V0PSJib3QiIHJvbGU9InJlZ2lvbiIgYXJpYS1sYWJlbD0iTG93ZXN0IFByaW9yaXRpZXMgQnVja2V0Ij4KIDxkaXYgY2xhc3M9ImE3bXEtYm94LXRpdGxlIiBzdHlsZT0iY29sb3I6IHZhcigtLWJvdC10ZXh0KTsiPkJvdHRvbSA1IFNhY3JpZmljZXMgKDxzcGFuIGlkPSJjb3VudC1ib3QiIGFyaWEtbGl2ZT0icG9saXRlIj4wPC9zcGFuPi81KTwvZGl2PgogPGRpdiBpZD0ibGlzdC1ib3QiIHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBnYXA6IDhweDsiPjwvZGl2PgogPC9kaXY+CiA8L2Rpdj4KCiA8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IG1hcmdpbi10b3A6IDQwcHg7Ij4KIDxidXR0b24gdHlwZT0iYnV0dG9uIiBpZD0iYnRuLW5leHQtcmFuayIgY2xhc3M9ImE3bXEtYnRuIiBzdHlsZT0ibWF4LXdpZHRoOiA0NTBweDsiIGRpc2FibGVkPkNvbXBsZXRlIFJhbmtpbmdzIHRvIENvbnRpbnVlPC9idXR0b24+CiA8L2Rpdj4KIDwvZGl2PgoKIDxkaXYgaWQ9InZpZXctbG9hZGluZyIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IHRleHQtYWxpZ246IGNlbnRlcjsgcGFkZGluZzogMTIwcHggMjBweDsiPgogPGRpdiBzdHlsZT0id2lkdGg6IDkwcHg7IGhlaWdodDogOTBweDsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxMywgMTUsIDEwNiwgMC4xKTsgYm9yZGVyOiA0cHggc29saWQgdmFyKC0tYnJhbmQtYmx1ZSk7IGJvcmRlci1yYWRpdXM6IDUwJTsgbWFyZ2luOiAwIGF1dG8gMzVweDsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7Ij4KIDxkaXYgY2xhc3M9ImE3bXEtc3BpbiIgc3R5bGU9IndpZHRoOiA0NXB4OyBoZWlnaHQ6IDQ1cHg7IGJvcmRlcjogNXB4IHNvbGlkIHZhcigtLWJyYW5kLXllbGxvdyk7IGJvcmRlci10b3AtY29sb3I6IHRyYW5zcGFyZW50OyBib3JkZXItcmFkaXVzOiA1MCU7Ij48L2Rpdj4KIDwvZGl2PgogPGgyIGNsYXNzPSJjYWxpZm9ybmlhLWZiIiBzdHlsZT0iZm9udC1zaXplOiAzcmVtOyBmb250LXdlaWdodDogOTAwOyBjb2xvcjogdmFyKC0tYnJhbmQtYmx1ZSk7IG1hcmdpbi1ib3R0b206IDE1cHg7Ij5TeW50aGVzaXppbmcgQXJjaGl0ZWN0dXJlLi4uPC9oMj4KIDxwIHN0eWxlPSJjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7IGZvbnQtc2l6ZTogMS4ycmVtOyBmb250LXdlaWdodDogNjAwOyI+Q2FsY3VsYXRpbmcgMTA1LXBvaW50IGludGVuc2l0eSBwcm9maWxlcyBhbmQgZXN0YWJsaXNoaW5nIHNlY3VyZSBkYXRhYmFzZSBjb25uZWN0aW9uLjwvcD4KIDwvZGl2PgoKIDxkaXYgaWQ9InZpZXctcmVzdWx0cyIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4KIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtd3JhcDogd3JhcDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyBhbGlnbi1pdGVtczogZmxleC1lbmQ7IG1hcmdpbi1ib3R0b206IDQwcHg7IGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB2YXIoLS1ib3JkZXItbGlnaHQpOyBwYWRkaW5nLWJvdHRvbTogMjVweDsgZ2FwOiAxNXB4OyI+CiA8ZGl2PgogPGgyIGNsYXNzPSJjYWxpZm9ybmlhLWZiIiBzdHlsZT0iZm9udC1zaXplOiAzcmVtOyBjb2xvcjogdmFyKC0tYnJhbmQtYmx1ZSk7IG1hcmdpbi1ib3R0b206IDVweDsgZm9udC13ZWlnaHQ6IDkwMDsiPkRyaXZpbmcgRm9yY2VzIEFyY2hpdGVjdHVyZTwvaDI+CiA8cCBzdHlsZT0iY29sb3I6IHZhcigtLXRleHQtbXV0ZWQpOyBmb250LXdlaWdodDogOTAwOyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBmb250LXNpemU6IDAuOXJlbTsgbGV0dGVyLXNwYWNpbmc6IDJweDsgbWFyZ2luOiAwOyI+U3ludGhlc2lzIENvbXBsZXRlPC9wPgogPC9kaXY+CiA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgaWQ9ImJ0bi1wcmludCIgY2xhc3M9Im5vLXByaW50IiBzdHlsZT0iYmFja2dyb3VuZDogdmFyKC0taW5wdXQtYmcpOyBjb2xvcjogdmFyKC0tYnJhbmQtYmx1ZSk7IGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWJyYW5kLWJsdWUpOyBwYWRkaW5nOiAxNHB4IDI4cHg7IGJvcmRlci1yYWRpdXM6IDEycHg7IGZvbnQtd2VpZ2h0OiA5MDA7IGN1cnNvcjogcG9pbnRlcjsgdHJhbnNpdGlvbjogYWxsIDAuMnM7IGJveC1zaGFkb3c6IDAgNHB4IDEwcHggcmdiYSgwLDAsMCwwLjA1KTsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgZm9udC1zaXplOiAwLjlyZW07IGxldHRlci1zcGFjaW5nOiAxcHg7Ij7wn5ao77iPIFNhdmUgYXMgUERGPC9idXR0b24+CiA8L2Rpdj4KCiA8ZGl2IGNsYXNzPSJhN21xLWdyaWQtMiI+CiA8ZGl2IGNsYXNzPSJyZXN1bHQtc2VjdGlvbiIgc3R5bGU9ImJhY2tncm91bmQ6IHZhcigtLXRvcC1iZyk7IGJvcmRlci1jb2xvcjogdmFyKC0tdG9wLWJvcmRlcik7IG1hcmdpbi1ib3R0b206IDA7Ij4KIDxoMyBzdHlsZT0iY29sb3I6IHZhcigtLXRvcC10ZXh0KTsgZm9udC13ZWlnaHQ6IDkwMDsgZm9udC1zaXplOiAxLjJyZW07IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IG1hcmdpbi1ib3R0b206IDE1cHg7IGxldHRlci1zcGFjaW5nOiAxcHg7Ij5Eb21pbmFudCBUb3AgNSBEcml2aW5nIFBpbGxhcnM8L2gzPgogPHAgc3R5bGU9ImZvbnQtc2l6ZTogMXJlbTsgY29sb3I6IHZhcigtLXRvcC10ZXh0KTsgbWFyZ2luLWJvdHRvbTogMjBweDsgZm9udC13ZWlnaHQ6IDYwMDsgbGluZS1oZWlnaHQ6IDEuNTsiPkZvcmNlcyB3aXRoIHRoZSBoaWdoZXN0IGN1bXVsYXRpdmUgaW5mbHVlbmNlIHNjb3JlcyBiYXNlZCBvbiB5b3VyIDEtMTUgbWF0aGVtYXRpY2FsIHJhbmtpbmdzIGFjcm9zcyBhbGwgNyBzZWdtZW50cy48L3A+CiA8dWwgaWQ9Imxpc3QtZG9taW5hbnQiIGNsYXNzPSJyZXN1bHQtbGlzdCIgc3R5bGU9ImNvbG9yOiB2YXIoLS10ZXh0LWRhcmspOyI+PC91bD4KIDwvZGl2PgogPGRpdiBjbGFzcz0icmVzdWx0LXNlY3Rpb24iIHN0eWxlPSJiYWNrZ3JvdW5kOiB2YXIoLS1ib3QtYmcpOyBib3JkZXItY29sb3I6IHZhcigtLWJvdC1ib3JkZXIpOyBtYXJnaW4tYm90dG9tOiAwOyI+CiA8aDMgc3R5bGU9ImNvbG9yOiB2YXIoLS1ib3QtdGV4dCk7IGZvbnQtd2VpZ2h0OiA5MDA7IGZvbnQtc2l6ZTogMS4ycmVtOyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBtYXJnaW4tYm90dG9tOiAxNXB4OyBsZXR0ZXItc3BhY2luZzogMXB4OyI+U2FjcmlmaWNlZCBCb3R0b20gNSBJdGVtczwvaDM+CiA8cCBzdHlsZT0iZm9udC1zaXplOiAxcmVtOyBjb2xvcjogdmFyKC0tYm90LXRleHQpOyBtYXJnaW4tYm90dG9tOiAyMHB4OyBmb250LXdlaWdodDogNjAwOyBsaW5lLWhlaWdodDogMS41OyI+Rm9yY2VzIHdpdGggdGhlIGxvd2VzdCBjdW11bGF0aXZlIGluZmx1ZW5jZSBzY29yZXMuIFRoZXNlIGFyZSB0aGUgZWxlbWVudHMgeW91IHJlcGVhdGVkbHkgZGVmZXJyZWQuPC9wPgogPHVsIGlkPSJsaXN0LXNhY3JpZmljZWQiIGNsYXNzPSJyZXN1bHQtbGlzdCIgc3R5bGU9ImNvbG9yOiB2YXIoLS10ZXh0LWRhcmspOyI+PC91bD4KIDwvZGl2PgogPC9kaXY+CgogPGRpdiBjbGFzcz0icmVzdWx0LXNlY3Rpb24iIHN0eWxlPSJwYWRkaW5nOiAwOyBvdmVyZmxvdzogaGlkZGVuOyBtYXJnaW4tdG9wOiA0MHB4OyI+CiA8ZGl2IHN0eWxlPSJwYWRkaW5nOiAzMHB4OyBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsgYmFja2dyb3VuZDogdmFyKC0taW5wdXQtYmcpOyI+CiA8aDMgc3R5bGU9ImNvbG9yOiB2YXIoLS1icmFuZC1ibHVlKTsgZm9udC13ZWlnaHQ6IDkwMDsgZm9udC1zaXplOiAxLjNyZW07IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IG1hcmdpbjogMDsgbGV0dGVyLXNwYWNpbmc6IDFweDsiPkZ1bGwgQWxpZ25tZW50IFRhYmxlIE1hdHJpeDwvaDM+CiA8cCBzdHlsZT0iY29sb3I6IHZhcigtLXRleHQtbXV0ZWQpOyBmb250LXNpemU6IDFyZW07IG1hcmdpbi10b3A6IDhweDsgZm9udC13ZWlnaHQ6IDYwMDsiPllvdXIgZXhhY3QgMS0xNSByYW5raW5nIGZvciBldmVyeSBmb3JjZSBmcmFtZXdvcmsgaXRlbSwgYWxvbmdzaWRlIGl0cyBmdWxsIGN1bXVsYXRpdmUgaW5mbHVlbmNlIGludGVuc2l0eS48L3A+CiA8L2Rpdj4KIDxkaXYgY2xhc3M9Im1hdHJpeC13cmFwcGVyIiBzdHlsZT0iYm9yZGVyOm5vbmU7IG1hcmdpbjowOyI+CiA8dGFibGUgY2xhc3M9Im1hdHJpeC10YWJsZSIgaWQ9Im1hdHJpeC10YWJsZSI+CiA8L3RhYmxlPgogPC9kaXY+CiA8L2Rpdj4KCiA8ZGl2IGNsYXNzPSJyZXN1bHQtc2VjdGlvbiIgc3R5bGU9Im1hcmdpbi10b3A6IDQwcHg7Ij4KIDxoMyBzdHlsZT0iY29sb3I6IHZhcigtLWJyYW5kLWJsdWUpOyBmb250LXdlaWdodDogOTAwOyBmb250LXNpemU6IDEuM3JlbTsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgbWFyZ2luLWJvdHRvbTogMjBweDsgbGV0dGVyLXNwYWNpbmc6IDFweDsiPlNlZ21lbnQtYnktU2VnbWVudCBNYXRyaXggQnJlYWtkb3duPC9oMz4KIDxkaXYgaWQ9InNlZ21lbnQtYnJlYWtkb3duLWNvbnRhaW5lciIgY2xhc3M9ImE3bXEtZ3JpZC0yIj48L2Rpdj4KIDwvZGl2PgoKIDxkaXYgY2xhc3M9InJlc3VsdC1zZWN0aW9uIiBzdHlsZT0ibWFyZ2luLXRvcDogNDBweDsiPgogPGgzIHN0eWxlPSJjb2xvcjogdmFyKC0tYnJhbmQtYmx1ZSk7IGZvbnQtd2VpZ2h0OiA5MDA7IGZvbnQtc2l6ZTogMS4ycmVtOyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBtYXJnaW4tYm90dG9tOiAyMHB4OyBsZXR0ZXItc3BhY2luZzogMXB4OyI+Q2hhcHRlciAyIENvcmUgQ291bnNlbG9yIERpYWdub3N0aWNzIEludHJvc3BlY3Rpb248L2gzPgogPGxhYmVsIHN0eWxlPSJkaXNwbGF5OiBibG9jazsgZm9udC13ZWlnaHQ6IDgwMDsgbWFyZ2luLWJvdHRvbTogMTBweDsgZm9udC1zaXplOiAxLjA1cmVtOyBjb2xvcjogdmFyKC0tdGV4dC1kYXJrKTsiPldoaWNoIGRyaXZpbmcgZm9yY2VzIHdlcmUgYWxyZWFkeSBmYW1pbGlhciB0byB5b3UsIGFuZCB3aGljaCB3ZXJlIG5ldywgc3VycHJpc2luZywgb3IgcHV6emxpbmc/PC9sYWJlbD4KIDx0ZXh0YXJlYSBzdHlsZT0id2lkdGg6IDEwMCU7IHBhZGRpbmc6IDE1cHg7IGJvcmRlci1yYWRpdXM6IDhweDsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsgbWluLWhlaWdodDogMTAwcHg7IG1hcmdpbi1ib3R0b206IDMwcHg7IGZvbnQtZmFtaWx5OiBpbmhlcml0OyBmb250LXNpemU6IDFyZW07IGJhY2tncm91bmQ6IHZhcigtLWlucHV0LWJnKTsgY29sb3I6IHZhcigtLXRleHQtZGFyayk7IHJlc2l6ZTogdmVydGljYWw7Ij48L3RleHRhcmVhPgoKIDxsYWJlbCBzdHlsZT0iZGlzcGxheTogYmxvY2s7IGZvbnQtd2VpZ2h0OiA4MDA7IG1hcmdpbi1ib3R0b206IDEwcHg7IGZvbnQtc2l6ZTogMS4wNXJlbTsgY29sb3I6IHZhcigtLXRleHQtZGFyayk7Ij5Ib3cgZG8geW91IGludGVuZCB0byBhcHBseSB3aGF0IHlvdSBsZWFybmVkIGFib3V0IHlvdXIgRG9taW5hbnQgUGlsbGFycyBpbiB5b3VyIGRhaWx5IGxpZmU/PC9sYWJlbD4KIDx0ZXh0YXJlYSBzdHlsZT0id2lkdGg6IDEwMCU7IHBhZGRpbmc6IDE1cHg7IGJvcmRlci1yYWRpdXM6IDhweDsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KTsgbWluLWhlaWdodDogMTAwcHg7IGZvbnQtZmFtaWx5OiBpbmhlcml0OyBmb250LXNpemU6IDFyZW07IGJhY2tncm91bmQ6IHZhcigtLWlucHV0LWJnKTsgY29sb3I6IHZhcigtLXRleHQtZGFyayk7IHJlc2l6ZTogdmVydGljYWw7Ij48L3RleHRhcmVhPgogPC9kaXY+CgogPGRpdiBjbGFzcz0ibm8tcHJpbnQiIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IG1hcmdpbi10b3A6IDUwcHg7Ij4KIDxidXR0b24gdHlwZT0iYnV0dG9uIiBpZD0iYnRuLXJlc3RhcnQiIHN0eWxlPSJiYWNrZ3JvdW5kOiBub25lOyBib3JkZXI6IG5vbmU7IGNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTsgZm9udC13ZWlnaHQ6IDkwMDsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IGN1cnNvcjogcG9pbnRlcjsgZm9udC1zaXplOiAxLjFyZW07IHRyYW5zaXRpb246IGNvbG9yIDAuMnM7IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IGxldHRlci1zcGFjaW5nOiAxcHg7Ij7wn5SEIFJlc3RhcnQgSW5pdGlhbGl6YXRpb24gU2VxdWVuY2U8L2J1dHRvbj4KIDwvZGl2PgogPC9kaXY+CiA8L2Rpdj4KIDwvZGl2PgoKIDxzY3JpcHQ+CiAvKiA8IVtDREFUQVsgKi8KIC8vIC0tLSBHTE9CQUwgU0VDVVJFIEVWRU5UIERFTEVHQVRJT04gTE9PUCAoSUlGRSkgLS0tCiAvLyBEZWZlYXRzIFdvcmRQcmVzcyBET00tY2FjaGluZyBkZXRhY2htZW50cyBieSBiaW5kaW5nIGV4Y2x1c2l2ZWx5IHRvIHRoZSByb290IGxldmVsLgogKGZ1bmN0aW9uIGluaXRBN01RRHJpdmluZ0ZvcmNlcygpIHsKIGlmICh3aW5kb3cuYTdtcURyaXZpbmdGb3JjZXNMb2FkZWQpIHJldHVybjsKIHdpbmRvdy5hN21xRHJpdmluZ0ZvcmNlc0xvYWRlZCA9IHRydWU7CgogdmFyIGlzRGFya1RoZW1lQWN0aXZlID0gdHJ1ZTsKIHZhciBhcHBEYXRhID0gW107CiB2YXIgY3VycmVudFNlZ0lkeCA9IDA7CgogdmFyIEZPUkNFUyA9IFsKIHsgaWQ6ICdBY2NvdW50YWJpbGl0eScsIGRlc2M6ICJ0aGUgbmVlZCB0byBiZSByZWxpYWJsZSwgZGVwZW5kYWJsZSwgdHJ1c3R3b3J0aHksIGFuc3dlcmFibGUgdG8gYSBkdXR5LCBwbGVkZ2UsIG9yIG9ibGlnYXRpb24iIH0sCiB7IGlkOiAnQWNoaWV2ZW1lbnQnLCBkZXNjOiAidGhlIG5lZWQgdG8gZW5kdXJlLCBwZXJzZXZlcmUsIGdldCByZXN1bHRzIG9yIHNvbWV0aGluZyBhY2NvbXBsaXNoZWQgdW5kZXIgY2hhbGxlbmdpbmcgb3IgZGlmZmljdWx0IGNpcmN1bXN0YW5jZXMiIH0sCiB7IGlkOiAnQWZmaWxpYXRpb24nLCBkZXNjOiAidGhlIG5lZWQgdG8gam9pbiwgbmV0d29yaywgZmVsbG93c2hpcCwgYmVmcmllbmQgb3IgbG92ZSBzcGVjaWZpYyBpbmRpdmlkdWFscyBvciBncm91cHMiIH0sCiB7IGlkOiAnRnJlZWRvbScsIGRlc2M6ICJ0aGUgbmVlZCB0byBiZSBpbmRlcGVuZGVudCwgbGliZXJhdGVkLCBlbWFuY2lwYXRlZCwgb3IgdW5idXJkZW5lZCIgfSwKIHsgaWQ6ICdJZGVudGl0eScsIGRlc2M6ICJ0aGUgbmVlZCB0byBkZXRlcm1pbmUsIGV4cHJlc3MsIGFuZCB0YWtlIHByaWRlIGluIG9uZSdzIG93biBkaXN0aW5jdGl2ZSBhcHBlYXJhbmNlLCB1bmlxdWUgY2hhcmFjdGVyaXN0aWMsIG9yIHJvbGUgaW4gcmVsYXRpb24gdG8gb3RoZXJzIiB9LAogeyBpZDogJ0ludGVncml0eScsIGRlc2M6ICJ0aGUgbmVlZCB0byBhY3Qgd2l0aCBhIGNsZWFyIGNvbnNjaWVuY2UsIGFjY29yZGluZyB0byBhIHNldCBvZiBsZWdhbCwgbW9yYWwsIGV0aGljYWwsIG9yIGZhaXRoLWJhc2VkIHByaW5jaXBsZXMsIHZpcnR1ZXMsIG9yIHZhbHVlcyIgfSwKIHsgaWQ6ICdJbnRlbGxpZ2VuY2UnLCBkZXNjOiAidGhlIG5lZWQgdG8ga25vdywgdW5kZXJzdGFuZCwgb3IgbGVhcm4gdGhlIG1lYW5pbmcsIHJlYXNvbiwgdHJ1dGgsIG9yIG5hdHVyZSBvZiB0aGluZ3MsIGlkZWFzLCBvciBwb2ludHMgb2YgdmlldyIgfSwKIHsgaWQ6ICdQZWFjZScsIGRlc2M6ICJ0aGUgbmVlZCB0byBiZSBjb250ZW50ZWQsIGNvbXBvc2VkLCBzYXRpc2ZpZWQsIHBsZWFzZWQsIGFncmVlYWJsZSwgb3IgaGFybW9uaW91cyIgfSwKIHsgaWQ6ICdQb3NzZXNzaW9uJywgZGVzYzogInRoZSBuZWVkIHRvIG93biwgaG9sZCwgY29sbGVjdCwgb3Igb2NjdXB5IG1hdGVyaWFsIG9iamVjdHMgb3IgcHJvcGVydHkiIH0sCiB7IGlkOiAnUG93ZXInLCBkZXNjOiAidGhlIG5lZWQgdG8gaGF2ZSB0aGUgYXV0aG9yaXR5LCBjbG91dCwgb3IgbWlnaHQgdG8gcGVyc3VhZGUsIGRpcmVjdCwgb3IgY29tbWFuZCB0aGUgcmVzb3VyY2VzIG9yIGJlaGF2aW9yIG9mIG90aGVycyIgfSwKIHsgaWQ6ICdQcmFpc2UnLCBkZXNjOiAidGhlIG5lZWQgdG8gYmUgYXBwcmVjaWF0ZWQsIHJlY29nbml6ZWQsIGhvbm9yZWQsIGNlbGVicmF0ZWQsIG9yIHJld2FyZGVkIiB9LAogeyBpZDogJ1Byb21pbmVuY2UnLCBkZXNjOiAidGhlIG5lZWQgdG8gYXR0YWluIGEgY2VydGFpbiByYXRpbmcsIHJhbmtpbmcsIHBvc2l0aW9uLCBvciBzb2NpYWwgc3RhbmRpbmciIH0sCiB7IGlkOiAnU2FmZXR5JywgZGVzYzogInRoZSBuZWVkIHRvIGJlIHNlY3VyZSwgc3RhYmxlLCBzaGVsdGVyZWQsIHByb3RlY3RlZCwgb3IgZ3VhcmRlZCIgfSwKIHsgaWQ6ICdXZWFsdGgnLCBkZXNjOiAidGhlIG5lZWQgdG8gYmUgcmljaCwgYWZmbHVlbnQsIHByb3NwZXJvdXMsIG9yIGdlbmVyb3VzIiB9LAogeyBpZDogJ1dlbGxuZXNzJywgZGVzYzogInRoZSBuZWVkIHRvIGJlIGluIGFuIG9wdGltYWwgc3RhdGUgb3IgY29uZGl0aW9uIG9mIGhlYWx0aCwgZml0bmVzcywgYW5kIHdlbGwtYmVpbmciIH0KIF07CgogdmFyIFNFR01FTlRTID0gWwogeyBpZDogInBlcnNvbmFsIiwgdGl0bGU6ICJQZXJzb25hbCIsIHByb21wdDogIldoYXQgd2lsbCBkcml2ZSB5b3UgdG8gbWFrZSB5b3VyIHBlcnNvbmFsIGxpZmUgYSByZWFsaXR5PyAoRm9jdXM6IGlkZWFsIHBoeXNpY2FsLCBlbW90aW9uYWwsIGFuZCBtZW50YWwgaGVhbHRoIG9ubHkpIiwgc2hvcnRfY29kZTogInMxIiB9LAogeyBpZDogImludGVycGVyc29uYWwiLCB0aXRsZTogIkludGVycGVyc29uYWwiLCBwcm9tcHQ6ICJXaGF0IHdpbGwgZHJpdmUgeW91IHRvIG1ha2UgeW91ciBpbnRlcnBlcnNvbmFsIGxpZmUgYSByZWFsaXR5PyAoRm9jdXM6IGlkZWFsIHJlbGF0aW9uc2hpcHMgb25seSkiLCBzaG9ydF9jb2RlOiAiczIiIH0sCiAvLyBORVcgQ2FyZWVyIFN0cmluZyB3aXRoIFRvb2x0aXBzOgogeyBpZDogImNhcmVlciIsIHRpdGxlOiAiQ2FyZWVyIiwgcHJvbXB0OiAiV2hhdCB3aWxsIGRyaXZlIHlvdSB0byBtYWtlIHlvdXIgY2FyZWVyIGxpZmUgYSByZWFsaXR5PyAoRm9jdXM6IGlkZWFsIDxzcGFuIGNsYXNzPSdhN21xLXRvb2x0aXAnIGRhdGEtdG9vbHRpcD0nYSB3b3JrIHBhdGggeW91IHN0cm9uZ2x5IGJlbGlldmUgaXMgeW91ciBjYWxsaW5nLCB5b3VyIGdpZnQsIG9yIHlvdXIgcHVycG9zZSBpbiBsaWZlLCBldmVuIGlmIHlvdSBkbyBub3QgcmVjZWl2ZSBjb21wZW5zYXRpb24uJz52b2NhdGlvbjwvc3Bhbj4sIDxzcGFuIGNsYXNzPSdhN21xLXRvb2x0aXAnIGRhdGEtdG9vbHRpcD0nYSBnZW5lcmFsIHRlcm0gdXNlZCB0byBkZXNjcmliZSB3b3JrIHlvdSBhcmUgcGFpZCB0byBwZXJmb3JtIHRoYXQgb2NjdXBpZXMgYSBzaWduaWZpY2FudCBhbW91bnQgb2YgeW91ciB0aW1lOyB2cy4gYSBqb2IsIHdoaWNoIGlzIGEgZHV0eSwgY2hvcmUsIG9yIHRhc2sgYXNzaWduZWQgdG8gYW4gaW5kaXZpZHVhbCB0aGF0IGlzIHJvdXRpbmVseSBwZXJmb3JtZWQgd2l0aCBvciB3aXRob3V0IHBheS4nPm9jY3VwYXRpb248L3NwYW4+LCBvciA8c3BhbiBjbGFzcz0nYTdtcS10b29sdGlwJyBkYXRhLXRvb2x0aXA9J2Egd29yayBwYXRoIHdpdGggYSBzZXQgb2Ygc3RhbmRhcmRzIGFuZCBjb2RlIG9mIGV0aGljcyBlc3RhYmxpc2hlZCBieSBhIHBlZXIgZ3JvdXAgdGhhdCByZXF1aXJlcyB5b3UgdG8gdGFrZSBhbiBvYXRoLCBwbGVkZ2UsIG9yIHByb2Zlc3MgdG8gdXBob2xkLic+cHJvZmVzc2lvbjwvc3Bhbj4gb25seSkiLCBzaG9ydF9jb2RlOiAiczMiIH0sCiB7IGlkOiAiZmluYW5jaWFsIiwgdGl0bGU6ICJGaW5hbmNpYWwiLCBwcm9tcHQ6ICJXaGF0IHdpbGwgZHJpdmUgeW91IHRvIG1ha2UgeW91ciBmaW5hbmNpYWwgbGlmZSBhIHJlYWxpdHk/IChGb2N1czogaWRlYWwgaW5jb21lIGxldmVsIG9ubHkpIiwgc2hvcnRfY29kZTogInM0IiB9LAogeyBpZDogImVudmlyb25tZW50YWwiLCB0aXRsZTogIkVudmlyb25tZW50YWwiLCBwcm9tcHQ6ICJXaGF0IHdpbGwgZHJpdmUgeW91IHRvIG1ha2UgeW91ciBlbnZpcm9ubWVudGFsIGxpZmUgYSByZWFsaXR5PyAoRm9jdXM6IGlkZWFsIGNvbW11bml0eSBhbmQgc3Vycm91bmRpbmdzIG9ubHkpIiwgc2hvcnRfY29kZTogInM1IiB9LAogeyBpZDogImVkdWNhdGlvbmFsIiwgdGl0bGU6ICJFZHVjYXRpb25hbCIsIHByb21wdDogIldoYXQgd2lsbCBkcml2ZSB5b3UgdG8gbWFrZSB5b3VyIGVkdWNhdGlvbmFsIGxpZmUgYSByZWFsaXR5PyAoRm9jdXM6IGlkZWFsIGVkdWNhdGlvbmFsIGxldmVsIG9ubHkpIiwgc2hvcnRfY29kZTogInM2IiB9LAogeyBpZDogInNwaXJpdHVhbCIsIHRpdGxlOiAiU3Bpcml0dWFsIiwgcHJvbXB0OiAiV2hhdCB3aWxsIGRyaXZlIHlvdSB0byBtYWtlIHlvdXIgc3Bpcml0dWFsIGxpZmUgYSByZWFsaXR5PyAoRm9jdXM6IGlkZWFsIG1vcmFsLCBvciBldGhpY2FsIGJlbGllZnMgYW5kIHByYWN0aWNlcyBvbmx5KSIsIHNob3J0X2NvZGU6ICJzNyIgfQogXTsKCiBmdW5jdGlvbiB0b2dnbGVBN01RVGhlbWUoKSB7CiBpc0RhcmtUaGVtZUFjdGl2ZSA9ICFpc0RhcmtUaGVtZUFjdGl2ZTsKIHZhciB0aGVtZUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0aGVtZS1idG4nKTsKIGlmIChpc0RhcmtUaGVtZUFjdGl2ZSkgewogZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS10aGVtZScsICdkYXJrJyk7CiBpZih0aGVtZUJ0bikgdGhlbWVCdG4udGV4dENvbnRlbnQgPSAn4piA77iPIExpZ2h0IE1vZGUnOwogfSBlbHNlIHsKIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtdGhlbWUnKTsKIGlmKHRoZW1lQnRuKSB0aGVtZUJ0bi50ZXh0Q29udGVudCA9ICfwn4yZIERhcmsgTW9kZSc7CiB9CiB9CgogZnVuY3Rpb24gZGlzcGxheUFjdGl2ZVBhbmVsKHBhbmVsSWQpIHsKIHZhciBwYW5lbHMgPSBbJ3ZpZXctaW50cm8nLCAndmlldy12aXNpb24nLCAndmlldy1yYW5rJywgJ3ZpZXctd2hhdGlmcycsICd2aWV3LXF1aXonLCAndmlldy1sb2FkaW5nJywgJ3ZpZXctcmVzdWx0cyddOwogcGFuZWxzLmZvckVhY2goZnVuY3Rpb24oaWQpIHsKIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKIGlmIChlbCkgZWwuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKIH0pOwoKIHZhciB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwYW5lbElkKTsKIGlmICh0YXJnZXQpIHRhcmdldC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKIHdpbmRvdy5zY3JvbGxUbyh7IHRvcDogMCwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pOwoKIC8vIEhpZGUgdGhlICdTYXZlICYgUmV0dXJuJyBidXR0b24gd2hlbiBvbiBMb2FkaW5nIG9yIFJlc3VsdHMgc2NyZWVucwogdmFyIHNhdmVCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLXNhdmUtcmV0dXJuJyk7CiBpZiAoc2F2ZUJ0bikgewogaWYgKHBhbmVsSWQgPT09ICd2aWV3LWxvYWRpbmcnIHx8IHBhbmVsSWQgPT09ICd2aWV3LXJlc3VsdHMnKSB7CiBzYXZlQnRuLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiB9IGVsc2Ugewogc2F2ZUJ0bi5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7CiB9CiB9Cn0KIGNvbnN0IFNBVkVfS0VZID0gJ2E3bXFfZGZfcHJvZ3Jlc3MnOwoKZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi1zYXZlLXJldHVybicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgewogZS5wcmV2ZW50RGVmYXVsdCgpOwogaWYgKGFwcERhdGEubGVuZ3RoID4gMCkgewogbG9jYWxTdG9yYWdlLnNldEl0ZW0oU0FWRV9LRVksIEpTT04uc3RyaW5naWZ5KHsKIHNhdmVkSW5kZXg6IGN1cnJlbnRTZWdJZHgsCiBzYXZlZERhdGE6IGFwcERhdGEKIH0pKTsKIGFsZXJ0KCJQcm9ncmVzcyBzYXZlZCBzdWNjZXNzZnVsbHkhIFlvdSBjYW4gc2FmZWx5IGxlYXZlIHRoaXMgcGFnZS4iKTsKIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJy9kYXNoYm9hcmQnOwogfQp9KTsKCi8vIEluc2lkZSB5b3VyIGhhbmRsZVN0YXJ0KCkgZnVuY3Rpb24sIHdyYXAgeW91ciBpbml0aWFsaXphdGlvbiBsaWtlIHRoaXM6CmZ1bmN0aW9uIGhhbmRsZVN0YXJ0KCkgewogY29uc3Qgc2F2ZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTQVZFX0tFWSk7CiBpZiAoc2F2ZWQpIHsKIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc2F2ZWQpOwogYXBwRGF0YSA9IHBhcnNlZC5zYXZlZERhdGE7CiBjdXJyZW50U2VnSWR4ID0gcGFyc2VkLnNhdmVkSW5kZXg7CiByZW5kZXJWaXNpb25TY3JlZW4oKTsKIH0gZWxzZSB7CiBhcHBEYXRhID0gW107CiBmb3IgKHZhciBpID0gMDsgaSA8IFNFR01FTlRTLmxlbmd0aDsgaSsrKSB7CiB2YXIgc2h1ZmZsZWQgPSBGT1JDRVMuc2xpY2UoKTsKIGZvciAodmFyIGsgPSBzaHVmZmxlZC5sZW5ndGggLSAxOyBrID4gMDsgay0tKSB7CiB2YXIgaiA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChrICsgMSkpOwogdmFyIHQgPSBzaHVmZmxlZFtrXTsgc2h1ZmZsZWRba10gPSBzaHVmZmxlZFtqXTsgc2h1ZmZsZWRbal0gPSB0OwogfQogYXBwRGF0YS5wdXNoKHsKIGlkOiBTRUdNRU5UU1tpXS5pZCwKIHRpdGxlOiBTRUdNRU5UU1tpXS50aXRsZSwKIHByb21wdDogU0VHTUVOVFNbaV0ucHJvbXB0LAogc2hvcnRfY29kZTogU0VHTUVOVFNbaV0uc2hvcnRfY29kZSwKIHZpc2lvbjogIiIsCiB0b3A6IFtdLCBtaWQ6IFtdLCBib3Q6IFtdLCBwb29sOiBzaHVmZmxlZAogfSk7CiB9CiBjdXJyZW50U2VnSWR4ID0gMDsKIHJlbmRlclZpc2lvblNjcmVlbigpOwp9IH0KCgp2YXIgcmVmbGVjdGlvblRpbWVyOwoKIGZ1bmN0aW9uIHJlbmRlclZpc2lvblNjcmVlbigpIHsKIHZhciBzZWcgPSBhcHBEYXRhW2N1cnJlbnRTZWdJZHhdOwogdmFyIGhkciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2aXNpb24taGVhZGVyJyk7CiBpZihoZHIpIGhkci50ZXh0Q29udGVudCA9ICJTZWdtZW50ICIgKyAoY3VycmVudFNlZ0lkeCArIDEpICsgIiBvZiA3OiAiICsgc2VnLnRpdGxlOwogdmFyIHR0bCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2aXNpb24tdGl0bGUnKTsKIGlmKHR0bCkgdHRsLnRleHRDb250ZW50ID0gc2VnLnRpdGxlOwoKIC8vIFVzZSBpbm5lckhUTUwgaW5zdGVhZCBvZiB0ZXh0Q29udGVudCBzbyBvdXIgVG9vbHRpcHMgcmVuZGVyIHByb3Blcmx5IQogdmFyIHByb21wdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2aXNpb24tcHJvbXB0Jyk7CiBpZihwcm9tcHQpIHByb21wdC5pbm5lckhUTUwgPSBzZWcucHJvbXB0OwoKIHZhciBwcm9nID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Zpc2lvbi1wcm9ncmVzcycpOwogaWYocHJvZykgcHJvZy5zdHlsZS53aWR0aCA9ICgoY3VycmVudFNlZ0lkeCAvIDcpICogMTAwKSArICIlIjsKCiBkaXNwbGF5QWN0aXZlUGFuZWwoJ3ZpZXctdmlzaW9uJyk7CgogLy8gMTUtU2Vjb25kIFNpbGVudCBUaW1lciAoTm8gdmlzaWJsZSBjb3VudGRvd24gbnVtYmVycykKIHZhciBidG5OZXh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi1uZXh0LXZpc2lvbicpOwogaWYoYnRuTmV4dCkgewogYnRuTmV4dC5kaXNhYmxlZCA9IHRydWU7CiBidG5OZXh0LnRleHRDb250ZW50ID0gIlByb2NlZWQgdG8gTWF0cml4IFNvcnRpbmciOwogaWYocmVmbGVjdGlvblRpbWVyKSBjbGVhclRpbWVvdXQocmVmbGVjdGlvblRpbWVyKTsKIHJlZmxlY3Rpb25UaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiBidG5OZXh0LmRpc2FibGVkID0gZmFsc2U7CiB9LCAxNTAwMCk7CiB9CiB9CiBmdW5jdGlvbiByZW5kZXJSYW5raW5nU2NyZWVuKCkgewogdmFyIHNlZyA9IGFwcERhdGFbY3VycmVudFNlZ0lkeF07CiB2YXIgaGRyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JhbmstaGVhZGVyJyk7CiBpZihoZHIpIGhkci50ZXh0Q29udGVudCA9ICJTZWdtZW50ICIgKyAoY3VycmVudFNlZ0lkeCArIDEpICsgIiBvZiA3OiAiICsgc2VnLnRpdGxlOwogdmFyIGluc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmFuay1pbnN0cnVjdGlvbnMtY29udGVudCcpOwogaWYoaW5zdCkgaW5zdC5pbm5lckhUTUwgPSAiPHAgc3R5bGU9J21hcmdpbi1ib3R0b206IDVweDsnPlJhbmsgZWFjaCBkcml2aW5nIGZvcmNlIGluIG9yZGVyIG9mIGltcG9ydGFuY2UgdG8geW91ciA8c3Ryb25nPiIgKyBzZWcudGl0bGUgKyAiPC9zdHJvbmc+IHBsYW4uPC9wPjxwIHN0eWxlPSdtYXJnaW4tYm90dG9tOiA1cHg7Jz48c3Ryb25nPlJhbmsgeW91ciBtb3N0IGltcG9ydGFudCBkcml2ZSAjMS4gUmFuayB5b3VyIGxlYXN0IGltcG9ydGFudCBkcml2ZSAjMTUuPC9zdHJvbmc+IEVhY2ggbnVtYmVyIG11c3QgYmUgdXNlZCBhbmQgbWF5IG9ubHkgYmUgdXNlZCBvbmNlLjwvcD48cCBzdHlsZT0nbWFyZ2luOiAwOyBmb250LXNpemU6IDAuODVyZW07IGNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTsnPjxlbT4oRHJhZyBpdGVtcyBpbnRvIGJ1Y2tldHMsIGRyb3AgdGhlbSBvbnRvIG90aGVyIGNhcmRzIHRvIHN3YXAsIG9yIHVzZSBkaXJlY3Rpb25hbCBhcnJvdyBjbGlja3MgdG8gbG9jayByYW5raW5ncy4pPC9lbT48L3A+IjsKCiB2YXIgcHJvZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyYW5rLXByb2dyZXNzJyk7CiBpZihwcm9nKSBwcm9nLnN0eWxlLndpZHRoID0gKCgoY3VycmVudFNlZ0lkeCArIDAuNSkgLyA3KSAqIDEwMCkgKyAiJSI7CgogcmVuZGVyQm94ZXMoKTsKIGRpc3BsYXlBY3RpdmVQYW5lbCgndmlldy1yYW5rJyk7CiB9CgogZnVuY3Rpb24gY2xlYXJCb3goYm94KSB7CiBpZihib3gpIHsgd2hpbGUgKGJveC5maXJzdENoaWxkKSB7IGJveC5yZW1vdmVDaGlsZChib3guZmlyc3RDaGlsZCk7IH0gfQogfQoKIGZ1bmN0aW9uIGF0dGFjaERyb3Bab25lcygpIHsKIHZhciBkcm9wWm9uZXMgPSBbJ2JveC1wb29sJywgJ2JveC10b3AnLCAnYm94LW1pZCcsICdib3gtYm90J107CiBkcm9wWm9uZXMuZm9yRWFjaChmdW5jdGlvbih6b25lSWQpIHsKIHZhciB6b25lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoem9uZUlkKTsKIGlmKHpvbmUgJiYgIXpvbmUuZGF0YXNldC5ib3VuZCkgewogem9uZS5kYXRhc2V0LmJvdW5kID0gInRydWUiOwogem9uZS5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIGZ1bmN0aW9uKGUpIHsgZS5wcmV2ZW50RGVmYXVsdCgpOyB0aGlzLmNsYXNzTGlzdC5hZGQoJ2RyYWctb3ZlcicpOyB9KTsKIHpvbmUuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgZnVuY3Rpb24oZSkgeyB0aGlzLmNsYXNzTGlzdC5yZW1vdmUoJ2RyYWctb3ZlcicpOyB9KTsKIHpvbmUuYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsIGZ1bmN0aW9uKGUpIHsKIGUucHJldmVudERlZmF1bHQoKTsKIHRoaXMuY2xhc3NMaXN0LnJlbW92ZSgnZHJhZy1vdmVyJyk7CiB2YXIgZm9yY2VJZCA9IGUuZGF0YVRyYW5zZmVyLmdldERhdGEoJ3RleHQvcGxhaW4nKTsKIHZhciBzb3VyY2VMb2MgPSBlLmRhdGFUcmFuc2Zlci5nZXREYXRhKCdzb3VyY2VMb2MnKTsKIHZhciB0YXJnZXRMb2MgPSB0aGlzLmdldEF0dHJpYnV0ZSgnZGF0YS10YXJnZXQnKTsKIGlmICghZm9yY2VJZCB8fCBzb3VyY2VMb2MgPT09IHRhcmdldExvYykgcmV0dXJuOwoKIHZhciBzZWcgPSBhcHBEYXRhW2N1cnJlbnRTZWdJZHhdOwogaWYgKHRhcmdldExvYyAhPT0gJ3Bvb2wnICYmIHNlZ1t0YXJnZXRMb2NdLmxlbmd0aCA+PSA1KSB7CiBhbGVydCgnQnVja2V0IHNlbGVjdGlvbiBjYXBhY2l0eSBsaW1pdGVkIHRvIDUgZWxlbWVudHMgbWF4aW11bS4nKTsKIHJldHVybjsKIH0KCiB2YXIgZm9yY2VPYmogPSBzZWdbc291cmNlTG9jXS5maW5kKGZ1bmN0aW9uKGYpIHsgcmV0dXJuIGYuaWQgPT09IGZvcmNlSWQ7IH0pOwogaWYoZm9yY2VPYmopIHsgbW92ZUl0ZW0oZm9yY2VPYmosIHNvdXJjZUxvYywgdGFyZ2V0TG9jKTsgfQogfSk7CiB9CiB9KTsKIH0KCiBmdW5jdGlvbiByZW5kZXJCb3hlcygpIHsKIHZhciBzZWcgPSBhcHBEYXRhW2N1cnJlbnRTZWdJZHhdOwoKIHZhciBib3hQb29sID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JveC1wb29sJyk7CiB2YXIgbGlzdFRvcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsaXN0LXRvcCcpOwogdmFyIGxpc3RNaWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGlzdC1taWQnKTsKIHZhciBsaXN0Qm90ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpc3QtYm90Jyk7CgogY2xlYXJCb3goYm94UG9vbCk7IGNsZWFyQm94KGxpc3RUb3ApOyBjbGVhckJveChsaXN0TWlkKTsgY2xlYXJCb3gobGlzdEJvdCk7CgogdmFyIHBjID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Bvb2wtY291bnQnKTsgaWYocGMpIHBjLnRleHRDb250ZW50ID0gc2VnLnBvb2wubGVuZ3RoOwogdmFyIGN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvdW50LXRvcCcpOyBpZihjdCkgY3QudGV4dENvbnRlbnQgPSBzZWcudG9wLmxlbmd0aDsKIHZhciBjbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb3VudC1taWQnKTsgaWYoY20pIGNtLnRleHRDb250ZW50ID0gc2VnLm1pZC5sZW5ndGg7CiB2YXIgY2IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY291bnQtYm90Jyk7IGlmKGNiKSBjYi50ZXh0Q29udGVudCA9IHNlZy5ib3QubGVuZ3RoOwoKIGZvcih2YXIgaSA9IDA7IGkgPCBzZWcucG9vbC5sZW5ndGg7IGkrKykgeyBpZihib3hQb29sKSBib3hQb29sLmFwcGVuZENoaWxkKGNyZWF0ZUNoaXAoc2VnLnBvb2xbaV0pKTsgfQogZm9yKHZhciBpID0gMDsgaSA8IHNlZy50b3AubGVuZ3RoOyBpKyspIHsgaWYobGlzdFRvcCkgbGlzdFRvcC5hcHBlbmRDaGlsZChjcmVhdGVSYW5rZWRDYXJkKHNlZy50b3BbaV0sICd0b3AnLCBpKSk7IH0KIGZvcih2YXIgaSA9IDA7IGkgPCBzZWcubWlkLmxlbmd0aDsgaSsrKSB7IGlmKGxpc3RNaWQpIGxpc3RNaWQuYXBwZW5kQ2hpbGQoY3JlYXRlUmFua2VkQ2FyZChzZWcubWlkW2ldLCAnbWlkJywgaSkpOyB9CiBmb3IodmFyIGkgPSAwOyBpIDwgc2VnLmJvdC5sZW5ndGg7IGkrKykgeyBpZihsaXN0Qm90KSBsaXN0Qm90LmFwcGVuZENoaWxkKGNyZWF0ZVJhbmtlZENhcmQoc2VnLmJvdFtpXSwgJ2JvdCcsIGkpKTsgfQoKIGF0dGFjaERyb3Bab25lcygpOwogdmFsaWRhdGVSYW5raW5nKCk7CiB9CgogZnVuY3Rpb24gY3JlYXRlQ2hpcChmb3JjZU9iaikgewogdmFyIGNoaXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKIGNoaXAuY2xhc3NOYW1lID0gJ2ZvcmNlLWNoaXAnOwogY2hpcC5kcmFnZ2FibGUgPSB0cnVlOwogY2hpcC5hZGRFdmVudExpc3RlbmVyKCdkcmFnc3RhcnQnLCBmdW5jdGlvbihlKSB7CiBlLmRhdGFUcmFuc2Zlci5zZXREYXRhKCd0ZXh0L3BsYWluJywgZm9yY2VPYmouaWQpOwogZS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgnc291cmNlTG9jJywgJ3Bvb2wnKTsKIGUuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQgPSAnbW92ZSc7CiB9KTsKCiB2YXIgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKIGxhYmVsLmNsYXNzTmFtZSA9ICdjaGlwLWxhYmVsJzsKIGxhYmVsLnRleHRDb250ZW50ID0gZm9yY2VPYmouaWQ7CgogdmFyIGFjdGlvbnMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKIGFjdGlvbnMuY2xhc3NOYW1lID0gJ2NoaXAtYWN0aW9ucyc7CgogdmFyIGJ0blRvcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOyBidG5Ub3AudHlwZSA9ICdidXR0b24nOyBidG5Ub3AuY2xhc3NOYW1lID0gJ2NoaXAtYnRuIGNoaXAtYnRuLXRvcCc7IGJ0blRvcC5pbm5lckhUTUwgPSAnJiM5NjUwOyc7CiBidG5Ub3Auc2V0QXR0cmlidXRlKCdkYXRhLWFjdGlvbicsICdtb3ZlLXRvcCcpOyBidG5Ub3Auc2V0QXR0cmlidXRlKCdkYXRhLWlkJywgZm9yY2VPYmouaWQpOwoKIHZhciBidG5NaWQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsgYnRuTWlkLnR5cGUgPSAnYnV0dG9uJzsgYnRuTWlkLmNsYXNzTmFtZSA9ICdjaGlwLWJ0biBjaGlwLWJ0bi1taWQnOyBidG5NaWQuaW5uZXJIVE1MID0gJyYjOTY0NDsnOwogYnRuTWlkLnNldEF0dHJpYnV0ZSgnZGF0YS1hY3Rpb24nLCAnbW92ZS1taWQnKTsgYnRuTWlkLnNldEF0dHJpYnV0ZSgnZGF0YS1pZCcsIGZvcmNlT2JqLmlkKTsKCiB2YXIgYnRuQm90ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7IGJ0bkJvdC50eXBlID0gJ2J1dHRvbic7IGJ0bkJvdC5jbGFzc05hbWUgPSAnY2hpcC1idG4gY2hpcC1idG4tYm90JzsgYnRuQm90LmlubmVySFRNTCA9ICcmIzk2NjA7JzsKIGJ0bkJvdC5zZXRBdHRyaWJ1dGUoJ2RhdGEtYWN0aW9uJywgJ21vdmUtYm90Jyk7IGJ0bkJvdC5zZXRBdHRyaWJ1dGUoJ2RhdGEtaWQnLCBmb3JjZU9iai5pZCk7CgogYWN0aW9ucy5hcHBlbmRDaGlsZChidG5Ub3ApOyBhY3Rpb25zLmFwcGVuZENoaWxkKGJ0bk1pZCk7IGFjdGlvbnMuYXBwZW5kQ2hpbGQoYnRuQm90KTsKIGNoaXAuYXBwZW5kQ2hpbGQobGFiZWwpOyBjaGlwLmFwcGVuZENoaWxkKGFjdGlvbnMpOwogcmV0dXJuIGNoaXA7CiB9CgogZnVuY3Rpb24gY3JlYXRlUmFua2VkQ2FyZChmb3JjZU9iaiwgYnVja2V0U3RyLCBpbmRleCkgewogdmFyIGNhcmQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKIGNhcmQuY2xhc3NOYW1lID0gJ3JhbmtlZC1pdGVtJzsKIGNhcmQuZHJhZ2dhYmxlID0gdHJ1ZTsKCiBjYXJkLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIGZ1bmN0aW9uKGUpIHsKIGUuZGF0YVRyYW5zZmVyLnNldERhdGEoJ3RleHQvcGxhaW4nLCBmb3JjZU9iai5pZCk7CiBlLmRhdGFUcmFuc2Zlci5zZXREYXRhKCdzb3VyY2VMb2MnLCBidWNrZXRTdHIpOwogZS5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZCA9ICdtb3ZlJzsKIH0pOwoKIGNhcmQuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCBmdW5jdGlvbihlKSB7CiBlLnByZXZlbnREZWZhdWx0KCk7CiB0aGlzLnN0eWxlLmJvcmRlclRvcCA9ICIycHggc29saWQgdmFyKC0tYnJhbmQtYmx1ZSkiOwogfSk7CgogY2FyZC5hZGRFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCBmdW5jdGlvbihlKSB7CiB0aGlzLnN0eWxlLmJvcmRlclRvcCA9ICIxcHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KSI7CiB9KTsKCiBjYXJkLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBmdW5jdGlvbihlKSB7CiBlLnByZXZlbnREZWZhdWx0KCk7CiBlLnN0b3BQcm9wYWdhdGlvbigpOwogdGhpcy5zdHlsZS5ib3JkZXJUb3AgPSAiMXB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCkiOwoKIHZhciBzb3VyY2VJZCA9IGUuZGF0YVRyYW5zZmVyLmdldERhdGEoJ3RleHQvcGxhaW4nKTsKIHZhciBzb3VyY2VMb2MgPSBlLmRhdGFUcmFuc2Zlci5nZXREYXRhKCdzb3VyY2VMb2MnKTsKIHZhciB0YXJnZXRJZCA9IGZvcmNlT2JqLmlkOwogdmFyIHRhcmdldExvYyA9IGJ1Y2tldFN0cjsKCiB2YXIgc2VnID0gYXBwRGF0YVtjdXJyZW50U2VnSWR4XTsKCiBpZiAoc291cmNlSWQgJiYgc291cmNlTG9jID09PSB0YXJnZXRMb2MgJiYgc291cmNlSWQgIT09IHRhcmdldElkKSB7CiB2YXIgbGlzdCA9IHNlZ1t0YXJnZXRMb2NdOwogdmFyIHNvdXJjZUlkeCA9IGxpc3QuZmluZEluZGV4KGZ1bmN0aW9uKGYpIHsgcmV0dXJuIGYuaWQgPT09IHNvdXJjZUlkOyB9KTsKIHZhciB0YXJnZXRJZHggPSBsaXN0LmZpbmRJbmRleChmdW5jdGlvbihmKSB7IHJldHVybiBmLmlkID09PSB0YXJnZXRJZDsgfSk7CgogdmFyIHRlbXAgPSBsaXN0W3NvdXJjZUlkeF07CiBsaXN0W3NvdXJjZUlkeF0gPSBsaXN0W3RhcmdldElkeF07CiBsaXN0W3RhcmdldElkeF0gPSB0ZW1wOwoKIHJlbmRlckJveGVzKCk7CiB9IGVsc2UgaWYgKHNvdXJjZUlkICYmIHNvdXJjZUxvYyAhPT0gdGFyZ2V0TG9jKSB7CiBpZiAodGFyZ2V0TG9jICE9PSAncG9vbCcgJiYgc2VnW3RhcmdldExvY10ubGVuZ3RoID49IDUpIHsKIGFsZXJ0KCdCdWNrZXQgc2VsZWN0aW9uIGNhcGFjaXR5IGxpbWl0ZWQgdG8gNSBlbGVtZW50cyBtYXhpbXVtLicpOwogcmV0dXJuOwogfQogdmFyIG9ialRvTW92ZSA9IHNlZ1tzb3VyY2VMb2NdLmZpbmQoZnVuY3Rpb24oZikgeyByZXR1cm4gZi5pZCA9PT0gc291cmNlSWQ7IH0pOwogaWYob2JqVG9Nb3ZlKSB7IG1vdmVJdGVtKG9ialRvTW92ZSwgc291cmNlTG9jLCB0YXJnZXRMb2MpOyB9CiB9CiB9KTsKCiB2YXIgb2Zmc2V0ID0gYnVja2V0U3RyID09PSAndG9wJyA/IDAgOiAoYnVja2V0U3RyID09PSAnbWlkJyA/IDUgOiAxMCk7CgogdmFyIHJhbmtOdW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKIHJhbmtOdW0uY2xhc3NOYW1lID0gJ3JhbmstbnVtJzsKIHJhbmtOdW0udGV4dENvbnRlbnQgPSAoaW5kZXggKyAxICsgb2Zmc2V0KTsKCiB2YXIgY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogY29udGVudC5jbGFzc05hbWUgPSAncmFuay1jb250ZW50JzsKCiB2YXIgdGl0bGVEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKIHRpdGxlRGl2LnRleHRDb250ZW50ID0gZm9yY2VPYmouaWQ7CiB2YXIgZGVzY0RpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogZGVzY0Rpdi50ZXh0Q29udGVudCA9IGZvcmNlT2JqLmRlc2Muc3BsaXQoJ1snKVswXTsKIGRlc2NEaXYuc3R5bGUuZm9udFNpemUgPSAnMC43NXJlbSc7IGRlc2NEaXYuc3R5bGUuY29sb3IgPSAndmFyKC0tdGV4dC1tdXRlZCknOyBkZXNjRGl2LnN0eWxlLmZvbnRXZWlnaHQgPSAnbm9ybWFsJzsKCiBjb250ZW50LmFwcGVuZENoaWxkKHRpdGxlRGl2KTsgY29udGVudC5hcHBlbmRDaGlsZChkZXNjRGl2KTsKCiB2YXIgY29udHJvbHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKIGNvbnRyb2xzLmNsYXNzTmFtZSA9ICdyYW5rLWNvbnRyb2xzJzsKCiB2YXIgYnRuVXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsgYnRuVXAudHlwZSA9ICdidXR0b24nOyBidG5VcC5jbGFzc05hbWUgPSAnYXJyb3ctYnRuJzsgYnRuVXAuaW5uZXJIVE1MID0gJyYjOTY1MDsnOwogYnRuVXAuc2V0QXR0cmlidXRlKCdkYXRhLWFjdGlvbicsICdvcmRlci11cCcpOyBidG5VcC5zZXRBdHRyaWJ1dGUoJ2RhdGEtYnVja2V0JywgYnVja2V0U3RyKTsgYnRuVXAuc2V0QXR0cmlidXRlKCdkYXRhLWluZGV4JywgaW5kZXgpOwoKIHZhciBidG5Eb3duID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7IGJ0bkRvd24udHlwZSA9ICdidXR0b24nOyBidG5Eb3duLmNsYXNzTmFtZSA9ICdhcnJvdy1idG4nOyBidG5Eb3duLmlubmVySFRNTCA9ICcmIzk2NjA7JzsKIGJ0bkRvd24uc2V0QXR0cmlidXRlKCdkYXRhLWFjdGlvbicsICdvcmRlci1kb3duJyk7IGJ0bkRvd24uc2V0QXR0cmlidXRlKCdkYXRhLWJ1Y2tldCcsIGJ1Y2tldFN0cik7IGJ0bkRvd24uc2V0QXR0cmlidXRlKCdkYXRhLWluZGV4JywgaW5kZXgpOwoKIGNvbnRyb2xzLmFwcGVuZENoaWxkKGJ0blVwKTsgY29udHJvbHMuYXBwZW5kQ2hpbGQoYnRuRG93bik7CgogdmFyIGJ0blJlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOyBidG5SZW0udHlwZSA9ICdidXR0b24nOyBidG5SZW0uY2xhc3NOYW1lID0gJ3JlbW92ZS1idG4nOyBidG5SZW0uaW5uZXJIVE1MID0gJyYjMTAwMDU7JzsKIGJ0blJlbS5zZXRBdHRyaWJ1dGUoJ2RhdGEtYWN0aW9uJywgJ21vdmUtcG9vbCcpOyBidG5SZW0uc2V0QXR0cmlidXRlKCdkYXRhLWlkJywgZm9yY2VPYmouaWQpOyBidG5SZW0uc2V0QXR0cmlidXRlKCdkYXRhLWJ1Y2tldCcsIGJ1Y2tldFN0cik7CgogY2FyZC5hcHBlbmRDaGlsZChyYW5rTnVtKTsgY2FyZC5hcHBlbmRDaGlsZChjb250ZW50KTsgY2FyZC5hcHBlbmRDaGlsZChjb250cm9scyk7IGNhcmQuYXBwZW5kQ2hpbGQoYnRuUmVtKTsKIHJldHVybiBjYXJkOwogfQoKIGZ1bmN0aW9uIG1vdmVJdGVtKGZvcmNlT2JqLCBmcm9tU3RyLCB0b1N0cikgewogdmFyIHNlZyA9IGFwcERhdGFbY3VycmVudFNlZ0lkeF07CiB2YXIgaW5kZXggPSBzZWdbZnJvbVN0cl0uZmluZEluZGV4KGZ1bmN0aW9uKGYpIHsgcmV0dXJuIGYuaWQgPT09IGZvcmNlT2JqLmlkOyB9KTsKIGlmIChpbmRleCA+IC0xKSB7CiBzZWdbZnJvbVN0cl0uc3BsaWNlKGluZGV4LCAxKTsKIHNlZ1t0b1N0cl0ucHVzaChmb3JjZU9iaik7CiB9CiByZW5kZXJCb3hlcygpOyB2YWxpZGF0ZVN0ZXAoKTsKIH0KCiBmdW5jdGlvbiByZW9yZGVySXRlbShidWNrZXQsIGluZGV4LCBkaXJlY3Rpb24pIHsKIHZhciBsaXN0ID0gYXBwRGF0YVtjdXJyZW50U2VnSWR4XVtidWNrZXRdOwogaWYgKGRpcmVjdGlvbiA9PT0gJ3VwJyAmJiBpbmRleCA+IDApIHsKIHZhciB0ZW1wID0gbGlzdFtpbmRleF07IGxpc3RbaW5kZXhdID0gbGlzdFtpbmRleCAtIDFdOyBsaXN0W2luZGV4IC0gMV0gPSB0ZW1wOwogfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdkb3duJyAmJiBpbmRleCA8IGxpc3QubGVuZ3RoIC0gMSkgewogdmFyIHRlbXAgPSBsaXN0W2luZGV4XTsgbGlzdFtpbmRleF0gPSBsaXN0W2luZGV4ICsgMV07IGxpc3RbaW5kZXggKyAxXSA9IHRlbXA7CiB9CiByZW5kZXJCb3hlcygpOwogfQoKIGZ1bmN0aW9uIHZhbGlkYXRlUmFua2luZygpIHsKIHZhciBzZWcgPSBhcHBEYXRhW2N1cnJlbnRTZWdJZHhdOwogdmFyIGlzQmFsYW5jZWQgPSBzZWcudG9wLmxlbmd0aCA9PT0gNSAmJiBzZWcubWlkLmxlbmd0aCA9PT0gNSAmJiBzZWcuYm90Lmxlbmd0aCA9PT0gNTsKCiB2YXIgYnRuTmV4dFJuayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG4tbmV4dC1yYW5rJyk7CiBpZihidG5OZXh0Um5rKSB7CiBpZiAoaXNCYWxhbmNlZCkgewogYnRuTmV4dFJuay5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7CiBpZiAoY3VycmVudFNlZ0lkeCA9PT0gNikgeyBidG5OZXh0Um5rLnRleHRDb250ZW50ID0gIlN1Ym1pdCAmIEdlbmVyYXRlIEFyY2hpdGVjdHVyZSI7IH0KIGVsc2UgeyBidG5OZXh0Um5rLnRleHRDb250ZW50ID0gIlNhdmUgJiBOZXh0IFNlZ21lbnQiOyB9CiB9IGVsc2UgewogYnRuTmV4dFJuay5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJ3RydWUnKTsKIGJ0bk5leHRSbmsudGV4dENvbnRlbnQgPSAiUmFuayBleGFjdGx5IDUgaXRlbXMgcGVyIGJ1Y2tldCB0byBjb250aW51ZSI7CiB9CiB9CiB9CgogZnVuY3Rpb24gaGFuZGxlTmV4dFJhbmsoKSB7CiBpZihjdXJyZW50U2VnSWR4IDwgNikgewogY3VycmVudFNlZ0lkeCsrOyByZW5kZXJWaXNpb25TY3JlZW4oKTsKIH0gZWxzZSB7CiBkaXNwbGF5QWN0aXZlUGFuZWwoJ3ZpZXctbG9hZGluZycpOwogc2V0VGltZW91dChjYWxjdWxhdGVBbmRTdWJtaXRSZXN1bHRzLCAyNTAwKTsKIH0KIH0KCiAvLyAtLS0gU0VDVVJFIERJU1BBVENIIFBJUEVMSU5FIElOVEVHUkFUSU9OIFRPIFRIRSBXT1JEUFJFU1MgUkVTVCBBUEkgLS0tCiBmdW5jdGlvbiBjYWxjdWxhdGVBbmRTdWJtaXRSZXN1bHRzKCkgewogdmFyIHNjb3JlcyA9IHt9OwogZm9yKHZhciBpID0gMDsgaSA8IEZPUkNFUy5sZW5ndGg7IGkrKykgeyBzY29yZXNbRk9SQ0VTW2ldLmlkXSA9IDA7IH0KCiBmb3IodmFyIGkgPSAwOyBpIDwgYXBwRGF0YS5sZW5ndGg7IGkrKykgewogdmFyIHNlZyA9IGFwcERhdGFbaV07CiBmb3IodmFyIHQgPSAwOyB0IDwgc2VnLnRvcC5sZW5ndGg7IHQrKykgeyBzY29yZXNbc2VnLnRvcFt0XS5pZF0gKz0gKDE1IC0gdCk7IH0KIGZvcih2YXIgbSA9IDA7IG0gPCBzZWcubWlkLmxlbmd0aDsgbSsrKSB7IHNjb3Jlc1tzZWcubWlkW21dLmlkXSArPSAoMTAgLSBtKTsgfQogZm9yKHZhciBiID0gMDsgYiA8IHNlZy5ib3QubGVuZ3RoOyBiKyspIHsgc2NvcmVzW3NlZy5ib3RbYl0uaWRdICs9ICg1IC0gYik7IH0KIH0KCiB2YXIgYXBpUGF5bG9hZCA9IHsKIGFzc2Vzc21lbnRfaWQ6ICJERi0iICsgRGF0ZS5ub3coKSArICItIiArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDApLAogZm9yY2VzOiBbXQogfTsKCiB2YXIgc29ydGVkID0gT2JqZWN0LmtleXMoc2NvcmVzKS5tYXAoZnVuY3Rpb24oaykgeyByZXR1cm4geyBuYW1lOiBrLCBzY29yZTogc2NvcmVzW2tdIH07IH0pLnNvcnQoZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYi5zY29yZSAtIGEuc2NvcmU7IH0pOwoKIGZvciAodmFyIGYgPSAwOyBmIDwgc29ydGVkLmxlbmd0aDsgZisrKSB7CiB2YXIgZm9yY2VJZCA9IHNvcnRlZFtmXS5uYW1lOwogdmFyIGZvcmNlVG90YWwgPSBzb3J0ZWRbZl0uc2NvcmU7CgogdmFyIGZvcmNlRW50cnkgPSB7CiBmb3JjZV90eXBlOiAiRCIsCiBmb3JjZV90ZXh0OiBmb3JjZUlkLAogdG90YWxfcmF0aW5nOiBmb3JjZVRvdGFsLAogaW5mbHVlbmNlX3N0cmVuZ3RoOiAoZm9yY2VUb3RhbCA+PSA3MCkgPyAiSGlnaCIgOiAoKGZvcmNlVG90YWwgPj0gNDApID8gIk1lZGl1bSIgOiAiTG93IiksCiBzMV9yYXRpbmc6IDAsIHMyX3JhdGluZzogMCwgczNfcmF0aW5nOiAwLCBzNF9yYXRpbmc6IDAsIHM1X3JhdGluZzogMCwgczZfcmF0aW5nOiAwLCBzN19yYXRpbmc6IDAKIH07CgogZm9yKHZhciBzID0gMDsgcyA8IGFwcERhdGEubGVuZ3RoOyBzKyspIHsKIHZhciBzZWcgPSBhcHBEYXRhW3NdOwogdmFyIHNlZ0tleU5hbWUgPSAicyIgKyAocyArIDEpICsgIl9yYXRpbmciOwoKIHZhciB0b3BJZHggPSBzZWcudG9wLmZpbmRJbmRleChmdW5jdGlvbih4KSB7IHJldHVybiB4LmlkID09PSBmb3JjZUlkOyB9KTsKIGlmICh0b3BJZHggPiAtMSkgeyBmb3JjZUVudHJ5W3NlZ0tleU5hbWVdID0gKDE1IC0gdG9wSWR4KTsgfQogZWxzZSB7CiB2YXIgbWlkSWR4ID0gc2VnLm1pZC5maW5kSW5kZXgoZnVuY3Rpb24oeCkgeyByZXR1cm4geC5pZCA9PT0gZm9yY2VJZDsgfSk7CiBpZiAobWlkSWR4ID4gLTEpIHsgZm9yY2VFbnRyeVtzZWdLZXlOYW1lXSA9ICgxMCAtIG1pZElkeCk7IH0KIGVsc2UgewogdmFyIGJvdElkeCA9IHNlZy5ib3QuZmluZEluZGV4KGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHguaWQgPT09IGZvcmNlSWQ7IH0pOwogaWYgKGJvdElkeCA+IC0xKSB7IGZvcmNlRW50cnlbc2VnS2V5TmFtZV0gPSAoNSAtIGJvdElkeCk7IH0KIH0KIH0KIH0KIGFwaVBheWxvYWQuZm9yY2VzLnB1c2goZm9yY2VFbnRyeSk7CmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFNBVkVfS0VZKTsKIH0KCiAvLyBVc2UgdGhlIGN1c3RvbSBub25jZSB3ZSBleHBvc2VkIGluIHRoZSBXUCBoZWFkCnZhciByZXN0Tm9uY2UgPSAodHlwZW9mIHdpbmRvdy5hN21xX3Jlc3Rfbm9uY2UgIT09ICd1bmRlZmluZWQnKSA/IHdpbmRvdy5hN21xX3Jlc3Rfbm9uY2UgOiAnJzsKdmFyIHJlc3RFbmRwb2ludCA9ICcvd3AtanNvbi9hN21xL3YxL3N1Ym1pdC9mb3JjZXMnOwoKaWYgKCFyZXN0Tm9uY2UpIHsKIGNvbnNvbGUuZXJyb3IoIk1pc3NpbmcgUkVTVCBub25jZS4gVXNlciBtYXkgbm90IGJlIGxvZ2dlZCBpbiBvciB3cF9oZWFkKCkgZmFpbGVkIHRvIGZpcmUuIik7Cn0KCiBmZXRjaChyZXN0RW5kcG9pbnQsIHsKIG1ldGhvZDogJ1BPU1QnLAogaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnWC1XUC1Ob25jZSc6IHJlc3ROb25jZSB9LAogYm9keTogSlNPTi5zdHJpbmdpZnkoYXBpUGF5bG9hZCkKIH0pCiAudGhlbihmdW5jdGlvbihyZXMpIHsgcmV0dXJuIHJlcy5qc29uKCk7IH0pCiAudGhlbihmdW5jdGlvbihkYXRhKSB7CiBjb25zb2xlLmxvZygnQTdNUSBBUEkgU3luYyBDb25maXJtYXRpb24gTWF0cml4IExvZyBPdXRwdXQ6JywgZGF0YSk7CiByZW5kZXJGaW5hbFJlc3VsdHNTY3JlZW4oc29ydGVkKTsKIH0pCiAuY2F0Y2goZnVuY3Rpb24oZXJyKSB7CiBjb25zb2xlLndhcm4oJ0FQSSBFbmRwb2ludCBzdHJ1Y3R1cmFsIHRyYW5zZmVyIGJ5cGFzc2VkIG9mZmxpbmUuIFN5bmNpbmcgbG9jYWxpemVkIHZpZXdzIGRpcmVjdGx5OicsIGVycik7CiByZW5kZXJGaW5hbFJlc3VsdHNTY3JlZW4oc29ydGVkKTsKIH0pOwogfQoKIC8vIC0tLSBNT0RVTEUgTEFZRVIgNDogQVJUSUZBQ1QgR1JBUEggUkVOREVSIElOVEVSRkFDRSAtLS0KIGZ1bmN0aW9uIHJlbmRlckZpbmFsUmVzdWx0c1NjcmVlbihzb3J0ZWQpIHsKIHZhciBsaXN0RG9tID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpc3QtZG9taW5hbnQnKTsKIHZhciBsaXN0U2FjID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpc3Qtc2FjcmlmaWNlZCcpOwogY2xlYXJCb3gobGlzdERvbSk7IGNsZWFyQm94KGxpc3RTYWMpOwoKIGZvcih2YXIgaSA9IDA7IGkgPCA1OyBpKyspIHsKIHZhciBwY3QgPSBNYXRoLnJvdW5kKChzb3J0ZWRbaV0uc2NvcmUgLyAxMDUpICogMTAwKTsKIHZhciBsaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7CiBsaS5pbm5lckhUTUwgPSAiPHNwYW4+4pyFICIgKyAoaSsxKSArICIuICIgKyBzb3J0ZWRbaV0ubmFtZSArICI8L3NwYW4+PGRpdj48c3BhbiBjbGFzcz0nc3RhdC1waWxsIGJnLWJsdWUtNTAwIHRleHQtd2hpdGUgZm9udC1ibGFjayc+IiArIHBjdCArICIlIEluZmx1ZW5jZTwvc3Bhbj48L2Rpdj4iOwogbGlzdERvbS5hcHBlbmRDaGlsZChsaSk7CiB9CgogdmFyIGJvdEZpdmUgPSBzb3J0ZWQuc2xpY2UoLTUpLnJldmVyc2UoKTsKIGZvcih2YXIgaSA9IDA7IGkgPCA1OyBpKyspIHsKIHZhciBwY3QgPSBNYXRoLnJvdW5kKChib3RGaXZlW2ldLnNjb3JlIC8gMTA1KSAqIDEwMCk7CiB2YXIgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpOyBsaS5zdHlsZS5vcGFjaXR5ID0gIjAuOSI7CiBsaS5pbm5lckhUTUwgPSAiPHNwYW4+4p2MICIgKyAoMTUtaSkgKyAiLiAiICsgYm90Rml2ZVtpXS5uYW1lICsgIjwvc3Bhbj48ZGl2PjxzcGFuIGNsYXNzPSdzdGF0LXBpbGwgYmctcmVkLTUwMCB0ZXh0LXdoaXRlIGZvbnQtYmxhY2snPiIgKyBwY3QgKyAiJSBJbmZsdWVuY2U8L3NwYW4+PC9kaXY+IjsKIGxpc3RTYWMuYXBwZW5kQ2hpbGQobGkpOwogfQoKIHZhciBzZWdDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VnbWVudC1icmVha2Rvd24tY29udGFpbmVyJyk7CiBjbGVhckJveChzZWdDb250YWluZXIpOwogYXBwRGF0YS5mb3JFYWNoKGZ1bmN0aW9uKHNlZykgewogdmFyIGNhcmQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKIGNhcmQuc3R5bGUuYmFja2dyb3VuZCA9ICJ2YXIoLS1pbnB1dC1iZykiOyBjYXJkLnN0eWxlLmJvcmRlciA9ICIxcHggc29saWQgdmFyKC0tYm9yZGVyLWxpZ2h0KSI7IGNhcmQuc3R5bGUuYm9yZGVyUmFkaXVzID0gIjE0cHgiOyBjYXJkLnN0eWxlLnBhZGRpbmcgPSAiMjBweCI7CgogdmFyIHRpdGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiB0aXRsZS5zdHlsZS5mb250V2VpZ2h0ID0gIjkwMCI7IHRpdGxlLnN0eWxlLmNvbG9yID0gInZhcigtLWJyYW5kLWJsdWUpIjsgdGl0bGUuc3R5bGUudGV4dFRyYW5zZm9ybSA9ICJ1cHBlcmNhc2UiOyB0aXRsZS5zdHlsZS5ib3JkZXJCb3R0b20gPSAiMnB4IHNvbGlkIHZhcigtLWJvcmRlci1saWdodCkiOyB0aXRsZS5zdHlsZS5wYWRkaW5nQm90dG9tID0gIjEwcHgiOyB0aXRsZS5zdHlsZS5tYXJnaW5Cb3R0b20gPSAiMTVweCI7IHRpdGxlLnN0eWxlLmZvbnRTaXplID0gIjAuOTVyZW0iOwogdGl0bGUudGV4dENvbnRlbnQgPSBzZWcudGl0bGUgKyAiIFNlZ21lbnQgQnJlYWtkb3duIjsKCiB2YXIgZ3JpZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogZ3JpZC5zdHlsZS5kaXNwbGF5ID0gImdyaWQiOyBncmlkLnN0eWxlLmdyaWRUZW1wbGF0ZUNvbHVtbnMgPSAiMWZyIDFmciI7IGdyaWQuc3R5bGUuZ2FwID0gIjEwcHgiOwoKIHZhciB0b3AzVGV4dCA9ICIxLiAiICsgc2VnLnRvcFswXS5pZCArICIsIDIuICIgKyBzZWcudG9wWzFdLmlkICsgIiwgMy4gIiArIHNlZy50b3BbMl0uaWQ7CiB2YXIgYm90M1RleHQgPSAiMTUuICIgKyBzZWcuYm90WzRdLmlkICsgIiwgMTQuICIgKyBzZWcuYm90WzNdLmlkICsgIiwgMTMuICIgKyBzZWcuYm90WzJdLmlkOwoKIHZhciB0b3BDb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKIHZhciB0b3BIZWFkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7IHRvcEhlYWQuc3R5bGUuZm9udFNpemUgPSAiMC43NXJlbSI7IHRvcEhlYWQuc3R5bGUuZm9udFdlaWdodCA9ICI5MDAiOyB0b3BIZWFkLnN0eWxlLnRleHRUcmFuc2Zvcm0gPSAidXBwZXJjYXNlIjsgdG9wSGVhZC5zdHlsZS5jb2xvciA9ICJ2YXIoLS10b3AtdGV4dCkiOyB0b3BIZWFkLnN0eWxlLm1hcmdpbkJvdHRvbSA9ICI0cHgiOyB0b3BIZWFkLnRleHRDb250ZW50ID0gIlByaW1hcnkgRHJpdmVycyI7CiB2YXIgdG9wTGlzdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyB0b3BMaXN0LnN0eWxlLmZvbnRTaXplID0gIjAuOXJlbSI7IHRvcExpc3Quc3R5bGUuZm9udFdlaWdodCA9ICI4MDAiOyB0b3BMaXN0LnN0eWxlLmNvbG9yID0gInZhcigtLXRleHQtZGFyaykiOyB0b3BMaXN0LnRleHRDb250ZW50ID0gdG9wM1RleHQ7CiB0b3BDb2wuYXBwZW5kQ2hpbGQodG9wSGVhZCk7IHRvcENvbC5hcHBlbmRDaGlsZCh0b3BMaXN0KTsKCiB2YXIgYm90Q29sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiB2YXIgYm90SGVhZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyBib3RIZWFkLnN0eWxlLmZvbnRTaXplID0gIjAuNzVyZW0iOyBib3RIZWFkLnN0eWxlLmZvbnRXZWlnaHQgPSAiOTAwIjsgYm90SGVhZC5zdHlsZS50ZXh0VHJhbnNmb3JtID0gInVwcGVyY2FzZSI7IGJvdEhlYWQuc3R5bGUuY29sb3IgPSAidmFyKC0tYm90LXRleHQpIjsgYm90SGVhZC5zdHlsZS5tYXJnaW5Cb3R0b20gPSAiNHB4IjsgYm90SGVhZC50ZXh0Q29udGVudCA9ICJTYWNyaWZpY2VkIEZhY3RvcnMiOwogdmFyIGJvdExpc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgYm90TGlzdC5zdHlsZS5mb250U2l6ZSA9ICIwLjlyZW0iOyBib3RMaXN0LnN0eWxlLmZvbnRXZWlnaHQgPSAiODAwIjsgYm90TGlzdC5zdHlsZS5jb2xvciA9ICJ2YXIoLS10ZXh0LWRhcmspIjsgYm90TGlzdC50ZXh0Q29udGVudCA9IGJvdDNUZXh0OwogYm90Q29sLmFwcGVuZENoaWxkKGJvdEhlYWQpOyBib3RDb2wuYXBwZW5kQ2hpbGQoYm90TGlzdCk7CgogZ3JpZC5hcHBlbmRDaGlsZCh0b3BDb2wpOyBncmlkLmFwcGVuZENoaWxkKGJvdENvbCk7CiBjYXJkLmFwcGVuZENoaWxkKHRpdGxlKTsgY2FyZC5hcHBlbmRDaGlsZChncmlkKTsKIHNlZ0NvbnRhaW5lci5hcHBlbmRDaGlsZChjYXJkKTsKIH0pOwoKIHZhciBtYXRyaXhUYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXRyaXgtdGFibGUnKTsKIGNsZWFyQm94KG1hdHJpeFRhYmxlKTsKCiB2YXIgdGhlYWQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0aGVhZCcpOwogdmFyIHRySGVhZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CiB2YXIgdGhCbGFuayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RoJyk7IHRoQmxhbmsudGV4dENvbnRlbnQgPSAiRHJpdmluZyBGb3JjZSI7IHRoQmxhbmsuc3R5bGUudGV4dEFsaWduID0gImxlZnQiOyB0ckhlYWQuYXBwZW5kQ2hpbGQodGhCbGFuayk7CiBTRUdNRU5UUy5mb3JFYWNoKGZ1bmN0aW9uKHMpIHsKIHZhciB0aCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RoJyk7IHRoLnRleHRDb250ZW50ID0gcy5pZC5zdWJzdHJpbmcoMCwzKTsgdHJIZWFkLmFwcGVuZENoaWxkKHRoKTsKIH0pOwogdmFyIHRoUGN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGgnKTsgdGhQY3QudGV4dENvbnRlbnQgPSAiQ3VtdWxhdGl2ZSBJbmZsdWVuY2UiOyB0ckhlYWQuYXBwZW5kQ2hpbGQodGhQY3QpOwogdGhlYWQuYXBwZW5kQ2hpbGQodHJIZWFkKTsKIG1hdHJpeFRhYmxlLmFwcGVuZENoaWxkKHRoZWFkKTsKCiB2YXIgdGJvZHkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0Ym9keScpOwogc29ydGVkLmZvckVhY2goZnVuY3Rpb24oaXRlbSkgewogdmFyIGZvcmNlSWQgPSBpdGVtLm5hbWU7CiB2YXIgcGN0SW50ID0gTWF0aC5yb3VuZCgoaXRlbS5zY29yZSAvIDEwNSkgKiAxMDApOwogdmFyIHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCiB2YXIgdGROYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKIHRkTmFtZS5jbGFzc05hbWUgPSAiZm9yY2UtbmFtZSI7CiB0ZE5hbWUudGV4dENvbnRlbnQgPSBmb3JjZUlkOwogdHIuYXBwZW5kQ2hpbGQodGROYW1lKTsKCiBhcHBEYXRhLmZvckVhY2goZnVuY3Rpb24oc2VnKSB7CiB2YXIgZXhhY3RSYW5rID0gMDsKIHZhciB0b3BJZHggPSBzZWcudG9wLmZpbmRJbmRleChmdW5jdGlvbih4KSB7IHJldHVybiB4LmlkID09PSBmb3JjZUlkOyB9KTsKIGlmICh0b3BJZHggPiAtMSkgZXhhY3RSYW5rID0gdG9wSWR4ICsgMTsKIGVsc2UgewogdmFyIG1pZElkeCA9IHNlZy5taWQuZmluZEluZGV4KGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHguaWQgPT09IGZvcmNlSWQ7IH0pOwogaWYgKG1pZElkeCA+IC0xKSBleGFjdFJhbmsgPSBtaWRJZHggKyA2OwogZWxzZSB7CiB2YXIgYm90SWR4ID0gc2VnLmJvdC5maW5kSW5kZXgoZnVuY3Rpb24oeCkgeyByZXR1cm4geC5pZCA9PT0gZm9yY2VJZDsgfSk7CiBpZiAoYm90SWR4ID4gLTEpIGV4YWN0UmFuayA9IGJvdElkeCArIDExOwogfQogfQoKIHZhciB0ZFJhbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwogdmFyIGJhZGdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogYmFkZ2UuY2xhc3NOYW1lID0gInJhbmstYmFkZ2UgIiArIChleGFjdFJhbmsgPD0gNSA/ICJyYi10b3AiIDogKGV4YWN0UmFuayA8PSAxMCA/ICJyYi1taWQiIDogInJiLWJvdCIpKTsKIGJhZGdlLnRleHRDb250ZW50ID0gZXhhY3RSYW5rOwogdGRSYW5rLmFwcGVuZENoaWxkKGJhZGdlKTsKIHRyLmFwcGVuZENoaWxkKHRkUmFuayk7CiB9KTsKCiB2YXIgdGRQY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwogdmFyIHBjdEJhZGdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogcGN0QmFkZ2UuY2xhc3NOYW1lID0gInJiLXBjdCI7CiBwY3RCYWRnZS50ZXh0Q29udGVudCA9IHBjdEludCArICIlIEluZmx1ZW5jZSI7CiB0ZFBjdC5hcHBlbmRDaGlsZChwY3RCYWRnZSk7CiB0ci5hcHBlbmRDaGlsZCh0ZFBjdCk7CgogdGJvZHkuYXBwZW5kQ2hpbGQodHIpOwogfSk7CiBtYXRyaXhUYWJsZS5hcHBlbmRDaGlsZCh0Ym9keSk7CgogZGlzcGxheUFjdGl2ZVBhbmVsKCd2aWV3LXJlc3VsdHMnKTsKIH0KCiAvLyBFdmVudCBEZWxlZ2F0aW9uIE1hc3RlciBMaXN0ZW5lcgogZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKIHZhciB0YXJnZXRCdG4gPSBlLnRhcmdldC5jbG9zZXN0KCdidXR0b24nKTsKIGlmICghdGFyZ2V0QnRuKSByZXR1cm47CgogaWYgKHRhcmdldEJ0bi5pZCA9PT0gJ3RoZW1lLWJ0bicpIHsKIHRvZ2dsZUE3TVFUaGVtZSgpOwogfSBlbHNlIGlmICh0YXJnZXRCdG4uaWQgPT09ICdidG4tc3RhcnQnKSB7CiBoYW5kbGVTdGFydCgpOwogfSBlbHNlIGlmICh0YXJnZXRCdG4uaWQgPT09ICdidG4tbmV4dC12aXNpb24nKSB7CiBpZiAoIXRhcmdldEJ0bi5kaXNhYmxlZCkgcmVuZGVyUmFua2luZ1NjcmVlbigpOwogfSBlbHNlIGlmICh0YXJnZXRCdG4uaWQgPT09ICdidG4tbmV4dC1yYW5rJykgewogaWYgKCF0YXJnZXRCdG4uZGlzYWJsZWQpIGhhbmRsZU5leHRSYW5rKCk7CiB9IGVsc2UgaWYgKHRhcmdldEJ0bi5pZCA9PT0gJ2J0bi1wcmludCcpIHsKIHdpbmRvdy5wcmludCgpOwogfSBlbHNlIGlmICh0YXJnZXRCdG4uaWQgPT09ICdidG4tcmVzdGFydCcpIHsKIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsKIH0gZWxzZSBpZiAodGFyZ2V0QnRuLmNsYXNzTGlzdC5jb250YWlucygnY2hpcC1idG4tdG9wJykpIHsKIHZhciBpZCA9IHRhcmdldEJ0bi5nZXRBdHRyaWJ1dGUoJ2RhdGEtaWQnKTsKIHZhciBmb3JjZU9iaiA9IGFwcERhdGFbY3VycmVudFNlZ0lkeF0ucG9vbC5maW5kKGZ1bmN0aW9uKGYpeyByZXR1cm4gZi5pZCA9PT0gaWQ7IH0pOwogaWYoYXBwRGF0YVtjdXJyZW50U2VnSWR4XS50b3AubGVuZ3RoIDwgNSkgbW92ZUl0ZW0oZm9yY2VPYmosICdwb29sJywgJ3RvcCcpOyBlbHNlIGFsZXJ0KCdQcmltYXJ5IERyaXZlcnMgYnVja2V0IGxpbWl0IHJlYWNoZWQuJyk7CiB9IGVsc2UgaWYgKHRhcmdldEJ0bi5jbGFzc0xpc3QuY29udGFpbnMoJ2NoaXAtYnRuLW1pZCcpKSB7CiB2YXIgaWQgPSB0YXJnZXRCdG4uZ2V0QXR0cmlidXRlKCdkYXRhLWlkJyk7CiB2YXIgZm9yY2VPYmogPSBhcHBEYXRhW2N1cnJlbnRTZWdJZHhdLnBvb2wuZmluZChmdW5jdGlvbihmKXsgcmV0dXJuIGYuaWQgPT09IGlkOyB9KTsKIGlmKGFwcERhdGFbY3VycmVudFNlZ0lkeF0ubWlkLmxlbmd0aCA8IDUpIG1vdmVJdGVtKGZvcmNlT2JqLCAncG9vbCcsICdtaWQnKTsgZWxzZSBhbGVydCgnTmV1dHJhbCBidWNrZXQgbGltaXQgcmVhY2hlZC4nKTsKIH0gZWxzZSBpZiAodGFyZ2V0QnRuLmNsYXNzTGlzdC5jb250YWlucygnY2hpcC1idG4tYm90JykpIHsKIHZhciBpZCA9IHRhcmdldEJ0bi5nZXRBdHRyaWJ1dGUoJ2RhdGEtaWQnKTsKIHZhciBmb3JjZU9iaiA9IGFwcERhdGFbY3VycmVudFNlZ0lkeF0ucG9vbC5maW5kKGZ1bmN0aW9uKGYpeyByZXR1cm4gZi5pZCA9PT0gaWQ7IH0pOwogaWYoYXBwRGF0YVtjdXJyZW50U2VnSWR4XS5ib3QubGVuZ3RoIDwgNSkgbW92ZUl0ZW0oZm9yY2VPYmosICdwb29sJywgJ2JvdCcpOyBlbHNlIGFsZXJ0KCdCb3R0b20gNSBTYWNyaWZpY2VzIGJ1Y2tldCBsaW1pdCByZWFjaGVkLicpOwogfSBlbHNlIGlmICh0YXJnZXRCdG4uY2xhc3NMaXN0LmNvbnRhaW5zKCdhcnJvdy1idG4nKSkgewogdmFyIGFjdGlvbiA9IHRhcmdldEJ0bi5nZXRBdHRyaWJ1dGUoJ2RhdGEtYWN0aW9uJyk7CiB2YXIgYnVja2V0ID0gdGFyZ2V0QnRuLmdldEF0dHJpYnV0ZSgnZGF0YS1idWNrZXQnKTsKIHZhciBpbmRleCA9IHBhcnNlSW50KHRhcmdldEJ0bi5nZXRBdHRyaWJ1dGUoJ2RhdGEtaW5kZXgnKSk7CiBpZihhY3Rpb24gPT09ICdvcmRlci11cCcpIHJlb3JkZXJJdGVtKGJ1Y2tldCwgaW5kZXgsICd1cCcpOwogaWYoYWN0aW9uID09PSAnb3JkZXItZG93bicpIHJlb3JkZXJJdGVtKGJ1Y2tldCwgaW5kZXgsICdkb3duJyk7CiB9IGVsc2UgaWYgKHRhcmdldEJ0bi5jbGFzc0xpc3QuY29udGFpbnMoJ3JlbW92ZS1idG4nKSkgewogdmFyIGlkID0gdGFyZ2V0QnRuLmdldEF0dHJpYnV0ZSgnZGF0YS1pZCcpOwogdmFyIGJ1Y2tldCA9IHRhcmdldEJ0bi5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnVja2V0Jyk7CiB2YXIgZm9yY2VPYmogPSBhcHBEYXRhW2N1cnJlbnRTZWdJZHhdW2J1Y2tldF0uZmluZChmdW5jdGlvbihmKXsgcmV0dXJuIGYuaWQgPT09IGlkOyB9KTsKIG1vdmVJdGVtKGZvcmNlT2JqLCBidWNrZXQsICdwb29sJyk7CiB9CiB9KTsKCgogLy8gSW5pdGlhbGl6ZSB0aGVtZSBzZXR0aW5ncyBvbiBsb2FkCiBpZiAoaXNEYXJrVGhlbWVBY3RpdmUpIHsKIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtdGhlbWUnLCAnZGFyaycpOwogdmFyIHRoZW1lQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RoZW1lLWJ0bicpOwogaWYodGhlbWVCdG4pIHRoZW1lQnRuLnRleHRDb250ZW50ID0gJ+KYgO+4jyBMaWdodCBNb2RlJzsKIH0KCiB9KSgpOwogLyogXV0+ICovCiA8L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+Cg==