PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgo8dGl0bGU+U3VmaUxpbmsg4oCTIEZyZWUgSW1hZ2UgSG9zdGluZyAmIExpbmsgR2VuZXJhdG9yPC90aXRsZT4KPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlN1ZmlMaW5rIGlzIGEgZnJlZSwgZmFzdCwgYW5kIHNlY3VyZSBpbWFnZSBob3N0aW5nIHBsYXRmb3JtLiBVcGxvYWQgYW55IGltYWdlIGFuZCBnZXQgcGVybWFuZW50IGRpcmVjdCBsaW5rcyBpbnN0YW50bHkuIE5vIGFjY291bnQgcmVxdWlyZWQuIj4KPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tIj4KPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1TcGFjZStNb25vOndnaHRANDAwOzcwMCZmYW1pbHk9U3luZTp3Z2h0QDQwMDs2MDA7NzAwOzgwMCZmYW1pbHk9RE0rU2Fuczp3Z2h0QDMwMDs0MDA7NTAwJmRpc3BsYXk9c3dhcCIgcmVsPSJzdHlsZXNoZWV0Ij4KPHN0eWxlPgo6cm9vdCB7CiAgLS1ibGFjazogIzBhMGEwZjsKICAtLWRlZXA6ICMwZjBmMWE7CiAgLS1jYXJkOiAjMTMxMzFmOwogIC0tYm9yZGVyOiAjMWUxZTMyOwogIC0tcHVycGxlOiAjN2MzYWVkOwogIC0tcHVycGxlLWxpZ2h0OiAjYTg1NWY3OwogIC0tcHVycGxlLWdsb3c6ICM3YzNhZWQ0MDsKICAtLWdyZWVuOiAjMjJjNTVlOwogIC0tZ3JlZW4tZ2xvdzogIzIyYzU1ZTMwOwogIC0tZ3JlZW4tZGFyazogIzE2YTM0YTsKICAtLXdoaXRlOiAjZjhmYWZjOwogIC0tbXV0ZWQ6ICM5NGEzYjg7CiAgLS1kaW1tZXI6ICM0NzU1Njk7CiAgLS1mb250LWRpc3BsYXk6ICdTeW5lJywgc2Fucy1zZXJpZjsKICAtLWZvbnQtbW9ubzogJ1NwYWNlIE1vbm8nLCBtb25vc3BhY2U7CiAgLS1mb250LWJvZHk6ICdETSBTYW5zJywgc2Fucy1zZXJpZjsKfQoqLCAqOjpiZWZvcmUsICo6OmFmdGVyIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyB9Cmh0bWwgeyBzY3JvbGwtYmVoYXZpb3I6IHNtb290aDsgfQpib2R5IHsgYmFja2dyb3VuZDogdmFyKC0tYmxhY2spOyBjb2xvcjogdmFyKC0td2hpdGUpOyBmb250LWZhbWlseTogdmFyKC0tZm9udC1ib2R5KTsgbWluLWhlaWdodDogMTAwdmg7IG92ZXJmbG93LXg6IGhpZGRlbjsgfQoKYm9keTo6YmVmb3JlIHsKICBjb250ZW50OiAnJzsKICBwb3NpdGlvbjogZml4ZWQ7IGluc2V0OiAwOwogIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChyZ2JhKDEyNCw1OCwyMzcsMC4wNCkgMXB4LCB0cmFuc3BhcmVudCAxcHgpLCBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHJnYmEoMTI0LDU4LDIzNywwLjA0KSAxcHgsIHRyYW5zcGFyZW50IDFweCk7CiAgYmFja2dyb3VuZC1zaXplOiA0MHB4IDQwcHg7CiAgcG9pbnRlci1ldmVudHM6IG5vbmU7IHotaW5kZXg6IDA7Cn0KCi5vcmIgeyBwb3NpdGlvbjogZml4ZWQ7IGJvcmRlci1yYWRpdXM6IDUwJTsgZmlsdGVyOiBibHVyKDgwcHgpOyBwb2ludGVyLWV2ZW50czogbm9uZTsgei1pbmRleDogMDsgb3BhY2l0eTogMC4zNTsgfQoub3JiLTEgeyB3aWR0aDogNTAwcHg7IGhlaWdodDogNTAwcHg7IGJhY2tncm91bmQ6IHZhcigtLXB1cnBsZSk7IHRvcDogLTE1MHB4OyByaWdodDogLTEwMHB4OyBhbmltYXRpb246IG9yYkZsb2F0IDhzIGVhc2UtaW4tb3V0IGluZmluaXRlOyB9Ci5vcmItMiB7IHdpZHRoOiA0MDBweDsgaGVpZ2h0OiA0MDBweDsgYmFja2dyb3VuZDogdmFyKC0tZ3JlZW4tZGFyayk7IGJvdHRvbTogMTAwcHg7IGxlZnQ6IC0xNTBweDsgYW5pbWF0aW9uOiBvcmJGbG9hdCA4cyBlYXNlLWluLW91dCBpbmZpbml0ZSAzczsgfQoub3JiLTMgeyB3aWR0aDogMzAwcHg7IGhlaWdodDogMzAwcHg7IGJhY2tncm91bmQ6IHZhcigtLXB1cnBsZS1saWdodCk7IHRvcDogNTAlOyBsZWZ0OiA1MCU7IG9wYWNpdHk6IDAuMTsgYW5pbWF0aW9uOiBvcmJGbG9hdDMgOHMgZWFzZS1pbi1vdXQgaW5maW5pdGUgNXM7IH0KQGtleWZyYW1lcyBvcmJGbG9hdCB7IDAlLDEwMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH0gNTAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yMHB4KTsgfSB9CkBrZXlmcmFtZXMgb3JiRmxvYXQzIHsgMCUsMTAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsLTUwJSk7IH0gNTAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTYlKTsgfSB9CgovKiBIRUFERVIgKi8KaGVhZGVyIHsKICBwb3NpdGlvbjogc3RpY2t5OyB0b3A6IDA7IHotaW5kZXg6IDEwMDsKICBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgcGFkZGluZzogMTZweCA0MHB4OwogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1ib3JkZXIpOwogIGJhY2tkcm9wLWZpbHRlcjogYmx1cigyMHB4KTsKICBiYWNrZ3JvdW5kOiByZ2JhKDEwLDEwLDE1LDAuODUpOwp9Ci5sb2dvIHsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiAxMHB4OyBmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTsgZm9udC13ZWlnaHQ6IDgwMDsgZm9udC1zaXplOiAxLjRyZW07IGxldHRlci1zcGFjaW5nOiAtMC41cHg7IGN1cnNvcjogcG9pbnRlcjsgfQoubG9nby1pY29uIHsgd2lkdGg6IDM2cHg7IGhlaWdodDogMzZweDsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tcHVycGxlKSwgdmFyKC0tZ3JlZW4pKTsgYm9yZGVyLXJhZGl1czogMTBweDsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGZvbnQtc2l6ZTogMS4xcmVtOyB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zczsgfQoubG9nbzpob3ZlciAubG9nby1pY29uIHsgdHJhbnNmb3JtOiByb3RhdGUoLTEwZGVnKSBzY2FsZSgxLjEpOyB9Ci5sb2dvIHNwYW4geyBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHZhcigtLXB1cnBsZS1saWdodCksIHZhcigtLWdyZWVuKSk7IC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiB0ZXh0OyAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogdHJhbnNwYXJlbnQ7IH0KbmF2IHsgZGlzcGxheTogZmxleDsgZ2FwOiA4cHg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IH0KbmF2IGEgeyBjb2xvcjogdmFyKC0tbXV0ZWQpOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtc2l6ZTogMC44OHJlbTsgcGFkZGluZzogOHB4IDE2cHg7IGJvcmRlci1yYWRpdXM6IDhweDsgdHJhbnNpdGlvbjogYWxsIDAuMnM7IGZvbnQtd2VpZ2h0OiA1MDA7IGN1cnNvcjogcG9pbnRlcjsgfQpuYXYgYTpob3ZlciB7IGNvbG9yOiB2YXIoLS13aGl0ZSk7IGJhY2tncm91bmQ6IHZhcigtLWJvcmRlcik7IH0KLmJ0bi1uYXYgeyBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCB2YXIoLS1wdXJwbGUpLCAjNWIyMWI2KTsgY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7IGJvcmRlci1yYWRpdXM6IDhweDsgcGFkZGluZzogOHB4IDE4cHg7IGZvbnQtd2VpZ2h0OiA2MDA7IH0KLmJ0bi1uYXY6aG92ZXIgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7IGJveC1zaGFkb3c6IDAgNHB4IDIwcHggdmFyKC0tcHVycGxlLWdsb3cpICFpbXBvcnRhbnQ7IH0KCi8qIFBBR0UgU1lTVEVNICovCi5wYWdlIHsgZGlzcGxheTogbm9uZTsgfQoucGFnZS5hY3RpdmUgeyBkaXNwbGF5OiBibG9jazsgYW5pbWF0aW9uOiBwYWdlSW4gMC40cyBlYXNlOyB9CkBrZXlmcmFtZXMgcGFnZUluIHsgZnJvbSB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KTsgfSB0byB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgfSB9CgovKiBIRVJPICovCi5oZXJvIHsgcG9zaXRpb246IHJlbGF0aXZlOyB6LWluZGV4OiAxOyB0ZXh0LWFsaWduOiBjZW50ZXI7IHBhZGRpbmc6IDgwcHggMjBweCA2MHB4OyBtYXgtd2lkdGg6IDgwMHB4OyBtYXJnaW46IDAgYXV0bzsgfQouYmFkZ2UgewogIGRpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDZweDsKICBiYWNrZ3JvdW5kOiByZ2JhKDM0LDE5Nyw5NCwwLjEpOyBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDM0LDE5Nyw5NCwwLjMpOwogIGNvbG9yOiB2YXIoLS1ncmVlbik7IHBhZGRpbmc6IDZweCAxNHB4OyBib3JkZXItcmFkaXVzOiAxMDBweDsKICBmb250LXNpemU6IDAuOHJlbTsgZm9udC13ZWlnaHQ6IDYwMDsgbWFyZ2luLWJvdHRvbTogMjRweDsKICBmb250LWZhbWlseTogdmFyKC0tZm9udC1tb25vKTsgYW5pbWF0aW9uOiBwdWxzZS1iYWRnZSAycyBlYXNlLWluLW91dCBpbmZpbml0ZTsKfQpAa2V5ZnJhbWVzIHB1bHNlLWJhZGdlIHsgMCUsMTAwJSB7IGJveC1zaGFkb3c6IDAgMCAwIDAgdmFyKC0tZ3JlZW4tZ2xvdyk7IH0gNTAlIHsgYm94LXNoYWRvdzogMCAwIDAgOHB4IHRyYW5zcGFyZW50OyB9IH0KLmJhZGdlOjpiZWZvcmUgeyBjb250ZW50OiAn4pePJzsgYW5pbWF0aW9uOiBibGluayAxLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlOyBtYXJnaW4tcmlnaHQ6IDRweDsgfQpAa2V5ZnJhbWVzIGJsaW5rIHsgMCUsMTAwJSB7IG9wYWNpdHk6MTsgfSA1MCUgeyBvcGFjaXR5OjAuMzsgfSB9Ci5oZXJvIGgxIHsgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7IGZvbnQtc2l6ZTogY2xhbXAoMi40cmVtLDZ2dyw0LjJyZW0pOyBmb250LXdlaWdodDogODAwOyBsaW5lLWhlaWdodDogMS4xOyBtYXJnaW4tYm90dG9tOiAyMHB4OyBsZXR0ZXItc3BhY2luZzogLTJweDsgYW5pbWF0aW9uOiBmYWRlSW5VcCAwLjhzIGVhc2UgYm90aDsgfQpAa2V5ZnJhbWVzIGZhZGVJblVwIHsgZnJvbSB7IG9wYWNpdHk6MDsgdHJhbnNmb3JtOnRyYW5zbGF0ZVkoMzBweCk7IH0gdG8geyBvcGFjaXR5OjE7IHRyYW5zZm9ybTp0cmFuc2xhdGVZKDApOyB9IH0KLmhlcm8gaDEgLmFjY2VudCB7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLXB1cnBsZS1saWdodCksIHZhcigtLWdyZWVuKSk7IC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiB0ZXh0OyAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogdHJhbnNwYXJlbnQ7IH0KLmhlcm8gcCB7IGZvbnQtc2l6ZTogMS4xcmVtOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBsaW5lLWhlaWdodDogMS43OyBtYXgtd2lkdGg6IDYwMHB4OyBtYXJnaW46IDAgYXV0byA0MHB4OyBhbmltYXRpb246IGZhZGVJblVwIDAuOHMgZWFzZSAwLjE1cyBib3RoOyB9Ci5zdGF0cy1yb3cgeyBkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgZ2FwOiA0MHB4OyBmbGV4LXdyYXA6IHdyYXA7IG1hcmdpbi1ib3R0b206IDUwcHg7IGFuaW1hdGlvbjogZmFkZUluVXAgMC44cyBlYXNlIDAuM3MgYm90aDsgfQouc3RhdCB7IHRleHQtYWxpZ246IGNlbnRlcjsgfQouc3RhdC1udW0geyBmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTsgZm9udC1zaXplOiAxLjZyZW07IGZvbnQtd2VpZ2h0OiA4MDA7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgdmFyKC0tcHVycGxlLWxpZ2h0KSwgdmFyKC0tZ3JlZW4pKTsgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHRleHQ7IC13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiB0cmFuc3BhcmVudDsgfQouc3RhdC1sYWJlbCB7IGZvbnQtc2l6ZTogMC44cmVtOyBjb2xvcjogdmFyKC0tZGltbWVyKTsgbWFyZ2luLXRvcDogMnB4OyB9CgovKiBVUExPQUQgKi8KLnVwbG9hZC1zZWN0aW9uIHsgcG9zaXRpb246IHJlbGF0aXZlOyB6LWluZGV4OiAyOyBtYXgtd2lkdGg6IDc2MHB4OyBtYXJnaW46IDAgYXV0byA2MHB4OyBwYWRkaW5nOiAwIDIwcHg7IGFuaW1hdGlvbjogZmFkZUluVXAgMC44cyBlYXNlIDAuM3MgYm90aDsgfQoudXBsb2FkLWNhcmQgewogIGJhY2tncm91bmQ6IHZhcigtLWNhcmQpOyBib3JkZXI6IDJweCBkYXNoZWQgdmFyKC0tYm9yZGVyKTsKICBib3JkZXItcmFkaXVzOiAyMHB4OyBwYWRkaW5nOiA1MHB4IDQwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsKICBjdXJzb3I6IHBvaW50ZXI7IHRyYW5zaXRpb246IGFsbCAwLjNzIGN1YmljLWJlemllcigwLjQsMCwwLjIsMSk7CiAgcG9zaXRpb246IHJlbGF0aXZlOyBvdmVyZmxvdzogaGlkZGVuOwp9Ci51cGxvYWQtY2FyZDo6YmVmb3JlIHsgY29udGVudDonJzsgcG9zaXRpb246YWJzb2x1dGU7IGluc2V0OjA7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLXB1cnBsZS1nbG93KSwgdmFyKC0tZ3JlZW4tZ2xvdykpOyBvcGFjaXR5OjA7IHRyYW5zaXRpb246IG9wYWNpdHkgMC4zczsgfQoudXBsb2FkLWNhcmQ6aG92ZXI6OmJlZm9yZSwgLnVwbG9hZC1jYXJkLmRyYWctb3Zlcjo6YmVmb3JlIHsgb3BhY2l0eToxOyB9Ci51cGxvYWQtY2FyZDpob3ZlciwgLnVwbG9hZC1jYXJkLmRyYWctb3ZlciB7IGJvcmRlci1jb2xvcjogdmFyKC0tcHVycGxlLWxpZ2h0KTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpOyBib3gtc2hhZG93OiAwIDIwcHggNjBweCByZ2JhKDEyNCw1OCwyMzcsMC4yKTsgfQoudXBsb2FkLWljb24geyB3aWR0aDo4MHB4OyBoZWlnaHQ6ODBweDsgbWFyZ2luOiAwIGF1dG8gMjBweDsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgxMjQsNTgsMjM3LDAuMiksIHJnYmEoMzQsMTk3LDk0LDAuMikpOyBib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6MjBweDsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IGZvbnQtc2l6ZToycmVtOyBwb3NpdGlvbjpyZWxhdGl2ZTsgei1pbmRleDoxOyB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC40cyBjdWJpYy1iZXppZXIoMC4zNCwxLjU2LDAuNjQsMSk7IH0KLnVwbG9hZC1jYXJkOmhvdmVyIC51cGxvYWQtaWNvbiB7IHRyYW5zZm9ybTogc2NhbGUoMS4xNSkgcm90YXRlKC04ZGVnKTsgfQoudXBsb2FkLWNhcmQgaDIgeyBmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTsgZm9udC1zaXplOjEuNXJlbTsgZm9udC13ZWlnaHQ6NzAwOyBtYXJnaW4tYm90dG9tOjEwcHg7IHBvc2l0aW9uOnJlbGF0aXZlOyB6LWluZGV4OjE7IH0KLnVwbG9hZC1jYXJkID4gcCB7IGNvbG9yOnZhcigtLW11dGVkKTsgZm9udC1zaXplOjAuOTJyZW07IG1hcmdpbi1ib3R0b206MjRweDsgcG9zaXRpb246cmVsYXRpdmU7IHotaW5kZXg6MTsgfQouZm9ybWF0LXRhZ3MgeyBkaXNwbGF5OmZsZXg7IGZsZXgtd3JhcDp3cmFwOyBnYXA6OHB4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBtYXJnaW4tYm90dG9tOjI0cHg7IHBvc2l0aW9uOnJlbGF0aXZlOyB6LWluZGV4OjE7IH0KLnRhZyB7IGJhY2tncm91bmQ6IHJnYmEoMTI0LDU4LDIzNywwLjE1KTsgYm9yZGVyOjFweCBzb2xpZCByZ2JhKDEyNCw1OCwyMzcsMC4zKTsgY29sb3I6dmFyKC0tcHVycGxlLWxpZ2h0KTsgcGFkZGluZzo0cHggMTJweDsgYm9yZGVyLXJhZGl1czoxMDBweDsgZm9udC1zaXplOjAuNzhyZW07IGZvbnQtZmFtaWx5OnZhcigtLWZvbnQtbW9ubyk7IGZvbnQtd2VpZ2h0OjcwMDsgfQouYnRuLXVwbG9hZCB7IGRpc3BsYXk6aW5saW5lLWZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgZ2FwOjhweDsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tcHVycGxlKSwgIzViMjFiNik7IGNvbG9yOndoaXRlOyBib3JkZXI6bm9uZTsgcGFkZGluZzoxNHB4IDMycHg7IGJvcmRlci1yYWRpdXM6MTJweDsgZm9udC1mYW1pbHk6dmFyKC0tZm9udC1kaXNwbGF5KTsgZm9udC1zaXplOjFyZW07IGZvbnQtd2VpZ2h0OjcwMDsgY3Vyc29yOnBvaW50ZXI7IHRyYW5zaXRpb246YWxsIDAuM3M7IHBvc2l0aW9uOnJlbGF0aXZlOyB6LWluZGV4OjI7IGJveC1zaGFkb3c6IDAgOHB4IDMwcHggdmFyKC0tcHVycGxlLWdsb3cpOyB9Ci5idG4tdXBsb2FkOmhvdmVyIHsgdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTJweCk7IGJveC1zaGFkb3c6IDAgMTJweCA0MHB4IHJnYmEoMTI0LDU4LDIzNywwLjUpOyB9Ci5idG4tdXBsb2FkOmFjdGl2ZSB7IHRyYW5zZm9ybTogc2NhbGUoMC45NykgdHJhbnNsYXRlWSgwKTsgfQojZmlsZUlucHV0IHsgZGlzcGxheTpub25lOyB9CgovKiBQUk9HUkVTUyAqLwoucHJvZ3Jlc3Mtd3JhcCB7IGRpc3BsYXk6bm9uZTsgbWFyZ2luLXRvcDoyNHB4OyBwb3NpdGlvbjpyZWxhdGl2ZTsgei1pbmRleDoxOyB9Ci5wcm9ncmVzcy1iYXIgeyBoZWlnaHQ6OHB4OyBiYWNrZ3JvdW5kOnZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6MTAwcHg7IG92ZXJmbG93OmhpZGRlbjsgfQoucHJvZ3Jlc3MtZmlsbCB7IGhlaWdodDoxMDAlOyB3aWR0aDowJTsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCB2YXIoLS1wdXJwbGUpLCB2YXIoLS1ncmVlbikpOyBib3JkZXItcmFkaXVzOjEwMHB4OyB0cmFuc2l0aW9uOiB3aWR0aCAwLjRzIGVhc2U7IGJveC1zaGFkb3c6IDAgMCAxMnB4IHZhcigtLXB1cnBsZS1nbG93KTsgcG9zaXRpb246IHJlbGF0aXZlOyB9Ci5wcm9ncmVzcy1maWxsOjphZnRlciB7IGNvbnRlbnQ6Jyc7IHBvc2l0aW9uOmFic29sdXRlOyB0b3A6MDsgcmlnaHQ6MDsgd2lkdGg6MjBweDsgaGVpZ2h0OjEwMCU7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC40KTsgYm9yZGVyLXJhZGl1czoxMDBweDsgYW5pbWF0aW9uOiBzaGltbWVyIDFzIGVhc2UtaW4tb3V0IGluZmluaXRlOyB9CkBrZXlmcmFtZXMgc2hpbW1lciB7IDAlLDEwMCUgeyBvcGFjaXR5OjA7IH0gNTAlIHsgb3BhY2l0eToxOyB9IH0KLnByb2dyZXNzLXRleHQgeyBmb250LXNpemU6MC44NXJlbTsgY29sb3I6dmFyKC0tbXV0ZWQpOyBtYXJnaW4tdG9wOjEwcHg7IGZvbnQtZmFtaWx5OnZhcigtLWZvbnQtbW9ubyk7IH0KCi8qIFJFU1VMVFMgKi8KI3Jlc3VsdHNTZWN0aW9uIHsgZGlzcGxheTpub25lOyBwb3NpdGlvbjpyZWxhdGl2ZTsgei1pbmRleDoyOyBtYXgtd2lkdGg6NzYwcHg7IG1hcmdpbjogMCBhdXRvIDYwcHg7IHBhZGRpbmc6IDAgMjBweDsgfQoucmVzdWx0LWNhcmQgeyBiYWNrZ3JvdW5kOnZhcigtLWNhcmQpOyBib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6MjBweDsgb3ZlcmZsb3c6aGlkZGVuOyBhbmltYXRpb246IHNsaWRlVXAgMC41cyBjdWJpYy1iZXppZXIoMC40LDAsMC4yLDEpOyBtYXJnaW4tYm90dG9tOiAyNHB4OyB9CkBrZXlmcmFtZXMgc2xpZGVVcCB7IGZyb20geyBvcGFjaXR5OjA7IHRyYW5zZm9ybTp0cmFuc2xhdGVZKDMwcHgpIHNjYWxlKDAuOTgpOyB9IHRvIHsgb3BhY2l0eToxOyB0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKSBzY2FsZSgxKTsgfSB9Ci5yZXN1bHQtaGVhZGVyIHsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGdhcDoxMnB4OyBwYWRkaW5nOjIwcHggMjRweDsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYm9yZGVyKTsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCByZ2JhKDM0LDE5Nyw5NCwwLjA3KSwgdHJhbnNwYXJlbnQpOyB9Ci5zdWNjZXNzLWljb24geyB3aWR0aDo0MHB4OyBoZWlnaHQ6NDBweDsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tZ3JlZW4pLCB2YXIoLS1ncmVlbi1kYXJrKSk7IGJvcmRlci1yYWRpdXM6MTJweDsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IGZvbnQtc2l6ZToxLjJyZW07IGZsZXgtc2hyaW5rOjA7IGFuaW1hdGlvbjogcG9wSW4gMC41cyBjdWJpYy1iZXppZXIoMC4zNCwxLjU2LDAuNjQsMSk7IH0KQGtleWZyYW1lcyBwb3BJbiB7IGZyb20geyB0cmFuc2Zvcm06IHNjYWxlKDApIHJvdGF0ZSgtMTgwZGVnKTsgfSB0byB7IHRyYW5zZm9ybTogc2NhbGUoMSkgcm90YXRlKDBkZWcpOyB9IH0KLnJlc3VsdC1oZWFkZXIgaDMgeyBmb250LWZhbWlseTp2YXIoLS1mb250LWRpc3BsYXkpOyBmb250LXNpemU6MS4xcmVtOyBmb250LXdlaWdodDo3MDA7IH0KLnJlc3VsdC1oZWFkZXIgcCB7IGZvbnQtc2l6ZTowLjgycmVtOyBjb2xvcjp2YXIoLS1tdXRlZCk7IG1hcmdpbi10b3A6MnB4OyB9Ci5wcmV2aWV3LWFyZWEgeyBwYWRkaW5nOjIwcHggMjRweDsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYm9yZGVyKTsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGdhcDoxNnB4OyBmbGV4LXdyYXA6d3JhcDsgfQouaW1nLXByZXZpZXcgeyB3aWR0aDo4MHB4OyBoZWlnaHQ6ODBweDsgb2JqZWN0LWZpdDpjb3ZlcjsgYm9yZGVyLXJhZGl1czoxMnB4OyBib3JkZXI6MnB4IHNvbGlkIHZhcigtLWJvcmRlcik7IHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzLCBib3gtc2hhZG93IDAuM3M7IGN1cnNvcjogcG9pbnRlcjsgfQouaW1nLXByZXZpZXc6aG92ZXIgeyB0cmFuc2Zvcm06IHNjYWxlKDEuMDgpOyBib3gtc2hhZG93OiAwIDhweCAyNHB4IHZhcigtLXB1cnBsZS1nbG93KTsgfQouaW1nLWluZm8geyBmbGV4OjE7IG1pbi13aWR0aDoxNTBweDsgfQouaW1nLW5hbWUgeyBmb250LXdlaWdodDo2MDA7IGZvbnQtc2l6ZTowLjk1cmVtOyBtYXJnaW4tYm90dG9tOjRweDsgd2hpdGUtc3BhY2U6bm93cmFwOyBvdmVyZmxvdzpoaWRkZW47IHRleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7IG1heC13aWR0aDozMjBweDsgfQouaW1nLW1ldGEgeyBmb250LXNpemU6MC44cmVtOyBjb2xvcjp2YXIoLS1tdXRlZCk7IGZvbnQtZmFtaWx5OnZhcigtLWZvbnQtbW9ubyk7IH0KLmxpbmtzLWdyaWQgeyBwYWRkaW5nOjIwcHggMjRweDsgZGlzcGxheTpmbGV4OyBmbGV4LWRpcmVjdGlvbjpjb2x1bW47IGdhcDoxMHB4OyB9Ci5saW5rLXJvdyB7IGJhY2tncm91bmQ6dmFyKC0tZGVlcCk7IGJvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyKTsgYm9yZGVyLXJhZGl1czoxMnB4OyBvdmVyZmxvdzpoaWRkZW47IHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjJzLCB0cmFuc2Zvcm0gMC4yczsgfQoubGluay1yb3c6aG92ZXIgeyBib3JkZXItY29sb3I6dmFyKC0tcHVycGxlKTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDNweCk7IH0KLmxpbmstbGFiZWwgeyBkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgZ2FwOjhweDsgcGFkZGluZzoxMHB4IDE0cHggNnB4OyBmb250LXNpemU6MC43OHJlbTsgZm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKTsgZm9udC13ZWlnaHQ6NzAwOyBjb2xvcjp2YXIoLS1tdXRlZCk7IHRleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTsgbGV0dGVyLXNwYWNpbmc6MC41cHg7IH0KLmxpbmstdHlwZSB7IHBhZGRpbmc6MnB4IDhweDsgYm9yZGVyLXJhZGl1czo0cHg7IGZvbnQtc2l6ZTowLjdyZW07IH0KLnR5cGUtZGlyZWN0IHsgYmFja2dyb3VuZDpyZ2JhKDEyNCw1OCwyMzcsMC4yKTsgY29sb3I6dmFyKC0tcHVycGxlLWxpZ2h0KTsgfQoudHlwZS1odG1sIHsgYmFja2dyb3VuZDpyZ2JhKDM0LDE5Nyw5NCwwLjE1KTsgY29sb3I6dmFyKC0tZ3JlZW4pOyB9Ci50eXBlLW1hcmtkb3duIHsgYmFja2dyb3VuZDpyZ2JhKDU5LDEzMCwyNDYsMC4xNSk7IGNvbG9yOiM2MGE1ZmE7IH0KLnR5cGUtYmIgeyBiYWNrZ3JvdW5kOnJnYmEoMjUxLDE0Niw2MCwwLjE1KTsgY29sb3I6I2ZiOTIzYzsgfQoudHlwZS1mb3J1bSB7IGJhY2tncm91bmQ6cmdiYSgyMzYsNzIsMTUzLDAuMTUpOyBjb2xvcjojZjQ3MmI2OyB9Ci5saW5rLWNvbnRlbnQgeyBkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgZ2FwOjhweDsgcGFkZGluZzo4cHggMTRweCAxMHB4OyB9Ci5saW5rLWlucHV0IHsgZmxleDoxOyBiYWNrZ3JvdW5kOnRyYW5zcGFyZW50OyBib3JkZXI6bm9uZTsgY29sb3I6dmFyKC0tbXV0ZWQpOyBmb250LWZhbWlseTp2YXIoLS1mb250LW1vbm8pOyBmb250LXNpemU6MC44MnJlbTsgb3V0bGluZTpub25lOyBjdXJzb3I6dGV4dDsgd2hpdGUtc3BhY2U6bm93cmFwOyBvdmVyZmxvdzpoaWRkZW47IHRleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7IH0KLmNvcHktYnRuIHsgYmFja2dyb3VuZDp0cmFuc3BhcmVudDsgYm9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXIpOyBjb2xvcjp2YXIoLS1tdXRlZCk7IHBhZGRpbmc6NnB4IDE0cHg7IGJvcmRlci1yYWRpdXM6OHB4OyBmb250LXNpemU6MC43OHJlbTsgY3Vyc29yOnBvaW50ZXI7IHRyYW5zaXRpb246YWxsIDAuMnM7IHdoaXRlLXNwYWNlOm5vd3JhcDsgZm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKTsgZmxleC1zaHJpbms6MDsgfQouY29weS1idG46aG92ZXIgeyBib3JkZXItY29sb3I6dmFyKC0tcHVycGxlLWxpZ2h0KTsgY29sb3I6dmFyKC0tcHVycGxlLWxpZ2h0KTsgYmFja2dyb3VuZDp2YXIoLS1wdXJwbGUtZ2xvdyk7IH0KLmNvcHktYnRuLmNvcGllZCB7IGJvcmRlci1jb2xvcjp2YXIoLS1ncmVlbik7IGNvbG9yOnZhcigtLWdyZWVuKTsgYmFja2dyb3VuZDp2YXIoLS1ncmVlbi1nbG93KTsgfQouY29weS1idG46YWN0aXZlIHsgdHJhbnNmb3JtOiBzY2FsZSgwLjkzKTsgfQoKLyogR0FMTEVSWSAqLwojZ2FsbGVyeVNlY3Rpb24geyBkaXNwbGF5Om5vbmU7IHBvc2l0aW9uOnJlbGF0aXZlOyB6LWluZGV4OjI7IG1heC13aWR0aDo3NjBweDsgbWFyZ2luOiAwIGF1dG8gNjBweDsgcGFkZGluZzogMCAyMHB4OyB9Ci5zZWN0aW9uLXRpdGxlIHsgZm9udC1mYW1pbHk6dmFyKC0tZm9udC1kaXNwbGF5KTsgZm9udC1zaXplOjEuNHJlbTsgZm9udC13ZWlnaHQ6NzAwOyBtYXJnaW4tYm90dG9tOjIwcHg7IGRpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBnYXA6MTBweDsgZmxleC13cmFwOndyYXA7IH0KLnNlY3Rpb24tdGl0bGUgc3BhbiB7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgdmFyKC0tcHVycGxlLWxpZ2h0KSwgdmFyKC0tZ3JlZW4pKTsgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6dGV4dDsgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7IH0KLmdhbGxlcnktZ3JpZCB7IGRpc3BsYXk6Z3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgxNDBweCwxZnIpKTsgZ2FwOjEycHg7IH0KLmdhbGxlcnktaXRlbSB7IHBvc2l0aW9uOnJlbGF0aXZlOyBib3JkZXItcmFkaXVzOjEycHg7IG92ZXJmbG93OmhpZGRlbjsgY3Vyc29yOnBvaW50ZXI7IGFzcGVjdC1yYXRpbzoxOyBib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IHRyYW5zaXRpb246YWxsIDAuM3MgY3ViaWMtYmV6aWVyKDAuNCwwLDAuMiwxKTsgfQouZ2FsbGVyeS1pdGVtOmhvdmVyIHsgYm9yZGVyLWNvbG9yOnZhcigtLXB1cnBsZS1saWdodCk7IHRyYW5zZm9ybTpzY2FsZSgxLjA1KTsgYm94LXNoYWRvdzogMCA4cHggMzBweCB2YXIoLS1wdXJwbGUtZ2xvdyk7IH0KLmdhbGxlcnktaXRlbSBpbWcgeyB3aWR0aDoxMDAlOyBoZWlnaHQ6MTAwJTsgb2JqZWN0LWZpdDpjb3ZlcjsgZGlzcGxheTpibG9jazsgfQouZ2FsbGVyeS1vdmVybGF5IHsgcG9zaXRpb246YWJzb2x1dGU7IGluc2V0OjA7IGJhY2tncm91bmQ6cmdiYSgwLDAsMCwwLjcpOyBkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgb3BhY2l0eTowOyB0cmFuc2l0aW9uOm9wYWNpdHkgMC4yNXM7IGZvbnQtc2l6ZToxLjZyZW07IH0KLmdhbGxlcnktaXRlbTpob3ZlciAuZ2FsbGVyeS1vdmVybGF5IHsgb3BhY2l0eToxOyB9CgovKiBISVNUT1JZIFNFQ1RJT04gKi8KI2hpc3RvcnlTZWN0aW9uIHsgcG9zaXRpb246cmVsYXRpdmU7IHotaW5kZXg6MjsgbWF4LXdpZHRoOjc2MHB4OyBtYXJnaW46IDAgYXV0byA2MHB4OyBwYWRkaW5nOiAwIDIwcHg7IH0KLmhpc3RvcnktaGVhZGVyIHsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuOyBtYXJnaW4tYm90dG9tOjE2cHg7IGZsZXgtd3JhcDp3cmFwOyBnYXA6MTBweDsgfQouYnRuLWRlbGV0ZS1hbGwgeyBiYWNrZ3JvdW5kOnRyYW5zcGFyZW50OyBib3JkZXI6MXB4IHNvbGlkICNlZjQ0NDQ7IGNvbG9yOiNlZjQ0NDQ7IHBhZGRpbmc6OHB4IDE2cHg7IGJvcmRlci1yYWRpdXM6MTBweDsgZm9udC1zaXplOjAuOHJlbTsgY3Vyc29yOnBvaW50ZXI7IHRyYW5zaXRpb246YWxsIDAuMnM7IGZvbnQtZmFtaWx5OnZhcigtLWZvbnQtbW9ubyk7IGZvbnQtd2VpZ2h0OjcwMDsgfQouYnRuLWRlbGV0ZS1hbGw6aG92ZXIgeyBiYWNrZ3JvdW5kOnJnYmEoMjM5LDY4LDY4LDAuMSk7IH0KLmhpc3RvcnktZ3JpZCB7IGRpc3BsYXk6Z3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgzLDFmcik7IGdhcDoxMnB4OyB9Ci5oaXN0b3J5LWl0ZW0geyBwb3NpdGlvbjpyZWxhdGl2ZTsgYm9yZGVyLXJhZGl1czoxNHB4OyBvdmVyZmxvdzpoaWRkZW47IGFzcGVjdC1yYXRpbzoxOyBib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGN1cnNvcjpwb2ludGVyOyB0cmFuc2l0aW9uOmFsbCAwLjNzOyBiYWNrZ3JvdW5kOnZhcigtLWNhcmQpOyB9Ci5oaXN0b3J5LWl0ZW06aG92ZXIgeyBib3JkZXItY29sb3I6dmFyKC0tcHVycGxlLWxpZ2h0KTsgdHJhbnNmb3JtOnNjYWxlKDEuMDQpOyBib3gtc2hhZG93OiAwIDhweCAzMHB4IHZhcigtLXB1cnBsZS1nbG93KTsgfQouaGlzdG9yeS1pdGVtIGltZyB7IHdpZHRoOjEwMCU7IGhlaWdodDoxMDAlOyBvYmplY3QtZml0OmNvdmVyOyBkaXNwbGF5OmJsb2NrOyB9Ci5oaXN0b3J5LWl0ZW0gLmgtb3ZlcmxheSB7IHBvc2l0aW9uOmFic29sdXRlOyBpbnNldDowOyBiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMC42NSk7IGRpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBvcGFjaXR5OjA7IHRyYW5zaXRpb246b3BhY2l0eSAwLjI1czsgZm9udC1zaXplOjEuNHJlbTsgfQouaGlzdG9yeS1pdGVtOmhvdmVyIC5oLW92ZXJsYXkgeyBvcGFjaXR5OjE7IH0KLmhpc3RvcnktaXRlbSAuZGVsLWJ0biB7IHBvc2l0aW9uOmFic29sdXRlOyB0b3A6NnB4OyByaWdodDo2cHg7IHdpZHRoOjI2cHg7IGhlaWdodDoyNnB4OyBiYWNrZ3JvdW5kOnJnYmEoMjM5LDY4LDY4LDAuODUpOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czo1MCU7IGNvbG9yOndoaXRlOyBmb250LXNpemU6MC45cmVtOyBjdXJzb3I6cG9pbnRlcjsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IG9wYWNpdHk6MDsgdHJhbnNpdGlvbjpvcGFjaXR5IDAuMnM7IHotaW5kZXg6MjsgbGluZS1oZWlnaHQ6MTsgfQouaGlzdG9yeS1pdGVtOmhvdmVyIC5kZWwtYnRuIHsgb3BhY2l0eToxOyB9Ci5zaG93LW1vcmUtd3JhcCB7IHRleHQtYWxpZ246Y2VudGVyOyBtYXJnaW4tdG9wOjE2cHg7IH0KLmJ0bi1zaG93LW1vcmUgeyBiYWNrZ3JvdW5kOnZhcigtLWNhcmQpOyBib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGNvbG9yOnZhcigtLW11dGVkKTsgcGFkZGluZzoxMHB4IDI4cHg7IGJvcmRlci1yYWRpdXM6MTBweDsgZm9udC1zaXplOjAuODhyZW07IGN1cnNvcjpwb2ludGVyOyB0cmFuc2l0aW9uOmFsbCAwLjJzOyBmb250LWZhbWlseTp2YXIoLS1mb250LWJvZHkpOyB9Ci5idG4tc2hvdy1tb3JlOmhvdmVyIHsgYm9yZGVyLWNvbG9yOnZhcigtLXB1cnBsZS1saWdodCk7IGNvbG9yOnZhcigtLXdoaXRlKTsgfQoKLyogTU9EQUwgKi8KLm1vZGFsLWJnIHsgZGlzcGxheTpub25lOyBwb3NpdGlvbjpmaXhlZDsgaW5zZXQ6MDsgYmFja2dyb3VuZDpyZ2JhKDAsMCwwLDAuODUpOyB6LWluZGV4OjEwMDA7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgcGFkZGluZzoyMHB4OyB9Ci5tb2RhbC1iZy5vcGVuIHsgZGlzcGxheTpmbGV4OyBhbmltYXRpb246IGZhZGVJbiAwLjJzIGVhc2U7IH0KQGtleWZyYW1lcyBmYWRlSW4geyBmcm9te29wYWNpdHk6MH0gdG97b3BhY2l0eToxfSB9Ci5tb2RhbC1ib3ggeyBiYWNrZ3JvdW5kOnZhcigtLWNhcmQpOyBib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6MjBweDsgd2lkdGg6MTAwJTsgbWF4LXdpZHRoOjYwMHB4OyBtYXgtaGVpZ2h0Ojkwdmg7IG92ZXJmbG93LXk6YXV0bzsgYW5pbWF0aW9uOiBzbGlkZVVwIDAuM3MgZWFzZTsgfQoubW9kYWwtdG9wIHsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGdhcDoxNHB4OyBwYWRkaW5nOjIwcHggMjRweDsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYm9yZGVyKTsgfQoubW9kYWwtaW1nIHsgd2lkdGg6NjBweDsgaGVpZ2h0OjYwcHg7IG9iamVjdC1maXQ6Y292ZXI7IGJvcmRlci1yYWRpdXM6MTBweDsgYm9yZGVyOjJweCBzb2xpZCB2YXIoLS1ib3JkZXIpOyBmbGV4LXNocmluazowOyB9Ci5tb2RhbC1pbmZvIHsgZmxleDoxOyBtaW4td2lkdGg6MDsgfQoubW9kYWwtbmFtZSB7IGZvbnQtd2VpZ2h0OjcwMDsgZm9udC1zaXplOjAuOTVyZW07IHdoaXRlLXNwYWNlOm5vd3JhcDsgb3ZlcmZsb3c6aGlkZGVuOyB0ZXh0LW92ZXJmbG93OmVsbGlwc2lzOyB9Ci5tb2RhbC1tZXRhIHsgZm9udC1zaXplOjAuOHJlbTsgY29sb3I6dmFyKC0tbXV0ZWQpOyBtYXJnaW4tdG9wOjJweDsgZm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKTsgfQoubW9kYWwtY2xvc2UgeyBiYWNrZ3JvdW5kOnRyYW5zcGFyZW50OyBib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGNvbG9yOnZhcigtLW11dGVkKTsgd2lkdGg6MzRweDsgaGVpZ2h0OjM0cHg7IGJvcmRlci1yYWRpdXM6OHB4OyBjdXJzb3I6cG9pbnRlcjsgZm9udC1zaXplOjEuMXJlbTsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IGZsZXgtc2hyaW5rOjA7IHRyYW5zaXRpb246YWxsIDAuMnM7IH0KLm1vZGFsLWNsb3NlOmhvdmVyIHsgYm9yZGVyLWNvbG9yOiNlZjQ0NDQ7IGNvbG9yOiNlZjQ0NDQ7IH0KLm1vZGFsLWxpbmtzIHsgcGFkZGluZzoxNnB4IDI0cHggMjBweDsgZGlzcGxheTpmbGV4OyBmbGV4LWRpcmVjdGlvbjpjb2x1bW47IGdhcDo4cHg7IH0KLm1vZGFsLWRlbCB7IG1hcmdpbjowIDI0cHggMjBweDsgYmFja2dyb3VuZDp0cmFuc3BhcmVudDsgYm9yZGVyOjFweCBzb2xpZCAjZWY0NDQ0OyBjb2xvcjojZWY0NDQ0OyBwYWRkaW5nOjEwcHg7IGJvcmRlci1yYWRpdXM6MTBweDsgZm9udC1zaXplOjAuODVyZW07IGN1cnNvcjpwb2ludGVyOyB0cmFuc2l0aW9uOmFsbCAwLjJzOyB3aWR0aDpjYWxjKDEwMCUgLSA0OHB4KTsgZm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKTsgZm9udC13ZWlnaHQ6NzAwOyB9Ci5tb2RhbC1kZWw6aG92ZXIgeyBiYWNrZ3JvdW5kOnJnYmEoMjM5LDY4LDY4LDAuMSk7IH0KCi8qIEZFQVRVUkVTICovCi5mZWF0dXJlcyB7IHBvc2l0aW9uOnJlbGF0aXZlOyB6LWluZGV4OjI7IG1heC13aWR0aDo3NjBweDsgbWFyZ2luOiAwIGF1dG8gNjBweDsgcGFkZGluZzogMCAyMHB4OyB9Ci5mZWF0dXJlcy1ncmlkIHsgZGlzcGxheTpncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMjAwcHgsMWZyKSk7IGdhcDoxNnB4OyB9Ci5mZWF0dXJlLWNhcmQgeyBiYWNrZ3JvdW5kOnZhcigtLWNhcmQpOyBib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6MTZweDsgcGFkZGluZzoyNHB4IDIwcHg7IHRyYW5zaXRpb246YWxsIDAuM3M7IH0KLmZlYXR1cmUtY2FyZDpob3ZlciB7IGJvcmRlci1jb2xvcjp2YXIoLS1wdXJwbGUpOyB0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNXB4KTsgYm94LXNoYWRvdzogMCAxNnB4IDQwcHggdmFyKC0tcHVycGxlLWdsb3cpOyB9Ci5mZWF0dXJlLWljb24geyBmb250LXNpemU6MS44cmVtOyBtYXJnaW4tYm90dG9tOjEycHg7IGRpc3BsYXk6YmxvY2s7IH0KLmZlYXR1cmUtY2FyZCBoNCB7IGZvbnQtZmFtaWx5OnZhcigtLWZvbnQtZGlzcGxheSk7IGZvbnQtc2l6ZToxcmVtOyBmb250LXdlaWdodDo3MDA7IG1hcmdpbi1ib3R0b206NnB4OyB9Ci5mZWF0dXJlLWNhcmQgcCB7IGZvbnQtc2l6ZTowLjg1cmVtOyBjb2xvcjp2YXIoLS1kaW1tZXIpOyBsaW5lLWhlaWdodDoxLjY7IH0KCi8qIEZPT1RFUiAqLwpmb290ZXIgeyBwb3NpdGlvbjpyZWxhdGl2ZTsgei1pbmRleDoyOyBib3JkZXItdG9wOjFweCBzb2xpZCB2YXIoLS1ib3JkZXIpOyBwYWRkaW5nOjMycHggNDBweDsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuOyBnYXA6MTZweDsgZmxleC13cmFwOndyYXA7IH0KZm9vdGVyIHAgeyBmb250LXNpemU6MC44MnJlbTsgY29sb3I6dmFyKC0tZGltbWVyKTsgfQouZm9vdGVyLWxpbmtzIHsgZGlzcGxheTpmbGV4OyBnYXA6MjBweDsgfQouZm9vdGVyLWxpbmtzIGEgeyBmb250LXNpemU6MC44MnJlbTsgY29sb3I6dmFyKC0tZGltbWVyKTsgdGV4dC1kZWNvcmF0aW9uOm5vbmU7IHRyYW5zaXRpb246Y29sb3IgMC4yczsgY3Vyc29yOnBvaW50ZXI7IH0KLmZvb3Rlci1saW5rcyBhOmhvdmVyIHsgY29sb3I6dmFyKC0tcHVycGxlLWxpZ2h0KTsgfQoKLyogVE9BU1QgKi8KLnRvYXN0IHsgcG9zaXRpb246Zml4ZWQ7IGJvdHRvbTozMHB4OyBsZWZ0OjUwJTsgdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgxMDBweCk7IGJhY2tncm91bmQ6dmFyKC0tY2FyZCk7IGJvcmRlcjoxcHggc29saWQgdmFyKC0tZ3JlZW4pOyBjb2xvcjp2YXIoLS1ncmVlbik7IHBhZGRpbmc6MTJweCAyOHB4OyBib3JkZXItcmFkaXVzOjEwMHB4OyBmb250LXNpemU6MC44OHJlbTsgZm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKTsgZm9udC13ZWlnaHQ6NzAwOyB6LWluZGV4Ojk5OTk7IHRyYW5zaXRpb246dHJhbnNmb3JtIDAuNHMgY3ViaWMtYmV6aWVyKDAuMzQsMS41NiwwLjY0LDEpOyBib3gtc2hhZG93OiAwIDRweCAzMHB4IHZhcigtLWdyZWVuLWdsb3cpOyBwb2ludGVyLWV2ZW50czpub25lOyB9Ci50b2FzdC5zaG93IHsgdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgwKTsgfQoudG9hc3QuZXJyb3IgeyBib3JkZXItY29sb3I6I2VmNDQ0NDsgY29sb3I6I2VmNDQ0NDsgYm94LXNoYWRvdzogMCA0cHggMzBweCByZ2JhKDIzOSw2OCw2OCwwLjMpOyB9CgovKiBQT0xJQ1kgUEFHRVMgKi8KLnBvbGljeS1wYWdlIHsgbWF4LXdpZHRoOiA3NjBweDsgbWFyZ2luOiAwIGF1dG87IHBhZGRpbmc6IDYwcHggMjBweDsgcG9zaXRpb246IHJlbGF0aXZlOyB6LWluZGV4OiAyOyB9Ci5wb2xpY3ktcGFnZSBoMSB7IGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpOyBmb250LXNpemU6IDIuMnJlbTsgZm9udC13ZWlnaHQ6IDgwMDsgbWFyZ2luLWJvdHRvbTogOHB4OyBsZXR0ZXItc3BhY2luZzogLTFweDsgfQoucG9saWN5LXBhZ2UgaDEgLmFjY2VudCB7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLXB1cnBsZS1saWdodCksIHZhcigtLWdyZWVuKSk7IC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiB0ZXh0OyAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogdHJhbnNwYXJlbnQ7IH0KLnBvbGljeS1kYXRlIHsgZm9udC1zaXplOiAwLjgycmVtOyBjb2xvcjogdmFyKC0tZGltbWVyKTsgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtbW9ubyk7IG1hcmdpbi1ib3R0b206IDQwcHg7IHBhZGRpbmctdG9wOiA4cHg7IH0KLnBvbGljeS1zZWN0aW9uIHsgYmFja2dyb3VuZDogdmFyKC0tY2FyZCk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6IDE2cHg7IHBhZGRpbmc6IDI4cHg7IG1hcmdpbi1ib3R0b206IDE2cHg7IHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjNzLCB0cmFuc2Zvcm0gMC4zczsgfQoucG9saWN5LXNlY3Rpb246aG92ZXIgeyBib3JkZXItY29sb3I6IHZhcigtLXB1cnBsZSk7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgzcHgpOyB9Ci5wb2xpY3ktc2VjdGlvbiBoMiB7IGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpOyBmb250LXNpemU6IDEuMDVyZW07IGZvbnQtd2VpZ2h0OiA3MDA7IG1hcmdpbi1ib3R0b206IDE0cHg7IGNvbG9yOiB2YXIoLS1wdXJwbGUtbGlnaHQpOyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDEwcHg7IH0KLnBvbGljeS1zZWN0aW9uIHAgeyBmb250LXNpemU6IDAuOTJyZW07IGNvbG9yOiB2YXIoLS1tdXRlZCk7IGxpbmUtaGVpZ2h0OiAxLjg7IG1hcmdpbi1ib3R0b206IDhweDsgfQoucG9saWN5LXNlY3Rpb24gdWwgeyBwYWRkaW5nLWxlZnQ6IDIwcHg7IH0KLnBvbGljeS1zZWN0aW9uIGxpIHsgZm9udC1zaXplOiAwLjkycmVtOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBsaW5lLWhlaWdodDogMS44OyBtYXJnaW4tYm90dG9tOiA2cHg7IH0KLnBvbGljeS1oaWdobGlnaHQgeyBiYWNrZ3JvdW5kOiByZ2JhKDEyNCw1OCwyMzcsMC4xKTsgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxMjQsNTgsMjM3LDAuMyk7IGJvcmRlci1yYWRpdXM6IDEycHg7IHBhZGRpbmc6IDE2cHggMjBweDsgbWFyZ2luLXRvcDogMTRweDsgZm9udC1zaXplOiAwLjg4cmVtOyBjb2xvcjogdmFyKC0td2hpdGUpOyBsaW5lLWhlaWdodDogMS43OyB9Ci5iYWNrLWJ0biB7IGRpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDhweDsgYmFja2dyb3VuZDogdmFyKC0tY2FyZCk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IHBhZGRpbmc6IDEwcHggMjBweDsgYm9yZGVyLXJhZGl1czogMTBweDsgZm9udC1zaXplOiAwLjg4cmVtOyBjdXJzb3I6IHBvaW50ZXI7IHRyYW5zaXRpb246IGFsbCAwLjJzOyBtYXJnaW4tYm90dG9tOiAzMnB4OyBmb250LWZhbWlseTogdmFyKC0tZm9udC1ib2R5KTsgfQouYmFjay1idG46aG92ZXIgeyBib3JkZXItY29sb3I6IHZhcigtLXB1cnBsZS1saWdodCk7IGNvbG9yOiB2YXIoLS13aGl0ZSk7IGJhY2tncm91bmQ6IHZhcigtLXB1cnBsZS1nbG93KTsgfQoKOjotd2Via2l0LXNjcm9sbGJhciB7IHdpZHRoOjZweDsgfQo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsgYmFja2dyb3VuZDp2YXIoLS1kZWVwKTsgfQo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsgYmFja2dyb3VuZDp2YXIoLS1ib3JkZXIpOyBib3JkZXItcmFkaXVzOjNweDsgfQo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsgYmFja2dyb3VuZDp2YXIoLS1wdXJwbGUpOyB9CgpAbWVkaWEgKG1heC13aWR0aDogNjAwcHgpIHsKICBoZWFkZXIgeyBwYWRkaW5nOiAxNHB4IDIwcHg7IH0KICBuYXYgYTpub3QoLmJ0bi1uYXYpIHsgZGlzcGxheTogbm9uZTsgfQogIC5oZXJvIHsgcGFkZGluZzogNTBweCAyMHB4IDQwcHg7IH0KICAudXBsb2FkLWNhcmQgeyBwYWRkaW5nOiAzNnB4IDIwcHg7IH0KICAuc3RhdHMtcm93IHsgZ2FwOiAyNHB4OyB9CiAgZm9vdGVyIHsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgdGV4dC1hbGlnbjogY2VudGVyOyB9CiAgLmZvb3Rlci1saW5rcyB7IGp1c3RpZnktY29udGVudDogY2VudGVyOyB9CiAgLnBvbGljeS1wYWdlIHsgcGFkZGluZzogNDBweCAyMHB4OyB9CiAgLmhpc3RvcnktZ3JpZCB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDMsMWZyKTsgZ2FwOjhweDsgfQogIC5tb2RhbC1ib3ggeyBib3JkZXItcmFkaXVzOjE2cHg7IH0KICAubW9kYWwtdG9wIHsgcGFkZGluZzoxNnB4OyB9CiAgLm1vZGFsLWxpbmtzIHsgcGFkZGluZzoxMnB4IDE2cHggMTZweDsgfQogIC5tb2RhbC1kZWwgeyBtYXJnaW46MCAxNnB4IDE2cHg7IHdpZHRoOmNhbGMoMTAwJSAtIDMycHgpOyB9CiAgLnByZXZpZXctYXJlYSB7IGZsZXgtZGlyZWN0aW9uOmNvbHVtbjsgYWxpZ24taXRlbXM6ZmxleC1zdGFydDsgfQogIC5saW5rcy1ncmlkIHsgcGFkZGluZzoxNHB4IDE2cHg7IH0KICAubGluay1jb250ZW50IHsgZmxleC13cmFwOndyYXA7IH0KICAubGluay1pbnB1dCB7IHdpZHRoOjEwMCU7IH0KfQo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoKPGRpdiBjbGFzcz0ib3JiIG9yYi0xIj48L2Rpdj4KPGRpdiBjbGFzcz0ib3JiIG9yYi0yIj48L2Rpdj4KPGRpdiBjbGFzcz0ib3JiIG9yYi0zIj48L2Rpdj4KPGRpdiBjbGFzcz0idG9hc3QiIGlkPSJ0b2FzdCI+PC9kaXY+Cgo8aGVhZGVyPgogIDxkaXYgY2xhc3M9ImxvZ28iIG9uY2xpY2s9InNob3dQYWdlKCdob21lJykiPgogICAgPGRpdiBjbGFzcz0ibG9nby1pY29uIj7wn5SXPC9kaXY+CiAgICA8c3Bhbj5TdWZpTGluazwvc3Bhbj4KICA8L2Rpdj4KICA8bmF2PgogICAgPGEgb25jbGljaz0ic2hvd1BhZ2UoJ2hvbWUnKSI+RmVhdHVyZXM8L2E+CiAgICA8YSBvbmNsaWNrPSJzaG93UGFnZSgncHJpdmFjeScpIj5Qcml2YWN5PC9hPgogICAgPGEgb25jbGljaz0ic2hvd1BhZ2UoJ3Rlcm1zJykiPlRlcm1zPC9hPgogICAgCiAgPC9uYXY+CjwvaGVhZGVyPgoKPCEtLSBIT01FIFBBR0UgLS0+CjxkaXYgaWQ9InBhZ2UtaG9tZSIgY2xhc3M9InBhZ2UgYWN0aXZlIj4KPG1haW4+CiAgPHNlY3Rpb24gY2xhc3M9Imhlcm8iPgogICAgPGRpdiBjbGFzcz0iYmFkZ2UiPkZyZWUgwrcgU2VjdXJlIMK3IFBlcm1hbmVudCBMaW5rczwvZGl2PgogICAgPGgxPlVwbG9hZCBJbWFnZXMsPGJyPkdldCA8c3BhbiBjbGFzcz0iYWNjZW50Ij5SZWFsIExpbmtzPC9zcGFuPjwvaDE+CiAgICA8cD5TdWZpTGluayBpcyB0aGUgZmFzdGVzdCBmcmVlIGltYWdlIGhvc3RpbmcgdG9vbCDigJQgdXBsb2FkIGFueSBpbWFnZSBhbmQgaW5zdGFudGx5IGdldCA4KyBwZXJtYW5lbnQgbGluayBmb3JtYXRzIGluY2x1ZGluZyBEaXJlY3QgVVJMLCBIVE1MLCBNYXJrZG93biwgQkJDb2RlLCBhbmQgV2ViUC4gTm8gc2lnbi11cCwgbm8gd2F0ZXJtYXJrcy4gWW91ciBsaW5rcyB3b3JrIGZvcmV2ZXIsIHBvd2VyZWQgYnkgQ2xvdWRpbmFyeSdzIGdsb2JhbCBDRE4uPC9wPgogICAgPGRpdiBjbGFzcz0ic3RhdHMtcm93Ij4KICAgICAgPGRpdiBjbGFzcz0ic3RhdCI+PGRpdiBjbGFzcz0ic3RhdC1udW0iPjEwMCU8L2Rpdj48ZGl2IGNsYXNzPSJzdGF0LWxhYmVsIj5GcmVlIEZvcmV2ZXI8L2Rpdj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic3RhdCI+PGRpdiBjbGFzcz0ic3RhdC1udW0iPuKInjwvZGl2PjxkaXYgY2xhc3M9InN0YXQtbGFiZWwiPlVubGltaXRlZCBVcGxvYWRzPC9kaXY+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InN0YXQiPjxkaXYgY2xhc3M9InN0YXQtbnVtIj44KzwvZGl2PjxkaXYgY2xhc3M9InN0YXQtbGFiZWwiPkxpbmsgRm9ybWF0czwvZGl2PjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzdGF0Ij48ZGl2IGNsYXNzPSJzdGF0LW51bSI+U1NMPC9kaXY+PGRpdiBjbGFzcz0ic3RhdC1sYWJlbCI+U2VjdXJlZDwvZGl2PjwvZGl2PgogICAgPC9kaXY+CgogIDwhLS0gTmF0aXZlIEFkIFNsb3QgLS0+CiAgPGRpdiBzdHlsZT0ibWF4LXdpZHRoOjc2MHB4O21hcmdpbjotMTBweCBhdXRvIDIwcHg7cGFkZGluZzowIDIwcHg7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoyO3RleHQtYWxpZ246Y2VudGVyOyIgaWQ9Im5hdGl2ZS1hZC1zbG90Ij4KICA8L2Rpdj4KICA8L3NlY3Rpb24+CgogIDxzZWN0aW9uIGNsYXNzPSJ1cGxvYWQtc2VjdGlvbiI+CiAgICA8ZGl2IGNsYXNzPSJ1cGxvYWQtY2FyZCIgaWQ9ImRyb3Bab25lIj4KICAgICAgPGRpdiBjbGFzcz0idXBsb2FkLWljb24iPvCflrzvuI88L2Rpdj4KICAgICAgPGgyPkRyb3AgSW1hZ2UgSGVyZTwvaDI+CiAgICAgIDxwPkRyYWcgJiBkcm9wIG9yIGNob29zZSBmcm9tIHlvdXIgZ2FsbGVyeTwvcD4KICAgICAgPGRpdiBjbGFzcz0iZm9ybWF0LXRhZ3MiPgogICAgICAgIDxzcGFuIGNsYXNzPSJ0YWciPkpQRzwvc3Bhbj48c3BhbiBjbGFzcz0idGFnIj5QTkc8L3NwYW4+PHNwYW4gY2xhc3M9InRhZyI+R0lGPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJ0YWciPldlYlA8L3NwYW4+PHNwYW4gY2xhc3M9InRhZyI+U1ZHPC9zcGFuPjxzcGFuIGNsYXNzPSJ0YWciPkJNUDwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0idGFnIj5USUZGPC9zcGFuPjxzcGFuIGNsYXNzPSJ0YWciPkFWSUY8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8YnV0dG9uIGNsYXNzPSJidG4tdXBsb2FkIiBpZD0idXBsb2FkQnRuIj7wn5OBIENob29zZSBmcm9tIEdhbGxlcnk8L2J1dHRvbj4KICAgICAgPGRpdiBjbGFzcz0icHJvZ3Jlc3Mtd3JhcCIgaWQ9InByb2dyZXNzV3JhcCI+CiAgICAgICAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIj48ZGl2IGNsYXNzPSJwcm9ncmVzcy1maWxsIiBpZD0icHJvZ3Jlc3NGaWxsIj48L2Rpdj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcm9ncmVzcy10ZXh0IiBpZD0icHJvZ3Jlc3NUZXh0Ij5VcGxvYWRpbmcgdG8gU3VmaUxpbmsuLi48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxpbnB1dCB0eXBlPSJmaWxlIiBpZD0iZmlsZUlucHV0IiBhY2NlcHQ9ImltYWdlLyoiIG11bHRpcGxlPgogICAgPC9kaXY+CiAgPC9zZWN0aW9uPgoKICA8c2VjdGlvbiBpZD0icmVzdWx0c1NlY3Rpb24iPgogICAgPGRpdiBpZD0icmVzdWx0c0NvbnRhaW5lciI+PC9kaXY+CiAgPC9zZWN0aW9uPgoKICA8c2VjdGlvbiBpZD0iZ2FsbGVyeVNlY3Rpb24iPgogICAgPGgyIGNsYXNzPSJzZWN0aW9uLXRpdGxlIj7wn5O4IDxzcGFuPllvdXIgR2FsbGVyeTwvc3Bhbj48L2gyPgogICAgPGRpdiBjbGFzcz0iZ2FsbGVyeS1ncmlkIiBpZD0iZ2FsbGVyeUdyaWQiPjwvZGl2PgogIDwvc2VjdGlvbj4KCiAgPCEtLSBISVNUT1JZIFNFQ1RJT04gLS0+CiAgPHNlY3Rpb24gaWQ9Imhpc3RvcnlTZWN0aW9uIiBzdHlsZT0iZGlzcGxheTpub25lOyI+CiAgICA8ZGl2IGNsYXNzPSJoaXN0b3J5LWhlYWRlciI+CiAgICAgIDxoMiBjbGFzcz0ic2VjdGlvbi10aXRsZSIgc3R5bGU9Im1hcmdpbi1ib3R0b206MDsiPvCfl4LvuI8gPHNwYW4+VXBsb2FkIEhpc3Rvcnk8L3NwYW4+PC9oMj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuLWRlbGV0ZS1hbGwiIG9uY2xpY2s9ImRlbGV0ZUFsbEhpc3RvcnkoKSI+8J+Xke+4jyBEZWxldGUgQWxsPC9idXR0b24+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9Imhpc3RvcnktZ3JpZCIgaWQ9Imhpc3RvcnlHcmlkIj48L2Rpdj4KICAgIDxkaXYgY2xhc3M9InNob3ctbW9yZS13cmFwIiBpZD0ic2hvd01vcmVXcmFwIiBzdHlsZT0iZGlzcGxheTpub25lOyI+CiAgICAgIDxidXR0b24gY2xhc3M9ImJ0bi1zaG93LW1vcmUiIG9uY2xpY2s9InNob3dNb3JlSGlzdG9yeSgpIj5TaG93IE1vcmUg4oaTPC9idXR0b24+CiAgICA8L2Rpdj4KICA8L3NlY3Rpb24+CgogIDwhLS0gTU9EQUwgLS0+CiAgPGRpdiBjbGFzcz0ibW9kYWwtYmciIGlkPSJtb2RhbEJnIiBvbmNsaWNrPSJjbG9zZU1vZGFsKGV2ZW50KSI+CiAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib3giPgogICAgICA8ZGl2IGNsYXNzPSJtb2RhbC10b3AiPgogICAgICAgIDxpbWcgY2xhc3M9Im1vZGFsLWltZyIgaWQ9Im1vZGFsSW1nIiBzcmM9IiIgYWx0PSIiPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWluZm8iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtbmFtZSIgaWQ9Im1vZGFsTmFtZSI+PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1tZXRhIiBpZD0ibW9kYWxNZXRhIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJtb2RhbC1jbG9zZSIgb25jbGljaz0iY2xvc2VNb2RhbERpcmVjdCgpIj7inJU8L2J1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWxpbmtzIiBpZD0ibW9kYWxMaW5rcyI+PC9kaXY+CiAgICAgIDxidXR0b24gY2xhc3M9Im1vZGFsLWRlbCIgaWQ9Im1vZGFsRGVsQnRuIiBvbmNsaWNrPSJkZWxldGVGcm9tTW9kYWwoKSI+8J+Xke+4jyBSZW1vdmUgZnJvbSBIaXN0b3J5PC9idXR0b24+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPHNlY3Rpb24gY2xhc3M9ImZlYXR1cmVzIiBpZD0iZmVhdHVyZXMiPgogICAgPGgyIGNsYXNzPSJzZWN0aW9uLXRpdGxlIj7inKggPHNwYW4+V2h5IFN1ZmlMaW5rPzwvc3Bhbj48L2gyPgogICAgPGRpdiBjbGFzcz0iZmVhdHVyZXMtZ3JpZCI+CiAgICAgIDxhcnRpY2xlIGNsYXNzPSJmZWF0dXJlLWNhcmQiPjxzcGFuIGNsYXNzPSJmZWF0dXJlLWljb24iPuKaoTwvc3Bhbj48aDQ+TGlnaHRuaW5nIEZhc3Q8L2g0PjxwPlN1ZmlMaW5rIGRlbGl2ZXJzIHlvdXIgaW1hZ2VzIGF0IGJsYXppbmcgc3BlZWQg4oCUIGluc3RhbnQgbG9hZCBmcm9tIGFueXdoZXJlIGluIHRoZSB3b3JsZC48L3A+PC9hcnRpY2xlPgogICAgICA8YXJ0aWNsZSBjbGFzcz0iZmVhdHVyZS1jYXJkIj48c3BhbiBjbGFzcz0iZmVhdHVyZS1pY29uIj7wn5SSPC9zcGFuPjxoND5GdWxseSBTZWN1cmU8L2g0PjxwPkFsbCBpbWFnZXMgc2VydmVkIG92ZXIgSFRUUFMuIFlvdXIgZGF0YSBpcyBmdWxseSBzZWN1cmUuPC9wPjwvYXJ0aWNsZT4KICAgICAgPGFydGljbGUgY2xhc3M9ImZlYXR1cmUtY2FyZCI+PHNwYW4gY2xhc3M9ImZlYXR1cmUtaWNvbiI+8J+Ulzwvc3Bhbj48aDQ+QWxsIExpbmsgVHlwZXM8L2g0PjxwPkRpcmVjdCBVUkwsIEhUTUwsIE1hcmtkb3duLCBCQkNvZGUg4oCUIGFsbCBpbiBvbmUgcGxhY2UuPC9wPjwvYXJ0aWNsZT4KICAgICAgPGFydGljbGUgY2xhc3M9ImZlYXR1cmUtY2FyZCI+PHNwYW4gY2xhc3M9ImZlYXR1cmUtaWNvbiI+8J+TsTwvc3Bhbj48aDQ+TW9iaWxlIFJlYWR5PC9oND48cD5QaG9uZSwgdGFibGV0LCBkZXNrdG9wIOKAlCB3b3JrcyBwZXJmZWN0bHkgZXZlcnl3aGVyZS48L3A+PC9hcnRpY2xlPgogICAgICA8YXJ0aWNsZSBjbGFzcz0iZmVhdHVyZS1jYXJkIj48c3BhbiBjbGFzcz0iZmVhdHVyZS1pY29uIj7imb7vuI88L3NwYW4+PGg0PlBlcm1hbmVudCBMaW5rczwvaDQ+PHA+VXBsb2FkIG9uY2UsIHRoZSBsaW5rIHdvcmtzIGZvcmV2ZXIuPC9wPjwvYXJ0aWNsZT4KICAgICAgPGFydGljbGUgY2xhc3M9ImZlYXR1cmUtY2FyZCI+PHNwYW4gY2xhc3M9ImZlYXR1cmUtaWNvbiI+8J+Gkzwvc3Bhbj48aDQ+MTAwJSBGcmVlPC9oND48cD5ObyBhY2NvdW50LCBubyBmZWVzLCBubyB3YXRlcm1hcmtzLiAxMDAlIGZyZWUgZm9yZXZlci48L3A+PC9hcnRpY2xlPgogICAgPC9kaXY+CiAgPC9zZWN0aW9uPgoKICA8IS0tIEJhbm5lciBBZCBTbG90IC0tPgogIDxkaXYgc3R5bGU9Im1heC13aWR0aDo3NjBweDttYXJnaW46MCBhdXRvIDMwcHg7cGFkZGluZzowIDIwcHg7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoyO3RleHQtYWxpZ246Y2VudGVyOyIgaWQ9ImJhbm5lci1hZC1zbG90Ij4KICA8L2Rpdj4KPC9tYWluPgo8L2Rpdj4KCjwhLS0gUFJJVkFDWSBQT0xJQ1kgUEFHRSAtLT4KPGRpdiBpZD0icGFnZS1wcml2YWN5IiBjbGFzcz0icGFnZSI+CjxkaXYgY2xhc3M9InBvbGljeS1wYWdlIj4KICA8YnV0dG9uIGNsYXNzPSJiYWNrLWJ0biIgb25jbGljaz0ic2hvd1BhZ2UoJ2hvbWUnKSI+4oaQIEdvIEJhY2s8L2J1dHRvbj4KICA8aDE+8J+UkiA8c3BhbiBjbGFzcz0iYWNjZW50Ij5Qcml2YWN5IFBvbGljeTwvc3Bhbj48L2gxPgogIDxwIGNsYXNzPSJwb2xpY3ktZGF0ZSI+TGFzdCB1cGRhdGVkOiBNYXJjaCAyMDI2IMK3IFN1ZmlMaW5rIEltYWdlIEhvc3RpbmcgU2VydmljZTwvcD4KCiAgPGRpdiBjbGFzcz0icG9saWN5LXNlY3Rpb24iPgogICAgPGgyPvCfkYsgV2VsY29tZTwvaDI+CiAgICA8cD5TdWZpTGluayB0YWtlcyB5b3VyIHByaXZhY3kgc2VyaW91c2x5LiBUaGlzIHBvbGljeSBleHBsYWlucyB3aGF0IHdlIGRvIHdpdGggeW91ciBpbmZvcm1hdGlvbiB3aGVuIHlvdSB1c2Ugb3VyIHNlcnZpY2UuPC9wPgogICAgPGRpdiBjbGFzcz0icG9saWN5LWhpZ2hsaWdodCI+8J+boe+4jyBTaG9ydCBhbnN3ZXI6IFdlIGRvIG5vdCBjb2xsZWN0IGFueSBwZXJzb25hbCBkYXRhIGFuZCBuZXZlciBzZWxsIHlvdXIgaW1hZ2VzIHRvIGFueW9uZS48L2Rpdj4KICA8L2Rpdj4KCiAgPGRpdiBjbGFzcz0icG9saWN5LXNlY3Rpb24iPgogICAgPGgyPvCfk7ggWW91ciBJbWFnZXM8L2gyPgogICAgPHVsPgogICAgICA8bGk+WW91ciBpbWFnZXMgYXJlIHN0b3JlZCBvbiBDbG91ZGluYXJ5J3Mgc2VjdXJlIHNlcnZlcnMuPC9saT4KICAgICAgPGxpPllvdXIgaW1hZ2VzIGFyZSBhY2Nlc3NpYmxlIG9ubHkgdmlhIHRoZSBsaW5rIGluIHlvdXIgcG9zc2Vzc2lvbi48L2xpPgogICAgICA8bGk+V2UgZG8gbm90IHNlbGwgeW91ciBpbWFnZXMgdG8gYW55IHRoaXJkIHBhcnR5LjwvbGk+CiAgICAgIDxsaT5XZSBkbyBub3QgdXNlIHlvdXIgaW1hZ2VzIGZvciBhZHZlcnRpc2luZy48L2xpPgogICAgICA8bGk+VGhlcmUgaXMgbm8gcHVibGljIGluZGV4IG9yIGdhbGxlcnkgb2YgeW91ciBpbWFnZXMuPC9saT4KICAgIDwvdWw+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9InBvbGljeS1zZWN0aW9uIj4KICAgIDxoMj7wn42qIENvb2tpZXMgYW5kIFRyYWNraW5nPC9oMj4KICAgIDxwPlN1ZmlMaW5rIGRvZXMgbm90IHVzZSBhbnkgdHJhY2tpbmcgY29va2llcy4gV2UgZG8gbm90IHRyYWNrIHlvdXIgYnJvd3NpbmcuIE5vIHRoaXJkLXBhcnR5IGFuYWx5dGljcy48L3A+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9InBvbGljeS1zZWN0aW9uIj4KICAgIDxoMj7wn5OKIERhdGEgQ29sbGVjdGlvbjwvaDI+CiAgICA8cD5XZSBjb2xsZWN0IG5vIHBlcnNvbmFsIGluZm9ybWF0aW9uIOKAlCBubyBuYW1lLCBubyBlbWFpbCwgbm8gcGhvbmUgbnVtYmVyLiBObyBhY2NvdW50IGlzIHJlcXVpcmVkIHRvIHVzZSB0aGUgc2VydmljZS48L3A+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9InBvbGljeS1zZWN0aW9uIj4KICAgIDxoMj7imqDvuI8gUHJvaGliaXRlZCBDb250ZW50PC9oMj4KICAgIDxwPlVwbG9hZGluZyB0aGUgZm9sbG93aW5nIGNvbnRlbnQgaXMgc3RyaWN0bHkgcHJvaGliaXRlZDo8L3A+CiAgICA8dWw+CiAgICAgIDxsaT5BbnkgaWxsZWdhbCBvciBoYXJtZnVsIGNvbnRlbnQ8L2xpPgogICAgICA8bGk+Q29weXJpZ2h0ZWQgaW1hZ2VzIG9mIG90aGVycyB3aXRob3V0IHBlcm1pc3Npb248L2xpPgogICAgICA8bGk+T2ZmZW5zaXZlLCBpbmFwcHJvcHJpYXRlLCBvciBhZHVsdC1vbmx5IGNvbnRlbnQ8L2xpPgogICAgICA8bGk+SW1hZ2VzIHRoYXQgdmlvbGF0ZSBvdGhlcnMnIHByaXZhY3k8L2xpPgogICAgPC91bD4KICAgIDxwPlN1Y2ggaW1hZ2VzIG1heSBiZSByZW1vdmVkIHdpdGhvdXQgbm90aWNlLjwvcD4KICA8L2Rpdj4KCiAgPGRpdiBjbGFzcz0icG9saWN5LXNlY3Rpb24iPgogICAgPGgyPvCfk6cgQ29udGFjdDwvaDI+CiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgY29uY2VybnMgb3IgbmVlZCB0byByZXBvcnQgYW4gaW1hZ2UsIHBsZWFzZSBjb250YWN0IHVzLiBXZSB3aWxsIGRvIG91ciBiZXN0IHRvIGFzc2lzdCB5b3UuPC9wPgogIDwvZGl2Pgo8L2Rpdj4KPC9kaXY+Cgo8IS0tIFRFUk1TIE9GIFNFUlZJQ0UgUEFHRSAtLT4KPGRpdiBpZD0icGFnZS10ZXJtcyIgY2xhc3M9InBhZ2UiPgo8ZGl2IGNsYXNzPSJwb2xpY3ktcGFnZSI+CiAgPGJ1dHRvbiBjbGFzcz0iYmFjay1idG4iIG9uY2xpY2s9InNob3dQYWdlKCdob21lJykiPuKGkCBHbyBCYWNrPC9idXR0b24+CiAgPGgxPvCfk4sgPHNwYW4gY2xhc3M9ImFjY2VudCI+VGVybXMgb2YgU2VydmljZTwvc3Bhbj48L2gxPgogIDxwIGNsYXNzPSJwb2xpY3ktZGF0ZSI+TGFzdCB1cGRhdGVkOiBNYXJjaCAyMDI2IMK3IFN1ZmlMaW5rIEltYWdlIEhvc3RpbmcgU2VydmljZTwvcD4KCiAgPGRpdiBjbGFzcz0icG9saWN5LXNlY3Rpb24iPgogICAgPGgyPuKchSBTZXJ2aWNlIEFncmVlbWVudDwvaDI+CiAgICA8cD5CeSB1c2luZyBTdWZpTGluaywgeW91IGFncmVlIHRvIHRoZXNlIHRlcm1zLiBUaGlzIGlzIGEgZnJpZW5kbHkgYWdyZWVtZW50IOKAlCB3ZSB3YW50IHRoZSBzZXJ2aWNlIHRvIGJlIGdyZWF0IGZvciBldmVyeW9uZS48L3A+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9InBvbGljeS1zZWN0aW9uIj4KICAgIDxoMj7wn4aTIEZyZWUgU2VydmljZTwvaDI+CiAgICA8cD5TdWZpTGluayBpcyBjb21wbGV0ZWx5IGZyZWUuIE5vIGhpZGRlbiBjaGFyZ2VzLCBubyBwcmVtaXVtIHBsYW5zLjwvcD4KICAgIDxkaXYgY2xhc3M9InBvbGljeS1oaWdobGlnaHQiPldlIG1ha2UgZXZlcnkgZWZmb3J0IHRvIHBlcm1hbmVudGx5IGhvc3QgeW91ciBpbWFnZXMgYW5kIGxlYXZlIG5vIHN0b25lIHVudHVybmVkIG9uIG91ciBlbmQuPC9kaXY+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9InBvbGljeS1zZWN0aW9uIj4KICAgIDxoMj7impbvuI8gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHk8L2gyPgogICAgPHVsPgogICAgICA8bGk+U3VmaUxpbmsgaXMgYSBmcmVlIHNlcnZpY2Ug4oCUIHdlIGRvIG91ciBhYnNvbHV0ZSBiZXN0LjwvbGk+CiAgICAgIDxsaT5UaGlzIHNlcnZpY2UgZGVwZW5kcyBvbiBDbG91ZGluYXJ5IChhIHRoaXJkIHBhcnR5KS4gSWYgYW4gaW1hZ2UgaXMgZGVsZXRlZCBkdWUgdG8gYW55IHRlY2huaWNhbCBvciBleHRlcm5hbCByZWFzb24sIFN1ZmlMaW5rIHdpbGwgbm90IGJlIGhlbGQgcmVzcG9uc2libGUuPC9saT4KICAgICAgPGxpPldlIHJlY29tbWVuZCBrZWVwaW5nIGEgYmFja3VwIG9mIGltcG9ydGFudCBpbWFnZXMgb24geW91ciBvd24gZGV2aWNlLjwvbGk+CiAgICAgIDxsaT5JbiB0aGUgZXZlbnQgb2YgYW55IHNlcnZpY2UgaW50ZXJydXB0aW9uLCB3ZSB3aWxsIHJlc3RvcmUgYW5kIHJlc29sdmUgdGhlIGlzc3VlIGFzIHF1aWNrbHkgYXMgcG9zc2libGUuPC9saT4KICAgIDwvdWw+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9InBvbGljeS1zZWN0aW9uIj4KICAgIDxoMj7wn5qrIFByb2hpYml0ZWQgVXNlPC9oMj4KICAgIDx1bD4KICAgICAgPGxpPkRvIG5vdCB1c2UgdGhlIHNlcnZpY2UgZm9yIGFueSBpbGxlZ2FsIGFjdGl2aXR5LjwvbGk+CiAgICAgIDxsaT5BY2Nlc3MgbWF5IGJlIHN1c3BlbmRlZCBpbiBjYXNlcyBvZiBzcGFtIG9yIGFidXNlLjwvbGk+CiAgICAgIDxsaT5EbyBub3QgdXBsb2FkIGltYWdlcyB0aGF0IHZpb2xhdGUgb3RoZXJzJyBwcml2YWN5LjwvbGk+CiAgICAgIDxsaT5EbyBub3QgYXR0ZW1wdCB0byBkZWxpYmVyYXRlbHkgb3ZlcmxvYWQgdGhlIHNlcnZpY2UuPC9saT4KICAgIDwvdWw+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9InBvbGljeS1zZWN0aW9uIj4KICAgIDxoMj7wn5SEIENoYW5nZXMgdG8gVGVybXM8L2gyPgogICAgPHA+V2UgbWF5IHVwZGF0ZSB0aGVzZSB0ZXJtcyBhdCBhbnkgdGltZS4gQ29udGludWVkIHVzZSBvZiB0aGUgc2VydmljZSBjb25zdGl0dXRlcyBhZ3JlZW1lbnQgdG8gdGhlIG5ldyB0ZXJtcy48L3A+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9InBvbGljeS1zZWN0aW9uIj4KICAgIDxoMj7wn6SdIE91ciBQcm9taXNlPC9oMj4KICAgIDxwPlN1ZmlMaW5rIGlzIGEgdHJ1c3RlZCwgZnJlZSwgYW5kIGhvbmVzdCBzZXJ2aWNlLiBXZSB3aWxsIGFsd2F5cyBiZSB0cmFuc3BhcmVudCB3aXRoIHlvdSBhbmQgZG8gZXZlcnl0aGluZyB0byBtYWludGFpbiB5b3VyIHRydXN0LjwvcD4KICAgIDxkaXYgY2xhc3M9InBvbGljeS1oaWdobGlnaHQiPuKciiBTdWZpTGluaydzIHByb21pc2U6IHlvdXIgaW1hZ2VzIHNlY3VyZSwgeW91ciBkYXRhIHByaXZhdGUsIGFuZCB0aGUgc2VydmljZSBhbHdheXMgZnJlZS48L2Rpdj4KICA8L2Rpdj4KPC9kaXY+CjwvZGl2PgoKPGZvb3Rlcj4KICA8ZGl2IGNsYXNzPSJsb2dvIiBvbmNsaWNrPSJzaG93UGFnZSgnaG9tZScpIj4KICAgIDxkaXYgY2xhc3M9ImxvZ28taWNvbiI+8J+UlzwvZGl2PgogICAgPHNwYW4+U3VmaUxpbms8L3NwYW4+CiAgPC9kaXY+CiAgPHA+wqkgMjAyNiBTdWZpTGluayDCtyBGcmVlIEltYWdlIEhvc3Rpbmc8L3A+CiAgPHAgc3R5bGU9ImZvbnQtc2l6ZTowLjc1cmVtO2NvbG9yOiM0NzU1Njk7Zm9udC1mYW1pbHk6J1NwYWNlIE1vbm8nLG1vbm9zcGFjZTsiPlBvd2VyZWQgYnkgPGEgaHJlZj0iaHR0cHM6Ly9zdWZpem9uYS5jb20iIHRhcmdldD0iX2JsYW5rIiBzdHlsZT0iY29sb3I6I2E4NTVmNzt0ZXh0LWRlY29yYXRpb246bm9uZTtmb250LXdlaWdodDo3MDA7Ij5TdWZpWm9uYTwvYT48L3A+CiAgPGRpdiBjbGFzcz0iZm9vdGVyLWxpbmtzIj4KICAgIDxhIG9uY2xpY2s9InNob3dQYWdlKCdwcml2YWN5JykiPlByaXZhY3kgUG9saWN5PC9hPgogICAgPGEgb25jbGljaz0ic2hvd1BhZ2UoJ3Rlcm1zJykiPlRlcm1zIG9mIFNlcnZpY2U8L2E+CiAgICA8YSBvbmNsaWNrPSJzaG93UGFnZSgnaG9tZScpIj5Ib21lPC9hPgogIDwvZGl2PgoKICA8IS0tIEZvb3RlciBEZXNjcmlwdGlvbiAtLT4KICA8ZGl2IHN0eWxlPSIKICAgIHdpZHRoOjEwMCU7CiAgICBiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcscmdiYSgxMjQsNTgsMjM3LDAuMTApLHJnYmEoMzQsMTk3LDk0LDAuMDYpKTsKICAgIGJvcmRlcjoxcHggc29saWQgcmdiYSgxMjQsNTgsMjM3LDAuMjApOwogICAgYm9yZGVyLXJhZGl1czoxNHB4OwogICAgcGFkZGluZzoyMHB4IDI4cHg7CiAgICBtYXJnaW4tdG9wOjE2cHg7CiAgICB0ZXh0LWFsaWduOmNlbnRlcjsKICAgIGZvbnQtZmFtaWx5OidETSBTYW5zJyxzYW5zLXNlcmlmOwogICAgZm9udC1zaXplOjAuODByZW07CiAgICBsaW5lLWhlaWdodDoxLjk7CiAgICBjb2xvcjojNjQ3NDhiOwogICAgZmxleC1iYXNpczoxMDAlOwogICAgb3JkZXI6MTA7CiAgIj4KICAgIDxzdHJvbmcgc3R5bGU9ImJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLCNhODU1ZjcsIzIyYzU1ZSk7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6dGV4dDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDtmb250LXNpemU6MC44OHJlbTtmb250LXdlaWdodDo3MDA7Ij5TdWZpTGluazwvc3Ryb25nPgogICAgJm5ic3A74oCUIEZyZWUgSW1hZ2UgSG9zdGluZyAmYW1wOyBQZXJtYW5lbnQgTGluayBHZW5lcmF0b3IuPGJyPgogICAgVXBsb2FkIGltYWdlcyBpbnN0YW50bHkgYW5kIGdldCBkaXJlY3QgbGlua3MgaW4gOCsgZm9ybWF0czogRGlyZWN0IFVSTCwgSFRNTCwgTWFya2Rvd24sIEJCQ29kZSwgV2ViUCwgYW5kIG1vcmUuIAogICAgTm8gYWNjb3VudCByZXF1aXJlZC4gTm8gd2F0ZXJtYXJrcy4gMTAwJSBmcmVlIGZvcmV2ZXIuIFBvd2VyZWQgYnkgQ2xvdWRpbmFyeSBDRE4gZm9yIGJsYXppbmctZmFzdCBnbG9iYWwgZGVsaXZlcnkuPGJyPgogICAgPHNwYW4gc3R5bGU9ImNvbG9yOiM0NzU1Njk7Zm9udC1zaXplOjAuNzVyZW07Zm9udC1mYW1pbHk6J1NwYWNlIE1vbm8nLG1vbm9zcGFjZTsiPgogICAgICAmY29weTsgMjAyNiBTdWZpTGluayAmbmJzcDvCtyZuYnNwOwogICAgICA8YSBvbmNsaWNrPSJzaG93UGFnZSgncHJpdmFjeScpIiBzdHlsZT0iY29sb3I6IzdjM2FlZDt0ZXh0LWRlY29yYXRpb246bm9uZTtjdXJzb3I6cG9pbnRlcjsiPlByaXZhY3kgUG9saWN5PC9hPgogICAgICAmbmJzcDvCtyZuYnNwOwogICAgICA8YSBvbmNsaWNrPSJzaG93UGFnZSgndGVybXMnKSIgc3R5bGU9ImNvbG9yOiM3YzNhZWQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y3Vyc29yOnBvaW50ZXI7Ij5UZXJtcyBvZiBTZXJ2aWNlPC9hPgogICAgICAmbmJzcDvCtyZuYnNwOyBGcmVlICZuYnNwO8K3Jm5ic3A7IFNlY3VyZSAmbmJzcDvCtyZuYnNwOyBQZXJtYW5lbnQgTGlua3MKICAgIDwvc3Bhbj4KICA8L2Rpdj4KCjwvZm9vdGVyPgoKPHNjcmlwdD4KLy8gU2VjdXJpdHkKKGZ1bmN0aW9uKCl7CiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKTtyZXR1cm4gZmFsc2U7fSk7CiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsZnVuY3Rpb24oZSl7CiAgICBpZihlLmtleUNvZGU9PT0xMjMpe2UucHJldmVudERlZmF1bHQoKTtyZXR1cm4gZmFsc2U7fQogICAgaWYoZS5jdHJsS2V5JiZlLnNoaWZ0S2V5JiYoZS5rZXlDb2RlPT09NzN8fGUua2V5Q29kZT09PTc0KSl7ZS5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiBmYWxzZTt9CiAgICBpZihlLmN0cmxLZXkmJmUua2V5Q29kZT09PTg1KXtlLnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIGZhbHNlO30KICB9KTsKICBzZXRJbnRlcnZhbChmdW5jdGlvbigpewogICAgdmFyIHM9bmV3IERhdGUoKTsKICAgIGRlYnVnZ2VyOwogICAgaWYobmV3IERhdGUoKS1zPjEwMCl7ZG9jdW1lbnQuYm9keS5zdHlsZS5kaXNwbGF5PSdub25lJzt9CiAgfSwzMDAwKTsKfSkoKTsKPC9zY3JpcHQ+CjxzY3JpcHQ+Ci8vID09PT09IFBBR0UgTkFWSUdBVElPTiA9PT09PQpmdW5jdGlvbiBzaG93UGFnZShuYW1lKSB7CiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnBhZ2UnKS5mb3JFYWNoKHAgPT4gcC5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKSk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhZ2UtJyArIG5hbWUpLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOwogIHdpbmRvdy5zY3JvbGxUbyh7IHRvcDogMCwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pOwogIHBsYXlTb3VuZCgnY2xpY2snKTsKfQoKLy8gPT09PT0gU09VTkQgRUZGRUNUUyA9PT09PQpsZXQgYXVkaW9DdHggPSBudWxsOwpmdW5jdGlvbiBnZXRDdHgoKSB7CiAgaWYgKCFhdWRpb0N0eCkgewogICAgdHJ5IHsgYXVkaW9DdHggPSBuZXcgKHdpbmRvdy5BdWRpb0NvbnRleHQgfHwgd2luZG93LndlYmtpdEF1ZGlvQ29udGV4dCkoKTsgfSBjYXRjaChlKSB7fQogIH0KICByZXR1cm4gYXVkaW9DdHg7Cn0KZnVuY3Rpb24gcGxheVNvdW5kKHR5cGUpIHsKICB0cnkgewogICAgY29uc3QgY3R4ID0gZ2V0Q3R4KCk7CiAgICBpZiAoIWN0eCkgcmV0dXJuOwogICAgaWYgKGN0eC5zdGF0ZSA9PT0gJ3N1c3BlbmRlZCcpIGN0eC5yZXN1bWUoKTsKICAgIGNvbnN0IG9zYyA9IGN0eC5jcmVhdGVPc2NpbGxhdG9yKCk7CiAgICBjb25zdCBnYWluID0gY3R4LmNyZWF0ZUdhaW4oKTsKICAgIG9zYy5jb25uZWN0KGdhaW4pOwogICAgZ2Fpbi5jb25uZWN0KGN0eC5kZXN0aW5hdGlvbik7CiAgICBjb25zdCB0ID0gY3R4LmN1cnJlbnRUaW1lOwogICAgaWYgKHR5cGUgPT09ICdjbGljaycpIHsKICAgICAgb3NjLnR5cGUgPSAnc2luZSc7IG9zYy5mcmVxdWVuY3kudmFsdWUgPSA0MDA7CiAgICAgIGdhaW4uZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLjA0LCB0KTsKICAgICAgZ2Fpbi5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoMC4wMDEsIHQgKyAwLjA3KTsKICAgICAgb3NjLnN0YXJ0KHQpOyBvc2Muc3RvcCh0ICsgMC4wNyk7CiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd1cGxvYWQnKSB7CiAgICAgIG9zYy50eXBlID0gJ3NpbmUnOwogICAgICBvc2MuZnJlcXVlbmN5LnNldFZhbHVlQXRUaW1lKDMwMCwgdCk7CiAgICAgIG9zYy5mcmVxdWVuY3kuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSg2MDAsIHQgKyAwLjIpOwogICAgICBnYWluLmdhaW4uc2V0VmFsdWVBdFRpbWUoMC4wOCwgdCk7CiAgICAgIGdhaW4uZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKDAuMDAxLCB0ICsgMC4zKTsKICAgICAgb3NjLnN0YXJ0KHQpOyBvc2Muc3RvcCh0ICsgMC4zKTsKICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2NvcHknKSB7CiAgICAgIG9zYy50eXBlID0gJ3NpbmUnOwogICAgICBvc2MuZnJlcXVlbmN5LnNldFZhbHVlQXRUaW1lKDcwMCwgdCk7CiAgICAgIG9zYy5mcmVxdWVuY3kuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSgxMDAwLCB0ICsgMC4xKTsKICAgICAgZ2Fpbi5nYWluLnNldFZhbHVlQXRUaW1lKDAuMDYsIHQpOwogICAgICBnYWluLmdhaW4uZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSgwLjAwMSwgdCArIDAuMTUpOwogICAgICBvc2Muc3RhcnQodCk7IG9zYy5zdG9wKHQgKyAwLjE1KTsKICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3N1Y2Nlc3MnKSB7CiAgICAgIGNvbnN0IG9zYzIgPSBjdHguY3JlYXRlT3NjaWxsYXRvcigpOwogICAgICBjb25zdCBnYWluMiA9IGN0eC5jcmVhdGVHYWluKCk7CiAgICAgIG9zYzIuY29ubmVjdChnYWluMik7IGdhaW4yLmNvbm5lY3QoY3R4LmRlc3RpbmF0aW9uKTsKICAgICAgb3NjLnR5cGUgPSAnc2luZSc7IG9zYy5mcmVxdWVuY3kudmFsdWUgPSA1MjM7CiAgICAgIGdhaW4uZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLjA4LCB0KTsgZ2Fpbi5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoMC4wMDEsIHQgKyAwLjIpOwogICAgICBvc2Muc3RhcnQodCk7IG9zYy5zdG9wKHQgKyAwLjIpOwogICAgICBvc2MyLnR5cGUgPSAnc2luZSc7IG9zYzIuZnJlcXVlbmN5LnZhbHVlID0gNzg0OwogICAgICBnYWluMi5nYWluLnNldFZhbHVlQXRUaW1lKDAuMDgsIHQgKyAwLjE4KTsgZ2FpbjIuZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKDAuMDAxLCB0ICsgMC40KTsKICAgICAgb3NjMi5zdGFydCh0ICsgMC4xOCk7IG9zYzIuc3RvcCh0ICsgMC40KTsKICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2Vycm9yJykgewogICAgICBvc2MudHlwZSA9ICdzYXd0b290aCc7IG9zYy5mcmVxdWVuY3kudmFsdWUgPSAyMDA7CiAgICAgIGdhaW4uZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLjA2LCB0KTsgZ2Fpbi5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoMC4wMDEsIHQgKyAwLjMpOwogICAgICBvc2Muc3RhcnQodCk7IG9zYy5zdG9wKHQgKyAwLjMpOwogICAgfQogIH0gY2F0Y2goZSkge30KfQoKLy8gPT09PT0gQ0xPVURJTkFSWSBDT05GSUcgPT09PT0KY29uc3QgQ0xPVURfTkFNRSA9ICdkd2FrZmxneGcnOwpjb25zdCBVUExPQURfUFJFU0VUID0gJ3N1ZmlsaW5rJzsKCi8vID09PT09IExPQ0FMIFNUT1JBR0UgPT09PT0KY29uc3QgTFNfS0VZID0gJ3N1ZmlsaW5rX2hpc3RvcnknOwpjb25zdCBWSVNJQkxFX0NPVU5UID0gMzsKbGV0IGhpc3RvcnlTaG93QWxsID0gZmFsc2U7CgpmdW5jdGlvbiBsb2FkSGlzdG9yeSgpIHsKICB0cnkgeyByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMU19LRVkpKSB8fCBbXTsgfSBjYXRjaChlKSB7IHJldHVybiBbXTsgfQp9CmZ1bmN0aW9uIHNhdmVIaXN0b3J5KGFycikgewogIHRyeSB7IGxvY2FsU3RvcmFnZS5zZXRJdGVtKExTX0tFWSwgSlNPTi5zdHJpbmdpZnkoYXJyKSk7IH0gY2F0Y2goZSkge30KfQpmdW5jdGlvbiBhZGRUb0hpc3RvcnkoZW50cnkpIHsKICBjb25zdCBhcnIgPSBsb2FkSGlzdG9yeSgpOwogIGFyci51bnNoaWZ0KGVudHJ5KTsKICBzYXZlSGlzdG9yeShhcnIpOwogIHJlbmRlckhpc3RvcnkoKTsKfQpmdW5jdGlvbiBkZWxldGVIaXN0b3J5SXRlbShpZCkgewogIGNvbnN0IGFyciA9IGxvYWRIaXN0b3J5KCkuZmlsdGVyKGUgPT4gZS5pZCAhPT0gaWQpOwogIHNhdmVIaXN0b3J5KGFycik7CiAgcmVuZGVySGlzdG9yeSgpOwogIHNob3dUb2FzdCgn8J+Xke+4jyBSZW1vdmVkIGZyb20gaGlzdG9yeScpOwp9CmZ1bmN0aW9uIGRlbGV0ZUFsbEhpc3RvcnkoKSB7CiAgaWYgKCFjb25maXJtKCdSZW1vdmUgYWxsIGltYWdlcyBmcm9tIGhpc3Rvcnk/JykpIHJldHVybjsKICBzYXZlSGlzdG9yeShbXSk7CiAgcmVuZGVySGlzdG9yeSgpOwogIHNob3dUb2FzdCgn8J+Xke+4jyBIaXN0b3J5IGNsZWFyZWQnKTsKfQoKZnVuY3Rpb24gcmVuZGVySGlzdG9yeSgpIHsKICBjb25zdCBhcnIgPSBsb2FkSGlzdG9yeSgpOwogIGNvbnN0IHNlYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoaXN0b3J5U2VjdGlvbicpOwogIGNvbnN0IGdyaWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGlzdG9yeUdyaWQnKTsKICBjb25zdCBtb3JlV3JhcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaG93TW9yZVdyYXAnKTsKICBpZiAoIWFyci5sZW5ndGgpIHsgc2VjLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7IHJldHVybjsgfQogIHNlYy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICBjb25zdCB2aXNpYmxlID0gaGlzdG9yeVNob3dBbGwgPyBhcnIgOiBhcnIuc2xpY2UoMCwgVklTSUJMRV9DT1VOVCk7CiAgZ3JpZC5pbm5lckhUTUwgPSB2aXNpYmxlLm1hcChlID0+IGAKICAgIDxkaXYgY2xhc3M9Imhpc3RvcnktaXRlbSIgZGF0YS1oaWQ9IiR7ZS5pZH0iPgogICAgICA8aW1nIHNyYz0iJHtlLnRodW1iIHx8IGUuZGlyZWN0fSIgYWx0PSIke2VzY2FwZUh0bWwoZS5uYW1lKX0iIGxvYWRpbmc9ImxhenkiPgogICAgICA8ZGl2IGNsYXNzPSJoLW92ZXJsYXkiPvCflJc8L2Rpdj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iZGVsLWJ0biIgb25jbGljaz0iZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7ZGVsZXRlSGlzdG9yeUl0ZW0oJyR7ZS5pZH0nKSIgdGl0bGU9IlJlbW92ZSI+4pyVPC9idXR0b24+CiAgICA8L2Rpdj5gKS5qb2luKCcnKTsKICBncmlkLnF1ZXJ5U2VsZWN0b3JBbGwoJy5oaXN0b3J5LWl0ZW0nKS5mb3JFYWNoKGVsID0+IHsKICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gb3Blbk1vZGFsKGVsLmRhdGFzZXQuaGlkKSk7CiAgfSk7CiAgbW9yZVdyYXAuc3R5bGUuZGlzcGxheSA9ICghaGlzdG9yeVNob3dBbGwgJiYgYXJyLmxlbmd0aCA+IFZJU0lCTEVfQ09VTlQpID8gJ2Jsb2NrJyA6ICdub25lJzsKfQoKZnVuY3Rpb24gc2hvd01vcmVIaXN0b3J5KCkgewogIGhpc3RvcnlTaG93QWxsID0gdHJ1ZTsKICByZW5kZXJIaXN0b3J5KCk7Cn0KCi8vID09PT09IE1PREFMID09PT09CmxldCBjdXJyZW50TW9kYWxJZCA9IG51bGw7CmZ1bmN0aW9uIG9wZW5Nb2RhbChpZCkgewogIGNvbnN0IGFyciA9IGxvYWRIaXN0b3J5KCk7CiAgY29uc3QgZW50cnkgPSBhcnIuZmluZChlID0+IGUuaWQgPT09IGlkKTsKICBpZiAoIWVudHJ5KSByZXR1cm47CiAgY3VycmVudE1vZGFsSWQgPSBpZDsKICBwbGF5U291bmQoJ2NsaWNrJyk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFsSW1nJykuc3JjID0gZW50cnkudGh1bWIgfHwgZW50cnkuZGlyZWN0OwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RhbE5hbWUnKS50ZXh0Q29udGVudCA9IGVudHJ5Lm5hbWU7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFsTWV0YScpLnRleHRDb250ZW50ID0gZW50cnkuc2l6ZSArICcgwrcgJyArIChlbnRyeS50eXBlIHx8ICdpbWFnZScpOwogIGNvbnN0IGxpbmtzID0gZ2VuZXJhdGVMaW5rcyhlbnRyeS5uYW1lLCBlbnRyeSk7CiAgY29uc3QgdHlwZU1hcCA9IHsgZGlyZWN0Oid0eXBlLWRpcmVjdCcsIGh0bWw6J3R5cGUtaHRtbCcsIG1hcmtkb3duOid0eXBlLW1hcmtkb3duJywgYmI6J3R5cGUtYmInLCBmb3J1bTondHlwZS1mb3J1bScgfTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kYWxMaW5rcycpLmlubmVySFRNTCA9IGxpbmtzLm1hcChsID0+IGAKICAgIDxkaXYgY2xhc3M9Imxpbmstcm93Ij4KICAgICAgPGRpdiBjbGFzcz0ibGluay1sYWJlbCI+JHtsLmxhYmVsfTxzcGFuIGNsYXNzPSJsaW5rLXR5cGUgJHt0eXBlTWFwW2wudHlwZV18fCd0eXBlLWRpcmVjdCd9Ij4ke2wudHlwZS50b1VwcGVyQ2FzZSgpfTwvc3Bhbj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ibGluay1jb250ZW50Ij4KICAgICAgICA8aW5wdXQgY2xhc3M9ImxpbmstaW5wdXQiIHR5cGU9InRleHQiIHZhbHVlPSIke2VzY2FwZUF0dHIobC5jb2RlKX0iIHJlYWRvbmx5IG9uY2xpY2s9InRoaXMuc2VsZWN0KCkiPgogICAgICAgIDxidXR0b24gY2xhc3M9ImNvcHktYnRuIiBvbmNsaWNrPSJjb3B5TGluayh0aGlzLCcke2VzY2FwZUF0dHIobC5jb2RlKX0nKSI+Q29weTwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PmApLmpvaW4oJycpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RhbEJnJykuY2xhc3NMaXN0LmFkZCgnb3BlbicpOwp9CmZ1bmN0aW9uIGNsb3NlTW9kYWwoZSkgewogIGlmIChlLnRhcmdldCA9PT0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFsQmcnKSkgY2xvc2VNb2RhbERpcmVjdCgpOwp9CmZ1bmN0aW9uIGNsb3NlTW9kYWxEaXJlY3QoKSB7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFsQmcnKS5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyk7CiAgY3VycmVudE1vZGFsSWQgPSBudWxsOwp9CmZ1bmN0aW9uIGRlbGV0ZUZyb21Nb2RhbCgpIHsKICBpZiAoY3VycmVudE1vZGFsSWQpIHsKICAgIGRlbGV0ZUhpc3RvcnlJdGVtKGN1cnJlbnRNb2RhbElkKTsKICAgIGNsb3NlTW9kYWxEaXJlY3QoKTsKICB9Cn0KCi8vID09PT09IERPTSBSRUZTID09PT09CmNvbnN0IGRyb3Bab25lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Ryb3Bab25lJyk7CmNvbnN0IGZpbGVJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlSW5wdXQnKTsKY29uc3QgcmVzdWx0c1NlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0c1NlY3Rpb24nKTsKY29uc3QgcmVzdWx0c0NvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHRzQ29udGFpbmVyJyk7CmNvbnN0IGdhbGxlcnlTZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dhbGxlcnlTZWN0aW9uJyk7CmNvbnN0IGdhbGxlcnlHcmlkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dhbGxlcnlHcmlkJyk7CmNvbnN0IHByb2dyZXNzV3JhcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcm9ncmVzc1dyYXAnKTsKY29uc3QgcHJvZ3Jlc3NGaWxsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Byb2dyZXNzRmlsbCcpOwpjb25zdCBwcm9ncmVzc1RleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJvZ3Jlc3NUZXh0Jyk7CmNvbnN0IHVwbG9hZEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cGxvYWRCdG4nKTsKCnVwbG9hZEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGUgPT4geyBlLnN0b3BQcm9wYWdhdGlvbigpOyBwbGF5U291bmQoJ2NsaWNrJyk7IGZpbGVJbnB1dC5jbGljaygpOyB9KTsKZHJvcFpvbmUuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCBlID0+IHsgZS5wcmV2ZW50RGVmYXVsdCgpOyBkcm9wWm9uZS5jbGFzc0xpc3QuYWRkKCdkcmFnLW92ZXInKTsgfSk7CmRyb3Bab25lLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdsZWF2ZScsICgpID0+IGRyb3Bab25lLmNsYXNzTGlzdC5yZW1vdmUoJ2RyYWctb3ZlcicpKTsKZHJvcFpvbmUuYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsIGUgPT4gewogIGUucHJldmVudERlZmF1bHQoKTsgZHJvcFpvbmUuY2xhc3NMaXN0LnJlbW92ZSgnZHJhZy1vdmVyJyk7CiAgY29uc3QgZmlsZXMgPSBbLi4uZS5kYXRhVHJhbnNmZXIuZmlsZXNdLmZpbHRlcihmID0+IGYudHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSk7CiAgaWYgKGZpbGVzLmxlbmd0aCkgcHJvY2Vzc0ZpbGVzKGZpbGVzKTsKfSk7CmRyb3Bab25lLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZSA9PiB7CiAgaWYgKGUudGFyZ2V0ID09PSB1cGxvYWRCdG4gfHwgdXBsb2FkQnRuLmNvbnRhaW5zKGUudGFyZ2V0KSkgcmV0dXJuOwogIHBsYXlTb3VuZCgnY2xpY2snKTsgZmlsZUlucHV0LmNsaWNrKCk7Cn0pOwpmaWxlSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZSA9PiB7CiAgY29uc3QgZmlsZXMgPSBbLi4uZS50YXJnZXQuZmlsZXNdOwogIGlmIChmaWxlcy5sZW5ndGgpIHByb2Nlc3NGaWxlcyhmaWxlcyk7CiAgZmlsZUlucHV0LnZhbHVlID0gJyc7Cn0pOwoKZnVuY3Rpb24gcHJvY2Vzc0ZpbGVzKGZpbGVzKSB7CiAgaWYgKGZpbGVzLmxlbmd0aCA+IDMpIHsKICAgIHNob3dUb2FzdCgn4pqg77iPIE1heCAzIGltYWdlcyBhdCBvbmNlLiBGaXJzdCAzIHNlbGVjdGVkLicsIHRydWUpOwogICAgZmlsZXMgPSBmaWxlcy5zbGljZSgwLCAzKTsKICB9CiAgcGxheVNvdW5kKCd1cGxvYWQnKTsKICBmaWxlcy5mb3JFYWNoKChmaWxlLCBpKSA9PiBzZXRUaW1lb3V0KCgpID0+IHVwbG9hZFRvQ2xvdWRpbmFyeShmaWxlKSwgaSAqIDYwMCkpOwp9Cgphc3luYyBmdW5jdGlvbiB1cGxvYWRUb0Nsb3VkaW5hcnkoZmlsZSkgewogIGNvbnN0IGxvY2FsSWQgPSAnaW1nXycgKyBEYXRlLm5vdygpICsgJ18nICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiw3KTsKICBjb25zdCBzaXplS0IgPSAoZmlsZS5zaXplIC8gMTAyNCkudG9GaXhlZCgxKTsKICBjb25zdCBzaXplTGFiZWwgPSBzaXplS0IgPiAxMDI0ID8gKHNpemVLQi8xMDI0KS50b0ZpeGVkKDIpICsgJyBNQicgOiBzaXplS0IgKyAnIEtCJzsKCiAgcHJvZ3Jlc3NXcmFwLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogIHByb2dyZXNzRmlsbC5zdHlsZS53aWR0aCA9ICc1JSc7CiAgcHJvZ3Jlc3NUZXh0LnRleHRDb250ZW50ID0gJ+KPsyBVcGxvYWRpbmcgdG8gU3VmaUxpbmsuLi4nOwoKICBjb25zdCBkYXRhVVJMID0gYXdhaXQgcmVhZEFzRGF0YVVSTChmaWxlKTsKICBhZGRUb0dhbGxlcnkobG9jYWxJZCwgZGF0YVVSTCwgZmlsZS5uYW1lKTsKICByZXN1bHRzU2VjdGlvbi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICBnYWxsZXJ5U2VjdGlvbi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKCiAgdHJ5IHsKICAgIGFuaW1hdGVQcm9ncmVzc1RvKDM1KTsKICAgIHByb2dyZXNzVGV4dC50ZXh0Q29udGVudCA9ICfwn5SEIENvbm5lY3RpbmcuLi4nOwogICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGUpOwogICAgZm9ybURhdGEuYXBwZW5kKCd1cGxvYWRfcHJlc2V0JywgVVBMT0FEX1BSRVNFVCk7CiAgICBhbmltYXRlUHJvZ3Jlc3NUbyg2NSk7CiAgICBwcm9ncmVzc1RleHQudGV4dENvbnRlbnQgPSAn8J+TpCBVcGxvYWRpbmcuLi4nOwogICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnaHR0cHM6Ly9hcGkuY2xvdWRpbmFyeS5jb20vdjFfMS8nICsgQ0xPVURfTkFNRSArICcvaW1hZ2UvdXBsb2FkJywgeyBtZXRob2Q6ICdQT1NUJywgYm9keTogZm9ybURhdGEgfSk7CiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpOwogICAgY29uc29sZS5sb2coJ1tTdWZpTGlua10gQ2xvdWRpbmFyeSByZXNwb25zZTonLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7CiAgICBpZiAoZGF0YS5lcnJvcikgeyBjb25zb2xlLmVycm9yKCdbU3VmaUxpbmtdIFVwbG9hZCBlcnJvcjonLCBkYXRhLmVycm9yLm1lc3NhZ2UpOyB0aHJvdyBuZXcgRXJyb3IoJ3VwbG9hZF9mYWlsZWQnKTsgfQoKICAgIGFuaW1hdGVQcm9ncmVzc1RvKDEwMCk7CiAgICBwcm9ncmVzc1RleHQudGV4dENvbnRlbnQgPSAn4pyFIFVwbG9hZCBzdWNjZXNzZnVsISc7CiAgICBwbGF5U291bmQoJ3N1Y2Nlc3MnKTsKCiAgICBjb25zdCBzZWN1cmVVcmwgPSBkYXRhLnNlY3VyZV91cmw7CiAgICBjb25zdCBwdWJsaWNJZCA9IGRhdGEucHVibGljX2lkOwogICAgY29uc3QgdGh1bWJVcmwgPSAnaHR0cHM6Ly9yZXMuY2xvdWRpbmFyeS5jb20vJyArIENMT1VEX05BTUUgKyAnL2ltYWdlL3VwbG9hZC9jX3RodW1iLHdfMjAwLGhfMjAwLycgKyBwdWJsaWNJZDsKICAgIGNvbnN0IHdlYnBVcmwgPSAnaHR0cHM6Ly9yZXMuY2xvdWRpbmFyeS5jb20vJyArIENMT1VEX05BTUUgKyAnL2ltYWdlL3VwbG9hZC9mX3dlYnAscV9hdXRvLycgKyBwdWJsaWNJZDsKICAgIGNvbnN0IHNtYWxsVXJsID0gJ2h0dHBzOi8vcmVzLmNsb3VkaW5hcnkuY29tLycgKyBDTE9VRF9OQU1FICsgJy9pbWFnZS91cGxvYWQvd180MDAscV9hdXRvLycgKyBwdWJsaWNJZDsKCiAgICBjb25zdCB1cmxzID0geyBkaXJlY3Q6IHNlY3VyZVVybCwgdGh1bWI6IHRodW1iVXJsLCB3ZWJwOiB3ZWJwVXJsLCBzbWFsbDogc21hbGxVcmwsIHB1YmxpY0lkIH07CiAgICByZW5kZXJSZXN1bHQobG9jYWxJZCwgZGF0YVVSTCwgZmlsZS5uYW1lLCBzaXplTGFiZWwsIGZpbGUudHlwZSwgdXJscyk7CiAgICB1cGRhdGVHYWxsZXJ5SW1nKGxvY2FsSWQsIHNlY3VyZVVybCk7CgogICAgLy8gU2F2ZSB0byBsb2NhbCBzdG9yYWdlIGhpc3RvcnkKICAgIGFkZFRvSGlzdG9yeSh7IGlkOiBsb2NhbElkLCBuYW1lOiBmaWxlLm5hbWUsIHNpemU6IHNpemVMYWJlbCwgdHlwZTogZmlsZS50eXBlLCBkaXJlY3Q6IHNlY3VyZVVybCwgdGh1bWI6IHRodW1iVXJsLCB3ZWJwOiB3ZWJwVXJsLCBzbWFsbDogc21hbGxVcmwsIGRhdGU6IERhdGUubm93KCkgfSk7CgogIH0gY2F0Y2ggKGVycikgewogICAgY29uc29sZS5lcnJvcignW1N1ZmlMaW5rXSBDYXRjaCBlcnJvcjonLCBlcnIpOwogICAgYW5pbWF0ZVByb2dyZXNzVG8oMTAwKTsKICAgIHByb2dyZXNzVGV4dC50ZXh0Q29udGVudCA9ICfinYwgVXBsb2FkIGZhaWxlZC4gUGxlYXNlIHRyeSBhZ2Fpbi4nOwogICAgc2hvd1RvYXN0KCfinYwgVXBsb2FkIGZhaWxlZC4gUGxlYXNlIHRyeSBhZ2Fpbi4nLCB0cnVlKTsKICAgIHBsYXlTb3VuZCgnZXJyb3InKTsKICAgIGNvbnN0IGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZ2lkPSInICsgbG9jYWxJZCArICciXScpOwogICAgaWYgKGVsKSBlbC5zdHlsZS5vcGFjaXR5ID0gJzAuNCc7CiAgfQoKICBzZXRUaW1lb3V0KCgpID0+IHsgcHJvZ3Jlc3NXcmFwLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7IHByb2dyZXNzRmlsbC5zdHlsZS53aWR0aCA9ICcwJSc7IH0sIDMwMDApOwogIHJlc3VsdHNTZWN0aW9uLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ3N0YXJ0JyB9KTsKfQoKZnVuY3Rpb24gcmVhZEFzRGF0YVVSTChmaWxlKSB7CiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiAgICByZWFkZXIub25sb2FkID0gZSA9PiByZXNvbHZlKGUudGFyZ2V0LnJlc3VsdCk7CiAgICByZWFkZXIub25lcnJvciA9IHJlamVjdDsKICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpOwogIH0pOwp9CgpmdW5jdGlvbiBhbmltYXRlUHJvZ3Jlc3NUbyh0YXJnZXQpIHsKICBjb25zdCBjdXJyZW50ID0gcGFyc2VGbG9hdChwcm9ncmVzc0ZpbGwuc3R5bGUud2lkdGgpIHx8IDA7CiAgY29uc3Qgc3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKTsKICBmdW5jdGlvbiBzdGVwKG5vdykgewogICAgY29uc3QgcCA9IE1hdGgubWluKChub3cgLSBzdGFydCkgLyA3MDAsIDEpOwogICAgY29uc3QgdmFsID0gY3VycmVudCArICh0YXJnZXQgLSBjdXJyZW50KSAqICgxIC0gTWF0aC5wb3coMS1wLCAzKSk7CiAgICBwcm9ncmVzc0ZpbGwuc3R5bGUud2lkdGggPSB2YWwgKyAnJSc7CiAgICBpZiAocCA8IDEpIHJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTsKICB9CiAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApOwp9CgpmdW5jdGlvbiBnZW5lcmF0ZUxpbmtzKG5hbWUsIHVybHMpIHsKICByZXR1cm4gWwogICAgeyBsYWJlbDogJ0RpcmVjdCBJbWFnZSBMaW5rJywgdHlwZTogJ2RpcmVjdCcsIGNvZGU6IHVybHMuZGlyZWN0IH0sCiAgICB7IGxhYmVsOiAnVGh1bWJuYWlsICgyMDDDlzIwMCknLCB0eXBlOiAnZGlyZWN0JywgY29kZTogdXJscy50aHVtYiB9LAogICAgeyBsYWJlbDogJ1NtYWxsICg0MDBweCknLCB0eXBlOiAnZGlyZWN0JywgY29kZTogdXJscy5zbWFsbCB9LAogICAgeyBsYWJlbDogJ1dlYlAgRm9ybWF0JywgdHlwZTogJ2RpcmVjdCcsIGNvZGU6IHVybHMud2VicCB9LAogICAgeyBsYWJlbDogJ0hUTUwgSW1hZ2UgVGFnJywgdHlwZTogJ2h0bWwnLCBjb2RlOiAnPGltZyBzcmM9IicgKyB1cmxzLmRpcmVjdCArICciIGFsdD0iJyArIG5hbWUgKyAnIiAvPicgfSwKICAgIHsgbGFiZWw6ICdIVE1MIHdpdGggTGluaycsIHR5cGU6ICdodG1sJywgY29kZTogJzxhIGhyZWY9IicgKyB1cmxzLmRpcmVjdCArICciPjxpbWcgc3JjPSInICsgdXJscy5kaXJlY3QgKyAnIiBhbHQ9IicgKyBuYW1lICsgJyIgLz48L2E+JyB9LAogICAgeyBsYWJlbDogJ01hcmtkb3duJywgdHlwZTogJ21hcmtkb3duJywgY29kZTogJyFbJyArIG5hbWUgKyAnXSgnICsgdXJscy5kaXJlY3QgKyAnKScgfSwKICAgIHsgbGFiZWw6ICdCQkNvZGUnLCB0eXBlOiAnYmInLCBjb2RlOiAnW2ltZ10nICsgdXJscy5kaXJlY3QgKyAnWy9pbWddJyB9LAogICAgeyBsYWJlbDogJ0ZvcnVtIElNRycsIHR5cGU6ICdmb3J1bScsIGNvZGU6ICdbSU1HXScgKyB1cmxzLmRpcmVjdCArICdbL0lNR10nIH0sCiAgXTsKfQoKZnVuY3Rpb24gcmVuZGVyUmVzdWx0KGlkLCBkYXRhVVJMLCBuYW1lLCBzaXplLCB0eXBlLCB1cmxzKSB7CiAgY29uc3QgbGlua3MgPSBnZW5lcmF0ZUxpbmtzKG5hbWUsIHVybHMpOwogIGNvbnN0IHR5cGVNYXAgPSB7IGRpcmVjdDondHlwZS1kaXJlY3QnLCBodG1sOid0eXBlLWh0bWwnLCBtYXJrZG93bjondHlwZS1tYXJrZG93bicsIGJiOid0eXBlLWJiJywgZm9ydW06J3R5cGUtZm9ydW0nIH07CiAgY29uc3QgbGlua3NIVE1MID0gbGlua3MubWFwKGwgPT4gYAogICAgPGRpdiBjbGFzcz0ibGluay1yb3ciPgogICAgICA8ZGl2IGNsYXNzPSJsaW5rLWxhYmVsIj4ke2wubGFiZWx9PHNwYW4gY2xhc3M9ImxpbmstdHlwZSAke3R5cGVNYXBbbC50eXBlXXx8J3R5cGUtZGlyZWN0J30iPiR7bC50eXBlLnRvVXBwZXJDYXNlKCl9PC9zcGFuPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJsaW5rLWNvbnRlbnQiPgogICAgICAgIDxpbnB1dCBjbGFzcz0ibGluay1pbnB1dCIgdHlwZT0idGV4dCIgdmFsdWU9IiR7ZXNjYXBlQXR0cihsLmNvZGUpfSIgcmVhZG9ubHkgb25jbGljaz0idGhpcy5zZWxlY3QoKSI+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY29weS1idG4iIG9uY2xpY2s9ImNvcHlMaW5rKHRoaXMsJyR7ZXNjYXBlQXR0cihsLmNvZGUpfScpIj5Db3B5PC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+YCkuam9pbignJyk7CiAgY29uc3QgZXhpc3RpbmcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0XycgKyBpZCk7CiAgY29uc3QgY2FyZCA9IGV4aXN0aW5nIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogIGNhcmQuY2xhc3NOYW1lID0gJ3Jlc3VsdC1jYXJkJzsKICBjYXJkLmlkID0gJ3Jlc3VsdF8nICsgaWQ7CiAgY2FyZC5pbm5lckhUTUwgPSBgCiAgICA8ZGl2IGNsYXNzPSJyZXN1bHQtaGVhZGVyIj4KICAgICAgPGRpdiBjbGFzcz0ic3VjY2Vzcy1pY29uIj7inJM8L2Rpdj4KICAgICAgPGRpdj4KICAgICAgICA8aDM+VXBsb2FkIFN1Y2Nlc3NmdWwhIPCfjok8L2gzPgogICAgICAgIDxwPllvdXIgcGVybWFuZW50IHJlYWwgbGlua3MgYXJlIHJlYWR5IHZpYSBTdWZpTGluazwvcD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InByZXZpZXctYXJlYSI+CiAgICAgIDxpbWcgY2xhc3M9ImltZy1wcmV2aWV3IiBzcmM9IiR7ZGF0YVVSTH0iIGFsdD0iJHtlc2NhcGVIdG1sKG5hbWUpfSIgb25jbGljaz0id2luZG93Lm9wZW4oJyR7dXJscy5kaXJlY3R9JywnX2JsYW5rJykiPgogICAgICA8ZGl2IGNsYXNzPSJpbWctaW5mbyI+CiAgICAgICAgPGRpdiBjbGFzcz0iaW1nLW5hbWUiPiR7ZXNjYXBlSHRtbChuYW1lKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJpbWctbWV0YSI+JHtzaXplfSDCtyAke3R5cGV8fCdpbWFnZSd9IMK3IEhvc3RlZCBieSBTdWZpTGluayDimIHvuI88L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImxpbmtzLWdyaWQiPiR7bGlua3NIVE1MfTwvZGl2PmA7CiAgaWYgKCFleGlzdGluZykgcmVzdWx0c0NvbnRhaW5lci5wcmVwZW5kKGNhcmQpOwp9CgpmdW5jdGlvbiB1cGRhdGVHYWxsZXJ5SW1nKGlkLCByZWFsVXJsKSB7CiAgY29uc3QgaW1nID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZ2lkPSInICsgaWQgKyAnIl0gaW1nJyk7CiAgaWYgKGltZykgaW1nLnNyYyA9IHJlYWxVcmw7Cn0KCmZ1bmN0aW9uIGFkZFRvR2FsbGVyeShpZCwgZGF0YVVSTCwgbmFtZSkgewogIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1naWQ9IicgKyBpZCArICciXScpKSByZXR1cm47CiAgY29uc3QgaXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogIGl0ZW0uY2xhc3NOYW1lID0gJ2dhbGxlcnktaXRlbSc7CiAgaXRlbS5kYXRhc2V0LmdpZCA9IGlkOwogIGl0ZW0uaW5uZXJIVE1MID0gJzxpbWcgc3JjPSInICsgZGF0YVVSTCArICciIGFsdD0iJyArIGVzY2FwZUh0bWwobmFtZSkgKyAnIiBsb2FkaW5nPSJsYXp5Ij48ZGl2IGNsYXNzPSJnYWxsZXJ5LW92ZXJsYXkiPvCflJc8L2Rpdj4nOwogIGl0ZW0ub25jbGljayA9ICgpID0+IHsKICAgIHBsYXlTb3VuZCgnY2xpY2snKTsKICAgIGNvbnN0IHIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0XycgKyBpZCk7CiAgICBpZiAocikgci5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOidzbW9vdGgnLCBibG9jazonc3RhcnQnIH0pOwogIH07CiAgZ2FsbGVyeUdyaWQucHJlcGVuZChpdGVtKTsKfQoKZnVuY3Rpb24gY29weUxpbmsoYnRuLCB0ZXh0KSB7CiAgcGxheVNvdW5kKCdjb3B5Jyk7CiAgY29uc3QgZGVjb2RlZCA9IHRleHQucmVwbGFjZSgvJmFtcDsvZywnJicpLnJlcGxhY2UoLyZsdDsvZywnPCcpLnJlcGxhY2UoLyZndDsvZywnPicpLnJlcGxhY2UoLyZxdW90Oy9nLCciJykucmVwbGFjZSgvJiMzOTsvZywiJyIpOwogIGNvbnN0IGRvSXQgPSAoKSA9PiB7CiAgICBidG4udGV4dENvbnRlbnQgPSAn4pyTIENvcGllZCEnOwogICAgYnRuLmNsYXNzTGlzdC5hZGQoJ2NvcGllZCcpOwogICAgc2hvd1RvYXN0KCfinJMgTGluayBjb3BpZWQhJyk7CiAgICBzZXRUaW1lb3V0KCgpID0+IHsgYnRuLnRleHRDb250ZW50ID0gJ0NvcHknOyBidG4uY2xhc3NMaXN0LnJlbW92ZSgnY29waWVkJyk7IH0sIDIwMDApOwogIH07CiAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoZGVjb2RlZCkudGhlbihkb0l0KS5jYXRjaCgoKSA9PiB7CiAgICBjb25zdCB0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7CiAgICB0YS52YWx1ZSA9IGRlY29kZWQ7IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGEpOyB0YS5zZWxlY3QoKTsKICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7IGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGEpOyBkb0l0KCk7CiAgfSk7Cn0KCmZ1bmN0aW9uIHNob3dUb2FzdChtc2csIGlzRXJyb3IpIHsKICBjb25zdCB0b2FzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2FzdCcpOwogIHRvYXN0LnRleHRDb250ZW50ID0gbXNnOwogIHRvYXN0LmNsYXNzTmFtZSA9ICd0b2FzdCcgKyAoaXNFcnJvciA/ICcgZXJyb3InIDogJycpOwogIHZvaWQgdG9hc3Qub2Zmc2V0V2lkdGg7CiAgdG9hc3QuY2xhc3NMaXN0LmFkZCgnc2hvdycpOwogIHNldFRpbWVvdXQoKCkgPT4gdG9hc3QuY2xhc3NMaXN0LnJlbW92ZSgnc2hvdycpLCAzMDAwKTsKfQoKZnVuY3Rpb24gZXNjYXBlSHRtbChzKSB7IHJldHVybiBzLnJlcGxhY2UoLyYvZywnJmFtcDsnKS5yZXBsYWNlKC88L2csJyZsdDsnKS5yZXBsYWNlKC8+L2csJyZndDsnKTsgfQpmdW5jdGlvbiBlc2NhcGVBdHRyKHMpIHsgcmV0dXJuIHMucmVwbGFjZSgvIi9nLCcmcXVvdDsnKS5yZXBsYWNlKC8nL2csJyYjMzk7Jyk7IH0KCi8vIExvYWQgaGlzdG9yeSBvbiBwYWdlIHN0YXJ0CnJlbmRlckhpc3RvcnkoKTsKPC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPg==
PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgo8dGl0bGU+U3VmaUxpbmsg4oCTIEZyZWUgSW1hZ2UgSG9zdGluZyAmIExpbmsgR2VuZXJhdG9yPC90aXRsZT4KPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlN1ZmlMaW5rIGlzIGEgZnJlZSwgZmFzdCwgYW5kIHNlY3VyZSBpbWFnZSBob3N0aW5nIHBsYXRmb3JtLiBVcGxvYWQgYW55IGltYWdlIGFuZCBnZXQgcGVybWFuZW50IGRpcmVjdCBsaW5rcyBpbnN0YW50bHkuIE5vIGFjY291bnQgcmVxdWlyZWQuIj4KPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tIj4KPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1TcGFjZStNb25vOndnaHRANDAwOzcwMCZmYW1pbHk9U3luZTp3Z2h0QDQwMDs2MDA7NzAwOzgwMCZmYW1pbHk9RE0rU2Fuczp3Z2h0QDMwMDs0MDA7NTAwJmRpc3BsYXk9c3dhcCIgcmVsPSJzdHlsZXNoZWV0Ij4KPHN0eWxlPgo6cm9vdCB7CiAgLS1ibGFjazogIzBhMGEwZjsKICAtLWRlZXA6ICMwZjBmMWE7CiAgLS1jYXJkOiAjMTMxMzFmOwogIC0tYm9yZGVyOiAjMWUxZTMyOwogIC0tcHVycGxlOiAjN2MzYWVkOwogIC0tcHVycGxlLWxpZ2h0OiAjYTg1NWY3OwogIC0tcHVycGxlLWdsb3c6ICM3YzNhZWQ0MDsKICAtLWdyZWVuOiAjMjJjNTVlOwogIC0tZ3JlZW4tZ2xvdzogIzIyYzU1ZTMwOwogIC0tZ3JlZW4tZGFyazogIzE2YTM0YTsKICAtLXdoaXRlOiAjZjhmYWZjOwogIC0tbXV0ZWQ6ICM5NGEzYjg7CiAgLS1kaW1tZXI6ICM0NzU1Njk7CiAgLS1mb250LWRpc3BsYXk6ICdTeW5lJywgc2Fucy1zZXJpZjsKICAtLWZvbnQtbW9ubzogJ1NwYWNlIE1vbm8nLCBtb25vc3BhY2U7CiAgLS1mb250LWJvZHk6ICdETSBTYW5zJywgc2Fucy1zZXJpZjsKfQoqLCAqOjpiZWZvcmUsICo6OmFmdGVyIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyB9Cmh0bWwgeyBzY3JvbGwtYmVoYXZpb3I6IHNtb290aDsgfQpib2R5IHsgYmFja2dyb3VuZDogdmFyKC0tYmxhY2spOyBjb2xvcjogdmFyKC0td2hpdGUpOyBmb250LWZhbWlseTogdmFyKC0tZm9udC1ib2R5KTsgbWluLWhlaWdodDogMTAwdmg7IG92ZXJmbG93LXg6IGhpZGRlbjsgfQoKYm9keTo6YmVmb3JlIHsKICBjb250ZW50OiAnJzsKICBwb3NpdGlvbjogZml4ZWQ7IGluc2V0OiAwOwogIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChyZ2JhKDEyNCw1OCwyMzcsMC4wNCkgMXB4LCB0cmFuc3BhcmVudCAxcHgpLCBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHJnYmEoMTI0LDU4LDIzNywwLjA0KSAxcHgsIHRyYW5zcGFyZW50IDFweCk7CiAgYmFja2dyb3VuZC1zaXplOiA0MHB4IDQwcHg7CiAgcG9pbnRlci1ldmVudHM6IG5vbmU7IHotaW5kZXg6IDA7Cn0KCi5vcmIgeyBwb3NpdGlvbjogZml4ZWQ7IGJvcmRlci1yYWRpdXM6IDUwJTsgZmlsdGVyOiBibHVyKDgwcHgpOyBwb2ludGVyLWV2ZW50czogbm9uZTsgei1pbmRleDogMDsgb3BhY2l0eTogMC4zNTsgfQoub3JiLTEgeyB3aWR0aDogNTAwcHg7IGhlaWdodDogNTAwcHg7IGJhY2tncm91bmQ6IHZhcigtLXB1cnBsZSk7IHRvcDogLTE1MHB4OyByaWdodDogLTEwMHB4OyBhbmltYXRpb246IG9yYkZsb2F0IDhzIGVhc2UtaW4tb3V0IGluZmluaXRlOyB9Ci5vcmItMiB7IHdpZHRoOiA0MDBweDsgaGVpZ2h0OiA0MDBweDsgYmFja2dyb3VuZDogdmFyKC0tZ3JlZW4tZGFyayk7IGJvdHRvbTogMTAwcHg7IGxlZnQ6IC0xNTBweDsgYW5pbWF0aW9uOiBvcmJGbG9hdCA4cyBlYXNlLWluLW91dCBpbmZpbml0ZSAzczsgfQoub3JiLTMgeyB3aWR0aDogMzAwcHg7IGhlaWdodDogMzAwcHg7IGJhY2tncm91bmQ6IHZhcigtLXB1cnBsZS1saWdodCk7IHRvcDogNTAlOyBsZWZ0OiA1MCU7IG9wYWNpdHk6IDAuMTsgYW5pbWF0aW9uOiBvcmJGbG9hdDMgOHMgZWFzZS1pbi1vdXQgaW5maW5pdGUgNXM7IH0KQGtleWZyYW1lcyBvcmJGbG9hdCB7IDAlLDEwMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH0gNTAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yMHB4KTsgfSB9CkBrZXlmcmFtZXMgb3JiRmxvYXQzIHsgMCUsMTAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsLTUwJSk7IH0gNTAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTYlKTsgfSB9CgovKiBIRUFERVIgKi8KaGVhZGVyIHsKICBwb3NpdGlvbjogc3RpY2t5OyB0b3A6IDA7IHotaW5kZXg6IDEwMDsKICBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgcGFkZGluZzogMTZweCA0MHB4OwogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1ib3JkZXIpOwogIGJhY2tkcm9wLWZpbHRlcjogYmx1cigyMHB4KTsKICBiYWNrZ3JvdW5kOiByZ2JhKDEwLDEwLDE1LDAuODUpOwp9Ci5sb2dvIHsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiAxMHB4OyBmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTsgZm9udC13ZWlnaHQ6IDgwMDsgZm9udC1zaXplOiAxLjRyZW07IGxldHRlci1zcGFjaW5nOiAtMC41cHg7IGN1cnNvcjogcG9pbnRlcjsgfQoubG9nby1pY29uIHsgd2lkdGg6IDM2cHg7IGhlaWdodDogMzZweDsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tcHVycGxlKSwgdmFyKC0tZ3JlZW4pKTsgYm9yZGVyLXJhZGl1czogMTBweDsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGZvbnQtc2l6ZTogMS4xcmVtOyB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zczsgfQoubG9nbzpob3ZlciAubG9nby1pY29uIHsgdHJhbnNmb3JtOiByb3RhdGUoLTEwZGVnKSBzY2FsZSgxLjEpOyB9Ci5sb2dvIHNwYW4geyBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHZhcigtLXB1cnBsZS1saWdodCksIHZhcigtLWdyZWVuKSk7IC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiB0ZXh0OyAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogdHJhbnNwYXJlbnQ7IH0KbmF2IHsgZGlzcGxheTogZmxleDsgZ2FwOiA4cHg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IH0KbmF2IGEgeyBjb2xvcjogdmFyKC0tbXV0ZWQpOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtc2l6ZTogMC44OHJlbTsgcGFkZGluZzogOHB4IDE2cHg7IGJvcmRlci1yYWRpdXM6IDhweDsgdHJhbnNpdGlvbjogYWxsIDAuMnM7IGZvbnQtd2VpZ2h0OiA1MDA7IGN1cnNvcjogcG9pbnRlcjsgfQpuYXYgYTpob3ZlciB7IGNvbG9yOiB2YXIoLS13aGl0ZSk7IGJhY2tncm91bmQ6IHZhcigtLWJvcmRlcik7IH0KLmJ0bi1uYXYgeyBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCB2YXIoLS1wdXJwbGUpLCAjNWIyMWI2KTsgY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7IGJvcmRlci1yYWRpdXM6IDhweDsgcGFkZGluZzogOHB4IDE4cHg7IGZvbnQtd2VpZ2h0OiA2MDA7IH0KLmJ0bi1uYXY6aG92ZXIgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7IGJveC1zaGFkb3c6IDAgNHB4IDIwcHggdmFyKC0tcHVycGxlLWdsb3cpICFpbXBvcnRhbnQ7IH0KCi8qIFBBR0UgU1lTVEVNICovCi5wYWdlIHsgZGlzcGxheTogbm9uZTsgfQoucGFnZS5hY3RpdmUgeyBkaXNwbGF5OiBibG9jazsgYW5pbWF0aW9uOiBwYWdlSW4gMC40cyBlYXNlOyB9CkBrZXlmcmFtZXMgcGFnZUluIHsgZnJvbSB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KTsgfSB0byB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgfSB9CgovKiBIRVJPICovCi5oZXJvIHsgcG9zaXRpb246IHJlbGF0aXZlOyB6LWluZGV4OiAxOyB0ZXh0LWFsaWduOiBjZW50ZXI7IHBhZGRpbmc6IDgwcHggMjBweCA2MHB4OyBtYXgtd2lkdGg6IDgwMHB4OyBtYXJnaW46IDAgYXV0bzsgfQouYmFkZ2UgewogIGRpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDZweDsKICBiYWNrZ3JvdW5kOiByZ2JhKDM0LDE5Nyw5NCwwLjEpOyBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDM0LDE5Nyw5NCwwLjMpOwogIGNvbG9yOiB2YXIoLS1ncmVlbik7IHBhZGRpbmc6IDZweCAxNHB4OyBib3JkZXItcmFkaXVzOiAxMDBweDsKICBmb250LXNpemU6IDAuOHJlbTsgZm9udC13ZWlnaHQ6IDYwMDsgbWFyZ2luLWJvdHRvbTogMjRweDsKICBmb250LWZhbWlseTogdmFyKC0tZm9udC1tb25vKTsgYW5pbWF0aW9uOiBwdWxzZS1iYWRnZSAycyBlYXNlLWluLW91dCBpbmZpbml0ZTsKfQpAa2V5ZnJhbWVzIHB1bHNlLWJhZGdlIHsgMCUsMTAwJSB7IGJveC1zaGFkb3c6IDAgMCAwIDAgdmFyKC0tZ3JlZW4tZ2xvdyk7IH0gNTAlIHsgYm94LXNoYWRvdzogMCAwIDAgOHB4IHRyYW5zcGFyZW50OyB9IH0KLmJhZGdlOjpiZWZvcmUgeyBjb250ZW50OiAn4pePJzsgYW5pbWF0aW9uOiBibGluayAxLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlOyBtYXJnaW4tcmlnaHQ6IDRweDsgfQpAa2V5ZnJhbWVzIGJsaW5rIHsgMCUsMTAwJSB7IG9wYWNpdHk6MTsgfSA1MCUgeyBvcGFjaXR5OjAuMzsgfSB9Ci5oZXJvIGgxIHsgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7IGZvbnQtc2l6ZTogY2xhbXAoMi40cmVtLDZ2dyw0LjJyZW0pOyBmb250LXdlaWdodDogODAwOyBsaW5lLWhlaWdodDogMS4xOyBtYXJnaW4tYm90dG9tOiAyMHB4OyBsZXR0ZXItc3BhY2luZzogLTJweDsgYW5pbWF0aW9uOiBmYWRlSW5VcCAwLjhzIGVhc2UgYm90aDsgfQpAa2V5ZnJhbWVzIGZhZGVJblVwIHsgZnJvbSB7IG9wYWNpdHk6MDsgdHJhbnNmb3JtOnRyYW5zbGF0ZVkoMzBweCk7IH0gdG8geyBvcGFjaXR5OjE7IHRyYW5zZm9ybTp0cmFuc2xhdGVZKDApOyB9IH0KLmhlcm8gaDEgLmFjY2VudCB7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLXB1cnBsZS1saWdodCksIHZhcigtLWdyZWVuKSk7IC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiB0ZXh0OyAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogdHJhbnNwYXJlbnQ7IH0KLmhlcm8gcCB7IGZvbnQtc2l6ZTogMS4xcmVtOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBsaW5lLWhlaWdodDogMS43OyBtYXgtd2lkdGg6IDYwMHB4OyBtYXJnaW46IDAgYXV0byA0MHB4OyBhbmltYXRpb246IGZhZGVJblVwIDAuOHMgZWFzZSAwLjE1cyBib3RoOyB9Ci5zdGF0cy1yb3cgeyBkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgZ2FwOiA0MHB4OyBmbGV4LXdyYXA6IHdyYXA7IG1hcmdpbi1ib3R0b206IDUwcHg7IGFuaW1hdGlvbjogZmFkZUluVXAgMC44cyBlYXNlIDAuM3MgYm90aDsgfQouc3RhdCB7IHRleHQtYWxpZ246IGNlbnRlcjsgfQouc3RhdC1udW0geyBmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTsgZm9udC1zaXplOiAxLjZyZW07IGZvbnQtd2VpZ2h0OiA4MDA7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgdmFyKC0tcHVycGxlLWxpZ2h0KSwgdmFyKC0tZ3JlZW4pKTsgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHRleHQ7IC13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiB0cmFuc3BhcmVudDsgfQouc3RhdC1sYWJlbCB7IGZvbnQtc2l6ZTogMC44cmVtOyBjb2xvcjogdmFyKC0tZGltbWVyKTsgbWFyZ2luLXRvcDogMnB4OyB9CgovKiBVUExPQUQgKi8KLnVwbG9hZC1zZWN0aW9uIHsgcG9zaXRpb246IHJlbGF0aXZlOyB6LWluZGV4OiAyOyBtYXgtd2lkdGg6IDc2MHB4OyBtYXJnaW46IDAgYXV0byA2MHB4OyBwYWRkaW5nOiAwIDIwcHg7IGFuaW1hdGlvbjogZmFkZUluVXAgMC44cyBlYXNlIDAuM3MgYm90aDsgfQoudXBsb2FkLWNhcmQgewogIGJhY2tncm91bmQ6IHZhcigtLWNhcmQpOyBib3JkZXI6IDJweCBkYXNoZWQgdmFyKC0tYm9yZGVyKTsKICBib3JkZXItcmFkaXVzOiAyMHB4OyBwYWRkaW5nOiA1MHB4IDQwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsKICBjdXJzb3I6IHBvaW50ZXI7IHRyYW5zaXRpb246IGFsbCAwLjNzIGN1YmljLWJlemllcigwLjQsMCwwLjIsMSk7CiAgcG9zaXRpb246IHJlbGF0aXZlOyBvdmVyZmxvdzogaGlkZGVuOwp9Ci51cGxvYWQtY2FyZDo6YmVmb3JlIHsgY29udGVudDonJzsgcG9zaXRpb246YWJzb2x1dGU7IGluc2V0OjA7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLXB1cnBsZS1nbG93KSwgdmFyKC0tZ3JlZW4tZ2xvdykpOyBvcGFjaXR5OjA7IHRyYW5zaXRpb246IG9wYWNpdHkgMC4zczsgfQoudXBsb2FkLWNhcmQ6aG92ZXI6OmJlZm9yZSwgLnVwbG9hZC1jYXJkLmRyYWctb3Zlcjo6YmVmb3JlIHsgb3BhY2l0eToxOyB9Ci51cGxvYWQtY2FyZDpob3ZlciwgLnVwbG9hZC1jYXJkLmRyYWctb3ZlciB7IGJvcmRlci1jb2xvcjogdmFyKC0tcHVycGxlLWxpZ2h0KTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpOyBib3gtc2hhZG93OiAwIDIwcHggNjBweCByZ2JhKDEyNCw1OCwyMzcsMC4yKTsgfQoudXBsb2FkLWljb24geyB3aWR0aDo4MHB4OyBoZWlnaHQ6ODBweDsgbWFyZ2luOiAwIGF1dG8gMjBweDsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgxMjQsNTgsMjM3LDAuMiksIHJnYmEoMzQsMTk3LDk0LDAuMikpOyBib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6MjBweDsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IGZvbnQtc2l6ZToycmVtOyBwb3NpdGlvbjpyZWxhdGl2ZTsgei1pbmRleDoxOyB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC40cyBjdWJpYy1iZXppZXIoMC4zNCwxLjU2LDAuNjQsMSk7IH0KLnVwbG9hZC1jYXJkOmhvdmVyIC51cGxvYWQtaWNvbiB7IHRyYW5zZm9ybTogc2NhbGUoMS4xNSkgcm90YXRlKC04ZGVnKTsgfQoudXBsb2FkLWNhcmQgaDIgeyBmb250LWZhbWlseTogdmFyKC0tZm9udC1kaXNwbGF5KTsgZm9udC1zaXplOjEuNXJlbTsgZm9udC13ZWlnaHQ6NzAwOyBtYXJnaW4tYm90dG9tOjEwcHg7IHBvc2l0aW9uOnJlbGF0aXZlOyB6LWluZGV4OjE7IH0KLnVwbG9hZC1jYXJkID4gcCB7IGNvbG9yOnZhcigtLW11dGVkKTsgZm9udC1zaXplOjAuOTJyZW07IG1hcmdpbi1ib3R0b206MjRweDsgcG9zaXRpb246cmVsYXRpdmU7IHotaW5kZXg6MTsgfQouZm9ybWF0LXRhZ3MgeyBkaXNwbGF5OmZsZXg7IGZsZXgtd3JhcDp3cmFwOyBnYXA6OHB4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBtYXJnaW4tYm90dG9tOjI0cHg7IHBvc2l0aW9uOnJlbGF0aXZlOyB6LWluZGV4OjE7IH0KLnRhZyB7IGJhY2tncm91bmQ6IHJnYmEoMTI0LDU4LDIzNywwLjE1KTsgYm9yZGVyOjFweCBzb2xpZCByZ2JhKDEyNCw1OCwyMzcsMC4zKTsgY29sb3I6dmFyKC0tcHVycGxlLWxpZ2h0KTsgcGFkZGluZzo0cHggMTJweDsgYm9yZGVyLXJhZGl1czoxMDBweDsgZm9udC1zaXplOjAuNzhyZW07IGZvbnQtZmFtaWx5OnZhcigtLWZvbnQtbW9ubyk7IGZvbnQtd2VpZ2h0OjcwMDsgfQouYnRuLXVwbG9hZCB7IGRpc3BsYXk6aW5saW5lLWZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgZ2FwOjhweDsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tcHVycGxlKSwgIzViMjFiNik7IGNvbG9yOndoaXRlOyBib3JkZXI6bm9uZTsgcGFkZGluZzoxNHB4IDMycHg7IGJvcmRlci1yYWRpdXM6MTJweDsgZm9udC1mYW1pbHk6dmFyKC0tZm9udC1kaXNwbGF5KTsgZm9udC1zaXplOjFyZW07IGZvbnQtd2VpZ2h0OjcwMDsgY3Vyc29yOnBvaW50ZXI7IHRyYW5zaXRpb246YWxsIDAuM3M7IHBvc2l0aW9uOnJlbGF0aXZlOyB6LWluZGV4OjI7IGJveC1zaGFkb3c6IDAgOHB4IDMwcHggdmFyKC0tcHVycGxlLWdsb3cpOyB9Ci5idG4tdXBsb2FkOmhvdmVyIHsgdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTJweCk7IGJveC1zaGFkb3c6IDAgMTJweCA0MHB4IHJnYmEoMTI0LDU4LDIzNywwLjUpOyB9Ci5idG4tdXBsb2FkOmFjdGl2ZSB7IHRyYW5zZm9ybTogc2NhbGUoMC45NykgdHJhbnNsYXRlWSgwKTsgfQojZmlsZUlucHV0IHsgZGlzcGxheTpub25lOyB9CgovKiBQUk9HUkVTUyAqLwoucHJvZ3Jlc3Mtd3JhcCB7IGRpc3BsYXk6bm9uZTsgbWFyZ2luLXRvcDoyNHB4OyBwb3NpdGlvbjpyZWxhdGl2ZTsgei1pbmRleDoxOyB9Ci5wcm9ncmVzcy1iYXIgeyBoZWlnaHQ6OHB4OyBiYWNrZ3JvdW5kOnZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6MTAwcHg7IG92ZXJmbG93OmhpZGRlbjsgfQoucHJvZ3Jlc3MtZmlsbCB7IGhlaWdodDoxMDAlOyB3aWR0aDowJTsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCB2YXIoLS1wdXJwbGUpLCB2YXIoLS1ncmVlbikpOyBib3JkZXItcmFkaXVzOjEwMHB4OyB0cmFuc2l0aW9uOiB3aWR0aCAwLjRzIGVhc2U7IGJveC1zaGFkb3c6IDAgMCAxMnB4IHZhcigtLXB1cnBsZS1nbG93KTsgcG9zaXRpb246IHJlbGF0aXZlOyB9Ci5wcm9ncmVzcy1maWxsOjphZnRlciB7IGNvbnRlbnQ6Jyc7IHBvc2l0aW9uOmFic29sdXRlOyB0b3A6MDsgcmlnaHQ6MDsgd2lkdGg6MjBweDsgaGVpZ2h0OjEwMCU7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC40KTsgYm9yZGVyLXJhZGl1czoxMDBweDsgYW5pbWF0aW9uOiBzaGltbWVyIDFzIGVhc2UtaW4tb3V0IGluZmluaXRlOyB9CkBrZXlmcmFtZXMgc2hpbW1lciB7IDAlLDEwMCUgeyBvcGFjaXR5OjA7IH0gNTAlIHsgb3BhY2l0eToxOyB9IH0KLnByb2dyZXNzLXRleHQgeyBmb250LXNpemU6MC44NXJlbTsgY29sb3I6dmFyKC0tbXV0ZWQpOyBtYXJnaW4tdG9wOjEwcHg7IGZvbnQtZmFtaWx5OnZhcigtLWZvbnQtbW9ubyk7IH0KCi8qIFJFU1VMVFMgKi8KI3Jlc3VsdHNTZWN0aW9uIHsgZGlzcGxheTpub25lOyBwb3NpdGlvbjpyZWxhdGl2ZTsgei1pbmRleDoyOyBtYXgtd2lkdGg6NzYwcHg7IG1hcmdpbjogMCBhdXRvIDYwcHg7IHBhZGRpbmc6IDAgMjBweDsgfQoucmVzdWx0LWNhcmQgeyBiYWNrZ3JvdW5kOnZhcigtLWNhcmQpOyBib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6MjBweDsgb3ZlcmZsb3c6aGlkZGVuOyBhbmltYXRpb246IHNsaWRlVXAgMC41cyBjdWJpYy1iZXppZXIoMC40LDAsMC4yLDEpOyBtYXJnaW4tYm90dG9tOiAyNHB4OyB9CkBrZXlmcmFtZXMgc2xpZGVVcCB7IGZyb20geyBvcGFjaXR5OjA7IHRyYW5zZm9ybTp0cmFuc2xhdGVZKDMwcHgpIHNjYWxlKDAuOTgpOyB9IHRvIHsgb3BhY2l0eToxOyB0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKSBzY2FsZSgxKTsgfSB9Ci5yZXN1bHQtaGVhZGVyIHsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGdhcDoxMnB4OyBwYWRkaW5nOjIwcHggMjRweDsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYm9yZGVyKTsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCByZ2JhKDM0LDE5Nyw5NCwwLjA3KSwgdHJhbnNwYXJlbnQpOyB9Ci5zdWNjZXNzLWljb24geyB3aWR0aDo0MHB4OyBoZWlnaHQ6NDBweDsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tZ3JlZW4pLCB2YXIoLS1ncmVlbi1kYXJrKSk7IGJvcmRlci1yYWRpdXM6MTJweDsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IGZvbnQtc2l6ZToxLjJyZW07IGZsZXgtc2hyaW5rOjA7IGFuaW1hdGlvbjogcG9wSW4gMC41cyBjdWJpYy1iZXppZXIoMC4zNCwxLjU2LDAuNjQsMSk7IH0KQGtleWZyYW1lcyBwb3BJbiB7IGZyb20geyB0cmFuc2Zvcm06IHNjYWxlKDApIHJvdGF0ZSgtMTgwZGVnKTsgfSB0byB7IHRyYW5zZm9ybTogc2NhbGUoMSkgcm90YXRlKDBkZWcpOyB9IH0KLnJlc3VsdC1oZWFkZXIgaDMgeyBmb250LWZhbWlseTp2YXIoLS1mb250LWRpc3BsYXkpOyBmb250LXNpemU6MS4xcmVtOyBmb250LXdlaWdodDo3MDA7IH0KLnJlc3VsdC1oZWFkZXIgcCB7IGZvbnQtc2l6ZTowLjgycmVtOyBjb2xvcjp2YXIoLS1tdXRlZCk7IG1hcmdpbi10b3A6MnB4OyB9Ci5wcmV2aWV3LWFyZWEgeyBwYWRkaW5nOjIwcHggMjRweDsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYm9yZGVyKTsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGdhcDoxNnB4OyBmbGV4LXdyYXA6d3JhcDsgfQouaW1nLXByZXZpZXcgeyB3aWR0aDo4MHB4OyBoZWlnaHQ6ODBweDsgb2JqZWN0LWZpdDpjb3ZlcjsgYm9yZGVyLXJhZGl1czoxMnB4OyBib3JkZXI6MnB4IHNvbGlkIHZhcigtLWJvcmRlcik7IHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzLCBib3gtc2hhZG93IDAuM3M7IGN1cnNvcjogcG9pbnRlcjsgfQouaW1nLXByZXZpZXc6aG92ZXIgeyB0cmFuc2Zvcm06IHNjYWxlKDEuMDgpOyBib3gtc2hhZG93OiAwIDhweCAyNHB4IHZhcigtLXB1cnBsZS1nbG93KTsgfQouaW1nLWluZm8geyBmbGV4OjE7IG1pbi13aWR0aDoxNTBweDsgfQouaW1nLW5hbWUgeyBmb250LXdlaWdodDo2MDA7IGZvbnQtc2l6ZTowLjk1cmVtOyBtYXJnaW4tYm90dG9tOjRweDsgd2hpdGUtc3BhY2U6bm93cmFwOyBvdmVyZmxvdzpoaWRkZW47IHRleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7IG1heC13aWR0aDozMjBweDsgfQouaW1nLW1ldGEgeyBmb250LXNpemU6MC44cmVtOyBjb2xvcjp2YXIoLS1tdXRlZCk7IGZvbnQtZmFtaWx5OnZhcigtLWZvbnQtbW9ubyk7IH0KLmxpbmtzLWdyaWQgeyBwYWRkaW5nOjIwcHggMjRweDsgZGlzcGxheTpmbGV4OyBmbGV4LWRpcmVjdGlvbjpjb2x1bW47IGdhcDoxMHB4OyB9Ci5saW5rLXJvdyB7IGJhY2tncm91bmQ6dmFyKC0tZGVlcCk7IGJvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyKTsgYm9yZGVyLXJhZGl1czoxMnB4OyBvdmVyZmxvdzpoaWRkZW47IHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjJzLCB0cmFuc2Zvcm0gMC4yczsgfQoubGluay1yb3c6aG92ZXIgeyBib3JkZXItY29sb3I6dmFyKC0tcHVycGxlKTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDNweCk7IH0KLmxpbmstbGFiZWwgeyBkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgZ2FwOjhweDsgcGFkZGluZzoxMHB4IDE0cHggNnB4OyBmb250LXNpemU6MC43OHJlbTsgZm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKTsgZm9udC13ZWlnaHQ6NzAwOyBjb2xvcjp2YXIoLS1tdXRlZCk7IHRleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTsgbGV0dGVyLXNwYWNpbmc6MC41cHg7IH0KLmxpbmstdHlwZSB7IHBhZGRpbmc6MnB4IDhweDsgYm9yZGVyLXJhZGl1czo0cHg7IGZvbnQtc2l6ZTowLjdyZW07IH0KLnR5cGUtZGlyZWN0IHsgYmFja2dyb3VuZDpyZ2JhKDEyNCw1OCwyMzcsMC4yKTsgY29sb3I6dmFyKC0tcHVycGxlLWxpZ2h0KTsgfQoudHlwZS1odG1sIHsgYmFja2dyb3VuZDpyZ2JhKDM0LDE5Nyw5NCwwLjE1KTsgY29sb3I6dmFyKC0tZ3JlZW4pOyB9Ci50eXBlLW1hcmtkb3duIHsgYmFja2dyb3VuZDpyZ2JhKDU5LDEzMCwyNDYsMC4xNSk7IGNvbG9yOiM2MGE1ZmE7IH0KLnR5cGUtYmIgeyBiYWNrZ3JvdW5kOnJnYmEoMjUxLDE0Niw2MCwwLjE1KTsgY29sb3I6I2ZiOTIzYzsgfQoudHlwZS1mb3J1bSB7IGJhY2tncm91bmQ6cmdiYSgyMzYsNzIsMTUzLDAuMTUpOyBjb2xvcjojZjQ3MmI2OyB9Ci5saW5rLWNvbnRlbnQgeyBkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgZ2FwOjhweDsgcGFkZGluZzo4cHggMTRweCAxMHB4OyB9Ci5saW5rLWlucHV0IHsgZmxleDoxOyBiYWNrZ3JvdW5kOnRyYW5zcGFyZW50OyBib3JkZXI6bm9uZTsgY29sb3I6dmFyKC0tbXV0ZWQpOyBmb250LWZhbWlseTp2YXIoLS1mb250LW1vbm8pOyBmb250LXNpemU6MC44MnJlbTsgb3V0bGluZTpub25lOyBjdXJzb3I6dGV4dDsgd2hpdGUtc3BhY2U6bm93cmFwOyBvdmVyZmxvdzpoaWRkZW47IHRleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7IH0KLmNvcHktYnRuIHsgYmFja2dyb3VuZDp0cmFuc3BhcmVudDsgYm9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXIpOyBjb2xvcjp2YXIoLS1tdXRlZCk7IHBhZGRpbmc6NnB4IDE0cHg7IGJvcmRlci1yYWRpdXM6OHB4OyBmb250LXNpemU6MC43OHJlbTsgY3Vyc29yOnBvaW50ZXI7IHRyYW5zaXRpb246YWxsIDAuMnM7IHdoaXRlLXNwYWNlOm5vd3JhcDsgZm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKTsgZmxleC1zaHJpbms6MDsgfQouY29weS1idG46aG92ZXIgeyBib3JkZXItY29sb3I6dmFyKC0tcHVycGxlLWxpZ2h0KTsgY29sb3I6dmFyKC0tcHVycGxlLWxpZ2h0KTsgYmFja2dyb3VuZDp2YXIoLS1wdXJwbGUtZ2xvdyk7IH0KLmNvcHktYnRuLmNvcGllZCB7IGJvcmRlci1jb2xvcjp2YXIoLS1ncmVlbik7IGNvbG9yOnZhcigtLWdyZWVuKTsgYmFja2dyb3VuZDp2YXIoLS1ncmVlbi1nbG93KTsgfQouY29weS1idG46YWN0aXZlIHsgdHJhbnNmb3JtOiBzY2FsZSgwLjkzKTsgfQoKLyogR0FMTEVSWSAqLwojZ2FsbGVyeVNlY3Rpb24geyBkaXNwbGF5Om5vbmU7IHBvc2l0aW9uOnJlbGF0aXZlOyB6LWluZGV4OjI7IG1heC13aWR0aDo3NjBweDsgbWFyZ2luOiAwIGF1dG8gNjBweDsgcGFkZGluZzogMCAyMHB4OyB9Ci5zZWN0aW9uLXRpdGxlIHsgZm9udC1mYW1pbHk6dmFyKC0tZm9udC1kaXNwbGF5KTsgZm9udC1zaXplOjEuNHJlbTsgZm9udC13ZWlnaHQ6NzAwOyBtYXJnaW4tYm90dG9tOjIwcHg7IGRpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBnYXA6MTBweDsgZmxleC13cmFwOndyYXA7IH0KLnNlY3Rpb24tdGl0bGUgc3BhbiB7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgdmFyKC0tcHVycGxlLWxpZ2h0KSwgdmFyKC0tZ3JlZW4pKTsgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6dGV4dDsgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7IH0KLmdhbGxlcnktZ3JpZCB7IGRpc3BsYXk6Z3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgxNDBweCwxZnIpKTsgZ2FwOjEycHg7IH0KLmdhbGxlcnktaXRlbSB7IHBvc2l0aW9uOnJlbGF0aXZlOyBib3JkZXItcmFkaXVzOjEycHg7IG92ZXJmbG93OmhpZGRlbjsgY3Vyc29yOnBvaW50ZXI7IGFzcGVjdC1yYXRpbzoxOyBib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IHRyYW5zaXRpb246YWxsIDAuM3MgY3ViaWMtYmV6aWVyKDAuNCwwLDAuMiwxKTsgfQouZ2FsbGVyeS1pdGVtOmhvdmVyIHsgYm9yZGVyLWNvbG9yOnZhcigtLXB1cnBsZS1saWdodCk7IHRyYW5zZm9ybTpzY2FsZSgxLjA1KTsgYm94LXNoYWRvdzogMCA4cHggMzBweCB2YXIoLS1wdXJwbGUtZ2xvdyk7IH0KLmdhbGxlcnktaXRlbSBpbWcgeyB3aWR0aDoxMDAlOyBoZWlnaHQ6MTAwJTsgb2JqZWN0LWZpdDpjb3ZlcjsgZGlzcGxheTpibG9jazsgfQouZ2FsbGVyeS1vdmVybGF5IHsgcG9zaXRpb246YWJzb2x1dGU7IGluc2V0OjA7IGJhY2tncm91bmQ6cmdiYSgwLDAsMCwwLjcpOyBkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgb3BhY2l0eTowOyB0cmFuc2l0aW9uOm9wYWNpdHkgMC4yNXM7IGZvbnQtc2l6ZToxLjZyZW07IH0KLmdhbGxlcnktaXRlbTpob3ZlciAuZ2FsbGVyeS1vdmVybGF5IHsgb3BhY2l0eToxOyB9CgovKiBISVNUT1JZIFNFQ1RJT04gKi8KI2hpc3RvcnlTZWN0aW9uIHsgcG9zaXRpb246cmVsYXRpdmU7IHotaW5kZXg6MjsgbWF4LXdpZHRoOjc2MHB4OyBtYXJnaW46IDAgYXV0byA2MHB4OyBwYWRkaW5nOiAwIDIwcHg7IH0KLmhpc3RvcnktaGVhZGVyIHsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuOyBtYXJnaW4tYm90dG9tOjE2cHg7IGZsZXgtd3JhcDp3cmFwOyBnYXA6MTBweDsgfQouYnRuLWRlbGV0ZS1hbGwgeyBiYWNrZ3JvdW5kOnRyYW5zcGFyZW50OyBib3JkZXI6MXB4IHNvbGlkICNlZjQ0NDQ7IGNvbG9yOiNlZjQ0NDQ7IHBhZGRpbmc6OHB4IDE2cHg7IGJvcmRlci1yYWRpdXM6MTBweDsgZm9udC1zaXplOjAuOHJlbTsgY3Vyc29yOnBvaW50ZXI7IHRyYW5zaXRpb246YWxsIDAuMnM7IGZvbnQtZmFtaWx5OnZhcigtLWZvbnQtbW9ubyk7IGZvbnQtd2VpZ2h0OjcwMDsgfQouYnRuLWRlbGV0ZS1hbGw6aG92ZXIgeyBiYWNrZ3JvdW5kOnJnYmEoMjM5LDY4LDY4LDAuMSk7IH0KLmhpc3RvcnktZ3JpZCB7IGRpc3BsYXk6Z3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgzLDFmcik7IGdhcDoxMnB4OyB9Ci5oaXN0b3J5LWl0ZW0geyBwb3NpdGlvbjpyZWxhdGl2ZTsgYm9yZGVyLXJhZGl1czoxNHB4OyBvdmVyZmxvdzpoaWRkZW47IGFzcGVjdC1yYXRpbzoxOyBib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGN1cnNvcjpwb2ludGVyOyB0cmFuc2l0aW9uOmFsbCAwLjNzOyBiYWNrZ3JvdW5kOnZhcigtLWNhcmQpOyB9Ci5oaXN0b3J5LWl0ZW06aG92ZXIgeyBib3JkZXItY29sb3I6dmFyKC0tcHVycGxlLWxpZ2h0KTsgdHJhbnNmb3JtOnNjYWxlKDEuMDQpOyBib3gtc2hhZG93OiAwIDhweCAzMHB4IHZhcigtLXB1cnBsZS1nbG93KTsgfQouaGlzdG9yeS1pdGVtIGltZyB7IHdpZHRoOjEwMCU7IGhlaWdodDoxMDAlOyBvYmplY3QtZml0OmNvdmVyOyBkaXNwbGF5OmJsb2NrOyB9Ci5oaXN0b3J5LWl0ZW0gLmgtb3ZlcmxheSB7IHBvc2l0aW9uOmFic29sdXRlOyBpbnNldDowOyBiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMC42NSk7IGRpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBvcGFjaXR5OjA7IHRyYW5zaXRpb246b3BhY2l0eSAwLjI1czsgZm9udC1zaXplOjEuNHJlbTsgfQouaGlzdG9yeS1pdGVtOmhvdmVyIC5oLW92ZXJsYXkgeyBvcGFjaXR5OjE7IH0KLmhpc3RvcnktaXRlbSAuZGVsLWJ0biB7IHBvc2l0aW9uOmFic29sdXRlOyB0b3A6NnB4OyByaWdodDo2cHg7IHdpZHRoOjI2cHg7IGhlaWdodDoyNnB4OyBiYWNrZ3JvdW5kOnJnYmEoMjM5LDY4LDY4LDAuODUpOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czo1MCU7IGNvbG9yOndoaXRlOyBmb250LXNpemU6MC45cmVtOyBjdXJzb3I6cG9pbnRlcjsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IG9wYWNpdHk6MDsgdHJhbnNpdGlvbjpvcGFjaXR5IDAuMnM7IHotaW5kZXg6MjsgbGluZS1oZWlnaHQ6MTsgfQouaGlzdG9yeS1pdGVtOmhvdmVyIC5kZWwtYnRuIHsgb3BhY2l0eToxOyB9Ci5zaG93LW1vcmUtd3JhcCB7IHRleHQtYWxpZ246Y2VudGVyOyBtYXJnaW4tdG9wOjE2cHg7IH0KLmJ0bi1zaG93LW1vcmUgeyBiYWNrZ3JvdW5kOnZhcigtLWNhcmQpOyBib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGNvbG9yOnZhcigtLW11dGVkKTsgcGFkZGluZzoxMHB4IDI4cHg7IGJvcmRlci1yYWRpdXM6MTBweDsgZm9udC1zaXplOjAuODhyZW07IGN1cnNvcjpwb2ludGVyOyB0cmFuc2l0aW9uOmFsbCAwLjJzOyBmb250LWZhbWlseTp2YXIoLS1mb250LWJvZHkpOyB9Ci5idG4tc2hvdy1tb3JlOmhvdmVyIHsgYm9yZGVyLWNvbG9yOnZhcigtLXB1cnBsZS1saWdodCk7IGNvbG9yOnZhcigtLXdoaXRlKTsgfQoKLyogTU9EQUwgKi8KLm1vZGFsLWJnIHsgZGlzcGxheTpub25lOyBwb3NpdGlvbjpmaXhlZDsgaW5zZXQ6MDsgYmFja2dyb3VuZDpyZ2JhKDAsMCwwLDAuODUpOyB6LWluZGV4OjEwMDA7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgcGFkZGluZzoyMHB4OyB9Ci5tb2RhbC1iZy5vcGVuIHsgZGlzcGxheTpmbGV4OyBhbmltYXRpb246IGZhZGVJbiAwLjJzIGVhc2U7IH0KQGtleWZyYW1lcyBmYWRlSW4geyBmcm9te29wYWNpdHk6MH0gdG97b3BhY2l0eToxfSB9Ci5tb2RhbC1ib3ggeyBiYWNrZ3JvdW5kOnZhcigtLWNhcmQpOyBib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6MjBweDsgd2lkdGg6MTAwJTsgbWF4LXdpZHRoOjYwMHB4OyBtYXgtaGVpZ2h0Ojkwdmg7IG92ZXJmbG93LXk6YXV0bzsgYW5pbWF0aW9uOiBzbGlkZVVwIDAuM3MgZWFzZTsgfQoubW9kYWwtdG9wIHsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGdhcDoxNHB4OyBwYWRkaW5nOjIwcHggMjRweDsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tYm9yZGVyKTsgfQoubW9kYWwtaW1nIHsgd2lkdGg6NjBweDsgaGVpZ2h0OjYwcHg7IG9iamVjdC1maXQ6Y292ZXI7IGJvcmRlci1yYWRpdXM6MTBweDsgYm9yZGVyOjJweCBzb2xpZCB2YXIoLS1ib3JkZXIpOyBmbGV4LXNocmluazowOyB9Ci5tb2RhbC1pbmZvIHsgZmxleDoxOyBtaW4td2lkdGg6MDsgfQoubW9kYWwtbmFtZSB7IGZvbnQtd2VpZ2h0OjcwMDsgZm9udC1zaXplOjAuOTVyZW07IHdoaXRlLXNwYWNlOm5vd3JhcDsgb3ZlcmZsb3c6aGlkZGVuOyB0ZXh0LW92ZXJmbG93OmVsbGlwc2lzOyB9Ci5tb2RhbC1tZXRhIHsgZm9udC1zaXplOjAuOHJlbTsgY29sb3I6dmFyKC0tbXV0ZWQpOyBtYXJnaW4tdG9wOjJweDsgZm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKTsgfQoubW9kYWwtY2xvc2UgeyBiYWNrZ3JvdW5kOnRyYW5zcGFyZW50OyBib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGNvbG9yOnZhcigtLW11dGVkKTsgd2lkdGg6MzRweDsgaGVpZ2h0OjM0cHg7IGJvcmRlci1yYWRpdXM6OHB4OyBjdXJzb3I6cG9pbnRlcjsgZm9udC1zaXplOjEuMXJlbTsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IGZsZXgtc2hyaW5rOjA7IHRyYW5zaXRpb246YWxsIDAuMnM7IH0KLm1vZGFsLWNsb3NlOmhvdmVyIHsgYm9yZGVyLWNvbG9yOiNlZjQ0NDQ7IGNvbG9yOiNlZjQ0NDQ7IH0KLm1vZGFsLWxpbmtzIHsgcGFkZGluZzoxNnB4IDI0cHggMjBweDsgZGlzcGxheTpmbGV4OyBmbGV4LWRpcmVjdGlvbjpjb2x1bW47IGdhcDo4cHg7IH0KLm1vZGFsLWRlbCB7IG1hcmdpbjowIDI0cHggMjBweDsgYmFja2dyb3VuZDp0cmFuc3BhcmVudDsgYm9yZGVyOjFweCBzb2xpZCAjZWY0NDQ0OyBjb2xvcjojZWY0NDQ0OyBwYWRkaW5nOjEwcHg7IGJvcmRlci1yYWRpdXM6MTBweDsgZm9udC1zaXplOjAuODVyZW07IGN1cnNvcjpwb2ludGVyOyB0cmFuc2l0aW9uOmFsbCAwLjJzOyB3aWR0aDpjYWxjKDEwMCUgLSA0OHB4KTsgZm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKTsgZm9udC13ZWlnaHQ6NzAwOyB9Ci5tb2RhbC1kZWw6aG92ZXIgeyBiYWNrZ3JvdW5kOnJnYmEoMjM5LDY4LDY4LDAuMSk7IH0KCi8qIEZFQVRVUkVTICovCi5mZWF0dXJlcyB7IHBvc2l0aW9uOnJlbGF0aXZlOyB6LWluZGV4OjI7IG1heC13aWR0aDo3NjBweDsgbWFyZ2luOiAwIGF1dG8gNjBweDsgcGFkZGluZzogMCAyMHB4OyB9Ci5mZWF0dXJlcy1ncmlkIHsgZGlzcGxheTpncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMjAwcHgsMWZyKSk7IGdhcDoxNnB4OyB9Ci5mZWF0dXJlLWNhcmQgeyBiYWNrZ3JvdW5kOnZhcigtLWNhcmQpOyBib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6MTZweDsgcGFkZGluZzoyNHB4IDIwcHg7IHRyYW5zaXRpb246YWxsIDAuM3M7IH0KLmZlYXR1cmUtY2FyZDpob3ZlciB7IGJvcmRlci1jb2xvcjp2YXIoLS1wdXJwbGUpOyB0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNXB4KTsgYm94LXNoYWRvdzogMCAxNnB4IDQwcHggdmFyKC0tcHVycGxlLWdsb3cpOyB9Ci5mZWF0dXJlLWljb24geyBmb250LXNpemU6MS44cmVtOyBtYXJnaW4tYm90dG9tOjEycHg7IGRpc3BsYXk6YmxvY2s7IH0KLmZlYXR1cmUtY2FyZCBoNCB7IGZvbnQtZmFtaWx5OnZhcigtLWZvbnQtZGlzcGxheSk7IGZvbnQtc2l6ZToxcmVtOyBmb250LXdlaWdodDo3MDA7IG1hcmdpbi1ib3R0b206NnB4OyB9Ci5mZWF0dXJlLWNhcmQgcCB7IGZvbnQtc2l6ZTowLjg1cmVtOyBjb2xvcjp2YXIoLS1kaW1tZXIpOyBsaW5lLWhlaWdodDoxLjY7IH0KCi8qIEZPT1RFUiAqLwpmb290ZXIgeyBwb3NpdGlvbjpyZWxhdGl2ZTsgei1pbmRleDoyOyBib3JkZXItdG9wOjFweCBzb2xpZCB2YXIoLS1ib3JkZXIpOyBwYWRkaW5nOjMycHggNDBweDsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuOyBnYXA6MTZweDsgZmxleC13cmFwOndyYXA7IH0KZm9vdGVyIHAgeyBmb250LXNpemU6MC44MnJlbTsgY29sb3I6dmFyKC0tZGltbWVyKTsgfQouZm9vdGVyLWxpbmtzIHsgZGlzcGxheTpmbGV4OyBnYXA6MjBweDsgfQouZm9vdGVyLWxpbmtzIGEgeyBmb250LXNpemU6MC44MnJlbTsgY29sb3I6dmFyKC0tZGltbWVyKTsgdGV4dC1kZWNvcmF0aW9uOm5vbmU7IHRyYW5zaXRpb246Y29sb3IgMC4yczsgY3Vyc29yOnBvaW50ZXI7IH0KLmZvb3Rlci1saW5rcyBhOmhvdmVyIHsgY29sb3I6dmFyKC0tcHVycGxlLWxpZ2h0KTsgfQoKLyogVE9BU1QgKi8KLnRvYXN0IHsgcG9zaXRpb246Zml4ZWQ7IGJvdHRvbTozMHB4OyBsZWZ0OjUwJTsgdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgxMDBweCk7IGJhY2tncm91bmQ6dmFyKC0tY2FyZCk7IGJvcmRlcjoxcHggc29saWQgdmFyKC0tZ3JlZW4pOyBjb2xvcjp2YXIoLS1ncmVlbik7IHBhZGRpbmc6MTJweCAyOHB4OyBib3JkZXItcmFkaXVzOjEwMHB4OyBmb250LXNpemU6MC44OHJlbTsgZm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKTsgZm9udC13ZWlnaHQ6NzAwOyB6LWluZGV4Ojk5OTk7IHRyYW5zaXRpb246dHJhbnNmb3JtIDAuNHMgY3ViaWMtYmV6aWVyKDAuMzQsMS41NiwwLjY0LDEpOyBib3gtc2hhZG93OiAwIDRweCAzMHB4IHZhcigtLWdyZWVuLWdsb3cpOyBwb2ludGVyLWV2ZW50czpub25lOyB9Ci50b2FzdC5zaG93IHsgdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgwKTsgfQoudG9hc3QuZXJyb3IgeyBib3JkZXItY29sb3I6I2VmNDQ0NDsgY29sb3I6I2VmNDQ0NDsgYm94LXNoYWRvdzogMCA0cHggMzBweCByZ2JhKDIzOSw2OCw2OCwwLjMpOyB9CgovKiBQT0xJQ1kgUEFHRVMgKi8KLnBvbGljeS1wYWdlIHsgbWF4LXdpZHRoOiA3NjBweDsgbWFyZ2luOiAwIGF1dG87IHBhZGRpbmc6IDYwcHggMjBweDsgcG9zaXRpb246IHJlbGF0aXZlOyB6LWluZGV4OiAyOyB9Ci5wb2xpY3ktcGFnZSBoMSB7IGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpOyBmb250LXNpemU6IDIuMnJlbTsgZm9udC13ZWlnaHQ6IDgwMDsgbWFyZ2luLWJvdHRvbTogOHB4OyBsZXR0ZXItc3BhY2luZzogLTFweDsgfQoucG9saWN5LXBhZ2UgaDEgLmFjY2VudCB7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLXB1cnBsZS1saWdodCksIHZhcigtLWdyZWVuKSk7IC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiB0ZXh0OyAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogdHJhbnNwYXJlbnQ7IH0KLnBvbGljeS1kYXRlIHsgZm9udC1zaXplOiAwLjgycmVtOyBjb2xvcjogdmFyKC0tZGltbWVyKTsgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtbW9ubyk7IG1hcmdpbi1ib3R0b206IDQwcHg7IHBhZGRpbmctdG9wOiA4cHg7IH0KLnBvbGljeS1zZWN0aW9uIHsgYmFja2dyb3VuZDogdmFyKC0tY2FyZCk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGJvcmRlci1yYWRpdXM6IDE2cHg7IHBhZGRpbmc6IDI4cHg7IG1hcmdpbi1ib3R0b206IDE2cHg7IHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjNzLCB0cmFuc2Zvcm0gMC4zczsgfQoucG9saWN5LXNlY3Rpb246aG92ZXIgeyBib3JkZXItY29sb3I6IHZhcigtLXB1cnBsZSk7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgzcHgpOyB9Ci5wb2xpY3ktc2VjdGlvbiBoMiB7IGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpOyBmb250LXNpemU6IDEuMDVyZW07IGZvbnQtd2VpZ2h0OiA3MDA7IG1hcmdpbi1ib3R0b206IDE0cHg7IGNvbG9yOiB2YXIoLS1wdXJwbGUtbGlnaHQpOyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDEwcHg7IH0KLnBvbGljeS1zZWN0aW9uIHAgeyBmb250LXNpemU6IDAuOTJyZW07IGNvbG9yOiB2YXIoLS1tdXRlZCk7IGxpbmUtaGVpZ2h0OiAxLjg7IG1hcmdpbi1ib3R0b206IDhweDsgfQoucG9saWN5LXNlY3Rpb24gdWwgeyBwYWRkaW5nLWxlZnQ6IDIwcHg7IH0KLnBvbGljeS1zZWN0aW9uIGxpIHsgZm9udC1zaXplOiAwLjkycmVtOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBsaW5lLWhlaWdodDogMS44OyBtYXJnaW4tYm90dG9tOiA2cHg7IH0KLnBvbGljeS1oaWdobGlnaHQgeyBiYWNrZ3JvdW5kOiByZ2JhKDEyNCw1OCwyMzcsMC4xKTsgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxMjQsNTgsMjM3LDAuMyk7IGJvcmRlci1yYWRpdXM6IDEycHg7IHBhZGRpbmc6IDE2cHggMjBweDsgbWFyZ2luLXRvcDogMTRweDsgZm9udC1zaXplOiAwLjg4cmVtOyBjb2xvcjogdmFyKC0td2hpdGUpOyBsaW5lLWhlaWdodDogMS43OyB9Ci5iYWNrLWJ0biB7IGRpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDhweDsgYmFja2dyb3VuZDogdmFyKC0tY2FyZCk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IHBhZGRpbmc6IDEwcHggMjBweDsgYm9yZGVyLXJhZGl1czogMTBweDsgZm9udC1zaXplOiAwLjg4cmVtOyBjdXJzb3I6IHBvaW50ZXI7IHRyYW5zaXRpb246IGFsbCAwLjJzOyBtYXJnaW4tYm90dG9tOiAzMnB4OyBmb250LWZhbWlseTogdmFyKC0tZm9udC1ib2R5KTsgfQouYmFjay1idG46aG92ZXIgeyBib3JkZXItY29sb3I6IHZhcigtLXB1cnBsZS1saWdodCk7IGNvbG9yOiB2YXIoLS13aGl0ZSk7IGJhY2tncm91bmQ6IHZhcigtLXB1cnBsZS1nbG93KTsgfQoKOjotd2Via2l0LXNjcm9sbGJhciB7IHdpZHRoOjZweDsgfQo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsgYmFja2dyb3VuZDp2YXIoLS1kZWVwKTsgfQo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsgYmFja2dyb3VuZDp2YXIoLS1ib3JkZXIpOyBib3JkZXItcmFkaXVzOjNweDsgfQo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsgYmFja2dyb3VuZDp2YXIoLS1wdXJwbGUpOyB9CgpAbWVkaWEgKG1heC13aWR0aDogNjAwcHgpIHsKICBoZWFkZXIgeyBwYWRkaW5nOiAxNHB4IDIwcHg7IH0KICBuYXYgYTpub3QoLmJ0bi1uYXYpIHsgZGlzcGxheTogbm9uZTsgfQogIC5oZXJvIHsgcGFkZGluZzogNTBweCAyMHB4IDQwcHg7IH0KICAudXBsb2FkLWNhcmQgeyBwYWRkaW5nOiAzNnB4IDIwcHg7IH0KICAuc3RhdHMtcm93IHsgZ2FwOiAyNHB4OyB9CiAgZm9vdGVyIHsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgdGV4dC1hbGlnbjogY2VudGVyOyB9CiAgLmZvb3Rlci1saW5rcyB7IGp1c3RpZnktY29udGVudDogY2VudGVyOyB9CiAgLnBvbGljeS1wYWdlIHsgcGFkZGluZzogNDBweCAyMHB4OyB9CiAgLmhpc3RvcnktZ3JpZCB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDMsMWZyKTsgZ2FwOjhweDsgfQogIC5tb2RhbC1ib3ggeyBib3JkZXItcmFkaXVzOjE2cHg7IH0KICAubW9kYWwtdG9wIHsgcGFkZGluZzoxNnB4OyB9CiAgLm1vZGFsLWxpbmtzIHsgcGFkZGluZzoxMnB4IDE2cHggMTZweDsgfQogIC5tb2RhbC1kZWwgeyBtYXJnaW46MCAxNnB4IDE2cHg7IHdpZHRoOmNhbGMoMTAwJSAtIDMycHgpOyB9CiAgLnByZXZpZXctYXJlYSB7IGZsZXgtZGlyZWN0aW9uOmNvbHVtbjsgYWxpZ24taXRlbXM6ZmxleC1zdGFydDsgfQogIC5saW5rcy1ncmlkIHsgcGFkZGluZzoxNHB4IDE2cHg7IH0KICAubGluay1jb250ZW50IHsgZmxleC13cmFwOndyYXA7IH0KICAubGluay1pbnB1dCB7IHdpZHRoOjEwMCU7IH0KfQo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoKPGRpdiBjbGFzcz0ib3JiIG9yYi0xIj48L2Rpdj4KPGRpdiBjbGFzcz0ib3JiIG9yYi0yIj48L2Rpdj4KPGRpdiBjbGFzcz0ib3JiIG9yYi0zIj48L2Rpdj4KPGRpdiBjbGFzcz0idG9hc3QiIGlkPSJ0b2FzdCI+PC9kaXY+Cgo8aGVhZGVyPgogIDxkaXYgY2xhc3M9ImxvZ28iIG9uY2xpY2s9InNob3dQYWdlKCdob21lJykiPgogICAgPGRpdiBjbGFzcz0ibG9nby1pY29uIj7wn5SXPC9kaXY+CiAgICA8c3Bhbj5TdWZpTGluazwvc3Bhbj4KICA8L2Rpdj4KICA8bmF2PgogICAgPGEgb25jbGljaz0ic2hvd1BhZ2UoJ2hvbWUnKSI+RmVhdHVyZXM8L2E+CiAgICA8YSBvbmNsaWNrPSJzaG93UGFnZSgncHJpdmFjeScpIj5Qcml2YWN5PC9hPgogICAgPGEgb25jbGljaz0ic2hvd1BhZ2UoJ3Rlcm1zJykiPlRlcm1zPC9hPgogICAgCiAgPC9uYXY+CjwvaGVhZGVyPgoKPCEtLSBIT01FIFBBR0UgLS0+CjxkaXYgaWQ9InBhZ2UtaG9tZSIgY2xhc3M9InBhZ2UgYWN0aXZlIj4KPG1haW4+CiAgPHNlY3Rpb24gY2xhc3M9Imhlcm8iPgogICAgPGRpdiBjbGFzcz0iYmFkZ2UiPkZyZWUgwrcgU2VjdXJlIMK3IFBlcm1hbmVudCBMaW5rczwvZGl2PgogICAgPGgxPlVwbG9hZCBJbWFnZXMsPGJyPkdldCA8c3BhbiBjbGFzcz0iYWNjZW50Ij5SZWFsIExpbmtzPC9zcGFuPjwvaDE+CiAgICA8cD5TdWZpTGluayBpcyB0aGUgZmFzdGVzdCBmcmVlIGltYWdlIGhvc3RpbmcgdG9vbCDigJQgdXBsb2FkIGFueSBpbWFnZSBhbmQgaW5zdGFudGx5IGdldCA4KyBwZXJtYW5lbnQgbGluayBmb3JtYXRzIGluY2x1ZGluZyBEaXJlY3QgVVJMLCBIVE1MLCBNYXJrZG93biwgQkJDb2RlLCBhbmQgV2ViUC4gTm8gc2lnbi11cCwgbm8gd2F0ZXJtYXJrcy4gWW91ciBsaW5rcyB3b3JrIGZvcmV2ZXIsIHBvd2VyZWQgYnkgQ2xvdWRpbmFyeSdzIGdsb2JhbCBDRE4uPC9wPgogICAgPGRpdiBjbGFzcz0ic3RhdHMtcm93Ij4KICAgICAgPGRpdiBjbGFzcz0ic3RhdCI+PGRpdiBjbGFzcz0ic3RhdC1udW0iPjEwMCU8L2Rpdj48ZGl2IGNsYXNzPSJzdGF0LWxhYmVsIj5GcmVlIEZvcmV2ZXI8L2Rpdj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic3RhdCI+PGRpdiBjbGFzcz0ic3RhdC1udW0iPuKInjwvZGl2PjxkaXYgY2xhc3M9InN0YXQtbGFiZWwiPlVubGltaXRlZCBVcGxvYWRzPC9kaXY+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InN0YXQiPjxkaXYgY2xhc3M9InN0YXQtbnVtIj44KzwvZGl2PjxkaXYgY2xhc3M9InN0YXQtbGFiZWwiPkxpbmsgRm9ybWF0czwvZGl2PjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzdGF0Ij48ZGl2IGNsYXNzPSJzdGF0LW51bSI+U1NMPC9kaXY+PGRpdiBjbGFzcz0ic3RhdC1sYWJlbCI+U2VjdXJlZDwvZGl2PjwvZGl2PgogICAgPC9kaXY+CgogIDwhLS0gTmF0aXZlIEFkIFNsb3QgLS0+CiAgPGRpdiBzdHlsZT0ibWF4LXdpZHRoOjc2MHB4O21hcmdpbjotMTBweCBhdXRvIDIwcHg7cGFkZGluZzowIDIwcHg7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoyO3RleHQtYWxpZ246Y2VudGVyOyIgaWQ9Im5hdGl2ZS1hZC1zbG90Ij4KICA8L2Rpdj4KICA8L3NlY3Rpb24+CgogIDxzZWN0aW9uIGNsYXNzPSJ1cGxvYWQtc2VjdGlvbiI+CiAgICA8ZGl2IGNsYXNzPSJ1cGxvYWQtY2FyZCIgaWQ9ImRyb3Bab25lIj4KICAgICAgPGRpdiBjbGFzcz0idXBsb2FkLWljb24iPvCflrzvuI88L2Rpdj4KICAgICAgPGgyPkRyb3AgSW1hZ2UgSGVyZTwvaDI+CiAgICAgIDxwPkRyYWcgJiBkcm9wIG9yIGNob29zZSBmcm9tIHlvdXIgZ2FsbGVyeTwvcD4KICAgICAgPGRpdiBjbGFzcz0iZm9ybWF0LXRhZ3MiPgogICAgICAgIDxzcGFuIGNsYXNzPSJ0YWciPkpQRzwvc3Bhbj48c3BhbiBjbGFzcz0idGFnIj5QTkc8L3NwYW4+PHNwYW4gY2xhc3M9InRhZyI+R0lGPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJ0YWciPldlYlA8L3NwYW4+PHNwYW4gY2xhc3M9InRhZyI+U1ZHPC9zcGFuPjxzcGFuIGNsYXNzPSJ0YWciPkJNUDwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0idGFnIj5USUZGPC9zcGFuPjxzcGFuIGNsYXNzPSJ0YWciPkFWSUY8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8YnV0dG9uIGNsYXNzPSJidG4tdXBsb2FkIiBpZD0idXBsb2FkQnRuIj7wn5OBIENob29zZSBmcm9tIEdhbGxlcnk8L2J1dHRvbj4KICAgICAgPGRpdiBjbGFzcz0icHJvZ3Jlc3Mtd3JhcCIgaWQ9InByb2dyZXNzV3JhcCI+CiAgICAgICAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIj48ZGl2IGNsYXNzPSJwcm9ncmVzcy1maWxsIiBpZD0icHJvZ3Jlc3NGaWxsIj48L2Rpdj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcm9ncmVzcy10ZXh0IiBpZD0icHJvZ3Jlc3NUZXh0Ij5VcGxvYWRpbmcgdG8gU3VmaUxpbmsuLi48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxpbnB1dCB0eXBlPSJmaWxlIiBpZD0iZmlsZUlucHV0IiBhY2NlcHQ9ImltYWdlLyoiIG11bHRpcGxlPgogICAgPC9kaXY+CiAgPC9zZWN0aW9uPgoKICA8c2VjdGlvbiBpZD0icmVzdWx0c1NlY3Rpb24iPgogICAgPGRpdiBpZD0icmVzdWx0c0NvbnRhaW5lciI+PC9kaXY+CiAgPC9zZWN0aW9uPgoKICA8c2VjdGlvbiBpZD0iZ2FsbGVyeVNlY3Rpb24iPgogICAgPGgyIGNsYXNzPSJzZWN0aW9uLXRpdGxlIj7wn5O4IDxzcGFuPllvdXIgR2FsbGVyeTwvc3Bhbj48L2gyPgogICAgPGRpdiBjbGFzcz0iZ2FsbGVyeS1ncmlkIiBpZD0iZ2FsbGVyeUdyaWQiPjwvZGl2PgogIDwvc2VjdGlvbj4KCiAgPCEtLSBISVNUT1JZIFNFQ1RJT04gLS0+CiAgPHNlY3Rpb24gaWQ9Imhpc3RvcnlTZWN0aW9uIiBzdHlsZT0iZGlzcGxheTpub25lOyI+CiAgICA8ZGl2IGNsYXNzPSJoaXN0b3J5LWhlYWRlciI+CiAgICAgIDxoMiBjbGFzcz0ic2VjdGlvbi10aXRsZSIgc3R5bGU9Im1hcmdpbi1ib3R0b206MDsiPvCfl4LvuI8gPHNwYW4+VXBsb2FkIEhpc3Rvcnk8L3NwYW4+PC9oMj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuLWRlbGV0ZS1hbGwiIG9uY2xpY2s9ImRlbGV0ZUFsbEhpc3RvcnkoKSI+8J+Xke+4jyBEZWxldGUgQWxsPC9idXR0b24+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9Imhpc3RvcnktZ3JpZCIgaWQ9Imhpc3RvcnlHcmlkIj48L2Rpdj4KICAgIDxkaXYgY2xhc3M9InNob3ctbW9yZS13cmFwIiBpZD0ic2hvd01vcmVXcmFwIiBzdHlsZT0iZGlzcGxheTpub25lOyI+CiAgICAgIDxidXR0b24gY2xhc3M9ImJ0bi1zaG93LW1vcmUiIG9uY2xpY2s9InNob3dNb3JlSGlzdG9yeSgpIj5TaG93IE1vcmUg4oaTPC9idXR0b24+CiAgICA8L2Rpdj4KICA8L3NlY3Rpb24+CgogIDwhLS0gTU9EQUwgLS0+CiAgPGRpdiBjbGFzcz0ibW9kYWwtYmciIGlkPSJtb2RhbEJnIiBvbmNsaWNrPSJjbG9zZU1vZGFsKGV2ZW50KSI+CiAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib3giPgogICAgICA8ZGl2IGNsYXNzPSJtb2RhbC10b3AiPgogICAgICAgIDxpbWcgY2xhc3M9Im1vZGFsLWltZyIgaWQ9Im1vZGFsSW1nIiBzcmM9IiIgYWx0PSIiPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWluZm8iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtbmFtZSIgaWQ9Im1vZGFsTmFtZSI+PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1tZXRhIiBpZD0ibW9kYWxNZXRhIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJtb2RhbC1jbG9zZSIgb25jbGljaz0iY2xvc2VNb2RhbERpcmVjdCgpIj7inJU8L2J1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWxpbmtzIiBpZD0ibW9kYWxMaW5rcyI+PC9kaXY+CiAgICAgIDxidXR0b24gY2xhc3M9Im1vZGFsLWRlbCIgaWQ9Im1vZGFsRGVsQnRuIiBvbmNsaWNrPSJkZWxldGVGcm9tTW9kYWwoKSI+8J+Xke+4jyBSZW1vdmUgZnJvbSBIaXN0b3J5PC9idXR0b24+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPHNlY3Rpb24gY2xhc3M9ImZlYXR1cmVzIiBpZD0iZmVhdHVyZXMiPgogICAgPGgyIGNsYXNzPSJzZWN0aW9uLXRpdGxlIj7inKggPHNwYW4+V2h5IFN1ZmlMaW5rPzwvc3Bhbj48L2gyPgogICAgPGRpdiBjbGFzcz0iZmVhdHVyZXMtZ3JpZCI+CiAgICAgIDxhcnRpY2xlIGNsYXNzPSJmZWF0dXJlLWNhcmQiPjxzcGFuIGNsYXNzPSJmZWF0dXJlLWljb24iPuKaoTwvc3Bhbj48aDQ+TGlnaHRuaW5nIEZhc3Q8L2g0PjxwPlN1ZmlMaW5rIGRlbGl2ZXJzIHlvdXIgaW1hZ2VzIGF0IGJsYXppbmcgc3BlZWQg4oCUIGluc3RhbnQgbG9hZCBmcm9tIGFueXdoZXJlIGluIHRoZSB3b3JsZC48L3A+PC9hcnRpY2xlPgogICAgICA8YXJ0aWNsZSBjbGFzcz0iZmVhdHVyZS1jYXJkIj48c3BhbiBjbGFzcz0iZmVhdHVyZS1pY29uIj7wn5SSPC9zcGFuPjxoND5GdWxseSBTZWN1cmU8L2g0PjxwPkFsbCBpbWFnZXMgc2VydmVkIG92ZXIgSFRUUFMuIFlvdXIgZGF0YSBpcyBmdWxseSBzZWN1cmUuPC9wPjwvYXJ0aWNsZT4KICAgICAgPGFydGljbGUgY2xhc3M9ImZlYXR1cmUtY2FyZCI+PHNwYW4gY2xhc3M9ImZlYXR1cmUtaWNvbiI+8J+Ulzwvc3Bhbj48aDQ+QWxsIExpbmsgVHlwZXM8L2g0PjxwPkRpcmVjdCBVUkwsIEhUTUwsIE1hcmtkb3duLCBCQkNvZGUg4oCUIGFsbCBpbiBvbmUgcGxhY2UuPC9wPjwvYXJ0aWNsZT4KICAgICAgPGFydGljbGUgY2xhc3M9ImZlYXR1cmUtY2FyZCI+PHNwYW4gY2xhc3M9ImZlYXR1cmUtaWNvbiI+8J+TsTwvc3Bhbj48aDQ+TW9iaWxlIFJlYWR5PC9oND48cD5QaG9uZSwgdGFibGV0LCBkZXNrdG9wIOKAlCB3b3JrcyBwZXJmZWN0bHkgZXZlcnl3aGVyZS48L3A+PC9hcnRpY2xlPgogICAgICA8YXJ0aWNsZSBjbGFzcz0iZmVhdHVyZS1jYXJkIj48c3BhbiBjbGFzcz0iZmVhdHVyZS1pY29uIj7imb7vuI88L3NwYW4+PGg0PlBlcm1hbmVudCBMaW5rczwvaDQ+PHA+VXBsb2FkIG9uY2UsIHRoZSBsaW5rIHdvcmtzIGZvcmV2ZXIuPC9wPjwvYXJ0aWNsZT4KICAgICAgPGFydGljbGUgY2xhc3M9ImZlYXR1cmUtY2FyZCI+PHNwYW4gY2xhc3M9ImZlYXR1cmUtaWNvbiI+8J+Gkzwvc3Bhbj48aDQ+MTAwJSBGcmVlPC9oND48cD5ObyBhY2NvdW50LCBubyBmZWVzLCBubyB3YXRlcm1hcmtzLiAxMDAlIGZyZWUgZm9yZXZlci48L3A+PC9hcnRpY2xlPgogICAgPC9kaXY+CiAgPC9zZWN0aW9uPgoKICA8IS0tIEJhbm5lciBBZCBTbG90IC0tPgogIDxkaXYgc3R5bGU9Im1heC13aWR0aDo3NjBweDttYXJnaW46MCBhdXRvIDMwcHg7cGFkZGluZzowIDIwcHg7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoyO3RleHQtYWxpZ246Y2VudGVyOyIgaWQ9ImJhbm5lci1hZC1zbG90Ij4KICA8L2Rpdj4KPC9tYWluPgo8L2Rpdj4KCjwhLS0gUFJJVkFDWSBQT0xJQ1kgUEFHRSAtLT4KPGRpdiBpZD0icGFnZS1wcml2YWN5IiBjbGFzcz0icGFnZSI+CjxkaXYgY2xhc3M9InBvbGljeS1wYWdlIj4KICA8YnV0dG9uIGNsYXNzPSJiYWNrLWJ0biIgb25jbGljaz0ic2hvd1BhZ2UoJ2hvbWUnKSI+4oaQIEdvIEJhY2s8L2J1dHRvbj4KICA8aDE+8J+UkiA8c3BhbiBjbGFzcz0iYWNjZW50Ij5Qcml2YWN5IFBvbGljeTwvc3Bhbj48L2gxPgogIDxwIGNsYXNzPSJwb2xpY3ktZGF0ZSI+TGFzdCB1cGRhdGVkOiBNYXJjaCAyMDI2IMK3IFN1ZmlMaW5rIEltYWdlIEhvc3RpbmcgU2VydmljZTwvcD4KCiAgPGRpdiBjbGFzcz0icG9saWN5LXNlY3Rpb24iPgogICAgPGgyPvCfkYsgV2VsY29tZTwvaDI+CiAgICA8cD5TdWZpTGluayB0YWtlcyB5b3VyIHByaXZhY3kgc2VyaW91c2x5LiBUaGlzIHBvbGljeSBleHBsYWlucyB3aGF0IHdlIGRvIHdpdGggeW91ciBpbmZvcm1hdGlvbiB3aGVuIHlvdSB1c2Ugb3VyIHNlcnZpY2UuPC9wPgogICAgPGRpdiBjbGFzcz0icG9saWN5LWhpZ2hsaWdodCI+8J+boe+4jyBTaG9ydCBhbnN3ZXI6IFdlIGRvIG5vdCBjb2xsZWN0IGFueSBwZXJzb25hbCBkYXRhIGFuZCBuZXZlciBzZWxsIHlvdXIgaW1hZ2VzIHRvIGFueW9uZS48L2Rpdj4KICA8L2Rpdj4KCiAgPGRpdiBjbGFzcz0icG9saWN5LXNlY3Rpb24iPgogICAgPGgyPvCfk7ggWW91ciBJbWFnZXM8L2gyPgogICAgPHVsPgogICAgICA8bGk+WW91ciBpbWFnZXMgYXJlIHN0b3JlZCBvbiBDbG91ZGluYXJ5J3Mgc2VjdXJlIHNlcnZlcnMuPC9saT4KICAgICAgPGxpPllvdXIgaW1hZ2VzIGFyZSBhY2Nlc3NpYmxlIG9ubHkgdmlhIHRoZSBsaW5rIGluIHlvdXIgcG9zc2Vzc2lvbi48L2xpPgogICAgICA8bGk+V2UgZG8gbm90IHNlbGwgeW91ciBpbWFnZXMgdG8gYW55IHRoaXJkIHBhcnR5LjwvbGk+CiAgICAgIDxsaT5XZSBkbyBub3QgdXNlIHlvdXIgaW1hZ2VzIGZvciBhZHZlcnRpc2luZy48L2xpPgogICAgICA8bGk+VGhlcmUgaXMgbm8gcHVibGljIGluZGV4IG9yIGdhbGxlcnkgb2YgeW91ciBpbWFnZXMuPC9saT4KICAgIDwvdWw+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9InBvbGljeS1zZWN0aW9uIj4KICAgIDxoMj7wn42qIENvb2tpZXMgYW5kIFRyYWNraW5nPC9oMj4KICAgIDxwPlN1ZmlMaW5rIGRvZXMgbm90IHVzZSBhbnkgdHJhY2tpbmcgY29va2llcy4gV2UgZG8gbm90IHRyYWNrIHlvdXIgYnJvd3NpbmcuIE5vIHRoaXJkLXBhcnR5IGFuYWx5dGljcy48L3A+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9InBvbGljeS1zZWN0aW9uIj4KICAgIDxoMj7wn5OKIERhdGEgQ29sbGVjdGlvbjwvaDI+CiAgICA8cD5XZSBjb2xsZWN0IG5vIHBlcnNvbmFsIGluZm9ybWF0aW9uIOKAlCBubyBuYW1lLCBubyBlbWFpbCwgbm8gcGhvbmUgbnVtYmVyLiBObyBhY2NvdW50IGlzIHJlcXVpcmVkIHRvIHVzZSB0aGUgc2VydmljZS48L3A+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9InBvbGljeS1zZWN0aW9uIj4KICAgIDxoMj7imqDvuI8gUHJvaGliaXRlZCBDb250ZW50PC9oMj4KICAgIDxwPlVwbG9hZGluZyB0aGUgZm9sbG93aW5nIGNvbnRlbnQgaXMgc3RyaWN0bHkgcHJvaGliaXRlZDo8L3A+CiAgICA8dWw+CiAgICAgIDxsaT5BbnkgaWxsZWdhbCBvciBoYXJtZnVsIGNvbnRlbnQ8L2xpPgogICAgICA8bGk+Q29weXJpZ2h0ZWQgaW1hZ2VzIG9mIG90aGVycyB3aXRob3V0IHBlcm1pc3Npb248L2xpPgogICAgICA8bGk+T2ZmZW5zaXZlLCBpbmFwcHJvcHJpYXRlLCBvciBhZHVsdC1vbmx5IGNvbnRlbnQ8L2xpPgogICAgICA8bGk+SW1hZ2VzIHRoYXQgdmlvbGF0ZSBvdGhlcnMnIHByaXZhY3k8L2xpPgogICAgPC91bD4KICAgIDxwPlN1Y2ggaW1hZ2VzIG1heSBiZSByZW1vdmVkIHdpdGhvdXQgbm90aWNlLjwvcD4KICA8L2Rpdj4KCiAgPGRpdiBjbGFzcz0icG9saWN5LXNlY3Rpb24iPgogICAgPGgyPvCfk6cgQ29udGFjdDwvaDI+CiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgY29uY2VybnMgb3IgbmVlZCB0byByZXBvcnQgYW4gaW1hZ2UsIHBsZWFzZSBjb250YWN0IHVzLiBXZSB3aWxsIGRvIG91ciBiZXN0IHRvIGFzc2lzdCB5b3UuPC9wPgogIDwvZGl2Pgo8L2Rpdj4KPC9kaXY+Cgo8IS0tIFRFUk1TIE9GIFNFUlZJQ0UgUEFHRSAtLT4KPGRpdiBpZD0icGFnZS10ZXJtcyIgY2xhc3M9InBhZ2UiPgo8ZGl2IGNsYXNzPSJwb2xpY3ktcGFnZSI+CiAgPGJ1dHRvbiBjbGFzcz0iYmFjay1idG4iIG9uY2xpY2s9InNob3dQYWdlKCdob21lJykiPuKGkCBHbyBCYWNrPC9idXR0b24+CiAgPGgxPvCfk4sgPHNwYW4gY2xhc3M9ImFjY2VudCI+VGVybXMgb2YgU2VydmljZTwvc3Bhbj48L2gxPgogIDxwIGNsYXNzPSJwb2xpY3ktZGF0ZSI+TGFzdCB1cGRhdGVkOiBNYXJjaCAyMDI2IMK3IFN1ZmlMaW5rIEltYWdlIEhvc3RpbmcgU2VydmljZTwvcD4KCiAgPGRpdiBjbGFzcz0icG9saWN5LXNlY3Rpb24iPgogICAgPGgyPuKchSBTZXJ2aWNlIEFncmVlbWVudDwvaDI+CiAgICA8cD5CeSB1c2luZyBTdWZpTGluaywgeW91IGFncmVlIHRvIHRoZXNlIHRlcm1zLiBUaGlzIGlzIGEgZnJpZW5kbHkgYWdyZWVtZW50IOKAlCB3ZSB3YW50IHRoZSBzZXJ2aWNlIHRvIGJlIGdyZWF0IGZvciBldmVyeW9uZS48L3A+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9InBvbGljeS1zZWN0aW9uIj4KICAgIDxoMj7wn4aTIEZyZWUgU2VydmljZTwvaDI+CiAgICA8cD5TdWZpTGluayBpcyBjb21wbGV0ZWx5IGZyZWUuIE5vIGhpZGRlbiBjaGFyZ2VzLCBubyBwcmVtaXVtIHBsYW5zLjwvcD4KICAgIDxkaXYgY2xhc3M9InBvbGljeS1oaWdobGlnaHQiPldlIG1ha2UgZXZlcnkgZWZmb3J0IHRvIHBlcm1hbmVudGx5IGhvc3QgeW91ciBpbWFnZXMgYW5kIGxlYXZlIG5vIHN0b25lIHVudHVybmVkIG9uIG91ciBlbmQuPC9kaXY+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9InBvbGljeS1zZWN0aW9uIj4KICAgIDxoMj7impbvuI8gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHk8L2gyPgogICAgPHVsPgogICAgICA8bGk+U3VmaUxpbmsgaXMgYSBmcmVlIHNlcnZpY2Ug4oCUIHdlIGRvIG91ciBhYnNvbHV0ZSBiZXN0LjwvbGk+CiAgICAgIDxsaT5UaGlzIHNlcnZpY2UgZGVwZW5kcyBvbiBDbG91ZGluYXJ5IChhIHRoaXJkIHBhcnR5KS4gSWYgYW4gaW1hZ2UgaXMgZGVsZXRlZCBkdWUgdG8gYW55IHRlY2huaWNhbCBvciBleHRlcm5hbCByZWFzb24sIFN1ZmlMaW5rIHdpbGwgbm90IGJlIGhlbGQgcmVzcG9uc2libGUuPC9saT4KICAgICAgPGxpPldlIHJlY29tbWVuZCBrZWVwaW5nIGEgYmFja3VwIG9mIGltcG9ydGFudCBpbWFnZXMgb24geW91ciBvd24gZGV2aWNlLjwvbGk+CiAgICAgIDxsaT5JbiB0aGUgZXZlbnQgb2YgYW55IHNlcnZpY2UgaW50ZXJydXB0aW9uLCB3ZSB3aWxsIHJlc3RvcmUgYW5kIHJlc29sdmUgdGhlIGlzc3VlIGFzIHF1aWNrbHkgYXMgcG9zc2libGUuPC9saT4KICAgIDwvdWw+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9InBvbGljeS1zZWN0aW9uIj4KICAgIDxoMj7wn5qrIFByb2hpYml0ZWQgVXNlPC9oMj4KICAgIDx1bD4KICAgICAgPGxpPkRvIG5vdCB1c2UgdGhlIHNlcnZpY2UgZm9yIGFueSBpbGxlZ2FsIGFjdGl2aXR5LjwvbGk+CiAgICAgIDxsaT5BY2Nlc3MgbWF5IGJlIHN1c3BlbmRlZCBpbiBjYXNlcyBvZiBzcGFtIG9yIGFidXNlLjwvbGk+CiAgICAgIDxsaT5EbyBub3QgdXBsb2FkIGltYWdlcyB0aGF0IHZpb2xhdGUgb3RoZXJzJyBwcml2YWN5LjwvbGk+CiAgICAgIDxsaT5EbyBub3QgYXR0ZW1wdCB0byBkZWxpYmVyYXRlbHkgb3ZlcmxvYWQgdGhlIHNlcnZpY2UuPC9saT4KICAgIDwvdWw+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9InBvbGljeS1zZWN0aW9uIj4KICAgIDxoMj7wn5SEIENoYW5nZXMgdG8gVGVybXM8L2gyPgogICAgPHA+V2UgbWF5IHVwZGF0ZSB0aGVzZSB0ZXJtcyBhdCBhbnkgdGltZS4gQ29udGludWVkIHVzZSBvZiB0aGUgc2VydmljZSBjb25zdGl0dXRlcyBhZ3JlZW1lbnQgdG8gdGhlIG5ldyB0ZXJtcy48L3A+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9InBvbGljeS1zZWN0aW9uIj4KICAgIDxoMj7wn6SdIE91ciBQcm9taXNlPC9oMj4KICAgIDxwPlN1ZmlMaW5rIGlzIGEgdHJ1c3RlZCwgZnJlZSwgYW5kIGhvbmVzdCBzZXJ2aWNlLiBXZSB3aWxsIGFsd2F5cyBiZSB0cmFuc3BhcmVudCB3aXRoIHlvdSBhbmQgZG8gZXZlcnl0aGluZyB0byBtYWludGFpbiB5b3VyIHRydXN0LjwvcD4KICAgIDxkaXYgY2xhc3M9InBvbGljeS1oaWdobGlnaHQiPuKciiBTdWZpTGluaydzIHByb21pc2U6IHlvdXIgaW1hZ2VzIHNlY3VyZSwgeW91ciBkYXRhIHByaXZhdGUsIGFuZCB0aGUgc2VydmljZSBhbHdheXMgZnJlZS48L2Rpdj4KICA8L2Rpdj4KPC9kaXY+CjwvZGl2PgoKPGZvb3Rlcj4KICA8ZGl2IGNsYXNzPSJsb2dvIiBvbmNsaWNrPSJzaG93UGFnZSgnaG9tZScpIj4KICAgIDxkaXYgY2xhc3M9ImxvZ28taWNvbiI+8J+UlzwvZGl2PgogICAgPHNwYW4+U3VmaUxpbms8L3NwYW4+CiAgPC9kaXY+CiAgPHA+wqkgMjAyNiBTdWZpTGluayDCtyBGcmVlIEltYWdlIEhvc3Rpbmc8L3A+CiAgPHAgc3R5bGU9ImZvbnQtc2l6ZTowLjc1cmVtO2NvbG9yOiM0NzU1Njk7Zm9udC1mYW1pbHk6J1NwYWNlIE1vbm8nLG1vbm9zcGFjZTsiPlBvd2VyZWQgYnkgPGEgaHJlZj0iaHR0cHM6Ly9zdWZpem9uYS5jb20iIHRhcmdldD0iX2JsYW5rIiBzdHlsZT0iY29sb3I6I2E4NTVmNzt0ZXh0LWRlY29yYXRpb246bm9uZTtmb250LXdlaWdodDo3MDA7Ij5TdWZpWm9uYTwvYT48L3A+CiAgPGRpdiBjbGFzcz0iZm9vdGVyLWxpbmtzIj4KICAgIDxhIG9uY2xpY2s9InNob3dQYWdlKCdwcml2YWN5JykiPlByaXZhY3kgUG9saWN5PC9hPgogICAgPGEgb25jbGljaz0ic2hvd1BhZ2UoJ3Rlcm1zJykiPlRlcm1zIG9mIFNlcnZpY2U8L2E+CiAgICA8YSBvbmNsaWNrPSJzaG93UGFnZSgnaG9tZScpIj5Ib21lPC9hPgogIDwvZGl2PgoKICA8IS0tIEZvb3RlciBEZXNjcmlwdGlvbiAtLT4KICA8ZGl2IHN0eWxlPSIKICAgIHdpZHRoOjEwMCU7CiAgICBiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcscmdiYSgxMjQsNTgsMjM3LDAuMTApLHJnYmEoMzQsMTk3LDk0LDAuMDYpKTsKICAgIGJvcmRlcjoxcHggc29saWQgcmdiYSgxMjQsNTgsMjM3LDAuMjApOwogICAgYm9yZGVyLXJhZGl1czoxNHB4OwogICAgcGFkZGluZzoyMHB4IDI4cHg7CiAgICBtYXJnaW4tdG9wOjE2cHg7CiAgICB0ZXh0LWFsaWduOmNlbnRlcjsKICAgIGZvbnQtZmFtaWx5OidETSBTYW5zJyxzYW5zLXNlcmlmOwogICAgZm9udC1zaXplOjAuODByZW07CiAgICBsaW5lLWhlaWdodDoxLjk7CiAgICBjb2xvcjojNjQ3NDhiOwogICAgZmxleC1iYXNpczoxMDAlOwogICAgb3JkZXI6MTA7CiAgIj4KICAgIDxzdHJvbmcgc3R5bGU9ImJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLCNhODU1ZjcsIzIyYzU1ZSk7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6dGV4dDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDtmb250LXNpemU6MC44OHJlbTtmb250LXdlaWdodDo3MDA7Ij5TdWZpTGluazwvc3Ryb25nPgogICAgJm5ic3A74oCUIEZyZWUgSW1hZ2UgSG9zdGluZyAmYW1wOyBQZXJtYW5lbnQgTGluayBHZW5lcmF0b3IuPGJyPgogICAgVXBsb2FkIGltYWdlcyBpbnN0YW50bHkgYW5kIGdldCBkaXJlY3QgbGlua3MgaW4gOCsgZm9ybWF0czogRGlyZWN0IFVSTCwgSFRNTCwgTWFya2Rvd24sIEJCQ29kZSwgV2ViUCwgYW5kIG1vcmUuIAogICAgTm8gYWNjb3VudCByZXF1aXJlZC4gTm8gd2F0ZXJtYXJrcy4gMTAwJSBmcmVlIGZvcmV2ZXIuIFBvd2VyZWQgYnkgQ2xvdWRpbmFyeSBDRE4gZm9yIGJsYXppbmctZmFzdCBnbG9iYWwgZGVsaXZlcnkuPGJyPgogICAgPHNwYW4gc3R5bGU9ImNvbG9yOiM0NzU1Njk7Zm9udC1zaXplOjAuNzVyZW07Zm9udC1mYW1pbHk6J1NwYWNlIE1vbm8nLG1vbm9zcGFjZTsiPgogICAgICAmY29weTsgMjAyNiBTdWZpTGluayAmbmJzcDvCtyZuYnNwOwogICAgICA8YSBvbmNsaWNrPSJzaG93UGFnZSgncHJpdmFjeScpIiBzdHlsZT0iY29sb3I6IzdjM2FlZDt0ZXh0LWRlY29yYXRpb246bm9uZTtjdXJzb3I6cG9pbnRlcjsiPlByaXZhY3kgUG9saWN5PC9hPgogICAgICAmbmJzcDvCtyZuYnNwOwogICAgICA8YSBvbmNsaWNrPSJzaG93UGFnZSgndGVybXMnKSIgc3R5bGU9ImNvbG9yOiM3YzNhZWQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y3Vyc29yOnBvaW50ZXI7Ij5UZXJtcyBvZiBTZXJ2aWNlPC9hPgogICAgICAmbmJzcDvCtyZuYnNwOyBGcmVlICZuYnNwO8K3Jm5ic3A7IFNlY3VyZSAmbmJzcDvCtyZuYnNwOyBQZXJtYW5lbnQgTGlua3MKICAgIDwvc3Bhbj4KICA8L2Rpdj4KCjwvZm9vdGVyPgoKPHNjcmlwdD4KLy8gU2VjdXJpdHkKKGZ1bmN0aW9uKCl7CiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKTtyZXR1cm4gZmFsc2U7fSk7CiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsZnVuY3Rpb24oZSl7CiAgICBpZihlLmtleUNvZGU9PT0xMjMpe2UucHJldmVudERlZmF1bHQoKTtyZXR1cm4gZmFsc2U7fQogICAgaWYoZS5jdHJsS2V5JiZlLnNoaWZ0S2V5JiYoZS5rZXlDb2RlPT09NzN8fGUua2V5Q29kZT09PTc0KSl7ZS5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiBmYWxzZTt9CiAgICBpZihlLmN0cmxLZXkmJmUua2V5Q29kZT09PTg1KXtlLnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIGZhbHNlO30KICB9KTsKICBzZXRJbnRlcnZhbChmdW5jdGlvbigpewogICAgdmFyIHM9bmV3IERhdGUoKTsKICAgIGRlYnVnZ2VyOwogICAgaWYobmV3IERhdGUoKS1zPjEwMCl7ZG9jdW1lbnQuYm9keS5zdHlsZS5kaXNwbGF5PSdub25lJzt9CiAgfSwzMDAwKTsKfSkoKTsKPC9zY3JpcHQ+CjxzY3JpcHQ+Ci8vID09PT09IFBBR0UgTkFWSUdBVElPTiA9PT09PQpmdW5jdGlvbiBzaG93UGFnZShuYW1lKSB7CiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnBhZ2UnKS5mb3JFYWNoKHAgPT4gcC5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKSk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhZ2UtJyArIG5hbWUpLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOwogIHdpbmRvdy5zY3JvbGxUbyh7IHRvcDogMCwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pOwogIHBsYXlTb3VuZCgnY2xpY2snKTsKfQoKLy8gPT09PT0gU09VTkQgRUZGRUNUUyA9PT09PQpsZXQgYXVkaW9DdHggPSBudWxsOwpmdW5jdGlvbiBnZXRDdHgoKSB7CiAgaWYgKCFhdWRpb0N0eCkgewogICAgdHJ5IHsgYXVkaW9DdHggPSBuZXcgKHdpbmRvdy5BdWRpb0NvbnRleHQgfHwgd2luZG93LndlYmtpdEF1ZGlvQ29udGV4dCkoKTsgfSBjYXRjaChlKSB7fQogIH0KICByZXR1cm4gYXVkaW9DdHg7Cn0KZnVuY3Rpb24gcGxheVNvdW5kKHR5cGUpIHsKICB0cnkgewogICAgY29uc3QgY3R4ID0gZ2V0Q3R4KCk7CiAgICBpZiAoIWN0eCkgcmV0dXJuOwogICAgaWYgKGN0eC5zdGF0ZSA9PT0gJ3N1c3BlbmRlZCcpIGN0eC5yZXN1bWUoKTsKICAgIGNvbnN0IG9zYyA9IGN0eC5jcmVhdGVPc2NpbGxhdG9yKCk7CiAgICBjb25zdCBnYWluID0gY3R4LmNyZWF0ZUdhaW4oKTsKICAgIG9zYy5jb25uZWN0KGdhaW4pOwogICAgZ2Fpbi5jb25uZWN0KGN0eC5kZXN0aW5hdGlvbik7CiAgICBjb25zdCB0ID0gY3R4LmN1cnJlbnRUaW1lOwogICAgaWYgKHR5cGUgPT09ICdjbGljaycpIHsKICAgICAgb3NjLnR5cGUgPSAnc2luZSc7IG9zYy5mcmVxdWVuY3kudmFsdWUgPSA0MDA7CiAgICAgIGdhaW4uZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLjA0LCB0KTsKICAgICAgZ2Fpbi5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoMC4wMDEsIHQgKyAwLjA3KTsKICAgICAgb3NjLnN0YXJ0KHQpOyBvc2Muc3RvcCh0ICsgMC4wNyk7CiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd1cGxvYWQnKSB7CiAgICAgIG9zYy50eXBlID0gJ3NpbmUnOwogICAgICBvc2MuZnJlcXVlbmN5LnNldFZhbHVlQXRUaW1lKDMwMCwgdCk7CiAgICAgIG9zYy5mcmVxdWVuY3kuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSg2MDAsIHQgKyAwLjIpOwogICAgICBnYWluLmdhaW4uc2V0VmFsdWVBdFRpbWUoMC4wOCwgdCk7CiAgICAgIGdhaW4uZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKDAuMDAxLCB0ICsgMC4zKTsKICAgICAgb3NjLnN0YXJ0KHQpOyBvc2Muc3RvcCh0ICsgMC4zKTsKICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2NvcHknKSB7CiAgICAgIG9zYy50eXBlID0gJ3NpbmUnOwogICAgICBvc2MuZnJlcXVlbmN5LnNldFZhbHVlQXRUaW1lKDcwMCwgdCk7CiAgICAgIG9zYy5mcmVxdWVuY3kuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSgxMDAwLCB0ICsgMC4xKTsKICAgICAgZ2Fpbi5nYWluLnNldFZhbHVlQXRUaW1lKDAuMDYsIHQpOwogICAgICBnYWluLmdhaW4uZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSgwLjAwMSwgdCArIDAuMTUpOwogICAgICBvc2Muc3RhcnQodCk7IG9zYy5zdG9wKHQgKyAwLjE1KTsKICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3N1Y2Nlc3MnKSB7CiAgICAgIGNvbnN0IG9zYzIgPSBjdHguY3JlYXRlT3NjaWxsYXRvcigpOwogICAgICBjb25zdCBnYWluMiA9IGN0eC5jcmVhdGVHYWluKCk7CiAgICAgIG9zYzIuY29ubmVjdChnYWluMik7IGdhaW4yLmNvbm5lY3QoY3R4LmRlc3RpbmF0aW9uKTsKICAgICAgb3NjLnR5cGUgPSAnc2luZSc7IG9zYy5mcmVxdWVuY3kudmFsdWUgPSA1MjM7CiAgICAgIGdhaW4uZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLjA4LCB0KTsgZ2Fpbi5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoMC4wMDEsIHQgKyAwLjIpOwogICAgICBvc2Muc3RhcnQodCk7IG9zYy5zdG9wKHQgKyAwLjIpOwogICAgICBvc2MyLnR5cGUgPSAnc2luZSc7IG9zYzIuZnJlcXVlbmN5LnZhbHVlID0gNzg0OwogICAgICBnYWluMi5nYWluLnNldFZhbHVlQXRUaW1lKDAuMDgsIHQgKyAwLjE4KTsgZ2FpbjIuZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKDAuMDAxLCB0ICsgMC40KTsKICAgICAgb3NjMi5zdGFydCh0ICsgMC4xOCk7IG9zYzIuc3RvcCh0ICsgMC40KTsKICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2Vycm9yJykgewogICAgICBvc2MudHlwZSA9ICdzYXd0b290aCc7IG9zYy5mcmVxdWVuY3kudmFsdWUgPSAyMDA7CiAgICAgIGdhaW4uZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLjA2LCB0KTsgZ2Fpbi5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoMC4wMDEsIHQgKyAwLjMpOwogICAgICBvc2Muc3RhcnQodCk7IG9zYy5zdG9wKHQgKyAwLjMpOwogICAgfQogIH0gY2F0Y2goZSkge30KfQoKLy8gPT09PT0gQ0xPVURJTkFSWSBDT05GSUcgPT09PT0KY29uc3QgQ0xPVURfTkFNRSA9ICdkd2FrZmxneGcnOwpjb25zdCBVUExPQURfUFJFU0VUID0gJ3N1ZmlsaW5rJzsKCi8vID09PT09IExPQ0FMIFNUT1JBR0UgPT09PT0KY29uc3QgTFNfS0VZID0gJ3N1ZmlsaW5rX2hpc3RvcnknOwpjb25zdCBWSVNJQkxFX0NPVU5UID0gMzsKbGV0IGhpc3RvcnlTaG93QWxsID0gZmFsc2U7CgpmdW5jdGlvbiBsb2FkSGlzdG9yeSgpIHsKICB0cnkgeyByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMU19LRVkpKSB8fCBbXTsgfSBjYXRjaChlKSB7IHJldHVybiBbXTsgfQp9CmZ1bmN0aW9uIHNhdmVIaXN0b3J5KGFycikgewogIHRyeSB7IGxvY2FsU3RvcmFnZS5zZXRJdGVtKExTX0tFWSwgSlNPTi5zdHJpbmdpZnkoYXJyKSk7IH0gY2F0Y2goZSkge30KfQpmdW5jdGlvbiBhZGRUb0hpc3RvcnkoZW50cnkpIHsKICBjb25zdCBhcnIgPSBsb2FkSGlzdG9yeSgpOwogIGFyci51bnNoaWZ0KGVudHJ5KTsKICBzYXZlSGlzdG9yeShhcnIpOwogIHJlbmRlckhpc3RvcnkoKTsKfQpmdW5jdGlvbiBkZWxldGVIaXN0b3J5SXRlbShpZCkgewogIGNvbnN0IGFyciA9IGxvYWRIaXN0b3J5KCkuZmlsdGVyKGUgPT4gZS5pZCAhPT0gaWQpOwogIHNhdmVIaXN0b3J5KGFycik7CiAgcmVuZGVySGlzdG9yeSgpOwogIHNob3dUb2FzdCgn8J+Xke+4jyBSZW1vdmVkIGZyb20gaGlzdG9yeScpOwp9CmZ1bmN0aW9uIGRlbGV0ZUFsbEhpc3RvcnkoKSB7CiAgaWYgKCFjb25maXJtKCdSZW1vdmUgYWxsIGltYWdlcyBmcm9tIGhpc3Rvcnk/JykpIHJldHVybjsKICBzYXZlSGlzdG9yeShbXSk7CiAgcmVuZGVySGlzdG9yeSgpOwogIHNob3dUb2FzdCgn8J+Xke+4jyBIaXN0b3J5IGNsZWFyZWQnKTsKfQoKZnVuY3Rpb24gcmVuZGVySGlzdG9yeSgpIHsKICBjb25zdCBhcnIgPSBsb2FkSGlzdG9yeSgpOwogIGNvbnN0IHNlYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoaXN0b3J5U2VjdGlvbicpOwogIGNvbnN0IGdyaWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGlzdG9yeUdyaWQnKTsKICBjb25zdCBtb3JlV3JhcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaG93TW9yZVdyYXAnKTsKICBpZiAoIWFyci5sZW5ndGgpIHsgc2VjLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7IHJldHVybjsgfQogIHNlYy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICBjb25zdCB2aXNpYmxlID0gaGlzdG9yeVNob3dBbGwgPyBhcnIgOiBhcnIuc2xpY2UoMCwgVklTSUJMRV9DT1VOVCk7CiAgZ3JpZC5pbm5lckhUTUwgPSB2aXNpYmxlLm1hcChlID0+IGAKICAgIDxkaXYgY2xhc3M9Imhpc3RvcnktaXRlbSIgZGF0YS1oaWQ9IiR7ZS5pZH0iPgogICAgICA8aW1nIHNyYz0iJHtlLnRodW1iIHx8IGUuZGlyZWN0fSIgYWx0PSIke2VzY2FwZUh0bWwoZS5uYW1lKX0iIGxvYWRpbmc9ImxhenkiPgogICAgICA8ZGl2IGNsYXNzPSJoLW92ZXJsYXkiPvCflJc8L2Rpdj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iZGVsLWJ0biIgb25jbGljaz0iZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7ZGVsZXRlSGlzdG9yeUl0ZW0oJyR7ZS5pZH0nKSIgdGl0bGU9IlJlbW92ZSI+4pyVPC9idXR0b24+CiAgICA8L2Rpdj5gKS5qb2luKCcnKTsKICBncmlkLnF1ZXJ5U2VsZWN0b3JBbGwoJy5oaXN0b3J5LWl0ZW0nKS5mb3JFYWNoKGVsID0+IHsKICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gb3Blbk1vZGFsKGVsLmRhdGFzZXQuaGlkKSk7CiAgfSk7CiAgbW9yZVdyYXAuc3R5bGUuZGlzcGxheSA9ICghaGlzdG9yeVNob3dBbGwgJiYgYXJyLmxlbmd0aCA+IFZJU0lCTEVfQ09VTlQpID8gJ2Jsb2NrJyA6ICdub25lJzsKfQoKZnVuY3Rpb24gc2hvd01vcmVIaXN0b3J5KCkgewogIGhpc3RvcnlTaG93QWxsID0gdHJ1ZTsKICByZW5kZXJIaXN0b3J5KCk7Cn0KCi8vID09PT09IE1PREFMID09PT09CmxldCBjdXJyZW50TW9kYWxJZCA9IG51bGw7CmZ1bmN0aW9uIG9wZW5Nb2RhbChpZCkgewogIGNvbnN0IGFyciA9IGxvYWRIaXN0b3J5KCk7CiAgY29uc3QgZW50cnkgPSBhcnIuZmluZChlID0+IGUuaWQgPT09IGlkKTsKICBpZiAoIWVudHJ5KSByZXR1cm47CiAgY3VycmVudE1vZGFsSWQgPSBpZDsKICBwbGF5U291bmQoJ2NsaWNrJyk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFsSW1nJykuc3JjID0gZW50cnkudGh1bWIgfHwgZW50cnkuZGlyZWN0OwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RhbE5hbWUnKS50ZXh0Q29udGVudCA9IGVudHJ5Lm5hbWU7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFsTWV0YScpLnRleHRDb250ZW50ID0gZW50cnkuc2l6ZSArICcgwrcgJyArIChlbnRyeS50eXBlIHx8ICdpbWFnZScpOwogIGNvbnN0IGxpbmtzID0gZ2VuZXJhdGVMaW5rcyhlbnRyeS5uYW1lLCBlbnRyeSk7CiAgY29uc3QgdHlwZU1hcCA9IHsgZGlyZWN0Oid0eXBlLWRpcmVjdCcsIGh0bWw6J3R5cGUtaHRtbCcsIG1hcmtkb3duOid0eXBlLW1hcmtkb3duJywgYmI6J3R5cGUtYmInLCBmb3J1bTondHlwZS1mb3J1bScgfTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kYWxMaW5rcycpLmlubmVySFRNTCA9IGxpbmtzLm1hcChsID0+IGAKICAgIDxkaXYgY2xhc3M9Imxpbmstcm93Ij4KICAgICAgPGRpdiBjbGFzcz0ibGluay1sYWJlbCI+JHtsLmxhYmVsfTxzcGFuIGNsYXNzPSJsaW5rLXR5cGUgJHt0eXBlTWFwW2wudHlwZV18fCd0eXBlLWRpcmVjdCd9Ij4ke2wudHlwZS50b1VwcGVyQ2FzZSgpfTwvc3Bhbj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ibGluay1jb250ZW50Ij4KICAgICAgICA8aW5wdXQgY2xhc3M9ImxpbmstaW5wdXQiIHR5cGU9InRleHQiIHZhbHVlPSIke2VzY2FwZUF0dHIobC5jb2RlKX0iIHJlYWRvbmx5IG9uY2xpY2s9InRoaXMuc2VsZWN0KCkiPgogICAgICAgIDxidXR0b24gY2xhc3M9ImNvcHktYnRuIiBvbmNsaWNrPSJjb3B5TGluayh0aGlzLCcke2VzY2FwZUF0dHIobC5jb2RlKX0nKSI+Q29weTwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PmApLmpvaW4oJycpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RhbEJnJykuY2xhc3NMaXN0LmFkZCgnb3BlbicpOwp9CmZ1bmN0aW9uIGNsb3NlTW9kYWwoZSkgewogIGlmIChlLnRhcmdldCA9PT0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFsQmcnKSkgY2xvc2VNb2RhbERpcmVjdCgpOwp9CmZ1bmN0aW9uIGNsb3NlTW9kYWxEaXJlY3QoKSB7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFsQmcnKS5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyk7CiAgY3VycmVudE1vZGFsSWQgPSBudWxsOwp9CmZ1bmN0aW9uIGRlbGV0ZUZyb21Nb2RhbCgpIHsKICBpZiAoY3VycmVudE1vZGFsSWQpIHsKICAgIGRlbGV0ZUhpc3RvcnlJdGVtKGN1cnJlbnRNb2RhbElkKTsKICAgIGNsb3NlTW9kYWxEaXJlY3QoKTsKICB9Cn0KCi8vID09PT09IERPTSBSRUZTID09PT09CmNvbnN0IGRyb3Bab25lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Ryb3Bab25lJyk7CmNvbnN0IGZpbGVJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlSW5wdXQnKTsKY29uc3QgcmVzdWx0c1NlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0c1NlY3Rpb24nKTsKY29uc3QgcmVzdWx0c0NvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHRzQ29udGFpbmVyJyk7CmNvbnN0IGdhbGxlcnlTZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dhbGxlcnlTZWN0aW9uJyk7CmNvbnN0IGdhbGxlcnlHcmlkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dhbGxlcnlHcmlkJyk7CmNvbnN0IHByb2dyZXNzV3JhcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcm9ncmVzc1dyYXAnKTsKY29uc3QgcHJvZ3Jlc3NGaWxsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Byb2dyZXNzRmlsbCcpOwpjb25zdCBwcm9ncmVzc1RleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJvZ3Jlc3NUZXh0Jyk7CmNvbnN0IHVwbG9hZEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cGxvYWRCdG4nKTsKCnVwbG9hZEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGUgPT4geyBlLnN0b3BQcm9wYWdhdGlvbigpOyBwbGF5U291bmQoJ2NsaWNrJyk7IGZpbGVJbnB1dC5jbGljaygpOyB9KTsKZHJvcFpvbmUuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCBlID0+IHsgZS5wcmV2ZW50RGVmYXVsdCgpOyBkcm9wWm9uZS5jbGFzc0xpc3QuYWRkKCdkcmFnLW92ZXInKTsgfSk7CmRyb3Bab25lLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdsZWF2ZScsICgpID0+IGRyb3Bab25lLmNsYXNzTGlzdC5yZW1vdmUoJ2RyYWctb3ZlcicpKTsKZHJvcFpvbmUuYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsIGUgPT4gewogIGUucHJldmVudERlZmF1bHQoKTsgZHJvcFpvbmUuY2xhc3NMaXN0LnJlbW92ZSgnZHJhZy1vdmVyJyk7CiAgY29uc3QgZmlsZXMgPSBbLi4uZS5kYXRhVHJhbnNmZXIuZmlsZXNdLmZpbHRlcihmID0+IGYudHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSk7CiAgaWYgKGZpbGVzLmxlbmd0aCkgcHJvY2Vzc0ZpbGVzKGZpbGVzKTsKfSk7CmRyb3Bab25lLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZSA9PiB7CiAgaWYgKGUudGFyZ2V0ID09PSB1cGxvYWRCdG4gfHwgdXBsb2FkQnRuLmNvbnRhaW5zKGUudGFyZ2V0KSkgcmV0dXJuOwogIHBsYXlTb3VuZCgnY2xpY2snKTsgZmlsZUlucHV0LmNsaWNrKCk7Cn0pOwpmaWxlSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZSA9PiB7CiAgY29uc3QgZmlsZXMgPSBbLi4uZS50YXJnZXQuZmlsZXNdOwogIGlmIChmaWxlcy5sZW5ndGgpIHByb2Nlc3NGaWxlcyhmaWxlcyk7CiAgZmlsZUlucHV0LnZhbHVlID0gJyc7Cn0pOwoKZnVuY3Rpb24gcHJvY2Vzc0ZpbGVzKGZpbGVzKSB7CiAgaWYgKGZpbGVzLmxlbmd0aCA+IDMpIHsKICAgIHNob3dUb2FzdCgn4pqg77iPIE1heCAzIGltYWdlcyBhdCBvbmNlLiBGaXJzdCAzIHNlbGVjdGVkLicsIHRydWUpOwogICAgZmlsZXMgPSBmaWxlcy5zbGljZSgwLCAzKTsKICB9CiAgcGxheVNvdW5kKCd1cGxvYWQnKTsKICBmaWxlcy5mb3JFYWNoKChmaWxlLCBpKSA9PiBzZXRUaW1lb3V0KCgpID0+IHVwbG9hZFRvQ2xvdWRpbmFyeShmaWxlKSwgaSAqIDYwMCkpOwp9Cgphc3luYyBmdW5jdGlvbiB1cGxvYWRUb0Nsb3VkaW5hcnkoZmlsZSkgewogIGNvbnN0IGxvY2FsSWQgPSAnaW1nXycgKyBEYXRlLm5vdygpICsgJ18nICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiw3KTsKICBjb25zdCBzaXplS0IgPSAoZmlsZS5zaXplIC8gMTAyNCkudG9GaXhlZCgxKTsKICBjb25zdCBzaXplTGFiZWwgPSBzaXplS0IgPiAxMDI0ID8gKHNpemVLQi8xMDI0KS50b0ZpeGVkKDIpICsgJyBNQicgOiBzaXplS0IgKyAnIEtCJzsKCiAgcHJvZ3Jlc3NXcmFwLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogIHByb2dyZXNzRmlsbC5zdHlsZS53aWR0aCA9ICc1JSc7CiAgcHJvZ3Jlc3NUZXh0LnRleHRDb250ZW50ID0gJ+KPsyBVcGxvYWRpbmcgdG8gU3VmaUxpbmsuLi4nOwoKICBjb25zdCBkYXRhVVJMID0gYXdhaXQgcmVhZEFzRGF0YVVSTChmaWxlKTsKICBhZGRUb0dhbGxlcnkobG9jYWxJZCwgZGF0YVVSTCwgZmlsZS5uYW1lKTsKICByZXN1bHRzU2VjdGlvbi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICBnYWxsZXJ5U2VjdGlvbi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKCiAgdHJ5IHsKICAgIGFuaW1hdGVQcm9ncmVzc1RvKDM1KTsKICAgIHByb2dyZXNzVGV4dC50ZXh0Q29udGVudCA9ICfwn5SEIENvbm5lY3RpbmcuLi4nOwogICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGUpOwogICAgZm9ybURhdGEuYXBwZW5kKCd1cGxvYWRfcHJlc2V0JywgVVBMT0FEX1BSRVNFVCk7CiAgICBhbmltYXRlUHJvZ3Jlc3NUbyg2NSk7CiAgICBwcm9ncmVzc1RleHQudGV4dENvbnRlbnQgPSAn8J+TpCBVcGxvYWRpbmcuLi4nOwogICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnaHR0cHM6Ly9hcGkuY2xvdWRpbmFyeS5jb20vdjFfMS8nICsgQ0xPVURfTkFNRSArICcvaW1hZ2UvdXBsb2FkJywgeyBtZXRob2Q6ICdQT1NUJywgYm9keTogZm9ybURhdGEgfSk7CiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpOwogICAgY29uc29sZS5sb2coJ1tTdWZpTGlua10gQ2xvdWRpbmFyeSByZXNwb25zZTonLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7CiAgICBpZiAoZGF0YS5lcnJvcikgeyBjb25zb2xlLmVycm9yKCdbU3VmaUxpbmtdIFVwbG9hZCBlcnJvcjonLCBkYXRhLmVycm9yLm1lc3NhZ2UpOyB0aHJvdyBuZXcgRXJyb3IoJ3VwbG9hZF9mYWlsZWQnKTsgfQoKICAgIGFuaW1hdGVQcm9ncmVzc1RvKDEwMCk7CiAgICBwcm9ncmVzc1RleHQudGV4dENvbnRlbnQgPSAn4pyFIFVwbG9hZCBzdWNjZXNzZnVsISc7CiAgICBwbGF5U291bmQoJ3N1Y2Nlc3MnKTsKCiAgICBjb25zdCBzZWN1cmVVcmwgPSBkYXRhLnNlY3VyZV91cmw7CiAgICBjb25zdCBwdWJsaWNJZCA9IGRhdGEucHVibGljX2lkOwogICAgY29uc3QgdGh1bWJVcmwgPSAnaHR0cHM6Ly9yZXMuY2xvdWRpbmFyeS5jb20vJyArIENMT1VEX05BTUUgKyAnL2ltYWdlL3VwbG9hZC9jX3RodW1iLHdfMjAwLGhfMjAwLycgKyBwdWJsaWNJZDsKICAgIGNvbnN0IHdlYnBVcmwgPSAnaHR0cHM6Ly9yZXMuY2xvdWRpbmFyeS5jb20vJyArIENMT1VEX05BTUUgKyAnL2ltYWdlL3VwbG9hZC9mX3dlYnAscV9hdXRvLycgKyBwdWJsaWNJZDsKICAgIGNvbnN0IHNtYWxsVXJsID0gJ2h0dHBzOi8vcmVzLmNsb3VkaW5hcnkuY29tLycgKyBDTE9VRF9OQU1FICsgJy9pbWFnZS91cGxvYWQvd180MDAscV9hdXRvLycgKyBwdWJsaWNJZDsKCiAgICBjb25zdCB1cmxzID0geyBkaXJlY3Q6IHNlY3VyZVVybCwgdGh1bWI6IHRodW1iVXJsLCB3ZWJwOiB3ZWJwVXJsLCBzbWFsbDogc21hbGxVcmwsIHB1YmxpY0lkIH07CiAgICByZW5kZXJSZXN1bHQobG9jYWxJZCwgZGF0YVVSTCwgZmlsZS5uYW1lLCBzaXplTGFiZWwsIGZpbGUudHlwZSwgdXJscyk7CiAgICB1cGRhdGVHYWxsZXJ5SW1nKGxvY2FsSWQsIHNlY3VyZVVybCk7CgogICAgLy8gU2F2ZSB0byBsb2NhbCBzdG9yYWdlIGhpc3RvcnkKICAgIGFkZFRvSGlzdG9yeSh7IGlkOiBsb2NhbElkLCBuYW1lOiBmaWxlLm5hbWUsIHNpemU6IHNpemVMYWJlbCwgdHlwZTogZmlsZS50eXBlLCBkaXJlY3Q6IHNlY3VyZVVybCwgdGh1bWI6IHRodW1iVXJsLCB3ZWJwOiB3ZWJwVXJsLCBzbWFsbDogc21hbGxVcmwsIGRhdGU6IERhdGUubm93KCkgfSk7CgogIH0gY2F0Y2ggKGVycikgewogICAgY29uc29sZS5lcnJvcignW1N1ZmlMaW5rXSBDYXRjaCBlcnJvcjonLCBlcnIpOwogICAgYW5pbWF0ZVByb2dyZXNzVG8oMTAwKTsKICAgIHByb2dyZXNzVGV4dC50ZXh0Q29udGVudCA9ICfinYwgVXBsb2FkIGZhaWxlZC4gUGxlYXNlIHRyeSBhZ2Fpbi4nOwogICAgc2hvd1RvYXN0KCfinYwgVXBsb2FkIGZhaWxlZC4gUGxlYXNlIHRyeSBhZ2Fpbi4nLCB0cnVlKTsKICAgIHBsYXlTb3VuZCgnZXJyb3InKTsKICAgIGNvbnN0IGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZ2lkPSInICsgbG9jYWxJZCArICciXScpOwogICAgaWYgKGVsKSBlbC5zdHlsZS5vcGFjaXR5ID0gJzAuNCc7CiAgfQoKICBzZXRUaW1lb3V0KCgpID0+IHsgcHJvZ3Jlc3NXcmFwLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7IHByb2dyZXNzRmlsbC5zdHlsZS53aWR0aCA9ICcwJSc7IH0sIDMwMDApOwogIHJlc3VsdHNTZWN0aW9uLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ3N0YXJ0JyB9KTsKfQoKZnVuY3Rpb24gcmVhZEFzRGF0YVVSTChmaWxlKSB7CiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiAgICByZWFkZXIub25sb2FkID0gZSA9PiByZXNvbHZlKGUudGFyZ2V0LnJlc3VsdCk7CiAgICByZWFkZXIub25lcnJvciA9IHJlamVjdDsKICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpOwogIH0pOwp9CgpmdW5jdGlvbiBhbmltYXRlUHJvZ3Jlc3NUbyh0YXJnZXQpIHsKICBjb25zdCBjdXJyZW50ID0gcGFyc2VGbG9hdChwcm9ncmVzc0ZpbGwuc3R5bGUud2lkdGgpIHx8IDA7CiAgY29uc3Qgc3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKTsKICBmdW5jdGlvbiBzdGVwKG5vdykgewogICAgY29uc3QgcCA9IE1hdGgubWluKChub3cgLSBzdGFydCkgLyA3MDAsIDEpOwogICAgY29uc3QgdmFsID0gY3VycmVudCArICh0YXJnZXQgLSBjdXJyZW50KSAqICgxIC0gTWF0aC5wb3coMS1wLCAzKSk7CiAgICBwcm9ncmVzc0ZpbGwuc3R5bGUud2lkdGggPSB2YWwgKyAnJSc7CiAgICBpZiAocCA8IDEpIHJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTsKICB9CiAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApOwp9CgpmdW5jdGlvbiBnZW5lcmF0ZUxpbmtzKG5hbWUsIHVybHMpIHsKICByZXR1cm4gWwogICAgeyBsYWJlbDogJ0RpcmVjdCBJbWFnZSBMaW5rJywgdHlwZTogJ2RpcmVjdCcsIGNvZGU6IHVybHMuZGlyZWN0IH0sCiAgICB7IGxhYmVsOiAnVGh1bWJuYWlsICgyMDDDlzIwMCknLCB0eXBlOiAnZGlyZWN0JywgY29kZTogdXJscy50aHVtYiB9LAogICAgeyBsYWJlbDogJ1NtYWxsICg0MDBweCknLCB0eXBlOiAnZGlyZWN0JywgY29kZTogdXJscy5zbWFsbCB9LAogICAgeyBsYWJlbDogJ1dlYlAgRm9ybWF0JywgdHlwZTogJ2RpcmVjdCcsIGNvZGU6IHVybHMud2VicCB9LAogICAgeyBsYWJlbDogJ0hUTUwgSW1hZ2UgVGFnJywgdHlwZTogJ2h0bWwnLCBjb2RlOiAnPGltZyBzcmM9IicgKyB1cmxzLmRpcmVjdCArICciIGFsdD0iJyArIG5hbWUgKyAnIiAvPicgfSwKICAgIHsgbGFiZWw6ICdIVE1MIHdpdGggTGluaycsIHR5cGU6ICdodG1sJywgY29kZTogJzxhIGhyZWY9IicgKyB1cmxzLmRpcmVjdCArICciPjxpbWcgc3JjPSInICsgdXJscy5kaXJlY3QgKyAnIiBhbHQ9IicgKyBuYW1lICsgJyIgLz48L2E+JyB9LAogICAgeyBsYWJlbDogJ01hcmtkb3duJywgdHlwZTogJ21hcmtkb3duJywgY29kZTogJyFbJyArIG5hbWUgKyAnXSgnICsgdXJscy5kaXJlY3QgKyAnKScgfSwKICAgIHsgbGFiZWw6ICdCQkNvZGUnLCB0eXBlOiAnYmInLCBjb2RlOiAnW2ltZ10nICsgdXJscy5kaXJlY3QgKyAnWy9pbWddJyB9LAogICAgeyBsYWJlbDogJ0ZvcnVtIElNRycsIHR5cGU6ICdmb3J1bScsIGNvZGU6ICdbSU1HXScgKyB1cmxzLmRpcmVjdCArICdbL0lNR10nIH0sCiAgXTsKfQoKZnVuY3Rpb24gcmVuZGVyUmVzdWx0KGlkLCBkYXRhVVJMLCBuYW1lLCBzaXplLCB0eXBlLCB1cmxzKSB7CiAgY29uc3QgbGlua3MgPSBnZW5lcmF0ZUxpbmtzKG5hbWUsIHVybHMpOwogIGNvbnN0IHR5cGVNYXAgPSB7IGRpcmVjdDondHlwZS1kaXJlY3QnLCBodG1sOid0eXBlLWh0bWwnLCBtYXJrZG93bjondHlwZS1tYXJrZG93bicsIGJiOid0eXBlLWJiJywgZm9ydW06J3R5cGUtZm9ydW0nIH07CiAgY29uc3QgbGlua3NIVE1MID0gbGlua3MubWFwKGwgPT4gYAogICAgPGRpdiBjbGFzcz0ibGluay1yb3ciPgogICAgICA8ZGl2IGNsYXNzPSJsaW5rLWxhYmVsIj4ke2wubGFiZWx9PHNwYW4gY2xhc3M9ImxpbmstdHlwZSAke3R5cGVNYXBbbC50eXBlXXx8J3R5cGUtZGlyZWN0J30iPiR7bC50eXBlLnRvVXBwZXJDYXNlKCl9PC9zcGFuPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJsaW5rLWNvbnRlbnQiPgogICAgICAgIDxpbnB1dCBjbGFzcz0ibGluay1pbnB1dCIgdHlwZT0idGV4dCIgdmFsdWU9IiR7ZXNjYXBlQXR0cihsLmNvZGUpfSIgcmVhZG9ubHkgb25jbGljaz0idGhpcy5zZWxlY3QoKSI+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY29weS1idG4iIG9uY2xpY2s9ImNvcHlMaW5rKHRoaXMsJyR7ZXNjYXBlQXR0cihsLmNvZGUpfScpIj5Db3B5PC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+YCkuam9pbignJyk7CiAgY29uc3QgZXhpc3RpbmcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0XycgKyBpZCk7CiAgY29uc3QgY2FyZCA9IGV4aXN0aW5nIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogIGNhcmQuY2xhc3NOYW1lID0gJ3Jlc3VsdC1jYXJkJzsKICBjYXJkLmlkID0gJ3Jlc3VsdF8nICsgaWQ7CiAgY2FyZC5pbm5lckhUTUwgPSBgCiAgICA8ZGl2IGNsYXNzPSJyZXN1bHQtaGVhZGVyIj4KICAgICAgPGRpdiBjbGFzcz0ic3VjY2Vzcy1pY29uIj7inJM8L2Rpdj4KICAgICAgPGRpdj4KICAgICAgICA8aDM+VXBsb2FkIFN1Y2Nlc3NmdWwhIPCfjok8L2gzPgogICAgICAgIDxwPllvdXIgcGVybWFuZW50IHJlYWwgbGlua3MgYXJlIHJlYWR5IHZpYSBTdWZpTGluazwvcD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InByZXZpZXctYXJlYSI+CiAgICAgIDxpbWcgY2xhc3M9ImltZy1wcmV2aWV3IiBzcmM9IiR7ZGF0YVVSTH0iIGFsdD0iJHtlc2NhcGVIdG1sKG5hbWUpfSIgb25jbGljaz0id2luZG93Lm9wZW4oJyR7dXJscy5kaXJlY3R9JywnX2JsYW5rJykiPgogICAgICA8ZGl2IGNsYXNzPSJpbWctaW5mbyI+CiAgICAgICAgPGRpdiBjbGFzcz0iaW1nLW5hbWUiPiR7ZXNjYXBlSHRtbChuYW1lKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJpbWctbWV0YSI+JHtzaXplfSDCtyAke3R5cGV8fCdpbWFnZSd9IMK3IEhvc3RlZCBieSBTdWZpTGluayDimIHvuI88L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImxpbmtzLWdyaWQiPiR7bGlua3NIVE1MfTwvZGl2PmA7CiAgaWYgKCFleGlzdGluZykgcmVzdWx0c0NvbnRhaW5lci5wcmVwZW5kKGNhcmQpOwp9CgpmdW5jdGlvbiB1cGRhdGVHYWxsZXJ5SW1nKGlkLCByZWFsVXJsKSB7CiAgY29uc3QgaW1nID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZ2lkPSInICsgaWQgKyAnIl0gaW1nJyk7CiAgaWYgKGltZykgaW1nLnNyYyA9IHJlYWxVcmw7Cn0KCmZ1bmN0aW9uIGFkZFRvR2FsbGVyeShpZCwgZGF0YVVSTCwgbmFtZSkgewogIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1naWQ9IicgKyBpZCArICciXScpKSByZXR1cm47CiAgY29uc3QgaXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogIGl0ZW0uY2xhc3NOYW1lID0gJ2dhbGxlcnktaXRlbSc7CiAgaXRlbS5kYXRhc2V0LmdpZCA9IGlkOwogIGl0ZW0uaW5uZXJIVE1MID0gJzxpbWcgc3JjPSInICsgZGF0YVVSTCArICciIGFsdD0iJyArIGVzY2FwZUh0bWwobmFtZSkgKyAnIiBsb2FkaW5nPSJsYXp5Ij48ZGl2IGNsYXNzPSJnYWxsZXJ5LW92ZXJsYXkiPvCflJc8L2Rpdj4nOwogIGl0ZW0ub25jbGljayA9ICgpID0+IHsKICAgIHBsYXlTb3VuZCgnY2xpY2snKTsKICAgIGNvbnN0IHIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0XycgKyBpZCk7CiAgICBpZiAocikgci5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOidzbW9vdGgnLCBibG9jazonc3RhcnQnIH0pOwogIH07CiAgZ2FsbGVyeUdyaWQucHJlcGVuZChpdGVtKTsKfQoKZnVuY3Rpb24gY29weUxpbmsoYnRuLCB0ZXh0KSB7CiAgcGxheVNvdW5kKCdjb3B5Jyk7CiAgY29uc3QgZGVjb2RlZCA9IHRleHQucmVwbGFjZSgvJmFtcDsvZywnJicpLnJlcGxhY2UoLyZsdDsvZywnPCcpLnJlcGxhY2UoLyZndDsvZywnPicpLnJlcGxhY2UoLyZxdW90Oy9nLCciJykucmVwbGFjZSgvJiMzOTsvZywiJyIpOwogIGNvbnN0IGRvSXQgPSAoKSA9PiB7CiAgICBidG4udGV4dENvbnRlbnQgPSAn4pyTIENvcGllZCEnOwogICAgYnRuLmNsYXNzTGlzdC5hZGQoJ2NvcGllZCcpOwogICAgc2hvd1RvYXN0KCfinJMgTGluayBjb3BpZWQhJyk7CiAgICBzZXRUaW1lb3V0KCgpID0+IHsgYnRuLnRleHRDb250ZW50ID0gJ0NvcHknOyBidG4uY2xhc3NMaXN0LnJlbW92ZSgnY29waWVkJyk7IH0sIDIwMDApOwogIH07CiAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoZGVjb2RlZCkudGhlbihkb0l0KS5jYXRjaCgoKSA9PiB7CiAgICBjb25zdCB0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7CiAgICB0YS52YWx1ZSA9IGRlY29kZWQ7IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGEpOyB0YS5zZWxlY3QoKTsKICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7IGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGEpOyBkb0l0KCk7CiAgfSk7Cn0KCmZ1bmN0aW9uIHNob3dUb2FzdChtc2csIGlzRXJyb3IpIHsKICBjb25zdCB0b2FzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2FzdCcpOwogIHRvYXN0LnRleHRDb250ZW50ID0gbXNnOwogIHRvYXN0LmNsYXNzTmFtZSA9ICd0b2FzdCcgKyAoaXNFcnJvciA/ICcgZXJyb3InIDogJycpOwogIHZvaWQgdG9hc3Qub2Zmc2V0V2lkdGg7CiAgdG9hc3QuY2xhc3NMaXN0LmFkZCgnc2hvdycpOwogIHNldFRpbWVvdXQoKCkgPT4gdG9hc3QuY2xhc3NMaXN0LnJlbW92ZSgnc2hvdycpLCAzMDAwKTsKfQoKZnVuY3Rpb24gZXNjYXBlSHRtbChzKSB7IHJldHVybiBzLnJlcGxhY2UoLyYvZywnJmFtcDsnKS5yZXBsYWNlKC88L2csJyZsdDsnKS5yZXBsYWNlKC8+L2csJyZndDsnKTsgfQpmdW5jdGlvbiBlc2NhcGVBdHRyKHMpIHsgcmV0dXJuIHMucmVwbGFjZSgvIi9nLCcmcXVvdDsnKS5yZXBsYWNlKC8nL2csJyYjMzk7Jyk7IH0KCi8vIExvYWQgaGlzdG9yeSBvbiBwYWdlIHN0YXJ0CnJlbmRlckhpc3RvcnkoKTsKPC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPg==