Created
March 27, 2023 10:19
-
-
Save PauliusV0/df0bf3ed41ff60da921be94d3efa9a6a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
data:text/html;base64,PGh0bWwgbGFuZz0iZW4iPjxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CiAgPHRpdGxlPjIwNDg8L3RpdGxlPgoKICA8bWV0YSBuYW1lPSJhcHBsZS1tb2JpbGUtd2ViLWFwcC1jYXBhYmxlIiBjb250ZW50PSJ5ZXMiPgogIDxtZXRhIG5hbWU9ImFwcGxlLW1vYmlsZS13ZWItYXBwLXN0YXR1cy1iYXItc3R5bGUiIGNvbnRlbnQ9ImJsYWNrIj4KCiAgPG1ldGEgbmFtZT0iSGFuZGhlbGRGcmllbmRseSIgY29udGVudD0iVHJ1ZSI+CiAgPG1ldGEgbmFtZT0iTW9iaWxlT3B0aW1pemVkIiBjb250ZW50PSIzMjAiPgogIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIHRhcmdldC1kZW5zaXR5ZHBpPTE2MGRwaSwgaW5pdGlhbC1zY2FsZT0xLjAsIG1heGltdW0tc2NhbGU9MSwgdXNlci1zY2FsYWJsZT1ubywgbWluaW1hbC11aSI+CiAgPG1ldGEgbmFtZT0iZm9ybWF0LWRldGVjdGlvbiIgY29udGVudD0idGVsZXBob25lPW5vIj4KCiAgPG1ldGEgbmFtZT0iYXBwbGUtaXR1bmVzLWFwcCIgY29udGVudD0iYXBwLWlkPTg2ODA3NjgwNSI+CgogIDxtZXRhIHByb3BlcnR5PSJvZzp0aXRsZSIgY29udGVudD0iMjA0OCBnYW1lIj4KICA8bWV0YSBwcm9wZXJ0eT0ib2c6c2l0ZV9uYW1lIiBjb250ZW50PSIyMDQ4IGdhbWUiPgogIDxtZXRhIHByb3BlcnR5PSJvZzpkZXNjcmlwdGlvbiIgY29udGVudD0iSm9pbiB0aGUgbnVtYmVycyBhbmQgZ2V0IHRvIHRoZSAyMDQ4IHRpbGUhIENhcmVmdWw6IHRoaXMgZ2FtZSBpcyBleHRyZW1lbHkgYWRkaWN0aXZlISI+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CkBpbXBvcnQgdXJsKGZvbnRzL2NsZWFyLXNhbnMuY3NzKTsKCmh0bWwsIGJvZHkgewogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAwOwogIGJhY2tncm91bmQ6ICNmYWY4ZWY7CiAgY29sb3I6ICM3NzZlNjU7CiAgZm9udC1mYW1pbHk6ICJDbGVhciBTYW5zIiwgIkhlbHZldGljYSBOZXVlIiwgQXJpYWwsIHNhbnMtc2VyaWY7CiAgZm9udC1zaXplOiAxOHB4OyB9Cgpib2R5IHsKICBtYXJnaW46IDgwcHggMDsgfQoKaW5wdXQgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBiYWNrZ3JvdW5kOiAjOGY3YTY2OwogIGJvcmRlci1yYWRpdXM6IDNweDsKICBwYWRkaW5nOiAwIDIwcHg7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIGNvbG9yOiAjZjlmNmYyOwogIGhlaWdodDogNDBweDsKICBsaW5lLWhlaWdodDogNDJweDsKICBjdXJzb3I6IHBvaW50ZXI7CiAgZm9udDogaW5oZXJpdDsKICBib3JkZXI6IG5vbmU7CiAgb3V0bGluZTogbm9uZTsKICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIG1hcmdpbjogMDsKICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgLW1vei1hcHBlYXJhbmNlOiBub25lOwogIGFwcGVhcmFuY2U6IG5vbmU7IH0KICBpbnB1dFt0eXBlPSJ0ZXh0Il0sIGlucHV0W3R5cGU9ImVtYWlsIl0gewogICAgY3Vyc29yOiBhdXRvOwogICAgYmFja2dyb3VuZDogI2ZjZmJmOTsKICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICBjb2xvcjogIzc3NmU2NTsKICAgIHBhZGRpbmc6IDAgMTVweDsgfQogICAgaW5wdXRbdHlwZT0idGV4dCJdOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyLCBpbnB1dFt0eXBlPSJlbWFpbCJdOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHsKICAgICAgY29sb3I6ICM5ZDk0OGM7IH0KICAgIGlucHV0W3R5cGU9InRleHQiXTo6LW1vei1wbGFjZWhvbGRlciwgaW5wdXRbdHlwZT0iZW1haWwiXTo6LW1vei1wbGFjZWhvbGRlciB7CiAgICAgIGNvbG9yOiAjOWQ5NDhjOyB9CiAgICBpbnB1dFt0eXBlPSJ0ZXh0Il06LW1zLWlucHV0LXBsYWNlaG9sZGVyLCBpbnB1dFt0eXBlPSJlbWFpbCJdOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgIGNvbG9yOiAjOWQ5NDhjOyB9CgouaGVhZGluZzphZnRlciB7CiAgY29udGVudDogIiI7CiAgZGlzcGxheTogYmxvY2s7CiAgY2xlYXI6IGJvdGg7IH0KCmgxLnRpdGxlIHsKICBmb250LXNpemU6IDgwcHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgbWFyZ2luOiAwOwogIGRpc3BsYXk6IGJsb2NrOwogIGZsb2F0OiBsZWZ0OyB9CgpALXdlYmtpdC1rZXlmcmFtZXMgbW92ZS11cCB7CiAgMCUgewogICAgdG9wOiAyNXB4OwogICAgb3BhY2l0eTogMTsgfQoKICAxMDAlIHsKICAgIHRvcDogLTUwcHg7CiAgICBvcGFjaXR5OiAwOyB9IH0KQC1tb3ota2V5ZnJhbWVzIG1vdmUtdXAgewogIDAlIHsKICAgIHRvcDogMjVweDsKICAgIG9wYWNpdHk6IDE7IH0KCiAgMTAwJSB7CiAgICB0b3A6IC01MHB4OwogICAgb3BhY2l0eTogMDsgfSB9CkBrZXlmcmFtZXMgbW92ZS11cCB7CiAgMCUgewogICAgdG9wOiAyNXB4OwogICAgb3BhY2l0eTogMTsgfQoKICAxMDAlIHsKICAgIHRvcDogLTUwcHg7CiAgICBvcGFjaXR5OiAwOyB9IH0KLnNjb3Jlcy1jb250YWluZXIgewogIGZsb2F0OiByaWdodDsKICB0ZXh0LWFsaWduOiByaWdodDsgfQoKLnNjb3JlLWNvbnRhaW5lciwgLmJlc3QtY29udGFpbmVyIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGJhY2tncm91bmQ6ICNiYmFkYTA7CiAgcGFkZGluZzogMTVweCAyNXB4OwogIGZvbnQtc2l6ZTogMjVweDsKICBoZWlnaHQ6IDI1cHg7CiAgbGluZS1oZWlnaHQ6IDQ3cHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgYm9yZGVyLXJhZGl1czogM3B4OwogIGNvbG9yOiB3aGl0ZTsKICBtYXJnaW4tdG9wOiA4cHg7CiAgdGV4dC1hbGlnbjogY2VudGVyOyB9CiAgLnNjb3JlLWNvbnRhaW5lcjphZnRlciwgLmJlc3QtY29udGFpbmVyOmFmdGVyIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHdpZHRoOiAxMDAlOwogICAgdG9wOiAxMHB4OwogICAgbGVmdDogMDsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBsaW5lLWhlaWdodDogMTNweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGNvbG9yOiAjZWVlNGRhOyB9CiAgLnNjb3JlLWNvbnRhaW5lciAuc2NvcmUtYWRkaXRpb24sIC5iZXN0LWNvbnRhaW5lciAuc2NvcmUtYWRkaXRpb24gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgcmlnaHQ6IDMwcHg7CiAgICBjb2xvcjogcmVkOwogICAgZm9udC1zaXplOiAyNXB4OwogICAgbGluZS1oZWlnaHQ6IDI1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGNvbG9yOiByZ2JhKDExOSwgMTEwLCAxMDEsIDAuOSk7CiAgICB6LWluZGV4OiAxMDA7CiAgICAtd2Via2l0LWFuaW1hdGlvbjogbW92ZS11cCA2MDBtcyBlYXNlLWluOwogICAgLW1vei1hbmltYXRpb246IG1vdmUtdXAgNjAwbXMgZWFzZS1pbjsKICAgIGFuaW1hdGlvbjogbW92ZS11cCA2MDBtcyBlYXNlLWluOwogICAgLXdlYmtpdC1hbmltYXRpb24tZmlsbC1tb2RlOiBib3RoOwogICAgLW1vei1hbmltYXRpb24tZmlsbC1tb2RlOiBib3RoOwogICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogYm90aDsgfQoKLnNjb3JlLWNvbnRhaW5lcjphZnRlciB7CiAgY29udGVudDogIlNjb3JlIjsgfQoKLmJlc3QtY29udGFpbmVyOmFmdGVyIHsKICBjb250ZW50OiAiQmVzdCI7IH0KCnAgewogIG1hcmdpbi10b3A6IDA7CiAgbWFyZ2luLWJvdHRvbTogMTBweDsKICBsaW5lLWhlaWdodDogMS42NTsgfQoKYSB7CiAgY29sb3I6ICM3NzZlNjU7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgY3Vyc29yOiBwb2ludGVyOyB9CgpzdHJvbmcuaW1wb3J0YW50IHsKICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB9CgpociB7CiAgYm9yZGVyOiBub25lOwogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZDhkNGQwOwogIG1hcmdpbi10b3A6IDIwcHg7CiAgbWFyZ2luLWJvdHRvbTogMzBweDsgfQoKLmNvbnRhaW5lciB7CiAgd2lkdGg6IDUwMHB4OwogIG1hcmdpbjogMCBhdXRvOyB9CgpALXdlYmtpdC1rZXlmcmFtZXMgZmFkZS1pbiB7CiAgMCUgewogICAgb3BhY2l0eTogMDsgfQoKICAxMDAlIHsKICAgIG9wYWNpdHk6IDE7IH0gfQpALW1vei1rZXlmcmFtZXMgZmFkZS1pbiB7CiAgMCUgewogICAgb3BhY2l0eTogMDsgfQoKICAxMDAlIHsKICAgIG9wYWNpdHk6IDE7IH0gfQpAa2V5ZnJhbWVzIGZhZGUtaW4gewogIDAlIHsKICAgIG9wYWNpdHk6IDA7IH0KCiAgMTAwJSB7CiAgICBvcGFjaXR5OiAxOyB9IH0KQC13ZWJraXQta2V5ZnJhbWVzIHNsaWRlLXVwIHsKICAwJSB7CiAgICBtYXJnaW4tdG9wOiAzMiU7IH0KCiAgMTAwJSB7CiAgICBtYXJnaW4tdG9wOiAyMCU7IH0gfQpALW1vei1rZXlmcmFtZXMgc2xpZGUtdXAgewogIDAlIHsKICAgIG1hcmdpbi10b3A6IDMyJTsgfQoKICAxMDAlIHsKICAgIG1hcmdpbi10b3A6IDIwJTsgfSB9CkBrZXlmcmFtZXMgc2xpZGUtdXAgewogIDAlIHsKICAgIG1hcmdpbi10b3A6IDMyJTsgfQoKICAxMDAlIHsKICAgIG1hcmdpbi10b3A6IDIwJTsgfSB9Ci5nYW1lLWNvbnRhaW5lciB7CiAgbWFyZ2luLXRvcDogNDBweDsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgcGFkZGluZzogMTVweDsKICBjdXJzb3I6IGRlZmF1bHQ7CiAgLXdlYmtpdC10b3VjaC1jYWxsb3V0OiBub25lOwogIC1tcy10b3VjaC1jYWxsb3V0OiBub25lOwogIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgLW1zLXRvdWNoLWFjdGlvbjogbm9uZTsKICB0b3VjaC1hY3Rpb246IG5vbmU7CiAgYmFja2dyb3VuZDogI2JiYWRhMDsKICBib3JkZXItcmFkaXVzOiA2cHg7CiAgd2lkdGg6IDUwMHB4OwogIGhlaWdodDogNTAwcHg7CiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OwogIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKICBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9CgouZ2FtZS1tZXNzYWdlIHsKICBkaXNwbGF5OiBub25lOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDA7CiAgcmlnaHQ6IDA7CiAgYm90dG9tOiAwOwogIGxlZnQ6IDA7CiAgYmFja2dyb3VuZDogcmdiYSgyMzgsIDIyOCwgMjE4LCAwLjczKTsKICB6LWluZGV4OiAxMDA7CiAgcGFkZGluZy10b3A6IDQwcHg7CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIC13ZWJraXQtYW5pbWF0aW9uOiBmYWRlLWluIDgwMG1zIGVhc2UgMTIwMG1zOwogIC1tb3otYW5pbWF0aW9uOiBmYWRlLWluIDgwMG1zIGVhc2UgMTIwMG1zOwogIGFuaW1hdGlvbjogZmFkZS1pbiA4MDBtcyBlYXNlIDEyMDBtczsKICAtd2Via2l0LWFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7CiAgLW1vei1hbmltYXRpb24tZmlsbC1tb2RlOiBib3RoOwogIGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7IH0KICAuZ2FtZS1tZXNzYWdlIHAgewogICAgZm9udC1zaXplOiA2MHB4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBoZWlnaHQ6IDYwcHg7CiAgICBsaW5lLWhlaWdodDogNjBweDsKICAgIG1hcmdpbi10b3A6IDIyMnB4OyB9CiAgLmdhbWUtbWVzc2FnZSAubG93ZXIgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW4tdG9wOiAyOXB4OyB9CiAgLmdhbWUtbWVzc2FnZSAubWFpbGluZy1saXN0IHsKICAgIG1hcmdpbi10b3A6IDUycHg7IH0KICAgIC5nYW1lLW1lc3NhZ2UgLm1haWxpbmctbGlzdCBzdHJvbmcgewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsgfQogICAgLmdhbWUtbWVzc2FnZSAubWFpbGluZy1saXN0IC5tYWlsaW5nLWxpc3QtZW1haWwtZmllbGQgewogICAgICB3aWR0aDogMjMwcHg7CiAgICAgIG1hcmdpbi1yaWdodDogNXB4OyB9CiAgLmdhbWUtbWVzc2FnZSBhIHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIGJhY2tncm91bmQ6ICM4ZjdhNjY7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICBwYWRkaW5nOiAwIDIwcHg7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICBjb2xvcjogI2Y5ZjZmMjsKICAgIGhlaWdodDogNDBweDsKICAgIGxpbmUtaGVpZ2h0OiA0MnB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgbWFyZ2luLWxlZnQ6IDlweDsgfQogICAgLmdhbWUtbWVzc2FnZSBhLmtlZXAtcGxheWluZy1idXR0b24gewogICAgICBkaXNwbGF5OiBub25lOyB9CiAgLmdhbWUtbWVzc2FnZSAuc2NvcmUtc2hhcmluZyB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgbWFyZ2luLWxlZnQ6IDEwcHg7IH0KICAuZ2FtZS1tZXNzYWdlLmdhbWUtd29uIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjM3LCAxOTQsIDQ2LCAwLjUpOwogICAgY29sb3I6ICNmOWY2ZjI7IH0KICAgIC5nYW1lLW1lc3NhZ2UuZ2FtZS13b24gYS5rZWVwLXBsYXlpbmctYnV0dG9uIHsKICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOyB9CiAgLmdhbWUtbWVzc2FnZS5nYW1lLXdvbiwgLmdhbWUtbWVzc2FnZS5nYW1lLW92ZXIgewogICAgZGlzcGxheTogYmxvY2s7IH0KICAgIC5nYW1lLW1lc3NhZ2UuZ2FtZS13b24gcCwgLmdhbWUtbWVzc2FnZS5nYW1lLW92ZXIgcCB7CiAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBzbGlkZS11cCAxLjVzIGVhc2UtaW4tb3V0IDI1MDBtczsKICAgICAgLW1vei1hbmltYXRpb246IHNsaWRlLXVwIDEuNXMgZWFzZS1pbi1vdXQgMjUwMG1zOwogICAgICBhbmltYXRpb246IHNsaWRlLXVwIDEuNXMgZWFzZS1pbi1vdXQgMjUwMG1zOwogICAgICAtd2Via2l0LWFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7CiAgICAgIC1tb3otYW5pbWF0aW9uLWZpbGwtbW9kZTogYm90aDsKICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogYm90aDsgfQogICAgLmdhbWUtbWVzc2FnZS5nYW1lLXdvbiAubWFpbGluZy1saXN0LCAuZ2FtZS1tZXNzYWdlLmdhbWUtb3ZlciAubWFpbGluZy1saXN0IHsKICAgICAgLXdlYmtpdC1hbmltYXRpb246IGZhZGUtaW4gMS41cyBlYXNlLWluLW91dCAyNTAwbXM7CiAgICAgIC1tb3otYW5pbWF0aW9uOiBmYWRlLWluIDEuNXMgZWFzZS1pbi1vdXQgMjUwMG1zOwogICAgICBhbmltYXRpb246IGZhZGUtaW4gMS41cyBlYXNlLWluLW91dCAyNTAwbXM7CiAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWZpbGwtbW9kZTogYm90aDsKICAgICAgLW1vei1hbmltYXRpb24tZmlsbC1tb2RlOiBib3RoOwogICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoOyB9CgouZ3JpZC1jb250YWluZXIgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB6LWluZGV4OiAxOyB9CgouZ3JpZC1yb3cgewogIG1hcmdpbi1ib3R0b206IDE1cHg7IH0KICAuZ3JpZC1yb3c6bGFzdC1jaGlsZCB7CiAgICBtYXJnaW4tYm90dG9tOiAwOyB9CiAgLmdyaWQtcm93OmFmdGVyIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgZGlzcGxheTogYmxvY2s7CiAgICBjbGVhcjogYm90aDsgfQoKLmdyaWQtY2VsbCB7CiAgd2lkdGg6IDEwNi4yNXB4OwogIGhlaWdodDogMTA2LjI1cHg7CiAgbWFyZ2luLXJpZ2h0OiAxNXB4OwogIGZsb2F0OiBsZWZ0OwogIGJvcmRlci1yYWRpdXM6IDNweDsKICBiYWNrZ3JvdW5kOiByZ2JhKDIzOCwgMjI4LCAyMTgsIDAuMzUpOyB9CiAgLmdyaWQtY2VsbDpsYXN0LWNoaWxkIHsKICAgIG1hcmdpbi1yaWdodDogMDsgfQoKLnRpbGUtY29udGFpbmVyIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgei1pbmRleDogMjsgfQoKLnRpbGUsIC50aWxlIC50aWxlLWlubmVyIHsKICB3aWR0aDogMTA3cHg7CiAgaGVpZ2h0OiAxMDdweDsKICBsaW5lLWhlaWdodDogMTE2LjI1cHg7IH0KLnRpbGUudGlsZS1wb3NpdGlvbi0xLTEgewogIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCAwcHgpOwogIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCAwcHgpOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgMHB4KTsgfQoudGlsZS50aWxlLXBvc2l0aW9uLTEtMiB7CiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDEyMXB4KTsKICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgMTIxcHgpOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgMTIxcHgpOyB9Ci50aWxlLnRpbGUtcG9zaXRpb24tMS0zIHsKICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgMjQycHgpOwogIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCAyNDJweCk7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCAyNDJweCk7IH0KLnRpbGUudGlsZS1wb3NpdGlvbi0xLTQgewogIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCAzNjNweCk7CiAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDM2M3B4KTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDM2M3B4KTsgfQoudGlsZS50aWxlLXBvc2l0aW9uLTItMSB7CiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMjFweCwgMHB4KTsKICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDEyMXB4LCAwcHgpOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlKDEyMXB4LCAwcHgpOyB9Ci50aWxlLnRpbGUtcG9zaXRpb24tMi0yIHsKICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDEyMXB4LCAxMjFweCk7CiAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMjFweCwgMTIxcHgpOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlKDEyMXB4LCAxMjFweCk7IH0KLnRpbGUudGlsZS1wb3NpdGlvbi0yLTMgewogIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTIxcHgsIDI0MnB4KTsKICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDEyMXB4LCAyNDJweCk7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTIxcHgsIDI0MnB4KTsgfQoudGlsZS50aWxlLXBvc2l0aW9uLTItNCB7CiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMjFweCwgMzYzcHgpOwogIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTIxcHgsIDM2M3B4KTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMjFweCwgMzYzcHgpOyB9Ci50aWxlLnRpbGUtcG9zaXRpb24tMy0xIHsKICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDI0MnB4LCAwcHgpOwogIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMjQycHgsIDBweCk7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMjQycHgsIDBweCk7IH0KLnRpbGUudGlsZS1wb3NpdGlvbi0zLTIgewogIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMjQycHgsIDEyMXB4KTsKICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDI0MnB4LCAxMjFweCk7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMjQycHgsIDEyMXB4KTsgfQoudGlsZS50aWxlLXBvc2l0aW9uLTMtMyB7CiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgyNDJweCwgMjQycHgpOwogIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMjQycHgsIDI0MnB4KTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgyNDJweCwgMjQycHgpOyB9Ci50aWxlLnRpbGUtcG9zaXRpb24tMy00IHsKICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDI0MnB4LCAzNjNweCk7CiAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZSgyNDJweCwgMzYzcHgpOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlKDI0MnB4LCAzNjNweCk7IH0KLnRpbGUudGlsZS1wb3NpdGlvbi00LTEgewogIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMzYzcHgsIDBweCk7CiAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZSgzNjNweCwgMHB4KTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgzNjNweCwgMHB4KTsgfQoudGlsZS50aWxlLXBvc2l0aW9uLTQtMiB7CiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgzNjNweCwgMTIxcHgpOwogIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMzYzcHgsIDEyMXB4KTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgzNjNweCwgMTIxcHgpOyB9Ci50aWxlLnRpbGUtcG9zaXRpb24tNC0zIHsKICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDM2M3B4LCAyNDJweCk7CiAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZSgzNjNweCwgMjQycHgpOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlKDM2M3B4LCAyNDJweCk7IH0KLnRpbGUudGlsZS1wb3NpdGlvbi00LTQgewogIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMzYzcHgsIDM2M3B4KTsKICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDM2M3B4LCAzNjNweCk7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMzYzcHgsIDM2M3B4KTsgfQoKLnRpbGUgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAtd2Via2l0LXRyYW5zaXRpb246IDEwMG1zIGVhc2UtaW4tb3V0OwogIC1tb3otdHJhbnNpdGlvbjogMTAwbXMgZWFzZS1pbi1vdXQ7CiAgdHJhbnNpdGlvbjogMTAwbXMgZWFzZS1pbi1vdXQ7CiAgLXdlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5OiAtd2Via2l0LXRyYW5zZm9ybTsKICAtbW96LXRyYW5zaXRpb24tcHJvcGVydHk6IC1tb3otdHJhbnNmb3JtOwogIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybTsgfQogIC50aWxlIC50aWxlLWlubmVyIHsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgIGJhY2tncm91bmQ6ICNlZWU0ZGE7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIHotaW5kZXg6IDEwOwogICAgZm9udC1zaXplOiA1NXB4OyB9CiAgLnRpbGUudGlsZS0yIC50aWxlLWlubmVyIHsKICAgIGJhY2tncm91bmQ6ICNlZWU0ZGE7CiAgICBib3gtc2hhZG93OiAwIDAgMzBweCAxMHB4IHJnYmEoMjQzLCAyMTUsIDExNiwgMCksIGluc2V0IDAgMCAwIDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDApOyB9CiAgLnRpbGUudGlsZS00IC50aWxlLWlubmVyIHsKICAgIGJhY2tncm91bmQ6ICNlZGUwYzg7CiAgICBib3gtc2hhZG93OiAwIDAgMzBweCAxMHB4IHJnYmEoMjQzLCAyMTUsIDExNiwgMCksIGluc2V0IDAgMCAwIDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDApOyB9CiAgLnRpbGUudGlsZS04IC50aWxlLWlubmVyIHsKICAgIGNvbG9yOiAjZjlmNmYyOwogICAgYmFja2dyb3VuZDogI2YyYjE3OTsgfQogIC50aWxlLnRpbGUtMTYgLnRpbGUtaW5uZXIgewogICAgY29sb3I6ICNmOWY2ZjI7CiAgICBiYWNrZ3JvdW5kOiAjZjU5NTYzOyB9CiAgLnRpbGUudGlsZS0zMiAudGlsZS1pbm5lciB7CiAgICBjb2xvcjogI2Y5ZjZmMjsKICAgIGJhY2tncm91bmQ6ICNmNjdjNWY7IH0KICAudGlsZS50aWxlLTY0IC50aWxlLWlubmVyIHsKICAgIGNvbG9yOiAjZjlmNmYyOwogICAgYmFja2dyb3VuZDogI2Y2NWUzYjsgfQogIC50aWxlLnRpbGUtMTI4IC50aWxlLWlubmVyIHsKICAgIGNvbG9yOiAjZjlmNmYyOwogICAgYmFja2dyb3VuZDogI2VkY2Y3MjsKICAgIGJveC1zaGFkb3c6IDAgMCAzMHB4IDEwcHggcmdiYSgyNDMsIDIxNSwgMTE2LCAwLjIzODEpLCBpbnNldCAwIDAgMCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0Mjg2KTsKICAgIGZvbnQtc2l6ZTogNDVweDsgfQogICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNTIwcHgpIHsKICAgICAgLnRpbGUudGlsZS0xMjggLnRpbGUtaW5uZXIgewogICAgICAgIGZvbnQtc2l6ZTogMjVweDsgfSB9CiAgLnRpbGUudGlsZS0yNTYgLnRpbGUtaW5uZXIgewogICAgY29sb3I6ICNmOWY2ZjI7CiAgICBiYWNrZ3JvdW5kOiAjZWRjYzYxOwogICAgYm94LXNoYWRvdzogMCAwIDMwcHggMTBweCByZ2JhKDI0MywgMjE1LCAxMTYsIDAuMzE3NDYpLCBpbnNldCAwIDAgMCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE5MDQ4KTsKICAgIGZvbnQtc2l6ZTogNDVweDsgfQogICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNTIwcHgpIHsKICAgICAgLnRpbGUudGlsZS0yNTYgLnRpbGUtaW5uZXIgewogICAgICAgIGZvbnQtc2l6ZTogMjVweDsgfSB9CiAgLnRpbGUudGlsZS01MTIgLnRpbGUtaW5uZXIgewogICAgY29sb3I6ICNmOWY2ZjI7CiAgICBiYWNrZ3JvdW5kOiAjZWRjODUwOwogICAgYm94LXNoYWRvdzogMCAwIDMwcHggMTBweCByZ2JhKDI0MywgMjE1LCAxMTYsIDAuMzk2ODMpLCBpbnNldCAwIDAgMCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIzODEpOwogICAgZm9udC1zaXplOiA0NXB4OyB9CiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1MjBweCkgewogICAgICAudGlsZS50aWxlLTUxMiAudGlsZS1pbm5lciB7CiAgICAgICAgZm9udC1zaXplOiAyNXB4OyB9IH0KICAudGlsZS50aWxlLTEwMjQgLnRpbGUtaW5uZXIgewogICAgY29sb3I6ICNmOWY2ZjI7CiAgICBiYWNrZ3JvdW5kOiAjZWRjNTNmOwogICAgYm94LXNoYWRvdzogMCAwIDMwcHggMTBweCByZ2JhKDI0MywgMjE1LCAxMTYsIDAuNDc2MTkpLCBpbnNldCAwIDAgMCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI4NTcxKTsKICAgIGZvbnQtc2l6ZTogMzVweDsgfQogICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNTIwcHgpIHsKICAgICAgLnRpbGUudGlsZS0xMDI0IC50aWxlLWlubmVyIHsKICAgICAgICBmb250LXNpemU6IDE1cHg7IH0gfQogIC50aWxlLnRpbGUtMjA0OCAudGlsZS1pbm5lciB7CiAgICBjb2xvcjogI2Y5ZjZmMjsKICAgIGJhY2tncm91bmQ6ICNlZGMyMmU7CiAgICBib3gtc2hhZG93OiAwIDAgMzBweCAxMHB4IHJnYmEoMjQzLCAyMTUsIDExNiwgMC41NTU1NiksIGluc2V0IDAgMCAwIDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzMzMzMpOwogICAgZm9udC1zaXplOiAzNXB4OyB9CiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1MjBweCkgewogICAgICAudGlsZS50aWxlLTIwNDggLnRpbGUtaW5uZXIgewogICAgICAgIGZvbnQtc2l6ZTogMTVweDsgfSB9CiAgLnRpbGUudGlsZS1zdXBlciAudGlsZS1pbm5lciB7CiAgICBjb2xvcjogI2Y5ZjZmMjsKICAgIGJhY2tncm91bmQ6ICMzYzNhMzI7CiAgICBmb250LXNpemU6IDMwcHg7IH0KICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDUyMHB4KSB7CiAgICAgIC50aWxlLnRpbGUtc3VwZXIgLnRpbGUtaW5uZXIgewogICAgICAgIGZvbnQtc2l6ZTogMTBweDsgfSB9CgpALXdlYmtpdC1rZXlmcmFtZXMgYXBwZWFyIHsKICAwJSB7CiAgICBvcGFjaXR5OiAwOwogICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApOwogICAgLW1vei10cmFuc2Zvcm06IHNjYWxlKDApOwogICAgdHJhbnNmb3JtOiBzY2FsZSgwKTsgfQoKICAxMDAlIHsKICAgIG9wYWNpdHk6IDE7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICAtbW96LXRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOyB9IH0KQC1tb3ota2V5ZnJhbWVzIGFwcGVhciB7CiAgMCUgewogICAgb3BhY2l0eTogMDsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgIC1tb3otdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7IH0KCiAgMTAwJSB7CiAgICBvcGFjaXR5OiAxOwogICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgLW1vei10cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsgfSB9CkBrZXlmcmFtZXMgYXBwZWFyIHsKICAwJSB7CiAgICBvcGFjaXR5OiAwOwogICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApOwogICAgLW1vei10cmFuc2Zvcm06IHNjYWxlKDApOwogICAgdHJhbnNmb3JtOiBzY2FsZSgwKTsgfQoKICAxMDAlIHsKICAgIG9wYWNpdHk6IDE7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICAtbW96LXRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOyB9IH0KLnRpbGUtbmV3IC50aWxlLWlubmVyIHsKICAtd2Via2l0LWFuaW1hdGlvbjogYXBwZWFyIDIwMG1zIGVhc2UgMTAwbXM7CiAgLW1vei1hbmltYXRpb246IGFwcGVhciAyMDBtcyBlYXNlIDEwMG1zOwogIGFuaW1hdGlvbjogYXBwZWFyIDIwMG1zIGVhc2UgMTAwbXM7CiAgLXdlYmtpdC1hbmltYXRpb24tZmlsbC1tb2RlOiBiYWNrd2FyZHM7CiAgLW1vei1hbmltYXRpb24tZmlsbC1tb2RlOiBiYWNrd2FyZHM7CiAgYW5pbWF0aW9uLWZpbGwtbW9kZTogYmFja3dhcmRzOyB9CgpALXdlYmtpdC1rZXlmcmFtZXMgcG9wIHsKICAwJSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICAtbW96LXRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDApOyB9CgogIDUwJSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMS4yKTsKICAgIC1tb3otdHJhbnNmb3JtOiBzY2FsZSgxLjIpOwogICAgdHJhbnNmb3JtOiBzY2FsZSgxLjIpOyB9CgogIDEwMCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgLW1vei10cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsgfSB9CkAtbW96LWtleWZyYW1lcyBwb3AgewogIDAlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgIC1tb3otdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7IH0KCiAgNTAlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLjIpOwogICAgLW1vei10cmFuc2Zvcm06IHNjYWxlKDEuMik7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMik7IH0KCiAgMTAwJSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICAtbW96LXRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOyB9IH0KQGtleWZyYW1lcyBwb3AgewogIDAlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgIC1tb3otdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7IH0KCiAgNTAlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLjIpOwogICAgLW1vei10cmFuc2Zvcm06IHNjYWxlKDEuMik7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMik7IH0KCiAgMTAwJSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICAtbW96LXRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOyB9IH0KLnRpbGUtbWVyZ2VkIC50aWxlLWlubmVyIHsKICB6LWluZGV4OiAyMDsKICAtd2Via2l0LWFuaW1hdGlvbjogcG9wIDIwMG1zIGVhc2UgMTAwbXM7CiAgLW1vei1hbmltYXRpb246IHBvcCAyMDBtcyBlYXNlIDEwMG1zOwogIGFuaW1hdGlvbjogcG9wIDIwMG1zIGVhc2UgMTAwbXM7CiAgLXdlYmtpdC1hbmltYXRpb24tZmlsbC1tb2RlOiBiYWNrd2FyZHM7CiAgLW1vei1hbmltYXRpb24tZmlsbC1tb2RlOiBiYWNrd2FyZHM7CiAgYW5pbWF0aW9uLWZpbGwtbW9kZTogYmFja3dhcmRzOyB9CgouYWJvdmUtZ2FtZTphZnRlciB7CiAgY29udGVudDogIiI7CiAgZGlzcGxheTogYmxvY2s7CiAgY2xlYXI6IGJvdGg7IH0KCi5nYW1lLWludHJvIHsKICBmbG9hdDogbGVmdDsKICBsaW5lLWhlaWdodDogNDJweDsKICBtYXJnaW4tYm90dG9tOiAwOyB9CgoucmVzdGFydC1idXR0b24gewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBiYWNrZ3JvdW5kOiAjOGY3YTY2OwogIGJvcmRlci1yYWRpdXM6IDNweDsKICBwYWRkaW5nOiAwIDIwcHg7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIGNvbG9yOiAjZjlmNmYyOwogIGhlaWdodDogNDBweDsKICBsaW5lLWhlaWdodDogNDJweDsKICBjdXJzb3I6IHBvaW50ZXI7CiAgZGlzcGxheTogYmxvY2s7CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIGZsb2F0OiByaWdodDsgfQoKLmdhbWUtZXhwbGFuYXRpb24gewogIG1hcmdpbi10b3A6IDUwcHg7IH0KCi5zaGFyaW5nIHsKICBtYXJnaW4tdG9wOiAyMHB4OwogIHRleHQtYWxpZ246IGNlbnRlcjsgfQogIC5zaGFyaW5nID4gaWZyYW1lLCAuc2hhcmluZyA+IHNwYW4sIC5zaGFyaW5nID4gZm9ybSB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyB9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1MjBweCkgewogIGh0bWwsIGJvZHkgewogICAgZm9udC1zaXplOiAxNXB4OyB9CgogIGJvZHkgewogICAgbWFyZ2luLXRvcDogMDsKICAgIHBhZGRpbmc6IDIwcHg7IH0KCiAgaDEudGl0bGUgewogICAgZm9udC1zaXplOiAyN3B4OwogICAgbWFyZ2luLXRvcDogMTVweDsgfQoKICAuY29udGFpbmVyIHsKICAgIHdpZHRoOiAyODBweDsKICAgIG1hcmdpbjogMCBhdXRvOyB9CgogIC5zY29yZS1jb250YWluZXIsIC5iZXN0LWNvbnRhaW5lciB7CiAgICBtYXJnaW4tdG9wOiAwOwogICAgcGFkZGluZzogMTVweCAxMHB4OwogICAgbWluLXdpZHRoOiA0MHB4OyB9CgogIC5oZWFkaW5nIHsKICAgIG1hcmdpbi1ib3R0b206IDEwcHg7IH0KCiAgLmdhbWUtaW50cm8gewogICAgd2lkdGg6IDU1JTsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIGxpbmUtaGVpZ2h0OiAxLjY1OyB9CgogIC5yZXN0YXJ0LWJ1dHRvbiB7CiAgICB3aWR0aDogNDIlOwogICAgcGFkZGluZzogMDsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIG1hcmdpbi10b3A6IDJweDsgfQoKICAuZ2FtZS1jb250YWluZXIgewogICAgbWFyZ2luLXRvcDogMTdweDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHBhZGRpbmc6IDEwcHg7CiAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAtd2Via2l0LXRvdWNoLWNhbGxvdXQ6IG5vbmU7CiAgICAtbXMtdG91Y2gtY2FsbG91dDogbm9uZTsKICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgLW1zLXRvdWNoLWFjdGlvbjogbm9uZTsKICAgIHRvdWNoLWFjdGlvbjogbm9uZTsKICAgIGJhY2tncm91bmQ6ICNiYmFkYTA7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICB3aWR0aDogMjgwcHg7CiAgICBoZWlnaHQ6IDI4MHB4OwogICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsgfQoKICAuZ2FtZS1tZXNzYWdlIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDA7CiAgICByaWdodDogMDsKICAgIGJvdHRvbTogMDsKICAgIGxlZnQ6IDA7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDIzOCwgMjI4LCAyMTgsIDAuNzMpOwogICAgei1pbmRleDogMTAwOwogICAgcGFkZGluZy10b3A6IDQwcHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAtd2Via2l0LWFuaW1hdGlvbjogZmFkZS1pbiA4MDBtcyBlYXNlIDEyMDBtczsKICAgIC1tb3otYW5pbWF0aW9uOiBmYWRlLWluIDgwMG1zIGVhc2UgMTIwMG1zOwogICAgYW5pbWF0aW9uOiBmYWRlLWluIDgwMG1zIGVhc2UgMTIwMG1zOwogICAgLXdlYmtpdC1hbmltYXRpb24tZmlsbC1tb2RlOiBib3RoOwogICAgLW1vei1hbmltYXRpb24tZmlsbC1tb2RlOiBib3RoOwogICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogYm90aDsgfQogICAgLmdhbWUtbWVzc2FnZSBwIHsKICAgICAgZm9udC1zaXplOiA2MHB4OwogICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgaGVpZ2h0OiA2MHB4OwogICAgICBsaW5lLWhlaWdodDogNjBweDsKICAgICAgbWFyZ2luLXRvcDogMjIycHg7IH0KICAgIC5nYW1lLW1lc3NhZ2UgLmxvd2VyIHsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIG1hcmdpbi10b3A6IDI5cHg7IH0KICAgIC5nYW1lLW1lc3NhZ2UgLm1haWxpbmctbGlzdCB7CiAgICAgIG1hcmdpbi10b3A6IDUycHg7IH0KICAgICAgLmdhbWUtbWVzc2FnZSAubWFpbGluZy1saXN0IHN0cm9uZyB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsgfQogICAgICAuZ2FtZS1tZXNzYWdlIC5tYWlsaW5nLWxpc3QgLm1haWxpbmctbGlzdC1lbWFpbC1maWVsZCB7CiAgICAgICAgd2lkdGg6IDIzMHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogNXB4OyB9CiAgICAuZ2FtZS1tZXNzYWdlIGEgewogICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIGJhY2tncm91bmQ6ICM4ZjdhNjY7CiAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgcGFkZGluZzogMCAyMHB4OwogICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgIGNvbG9yOiAjZjlmNmYyOwogICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgIGxpbmUtaGVpZ2h0OiA0MnB4OwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIG1hcmdpbi1sZWZ0OiA5cHg7IH0KICAgICAgLmdhbWUtbWVzc2FnZSBhLmtlZXAtcGxheWluZy1idXR0b24gewogICAgICAgIGRpc3BsYXk6IG5vbmU7IH0KICAgIC5nYW1lLW1lc3NhZ2UgLnNjb3JlLXNoYXJpbmcgewogICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OyB9CiAgICAuZ2FtZS1tZXNzYWdlLmdhbWUtd29uIHsKICAgICAgYmFja2dyb3VuZDogcmdiYSgyMzcsIDE5NCwgNDYsIDAuNSk7CiAgICAgIGNvbG9yOiAjZjlmNmYyOyB9CiAgICAgIC5nYW1lLW1lc3NhZ2UuZ2FtZS13b24gYS5rZWVwLXBsYXlpbmctYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH0KICAgIC5nYW1lLW1lc3NhZ2UuZ2FtZS13b24sIC5nYW1lLW1lc3NhZ2UuZ2FtZS1vdmVyIHsKICAgICAgZGlzcGxheTogYmxvY2s7IH0KICAgICAgLmdhbWUtbWVzc2FnZS5nYW1lLXdvbiBwLCAuZ2FtZS1tZXNzYWdlLmdhbWUtb3ZlciBwIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogc2xpZGUtdXAgMS41cyBlYXNlLWluLW91dCAyNTAwbXM7CiAgICAgICAgLW1vei1hbmltYXRpb246IHNsaWRlLXVwIDEuNXMgZWFzZS1pbi1vdXQgMjUwMG1zOwogICAgICAgIGFuaW1hdGlvbjogc2xpZGUtdXAgMS41cyBlYXNlLWluLW91dCAyNTAwbXM7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tZmlsbC1tb2RlOiBib3RoOwogICAgICAgIC1tb3otYW5pbWF0aW9uLWZpbGwtbW9kZTogYm90aDsKICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoOyB9CiAgICAgIC5nYW1lLW1lc3NhZ2UuZ2FtZS13b24gLm1haWxpbmctbGlzdCwgLmdhbWUtbWVzc2FnZS5nYW1lLW92ZXIgLm1haWxpbmctbGlzdCB7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb246IGZhZGUtaW4gMS41cyBlYXNlLWluLW91dCAyNTAwbXM7CiAgICAgICAgLW1vei1hbmltYXRpb246IGZhZGUtaW4gMS41cyBlYXNlLWluLW91dCAyNTAwbXM7CiAgICAgICAgYW5pbWF0aW9uOiBmYWRlLWluIDEuNXMgZWFzZS1pbi1vdXQgMjUwMG1zOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWZpbGwtbW9kZTogYm90aDsKICAgICAgICAtbW96LWFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogYm90aDsgfQoKICAuZ3JpZC1jb250YWluZXIgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgei1pbmRleDogMTsgfQoKICAuZ3JpZC1yb3cgewogICAgbWFyZ2luLWJvdHRvbTogMTBweDsgfQogICAgLmdyaWQtcm93Omxhc3QtY2hpbGQgewogICAgICBtYXJnaW4tYm90dG9tOiAwOyB9CiAgICAuZ3JpZC1yb3c6YWZ0ZXIgewogICAgICBjb250ZW50OiAiIjsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIGNsZWFyOiBib3RoOyB9CgogIC5ncmlkLWNlbGwgewogICAgd2lkdGg6IDU3LjVweDsKICAgIGhlaWdodDogNTcuNXB4OwogICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgZmxvYXQ6IGxlZnQ7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDIzOCwgMjI4LCAyMTgsIDAuMzUpOyB9CiAgICAuZ3JpZC1jZWxsOmxhc3QtY2hpbGQgewogICAgICBtYXJnaW4tcmlnaHQ6IDA7IH0KCiAgLnRpbGUtY29udGFpbmVyIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHotaW5kZXg6IDI7IH0KCiAgLnRpbGUsIC50aWxlIC50aWxlLWlubmVyIHsKICAgIHdpZHRoOiA1OHB4OwogICAgaGVpZ2h0OiA1OHB4OwogICAgbGluZS1oZWlnaHQ6IDY3LjVweDsgfQogIC50aWxlLnRpbGUtcG9zaXRpb24tMS0xIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCAwcHgpOwogICAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDBweCk7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDBweCk7IH0KICAudGlsZS50aWxlLXBvc2l0aW9uLTEtMiB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgNjdweCk7CiAgICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgNjdweCk7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDY3cHgpOyB9CiAgLnRpbGUudGlsZS1wb3NpdGlvbi0xLTMgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDEzNXB4KTsKICAgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCAxMzVweCk7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDEzNXB4KTsgfQogIC50aWxlLnRpbGUtcG9zaXRpb24tMS00IHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCAyMDJweCk7CiAgICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgMjAycHgpOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCAyMDJweCk7IH0KICAudGlsZS50aWxlLXBvc2l0aW9uLTItMSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDY3cHgsIDBweCk7CiAgICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDY3cHgsIDBweCk7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg2N3B4LCAwcHgpOyB9CiAgLnRpbGUudGlsZS1wb3NpdGlvbi0yLTIgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSg2N3B4LCA2N3B4KTsKICAgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoNjdweCwgNjdweCk7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg2N3B4LCA2N3B4KTsgfQogIC50aWxlLnRpbGUtcG9zaXRpb24tMi0zIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoNjdweCwgMTM1cHgpOwogICAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZSg2N3B4LCAxMzVweCk7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg2N3B4LCAxMzVweCk7IH0KICAudGlsZS50aWxlLXBvc2l0aW9uLTItNCB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDY3cHgsIDIwMnB4KTsKICAgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoNjdweCwgMjAycHgpOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoNjdweCwgMjAycHgpOyB9CiAgLnRpbGUudGlsZS1wb3NpdGlvbi0zLTEgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMzVweCwgMHB4KTsKICAgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTM1cHgsIDBweCk7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMzVweCwgMHB4KTsgfQogIC50aWxlLnRpbGUtcG9zaXRpb24tMy0yIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTM1cHgsIDY3cHgpOwogICAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMzVweCwgNjdweCk7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMzVweCwgNjdweCk7IH0KICAudGlsZS50aWxlLXBvc2l0aW9uLTMtMyB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDEzNXB4LCAxMzVweCk7CiAgICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDEzNXB4LCAxMzVweCk7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMzVweCwgMTM1cHgpOyB9CiAgLnRpbGUudGlsZS1wb3NpdGlvbi0zLTQgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMzVweCwgMjAycHgpOwogICAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMzVweCwgMjAycHgpOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTM1cHgsIDIwMnB4KTsgfQogIC50aWxlLnRpbGUtcG9zaXRpb24tNC0xIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMjAycHgsIDBweCk7CiAgICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDIwMnB4LCAwcHgpOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMjAycHgsIDBweCk7IH0KICAudGlsZS50aWxlLXBvc2l0aW9uLTQtMiB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDIwMnB4LCA2N3B4KTsKICAgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMjAycHgsIDY3cHgpOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMjAycHgsIDY3cHgpOyB9CiAgLnRpbGUudGlsZS1wb3NpdGlvbi00LTMgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgyMDJweCwgMTM1cHgpOwogICAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZSgyMDJweCwgMTM1cHgpOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMjAycHgsIDEzNXB4KTsgfQogIC50aWxlLnRpbGUtcG9zaXRpb24tNC00IHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMjAycHgsIDIwMnB4KTsKICAgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMjAycHgsIDIwMnB4KTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDIwMnB4LCAyMDJweCk7IH0KCiAgLnRpbGUgLnRpbGUtaW5uZXIgewogICAgZm9udC1zaXplOiAzNXB4OyB9CgogIC5nYW1lLW1lc3NhZ2UgewogICAgcGFkZGluZy10b3A6IDA7IH0KICAgIC5nYW1lLW1lc3NhZ2UgcCB7CiAgICAgIGZvbnQtc2l6ZTogMzBweCAhaW1wb3J0YW50OwogICAgICBoZWlnaHQ6IDMwcHggIWltcG9ydGFudDsKICAgICAgbGluZS1oZWlnaHQ6IDMwcHggIWltcG9ydGFudDsKICAgICAgbWFyZ2luLXRvcDogMzIlICFpbXBvcnRhbnQ7CiAgICAgIG1hcmdpbi1ib3R0b206IDAgIWltcG9ydGFudDsgfQogICAgLmdhbWUtbWVzc2FnZSAubG93ZXIgewogICAgICBtYXJnaW4tdG9wOiAxMHB4ICFpbXBvcnRhbnQ7IH0KICAgIC5nYW1lLW1lc3NhZ2UuZ2FtZS13b24gLnNjb3JlLXNoYXJpbmcgewogICAgICBtYXJnaW4tdG9wOiAxMHB4OyB9CiAgICAuZ2FtZS1tZXNzYWdlLmdhbWUtb3ZlciAubWFpbGluZy1saXN0IHsKICAgICAgbWFyZ2luLXRvcDogMjVweDsgfQogICAgLmdhbWUtbWVzc2FnZSAubWFpbGluZy1saXN0IHsKICAgICAgbWFyZ2luLXRvcDogMTBweDsgfQogICAgICAuZ2FtZS1tZXNzYWdlIC5tYWlsaW5nLWxpc3QgLm1haWxpbmctbGlzdC1lbWFpbC1maWVsZCB7CiAgICAgICAgd2lkdGg6IDE4MHB4OyB9CgogIC5zaGFyaW5nID4gaWZyYW1lLCAuc2hhcmluZyA+IHNwYW4sIC5zaGFyaW5nID4gZm9ybSB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIG1hcmdpbjogMCBhdXRvOwogICAgbWFyZ2luLWJvdHRvbTogMjBweDsgfSB9Ci5wcC1kb25hdGUgYnV0dG9uIHsKICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgLW1vei1hcHBlYXJhbmNlOiBub25lOwogIGFwcGVhcmFuY2U6IG5vbmU7CiAgYm9yZGVyOiBub25lOwogIGZvbnQ6IGluaGVyaXQ7CiAgY29sb3I6IGluaGVyaXQ7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGJhY2tncm91bmQ6ICM4ZjdhNjY7CiAgYm9yZGVyLXJhZGl1czogM3B4OwogIHBhZGRpbmc6IDAgMjBweDsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgY29sb3I6ICNmOWY2ZjI7CiAgaGVpZ2h0OiA0MHB4OwogIGxpbmUtaGVpZ2h0OiA0MnB4OwogIGN1cnNvcjogcG9pbnRlcjsgfQogIC5wcC1kb25hdGUgYnV0dG9uIGltZyB7CiAgICB2ZXJ0aWNhbC1hbGlnbjogLTRweDsKICAgIG1hcmdpbi1yaWdodDogOHB4OyB9CgouYnRjLWRvbmF0ZSB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIG1hcmdpbi1sZWZ0OiAxMHB4OwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBiYWNrZ3JvdW5kOiAjOGY3YTY2OwogIGJvcmRlci1yYWRpdXM6IDNweDsKICBwYWRkaW5nOiAwIDIwcHg7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIGNvbG9yOiAjZjlmNmYyOwogIGhlaWdodDogNDBweDsKICBsaW5lLWhlaWdodDogNDJweDsKICBjdXJzb3I6IHBvaW50ZXI7IH0KICAuYnRjLWRvbmF0ZSBpbWcgewogICAgdmVydGljYWwtYWxpZ246IC00cHg7CiAgICBtYXJnaW4tcmlnaHQ6IDhweDsgfQogIC5idGMtZG9uYXRlIGEgewogICAgY29sb3I6ICNmOWY2ZjI7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICBmb250LXdlaWdodDogbm9ybWFsOyB9CiAgLmJ0Yy1kb25hdGUgLmFkZHJlc3MgewogICAgY3Vyc29yOiBhdXRvOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgd2lkdGg6IDM0MHB4OwogICAgcmlnaHQ6IDUwJTsKICAgIG1hcmdpbi1yaWdodDogLTE3MHB4OwogICAgcGFkZGluZy1ib3R0b206IDdweDsKICAgIHRvcDogLTMwcHg7CiAgICBvcGFjaXR5OiAwOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAtd2Via2l0LXRyYW5zaXRpb246IDQwMG1zIGVhc2U7CiAgICAtbW96LXRyYW5zaXRpb246IDQwMG1zIGVhc2U7CiAgICB0cmFuc2l0aW9uOiA0MDBtcyBlYXNlOwogICAgLXdlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5OiB0b3AsIG9wYWNpdHk7CiAgICAtbW96LXRyYW5zaXRpb24tcHJvcGVydHk6IHRvcCwgb3BhY2l0eTsKICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IHRvcCwgb3BhY2l0eTsgfQogICAgLmJ0Yy1kb25hdGUgLmFkZHJlc3M6YWZ0ZXIgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGJvcmRlci10b3A6IDEwcHggc29saWQgI2JiYWRhMDsKICAgICAgYm9yZGVyLXJpZ2h0OiA3cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgIGJvcmRlci1sZWZ0OiA3cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgIGNvbnRlbnQ6ICIiOwogICAgICBib3R0b206IDBweDsKICAgICAgbGVmdDogNTAlOwogICAgICBtYXJnaW4tbGVmdDogLTdweDsgfQogICAgLmJ0Yy1kb25hdGUgLmFkZHJlc3MgY29kZSB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNiYmFkYTA7CiAgICAgIHBhZGRpbmc6IDEwcHggMTVweDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgZm9udC1mYW1pbHk6IENvbnNvbGFzLCAiTGliZXJhdGlvbiBNb25vIiwgQ291cmllciwgbW9ub3NwYWNlOwogICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KICAuYnRjLWRvbmF0ZTpob3ZlciAuYWRkcmVzcywgLmJ0Yy1kb25hdGUgLmFkZHJlc3M6aG92ZXIgLmFkZHJlc3MgewogICAgb3BhY2l0eTogMTsKICAgIHRvcDogLTQ1cHg7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsgfQogIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDUyMHB4KSB7CiAgICAuYnRjLWRvbmF0ZSB7CiAgICAgIHdpZHRoOiAxMjBweDsgfQogICAgICAuYnRjLWRvbmF0ZSAuYWRkcmVzcyB7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAtMTUwcHg7CiAgICAgICAgd2lkdGg6IDMwMHB4OyB9CiAgICAgICAgLmJ0Yy1kb25hdGUgLmFkZHJlc3MgY29kZSB7CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7IH0KICAgICAgICAuYnRjLWRvbmF0ZSAuYWRkcmVzczphZnRlciB7CiAgICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgICBib3R0b206IDJweDsgfSB9CgpALXdlYmtpdC1rZXlmcmFtZXMgcG9wLWluLWJpZyB7CiAgMCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApIHRyYW5zbGF0ZVooMCk7CiAgICAtbW96LXRyYW5zZm9ybTogc2NhbGUoMCkgdHJhbnNsYXRlWigwKTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMCkgdHJhbnNsYXRlWigwKTsKICAgIG9wYWNpdHk6IDA7CiAgICBtYXJnaW4tdG9wOiAtNTZweDsgfQoKICAxMDAlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKSB0cmFuc2xhdGVaKDApOwogICAgLW1vei10cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZVooMCk7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZVooMCk7CiAgICBvcGFjaXR5OiAxOwogICAgbWFyZ2luLXRvcDogMzBweDsgfSB9CkAtbW96LWtleWZyYW1lcyBwb3AtaW4tYmlnIHsKICAwJSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMCkgdHJhbnNsYXRlWigwKTsKICAgIC1tb3otdHJhbnNmb3JtOiBzY2FsZSgwKSB0cmFuc2xhdGVaKDApOwogICAgdHJhbnNmb3JtOiBzY2FsZSgwKSB0cmFuc2xhdGVaKDApOwogICAgb3BhY2l0eTogMDsKICAgIG1hcmdpbi10b3A6IC01NnB4OyB9CgogIDEwMCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZVooMCk7CiAgICAtbW96LXRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRlWigwKTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRlWigwKTsKICAgIG9wYWNpdHk6IDE7CiAgICBtYXJnaW4tdG9wOiAzMHB4OyB9IH0KQGtleWZyYW1lcyBwb3AtaW4tYmlnIHsKICAwJSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMCkgdHJhbnNsYXRlWigwKTsKICAgIC1tb3otdHJhbnNmb3JtOiBzY2FsZSgwKSB0cmFuc2xhdGVaKDApOwogICAgdHJhbnNmb3JtOiBzY2FsZSgwKSB0cmFuc2xhdGVaKDApOwogICAgb3BhY2l0eTogMDsKICAgIG1hcmdpbi10b3A6IC01NnB4OyB9CgogIDEwMCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZVooMCk7CiAgICAtbW96LXRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRlWigwKTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRlWigwKTsKICAgIG9wYWNpdHk6IDE7CiAgICBtYXJnaW4tdG9wOiAzMHB4OyB9IH0KQC13ZWJraXQta2V5ZnJhbWVzIHBvcC1pbi1zbWFsbCB7CiAgMCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApIHRyYW5zbGF0ZVooMCk7CiAgICAtbW96LXRyYW5zZm9ybTogc2NhbGUoMCkgdHJhbnNsYXRlWigwKTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMCkgdHJhbnNsYXRlWigwKTsKICAgIG9wYWNpdHk6IDA7CiAgICBtYXJnaW4tdG9wOiAtNzZweDsgfQoKICAxMDAlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKSB0cmFuc2xhdGVaKDApOwogICAgLW1vei10cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZVooMCk7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZVooMCk7CiAgICBvcGFjaXR5OiAxOwogICAgbWFyZ2luLXRvcDogMTBweDsgfSB9CkAtbW96LWtleWZyYW1lcyBwb3AtaW4tc21hbGwgewogIDAlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwKSB0cmFuc2xhdGVaKDApOwogICAgLW1vei10cmFuc2Zvcm06IHNjYWxlKDApIHRyYW5zbGF0ZVooMCk7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDApIHRyYW5zbGF0ZVooMCk7CiAgICBvcGFjaXR5OiAwOwogICAgbWFyZ2luLXRvcDogLTc2cHg7IH0KCiAgMTAwJSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRlWigwKTsKICAgIC1tb3otdHJhbnNmb3JtOiBzY2FsZSgxKSB0cmFuc2xhdGVaKDApOwogICAgdHJhbnNmb3JtOiBzY2FsZSgxKSB0cmFuc2xhdGVaKDApOwogICAgb3BhY2l0eTogMTsKICAgIG1hcmdpbi10b3A6IDEwcHg7IH0gfQpAa2V5ZnJhbWVzIHBvcC1pbi1zbWFsbCB7CiAgMCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApIHRyYW5zbGF0ZVooMCk7CiAgICAtbW96LXRyYW5zZm9ybTogc2NhbGUoMCkgdHJhbnNsYXRlWigwKTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMCkgdHJhbnNsYXRlWigwKTsKICAgIG9wYWNpdHk6IDA7CiAgICBtYXJnaW4tdG9wOiAtNzZweDsgfQoKICAxMDAlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKSB0cmFuc2xhdGVaKDApOwogICAgLW1vei10cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZVooMCk7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZVooMCk7CiAgICBvcGFjaXR5OiAxOwogICAgbWFyZ2luLXRvcDogMTBweDsgfSB9Ci5hcHAtbm90aWNlIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgLXdlYmtpdC1hbmltYXRpb246IHBvcC1pbi1iaWcgNzAwbXMgZWFzZSAycyBib3RoOwogIC1tb3otYW5pbWF0aW9uOiBwb3AtaW4tYmlnIDcwMG1zIGVhc2UgMnMgYm90aDsKICBhbmltYXRpb246IHBvcC1pbi1iaWcgNzAwbXMgZWFzZSAycyBib3RoOwogIGJhY2tncm91bmQ6ICNlZGM1M2Y7CiAgY29sb3I6IHdoaXRlOwogIHBhZGRpbmc6IDE4cHg7CiAgbWFyZ2luLXRvcDogMzBweDsKICBoZWlnaHQ6IDU2cHg7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICBib3JkZXItcmFkaXVzOiAzcHg7IH0KICAuYXBwLW5vdGljZTphZnRlciB7CiAgICBjb250ZW50OiAiIjsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgY2xlYXI6IGJvdGg7IH0KICAuYXBwLW5vdGljZSAubm90aWNlLWNsb3NlLWJ1dHRvbiB7CiAgICBmbG9hdDogcmlnaHQ7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgb3BhY2l0eTogMC43OyB9CiAgLmFwcC1ub3RpY2UgcCB7CiAgICBtYXJnaW4tYm90dG9tOiAwOyB9CiAgLmFwcC1ub3RpY2UsIC5hcHAtbm90aWNlIHAgewogICAgbGluZS1oZWlnaHQ6IDIwcHg7IH0KICAuYXBwLW5vdGljZSBhIHsKICAgIGNvbG9yOiB3aGl0ZTsgfQogIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDUyMHB4KSB7CiAgICAuYXBwLW5vdGljZSB7CiAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBwb3AtaW4tc21hbGwgNzAwbXMgZWFzZSAycyBib3RoOwogICAgICAtbW96LWFuaW1hdGlvbjogcG9wLWluLXNtYWxsIDcwMG1zIGVhc2UgMnMgYm90aDsKICAgICAgYW5pbWF0aW9uOiBwb3AtaW4tc21hbGwgNzAwbXMgZWFzZSAycyBib3RoOwogICAgICBtYXJnaW4tdG9wOiAxMHB4OwogICAgICBoZWlnaHQ6IDc2cHg7IH0gfQo8L3N0eWxlPjwvaGVhZD4KPGJvZHk+CiAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KICAgIDxkaXYgY2xhc3M9ImhlYWRpbmciPgogICAgICA8aDEgY2xhc3M9InRpdGxlIj4yMDQ4PC9oMT4KICAgICAgPGRpdiBjbGFzcz0ic2NvcmVzLWNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2NvcmUtY29udGFpbmVyIj4wPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYmVzdC1jb250YWluZXIiPjkwODwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImFib3ZlLWdhbWUiPgogICAgICA8cCBjbGFzcz0iZ2FtZS1pbnRybyI+Sm9pbiB0aGUgbnVtYmVycyBhbmQgZ2V0IHRvIHRoZSA8c3Ryb25nPjIwNDggdGlsZSE8L3N0cm9uZz48L3A+CiAgICAgIDxhIGNsYXNzPSJyZXN0YXJ0LWJ1dHRvbiI+TmV3IEdhbWU8L2E+CiAgICA8L2Rpdj4KCiAgICAKCiAgICA8ZGl2IGNsYXNzPSJnYW1lLWNvbnRhaW5lciI+CiAgICAgIDxkaXYgY2xhc3M9ImdhbWUtbWVzc2FnZSI+CiAgICAgICAgPHA+PC9wPgogICAgICAgIDxkaXYgY2xhc3M9Imxvd2VyIj4KCSAgICAgICAgPGEgY2xhc3M9ImtlZXAtcGxheWluZy1idXR0b24iPktlZXAgZ29pbmc8L2E+CiAgICAgICAgICA8YSBjbGFzcz0icmV0cnktYnV0dG9uIj5UcnkgYWdhaW48L2E+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzY29yZS1zaGFyaW5nIj48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1haWxpbmctbGlzdCI+CiAgICAgICAgICAgIDwhLS0gTWFpbENoaW1wIFNpZ251cCBGb3JtIC0tPgoKICAgICAgICAgICAgICA8IS0tIHJlYWwgcGVvcGxlIHNob3VsZCBub3QgZmlsbCB0aGlzIGluIGFuZCBleHBlY3QgZ29vZCB0aGluZ3MgLSBkbyBub3QgcmVtb3ZlIHRoaXMgb3IgcmlzayBmb3JtIGJvdCBzaWdudXBzLS0+CiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAtOTk5OXB4OyI+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iYl85OTEyMDEyMDY4MTdjZmI0ZTQyNDdlZDZjXzc5MjhlYTgxN2IiIHZhbHVlPSIiPgogICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iR28iIG5hbWU9InN1YnNjcmliZSIgY2xhc3M9Im1haWxpbmctbGlzdC1zdWJzY3JpYmUtYnV0dG9uIj4KICAgICAgICAgICAgCiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJncmlkLWNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1yb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1jZWxsIj48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtY2VsbCI+PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJncmlkLWNlbGwiPjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1jZWxsIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJncmlkLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJncmlkLWNlbGwiPjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1jZWxsIj48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtY2VsbCI+PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJncmlkLWNlbGwiPjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtcm93Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtY2VsbCI+PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJncmlkLWNlbGwiPjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1jZWxsIj48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtY2VsbCI+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1yb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1jZWxsIj48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtY2VsbCI+PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJncmlkLWNlbGwiPjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1jZWxsIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJ0aWxlLWNvbnRhaW5lciI+PGRpdiBjbGFzcz0idGlsZSB0aWxlLTIgdGlsZS1wb3NpdGlvbi0xLTIgdGlsZS1uZXciPjxkaXYgY2xhc3M9InRpbGUtaW5uZXIiPjI8L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJ0aWxlIHRpbGUtMiB0aWxlLXBvc2l0aW9uLTMtMyB0aWxlLW5ldyI+PGRpdiBjbGFzcz0idGlsZS1pbm5lciI+MjwvZGl2PjwvZGl2PjwvZGl2PgogICAgPC9kaXY+CgogICAgPHAgY2xhc3M9ImdhbWUtZXhwbGFuYXRpb24iPgogICAgICA8c3Ryb25nIGNsYXNzPSJpbXBvcnRhbnQiPkhvdyB0byBwbGF5Ojwvc3Ryb25nPiBVc2UgeW91ciA8c3Ryb25nPmFycm93IGtleXM8L3N0cm9uZz4gdG8gbW92ZSB0aGUgdGlsZXMuIFdoZW4gdHdvIHRpbGVzIHdpdGggdGhlIHNhbWUgbnVtYmVyIHRvdWNoLCB0aGV5IDxzdHJvbmc+bWVyZ2UgaW50byBvbmUhPC9zdHJvbmc+CiAgICA8L3A+CiAgPC9kaXY+CgogIDxzY3JpcHQ+CkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgfHwgZnVuY3Rpb24gKHRhcmdldCkgewogIHZhciBzZWxmID0gdGhpczsKICByZXR1cm4gZnVuY3Rpb24gKGFyZ3MpIHsKICAgIGlmICghKGFyZ3MgaW5zdGFuY2VvZiBBcnJheSkpIHsKICAgICAgYXJncyA9IFthcmdzXTsKICAgIH0KICAgIHNlbGYuYXBwbHkodGFyZ2V0LCBhcmdzKTsKICB9Owp9Owo8L3NjcmlwdD4KICA8c2NyaXB0PgooZnVuY3Rpb24gKCkgewogIGlmICh0eXBlb2Ygd2luZG93LkVsZW1lbnQgPT09ICJ1bmRlZmluZWQiIHx8CiAgICAgICJjbGFzc0xpc3QiIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkgewogICAgcmV0dXJuOwogIH0KCiAgdmFyIHByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZSwKICAgICAgcHVzaCA9IHByb3RvdHlwZS5wdXNoLAogICAgICBzcGxpY2UgPSBwcm90b3R5cGUuc3BsaWNlLAogICAgICBqb2luID0gcHJvdG90eXBlLmpvaW47CgogIGZ1bmN0aW9uIERPTVRva2VuTGlzdChlbCkgewogICAgdGhpcy5lbCA9IGVsOwogICAgLy8gVGhlIGNsYXNzTmFtZSBuZWVkcyB0byBiZSB0cmltbWVkIGFuZCBzcGxpdCBvbiB3aGl0ZXNwYWNlCiAgICAvLyB0byByZXRyaWV2ZSBhIGxpc3Qgb2YgY2xhc3Nlcy4KICAgIHZhciBjbGFzc2VzID0gZWwuY2xhc3NOYW1lLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJykuc3BsaXQoL1xzKy8pOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHB1c2guY2FsbCh0aGlzLCBjbGFzc2VzW2ldKTsKICAgIH0KICB9CgogIERPTVRva2VuTGlzdC5wcm90b3R5cGUgPSB7CiAgICBhZGQ6IGZ1bmN0aW9uICh0b2tlbikgewogICAgICBpZiAodGhpcy5jb250YWlucyh0b2tlbikpIHJldHVybjsKICAgICAgcHVzaC5jYWxsKHRoaXMsIHRva2VuKTsKICAgICAgdGhpcy5lbC5jbGFzc05hbWUgPSB0aGlzLnRvU3RyaW5nKCk7CiAgICB9LAogICAgY29udGFpbnM6IGZ1bmN0aW9uICh0b2tlbikgewogICAgICByZXR1cm4gdGhpcy5lbC5jbGFzc05hbWUuaW5kZXhPZih0b2tlbikgIT0gLTE7CiAgICB9LAogICAgaXRlbTogZnVuY3Rpb24gKGluZGV4KSB7CiAgICAgIHJldHVybiB0aGlzW2luZGV4XSB8fCBudWxsOwogICAgfSwKICAgIHJlbW92ZTogZnVuY3Rpb24gKHRva2VuKSB7CiAgICAgIGlmICghdGhpcy5jb250YWlucyh0b2tlbikpIHJldHVybjsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKHRoaXNbaV0gPT0gdG9rZW4pIGJyZWFrOwogICAgICB9CiAgICAgIHNwbGljZS5jYWxsKHRoaXMsIGksIDEpOwogICAgICB0aGlzLmVsLmNsYXNzTmFtZSA9IHRoaXMudG9TdHJpbmcoKTsKICAgIH0sCiAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkgewogICAgICByZXR1cm4gam9pbi5jYWxsKHRoaXMsICcgJyk7CiAgICB9LAogICAgdG9nZ2xlOiBmdW5jdGlvbiAodG9rZW4pIHsKICAgICAgaWYgKCF0aGlzLmNvbnRhaW5zKHRva2VuKSkgewogICAgICAgIHRoaXMuYWRkKHRva2VuKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnJlbW92ZSh0b2tlbik7CiAgICAgIH0KCiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5zKHRva2VuKTsKICAgIH0KICB9OwoKICB3aW5kb3cuRE9NVG9rZW5MaXN0ID0gRE9NVG9rZW5MaXN0OwoKICBmdW5jdGlvbiBkZWZpbmVFbGVtZW50R2V0dGVyKG9iaiwgcHJvcCwgZ2V0dGVyKSB7CiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3AsIHsKICAgICAgICBnZXQ6IGdldHRlcgogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIG9iai5fX2RlZmluZUdldHRlcl9fKHByb3AsIGdldHRlcik7CiAgICB9CiAgfQoKICBkZWZpbmVFbGVtZW50R2V0dGVyKEhUTUxFbGVtZW50LnByb3RvdHlwZSwgJ2NsYXNzTGlzdCcsIGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiBuZXcgRE9NVG9rZW5MaXN0KHRoaXMpOwogIH0pOwp9KSgpOwo8L3NjcmlwdD4KICA8c2NyaXB0PgooZnVuY3Rpb24oKSB7CiAgdmFyIGxhc3RUaW1lID0gMDsKICB2YXIgdmVuZG9ycyA9IFsnd2Via2l0JywgJ21veiddOwogIGZvcih2YXIgeCA9IDA7IHggPCB2ZW5kb3JzLmxlbmd0aCAmJiAhd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZTsgKyt4KSB7CiAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gd2luZG93W3ZlbmRvcnNbeF0rJ1JlcXVlc3RBbmltYXRpb25GcmFtZSddOwogICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lID0KICAgIHdpbmRvd1t2ZW5kb3JzW3hdKydDYW5jZWxBbmltYXRpb25GcmFtZSddIHx8IHdpbmRvd1t2ZW5kb3JzW3hdKydDYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTsKICB9CgogIGlmICghd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSkgewogICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKGNhbGxiYWNrLCBlbGVtZW50KSB7CiAgICAgIHZhciBjdXJyVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOwogICAgICB2YXIgdGltZVRvQ2FsbCA9IE1hdGgubWF4KDAsIDE2IC0gKGN1cnJUaW1lIC0gbGFzdFRpbWUpKTsKICAgICAgdmFyIGlkID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGNhbGxiYWNrKGN1cnJUaW1lICsgdGltZVRvQ2FsbCk7IH0sCiAgICAgIHRpbWVUb0NhbGwpOwogICAgICBsYXN0VGltZSA9IGN1cnJUaW1lICsgdGltZVRvQ2FsbDsKICAgICAgcmV0dXJuIGlkOwogICAgfTsKICB9CgogIGlmICghd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKSB7CiAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbihpZCkgewogICAgICBjbGVhclRpbWVvdXQoaWQpOwogICAgfTsKICB9Cn0oKSk7Cjwvc2NyaXB0PgogIDxzY3JpcHQ+CmZ1bmN0aW9uIEtleWJvYXJkSW5wdXRNYW5hZ2VyKCkgewogIHRoaXMuZXZlbnRzID0ge307CgogIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpIHsKICAgIC8vSW50ZXJuZXQgRXhwbG9yZXIgMTAgc3R5bGUKICAgIHRoaXMuZXZlbnRUb3VjaHN0YXJ0ICAgID0gIk1TUG9pbnRlckRvd24iOwogICAgdGhpcy5ldmVudFRvdWNobW92ZSAgICAgPSAiTVNQb2ludGVyTW92ZSI7CiAgICB0aGlzLmV2ZW50VG91Y2hlbmQgICAgICA9ICJNU1BvaW50ZXJVcCI7CiAgfSBlbHNlIHsKICAgIHRoaXMuZXZlbnRUb3VjaHN0YXJ0ICAgID0gInRvdWNoc3RhcnQiOwogICAgdGhpcy5ldmVudFRvdWNobW92ZSAgICAgPSAidG91Y2htb3ZlIjsKICAgIHRoaXMuZXZlbnRUb3VjaGVuZCAgICAgID0gInRvdWNoZW5kIjsKICB9CgogIHRoaXMubGlzdGVuKCk7Cn0KCktleWJvYXJkSW5wdXRNYW5hZ2VyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldmVudCwgY2FsbGJhY2spIHsKICBpZiAoIXRoaXMuZXZlbnRzW2V2ZW50XSkgewogICAgdGhpcy5ldmVudHNbZXZlbnRdID0gW107CiAgfQogIHRoaXMuZXZlbnRzW2V2ZW50XS5wdXNoKGNhbGxiYWNrKTsKfTsKCktleWJvYXJkSW5wdXRNYW5hZ2VyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gKGV2ZW50LCBkYXRhKSB7CiAgdmFyIGNhbGxiYWNrcyA9IHRoaXMuZXZlbnRzW2V2ZW50XTsKICBpZiAoY2FsbGJhY2tzKSB7CiAgICBjYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbiAoY2FsbGJhY2spIHsKICAgICAgY2FsbGJhY2soZGF0YSk7CiAgICB9KTsKICB9Cn07CgpLZXlib2FyZElucHV0TWFuYWdlci5wcm90b3R5cGUubGlzdGVuID0gZnVuY3Rpb24gKCkgewogIHZhciBzZWxmID0gdGhpczsKCiAgdmFyIG1hcCA9IHsKICAgIDM4OiAwLCAvLyBVcAogICAgMzk6IDEsIC8vIFJpZ2h0CiAgICA0MDogMiwgLy8gRG93bgogICAgMzc6IDMsIC8vIExlZnQKICAgIDc1OiAwLCAvLyBWaW0gdXAKICAgIDc2OiAxLCAvLyBWaW0gcmlnaHQKICAgIDc0OiAyLCAvLyBWaW0gZG93bgogICAgNzI6IDMsIC8vIFZpbSBsZWZ0CiAgICA4NzogMCwgLy8gVwogICAgNjg6IDEsIC8vIEQKICAgIDgzOiAyLCAvLyBTCiAgICA2NTogMyAgLy8gQQogIH07CgogIC8vIFJlc3BvbmQgdG8gZGlyZWN0aW9uIGtleXMKICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgZnVuY3Rpb24gKGV2ZW50KSB7CiAgICB2YXIgbW9kaWZpZXJzID0gZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSB8fAogICAgICAgICAgICAgICAgICAgIGV2ZW50LnNoaWZ0S2V5OwogICAgdmFyIG1hcHBlZCAgICA9IG1hcFtldmVudC53aGljaF07CgogICAgLy8gSWdub3JlIHRoZSBldmVudCBpZiBpdCdzIGhhcHBlbmluZyBpbiBhIHRleHQgZmllbGQKICAgIGlmIChzZWxmLnRhcmdldElzSW5wdXQoZXZlbnQpKSByZXR1cm47CgogICAgaWYgKCFtb2RpZmllcnMpIHsKICAgICAgaWYgKG1hcHBlZCAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICBzZWxmLmVtaXQoIm1vdmUiLCBtYXBwZWQpOwogICAgICB9CiAgICB9CgogICAgLy8gUiBrZXkgcmVzdGFydHMgdGhlIGdhbWUKICAgIGlmICghbW9kaWZpZXJzICYmIGV2ZW50LndoaWNoID09PSA4MikgewogICAgICBzZWxmLnJlc3RhcnQuY2FsbChzZWxmLCBldmVudCk7CiAgICB9CiAgfSk7CgogIC8vIFJlc3BvbmQgdG8gYnV0dG9uIHByZXNzZXMKICB0aGlzLmJpbmRCdXR0b25QcmVzcygiLnJldHJ5LWJ1dHRvbiIsIHRoaXMucmVzdGFydCk7CiAgdGhpcy5iaW5kQnV0dG9uUHJlc3MoIi5yZXN0YXJ0LWJ1dHRvbiIsIHRoaXMucmVzdGFydCk7CiAgdGhpcy5iaW5kQnV0dG9uUHJlc3MoIi5rZWVwLXBsYXlpbmctYnV0dG9uIiwgdGhpcy5rZWVwUGxheWluZyk7CgogIC8vIFJlc3BvbmQgdG8gc3dpcGUgZXZlbnRzCiAgdmFyIHRvdWNoU3RhcnRDbGllbnRYLCB0b3VjaFN0YXJ0Q2xpZW50WTsKICB2YXIgZ2FtZUNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImdhbWUtY29udGFpbmVyIilbMF07CgogIGdhbWVDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmV2ZW50VG91Y2hzdGFydCwgZnVuY3Rpb24gKGV2ZW50KSB7CiAgICBpZiAoKCF3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQgJiYgZXZlbnQudG91Y2hlcy5sZW5ndGggPiAxKSB8fAogICAgICAgIGV2ZW50LnRhcmdldFRvdWNoZXMgPiAxIHx8CiAgICAgICAgc2VsZi50YXJnZXRJc0lucHV0KGV2ZW50KSkgewogICAgICByZXR1cm47IC8vIElnbm9yZSBpZiB0b3VjaGluZyB3aXRoIG1vcmUgdGhhbiAxIGZpbmdlciBvciB0b3VjaGluZyBpbnB1dAogICAgfQoKICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpIHsKICAgICAgdG91Y2hTdGFydENsaWVudFggPSBldmVudC5wYWdlWDsKICAgICAgdG91Y2hTdGFydENsaWVudFkgPSBldmVudC5wYWdlWTsKICAgIH0gZWxzZSB7CiAgICAgIHRvdWNoU3RhcnRDbGllbnRYID0gZXZlbnQudG91Y2hlc1swXS5jbGllbnRYOwogICAgICB0b3VjaFN0YXJ0Q2xpZW50WSA9IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WTsKICAgIH0KCiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogIH0pOwoKICBnYW1lQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ldmVudFRvdWNobW92ZSwgZnVuY3Rpb24gKGV2ZW50KSB7CiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogIH0pOwoKICBnYW1lQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ldmVudFRvdWNoZW5kLCBmdW5jdGlvbiAoZXZlbnQpIHsKICAgIGlmICgoIXdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZCAmJiBldmVudC50b3VjaGVzLmxlbmd0aCA+IDApIHx8CiAgICAgICAgZXZlbnQudGFyZ2V0VG91Y2hlcyA+IDAgfHwKICAgICAgICBzZWxmLnRhcmdldElzSW5wdXQoZXZlbnQpKSB7CiAgICAgIHJldHVybjsgLy8gSWdub3JlIGlmIHN0aWxsIHRvdWNoaW5nIHdpdGggb25lIG9yIG1vcmUgZmluZ2VycyBvciBpbnB1dAogICAgfQoKICAgIHZhciB0b3VjaEVuZENsaWVudFgsIHRvdWNoRW5kQ2xpZW50WTsKCiAgICBpZiAod2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkKSB7CiAgICAgIHRvdWNoRW5kQ2xpZW50WCA9IGV2ZW50LnBhZ2VYOwogICAgICB0b3VjaEVuZENsaWVudFkgPSBldmVudC5wYWdlWTsKICAgIH0gZWxzZSB7CiAgICAgIHRvdWNoRW5kQ2xpZW50WCA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFg7CiAgICAgIHRvdWNoRW5kQ2xpZW50WSA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFk7CiAgICB9CgogICAgdmFyIGR4ID0gdG91Y2hFbmRDbGllbnRYIC0gdG91Y2hTdGFydENsaWVudFg7CiAgICB2YXIgYWJzRHggPSBNYXRoLmFicyhkeCk7CgogICAgdmFyIGR5ID0gdG91Y2hFbmRDbGllbnRZIC0gdG91Y2hTdGFydENsaWVudFk7CiAgICB2YXIgYWJzRHkgPSBNYXRoLmFicyhkeSk7CgogICAgaWYgKE1hdGgubWF4KGFic0R4LCBhYnNEeSkgPiAxMCkgewogICAgICAvLyAocmlnaHQgOiBsZWZ0KSA6IChkb3duIDogdXApCiAgICAgIHNlbGYuZW1pdCgibW92ZSIsIGFic0R4ID4gYWJzRHkgPyAoZHggPiAwID8gMSA6IDMpIDogKGR5ID4gMCA/IDIgOiAwKSk7CiAgICB9CiAgfSk7Cn07CgpLZXlib2FyZElucHV0TWFuYWdlci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uIChldmVudCkgewogIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgdGhpcy5lbWl0KCJyZXN0YXJ0Iik7Cn07CgpLZXlib2FyZElucHV0TWFuYWdlci5wcm90b3R5cGUua2VlcFBsYXlpbmcgPSBmdW5jdGlvbiAoZXZlbnQpIHsKICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogIHRoaXMuZW1pdCgia2VlcFBsYXlpbmciKTsKfTsKCktleWJvYXJkSW5wdXRNYW5hZ2VyLnByb3RvdHlwZS5iaW5kQnV0dG9uUHJlc3MgPSBmdW5jdGlvbiAoc2VsZWN0b3IsIGZuKSB7CiAgdmFyIGJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpOwogIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGZuLmJpbmQodGhpcykpOwogIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKHRoaXMuZXZlbnRUb3VjaGVuZCwgZm4uYmluZCh0aGlzKSk7Cn07CgpLZXlib2FyZElucHV0TWFuYWdlci5wcm90b3R5cGUudGFyZ2V0SXNJbnB1dCA9IGZ1bmN0aW9uIChldmVudCkgewogIHJldHVybiBldmVudC50YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAiaW5wdXQiOwp9Owo8L3NjcmlwdD4KICA8c2NyaXB0PgpmdW5jdGlvbiBIVE1MQWN0dWF0b3IoKSB7CiAgdGhpcy50aWxlQ29udGFpbmVyICAgID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLnRpbGUtY29udGFpbmVyIik7CiAgdGhpcy5zY29yZUNvbnRhaW5lciAgID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLnNjb3JlLWNvbnRhaW5lciIpOwogIHRoaXMuYmVzdENvbnRhaW5lciAgICA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5iZXN0LWNvbnRhaW5lciIpOwogIHRoaXMubWVzc2FnZUNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5nYW1lLW1lc3NhZ2UiKTsKICB0aGlzLnNoYXJpbmdDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuc2NvcmUtc2hhcmluZyIpOwoKICB0aGlzLnNjb3JlID0gMDsKfQoKSFRNTEFjdHVhdG9yLnByb3RvdHlwZS5hY3R1YXRlID0gZnVuY3Rpb24gKGdyaWQsIG1ldGFkYXRhKSB7CiAgdmFyIHNlbGYgPSB0aGlzOwoKICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHsKICAgIHNlbGYuY2xlYXJDb250YWluZXIoc2VsZi50aWxlQ29udGFpbmVyKTsKCiAgICBncmlkLmNlbGxzLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbikgewogICAgICBjb2x1bW4uZm9yRWFjaChmdW5jdGlvbiAoY2VsbCkgewogICAgICAgIGlmIChjZWxsKSB7CiAgICAgICAgICBzZWxmLmFkZFRpbGUoY2VsbCk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwoKICAgIHNlbGYudXBkYXRlU2NvcmUobWV0YWRhdGEuc2NvcmUpOwogICAgc2VsZi51cGRhdGVCZXN0U2NvcmUobWV0YWRhdGEuYmVzdFNjb3JlKTsKCiAgICBpZiAobWV0YWRhdGEudGVybWluYXRlZCkgewogICAgICBpZiAobWV0YWRhdGEub3ZlcikgewogICAgICAgIHNlbGYubWVzc2FnZShmYWxzZSk7IC8vIFlvdSBsb3NlCiAgICAgIH0gZWxzZSBpZiAobWV0YWRhdGEud29uKSB7CiAgICAgICAgc2VsZi5tZXNzYWdlKHRydWUpOyAvLyBZb3Ugd2luIQogICAgICB9CiAgICB9CgogIH0pOwp9OwoKLy8gQ29udGludWVzIHRoZSBnYW1lIChib3RoIHJlc3RhcnQgYW5kIGtlZXAgcGxheWluZykKSFRNTEFjdHVhdG9yLnByb3RvdHlwZS5jb250aW51ZUdhbWUgPSBmdW5jdGlvbiAoKSB7CiAgaWYgKHR5cGVvZiBnYSAhPT0gInVuZGVmaW5lZCIpIHsKICAgIGdhKCJzZW5kIiwgImV2ZW50IiwgImdhbWUiLCAicmVzdGFydCIpOwogIH0KCiAgdGhpcy5jbGVhck1lc3NhZ2UoKTsKfTsKCkhUTUxBY3R1YXRvci5wcm90b3R5cGUuY2xlYXJDb250YWluZXIgPSBmdW5jdGlvbiAoY29udGFpbmVyKSB7CiAgd2hpbGUgKGNvbnRhaW5lci5maXJzdENoaWxkKSB7CiAgICBjb250YWluZXIucmVtb3ZlQ2hpbGQoY29udGFpbmVyLmZpcnN0Q2hpbGQpOwogIH0KfTsKCkhUTUxBY3R1YXRvci5wcm90b3R5cGUuYWRkVGlsZSA9IGZ1bmN0aW9uICh0aWxlKSB7CiAgdmFyIHNlbGYgPSB0aGlzOwoKICB2YXIgd3JhcHBlciAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgdmFyIGlubmVyICAgICA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogIHZhciBwb3NpdGlvbiAgPSB0aWxlLnByZXZpb3VzUG9zaXRpb24gfHwgeyB4OiB0aWxlLngsIHk6IHRpbGUueSB9OwogIHZhciBwb3NpdGlvbkNsYXNzID0gdGhpcy5wb3NpdGlvbkNsYXNzKHBvc2l0aW9uKTsKCiAgLy8gV2UgY2FuJ3QgdXNlIGNsYXNzbGlzdCBiZWNhdXNlIGl0IHNvbWVob3cgZ2xpdGNoZXMgd2hlbiByZXBsYWNpbmcgY2xhc3NlcwogIHZhciBjbGFzc2VzID0gWyJ0aWxlIiwgInRpbGUtIiArIHRpbGUudmFsdWUsIHBvc2l0aW9uQ2xhc3NdOwoKICBpZiAodGlsZS52YWx1ZSA+IDIwNDgpIGNsYXNzZXMucHVzaCgidGlsZS1zdXBlciIpOwoKICB0aGlzLmFwcGx5Q2xhc3Nlcyh3cmFwcGVyLCBjbGFzc2VzKTsKCiAgaW5uZXIuY2xhc3NMaXN0LmFkZCgidGlsZS1pbm5lciIpOwogIGlubmVyLnRleHRDb250ZW50ID0gdGlsZS52YWx1ZTsKCiAgaWYgKHRpbGUucHJldmlvdXNQb3NpdGlvbikgewogICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHRpbGUgZ2V0cyByZW5kZXJlZCBpbiB0aGUgcHJldmlvdXMgcG9zaXRpb24gZmlyc3QKICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkgewogICAgICBjbGFzc2VzWzJdID0gc2VsZi5wb3NpdGlvbkNsYXNzKHsgeDogdGlsZS54LCB5OiB0aWxlLnkgfSk7CiAgICAgIHNlbGYuYXBwbHlDbGFzc2VzKHdyYXBwZXIsIGNsYXNzZXMpOyAvLyBVcGRhdGUgdGhlIHBvc2l0aW9uCiAgICB9KTsKICB9IGVsc2UgaWYgKHRpbGUubWVyZ2VkRnJvbSkgewogICAgY2xhc3Nlcy5wdXNoKCJ0aWxlLW1lcmdlZCIpOwogICAgdGhpcy5hcHBseUNsYXNzZXMod3JhcHBlciwgY2xhc3Nlcyk7CgogICAgLy8gUmVuZGVyIHRoZSB0aWxlcyB0aGF0IG1lcmdlZAogICAgdGlsZS5tZXJnZWRGcm9tLmZvckVhY2goZnVuY3Rpb24gKG1lcmdlZCkgewogICAgICBzZWxmLmFkZFRpbGUobWVyZ2VkKTsKICAgIH0pOwogIH0gZWxzZSB7CiAgICBjbGFzc2VzLnB1c2goInRpbGUtbmV3Iik7CiAgICB0aGlzLmFwcGx5Q2xhc3Nlcyh3cmFwcGVyLCBjbGFzc2VzKTsKICB9CgogIC8vIEFkZCB0aGUgaW5uZXIgcGFydCBvZiB0aGUgdGlsZSB0byB0aGUgd3JhcHBlcgogIHdyYXBwZXIuYXBwZW5kQ2hpbGQoaW5uZXIpOwoKICAvLyBQdXQgdGhlIHRpbGUgb24gdGhlIGJvYXJkCiAgdGhpcy50aWxlQ29udGFpbmVyLmFwcGVuZENoaWxkKHdyYXBwZXIpOwp9OwoKSFRNTEFjdHVhdG9yLnByb3RvdHlwZS5hcHBseUNsYXNzZXMgPSBmdW5jdGlvbiAoZWxlbWVudCwgY2xhc3NlcykgewogIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJjbGFzcyIsIGNsYXNzZXMuam9pbigiICIpKTsKfTsKCkhUTUxBY3R1YXRvci5wcm90b3R5cGUubm9ybWFsaXplUG9zaXRpb24gPSBmdW5jdGlvbiAocG9zaXRpb24pIHsKICByZXR1cm4geyB4OiBwb3NpdGlvbi54ICsgMSwgeTogcG9zaXRpb24ueSArIDEgfTsKfTsKCkhUTUxBY3R1YXRvci5wcm90b3R5cGUucG9zaXRpb25DbGFzcyA9IGZ1bmN0aW9uIChwb3NpdGlvbikgewogIHBvc2l0aW9uID0gdGhpcy5ub3JtYWxpemVQb3NpdGlvbihwb3NpdGlvbik7CiAgcmV0dXJuICJ0aWxlLXBvc2l0aW9uLSIgKyBwb3NpdGlvbi54ICsgIi0iICsgcG9zaXRpb24ueTsKfTsKCkhUTUxBY3R1YXRvci5wcm90b3R5cGUudXBkYXRlU2NvcmUgPSBmdW5jdGlvbiAoc2NvcmUpIHsKICB0aGlzLmNsZWFyQ29udGFpbmVyKHRoaXMuc2NvcmVDb250YWluZXIpOwoKICB2YXIgZGlmZmVyZW5jZSA9IHNjb3JlIC0gdGhpcy5zY29yZTsKICB0aGlzLnNjb3JlID0gc2NvcmU7CgogIHRoaXMuc2NvcmVDb250YWluZXIudGV4dENvbnRlbnQgPSB0aGlzLnNjb3JlOwoKICBpZiAoZGlmZmVyZW5jZSA+IDApIHsKICAgIHZhciBhZGRpdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgYWRkaXRpb24uY2xhc3NMaXN0LmFkZCgic2NvcmUtYWRkaXRpb24iKTsKICAgIGFkZGl0aW9uLnRleHRDb250ZW50ID0gIisiICsgZGlmZmVyZW5jZTsKCiAgICB0aGlzLnNjb3JlQ29udGFpbmVyLmFwcGVuZENoaWxkKGFkZGl0aW9uKTsKICB9Cn07CgpIVE1MQWN0dWF0b3IucHJvdG90eXBlLnVwZGF0ZUJlc3RTY29yZSA9IGZ1bmN0aW9uIChiZXN0U2NvcmUpIHsKICB0aGlzLmJlc3RDb250YWluZXIudGV4dENvbnRlbnQgPSBiZXN0U2NvcmU7Cn07CgpIVE1MQWN0dWF0b3IucHJvdG90eXBlLm1lc3NhZ2UgPSBmdW5jdGlvbiAod29uKSB7CiAgdmFyIHR5cGUgICAgPSB3b24gPyAiZ2FtZS13b24iIDogImdhbWUtb3ZlciI7CiAgdmFyIG1lc3NhZ2UgPSB3b24gPyAiWW91IHdpbiEiIDogIkdhbWUgb3ZlciEiOwoKICBpZiAodHlwZW9mIGdhICE9PSAidW5kZWZpbmVkIikgewogICAgZ2EoInNlbmQiLCAiZXZlbnQiLCAiZ2FtZSIsICJlbmQiLCB0eXBlLCB0aGlzLnNjb3JlKTsKICB9CgogIHRoaXMubWVzc2FnZUNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKHR5cGUpOwogIHRoaXMubWVzc2FnZUNvbnRhaW5lci5nZXRFbGVtZW50c0J5VGFnTmFtZSgicCIpWzBdLnRleHRDb250ZW50ID0gbWVzc2FnZTsKCiAgdGhpcy5jbGVhckNvbnRhaW5lcih0aGlzLnNoYXJpbmdDb250YWluZXIpOwogIHR3dHRyLndpZGdldHMubG9hZCgpOwp9OwoKSFRNTEFjdHVhdG9yLnByb3RvdHlwZS5jbGVhck1lc3NhZ2UgPSBmdW5jdGlvbiAoKSB7CiAgLy8gSUUgb25seSB0YWtlcyBvbmUgdmFsdWUgdG8gcmVtb3ZlIGF0IGEgdGltZS4KICB0aGlzLm1lc3NhZ2VDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgiZ2FtZS13b24iKTsKICB0aGlzLm1lc3NhZ2VDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgiZ2FtZS1vdmVyIik7Cn07CgpIVE1MQWN0dWF0b3IucHJvdG90eXBlLnNjb3JlVHdlZXRCdXR0b24gPSBmdW5jdGlvbiAoKSB7CiAgdmFyIHR3ZWV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwogIHR3ZWV0LmNsYXNzTGlzdC5hZGQoInR3aXR0ZXItc2hhcmUtYnV0dG9uIik7CiAgdHdlZXQuc2V0QXR0cmlidXRlKCJocmVmIiwgImh0dHBzOi8vdHdpdHRlci5jb20vc2hhcmUiKTsKICB0d2VldC5zZXRBdHRyaWJ1dGUoImRhdGEtdmlhIiwgImdhYnJpZWxlY2lydWxsaSIpOwogIHR3ZWV0LnNldEF0dHJpYnV0ZSgiZGF0YS11cmwiLCAiaHR0cDovL2dpdC5pby8yMDQ4Iik7CiAgdHdlZXQuc2V0QXR0cmlidXRlKCJkYXRhLWNvdW50dXJsIiwgImh0dHA6Ly9nYWJyaWVsZWNpcnVsbGkuZ2l0aHViLmlvLzIwNDgvIik7CiAgdHdlZXQudGV4dENvbnRlbnQgPSAiVHdlZXQiOwoKICB2YXIgdGV4dCA9ICJJIHNjb3JlZCAiICsgdGhpcy5zY29yZSArICIgcG9pbnRzIGF0IDIwNDgsIGEgZ2FtZSB3aGVyZSB5b3UgIiArCiAgICAgICAgICAgICAiam9pbiBudW1iZXJzIHRvIHNjb3JlIGhpZ2ghICMyMDQ4Z2FtZSI7CiAgdHdlZXQuc2V0QXR0cmlidXRlKCJkYXRhLXRleHQiLCB0ZXh0KTsKCiAgcmV0dXJuIHR3ZWV0Owp9Owo8L3NjcmlwdD4KICA8c2NyaXB0PgpmdW5jdGlvbiBHcmlkKHNpemUsIHByZXZpb3VzU3RhdGUpIHsKICB0aGlzLnNpemUgPSBzaXplOwogIHRoaXMuY2VsbHMgPSBwcmV2aW91c1N0YXRlID8gdGhpcy5mcm9tU3RhdGUocHJldmlvdXNTdGF0ZSkgOiB0aGlzLmVtcHR5KCk7Cn0KCi8vIEJ1aWxkIGEgZ3JpZCBvZiB0aGUgc3BlY2lmaWVkIHNpemUKR3JpZC5wcm90b3R5cGUuZW1wdHkgPSBmdW5jdGlvbiAoKSB7CiAgdmFyIGNlbGxzID0gW107CgogIGZvciAodmFyIHggPSAwOyB4IDwgdGhpcy5zaXplOyB4KyspIHsKICAgIHZhciByb3cgPSBjZWxsc1t4XSA9IFtdOwoKICAgIGZvciAodmFyIHkgPSAwOyB5IDwgdGhpcy5zaXplOyB5KyspIHsKICAgICAgcm93LnB1c2gobnVsbCk7CiAgICB9CiAgfQoKICByZXR1cm4gY2VsbHM7Cn07CgpHcmlkLnByb3RvdHlwZS5mcm9tU3RhdGUgPSBmdW5jdGlvbiAoc3RhdGUpIHsKICB2YXIgY2VsbHMgPSBbXTsKCiAgZm9yICh2YXIgeCA9IDA7IHggPCB0aGlzLnNpemU7IHgrKykgewogICAgdmFyIHJvdyA9IGNlbGxzW3hdID0gW107CgogICAgZm9yICh2YXIgeSA9IDA7IHkgPCB0aGlzLnNpemU7IHkrKykgewogICAgICB2YXIgdGlsZSA9IHN0YXRlW3hdW3ldOwogICAgICByb3cucHVzaCh0aWxlID8gbmV3IFRpbGUodGlsZS5wb3NpdGlvbiwgdGlsZS52YWx1ZSkgOiBudWxsKTsKICAgIH0KICB9CgogIHJldHVybiBjZWxsczsKfTsKCi8vIEZpbmQgdGhlIGZpcnN0IGF2YWlsYWJsZSByYW5kb20gcG9zaXRpb24KR3JpZC5wcm90b3R5cGUucmFuZG9tQXZhaWxhYmxlQ2VsbCA9IGZ1bmN0aW9uICgpIHsKICB2YXIgY2VsbHMgPSB0aGlzLmF2YWlsYWJsZUNlbGxzKCk7CgogIGlmIChjZWxscy5sZW5ndGgpIHsKICAgIHJldHVybiBjZWxsc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjZWxscy5sZW5ndGgpXTsKICB9Cn07CgpHcmlkLnByb3RvdHlwZS5hdmFpbGFibGVDZWxscyA9IGZ1bmN0aW9uICgpIHsKICB2YXIgY2VsbHMgPSBbXTsKCiAgdGhpcy5lYWNoQ2VsbChmdW5jdGlvbiAoeCwgeSwgdGlsZSkgewogICAgaWYgKCF0aWxlKSB7CiAgICAgIGNlbGxzLnB1c2goeyB4OiB4LCB5OiB5IH0pOwogICAgfQogIH0pOwoKICByZXR1cm4gY2VsbHM7Cn07CgovLyBDYWxsIGNhbGxiYWNrIGZvciBldmVyeSBjZWxsCkdyaWQucHJvdG90eXBlLmVhY2hDZWxsID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgZm9yICh2YXIgeCA9IDA7IHggPCB0aGlzLnNpemU7IHgrKykgewogICAgZm9yICh2YXIgeSA9IDA7IHkgPCB0aGlzLnNpemU7IHkrKykgewogICAgICBjYWxsYmFjayh4LCB5LCB0aGlzLmNlbGxzW3hdW3ldKTsKICAgIH0KICB9Cn07CgovLyBDaGVjayBpZiB0aGVyZSBhcmUgYW55IGNlbGxzIGF2YWlsYWJsZQpHcmlkLnByb3RvdHlwZS5jZWxsc0F2YWlsYWJsZSA9IGZ1bmN0aW9uICgpIHsKICByZXR1cm4gISF0aGlzLmF2YWlsYWJsZUNlbGxzKCkubGVuZ3RoOwp9OwoKLy8gQ2hlY2sgaWYgdGhlIHNwZWNpZmllZCBjZWxsIGlzIHRha2VuCkdyaWQucHJvdG90eXBlLmNlbGxBdmFpbGFibGUgPSBmdW5jdGlvbiAoY2VsbCkgewogIHJldHVybiAhdGhpcy5jZWxsT2NjdXBpZWQoY2VsbCk7Cn07CgpHcmlkLnByb3RvdHlwZS5jZWxsT2NjdXBpZWQgPSBmdW5jdGlvbiAoY2VsbCkgewogIHJldHVybiAhIXRoaXMuY2VsbENvbnRlbnQoY2VsbCk7Cn07CgpHcmlkLnByb3RvdHlwZS5jZWxsQ29udGVudCA9IGZ1bmN0aW9uIChjZWxsKSB7CiAgaWYgKHRoaXMud2l0aGluQm91bmRzKGNlbGwpKSB7CiAgICByZXR1cm4gdGhpcy5jZWxsc1tjZWxsLnhdW2NlbGwueV07CiAgfSBlbHNlIHsKICAgIHJldHVybiBudWxsOwogIH0KfTsKCi8vIEluc2VydHMgYSB0aWxlIGF0IGl0cyBwb3NpdGlvbgpHcmlkLnByb3RvdHlwZS5pbnNlcnRUaWxlID0gZnVuY3Rpb24gKHRpbGUpIHsKICB0aGlzLmNlbGxzW3RpbGUueF1bdGlsZS55XSA9IHRpbGU7Cn07CgpHcmlkLnByb3RvdHlwZS5yZW1vdmVUaWxlID0gZnVuY3Rpb24gKHRpbGUpIHsKICB0aGlzLmNlbGxzW3RpbGUueF1bdGlsZS55XSA9IG51bGw7Cn07CgpHcmlkLnByb3RvdHlwZS53aXRoaW5Cb3VuZHMgPSBmdW5jdGlvbiAocG9zaXRpb24pIHsKICByZXR1cm4gcG9zaXRpb24ueCA+PSAwICYmIHBvc2l0aW9uLnggPCB0aGlzLnNpemUgJiYKICAgICAgICAgcG9zaXRpb24ueSA+PSAwICYmIHBvc2l0aW9uLnkgPCB0aGlzLnNpemU7Cn07CgpHcmlkLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7CiAgdmFyIGNlbGxTdGF0ZSA9IFtdOwoKICBmb3IgKHZhciB4ID0gMDsgeCA8IHRoaXMuc2l6ZTsgeCsrKSB7CiAgICB2YXIgcm93ID0gY2VsbFN0YXRlW3hdID0gW107CgogICAgZm9yICh2YXIgeSA9IDA7IHkgPCB0aGlzLnNpemU7IHkrKykgewogICAgICByb3cucHVzaCh0aGlzLmNlbGxzW3hdW3ldID8gdGhpcy5jZWxsc1t4XVt5XS5zZXJpYWxpemUoKSA6IG51bGwpOwogICAgfQogIH0KCiAgcmV0dXJuIHsKICAgIHNpemU6IHRoaXMuc2l6ZSwKICAgIGNlbGxzOiBjZWxsU3RhdGUKICB9Owp9Owo8L3NjcmlwdD4KICA8c2NyaXB0PgpmdW5jdGlvbiBUaWxlKHBvc2l0aW9uLCB2YWx1ZSkgewogIHRoaXMueCAgICAgICAgICAgICAgICA9IHBvc2l0aW9uLng7CiAgdGhpcy55ICAgICAgICAgICAgICAgID0gcG9zaXRpb24ueTsKICB0aGlzLnZhbHVlICAgICAgICAgICAgPSB2YWx1ZSB8fCAyOwoKICB0aGlzLnByZXZpb3VzUG9zaXRpb24gPSBudWxsOwogIHRoaXMubWVyZ2VkRnJvbSAgICAgICA9IG51bGw7IC8vIFRyYWNrcyB0aWxlcyB0aGF0IG1lcmdlZCB0b2dldGhlcgp9CgpUaWxlLnByb3RvdHlwZS5zYXZlUG9zaXRpb24gPSBmdW5jdGlvbiAoKSB7CiAgdGhpcy5wcmV2aW91c1Bvc2l0aW9uID0geyB4OiB0aGlzLngsIHk6IHRoaXMueSB9Owp9OwoKVGlsZS5wcm90b3R5cGUudXBkYXRlUG9zaXRpb24gPSBmdW5jdGlvbiAocG9zaXRpb24pIHsKICB0aGlzLnggPSBwb3NpdGlvbi54OwogIHRoaXMueSA9IHBvc2l0aW9uLnk7Cn07CgpUaWxlLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAoKSB7CiAgcmV0dXJuIHsKICAgIHBvc2l0aW9uOiB7CiAgICAgIHg6IHRoaXMueCwKICAgICAgeTogdGhpcy55CiAgICB9LAogICAgdmFsdWU6IHRoaXMudmFsdWUKICB9Owp9Owo8L3NjcmlwdD4KICA8c2NyaXB0Pgp3aW5kb3cuZmFrZVN0b3JhZ2UgPSB7CiAgX2RhdGE6IHt9LAoKICBzZXRJdGVtOiBmdW5jdGlvbiAoaWQsIHZhbCkgewogICAgcmV0dXJuIHRoaXMuX2RhdGFbaWRdID0gU3RyaW5nKHZhbCk7CiAgfSwKCiAgZ2V0SXRlbTogZnVuY3Rpb24gKGlkKSB7CiAgICByZXR1cm4gdGhpcy5fZGF0YS5oYXNPd25Qcm9wZXJ0eShpZCkgPyB0aGlzLl9kYXRhW2lkXSA6IHVuZGVmaW5lZDsKICB9LAoKICByZW1vdmVJdGVtOiBmdW5jdGlvbiAoaWQpIHsKICAgIHJldHVybiBkZWxldGUgdGhpcy5fZGF0YVtpZF07CiAgfSwKCiAgY2xlYXI6IGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiB0aGlzLl9kYXRhID0ge307CiAgfQp9OwoKZnVuY3Rpb24gTG9jYWxTdG9yYWdlTWFuYWdlcigpIHsKICB0aGlzLmJlc3RTY29yZUtleSAgICAgPSAiYmVzdFNjb3JlIjsKICB0aGlzLmdhbWVTdGF0ZUtleSAgICAgPSAiZ2FtZVN0YXRlIjsKICB0aGlzLm5vdGljZUNsb3NlZEtleSAgPSAibm90aWNlQ2xvc2VkIjsKCiAgdmFyIHN1cHBvcnRlZCA9IHRoaXMubG9jYWxTdG9yYWdlU3VwcG9ydGVkKCk7CiAgdGhpcy5zdG9yYWdlID0gc3VwcG9ydGVkID8gd2luZG93LmxvY2FsU3RvcmFnZSA6IHdpbmRvdy5mYWtlU3RvcmFnZTsKfQoKTG9jYWxTdG9yYWdlTWFuYWdlci5wcm90b3R5cGUubG9jYWxTdG9yYWdlU3VwcG9ydGVkID0gZnVuY3Rpb24gKCkgewogIHZhciB0ZXN0S2V5ID0gInRlc3QiOwogIHZhciBzdG9yYWdlID0gd2luZG93LmxvY2FsU3RvcmFnZTsKCiAgdHJ5IHsKICAgIHN0b3JhZ2Uuc2V0SXRlbSh0ZXN0S2V5LCAiMSIpOwogICAgc3RvcmFnZS5yZW1vdmVJdGVtKHRlc3RLZXkpOwogICAgcmV0dXJuIHRydWU7CiAgfSBjYXRjaCAoZXJyb3IpIHsKICAgIHJldHVybiBmYWxzZTsKICB9Cn07CgovLyBCZXN0IHNjb3JlIGdldHRlcnMvc2V0dGVycwpMb2NhbFN0b3JhZ2VNYW5hZ2VyLnByb3RvdHlwZS5nZXRCZXN0U2NvcmUgPSBmdW5jdGlvbiAoKSB7CiAgcmV0dXJuIHRoaXMuc3RvcmFnZS5nZXRJdGVtKHRoaXMuYmVzdFNjb3JlS2V5KSB8fCAwOwp9OwoKTG9jYWxTdG9yYWdlTWFuYWdlci5wcm90b3R5cGUuc2V0QmVzdFNjb3JlID0gZnVuY3Rpb24gKHNjb3JlKSB7CiAgdGhpcy5zdG9yYWdlLnNldEl0ZW0odGhpcy5iZXN0U2NvcmVLZXksIHNjb3JlKTsKfTsKCi8vIEdhbWUgc3RhdGUgZ2V0dGVycy9zZXR0ZXJzIGFuZCBjbGVhcmluZwpMb2NhbFN0b3JhZ2VNYW5hZ2VyLnByb3RvdHlwZS5nZXRHYW1lU3RhdGUgPSBmdW5jdGlvbiAoKSB7CiAgdmFyIHN0YXRlSlNPTiA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKHRoaXMuZ2FtZVN0YXRlS2V5KTsKICByZXR1cm4gc3RhdGVKU09OID8gSlNPTi5wYXJzZShzdGF0ZUpTT04pIDogbnVsbDsKfTsKCkxvY2FsU3RvcmFnZU1hbmFnZXIucHJvdG90eXBlLnNldEdhbWVTdGF0ZSA9IGZ1bmN0aW9uIChnYW1lU3RhdGUpIHsKICB0aGlzLnN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmdhbWVTdGF0ZUtleSwgSlNPTi5zdHJpbmdpZnkoZ2FtZVN0YXRlKSk7Cn07CgpMb2NhbFN0b3JhZ2VNYW5hZ2VyLnByb3RvdHlwZS5jbGVhckdhbWVTdGF0ZSA9IGZ1bmN0aW9uICgpIHsKICB0aGlzLnN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmdhbWVTdGF0ZUtleSk7Cn07CgpMb2NhbFN0b3JhZ2VNYW5hZ2VyLnByb3RvdHlwZS5zZXROb3RpY2VDbG9zZWQgPSBmdW5jdGlvbiAobm90aWNlQ2xvc2VkKSB7CiAgdGhpcy5zdG9yYWdlLnNldEl0ZW0odGhpcy5ub3RpY2VDbG9zZWRLZXksIEpTT04uc3RyaW5naWZ5KG5vdGljZUNsb3NlZCkpOwp9OwoKTG9jYWxTdG9yYWdlTWFuYWdlci5wcm90b3R5cGUuZ2V0Tm90aWNlQ2xvc2VkID0gZnVuY3Rpb24gKCkgewogIHJldHVybiBKU09OLnBhcnNlKHRoaXMuc3RvcmFnZS5nZXRJdGVtKHRoaXMubm90aWNlQ2xvc2VkS2V5KSB8fCAiZmFsc2UiKTsKfTsKPC9zY3JpcHQ+CiAgPHNjcmlwdD4KZnVuY3Rpb24gR2FtZU1hbmFnZXIoc2l6ZSwgSW5wdXRNYW5hZ2VyLCBBY3R1YXRvciwgU3RvcmFnZU1hbmFnZXIpIHsKICB0aGlzLnNpemUgICAgICAgICAgID0gc2l6ZTsgLy8gU2l6ZSBvZiB0aGUgZ3JpZAogIHRoaXMuaW5wdXRNYW5hZ2VyICAgPSBuZXcgSW5wdXRNYW5hZ2VyOwogIHRoaXMuc3RvcmFnZU1hbmFnZXIgPSBuZXcgU3RvcmFnZU1hbmFnZXI7CiAgdGhpcy5hY3R1YXRvciAgICAgICA9IG5ldyBBY3R1YXRvcjsKCiAgdGhpcy5zdGFydFRpbGVzICAgICA9IDI7CgogIHRoaXMuaW5wdXRNYW5hZ2VyLm9uKCJtb3ZlIiwgdGhpcy5tb3ZlLmJpbmQodGhpcykpOwogIHRoaXMuaW5wdXRNYW5hZ2VyLm9uKCJyZXN0YXJ0IiwgdGhpcy5yZXN0YXJ0LmJpbmQodGhpcykpOwogIHRoaXMuaW5wdXRNYW5hZ2VyLm9uKCJrZWVwUGxheWluZyIsIHRoaXMua2VlcFBsYXlpbmcuYmluZCh0aGlzKSk7CgogIHRoaXMuc2V0dXAoKTsKfQoKLy8gUmVzdGFydCB0aGUgZ2FtZQpHYW1lTWFuYWdlci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICgpIHsKICB0aGlzLnN0b3JhZ2VNYW5hZ2VyLmNsZWFyR2FtZVN0YXRlKCk7CiAgdGhpcy5hY3R1YXRvci5jb250aW51ZUdhbWUoKTsgLy8gQ2xlYXIgdGhlIGdhbWUgd29uL2xvc3QgbWVzc2FnZQogIHRoaXMuc2V0dXAoKTsKfTsKCi8vIEtlZXAgcGxheWluZyBhZnRlciB3aW5uaW5nIChhbGxvd3MgZ29pbmcgb3ZlciAyMDQ4KQpHYW1lTWFuYWdlci5wcm90b3R5cGUua2VlcFBsYXlpbmcgPSBmdW5jdGlvbiAoKSB7CiAgdGhpcy5rZWVwUGxheWluZyA9IHRydWU7CiAgdGhpcy5hY3R1YXRvci5jb250aW51ZUdhbWUoKTsgLy8gQ2xlYXIgdGhlIGdhbWUgd29uL2xvc3QgbWVzc2FnZQp9OwoKLy8gUmV0dXJuIHRydWUgaWYgdGhlIGdhbWUgaXMgbG9zdCwgb3IgaGFzIHdvbiBhbmQgdGhlIHVzZXIgaGFzbid0IGtlcHQgcGxheWluZwpHYW1lTWFuYWdlci5wcm90b3R5cGUuaXNHYW1lVGVybWluYXRlZCA9IGZ1bmN0aW9uICgpIHsKICBpZiAodGhpcy5vdmVyIHx8ICh0aGlzLndvbiAmJiAhdGhpcy5rZWVwUGxheWluZykpIHsKICAgIHJldHVybiB0cnVlOwogIH0gZWxzZSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9OwoKLy8gU2V0IHVwIHRoZSBnYW1lCkdhbWVNYW5hZ2VyLnByb3RvdHlwZS5zZXR1cCA9IGZ1bmN0aW9uICgpIHsKICB2YXIgcHJldmlvdXNTdGF0ZSA9IHRoaXMuc3RvcmFnZU1hbmFnZXIuZ2V0R2FtZVN0YXRlKCk7CgogIC8vIFJlbG9hZCB0aGUgZ2FtZSBmcm9tIGEgcHJldmlvdXMgZ2FtZSBpZiBwcmVzZW50CiAgaWYgKHByZXZpb3VzU3RhdGUpIHsKICAgIHRoaXMuZ3JpZCAgICAgICAgPSBuZXcgR3JpZChwcmV2aW91c1N0YXRlLmdyaWQuc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1N0YXRlLmdyaWQuY2VsbHMpOyAvLyBSZWxvYWQgZ3JpZAogICAgdGhpcy5zY29yZSAgICAgICA9IHByZXZpb3VzU3RhdGUuc2NvcmU7CiAgICB0aGlzLm92ZXIgICAgICAgID0gcHJldmlvdXNTdGF0ZS5vdmVyOwogICAgdGhpcy53b24gICAgICAgICA9IHByZXZpb3VzU3RhdGUud29uOwogICAgdGhpcy5rZWVwUGxheWluZyA9IHByZXZpb3VzU3RhdGUua2VlcFBsYXlpbmc7CiAgfSBlbHNlIHsKICAgIHRoaXMuZ3JpZCAgICAgICAgPSBuZXcgR3JpZCh0aGlzLnNpemUpOwogICAgdGhpcy5zY29yZSAgICAgICA9IDA7CiAgICB0aGlzLm92ZXIgICAgICAgID0gZmFsc2U7CiAgICB0aGlzLndvbiAgICAgICAgID0gZmFsc2U7CiAgICB0aGlzLmtlZXBQbGF5aW5nID0gZmFsc2U7CgogICAgLy8gQWRkIHRoZSBpbml0aWFsIHRpbGVzCiAgICB0aGlzLmFkZFN0YXJ0VGlsZXMoKTsKICB9CgogIC8vIFVwZGF0ZSB0aGUgYWN0dWF0b3IKICB0aGlzLmFjdHVhdGUoKTsKfTsKCi8vIFNldCB1cCB0aGUgaW5pdGlhbCB0aWxlcyB0byBzdGFydCB0aGUgZ2FtZSB3aXRoCkdhbWVNYW5hZ2VyLnByb3RvdHlwZS5hZGRTdGFydFRpbGVzID0gZnVuY3Rpb24gKCkgewogIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zdGFydFRpbGVzOyBpKyspIHsKICAgIHRoaXMuYWRkUmFuZG9tVGlsZSgpOwogIH0KfTsKCi8vIEFkZHMgYSB0aWxlIGluIGEgcmFuZG9tIHBvc2l0aW9uCkdhbWVNYW5hZ2VyLnByb3RvdHlwZS5hZGRSYW5kb21UaWxlID0gZnVuY3Rpb24gKCkgewogIGlmICh0aGlzLmdyaWQuY2VsbHNBdmFpbGFibGUoKSkgewogICAgdmFyIHZhbHVlID0gTWF0aC5yYW5kb20oKSA8IDAuOSA/IDIgOiA0OwogICAgdmFyIHRpbGUgPSBuZXcgVGlsZSh0aGlzLmdyaWQucmFuZG9tQXZhaWxhYmxlQ2VsbCgpLCB2YWx1ZSk7CgogICAgdGhpcy5ncmlkLmluc2VydFRpbGUodGlsZSk7CiAgfQp9OwoKLy8gU2VuZHMgdGhlIHVwZGF0ZWQgZ3JpZCB0byB0aGUgYWN0dWF0b3IKR2FtZU1hbmFnZXIucHJvdG90eXBlLmFjdHVhdGUgPSBmdW5jdGlvbiAoKSB7CiAgaWYgKHRoaXMuc3RvcmFnZU1hbmFnZXIuZ2V0QmVzdFNjb3JlKCkgPCB0aGlzLnNjb3JlKSB7CiAgICB0aGlzLnN0b3JhZ2VNYW5hZ2VyLnNldEJlc3RTY29yZSh0aGlzLnNjb3JlKTsKICB9CgogIC8vIENsZWFyIHRoZSBzdGF0ZSB3aGVuIHRoZSBnYW1lIGlzIG92ZXIgKGdhbWUgb3ZlciBvbmx5LCBub3Qgd2luKQogIGlmICh0aGlzLm92ZXIpIHsKICAgIHRoaXMuc3RvcmFnZU1hbmFnZXIuY2xlYXJHYW1lU3RhdGUoKTsKICB9IGVsc2UgewogICAgdGhpcy5zdG9yYWdlTWFuYWdlci5zZXRHYW1lU3RhdGUodGhpcy5zZXJpYWxpemUoKSk7CiAgfQoKICB0aGlzLmFjdHVhdG9yLmFjdHVhdGUodGhpcy5ncmlkLCB7CiAgICBzY29yZTogICAgICB0aGlzLnNjb3JlLAogICAgb3ZlcjogICAgICAgdGhpcy5vdmVyLAogICAgd29uOiAgICAgICAgdGhpcy53b24sCiAgICBiZXN0U2NvcmU6ICB0aGlzLnN0b3JhZ2VNYW5hZ2VyLmdldEJlc3RTY29yZSgpLAogICAgdGVybWluYXRlZDogdGhpcy5pc0dhbWVUZXJtaW5hdGVkKCkKICB9KTsKCn07CgovLyBSZXByZXNlbnQgdGhlIGN1cnJlbnQgZ2FtZSBhcyBhbiBvYmplY3QKR2FtZU1hbmFnZXIucHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uICgpIHsKICByZXR1cm4gewogICAgZ3JpZDogICAgICAgIHRoaXMuZ3JpZC5zZXJpYWxpemUoKSwKICAgIHNjb3JlOiAgICAgICB0aGlzLnNjb3JlLAogICAgb3ZlcjogICAgICAgIHRoaXMub3ZlciwKICAgIHdvbjogICAgICAgICB0aGlzLndvbiwKICAgIGtlZXBQbGF5aW5nOiB0aGlzLmtlZXBQbGF5aW5nCiAgfTsKfTsKCi8vIFNhdmUgYWxsIHRpbGUgcG9zaXRpb25zIGFuZCByZW1vdmUgbWVyZ2VyIGluZm8KR2FtZU1hbmFnZXIucHJvdG90eXBlLnByZXBhcmVUaWxlcyA9IGZ1bmN0aW9uICgpIHsKICB0aGlzLmdyaWQuZWFjaENlbGwoZnVuY3Rpb24gKHgsIHksIHRpbGUpIHsKICAgIGlmICh0aWxlKSB7CiAgICAgIHRpbGUubWVyZ2VkRnJvbSA9IG51bGw7CiAgICAgIHRpbGUuc2F2ZVBvc2l0aW9uKCk7CiAgICB9CiAgfSk7Cn07CgovLyBNb3ZlIGEgdGlsZSBhbmQgaXRzIHJlcHJlc2VudGF0aW9uCkdhbWVNYW5hZ2VyLnByb3RvdHlwZS5tb3ZlVGlsZSA9IGZ1bmN0aW9uICh0aWxlLCBjZWxsKSB7CiAgdGhpcy5ncmlkLmNlbGxzW3RpbGUueF1bdGlsZS55XSA9IG51bGw7CiAgdGhpcy5ncmlkLmNlbGxzW2NlbGwueF1bY2VsbC55XSA9IHRpbGU7CiAgdGlsZS51cGRhdGVQb3NpdGlvbihjZWxsKTsKfTsKCi8vIE1vdmUgdGlsZXMgb24gdGhlIGdyaWQgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3Rpb24KR2FtZU1hbmFnZXIucHJvdG90eXBlLm1vdmUgPSBmdW5jdGlvbiAoZGlyZWN0aW9uKSB7CiAgLy8gMDogdXAsIDE6IHJpZ2h0LCAyOiBkb3duLCAzOiBsZWZ0CiAgdmFyIHNlbGYgPSB0aGlzOwoKICBpZiAodGhpcy5pc0dhbWVUZXJtaW5hdGVkKCkpIHJldHVybjsgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlIGdhbWUncyBvdmVyCgogIHZhciBjZWxsLCB0aWxlOwoKICB2YXIgdmVjdG9yICAgICA9IHRoaXMuZ2V0VmVjdG9yKGRpcmVjdGlvbik7CiAgdmFyIHRyYXZlcnNhbHMgPSB0aGlzLmJ1aWxkVHJhdmVyc2Fscyh2ZWN0b3IpOwogIHZhciBtb3ZlZCAgICAgID0gZmFsc2U7CgogIC8vIFNhdmUgdGhlIGN1cnJlbnQgdGlsZSBwb3NpdGlvbnMgYW5kIHJlbW92ZSBtZXJnZXIgaW5mb3JtYXRpb24KICB0aGlzLnByZXBhcmVUaWxlcygpOwoKICAvLyBUcmF2ZXJzZSB0aGUgZ3JpZCBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uIGFuZCBtb3ZlIHRpbGVzCiAgdHJhdmVyc2Fscy54LmZvckVhY2goZnVuY3Rpb24gKHgpIHsKICAgIHRyYXZlcnNhbHMueS5mb3JFYWNoKGZ1bmN0aW9uICh5KSB7CiAgICAgIGNlbGwgPSB7IHg6IHgsIHk6IHkgfTsKICAgICAgdGlsZSA9IHNlbGYuZ3JpZC5jZWxsQ29udGVudChjZWxsKTsKCiAgICAgIGlmICh0aWxlKSB7CiAgICAgICAgdmFyIHBvc2l0aW9ucyA9IHNlbGYuZmluZEZhcnRoZXN0UG9zaXRpb24oY2VsbCwgdmVjdG9yKTsKICAgICAgICB2YXIgbmV4dCAgICAgID0gc2VsZi5ncmlkLmNlbGxDb250ZW50KHBvc2l0aW9ucy5uZXh0KTsKCiAgICAgICAgLy8gT25seSBvbmUgbWVyZ2VyIHBlciByb3cgdHJhdmVyc2FsPwogICAgICAgIGlmIChuZXh0ICYmIG5leHQudmFsdWUgPT09IHRpbGUudmFsdWUgJiYgIW5leHQubWVyZ2VkRnJvbSkgewogICAgICAgICAgdmFyIG1lcmdlZCA9IG5ldyBUaWxlKHBvc2l0aW9ucy5uZXh0LCB0aWxlLnZhbHVlICogMik7CiAgICAgICAgICBtZXJnZWQubWVyZ2VkRnJvbSA9IFt0aWxlLCBuZXh0XTsKCiAgICAgICAgICBzZWxmLmdyaWQuaW5zZXJ0VGlsZShtZXJnZWQpOwogICAgICAgICAgc2VsZi5ncmlkLnJlbW92ZVRpbGUodGlsZSk7CgogICAgICAgICAgLy8gQ29udmVyZ2UgdGhlIHR3byB0aWxlcycgcG9zaXRpb25zCiAgICAgICAgICB0aWxlLnVwZGF0ZVBvc2l0aW9uKHBvc2l0aW9ucy5uZXh0KTsKCiAgICAgICAgICAvLyBVcGRhdGUgdGhlIHNjb3JlCiAgICAgICAgICBzZWxmLnNjb3JlICs9IG1lcmdlZC52YWx1ZTsKCiAgICAgICAgICAvLyBUaGUgbWlnaHR5IDIwNDggdGlsZQogICAgICAgICAgaWYgKG1lcmdlZC52YWx1ZSA9PT0gMjA0OCkgc2VsZi53b24gPSB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzZWxmLm1vdmVUaWxlKHRpbGUsIHBvc2l0aW9ucy5mYXJ0aGVzdCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIXNlbGYucG9zaXRpb25zRXF1YWwoY2VsbCwgdGlsZSkpIHsKICAgICAgICAgIG1vdmVkID0gdHJ1ZTsgLy8gVGhlIHRpbGUgbW92ZWQgZnJvbSBpdHMgb3JpZ2luYWwgY2VsbCEKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogIH0pOwoKICBpZiAobW92ZWQpIHsKICAgIHRoaXMuYWRkUmFuZG9tVGlsZSgpOwoKICAgIGlmICghdGhpcy5tb3Zlc0F2YWlsYWJsZSgpKSB7CiAgICAgIHRoaXMub3ZlciA9IHRydWU7IC8vIEdhbWUgb3ZlciEKICAgIH0KCiAgICB0aGlzLmFjdHVhdGUoKTsKICB9Cn07CgovLyBHZXQgdGhlIHZlY3RvciByZXByZXNlbnRpbmcgdGhlIGNob3NlbiBkaXJlY3Rpb24KR2FtZU1hbmFnZXIucHJvdG90eXBlLmdldFZlY3RvciA9IGZ1bmN0aW9uIChkaXJlY3Rpb24pIHsKICAvLyBWZWN0b3JzIHJlcHJlc2VudGluZyB0aWxlIG1vdmVtZW50CiAgdmFyIG1hcCA9IHsKICAgIDA6IHsgeDogMCwgIHk6IC0xIH0sIC8vIFVwCiAgICAxOiB7IHg6IDEsICB5OiAwIH0sICAvLyBSaWdodAogICAgMjogeyB4OiAwLCAgeTogMSB9LCAgLy8gRG93bgogICAgMzogeyB4OiAtMSwgeTogMCB9ICAgLy8gTGVmdAogIH07CgogIHJldHVybiBtYXBbZGlyZWN0aW9uXTsKfTsKCi8vIEJ1aWxkIGEgbGlzdCBvZiBwb3NpdGlvbnMgdG8gdHJhdmVyc2UgaW4gdGhlIHJpZ2h0IG9yZGVyCkdhbWVNYW5hZ2VyLnByb3RvdHlwZS5idWlsZFRyYXZlcnNhbHMgPSBmdW5jdGlvbiAodmVjdG9yKSB7CiAgdmFyIHRyYXZlcnNhbHMgPSB7IHg6IFtdLCB5OiBbXSB9OwoKICBmb3IgKHZhciBwb3MgPSAwOyBwb3MgPCB0aGlzLnNpemU7IHBvcysrKSB7CiAgICB0cmF2ZXJzYWxzLngucHVzaChwb3MpOwogICAgdHJhdmVyc2Fscy55LnB1c2gocG9zKTsKICB9CgogIC8vIEFsd2F5cyB0cmF2ZXJzZSBmcm9tIHRoZSBmYXJ0aGVzdCBjZWxsIGluIHRoZSBjaG9zZW4gZGlyZWN0aW9uCiAgaWYgKHZlY3Rvci54ID09PSAxKSB0cmF2ZXJzYWxzLnggPSB0cmF2ZXJzYWxzLngucmV2ZXJzZSgpOwogIGlmICh2ZWN0b3IueSA9PT0gMSkgdHJhdmVyc2Fscy55ID0gdHJhdmVyc2Fscy55LnJldmVyc2UoKTsKCiAgcmV0dXJuIHRyYXZlcnNhbHM7Cn07CgpHYW1lTWFuYWdlci5wcm90b3R5cGUuZmluZEZhcnRoZXN0UG9zaXRpb24gPSBmdW5jdGlvbiAoY2VsbCwgdmVjdG9yKSB7CiAgdmFyIHByZXZpb3VzOwoKICAvLyBQcm9ncmVzcyB0b3dhcmRzIHRoZSB2ZWN0b3IgZGlyZWN0aW9uIHVudGlsIGFuIG9ic3RhY2xlIGlzIGZvdW5kCiAgZG8gewogICAgcHJldmlvdXMgPSBjZWxsOwogICAgY2VsbCAgICAgPSB7IHg6IHByZXZpb3VzLnggKyB2ZWN0b3IueCwgeTogcHJldmlvdXMueSArIHZlY3Rvci55IH07CiAgfSB3aGlsZSAodGhpcy5ncmlkLndpdGhpbkJvdW5kcyhjZWxsKSAmJgogICAgICAgICAgIHRoaXMuZ3JpZC5jZWxsQXZhaWxhYmxlKGNlbGwpKTsKCiAgcmV0dXJuIHsKICAgIGZhcnRoZXN0OiBwcmV2aW91cywKICAgIG5leHQ6IGNlbGwgLy8gVXNlZCB0byBjaGVjayBpZiBhIG1lcmdlIGlzIHJlcXVpcmVkCiAgfTsKfTsKCkdhbWVNYW5hZ2VyLnByb3RvdHlwZS5tb3Zlc0F2YWlsYWJsZSA9IGZ1bmN0aW9uICgpIHsKICByZXR1cm4gdGhpcy5ncmlkLmNlbGxzQXZhaWxhYmxlKCkgfHwgdGhpcy50aWxlTWF0Y2hlc0F2YWlsYWJsZSgpOwp9OwoKLy8gQ2hlY2sgZm9yIGF2YWlsYWJsZSBtYXRjaGVzIGJldHdlZW4gdGlsZXMgKG1vcmUgZXhwZW5zaXZlIGNoZWNrKQpHYW1lTWFuYWdlci5wcm90b3R5cGUudGlsZU1hdGNoZXNBdmFpbGFibGUgPSBmdW5jdGlvbiAoKSB7CiAgdmFyIHNlbGYgPSB0aGlzOwoKICB2YXIgdGlsZTsKCiAgZm9yICh2YXIgeCA9IDA7IHggPCB0aGlzLnNpemU7IHgrKykgewogICAgZm9yICh2YXIgeSA9IDA7IHkgPCB0aGlzLnNpemU7IHkrKykgewogICAgICB0aWxlID0gdGhpcy5ncmlkLmNlbGxDb250ZW50KHsgeDogeCwgeTogeSB9KTsKCiAgICAgIGlmICh0aWxlKSB7CiAgICAgICAgZm9yICh2YXIgZGlyZWN0aW9uID0gMDsgZGlyZWN0aW9uIDwgNDsgZGlyZWN0aW9uKyspIHsKICAgICAgICAgIHZhciB2ZWN0b3IgPSBzZWxmLmdldFZlY3RvcihkaXJlY3Rpb24pOwogICAgICAgICAgdmFyIGNlbGwgICA9IHsgeDogeCArIHZlY3Rvci54LCB5OiB5ICsgdmVjdG9yLnkgfTsKCiAgICAgICAgICB2YXIgb3RoZXIgID0gc2VsZi5ncmlkLmNlbGxDb250ZW50KGNlbGwpOwoKICAgICAgICAgIGlmIChvdGhlciAmJiBvdGhlci52YWx1ZSA9PT0gdGlsZS52YWx1ZSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gVGhlc2UgdHdvIHRpbGVzIGNhbiBiZSBtZXJnZWQKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIHJldHVybiBmYWxzZTsKfTsKCkdhbWVNYW5hZ2VyLnByb3RvdHlwZS5wb3NpdGlvbnNFcXVhbCA9IGZ1bmN0aW9uIChmaXJzdCwgc2Vjb25kKSB7CiAgcmV0dXJuIGZpcnN0LnggPT09IHNlY29uZC54ICYmIGZpcnN0LnkgPT09IHNlY29uZC55Owp9Owo8L3NjcmlwdD4KICA8c2NyaXB0PgovLyBXYWl0IHRpbGwgdGhlIGJyb3dzZXIgaXMgcmVhZHkgdG8gcmVuZGVyIHRoZSBnYW1lIChhdm9pZHMgZ2xpdGNoZXMpCndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkgewogIG5ldyBHYW1lTWFuYWdlcig0LCBLZXlib2FyZElucHV0TWFuYWdlciwgSFRNTEFjdHVhdG9yLCBMb2NhbFN0b3JhZ2VNYW5hZ2VyKTsKCiAgLy8gVE9ETzogVGhpcyBjb2RlIGlzIGluIG5lZWQgb2YgYSByZWZhY3RvciAoYWxvbmcgd2l0aCB0aGUgcmVzdCkKICB2YXIgc3RvcmFnZSAgICAgPSBuZXcgTG9jYWxTdG9yYWdlTWFuYWdlcjsKICB2YXIgbm90aWNlQ2xvc2UgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIubm90aWNlLWNsb3NlLWJ1dHRvbiIpOwogIHZhciBub3RpY2UgICAgICA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5hcHAtbm90aWNlIik7CiAgaWYgKHN0b3JhZ2UuZ2V0Tm90aWNlQ2xvc2VkKCkpIHsKICAgIG5vdGljZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vdGljZSk7CiAgfSBlbHNlIHsKICAgIG5vdGljZUNsb3NlLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rpb24gKCkgewogICAgICBub3RpY2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub3RpY2UpOwogICAgICBzdG9yYWdlLnNldE5vdGljZUNsb3NlZCh0cnVlKTsKICAgICAgZ2EoInNlbmQiLCAiZXZlbnQiLCAibm90aWNlIiwgImNsb3NlZCIpOwogICAgfSk7CiAgfQp9KTsKPC9zY3JpcHQ+Cgo8L2JvZHk+PC9odG1sPg== |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment