From 2fec9bae573b35bb620450a253d0e2b20d9a6ce3 Mon Sep 17 00:00:00 2001 From: git_admin Date: Mon, 27 Apr 2026 06:58:40 +0000 Subject: [PATCH] Tower: upload cetmix_tower_yaml 16.0.3.1.0 (via marketplace) --- addons/cetmix_tower_yaml/tests/test_yaml_import_wizard.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 addons/cetmix_tower_yaml/tests/test_yaml_import_wizard.py diff --git a/addons/cetmix_tower_yaml/tests/test_yaml_import_wizard.py b/addons/cetmix_tower_yaml/tests/test_yaml_import_wizard.py new file mode 100644 index 0000000..ffd180b --- /dev/null +++ b/addons/cetmix_tower_yaml/tests/test_yaml_import_wizard.py @@ -0,0 +1 @@ +IyBDb3B5cmlnaHQgKEMpIDIwMjQgQ2V0bWl4IE/DnAojIExpY2Vuc2UgQUdQTC0zLjAgb3IgbGF0ZXIgKGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsKS4KCgppbXBvcnQgYmFzZTY0CgppbXBvcnQgeWFtbAoKZnJvbSBvZG9vIGltcG9ydCBfCmZyb20gb2Rvby5leGNlcHRpb25zIGltcG9ydCBWYWxpZGF0aW9uRXJyb3IKZnJvbSBvZG9vLnRlc3RzIGltcG9ydCBUcmFuc2FjdGlvbkNhc2UKZnJvbSBvZG9vLnRvb2xzIGltcG9ydCBtdXRlX2xvZ2dlcgoKCmNsYXNzIFRlc3RUb3dlcllhbWxJbXBvcnRXaXpVcGxvYWQoVHJhbnNhY3Rpb25DYXNlKToKICAgICIiIlRlc3QgVG93ZXIgWUFNTCBJbXBvcnQgV2l6YXJkIFVwbG9hZCIiIgoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKICAgICAgICBzdXBlcigpLnNldFVwQ2xhc3MoKQoKICAgICAgICAjIFZhcmlhYmxlcwogICAgICAgIGNscy5WYXJpYWJsZSA9IGNscy5lbnZbImN4LnRvd2VyLnZhcmlhYmxlIl0KICAgICAgICBjbHMudmFyaWFibGVfeWFtbF90ZXN0ID0gY2xzLlZhcmlhYmxlLmNyZWF0ZSgKICAgICAgICAgICAgeyJuYW1lIjogIllBTUwgVGVzdCIsICJyZWZlcmVuY2UiOiAieWFtbF90ZXN0In0KICAgICAgICApCiAgICAgICAgY2xzLnZhcmlhYmxlX3lhbWxfdXJsID0gY2xzLlZhcmlhYmxlLmNyZWF0ZSgKICAgICAgICAgICAgeyJuYW1lIjogIllBTUwgVVJMIiwgInJlZmVyZW5jZSI6ICJ5YW1sX3VybCJ9CiAgICAgICAgKQoKICAgICAgICAjIFRhZ3MKICAgICAgICBjbHMuVGFnID0gY2xzLmVudlsiY3gudG93ZXIudGFnIl0KICAgICAgICBjbHMudGFnX3lhbWxfdGVzdCA9IGNscy5UYWcuY3JlYXRlKAogICAgICAgICAgICB7Im5hbWUiOiAiWUFNTCBUZXN0IiwgInJlZmVyZW5jZSI6ICJ5YW1sX3Rlc3QifQogICAgICAgICkKICAgICAgICBjbHMudGFnX2Fub3RoZXJfeWFtbF90ZXN0ID0gY2xzLlRhZy5jcmVhdGUoCiAgICAgICAgICAgIHsibmFtZSI6ICJBbm90aGVyIFlBTUwgVGVzdCIsICJyZWZlcmVuY2UiOiAiYW5vdGhlcl95YW1sX3Rlc3QifQogICAgICAgICkKCiAgICAgICAgIyBDb21tYW5kcwogICAgICAgIGNscy5Db21tYW5kID0gY2xzLmVudlsiY3gudG93ZXIuY29tbWFuZCJdCiAgICAgICAgY2xzLmNvbW1hbmRfeWFtbF90ZXN0ID0gY2xzLkNvbW1hbmQuY3JlYXRlKAogICAgICAgICAgICB7Im5hbWUiOiAiVGVzdCBZYW1sIENvbW1hbmQiLCAicmVmZXJlbmNlIjogInRlc3RfeWFtbF9jb21tYW5kIn0KICAgICAgICApCgogICAgICAgICMgRmxpZ2h0IFBsYW4KICAgICAgICBjbHMuRmxpZ2h0UGxhbiA9IGNscy5lbnZbImN4LnRvd2VyLnBsYW4iXQogICAgICAgIGNscy5mbGlnaHRfcGxhbl95YW1sX3Rlc3QgPSBjbHMuRmxpZ2h0UGxhbi5jcmVhdGUoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJuYW1lIjogIlRlc3QgWWFtbCBGbGlnaHQgUGxhbiIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogInRlc3RfeWFtbF9mbGlnaHRfcGxhbiIsCiAgICAgICAgICAgICAgICAibGluZV9pZHMiOiBbCiAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29uZGl0aW9uIjogRmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNlX3N1ZG8iOiBGYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kX2lkIjogY2xzLmNvbW1hbmRfeWFtbF90ZXN0LmlkLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICB9CiAgICAgICAgKQoKICAgICAgICAjIENyZWF0ZSBTZXJ2ZXIgVGVtcGxhdGUgdXNlZCBmb3IgdGVzdGluZwogICAgICAgIGNscy5zZXJ2ZXJfdGVtcGxhdGVfeWFtbF90ZXN0ID0gY2xzLmVudlsiY3gudG93ZXIuc2VydmVyLnRlbXBsYXRlIl0uY3JlYXRlKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJUZXN0IFNlcnZlciBUZW1wbGF0ZSIsCiAgICAgICAgICAgICAgICAidGFnX2lkcyI6IFsKICAgICAgICAgICAgICAgICAgICAoNCwgY2xzLnRhZ195YW1sX3Rlc3QuaWQpLAogICAgICAgICAgICAgICAgICAgICg0LCBjbHMudGFnX2Fub3RoZXJfeWFtbF90ZXN0LmlkKSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAidmFyaWFibGVfdmFsdWVfaWRzIjogWwogICAgICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhcmlhYmxlX2lkIjogY2xzLnZhcmlhYmxlX3lhbWxfdGVzdC5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZV9jaGFyIjogIlNvbWUgVGVzdCBWYWx1ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YXJpYWJsZV9pZCI6IGNscy52YXJpYWJsZV95YW1sX3VybC5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZV9jaGFyIjogImh0dHBzOi8vY2V0bWl4LmNvbSIsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAiZmxpZ2h0X3BsYW5faWQiOiBjbHMuZmxpZ2h0X3BsYW5feWFtbF90ZXN0LmlkLAogICAgICAgICAgICB9CiAgICAgICAgKQoKICAgICAgICAjIFNlcnZlciBMb2dzCiAgICAgICAgY2xzLlNlcnZlckxvZyA9IGNscy5lbnZbImN4LnRvd2VyLnNlcnZlci5sb2ciXQogICAgICAgIGNscy5zZXJ2ZXJfbG9nX3lhbWxfdGVzdCA9IGNscy5TZXJ2ZXJMb2cuY3JlYXRlKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJUZXN0IFNlcnZlciBMb2ciLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJ0ZXN0X3NlcnZlcl9sb2ciLAogICAgICAgICAgICAgICAgImNvbW1hbmRfaWQiOiBjbHMuY29tbWFuZF95YW1sX3Rlc3QuaWQsCiAgICAgICAgICAgICAgICAibG9nX3R5cGUiOiAiY29tbWFuZCIsCiAgICAgICAgICAgICAgICAic2VydmVyX3RlbXBsYXRlX2lkIjogY2xzLnNlcnZlcl90ZW1wbGF0ZV95YW1sX3Rlc3QuaWQsCiAgICAgICAgICAgIH0KICAgICAgICApCgogICAgICAgICMgQ3JlYXRlIGFuIGV4cG9ydCB3aXphcmQgYW5kIGdlbmVyYXRlIFlBTUwgY29kZQogICAgICAgIGNvbnRleHQgPSB7CiAgICAgICAgICAgICJhY3RpdmVfbW9kZWwiOiAiY3gudG93ZXIuc2VydmVyLnRlbXBsYXRlIiwKICAgICAgICAgICAgImFjdGl2ZV9pZHMiOiBbY2xzLnNlcnZlcl90ZW1wbGF0ZV95YW1sX3Rlc3QuaWRdLAogICAgICAgIH0KICAgICAgICBjbHMuZXhwb3J0X3dpemFyZCA9ICgKICAgICAgICAgICAgY2xzLmVudlsiY3gudG93ZXIueWFtbC5leHBvcnQud2l6Il0ud2l0aF9jb250ZXh0KGNvbnRleHQpLmNyZWF0ZSh7fSkgICMgcHlsaW50OiBkaXNhYmxlPWNvbnRleHQtb3ZlcnJpZGRlbiAjIG5ldyBuZWVkIGEgbmV3IGNsZWFuIGNvbnRleHQKICAgICAgICApCiAgICAgICAgY2xzLmV4cG9ydF93aXphcmQub25jaGFuZ2VfZXhwbG9kZV9jaGlsZF9yZWNvcmRzKCkKICAgICAgICBjbHMuZXhwb3J0X3dpemFyZC5hY3Rpb25fZ2VuZXJhdGVfeWFtbF9maWxlKCkKICAgICAgICBjbHMueWFtbF9jb2RlID0gY2xzLmV4cG9ydF93aXphcmQueWFtbF9jb2RlCiAgICAgICAgY2xzLnlhbWxfZmlsZSA9IGJhc2U2NC5iNjRlbmNvZGUoY2xzLnlhbWxfY29kZS5lbmNvZGUoInV0Zi04IikpCgogICAgICAgICMgWUFNTCBpbXBvcnQgdXBsb2FkIHdpemFyZAogICAgICAgIGNscy5ZYW1sSW1wb3J0V2l6VXBsb2FkID0gY2xzLmVudlsiY3gudG93ZXIueWFtbC5pbXBvcnQud2l6LnVwbG9hZCJdCiAgICAgICAgY2xzLnlhbWxfdXBsb2FkX3dpemFyZCA9IGNscy5ZYW1sSW1wb3J0V2l6VXBsb2FkLmNyZWF0ZSgKICAgICAgICAgICAgeyJ5YW1sX2ZpbGUiOiBjbHMueWFtbF9maWxlLCAiZmlsZV9uYW1lIjogInRlc3RfeWFtbF9maWxlLnlhbWwifQogICAgICAgICkKCiAgICAgICAgIyBZQU1MIGltcG9ydCB3aXphcmQKICAgICAgICBjbHMuaW1wb3J0X3dpemFyZF9hY3Rpb24gPSBjbHMueWFtbF91cGxvYWRfd2l6YXJkLmFjdGlvbl9pbXBvcnRfeWFtbCgpCiAgICAgICAgY2xzLmltcG9ydF93aXphcmQgPSBjbHMuZW52W2Nscy5pbXBvcnRfd2l6YXJkX2FjdGlvblsicmVzX21vZGVsIl1dLmJyb3dzZSgKICAgICAgICAgICAgY2xzLmltcG9ydF93aXphcmRfYWN0aW9uWyJyZXNfaWQiXQogICAgICAgICkKICAgICAgICBjbHMuaW1wb3J0X3dpemFyZC5pZl9yZWNvcmRfZXhpc3RzID0gInVwZGF0ZSIKCiAgICBkZWYgX2NyZWF0ZV9pbXBvcnRfd2l6YXJkKHNlbGYsIHlhbWxfY29kZSwgaWZfcmVjb3JkX2V4aXN0cz0iY3JlYXRlIik6CiAgICAgICAgIiIiQ3JlYXRlIGltcG9ydCB3aXphcmQgZm9yIGFkLWhvYyBZQU1MIHBheWxvYWQuIiIiCiAgICAgICAgcmV0dXJuIHNlbGYuZW52WyJjeC50b3dlci55YW1sLmltcG9ydC53aXoiXS5jcmVhdGUoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJ5YW1sX2NvZGUiOiB5YW1sX2NvZGUsCiAgICAgICAgICAgICAgICAiaWZfcmVjb3JkX2V4aXN0cyI6IGlmX3JlY29yZF9leGlzdHMsCiAgICAgICAgICAgIH0KICAgICAgICApCgogICAgZGVmIHRlc3RfZXh0cmFjdF95YW1sX2RhdGEoc2VsZik6CiAgICAgICAgIiIiVGVzdCBleHRyYWN0IFlBTUwgZGF0YSBmcm9tIGZpbGUiIiIKCiAgICAgICAgIyAtLSAxIC0tCiAgICAgICAgIyBUZXN0IGlmIFlBTUwgZmlsZSBpcyB2YWxpZAogICAgICAgIGV4dHJhY3RlZF95YW1sX2RhdGEgPSBzZWxmLnlhbWxfdXBsb2FkX3dpemFyZC5fZXh0cmFjdF95YW1sX2RhdGEoKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIGV4dHJhY3RlZF95YW1sX2RhdGEsCiAgICAgICAgICAgIHNlbGYueWFtbF9jb2RlLAogICAgICAgICAgICAiWUFNTCBjb2RlIGlzIG5vdCBleHRyYWN0ZWQgY29ycmVjdGx5IiwKICAgICAgICApCgogICAgICAgICMgLS0gMiAtLQogICAgICAgICMgVGVzdCBpZiBpbnZhbGlkIG1vZGVsIGlzIGhhbmRsZWQgcHJvcGVybHkKICAgICAgICAjIFJlcGxhY2UgbW9kZWwgbmFtZSB3aXRoIGludmFsaWQgbW9kZWwKICAgICAgICBzZWxmLmludmFsaWRfeWFtbF9jb2RlID0gc2VsZi55YW1sX2NvZGUucmVwbGFjZSgKICAgICAgICAgICAgInNlcnZlcl90ZW1wbGF0ZSIsICJpbnZhbGlkX21vZGVsIgogICAgICAgICkKICAgICAgICBzZWxmLmludmFsaWRfeWFtbF9maWxlID0gYmFzZTY0LmI2NGVuY29kZSgKICAgICAgICAgICAgc2VsZi5pbnZhbGlkX3lhbWxfY29kZS5lbmNvZGUoInV0Zi04IikKICAgICAgICApCiAgICAgICAgc2VsZi55YW1sX3VwbG9hZF93aXphcmQueWFtbF9maWxlID0gc2VsZi5pbnZhbGlkX3lhbWxfZmlsZQogICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsaWRhdGlvbkVycm9yKSBhcyBlOgogICAgICAgICAgICBzZWxmLnlhbWxfdXBsb2FkX3dpemFyZC5fZXh0cmFjdF95YW1sX2RhdGEoKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIHN0cihlLmV4Y2VwdGlvbiksCiAgICAgICAgICAgIF8oIidpbnZhbGlkX21vZGVsJyBpcyBub3QgYSB2YWxpZCBtb2RlbCIpLAogICAgICAgICAgICAiRXhjZXB0aW9uIG1lc3NhZ2UgZG9lcyBub3QgbWF0Y2giLAogICAgICAgICkKICAgICAgICAjIC0tIDMgLS0KICAgICAgICAjIFRlc3QgaWYgbm9uIFlBTUwgc3VwcG9ydGVkIG1vZGVsIGlzIGhhbmRsZWQgcHJvcGVybHkKICAgICAgICAjIFJlcGxhY2UgbW9kZWwgbmFtZSB3aXRoIG5vbiBZQU1MIHN1cHBvcnRlZCBtb2RlbAogICAgICAgIHNlbGYubm9uX3lhbWxfc3VwcG9ydGVkX3lhbWxfY29kZSA9IHNlbGYueWFtbF9jb2RlLnJlcGxhY2UoCiAgICAgICAgICAgICJzZXJ2ZXJfdGVtcGxhdGUiLCAiY29tbWFuZF9ydW5fd2l6YXJkIgogICAgICAgICkKICAgICAgICBzZWxmLm5vbl95YW1sX3N1cHBvcnRlZF95YW1sX2ZpbGUgPSBiYXNlNjQuYjY0ZW5jb2RlKAogICAgICAgICAgICBzZWxmLm5vbl95YW1sX3N1cHBvcnRlZF95YW1sX2NvZGUuZW5jb2RlKCJ1dGYtOCIpCiAgICAgICAgKQogICAgICAgIHNlbGYueWFtbF91cGxvYWRfd2l6YXJkLnlhbWxfZmlsZSA9IHNlbGYubm9uX3lhbWxfc3VwcG9ydGVkX3lhbWxfZmlsZQogICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsaWRhdGlvbkVycm9yKSBhcyBlOgogICAgICAgICAgICBzZWxmLnlhbWxfdXBsb2FkX3dpemFyZC5fZXh0cmFjdF95YW1sX2RhdGEoKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIHN0cihlLmV4Y2VwdGlvbiksCiAgICAgICAgICAgIF8oIk1vZGVsICdjb21tYW5kX3J1bl93aXphcmQnIGRvZXMgbm90IHN1cHBvcnQgWUFNTCBpbXBvcnQiKSwKICAgICAgICAgICAgIkV4Y2VwdGlvbiBtZXNzYWdlIGRvZXMgbm90IG1hdGNoIiwKICAgICAgICApCgogICAgICAgICMgLS0gNCAtLQogICAgICAgICMgVGVzdCBpZiBZQU1MIHRoYXQgaXMgbm90IGEgZGljdGlvbmFyeSBpcyBoYW5kbGVkIHByb3Blcmx5CiAgICAgICAgc2VsZi5pbnZhbGlkX3lhbWxfZmlsZSA9IGJhc2U2NC5iNjRlbmNvZGUoYiJJbnZhbGlkIFlBTUwgZmlsZSIpCiAgICAgICAgc2VsZi55YW1sX3VwbG9hZF93aXphcmQueWFtbF9maWxlID0gc2VsZi5pbnZhbGlkX3lhbWxfZmlsZQogICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsaWRhdGlvbkVycm9yKSBhcyBlOgogICAgICAgICAgICBzZWxmLnlhbWxfdXBsb2FkX3dpemFyZC5fZXh0cmFjdF95YW1sX2RhdGEoKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIHN0cihlLmV4Y2VwdGlvbiksCiAgICAgICAgICAgIF8oIllhbWwgZmlsZSBkb2Vzbid0IGNvbnRhaW4gdmFsaWQgZGF0YSIpLAogICAgICAgICAgICAiRXhjZXB0aW9uIG1lc3NhZ2UgZG9lcyBub3QgbWF0Y2giLAogICAgICAgICkKCiAgICAgICAgIyAtLSA1IC0tCiAgICAgICAgIyBUZXN0IGlmIFR5cGVFcnJvciBpcyBoYW5kbGVkIHByb3Blcmx5CiAgICAgICAgc2VsZi5ub25fdW5pY29kZV95YW1sX2ZpbGUgPSBiYXNlNjQuYjY0ZW5jb2RlKGIiXHg4MCIpCiAgICAgICAgc2VsZi55YW1sX3VwbG9hZF93aXphcmQueWFtbF9maWxlID0gc2VsZi5ub25fdW5pY29kZV95YW1sX2ZpbGUKICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbGlkYXRpb25FcnJvcikgYXMgZToKICAgICAgICAgICAgc2VsZi55YW1sX3VwbG9hZF93aXphcmQuX2V4dHJhY3RfeWFtbF9kYXRhKCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICBzdHIoZS5leGNlcHRpb24pLAogICAgICAgICAgICBfKCJZQU1MIGZpbGUgY2Fubm90IGJlIGRlY29kZWQgcHJvcGVybHkiKSwKICAgICAgICAgICAgIkV4Y2VwdGlvbiBtZXNzYWdlIGRvZXMgbm90IG1hdGNoIiwKICAgICAgICApCgogICAgICAgICMgLS0gNiAtLQogICAgICAgICMgVGVzdCBpZiBZQU1MIGZpbGUgaXMgZW1wdHkKICAgICAgICBzZWxmLmVtcHR5X3lhbWxfZmlsZSA9ICIiCiAgICAgICAgc2VsZi55YW1sX3VwbG9hZF93aXphcmQueWFtbF9maWxlID0gc2VsZi5lbXB0eV95YW1sX2ZpbGUKICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbGlkYXRpb25FcnJvcikgYXMgZToKICAgICAgICAgICAgc2VsZi55YW1sX3VwbG9hZF93aXphcmQuX2V4dHJhY3RfeWFtbF9kYXRhKCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICBzdHIoZS5leGNlcHRpb24pLAogICAgICAgICAgICBfKCJGaWxlIGlzIGVtcHR5IiksCiAgICAgICAgICAgICJFeGNlcHRpb24gbWVzc2FnZSBkb2VzIG5vdCBtYXRjaCIsCiAgICAgICAgKQoKICAgICAgICAjIC0tIDcgLS0KICAgICAgICAjIFRlc3QgaWYgWUFNTCBmaWxlIHdpdGggdW5zdXBwb3J0ZWQgWUFNTCB2ZXJzaW9uIGlzIGhhbmRsZWQgcHJvcGVybHkKICAgICAgICB5YW1sX3dpdGhfdW5zdXBwb3J0ZWRfdmVyc2lvbiA9IHNlbGYueWFtbF9jb2RlLnJlcGxhY2UoCiAgICAgICAgICAgIGYiY2V0bWl4X3Rvd2VyX3lhbWxfdmVyc2lvbjoge3NlbGYuRmxpZ2h0UGxhbi5DRVRNSVhfVE9XRVJfWUFNTF9WRVJTSU9OfSIsCiAgICAgICAgICAgIGYiY2V0bWl4X3Rvd2VyX3lhbWxfdmVyc2lvbjoge3NlbGYuRmxpZ2h0UGxhbi5DRVRNSVhfVE9XRVJfWUFNTF9WRVJTSU9OICsgMX0iLCAgIyBub3FhOiBFNTAxCiAgICAgICAgKQogICAgICAgIHNlbGYudW5zdXBwb3J0ZWRfeWFtbF92ZXJzaW9uX3lhbWxfZmlsZSA9IGJhc2U2NC5iNjRlbmNvZGUoCiAgICAgICAgICAgIHlhbWxfd2l0aF91bnN1cHBvcnRlZF92ZXJzaW9uLmVuY29kZSgidXRmLTgiKQogICAgICAgICkKICAgICAgICBzZWxmLnlhbWxfdXBsb2FkX3dpemFyZC55YW1sX2ZpbGUgPSBzZWxmLnVuc3VwcG9ydGVkX3lhbWxfdmVyc2lvbl95YW1sX2ZpbGUKICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbGlkYXRpb25FcnJvcikgYXMgZToKICAgICAgICAgICAgc2VsZi55YW1sX3VwbG9hZF93aXphcmQuX2V4dHJhY3RfeWFtbF9kYXRhKCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICBzdHIoZS5leGNlcHRpb24pLAogICAgICAgICAgICBfKAogICAgICAgICAgICAgICAgIllBTUwgdmVyc2lvbiBpcyBoaWdoZXIgdGhhbiB2ZXJzaW9uIgogICAgICAgICAgICAgICAgIiBzdXBwb3J0ZWQgYnkgeW91ciBDZXRtaXggVG93ZXIgaW5zdGFuY2UuIgogICAgICAgICAgICAgICAgIiAlKGNvZGVfdmVyc2lvbilzID4gJSh0b3dlcl92ZXJzaW9uKXMiLAogICAgICAgICAgICAgICAgY29kZV92ZXJzaW9uPXNlbGYuRmxpZ2h0UGxhbi5DRVRNSVhfVE9XRVJfWUFNTF9WRVJTSU9OICsgMSwKICAgICAgICAgICAgICAgIHRvd2VyX3ZlcnNpb249c2VsZi5GbGlnaHRQbGFuLkNFVE1JWF9UT1dFUl9ZQU1MX1ZFUlNJT04sCiAgICAgICAgICAgICksCiAgICAgICAgICAgICJFeGNlcHRpb24gbWVzc2FnZSBkb2VzIG5vdCBtYXRjaCIsCiAgICAgICAgKQoKICAgICAgICAjIC0tIDggLS0KICAgICAgICAjIFRlc3QgWUFNTCBmaWxlIHdpdGggbm8gcmVjb3JkcwogICAgICAgIHNlbGYuaW1wb3J0X3dpemFyZC55YW1sX2NvZGUgPSAiY2V0bWl4X3Rvd2VyX3lhbWxfdmVyc2lvbjogMSIKICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbGlkYXRpb25FcnJvcikgYXMgZToKICAgICAgICAgICAgc2VsZi5pbXBvcnRfd2l6YXJkLmFjdGlvbl9pbXBvcnRfeWFtbCgpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgc3RyKGUuZXhjZXB0aW9uKSwKICAgICAgICAgICAgXygiWUFNTCBmaWxlIGRvZXNuJ3QgY29udGFpbiBhbnkgcmVjb3JkcyIpLAogICAgICAgICAgICAiRXhjZXB0aW9uIG1lc3NhZ2UgZG9lcyBub3QgbWF0Y2giLAogICAgICAgICkKCiAgICBkZWYgdGVzdF9hY3Rpb25faW1wb3J0X3lhbWxfc2tpcF9pZl9leGlzdHMoc2VsZik6CiAgICAgICAgIiIiVGVzdCBZQU1MIGltcG9ydCB3aXphcmQgYWN0aW9uIHdoZW4gc2tpcHBpbmcgYW4gZXhpc3RpbmcgcmVjb3JkIiIiCgogICAgICAgIHNlbGYuaW1wb3J0X3dpemFyZC5pZl9yZWNvcmRfZXhpc3RzID0gInNraXAiCgogICAgICAgICMgUnVuIGltcG9ydCB3aXphcmQgYWN0aW9uCiAgICAgICAgaW1wb3J0X3dpemFyZF9yZXN1bHRfYWN0aW9uID0gc2VsZi5pbXBvcnRfd2l6YXJkLmFjdGlvbl9pbXBvcnRfeWFtbCgpCgogICAgICAgICMgVGVzdCBpZiBhY3Rpb24gaXMgY29tcG9zZWQgcHJvcGVybHkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICBpbXBvcnRfd2l6YXJkX3Jlc3VsdF9hY3Rpb25bInR5cGUiXSwKICAgICAgICAgICAgImlyLmFjdGlvbnMuY2xpZW50IiwKICAgICAgICAgICAgIkltcG9ydCB3aXphcmQgYWN0aW9uIHR5cGUgaXMgbm90IGNvcnJlY3QiLAogICAgICAgICkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICBpbXBvcnRfd2l6YXJkX3Jlc3VsdF9hY3Rpb25bInRhZyJdLAogICAgICAgICAgICAiZGlzcGxheV9ub3RpZmljYXRpb24iLAogICAgICAgICAgICAiSW1wb3J0IHdpemFyZCBhY3Rpb24gdGFnIGlzIG5vdCBjb3JyZWN0IiwKICAgICAgICApCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgaW1wb3J0X3dpemFyZF9yZXN1bHRfYWN0aW9uWyJwYXJhbXMiXVsidGl0bGUiXSwKICAgICAgICAgICAgXygiUmVjb3JkIEltcG9ydCIpLAogICAgICAgICAgICAiSW1wb3J0IHdpemFyZCBhY3Rpb24gdGl0bGUgaXMgbm90IGNvcnJlY3QiLAogICAgICAgICkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICBpbXBvcnRfd2l6YXJkX3Jlc3VsdF9hY3Rpb25bInBhcmFtcyJdWyJtZXNzYWdlIl0sCiAgICAgICAgICAgIF8oIk5vIHJlY29yZHMgd2VyZSBjcmVhdGVkIG9yIHVwZGF0ZWQiKSwKICAgICAgICAgICAgIkltcG9ydCB3aXphcmQgYWN0aW9uIG1lc3NhZ2UgaXMgbm90IGNvcnJlY3QiLAogICAgICAgICkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICBpbXBvcnRfd2l6YXJkX3Jlc3VsdF9hY3Rpb25bInBhcmFtcyJdWyJzdGlja3kiXSwKICAgICAgICAgICAgVHJ1ZSwKICAgICAgICAgICAgIkltcG9ydCB3aXphcmQgYWN0aW9uIHN0aWNreSBpcyBub3QgY29ycmVjdCIsCiAgICAgICAgKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIGltcG9ydF93aXphcmRfcmVzdWx0X2FjdGlvblsicGFyYW1zIl1bInR5cGUiXSwKICAgICAgICAgICAgIndhcm5pbmciLAogICAgICAgICAgICAiSW1wb3J0IHdpemFyZCBhY3Rpb24gdHlwZSBpcyBub3QgY29ycmVjdCIsCiAgICAgICAgKQoKICAgIGRlZiB0ZXN0X2FjdGlvbl9pbXBvcnRfeWFtbF91cGRhdGVfZXhpc3RpbmdfcmVjb3JkKHNlbGYpOgogICAgICAgICIiIlRlc3QgWUFNTCBpbXBvcnQgd2l6YXJkIGFjdGlvbiB3aGVuIHVwZGF0aW5nIGFuIGV4aXN0aW5nIHJlY29yZCIiIgoKICAgICAgICAjIC0tIDEgLS0KICAgICAgICAjIFRlc3QgaWYgbmV3IGltcG9ydCB3aXphcmQgcmVjb3JkIGlzIGNyZWF0ZWQgcHJvcGVybHkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICBzZWxmLmltcG9ydF93aXphcmRfYWN0aW9uWyJyZXNfbW9kZWwiXSwKICAgICAgICAgICAgImN4LnRvd2VyLnlhbWwuaW1wb3J0LndpeiIsCiAgICAgICAgICAgICJJbXBvcnQgd2l6YXJkIGFjdGlvbiBtb2RlbCBpcyBub3QgY29ycmVjdCIsCiAgICAgICAgKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIHNlbGYuaW1wb3J0X3dpemFyZF9hY3Rpb25bInZpZXdfbW9kZSJdLAogICAgICAgICAgICAiZm9ybSIsCiAgICAgICAgICAgICJJbXBvcnQgd2l6YXJkIGFjdGlvbiB2aWV3IG1vZGUgaXMgbm90IGNvcnJlY3QiLAogICAgICAgICkKCiAgICAgICAgIyAtLSAyIC0tCiAgICAgICAgIyBNb2RpZnkgU2VydmVyIFRlbXBsYXRlIG5hbWUgYW5kIHZhcmlhYmxlIHZhbHVlCiAgICAgICAgc2VsZi5pbXBvcnRfd2l6YXJkLnlhbWxfY29kZSA9IHNlbGYuaW1wb3J0X3dpemFyZC55YW1sX2NvZGUucmVwbGFjZSgKICAgICAgICAgICAgIm5hbWU6IFRlc3QgU2VydmVyIFRlbXBsYXRlIiwKICAgICAgICAgICAgIm5hbWU6IFVwZGF0ZWQgVGVzdCBTZXJ2ZXIgVGVtcGxhdGUiLAogICAgICAgICkucmVwbGFjZSgKICAgICAgICAgICAgInZhbHVlX2NoYXI6IFNvbWUgVGVzdCBWYWx1ZSIsCiAgICAgICAgICAgICJ2YWx1ZV9jaGFyOiBVcGRhdGVkIFRlc3QgVmFsdWUiLAogICAgICAgICkKICAgICAgICB2YXJpYWJsZV92YWx1ZV90b191cGRhdGUgPSAoCiAgICAgICAgICAgIHNlbGYuc2VydmVyX3RlbXBsYXRlX3lhbWxfdGVzdC52YXJpYWJsZV92YWx1ZV9pZHMuZmlsdGVyZWQoCiAgICAgICAgICAgICAgICBsYW1iZGEgdjogdi52YWx1ZV9jaGFyID09ICJTb21lIFRlc3QgVmFsdWUiCiAgICAgICAgICAgICkKICAgICAgICApCgogICAgICAgICMgUnVuIGltcG9ydCB3aXphcmQgYWN0aW9uIGFub3RoZXIgdGltZQogICAgICAgIGltcG9ydF93aXphcmRfcmVzdWx0X2FjdGlvbiA9IHNlbGYuaW1wb3J0X3dpemFyZC5hY3Rpb25faW1wb3J0X3lhbWwoKQoKICAgICAgICAjIC0tIDMgLS0KICAgICAgICAjIFRlc3QgaWYgcmVjb3JkIGlzIHVwZGF0ZWQgcHJvcGVybHkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICBpbXBvcnRfd2l6YXJkX3Jlc3VsdF9hY3Rpb25bInJlc19tb2RlbCJdLAogICAgICAgICAgICAiY3gudG93ZXIuc2VydmVyLnRlbXBsYXRlIiwKICAgICAgICAgICAgIkltcG9ydCB3aXphcmQgYWN0aW9uIG1vZGVsIGlzIG5vdCBjb3JyZWN0IiwKICAgICAgICApCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgaW1wb3J0X3dpemFyZF9yZXN1bHRfYWN0aW9uWyJkb21haW4iXSwKICAgICAgICAgICAgWygiaWQiLCAiaW4iLCBzZWxmLnNlcnZlcl90ZW1wbGF0ZV95YW1sX3Rlc3QuaWRzKV0sCiAgICAgICAgICAgICJJRCBtdXN0IG1hdGNoIGV4aXN0aW5nIHJlY29yZCBJRCIsCiAgICAgICAgKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIHNlbGYuc2VydmVyX3RlbXBsYXRlX3lhbWxfdGVzdC5uYW1lLAogICAgICAgICAgICAiVXBkYXRlZCBUZXN0IFNlcnZlciBUZW1wbGF0ZSIsCiAgICAgICAgICAgICJSZWNvcmQgaXMgbm90IHVwZGF0ZWQgcHJvcGVybHkiLAogICAgICAgICkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICB2YXJpYWJsZV92YWx1ZV90b191cGRhdGUudmFsdWVfY2hhciwKICAgICAgICAgICAgIlVwZGF0ZWQgVGVzdCBWYWx1ZSIsCiAgICAgICAgICAgICJWYXJpYWJsZSB2YWx1ZSBpcyBub3QgdXBkYXRlZCBwcm9wZXJseSIsCiAgICAgICAgKQoKICAgICAgICAjIC0tIDQgLS0KICAgICAgICAjIFRlc3QgaWYgc2VydmVyIGxvZyByZW1haW5zIHRoZSBzYW1lCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgbGVuKHNlbGYuc2VydmVyX3RlbXBsYXRlX3lhbWxfdGVzdC5zZXJ2ZXJfbG9nX2lkcyksCiAgICAgICAgICAgIDEsCiAgICAgICAgICAgICJTZXJ2ZXIgTG9nIG11c3QgcmVtYWluIHRoZSBzYW1lIiwKICAgICAgICApCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfbG9nX3lhbWxfdGVzdC5pZCwKICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfdGVtcGxhdGVfeWFtbF90ZXN0LnNlcnZlcl9sb2dfaWRzLmlkLAogICAgICAgICAgICAiU2VydmVyIExvZyBtdXN0IHJlbWFpbiB0aGUgc2FtZSIsCiAgICAgICAgKQoKICAgIGRlZiB0ZXN0X2FjdGlvbl9pbXBvcnRfeWFtbF9jcmVhdGVfbmV3X3JlY29yZChzZWxmKToKICAgICAgICAiIiJUZXN0IFlBTUwgaW1wb3J0IHdpemFyZCBhY3Rpb24gd2hlbiBjcmVhdGluZyBhIG5ldyByZWNvcmQiIiIKICAgICAgICBzZWxmLmltcG9ydF93aXphcmQuaWZfcmVjb3JkX2V4aXN0cyA9ICJjcmVhdGUiCiAgICAgICAgd2l0aCBtdXRlX2xvZ2dlcigib2Rvby5hZGRvbnMuY2V0bWl4X3Rvd2VyX3lhbWwubW9kZWxzLmN4X3Rvd2VyX3lhbWxfbWl4aW4iKToKICAgICAgICAgICAgaW1wb3J0X3dpemFyZF9yZXN1bHRfYWN0aW9uID0gc2VsZi5pbXBvcnRfd2l6YXJkLmFjdGlvbl9pbXBvcnRfeWFtbCgpCgogICAgICAgICMgLS0gMSAtLQogICAgICAgICMgVGVzdCBpZiBuZXcgcmVjb3JkIGlzIGNyZWF0ZWQgaW5zdGVhZCBvZiB1cGRhdGluZyBleGlzdGluZyBvbmUKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICBpbXBvcnRfd2l6YXJkX3Jlc3VsdF9hY3Rpb25bInJlc19tb2RlbCJdLAogICAgICAgICAgICAiY3gudG93ZXIuc2VydmVyLnRlbXBsYXRlIiwKICAgICAgICAgICAgIkltcG9ydCB3aXphcmQgYWN0aW9uIG1vZGVsIGlzIG5vdCBjb3JyZWN0IiwKICAgICAgICApCiAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCgKICAgICAgICAgICAgaW1wb3J0X3dpemFyZF9yZXN1bHRfYWN0aW9uWyJkb21haW4iXSwKICAgICAgICAgICAgZiJbKCdpZCcsICc9Jywge3NlbGYuc2VydmVyX3RlbXBsYXRlX3lhbWxfdGVzdC5pZHN9KV0iLAogICAgICAgICAgICAiSUQgbXVzdCBub3QgbWF0Y2ggZXhpc3RpbmcgcmVjb3JkIElEIiwKICAgICAgICApCgogICAgICAgICMgLS0gMiAtLQogICAgICAgICMgRW5zdXJlIHRoYXQgZXhpc3RpbmcgZmxpZ2h0IHBsYW4gaXMgdXNlZCBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbmV3IG9uZQogICAgICAgIG5ld19zZXJ2ZXJfdGVtcGxhdGUgPSBzZWxmLmVudltpbXBvcnRfd2l6YXJkX3Jlc3VsdF9hY3Rpb25bInJlc19tb2RlbCJdXS5zZWFyY2goCiAgICAgICAgICAgIGltcG9ydF93aXphcmRfcmVzdWx0X2FjdGlvblsiZG9tYWluIl0KICAgICAgICApCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgbmV3X3NlcnZlcl90ZW1wbGF0ZS5mbGlnaHRfcGxhbl9pZCwKICAgICAgICAgICAgc2VsZi5mbGlnaHRfcGxhbl95YW1sX3Rlc3QsCiAgICAgICAgICAgICJFeGlzdGluZyBmbGlnaHQgcGxhbiBtdXN0IGJlIHVzZWQiLAogICAgICAgICkKCiAgICAgICAgIyAtLSAzIC0tCiAgICAgICAgIyBFbnN1cmUgdGhhdCBleGlzdGluZyB0YWdzIGFyZSB1c2VkIGluc3RlYWQgb2YgY3JlYXRpbmcgbmV3IG9uZXMKICAgICAgICBmb3IgdGFnIGluIHNlbGYuc2VydmVyX3RlbXBsYXRlX3lhbWxfdGVzdC50YWdfaWRzOgogICAgICAgICAgICBzZWxmLmFzc2VydEluKAogICAgICAgICAgICAgICAgdGFnLAogICAgICAgICAgICAgICAgbmV3X3NlcnZlcl90ZW1wbGF0ZS50YWdfaWRzLAogICAgICAgICAgICAgICAgIkV4aXN0aW5nIHRhZyBtdXN0IGJlIHVzZWQiLAogICAgICAgICAgICApCgogICAgICAgICMgLS0gNCAtLQogICAgICAgICMgRW5zdXJlIHRoYXQgbmV3IHZhcmlhYmxlIHZhbHVlcyBhcmUgY3JlYXRlZAogICAgICAgIGZvciB2YXJpYWJsZV92YWx1ZSBpbiBzZWxmLnNlcnZlcl90ZW1wbGF0ZV95YW1sX3Rlc3QudmFyaWFibGVfdmFsdWVfaWRzOgogICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKAogICAgICAgICAgICAgICAgdmFyaWFibGVfdmFsdWUsCiAgICAgICAgICAgICAgICBuZXdfc2VydmVyX3RlbXBsYXRlLnZhcmlhYmxlX3ZhbHVlX2lkcywKICAgICAgICAgICAgICAgICJOZXcgdmFyaWFibGUgdmFsdWUgbXVzdCBiZSBjcmVhdGVkIGluc3RlYWQgb2YgdXBkYXRpbmcgZXhpc3Rpbmcgb25lIiwKICAgICAgICAgICAgKQoKICAgICAgICAjIC0tIDUgLS0KICAgICAgICAjIFRlc3QgaWYgc2VydmVyIGxvZyBpcyBjcmVhdGVkIGluc3RlYWQgb2YgdXBkYXRlZAogICAgICAgIGZvciBzZXJ2ZXJfbG9nIGluIHNlbGYuc2VydmVyX3RlbXBsYXRlX3lhbWxfdGVzdC5zZXJ2ZXJfbG9nX2lkczoKICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigKICAgICAgICAgICAgICAgIHNlcnZlcl9sb2csCiAgICAgICAgICAgICAgICBuZXdfc2VydmVyX3RlbXBsYXRlLnNlcnZlcl9sb2dfaWRzLAogICAgICAgICAgICAgICAgIk5ldyBTZXJ2ZXIgTG9nIG11c3QgYmUgY3JlYXRlZCBpbnN0ZWFkIG9mIHVwZGF0aW5nIGV4aXN0aW5nIG9uZSIsCiAgICAgICAgICAgICkKCiAgICBkZWYgdGVzdF9leHRyYWN0X3NlY3JldF9uYW1lcyhzZWxmKToKICAgICAgICAiIiJUZXN0IGV4dHJhY3Qgc2VjcmV0IG5hbWVzIGZyb20gWUFNTCBkYXRhIiIiCgogICAgICAgICMgTkI6IHRoaXMgaXMgbm90IGEgcmVhbCBtb2RlbCwgaXQncyBqdXN0IGZvciB0ZXN0aW5nCiAgICAgICAgeWFtbF9jb2RlID0gIiIiY2V0bWl4X3Rvd2VyX3lhbWxfdmVyc2lvbjogMQpyZWNvcmRzOgotIGNldG1peF90b3dlcl9tb2RlbDogdGVzdF9tb2RlbAogIGFjY2Vzc19sZXZlbDogbWFuYWdlcgogIHJlZmVyZW5jZTogc3VjaF9tdWNoX3Rlc3RfcmVjb3JkCiAgbmFtZTogU3VjaCBNdWNoIENvbW1hbmQKICBhY3Rpb246IGZpbGVfdXNpbmdfdGVtcGxhdGUKICBhbGxvd19wYXJhbGxlbF9ydW46IGZhbHNlCiAgbm90ZTogSnVzdCBhIG5vdGUKICBvc19pZHM6IGZhbHNlCiAgdGFnX2lkczogZmFsc2UKICBwYXRoOiBmYWxzZQogIGZpbGVfdGVtcGxhdGVfaWQ6IGZhbHNlCiAgZmxpZ2h0X3BsYW5faWQ6IGZhbHNlCiAgY29kZTogZmFsc2UKICB2YXJpYWJsZV9pZHM6IGZhbHNlCiAgc2VjcmV0X2lkczogZmFsc2UKICBzc2hfa2V5X2lkOgogICAgcmVmZXJlbmNlOiB0ZXN0X3NzaF9rZXkKICAgIG5hbWU6IFRlc3QgU1NIIEtleQogICAga2V5X3R5cGU6IGsKICAgIG5vdGU6IGZhbHNlCi0gY2V0bWl4X3Rvd2VyX21vZGVsOiBhbm90aGVyX3Rlc3RfbW9kZWwKICByZWZlcmVuY2U6IHN1Y2hfbXVjaF90ZXN0X3JlY29yZF8yCiAgbmFtZTogU3VjaCBNdWNoIFRlc3QgUmVjb3JkIDIKICBub3RlOiBKdXN0IGEgbm90ZSAyCiAgc3NoX2tleV9pZDoKICAgIHJlZmVyZW5jZTogdGVzdF9zc2hfa2V5CiAgICBuYW1lOiBUZXN0IFNTSCBLZXkKICAgIGtleV90eXBlOiBrCiAgICBub3RlOiBmYWxzZQogICAgc2VjcmV0X2lkczoKICAgIC0gcmVmZXJlbmNlOiBzZWNyZXRfMgogICAgICBuYW1lOiBTZWNyZXQgMgogICAgICBrZXlfdHlwZTogcwogICAgICBub3RlOiBmYWxzZQogICAgLSByZWZlcmVuY2U6IHNlY3JldF8zCiAgICAgIG5hbWU6IFNlY3JldCAzCiAgICAgIGtleV90eXBlOiBzCiAgICAgIG5vdGU6IGZhbHNlCi0gY2V0bWl4X3Rvd2VyX21vZGVsOiBhbm90aGVyX3Rlc3RfbW9kZWwKICByZWZlcmVuY2U6IHN1Y2hfbXVjaF90ZXN0X3JlY29yZF8zCiAgbmFtZTogU3VjaCBNdWNoIFRlc3QgUmVjb3JkIDMKICBub3RlOiBKdXN0IGEgbm90ZSAzCiAgc3NoX2tleV9pZDoKICAgIHJlZmVyZW5jZTogYW5vdGhlcl9zc2hfa2V5CiAgICBuYW1lOiBBbm90aGVyIFNTSCBLZXkKICBzdWJfcmVjb3JkOgogICAgcmVmZXJlbmNlOiBzdWNoX211Y2hfdGVzdF9yZWNvcmRfNAogICAgbmFtZTogU3VjaCBNdWNoIFRlc3QgUmVjb3JkIDQKICAgIG5vdGU6IEp1c3QgYSBub3RlIDQKICAgIHNlY3JldF9pZHM6CiAgICAtIHJlZmVyZW5jZTogc2VjcmV0XzEKICAgICAgbmFtZTogU2VjcmV0IDMKICAgICAga2V5X3R5cGU6IHMKICAgICAgbm90ZTogZmFsc2UKICAgIC0gcmVmZXJlbmNlOiBzZWNyZXRfMgogICAgICBuYW1lOiBTZWNyZXQgNAogICAgICBrZXlfdHlwZTogcwogICAgICBub3RlOiBmYWxzZQogIGZpbGVfdGVtcGxhdGVfaWQ6CiAgICByZWZlcmVuY2U6IG15X2N1c3RvbV90ZXN0X3RlbXBsYXRlCiAgICBuYW1lOiBTdWNoIG11Y2ggZGVtbwogICAgc291cmNlOiB0b3dlcgogICAgZmlsZV90eXBlOiB0ZXh0CiAgICBzZXJ2ZXJfZGlyOiAvdmFyL2xvZy9teS9maWxlcwogICAgZmlsZV9uYW1lOiBtdWNoX2xvZ3MudHh0CiAgICBrZWVwX3doZW5fZGVsZXRlZDogZmFsc2UKICAgIHRhZ19pZHM6IGZhbHNlCiAgICBub3RlOiBIZXkhCiAgICBjb2RlOiBmYWxzZQogICAgdmFyaWFibGVfaWRzOiBmYWxzZQogICAgc2VjcmV0X2lkczogZmFsc2UKICBmbGlnaHRfcGxhbl9pZDogZmFsc2UKICBjb2RlOiBmYWxzZQogIHZhcmlhYmxlX2lkczogZmFsc2UKICBzZWNyZXRfaWRzOgogIC0gcmVmZXJlbmNlOiBzZWNyZXRfMQogICAgbmFtZTogU2VjcmV0IDEKICAgIGtleV90eXBlOiBzCiAgICBub3RlOiBmYWxzZQogIC0gcmVmZXJlbmNlOiBzZWNyZXRfMgogICAgbmFtZTogU2VjcmV0IDIKICAgIGtleV90eXBlOiBzCiAgICBub3RlOiBmYWxzZQoiIiIKICAgICAgICBzZWNyZXRfbGlzdCA9IHNlbGYuZW52WyJjeC50b3dlci55YW1sLmltcG9ydC53aXoiXS5fZXh0cmFjdF9zZWNyZXRfbmFtZXMoCiAgICAgICAgICAgIHlhbWwuc2FmZV9sb2FkKHlhbWxfY29kZSkKICAgICAgICApCiAgICAgICAgIyBXZSBleHBlY3QgNiBzZWNyZXRzIGluIHRoZSBsaXN0OgogICAgICAgICMgMiBrZXlzOiAnVGVzdCBTU0ggS2V5JywgJ0Fub3RoZXIgU1NIIEtleScKICAgICAgICAjIDQgc2VjcmV0czogJ1NlY3JldCAzJywgJ1NlY3JldCA0JywgJ1NlY3JldCAxJywgJ1NlY3JldCAyJwogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlY3JldF9saXN0KSwgNiwgIlNlY3JldCBsaXN0IGxlbmd0aCBpcyBub3QgY29ycmVjdCIpCiAgICAgICAgc2VsZi5hc3NlcnRJbigiVGVzdCBTU0ggS2V5Iiwgc2VjcmV0X2xpc3QsICJLZXkgaXMgbm90IGluIHRoZSBsaXN0IikKICAgICAgICBzZWxmLmFzc2VydEluKCJBbm90aGVyIFNTSCBLZXkiLCBzZWNyZXRfbGlzdCwgIktleSBpcyBub3QgaW4gdGhlIGxpc3QiKQogICAgICAgIHNlbGYuYXNzZXJ0SW4oIlNlY3JldCAzIiwgc2VjcmV0X2xpc3QsICJLZXkgaXMgbm90IGluIHRoZSBsaXN0IikKICAgICAgICBzZWxmLmFzc2VydEluKCJTZWNyZXQgNCIsIHNlY3JldF9saXN0LCAiS2V5IGlzIG5vdCBpbiB0aGUgbGlzdCIpCiAgICAgICAgc2VsZi5hc3NlcnRJbigiU2VjcmV0IDEiLCBzZWNyZXRfbGlzdCwgIktleSBpcyBub3QgaW4gdGhlIGxpc3QiKQogICAgICAgIHNlbGYuYXNzZXJ0SW4oIlNlY3JldCAyIiwgc2VjcmV0X2xpc3QsICJLZXkgaXMgbm90IGluIHRoZSBsaXN0IikKCiAgICBkZWYgdGVzdF9leHRyYWN0X3NlY3JldF9uYW1lc193aXRoX2tleV9pZChzZWxmKToKICAgICAgICAiIiJUZXN0IGV4dHJhY3Qgc2VjcmV0IG5hbWVzIHdoZW4gc2VjcmV0cyBhcmUgbmVzdGVkIHVuZGVyIGtleV9pZCIiIgogICAgICAgIHlhbWxfY29kZSA9ICIiImNldG1peF90b3dlcl95YW1sX3ZlcnNpb246IDEKcmVjb3JkczoKLSBjZXRtaXhfdG93ZXJfbW9kZWw6IHRlc3RfbW9kZWwKICByZWZlcmVuY2U6IHJlY18xCiAgbmFtZTogVGVzdCBSZWNvcmQKICBzZWNyZXRfaWRzOgogICAgLSBrZXlfaWQ6CiAgICAgICAgcmVmZXJlbmNlOiBzZWNyZXRfMQogICAgICAgIG5hbWU6IE5lc3RlZCBTZWNyZXQgMQogICAgLSBrZXlfaWQ6CiAgICAgICAgcmVmZXJlbmNlOiBzZWNyZXRfMgogICAgICAgIG5hbWU6IE5lc3RlZCBTZWNyZXQgMgogIHNzaF9rZXlfaWQ6CiAgICBuYW1lOiBTU0ggS2V5IE5lc3RlZAoiIiIKICAgICAgICBzZWNyZXRfbGlzdCA9IHNlbGYuZW52WyJjeC50b3dlci55YW1sLmltcG9ydC53aXoiXS5fZXh0cmFjdF9zZWNyZXRfbmFtZXMoCiAgICAgICAgICAgIHlhbWwuc2FmZV9sb2FkKHlhbWxfY29kZSkKICAgICAgICApCgogICAgICAgICMgV2UgZXhwZWN0IDMgc2VjcmV0cyB0b3RhbDoKICAgICAgICAjIC0gU1NIIEtleSBOZXN0ZWQgKGZyb20gc3NoX2tleV9pZCkKICAgICAgICAjIC0gTmVzdGVkIFNlY3JldCAxCiAgICAgICAgIyAtIE5lc3RlZCBTZWNyZXQgMgogICAgICAgIHNlbGYuYXNzZXJ0Q291bnRFcXVhbCgKICAgICAgICAgICAgc2VjcmV0X2xpc3QsCiAgICAgICAgICAgIFsiTmVzdGVkIFNlY3JldCAxIiwgIk5lc3RlZCBTZWNyZXQgMiIsICJTU0ggS2V5IE5lc3RlZCJdLAogICAgICAgICAgICAiVW5leHBlY3RlZCBzZWNyZXRzIGV4dHJhY3RlZCBmb3IgbmVzdGVkIHN0cnVjdHVyZSIsCiAgICAgICAgKQoKICAgIGRlZiB0ZXN0X2NyZWF0ZV9yZWNvcmRzX2RpZmZlcmVudF9tb2RlbHMoc2VsZik6CiAgICAgICAgIiIiVGVzdCBjcmVhdGUgcmVjb3JkcyB3aXRoIGRpZmZlcmVudCBtb2RlbHMiIiIKCiAgICAgICAgeWFtbF9jb2RlID0gIiIiY2V0bWl4X3Rvd2VyX3lhbWxfdmVyc2lvbjogMQpyZWNvcmRzOgotIGNldG1peF90b3dlcl9tb2RlbDogY29tbWFuZAogIGFjY2Vzc19sZXZlbDogbWFuYWdlcgogIHJlZmVyZW5jZTogbXVjaF9tdWNoX2NvbW1hbmQKICBuYW1lOiBNdWNoIE11Y2ggQ29tbWFuZAogIGFjdGlvbjogZmlsZV91c2luZ190ZW1wbGF0ZQogIGFsbG93X3BhcmFsbGVsX3J1bjogZmFsc2UKICBub3RlOiBKdXN0IGEgbm90ZQogIG9zX2lkczogZmFsc2UKICB0YWdfaWRzOiBmYWxzZQogIHBhdGg6IGZhbHNlCiAgZmlsZV90ZW1wbGF0ZV9pZDogZmFsc2UKICBmbGlnaHRfcGxhbl9pZDogZmFsc2UKICBjb2RlOiBmYWxzZQogIHZhcmlhYmxlX2lkczogZmFsc2UKICBzZWNyZXRfaWRzOiBmYWxzZQogIHNzaF9rZXlfaWQ6CiAgICByZWZlcmVuY2U6IHRlc3Rfc3NoX2tleQogICAgbmFtZTogVGVzdCBTU0ggS2V5CiAgICBrZXlfdHlwZTogawogICAgbm90ZTogZmFsc2UKLSBjZXRtaXhfdG93ZXJfbW9kZWw6IHNlcnZlcl90ZW1wbGF0ZQogIHJlZmVyZW5jZTogd293X211Y2hfc2VydmVyX3RlbXBsYXRlCiAgbmFtZTogV293IE11Y2ggU2VydmVyIFRlbXBsYXRlCiAgbm90ZTogSnVzdCBhIG5vdGUgMgotIGNldG1peF90b3dlcl9tb2RlbDogdGFnCiAgcmVmZXJlbmNlOiBzdWNoX211Y2hfdGFnCiAgbmFtZTogU3VjaCBNdWNoIFRhZwoiIiIKICAgICAgICAjIENyZWF0ZSBhIG5ldyBjb21tYW5kIHJlY29yZAogICAgICAgIHNlbGYuaW1wb3J0X3dpemFyZC5pZl9yZWNvcmRfZXhpc3RzID0gInVwZGF0ZSIKICAgICAgICBzZWxmLmltcG9ydF93aXphcmQueWFtbF9jb2RlID0geWFtbF9jb2RlCgogICAgICAgIGFjdGlvbiA9IHNlbGYuaW1wb3J0X3dpemFyZC5hY3Rpb25faW1wb3J0X3lhbWwoKQoKICAgICAgICAjIENoZWNrIGlmIGFjdGlvbiBpcyBjb21wb3NlZCBwcm9wZXJseQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIGFjdGlvblsidHlwZSJdLAogICAgICAgICAgICAiaXIuYWN0aW9ucy5jbGllbnQiLAogICAgICAgICAgICAiSW1wb3J0IHdpemFyZCBhY3Rpb24gdHlwZSBpcyBub3QgY29ycmVjdCIsCiAgICAgICAgKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIGFjdGlvblsidGFnIl0sCiAgICAgICAgICAgICJkaXNwbGF5X25vdGlmaWNhdGlvbiIsCiAgICAgICAgICAgICJJbXBvcnQgd2l6YXJkIGFjdGlvbiB0YWcgaXMgbm90IGNvcnJlY3QiLAogICAgICAgICkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICBhY3Rpb25bInBhcmFtcyJdWyJ0aXRsZSJdLAogICAgICAgICAgICBfKCJSZWNvcmQgSW1wb3J0IiksCiAgICAgICAgICAgICJJbXBvcnQgd2l6YXJkIGFjdGlvbiB0aXRsZSBpcyBub3QgY29ycmVjdCIsCiAgICAgICAgKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIGFjdGlvblsicGFyYW1zIl1bInR5cGUiXSwKICAgICAgICAgICAgInN1Y2Nlc3MiLAogICAgICAgICAgICAiSW1wb3J0IHdpemFyZCBhY3Rpb24gdHlwZSBpcyBub3QgY29ycmVjdCIsCiAgICAgICAgKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIGFjdGlvblsicGFyYW1zIl1bInN0aWNreSJdLAogICAgICAgICAgICBUcnVlLAogICAgICAgICAgICAiSW1wb3J0IHdpemFyZCBhY3Rpb24gc3RpY2t5IGlzIG5vdCBjb3JyZWN0IiwKICAgICAgICApCgogICAgICAgICMgQ2hlY2sgY29tbWFuZAogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKICAgICAgICAgICAgc2VsZi5Db21tYW5kLmdldF9ieV9yZWZlcmVuY2UoIm11Y2hfbXVjaF9jb21tYW5kIiksCiAgICAgICAgICAgICJDb21tYW5kIG11c3QgYmUgY3JlYXRlZCIsCiAgICAgICAgKQoKICAgICAgICAjIENoZWNrIHNlcnZlciB0ZW1wbGF0ZQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKICAgICAgICAgICAgc2VsZi5lbnZbImN4LnRvd2VyLnNlcnZlci50ZW1wbGF0ZSJdLmdldF9ieV9yZWZlcmVuY2UoCiAgICAgICAgICAgICAgICAid293X211Y2hfc2VydmVyX3RlbXBsYXRlIgogICAgICAgICAgICApLAogICAgICAgICAgICAiU2VydmVyIHRlbXBsYXRlIG11c3QgYmUgY3JlYXRlZCIsCiAgICAgICAgKQoKICAgICAgICAjIENoZWNrIHRhZwogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKICAgICAgICAgICAgc2VsZi5UYWcuZ2V0X2J5X3JlZmVyZW5jZSgic3VjaF9tdWNoX3RhZyIpLCAiVGFnIG11c3QgYmUgY3JlYXRlZCIKICAgICAgICApCgogICAgZGVmIHRlc3RfYWN0aW9uX2ltcG9ydF95YW1sX2RlZmVyc19jb21tYW5kX3RlbXBsYXRlX2xpbmtzKHNlbGYpOgogICAgICAgICIiIkZvcndhcmQgcmVmZXJlbmNlcyBmb3IgY29tbWFuZCB0ZW1wbGF0ZSBsaW5rcyBtdXN0IHJlc29sdmUgYWZ0ZXIgaW1wb3J0LiIiIgogICAgICAgIHlhbWxfY29kZSA9ICIiImNldG1peF90b3dlcl95YW1sX3ZlcnNpb246IDEKcmVjb3JkczoKLSBjZXRtaXhfdG93ZXJfbW9kZWw6IGNvbW1hbmQKICByZWZlcmVuY2U6IGRlZmVycmVkX2pldF9jb21tYW5kCiAgbmFtZTogRGVmZXJyZWQgSmV0IENvbW1hbmQKICBhY3Rpb246IGpldF9hY3Rpb24KICBqZXRfdGVtcGxhdGVfaWQ6IGRlZmVycmVkX2pldF90ZW1wbGF0ZQotIGNldG1peF90b3dlcl9tb2RlbDogY29tbWFuZAogIHJlZmVyZW5jZTogZGVmZXJyZWRfd2F5cG9pbnRfY29tbWFuZAogIG5hbWU6IERlZmVycmVkIFdheXBvaW50IENvbW1hbmQKICBhY3Rpb246IGNyZWF0ZV93YXlwb2ludAogIHdheXBvaW50X3RlbXBsYXRlX2lkOgogICAgcmVmZXJlbmNlOiBkZWZlcnJlZF93YXlwb2ludF90ZW1wbGF0ZQotIGNldG1peF90b3dlcl9tb2RlbDogamV0X3RlbXBsYXRlCiAgcmVmZXJlbmNlOiBkZWZlcnJlZF9qZXRfdGVtcGxhdGUKICBuYW1lOiBEZWZlcnJlZCBKZXQgVGVtcGxhdGUKLSBjZXRtaXhfdG93ZXJfbW9kZWw6IGpldF93YXlwb2ludF90ZW1wbGF0ZQogIHJlZmVyZW5jZTogZGVmZXJyZWRfd2F5cG9pbnRfdGVtcGxhdGUKICBuYW1lOiBEZWZlcnJlZCBXYXlwb2ludCBUZW1wbGF0ZQogIGpldF90ZW1wbGF0ZV9pZDogZGVmZXJyZWRfamV0X3RlbXBsYXRlCiIiIgogICAgICAgIHdpeiA9IHNlbGYuX2NyZWF0ZV9pbXBvcnRfd2l6YXJkKHlhbWxfY29kZSkKCiAgICAgICAgd2l6LmFjdGlvbl9pbXBvcnRfeWFtbCgpCgogICAgICAgIGRlZmVycmVkX2pldF9jb21tYW5kID0gc2VsZi5Db21tYW5kLmdldF9ieV9yZWZlcmVuY2UoImRlZmVycmVkX2pldF9jb21tYW5kIikKICAgICAgICBkZWZlcnJlZF93YXlwb2ludF9jb21tYW5kID0gc2VsZi5Db21tYW5kLmdldF9ieV9yZWZlcmVuY2UoCiAgICAgICAgICAgICJkZWZlcnJlZF93YXlwb2ludF9jb21tYW5kIgogICAgICAgICkKICAgICAgICBkZWZlcnJlZF9qZXRfdGVtcGxhdGUgPSBzZWxmLmVudlsiY3gudG93ZXIuamV0LnRlbXBsYXRlIl0uZ2V0X2J5X3JlZmVyZW5jZSgKICAgICAgICAgICAgImRlZmVycmVkX2pldF90ZW1wbGF0ZSIKICAgICAgICApCiAgICAgICAgZGVmZXJyZWRfd2F5cG9pbnRfdGVtcGxhdGUgPSBzZWxmLmVudlsKICAgICAgICAgICAgImN4LnRvd2VyLmpldC53YXlwb2ludC50ZW1wbGF0ZSIKICAgICAgICBdLmdldF9ieV9yZWZlcmVuY2UoImRlZmVycmVkX3dheXBvaW50X3RlbXBsYXRlIikKCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAogICAgICAgICAgICBkZWZlcnJlZF9qZXRfY29tbWFuZCwKICAgICAgICAgICAgIkpldCBhY3Rpb24gY29tbWFuZCBtdXN0IGJlIGNyZWF0ZWQgZHVyaW5nIFlBTUwgaW1wb3J0IiwKICAgICAgICApCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgZGVmZXJyZWRfamV0X2NvbW1hbmQuamV0X3RlbXBsYXRlX2lkLAogICAgICAgICAgICBkZWZlcnJlZF9qZXRfdGVtcGxhdGUsCiAgICAgICAgICAgICJEZWZlcnJlZCBqZXQgdGVtcGxhdGUgbGluayBtdXN0IGJlIHdyaXR0ZW4gYWZ0ZXIgdGhlIG1haW4gaW1wb3J0IHBhc3MiLAogICAgICAgICkKICAgICAgICBzZWxmLmFzc2VydFRydWUoCiAgICAgICAgICAgIGRlZmVycmVkX3dheXBvaW50X2NvbW1hbmQsCiAgICAgICAgICAgICJXYXlwb2ludCBjb21tYW5kIG11c3QgYmUgY3JlYXRlZCBkdXJpbmcgWUFNTCBpbXBvcnQiLAogICAgICAgICkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICBkZWZlcnJlZF93YXlwb2ludF9jb21tYW5kLndheXBvaW50X3RlbXBsYXRlX2lkLAogICAgICAgICAgICBkZWZlcnJlZF93YXlwb2ludF90ZW1wbGF0ZSwKICAgICAgICAgICAgIkRlZmVycmVkIHdheXBvaW50IHRlbXBsYXRlIGxpbmsgbXVzdCBiZSB3cml0dGVuICIKICAgICAgICAgICAgImFmdGVyIHRoZSBtYWluIGltcG9ydCBwYXNzIiwKICAgICAgICApCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgZGVmZXJyZWRfd2F5cG9pbnRfdGVtcGxhdGUuamV0X3RlbXBsYXRlX2lkLAogICAgICAgICAgICBkZWZlcnJlZF9qZXRfdGVtcGxhdGUsCiAgICAgICAgICAgICJXYXlwb2ludCB0ZW1wbGF0ZSBtdXN0IGtlZXAgaXRzIGRlZmVycmVkIGpldCB0ZW1wbGF0ZSBsaW5rIGFmdGVyIGltcG9ydCIsCiAgICAgICAgKQoKICAgIGRlZiB0ZXN0X2FjdGlvbl9pbXBvcnRfeWFtbF9kZWZlcnNfcGxhbl9saW5lX2NvbW1hbmRfZm9yd2FyZF9yZWYoc2VsZik6CiAgICAgICAgIiIiUGxhbiBsaW5lcyBtYXkgcmVmZXJlbmNlIGEgY29tbWFuZCBzdGlsbCBiZWluZyBjcmVhdGVkIChkZWVwIFlBTUwgY3ljbGUpLiIiIgogICAgICAgIHlhbWxfY29kZSA9ICIiImNldG1peF90b3dlcl95YW1sX3ZlcnNpb246IDEKcmVjb3JkczoKLSBjZXRtaXhfdG93ZXJfbW9kZWw6IGNvbW1hbmQKICByZWZlcmVuY2U6IHlhbWxfZGVmZXJfcGxhbl9jaXJjX2NtZAogIG5hbWU6IFlBTUwgZGVmZXIgcGxhbiBjaXJjIGNvbW1hbmQKICBhY3Rpb246IGNyZWF0ZV93YXlwb2ludAogIGFsbG93X3BhcmFsbGVsX3J1bjogZmFsc2UKICBub3RlOiBmYWxzZQogIHBhdGg6IGZhbHNlCiAgaWZfZmlsZV9leGlzdHM6IHNraXAKICBkaXNjb25uZWN0X2ZpbGU6IGZhbHNlCiAgZmx5X2hlcmU6IGZhbHNlCiAgd2F5cG9pbnRfdGVtcGxhdGVfaWQ6CiAgICByZWZlcmVuY2U6IHlhbWxfZGVmZXJfcGxhbl9jaXJjX3dwCiAgICBuYW1lOiBZQU1MIGRlZmVyIGNpcmMgd2F5cG9pbnQKICAgIHNlcXVlbmNlOiAxMAogICAgYWNjZXNzX2xldmVsOiBtYW5hZ2VyCiAgICBub3RlOiBmYWxzZQogICAgamV0X3RlbXBsYXRlX2lkOgogICAgICByZWZlcmVuY2U6IHlhbWxfZGVmZXJfcGxhbl9jaXJjX2pldAogICAgICBuYW1lOiBZQU1MIGRlZmVyIGNpcmMgamV0CiAgICAgIG5vdGU6IGZhbHNlCiAgICAgIGxpbWl0X3Blcl9zZXJ2ZXI6IDAKICAgICAgc2hvd19pbl9jcmVhdGVfd2l6YXJkOiBmYWxzZQogICAgICBhY3Rpb25faWRzOgogICAgICAtIHJlZmVyZW5jZTogeWFtbF9kZWZlcl9wbGFuX2NpcmNfYWN0aW9uCiAgICAgICAgbmFtZTogWUFNTCBkZWZlciBjaXJjIGFjdGlvbgogICAgICAgIG5vdGU6IGZhbHNlCiAgICAgICAgcHJpb3JpdHk6IDEwCiAgICAgICAgYWNjZXNzX2xldmVsOiBtYW5hZ2VyCiAgICAgICAgc3RhdGVfZnJvbV9pZDoKICAgICAgICAgIHJlZmVyZW5jZTogc3RvcHBlZAogICAgICAgIHN0YXRlX3RyYW5zaXRfaWQ6CiAgICAgICAgICByZWZlcmVuY2U6IGJ1aWxkaW5nCiAgICAgICAgc3RhdGVfdG9faWQ6CiAgICAgICAgICByZWZlcmVuY2U6IHN0b3BwZWQKICAgICAgICBwbGFuX2lkOgogICAgICAgICAgcmVmZXJlbmNlOiB5YW1sX2RlZmVyX3BsYW5fY2lyY19wbGFuCiAgICAgICAgICBuYW1lOiBZQU1MIGRlZmVyIGNpcmMgcGxhbgogICAgICAgICAgYWNjZXNzX2xldmVsOiBtYW5hZ2VyCiAgICAgICAgICBhbGxvd19wYXJhbGxlbF9ydW46IGZhbHNlCiAgICAgICAgICBjb2xvcjogMAogICAgICAgICAgbm90ZTogZmFsc2UKICAgICAgICAgIG9uX2Vycm9yX2FjdGlvbjogZQogICAgICAgICAgY3VzdG9tX2V4aXRfY29kZTogMAogICAgICAgICAgbGluZV9pZHM6CiAgICAgICAgICAtIHJlZmVyZW5jZTogeWFtbF9kZWZlcl9wbGFuX2NpcmNfbGluZQogICAgICAgICAgICBzZXF1ZW5jZTogMTAKICAgICAgICAgICAgY29uZGl0aW9uOiBmYWxzZQogICAgICAgICAgICB1c2Vfc3VkbzogZmFsc2UKICAgICAgICAgICAgcGF0aDogZmFsc2UKICAgICAgICAgICAgY29tbWFuZF9pZDoKICAgICAgICAgICAgICByZWZlcmVuY2U6IHlhbWxfZGVmZXJfcGxhbl9jaXJjX2NtZAogICAgICAgICAgICBpc19tYWtlX2NvcHk6IGZhbHNlCiIiIgogICAgICAgIHdpeiA9IHNlbGYuX2NyZWF0ZV9pbXBvcnRfd2l6YXJkKHlhbWxfY29kZSkKICAgICAgICB3aXouYWN0aW9uX2ltcG9ydF95YW1sKCkKCiAgICAgICAgY29tbWFuZCA9IHNlbGYuQ29tbWFuZC5nZXRfYnlfcmVmZXJlbmNlKCJ5YW1sX2RlZmVyX3BsYW5fY2lyY19jbWQiKQogICAgICAgIHBsYW4gPSBzZWxmLkZsaWdodFBsYW4uZ2V0X2J5X3JlZmVyZW5jZSgieWFtbF9kZWZlcl9wbGFuX2NpcmNfcGxhbiIpCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbW1hbmQsICJDb21tYW5kIG11c3QgYmUgY3JlYXRlZCIpCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBsYW4sICJQbGFuIG11c3QgYmUgY3JlYXRlZCIpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgbGVuKHBsYW4ubGluZV9pZHMpLAogICAgICAgICAgICAxLAogICAgICAgICAgICAiRGVmZXJyZWQgcGxhbiBsaW5lIG11c3QgYmUgY3JlYXRlZCBhZnRlciB0aGUgY29tbWFuZCBleGlzdHMiLAogICAgICAgICkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICBwbGFuLmxpbmVfaWRzLmNvbW1hbmRfaWQsCiAgICAgICAgICAgIGNvbW1hbmQsCiAgICAgICAgICAgICJQbGFuIGxpbmUgY29tbWFuZF9pZCBtdXN0IHJlc29sdmUgdG8gdGhlIGVuY2xvc2luZyBjb21tYW5kIiwKICAgICAgICApCgogICAgZGVmIHRlc3RfYWN0aW9uX2ltcG9ydF95YW1sX2RlZmVyc190ZW1wbGF0ZV9kZXBlbmRlbmN5X2NoaWxkcmVuKHNlbGYpOgogICAgICAgICIiIkZvcndhcmQgcmVmZXJlbmNlcyBpbnNpZGUgdGVtcGxhdGUgZGVwZW5kZW5jeSBjaGlsZHJlbiBtdXN0IHJlc29sdmUuIiIiCiAgICAgICAgeWFtbF9jb2RlID0gIiIiY2V0bWl4X3Rvd2VyX3lhbWxfdmVyc2lvbjogMQpyZWNvcmRzOgotIGNldG1peF90b3dlcl9tb2RlbDogamV0X3RlbXBsYXRlCiAgcmVmZXJlbmNlOiBvd25lcl90ZW1wbGF0ZV93aXRoX2RlcGVuZGVuY3kKICBuYW1lOiBPd25lciBUZW1wbGF0ZSBXaXRoIERlcGVuZGVuY3kKICB0ZW1wbGF0ZV9yZXF1aXJlc19pZHM6CiAgLSByZWZlcmVuY2U6IGZhbHNlCiAgICB0ZW1wbGF0ZV9yZXF1aXJlZF9pZDoKICAgICAgcmVmZXJlbmNlOiBmdXR1cmVfdGVtcGxhdGVfZGVwZW5kZW5jeQogICAgc3RhdGVfcmVxdWlyZWRfaWQ6CiAgICAgIHJlZmVyZW5jZTogcnVubmluZwotIGNldG1peF90b3dlcl9tb2RlbDogamV0X3RlbXBsYXRlCiAgcmVmZXJlbmNlOiBmdXR1cmVfdGVtcGxhdGVfZGVwZW5kZW5jeQogIG5hbWU6IEZ1dHVyZSBUZW1wbGF0ZSBEZXBlbmRlbmN5CiIiIgogICAgICAgIHdpeiA9IHNlbGYuX2NyZWF0ZV9pbXBvcnRfd2l6YXJkKHlhbWxfY29kZSkKCiAgICAgICAgd2l6LmFjdGlvbl9pbXBvcnRfeWFtbCgpCgogICAgICAgIG93bmVyX3RlbXBsYXRlID0gc2VsZi5lbnZbImN4LnRvd2VyLmpldC50ZW1wbGF0ZSJdLmdldF9ieV9yZWZlcmVuY2UoCiAgICAgICAgICAgICJvd25lcl90ZW1wbGF0ZV93aXRoX2RlcGVuZGVuY3kiCiAgICAgICAgKQogICAgICAgIGZ1dHVyZV90ZW1wbGF0ZSA9IHNlbGYuZW52WyJjeC50b3dlci5qZXQudGVtcGxhdGUiXS5nZXRfYnlfcmVmZXJlbmNlKAogICAgICAgICAgICAiZnV0dXJlX3RlbXBsYXRlX2RlcGVuZGVuY3kiCiAgICAgICAgKQoKICAgICAgICBzZWxmLmFzc2VydFRydWUob3duZXJfdGVtcGxhdGUsICJPd25lciB0ZW1wbGF0ZSBtdXN0IGJlIGNyZWF0ZWQiKQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKICAgICAgICAgICAgb3duZXJfdGVtcGxhdGUudGVtcGxhdGVfcmVxdWlyZXNfaWRzLAogICAgICAgICAgICAiRGVmZXJyZWQgZGVwZW5kZW5jeSBjaGlsZCBtdXN0IGJlIGNyZWF0ZWQgYWZ0ZXIgdGhlIG1haW4gaW1wb3J0IHBhc3MiLAogICAgICAgICkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICBvd25lcl90ZW1wbGF0ZS50ZW1wbGF0ZV9yZXF1aXJlc19pZHMudGVtcGxhdGVfcmVxdWlyZWRfaWQsCiAgICAgICAgICAgIGZ1dHVyZV90ZW1wbGF0ZSwKICAgICAgICAgICAgIkRlZmVycmVkIGRlcGVuZGVuY3kgY2hpbGQgbXVzdCByZXNvbHZlIHRoZSByZXF1aXJlZCB0ZW1wbGF0ZSIsCiAgICAgICAgKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIG93bmVyX3RlbXBsYXRlLnRlbXBsYXRlX3JlcXVpcmVzX2lkcy5zdGF0ZV9yZXF1aXJlZF9pZC5yZWZlcmVuY2UsCiAgICAgICAgICAgICJydW5uaW5nIiwKICAgICAgICAgICAgIkRlZmVycmVkIGRlcGVuZGVuY3kgY2hpbGQgbXVzdCBwcmVzZXJ2ZSBpdHMgcmVxdWlyZWQgc3RhdGUiLAogICAgICAgICkKCiAgICBkZWYgdGVzdF9hY3Rpb25faW1wb3J0X3lhbWxfZGVmZXJzX3NjaGVkdWxlZF90YXNrX2N1c3RvbV92YWx1ZXMoc2VsZik6CiAgICAgICAgIiIiRm9yd2FyZCByZWZlcmVuY2VzIGluc2lkZSBzY2hlZHVsZWQtdGFzayBjdXN0b20gdmFsdWVzIG11c3QgcmVzb2x2ZS4iIiIKICAgICAgICB5YW1sX2NvZGUgPSAiIiJjZXRtaXhfdG93ZXJfeWFtbF92ZXJzaW9uOiAxCnJlY29yZHM6Ci0gY2V0bWl4X3Rvd2VyX21vZGVsOiBzY2hlZHVsZWRfdGFzawogIHJlZmVyZW5jZTogZGVmZXJyZWRfc2NoZWR1bGVkX3Rhc2sKICBuYW1lOiBEZWZlcnJlZCBTY2hlZHVsZWQgVGFzawogIGFjdGlvbjogY29tbWFuZAogIGNvbW1hbmRfaWQ6CiAgICByZWZlcmVuY2U6IHRlc3RfeWFtbF9jb21tYW5kCiAgaW50ZXJ2YWxfbnVtYmVyOiAxCiAgaW50ZXJ2YWxfdHlwZTogZGF5cwogIG5leHRfY2FsbDogMjAyNi0wMy0yNyAwMDowMDowMAogIGN1c3RvbV92YXJpYWJsZV92YWx1ZV9pZHM6CiAgLSByZWZlcmVuY2U6IGZhbHNlCiAgICB2YXJpYWJsZV92YWx1ZV9pZDoKICAgICAgcmVmZXJlbmNlOiBkZWZlcnJlZF9zY2hlZHVsZWRfdGFza192YXJpYWJsZV92YWx1ZQotIGNldG1peF90b3dlcl9tb2RlbDogdmFyaWFibGVfdmFsdWUKICByZWZlcmVuY2U6IGRlZmVycmVkX3NjaGVkdWxlZF90YXNrX3ZhcmlhYmxlX3ZhbHVlCiAgdmFyaWFibGVfaWQ6CiAgICByZWZlcmVuY2U6IHlhbWxfdGVzdAogIHZhbHVlX2NoYXI6IERlZmVycmVkIFZhbHVlCiIiIgogICAgICAgIHdpeiA9IHNlbGYuX2NyZWF0ZV9pbXBvcnRfd2l6YXJkKHlhbWxfY29kZSkKCiAgICAgICAgd2l6LmFjdGlvbl9pbXBvcnRfeWFtbCgpCgogICAgICAgIHNjaGVkdWxlZF90YXNrID0gc2VsZi5lbnZbImN4LnRvd2VyLnNjaGVkdWxlZC50YXNrIl0uZ2V0X2J5X3JlZmVyZW5jZSgKICAgICAgICAgICAgImRlZmVycmVkX3NjaGVkdWxlZF90YXNrIgogICAgICAgICkKICAgICAgICB2YXJpYWJsZV92YWx1ZSA9IHNlbGYuZW52WyJjeC50b3dlci52YXJpYWJsZS52YWx1ZSJdLmdldF9ieV9yZWZlcmVuY2UoCiAgICAgICAgICAgICJkZWZlcnJlZF9zY2hlZHVsZWRfdGFza192YXJpYWJsZV92YWx1ZSIKICAgICAgICApCgogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzY2hlZHVsZWRfdGFzaywgIlNjaGVkdWxlZCB0YXNrIG11c3QgYmUgY3JlYXRlZCIpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgbGVuKHNjaGVkdWxlZF90YXNrLmN1c3RvbV92YXJpYWJsZV92YWx1ZV9pZHMpLAogICAgICAgICAgICAxLAogICAgICAgICAgICAiRGVmZXJyZWQgc2NoZWR1bGVkLXRhc2sgY3VzdG9tIHZhbHVlIG11c3QgYmUgY3JlYXRlZCBhZnRlciBpbXBvcnQiLAogICAgICAgICkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICBzY2hlZHVsZWRfdGFzay5jdXN0b21fdmFyaWFibGVfdmFsdWVfaWRzLnZhcmlhYmxlX3ZhbHVlX2lkLAogICAgICAgICAgICB2YXJpYWJsZV92YWx1ZSwKICAgICAgICAgICAgIkRlZmVycmVkIHNjaGVkdWxlZC10YXNrIGN1c3RvbSB2YWx1ZSBtdXN0IHJlc29sdmUgdmFyaWFibGVfdmFsdWVfaWQiLAogICAgICAgICkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICBzY2hlZHVsZWRfdGFzay5jdXN0b21fdmFyaWFibGVfdmFsdWVfaWRzLnZhcmlhYmxlX2lkLAogICAgICAgICAgICB2YXJpYWJsZV92YWx1ZS52YXJpYWJsZV9pZCwKICAgICAgICAgICAgIkRlZmVycmVkIHNjaGVkdWxlZC10YXNrIGN1c3RvbSB2YWx1ZSBtdXN0IHJlc3RvcmUgdmFyaWFibGVfaWQiLAogICAgICAgICkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICBzY2hlZHVsZWRfdGFzay5jdXN0b21fdmFyaWFibGVfdmFsdWVfaWRzLnZhbHVlX2NoYXIsCiAgICAgICAgICAgIHZhcmlhYmxlX3ZhbHVlLnZhbHVlX2NoYXIsCiAgICAgICAgICAgICJEZWZlcnJlZCBzY2hlZHVsZWQtdGFzayBjdXN0b20gdmFsdWUgbXVzdCByZXN0b3JlIHZhbHVlX2NoYXIiLAogICAgICAgICkKCiAgICBkZWYgdGVzdF9hY3Rpb25faW1wb3J0X3lhbWxfYWdncmVnYXRlc19taXNzaW5nX2RlZmVycmVkX2xpbmtzKHNlbGYpOgogICAgICAgICIiIk1pc3NpbmcgZGVmZXJyZWQgY29tbWFuZCB0ZW1wbGF0ZSBsaW5rcyBtdXN0IGZhaWwgd2l0aCBvbmUgY2xlYXIgZXJyb3IuIiIiCiAgICAgICAgeWFtbF9jb2RlID0gIiIiY2V0bWl4X3Rvd2VyX3lhbWxfdmVyc2lvbjogMQpyZWNvcmRzOgotIGNldG1peF90b3dlcl9tb2RlbDogY29tbWFuZAogIHJlZmVyZW5jZTogY29tbWFuZF9taXNzaW5nX2pldF90ZW1wbGF0ZQogIG5hbWU6IENvbW1hbmQgTWlzc2luZyBKZXQgVGVtcGxhdGUKICBhY3Rpb246IGpldF9hY3Rpb24KICBqZXRfdGVtcGxhdGVfaWQ6IG1pc3NpbmdfamV0X3RlbXBsYXRlCi0gY2V0bWl4X3Rvd2VyX21vZGVsOiBjb21tYW5kCiAgcmVmZXJlbmNlOiBjb21tYW5kX21pc3Npbmdfd2F5cG9pbnRfdGVtcGxhdGUKICBuYW1lOiBDb21tYW5kIE1pc3NpbmcgV2F5cG9pbnQgVGVtcGxhdGUKICBhY3Rpb246IGNyZWF0ZV93YXlwb2ludAogIHdheXBvaW50X3RlbXBsYXRlX2lkOgogICAgcmVmZXJlbmNlOiBtaXNzaW5nX3dheXBvaW50X3RlbXBsYXRlCi0gY2V0bWl4X3Rvd2VyX21vZGVsOiBjb21tYW5kCiAgcmVmZXJlbmNlOiBjb21tYW5kX3ZhbGlkX2RlZmVycmVkX3RlbXBsYXRlCiAgbmFtZTogQ29tbWFuZCBWYWxpZCBEZWZlcnJlZCBUZW1wbGF0ZQogIGFjdGlvbjogamV0X2FjdGlvbgogIGpldF90ZW1wbGF0ZV9pZDogdmFsaWRfZGVmZXJyZWRfamV0X3RlbXBsYXRlCi0gY2V0bWl4X3Rvd2VyX21vZGVsOiBqZXRfdGVtcGxhdGUKICByZWZlcmVuY2U6IHZhbGlkX2RlZmVycmVkX2pldF90ZW1wbGF0ZQogIG5hbWU6IFZhbGlkIERlZmVycmVkIEpldCBUZW1wbGF0ZQoiIiIKICAgICAgICB3aXogPSBzZWxmLl9jcmVhdGVfaW1wb3J0X3dpemFyZCh5YW1sX2NvZGUpCgogICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsaWRhdGlvbkVycm9yKSBhcyBlcnI6CiAgICAgICAgICAgIHdpei5hY3Rpb25faW1wb3J0X3lhbWwoKQoKICAgICAgICBlcnJvcl9tZXNzYWdlID0gc3RyKGVyci5leGNlcHRpb24pCiAgICAgICAgc2VsZi5hc3NlcnRJbigKICAgICAgICAgICAgIkRlZmVycmVkIHJlbGF0aW9uIHJlc29sdXRpb24gZmFpbGVkIiwKICAgICAgICAgICAgZXJyb3JfbWVzc2FnZSwKICAgICAgICAgICAgIkltcG9ydCBtdXN0IHJhaXNlIG9uZSBhZ2dyZWdhdGVkIGRlZmVycmVkLXJlc29sdXRpb24gZXJyb3IiLAogICAgICAgICkKICAgICAgICBzZWxmLmFzc2VydEluKAogICAgICAgICAgICAiUmVjb3JkIGN4LnRvd2VyLmNvbW1hbmQgJ2NvbW1hbmRfbWlzc2luZ19qZXRfdGVtcGxhdGUnOiAiCiAgICAgICAgICAgICJmaWVsZCAnamV0X3RlbXBsYXRlX2lkJyIsCiAgICAgICAgICAgIGVycm9yX21lc3NhZ2UsCiAgICAgICAgICAgICJFcnJvciBtdXN0IGluY2x1ZGUgdW5yZXNvbHZlZCBqZXQgdGVtcGxhdGUgbGlua3MiLAogICAgICAgICkKICAgICAgICBzZWxmLmFzc2VydEluKAogICAgICAgICAgICAiY3gudG93ZXIuamV0LnRlbXBsYXRlICdtaXNzaW5nX2pldF90ZW1wbGF0ZSciLAogICAgICAgICAgICBlcnJvcl9tZXNzYWdlLAogICAgICAgICAgICAiRXJyb3IgbXVzdCBpbmNsdWRlIG1pc3NpbmcgamV0IHRlbXBsYXRlIHJlZmVyZW5jZSIsCiAgICAgICAgKQogICAgICAgIHNlbGYuYXNzZXJ0SW4oCiAgICAgICAgICAgICJSZWNvcmQgY3gudG93ZXIuY29tbWFuZCAnY29tbWFuZF9taXNzaW5nX3dheXBvaW50X3RlbXBsYXRlJzogIgogICAgICAgICAgICAiZmllbGQgJ3dheXBvaW50X3RlbXBsYXRlX2lkJyIsCiAgICAgICAgICAgIGVycm9yX21lc3NhZ2UsCiAgICAgICAgICAgICJFcnJvciBtdXN0IGluY2x1ZGUgdW5yZXNvbHZlZCB3YXlwb2ludCB0ZW1wbGF0ZSBsaW5rcyIsCiAgICAgICAgKQogICAgICAgIHNlbGYuYXNzZXJ0SW4oCiAgICAgICAgICAgICJjeC50b3dlci5qZXQud2F5cG9pbnQudGVtcGxhdGUgJ21pc3Npbmdfd2F5cG9pbnRfdGVtcGxhdGUnIiwKICAgICAgICAgICAgZXJyb3JfbWVzc2FnZSwKICAgICAgICAgICAgIkVycm9yIG11c3QgaW5jbHVkZSBtaXNzaW5nIHdheXBvaW50IHRlbXBsYXRlIHJlZmVyZW5jZSIsCiAgICAgICAgKQoKICAgIGRlZiB0ZXN0X3lhbWxfaW1wb3J0X3NlcnZlcl93aXRob3V0X3Bhc3N3b3JkKHNlbGYpOgogICAgICAgICIiIldpemFyZCBzaG91bGQgaW1wb3J0IHNlcnZlciB3aXRob3V0IHNzaF9wYXNzd29yZC4iIiIKICAgICAgICB5YW1sX2NvZGUgPSAoCiAgICAgICAgICAgICJjZXRtaXhfdG93ZXJfeWFtbF92ZXJzaW9uOiAxXG4iCiAgICAgICAgICAgICJyZWNvcmRzOlxuIgogICAgICAgICAgICAiLSByZWZlcmVuY2U6IHNydl9ub3Bhc3NcbiIKICAgICAgICAgICAgIiAgY2V0bWl4X3Rvd2VyX21vZGVsOiBzZXJ2ZXJcbiIKICAgICAgICAgICAgIiAgbmFtZTogWUFNTCBOb1Bhc3NcbiIKICAgICAgICAgICAgIiAgc3NoX2F1dGhfbW9kZTogcFxuIgogICAgICAgICAgICAiICBzc2hfdXNlcm5hbWU6IHJvb3RcbiIKICAgICAgICAgICAgIiAgaXBfdjRfYWRkcmVzczogMTAuMC4wLjNcbiIKICAgICAgICApCiAgICAgICAgd2l6ID0gc2VsZi5lbnZbImN4LnRvd2VyLnlhbWwuaW1wb3J0LndpeiJdLmNyZWF0ZSgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgInlhbWxfY29kZSI6IHlhbWxfY29kZSwKICAgICAgICAgICAgICAgICJpZl9yZWNvcmRfZXhpc3RzIjogImNyZWF0ZSIsCiAgICAgICAgICAgIH0KICAgICAgICApCiAgICAgICAgd2l6LmFjdGlvbl9pbXBvcnRfeWFtbCgpCgogICAgICAgIHNydiA9IHNlbGYuZW52WyJjeC50b3dlci5zZXJ2ZXIiXS5nZXRfYnlfcmVmZXJlbmNlKCJzcnZfbm9wYXNzIikKICAgICAgICBzZWxmLmFzc2VydFRydWUoc3J2LCAiU2VydmVyIHdhcyBub3QgY3JlYXRlZCIpCiAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgKICAgICAgICAgICAgc3J2Ll9nZXRfc2VjcmV0X3ZhbHVlKCJzc2hfcGFzc3dvcmQiKSwKICAgICAgICAgICAgInNzaF9wYXNzd29yZCBtdXN0IHN0YXkgZW1wdHkgYWZ0ZXIgaW1wb3J0IiwKICAgICAgICApCgogICAgZGVmIHRlc3Rfb3JtX2NyZWF0ZV9zZXJ2ZXJfcmVxdWlyZXNfcGFzc3dvcmQoc2VsZik6CiAgICAgICAgIiIiQ3JlYXRpbmcgYSBzZXJ2ZXIgdmlhIE9STS9VSSBtdXN0IGZhaWwgd2hlbiBzc2hfcGFzc3dvcmQgaXMgbWlzc2luZy4iIiIKICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbGlkYXRpb25FcnJvcikgYXMgZXJyOgogICAgICAgICAgICBzZWxmLmVudlsiY3gudG93ZXIuc2VydmVyIl0uY3JlYXRlKAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAic3J2X3VpIiwKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJVSSBOb1Bhc3MiLAogICAgICAgICAgICAgICAgICAgICJzc2hfYXV0aF9tb2RlIjogInAiLAogICAgICAgICAgICAgICAgICAgICJzc2hfdXNlcm5hbWUiOiAicm9vdCIsCiAgICAgICAgICAgICAgICAgICAgImlwX3Y0X2FkZHJlc3MiOiAiMTAuMC4wLjIiLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApCiAgICAgICAgc2VsZi5hc3NlcnRJbigiUGxlYXNlIHByb3ZpZGUgU1NIIHBhc3N3b3JkIiwgc3RyKGVyci5leGNlcHRpb24pKQoKICAgIGRlZiB0ZXN0X3lhbWxfaW1wb3J0X3NlcnZlcl93aXRoX3NraXBfc3NoX2NoZWNrKHNlbGYpOgogICAgICAgICIiIkV4cGxpY2l0IHNraXBfc3NoX3NldHRpbmdzX2NoZWNrIGFsc28gYnlwYXNzZXMgcGFzc3dvcmQgdmFsaWRhdGlvbi4iIiIKICAgICAgICB5YW1sX2NvZGUgPSAoCiAgICAgICAgICAgICJjZXRtaXhfdG93ZXJfeWFtbF92ZXJzaW9uOiAxXG4iCiAgICAgICAgICAgICJyZWNvcmRzOlxuIgogICAgICAgICAgICAiLSByZWZlcmVuY2U6IHNydl9za2lwXG4iCiAgICAgICAgICAgICIgIGNldG1peF90b3dlcl9tb2RlbDogc2VydmVyXG4iCiAgICAgICAgICAgICIgIG5hbWU6IFlBTUwgU2tpcCBDaGVja1xuIgogICAgICAgICAgICAiICBzc2hfYXV0aF9tb2RlOiBwXG4iCiAgICAgICAgICAgICIgIHNzaF91c2VybmFtZTogcm9vdFxuIgogICAgICAgICAgICAiICBpcF92NF9hZGRyZXNzOiAxMC4wLjAuNFxuIgogICAgICAgICkKICAgICAgICB3aXogPSBzZWxmLmVudlsiY3gudG93ZXIueWFtbC5pbXBvcnQud2l6Il0uY3JlYXRlKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAieWFtbF9jb2RlIjogeWFtbF9jb2RlLAogICAgICAgICAgICAgICAgImlmX3JlY29yZF9leGlzdHMiOiAiY3JlYXRlIiwKICAgICAgICAgICAgfQogICAgICAgICkKICAgICAgICB3aXoud2l0aF9jb250ZXh0KHNraXBfc3NoX3NldHRpbmdzX2NoZWNrPVRydWUpLmFjdGlvbl9pbXBvcnRfeWFtbCgpCgogICAgICAgIHNydiA9IHNlbGYuZW52WyJjeC50b3dlci5zZXJ2ZXIiXS5nZXRfYnlfcmVmZXJlbmNlKCJzcnZfc2tpcCIpCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAogICAgICAgICAgICBzcnYsICJTZXJ2ZXIgbXVzdCBiZSBjcmVhdGVkIHdoZW4gc2tpcF9zc2hfc2V0dGluZ3NfY2hlY2sgaXMgc2V0IgogICAgICAgICkK \ No newline at end of file