@tricoteuses/assemblee 1.5.7 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/README.md +15 -0
  2. package/lib/api.js +1 -1
  3. package/lib/api.mjs +1 -1
  4. package/lib/bugs/acteur-00010/plugin.test.js +1 -1
  5. package/lib/bugs/acteur-00010/plugin.test.mjs +1 -1
  6. package/lib/bugs/acteur-00010.js +1 -1
  7. package/lib/bugs/acteur-00010.mjs +1 -1
  8. package/lib/bugs/agenda-00002/plugin.test.js +1 -1
  9. package/lib/bugs/agenda-00002/plugin.test.mjs +1 -1
  10. package/lib/bugs/agenda-00002.js +1 -1
  11. package/lib/bugs/agenda-00002.mjs +1 -1
  12. package/lib/bugs/agenda-00008/plugin.test.js +1 -1
  13. package/lib/bugs/agenda-00008/plugin.test.mjs +1 -1
  14. package/lib/bugs/agenda-00008.js +1 -1
  15. package/lib/bugs/agenda-00008.mjs +1 -1
  16. package/lib/bugs/agenda-00011/plugin.test.js +1 -1
  17. package/lib/bugs/agenda-00011/plugin.test.mjs +1 -1
  18. package/lib/bugs/agenda-00011.js +1 -1
  19. package/lib/bugs/agenda-00011.mjs +1 -1
  20. package/lib/bugs.js +1 -1
  21. package/lib/bugs.mjs +1 -1
  22. package/lib/cleaners/actes_legislatifs.d.ts +1 -0
  23. package/lib/cleaners/actes_legislatifs.js +33 -15
  24. package/lib/cleaners/actes_legislatifs.mjs +32 -15
  25. package/lib/cleaners/acteurs.js +1 -1
  26. package/lib/cleaners/acteurs.mjs +1 -1
  27. package/lib/cleaners/amendements.js +1 -1
  28. package/lib/cleaners/amendements.mjs +1 -1
  29. package/lib/cleaners/debats.js +1 -1
  30. package/lib/cleaners/debats.mjs +1 -1
  31. package/lib/cleaners/documents.js +1 -1
  32. package/lib/cleaners/documents.mjs +1 -1
  33. package/lib/cleaners/dossiers_legislatifs.js +2 -27
  34. package/lib/cleaners/dossiers_legislatifs.mjs +3 -28
  35. package/lib/cleaners/index.js +1 -1
  36. package/lib/cleaners/index.mjs +1 -1
  37. package/lib/cleaners/organes.js +1 -1
  38. package/lib/cleaners/organes.mjs +1 -1
  39. package/lib/cleaners/questions.js +1 -1
  40. package/lib/cleaners/questions.mjs +1 -1
  41. package/lib/cleaners/reunions.js +1 -1
  42. package/lib/cleaners/reunions.mjs +1 -1
  43. package/lib/cleaners/scrutins.js +1 -1
  44. package/lib/cleaners/scrutins.mjs +1 -1
  45. package/lib/cleaners/xml.js +1 -1
  46. package/lib/cleaners/xml.mjs +1 -1
  47. package/lib/datasets.js +1 -1
  48. package/lib/datasets.mjs +1 -1
  49. package/lib/dates.js +1 -1
  50. package/lib/dates.mjs +1 -1
  51. package/lib/dossiers_legislatifs.js +1 -1
  52. package/lib/dossiers_legislatifs.mjs +1 -1
  53. package/lib/file_systems.js +1 -1
  54. package/lib/file_systems.mjs +1 -1
  55. package/lib/git.js +1 -1
  56. package/lib/git.mjs +1 -1
  57. package/lib/index.js +1 -1
  58. package/lib/index.mjs +1 -1
  59. package/lib/inserters.js +1 -1
  60. package/lib/inserters.mjs +1 -1
  61. package/lib/loaders.d.ts +18 -9
  62. package/lib/loaders.js +318 -253
  63. package/lib/loaders.mjs +64 -10
  64. package/lib/organes.js +1 -1
  65. package/lib/organes.mjs +1 -1
  66. package/lib/parsers/documents.js +1 -1
  67. package/lib/parsers/documents.mjs +1 -1
  68. package/lib/parsers/index.js +1 -1
  69. package/lib/parsers/index.mjs +1 -1
  70. package/lib/parsers/recherche_amendements.js +1 -1
  71. package/lib/parsers/recherche_amendements.mjs +1 -1
  72. package/lib/raw_types/acteurs_et_organes.js +1 -1
  73. package/lib/raw_types/acteurs_et_organes.mjs +1 -1
  74. package/lib/raw_types/agendas.js +1 -1
  75. package/lib/raw_types/agendas.mjs +1 -1
  76. package/lib/raw_types/amendements.js +1 -1
  77. package/lib/raw_types/amendements.mjs +1 -1
  78. package/lib/raw_types/debats.js +1 -1
  79. package/lib/raw_types/debats.mjs +1 -1
  80. package/lib/raw_types/dossiers_legislatifs.d.ts +17 -9
  81. package/lib/raw_types/dossiers_legislatifs.js +37 -16
  82. package/lib/raw_types/dossiers_legislatifs.mjs +37 -14
  83. package/lib/raw_types/questions.js +1 -1
  84. package/lib/raw_types/questions.mjs +1 -1
  85. package/lib/raw_types/scrutins.js +1 -1
  86. package/lib/raw_types/scrutins.mjs +1 -1
  87. package/lib/scripts/bugs_helper.js +1 -1
  88. package/lib/scripts/bugs_helper.mjs +1 -1
  89. package/lib/scripts/clean_reorganized_data.js +2 -2
  90. package/lib/scripts/clean_reorganized_data.mjs +2 -2
  91. package/lib/scripts/diff_amendements.js +1 -1
  92. package/lib/scripts/diff_amendements.mjs +1 -1
  93. package/lib/scripts/document_dossiers_legislatifs.js +1 -1
  94. package/lib/scripts/document_dossiers_legislatifs.mjs +1 -1
  95. package/lib/scripts/get_today_reunions.js +1 -1
  96. package/lib/scripts/get_today_reunions.mjs +1 -1
  97. package/lib/scripts/merge_scrutins.js +1 -1
  98. package/lib/scripts/merge_scrutins.mjs +1 -1
  99. package/lib/scripts/parse_textes_lois.js +1 -1
  100. package/lib/scripts/parse_textes_lois.mjs +1 -1
  101. package/lib/scripts/raw_types_from_amendements.js +1 -1
  102. package/lib/scripts/raw_types_from_amendements.mjs +1 -1
  103. package/lib/scripts/reorganize_data.js +68 -61
  104. package/lib/scripts/reorganize_data.mjs +68 -61
  105. package/lib/scripts/retrieve_deputes_photos.js +1 -1
  106. package/lib/scripts/retrieve_deputes_photos.mjs +1 -1
  107. package/lib/scripts/retrieve_documents.js +1 -1
  108. package/lib/scripts/retrieve_documents.mjs +1 -1
  109. package/lib/scripts/retrieve_open_data.js +1 -1
  110. package/lib/scripts/retrieve_open_data.mjs +1 -1
  111. package/lib/scripts/retrieve_pending_amendments.js +1 -1
  112. package/lib/scripts/retrieve_pending_amendments.mjs +1 -1
  113. package/lib/scripts/retrieve_senateurs_photos.js +1 -1
  114. package/lib/scripts/retrieve_senateurs_photos.mjs +1 -1
  115. package/lib/scripts/retrieve_textes_lois.js +1 -1
  116. package/lib/scripts/retrieve_textes_lois.mjs +1 -1
  117. package/lib/scripts/test_load.js +1 -1
  118. package/lib/scripts/test_load.mjs +1 -1
  119. package/lib/scripts/test_load_big_files.js +1 -1
  120. package/lib/scripts/test_load_big_files.mjs +1 -1
  121. package/lib/scripts/validate_json.js +1 -1
  122. package/lib/scripts/validate_json.mjs +1 -1
  123. package/lib/shared_types/codes_actes.d.ts +4 -0
  124. package/lib/shared_types/codes_actes.js +5 -1
  125. package/lib/shared_types/codes_actes.mjs +5 -1
  126. package/lib/strings.js +1 -1
  127. package/lib/strings.mjs +1 -1
  128. package/lib/types/acteurs_et_organes.js +1 -1
  129. package/lib/types/acteurs_et_organes.mjs +1 -1
  130. package/lib/types/agendas.js +1 -1
  131. package/lib/types/agendas.mjs +1 -1
  132. package/lib/types/amendements.js +1 -1
  133. package/lib/types/amendements.mjs +1 -1
  134. package/lib/types/debats.js +1 -1
  135. package/lib/types/debats.mjs +1 -1
  136. package/lib/types/dossiers_legislatifs.d.ts +11 -0
  137. package/lib/types/dossiers_legislatifs.js +30 -3
  138. package/lib/types/dossiers_legislatifs.mjs +29 -2
  139. package/lib/types/legislatures.js +1 -1
  140. package/lib/types/legislatures.mjs +1 -1
  141. package/lib/types/questions.js +1 -1
  142. package/lib/types/questions.mjs +1 -1
  143. package/lib/types/scrutins.js +1 -1
  144. package/lib/types/scrutins.mjs +1 -1
  145. package/lib/urls.js +1 -1
  146. package/lib/urls.mjs +1 -1
  147. package/package.json +4 -3
@@ -58,65 +58,71 @@ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToAr
58
58
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
59
59
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
60
60
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
61
- var optionsDefinitions = [{
62
- alias: "C",
63
- help: "clone repositories from given group (or organization) git URL",
64
- name: "clone",
65
- type: String
66
- }, {
67
- alias: "c",
68
- help: "commit split files",
69
- name: "commit",
70
- type: Boolean
71
- }, {
72
- alias: "k",
73
- defaultValue: ["All"],
74
- help: "categories of datasets to reorganize",
75
- multiple: true,
76
- name: "categories",
77
- type: String
78
- }, {
79
- alias: "l",
80
- help: "legislatures of categories of datasets to retrieve; leave empty or use 0 for all",
81
- multiple: true,
82
- name: "legislature",
83
- type: Number
84
- }, {
85
- alias: "p",
86
- help: "pull repositories before proceeding",
87
- name: "pull",
88
- type: Boolean
89
- }, {
90
- alias: "r",
91
- help: "push commit to given remote",
92
- multiple: true,
93
- name: "remote",
94
- type: String
95
- }, {
96
- alias: "s",
97
- help: "don't log anything",
98
- name: "silent",
99
- type: Boolean
100
- }, {
101
- alias: "V",
102
- help: "don't validate raw data",
103
- name: "no-validate-raw",
104
- type: Boolean
105
- }, {
106
- alias: "v",
107
- help: "verbose logs",
108
- name: "verbose",
109
- type: Boolean
110
- }, {
111
- defaultOption: true,
112
- help: "directory containing Assemblée open data files",
113
- name: "dataDir",
114
- type: String
115
- }];
61
+ function parseArgs(argv) {
62
+ var optionsDefinitions = [{
63
+ alias: "C",
64
+ help: "clone repositories from given group (or organization) git URL",
65
+ name: "clone",
66
+ type: String
67
+ }, {
68
+ alias: "c",
69
+ help: "commit split files",
70
+ name: "commit",
71
+ type: Boolean
72
+ }, {
73
+ alias: "k",
74
+ defaultValue: ["All"],
75
+ help: "categories of datasets to reorganize",
76
+ multiple: true,
77
+ name: "categories",
78
+ type: String
79
+ }, {
80
+ alias: "l",
81
+ help: "legislatures of categories of datasets to retrieve; leave empty or use 0 for all",
82
+ multiple: true,
83
+ name: "legislature",
84
+ type: Number
85
+ }, {
86
+ alias: "p",
87
+ help: "pull repositories before proceeding",
88
+ name: "pull",
89
+ type: Boolean
90
+ }, {
91
+ alias: "r",
92
+ help: "push commit to given remote",
93
+ multiple: true,
94
+ name: "remote",
95
+ type: String
96
+ }, {
97
+ alias: "s",
98
+ help: "don't log anything",
99
+ name: "silent",
100
+ type: Boolean
101
+ }, {
102
+ alias: "V",
103
+ help: "don't validate raw data",
104
+ name: "no-validate-raw",
105
+ type: Boolean
106
+ }, {
107
+ alias: "v",
108
+ help: "verbose logs",
109
+ name: "verbose",
110
+ type: Boolean
111
+ }, {
112
+ defaultOption: true,
113
+ help: "directory containing Assemblée open data files",
114
+ name: "dataDir",
115
+ type: String
116
+ }];
117
+ var options = (0, _commandLineArgs["default"])(optionsDefinitions, {
118
+ argv: argv
119
+ });
120
+ return options;
121
+ }
116
122
  function reorganizeData(options) {
117
123
  var dataDir = options.dataDir;
118
124
  Date.prototype.toJSON = _dates.patchedDateToJson;
119
- var exitCode = 10; // Nothing to commit
125
+ var exitCode = options.commit ? 10 : 0;
120
126
  var gitGroupUrl = options.clone ? options.clone.trim().replace(/\/+$/, "") : undefined;
121
127
  var validateRawData = !options["no-validate-raw"];
122
128
  options.categories.map(function (datasetName) {
@@ -1049,10 +1055,11 @@ function writeComptesRendusReorganizedJson(comptesRendusDir, compteRendu) {
1049
1055
  encoding: "utf8"
1050
1056
  });
1051
1057
  }
1058
+ function main(argv) {
1059
+ var options = parseArgs(argv);
1060
+ return reorganizeData(options);
1061
+ }
1052
1062
 
1053
1063
  /* istanbul ignore if */
1054
- if (process.argv[1].endsWith("reorganize_data.ts")) {
1055
- var options = (0, _commandLineArgs["default"])(optionsDefinitions);
1056
- process.exit(reorganizeData(options));
1057
- }
1058
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY2hpbGRfcHJvY2VzcyIsIl9jb21tYW5kTGluZUFyZ3MiLCJfZnNFeHRyYSIsIl9wYXRoIiwiX2RhdGFzZXRzIiwiX2RhdGVzIiwiZ2l0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfZmlsZV9zeXN0ZW1zIiwiX2xvYWRlcnMiLCJfYWN0ZXVyc19ldF9vcmdhbmVzIiwiX2FnZW5kYXMiLCJfYW1lbmRlbWVudHMiLCJfZG9zc2llcnNfbGVnaXNsYXRpZnMiLCJfc2NydXRpbnMiLCJfcXVlc3Rpb25zIiwiX2RlYmF0cyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIm9iaiIsIl90b0NvbnN1bWFibGVBcnJheSIsImFyciIsIl9hcnJheVdpdGhvdXRIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVTcHJlYWQiLCJUeXBlRXJyb3IiLCJpdGVyIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImZyb20iLCJpc0FycmF5IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIm8iLCJhbGxvd0FycmF5TGlrZSIsIml0IiwibGVuZ3RoIiwiRiIsInMiLCJkb25lIiwidmFsdWUiLCJfZSIsImYiLCJub3JtYWxDb21wbGV0aW9uIiwiZGlkRXJyIiwiZXJyIiwic3RlcCIsIm5leHQiLCJfZTIiLCJtaW5MZW4iLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwidGVzdCIsImxlbiIsImFycjIiLCJvcHRpb25zRGVmaW5pdGlvbnMiLCJhbGlhcyIsImhlbHAiLCJ0eXBlIiwiU3RyaW5nIiwiQm9vbGVhbiIsImRlZmF1bHRWYWx1ZSIsIm11bHRpcGxlIiwiTnVtYmVyIiwiZGVmYXVsdE9wdGlvbiIsInJlb3JnYW5pemVEYXRhIiwib3B0aW9ucyIsImRhdGFEaXIiLCJEYXRlIiwidG9KU09OIiwicGF0Y2hlZERhdGVUb0pzb24iLCJleGl0Q29kZSIsImdpdEdyb3VwVXJsIiwiY2xvbmUiLCJ0cmltIiwicmVwbGFjZSIsInVuZGVmaW5lZCIsInZhbGlkYXRlUmF3RGF0YSIsImNhdGVnb3JpZXMiLCJtYXAiLCJkYXRhc2V0TmFtZSIsImFzc2VydCIsIm5vdFN0cmljdEVxdWFsIiwiRW5hYmxlZERhdGFzZXRzIiwiY29uY2F0IiwiZW5hYmxlZERhdGFzZXRzIiwicmVkdWNlIiwiTm9uZSIsImNob3NlbkRhdGFzZXRzIiwiZmlsdGVyQnlMZWdpc2xhdHVyZSIsImRhdGFzZXRzIiwibGVnaXNsYXR1cmUiLCJBY3RldXJzRXRPcmdhbmVzIiwiX2l0ZXJhdG9yIiwiYWN0ZXVyc0V0T3JnYW5lcyIsIl9zdGVwIiwiZGF0YXNldCIsIm9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgiLCJwYXRoIiwiam9pbiIsImZpbGVuYW1lIiwic2lsZW50IiwiY29uc29sZSIsImxvZyIsImJhc2VuYW1lIiwiZXhlY1N5bmMiLCJjd2QiLCJlbnYiLCJwcm9jZXNzIiwiZW5jb2RpbmciLCJzdGRpbyIsImRhdGFzZXRSZW9yZ2FuaXplZERpciIsInB1bGwiLCJmcyIsImVuc3VyZURpclN5bmMiLCJfaXRlcmF0b3IyIiwicmVhZGRpclN5bmMiLCJfc3RlcDIiLCJyZW1vdmVTeW5jIiwiYWN0ZXVyc1Jlb3JnYW5pemVkRGlyIiwibWtkaXJTeW5jIiwib3JnYW5lc1Jlb3JnYW5pemVkRGlyIiwic3RydWN0dXJlIiwiRGF0YXNldFN0cnVjdHVyZSIsIlNpbmdsZUZpbGUiLCJvcmlnaW5hbEpzb24iLCJyZWFkRmlsZVN5bmMiLCJvcmlnaW5hbERhdGEiLCJBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydCIsInRvQWN0ZXVyc0V0T3JnYW5lcyIsIkpTT04iLCJwYXJzZSIsIl9pdGVyYXRvcjMiLCJhY3RldXJzIiwiYWN0ZXVyIiwiX3N0ZXAzIiwicmVvcmdhbml6ZWRKc29uRmlsZVBhdGgiLCJ1aWQiLCJ3cml0ZUZpbGVTeW5jIiwic3RyaW5naWZ5IiwiX2l0ZXJhdG9yNCIsIm9yZ2FuZXMiLCJvcmdhbmUiLCJfc3RlcDQiLCJTZWdtZW50ZWRGaWxlcyIsImRlcG9ydHNCeUFjdGV1clVpZCIsImV4aXN0c1N5bmMiLCJfaXRlcmF0b3I1Iiwid2Fsa0RpciIsIl9zdGVwNSIsImRlcG9ydFNwbGl0UGF0aCIsImRlcG9ydEZpbGVuYW1lIiwiZW5kc1dpdGgiLCJkZXBvcnRPcmlnaW5hbEZpbGVQYXRoIiwiYXBwbHkiLCJ2ZXJib3NlIiwiZGVwb3J0T3JpZ2luYWxKc29uIiwiZGVwb3J0T3JpZ2luYWwiLCJ0b0RlcG9ydCIsImRlcG9ydCIsImRlcG9ydHMiLCJhY3RldXJSZWYiLCJwdXNoIiwiX2kiLCJfT2JqZWN0JHZhbHVlcyIsInZhbHVlcyIsInNvcnQiLCJiIiwibG9jYWxlQ29tcGFyZSIsIm1hbmRhdHNCeUFjdGV1clVpZCIsIl9pdGVyYXRvcjYiLCJfc3RlcDYiLCJtYW5kYXRTcGxpdFBhdGgiLCJtYW5kYXRGaWxlbmFtZSIsIm1hbmRhdE9yaWdpbmFsRmlsZVBhdGgiLCJtYW5kYXRPcmlnaW5hbEpzb24iLCJtYW5kYXRPcmlnaW5hbCIsInRvTWFuZGF0V3JhcHBlciIsIm1hbmRhdCIsIm1hbmRhdHMiLCJfaTIiLCJfT2JqZWN0JHZhbHVlczIiLCJfaXRlcmF0b3I3IiwiX3N0ZXA3IiwiYWN0ZXVyU3BsaXRQYXRoIiwiYWN0ZXVyRmlsZW5hbWUiLCJhY3RldXJPcmlnaW5hbEZpbGVQYXRoIiwiYWN0ZXVyT3JpZ2luYWxKc29uIiwiYWN0ZXVyT3JpZ2luYWwiLCJ0b0FjdGV1ciIsImFjdGV1clVpZCIsInN0cmljdEVxdWFsIiwiYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgiLCJfaXRlcmF0b3I4IiwiX3N0ZXA4Iiwib3JnYW5lU3BsaXRQYXRoIiwib3JnYW5lRmlsZW5hbWUiLCJvcmdhbmVPcmlnaW5hbEZpbGVQYXRoIiwib3JnYW5lT3JpZ2luYWxKc29uIiwib3JnYW5lT3JpZ2luYWwiLCJ0b09yZ2FuZSIsIm9yZ2FuZVJlb3JnYW5pemVkSnNvbkZpbGVQYXRoIiwiY29tbWl0IiwiZXJyb3JDb2RlIiwiY29tbWl0QW5kUHVzaCIsInJlbW90ZSIsIkFnZW5kYXMiLCJfaXRlcmF0b3I5IiwiYWdlbmRhcyIsIl9zdGVwOSIsIl9pdGVyYXRvcjEwIiwiX3N0ZXAxMCIsIkFnZW5kYXNSYXdDb252ZXJ0IiwidG9BZ2VuZGFzIiwiX2l0ZXJhdG9yMTEiLCJyZXVuaW9ucyIsInJldW5pb24iLCJfc3RlcDExIiwid3JpdGVSZXVuaW9uUmVvcmdhbml6ZWRKc29uIiwiX2l0ZXJhdG9yMTIiLCJfc3RlcDEyIiwicmV1bmlvblNwbGl0UGF0aCIsInJldW5pb25GaWxlbmFtZSIsInJldW5pb25PcmlnaW5hbEZpbGVQYXRoIiwicmV1bmlvbk9yaWdpbmFsSnNvbiIsInJldW5pb25PcmlnaW5hbCIsInRvUmV1bmlvbiIsIkFtZW5kZW1lbnRzIiwiX2l0ZXJhdG9yMTMiLCJhbWVuZGVtZW50cyIsIl9zdGVwMTMiLCJfaXRlcmF0b3IxNCIsIl9zdGVwMTQiLCJBbWVuZGVtZW50c1Jhd0NvbnZlcnQiLCJ0b0FtZW5kZW1lbnRzIiwiX2l0ZXJhdG9yMTUiLCJ0ZXh0ZXNFdEFtZW5kZW1lbnRzIiwidGV4dGVsZWciLCJfc3RlcDE1IiwidGV4dGVMZWdpc2xhdGlmIiwiX2l0ZXJhdG9yMTYiLCJfc3RlcDE2IiwiYW1lbmRlbWVudCIsIndyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbiIsIl9pdGVyYXRvcjE3IiwiX3N0ZXAxNyIsImFtZW5kZW1lbnRTcGxpdFBhdGgiLCJhbWVuZGVtZW50RmlsZW5hbWUiLCJhbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aCIsImFtZW5kZW1lbnRPcmlnaW5hbEpzb24iLCJhbWVuZGVtZW50T3JpZ2luYWwiLCJ0b0FtZW5kZW1lbnRXcmFwcGVyIiwiRG9zc2llcnNMZWdpc2xhdGlmcyIsIl9pdGVyYXRvcjE4IiwiZG9zc2llcnNMZWdpc2xhdGlmcyIsIl9zdGVwMTgiLCJfaXRlcmF0b3IxOSIsIl9zdGVwMTkiLCJkb2N1bWVudHNEaXIiLCJkb3NzaWVyc0RpciIsIkRvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0IiwidG9Eb3NzaWVyc0xlZ2lzbGF0aWZzIiwiX2l0ZXJhdG9yMjAiLCJ0ZXh0ZXNMZWdpc2xhdGlmcyIsImRvY3VtZW50IiwiX3N0ZXAyMCIsIndyaXRlRG9jdW1lbnRSZW9yZ2FuaXplZEpzb24iLCJfaXRlcmF0b3IyMSIsImRvc3NpZXIiLCJfc3RlcDIxIiwiZG9zc2llclBhcmxlbWVudGFpcmUiLCJ3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uIiwiX2l0ZXJhdG9yMjIiLCJfc3RlcDIyIiwiZG9jdW1lbnRTcGxpdFBhdGgiLCJkb2N1bWVudEZpbGVuYW1lIiwiZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRoIiwiZG9jdW1lbnRPcmlnaW5hbEpzb24iLCJkb2N1bWVudE9yaWdpbmFsIiwidG9Eb2N1bWVudCIsIl9pdGVyYXRvcjIzIiwiX3N0ZXAyMyIsImRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIiwiZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZSIsImRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uIiwiZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbCIsInRvRG9zc2llclBhcmxlbWVudGFpcmUiLCJTY3J1dGlucyIsIl9pdGVyYXRvcjI0Iiwic2NydXRpbnMiLCJfc3RlcDI0IiwiX2l0ZXJhdG9yMjUiLCJfc3RlcDI1IiwiU2NydXRpbnNSYXdDb252ZXJ0IiwidG9TY3J1dGlucyIsIl9pdGVyYXRvcjI2Iiwic2NydXRpbiIsIl9zdGVwMjYiLCJ3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24iLCJfaXRlcmF0b3IyNyIsIl9zdGVwMjciLCJzY3J1dGluU3BsaXRQYXRoIiwic2NydXRpbkZpbGVuYW1lIiwic2NydXRpbk9yaWdpbmFsRmlsZVBhdGgiLCJzY3J1dGluT3JpZ2luYWxKc29uIiwic2NydXRpbk9yaWdpbmFsIiwidG9TY3J1dGluV3JhcHBlciIsIlF1ZXN0aW9ucyIsIl9pdGVyYXRvcjI4IiwicXVlc3Rpb25zIiwiX3N0ZXAyOCIsIl9pdGVyYXRvcjI5IiwiX3N0ZXAyOSIsIl9pdGVyYXRvcjMwIiwiX3N0ZXAzMCIsInF1ZXN0aW9uU3BsaXRQYXRoIiwicXVlc3Rpb25GaWxlbmFtZSIsInF1ZXN0aW9uT3JpZ2luYWxGaWxlUGF0aCIsInF1ZXN0aW9uT3JpZ2luYWxKc29uIiwicXVlc3Rpb25PcmlnaW5hbCIsIlF1ZXN0aW9uc1Jhd0NvbnZlcnQiLCJ0b1F1ZXN0aW9uV3JhcHBlciIsInF1ZXN0aW9uIiwid3JpdGVRdWVzdGlvbnNSZW9yZ2FuaXplZEpzb24iLCJDb21wdGVzUmVuZHVzU2VhbmNlcyIsIl9pdGVyYXRvcjMxIiwiY29tcHRlc1JlbmR1c1NlYW5jZXMiLCJfc3RlcDMxIiwiX2l0ZXJhdG9yMzIiLCJfc3RlcDMyIiwiX2l0ZXJhdG9yMzMiLCJfc3RlcDMzIiwiY29tcHRlUmVuZHVTZWFuY2VTcGxpdFBhdGgiLCJjb21wdGVSZW5kdVNlYW5jZUZpbGVuYW1lIiwiY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbEZpbGVQYXRoIiwiY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbEpzb24iLCJjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsIiwiQ29tcHRlc1JlbmR1c1Jhd0NvbnZlcnQiLCJ0b0NvbXB0ZVJlbmR1V3JhcHBlciIsImNvbXB0ZVJlbmR1U2VhbmNlIiwiY29tcHRlUmVuZHUiLCJ3cml0ZUNvbXB0ZXNSZW5kdXNSZW9yZ2FuaXplZEpzb24iLCJleGlzdGluZ0RhdGVUb0pzb24iLCJ1aWRUZXh0ZUxlZ2lzbGF0aWYiLCJ0ZXh0ZUxlZ2lzbGF0aWZSZWYiLCJ0ZXh0ZUxlZ2lzbGF0aWZEaXIiLCJwYXRoRnJvbURvY3VtZW50VWlkIiwicGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZCIsInJldW5pb25zRGlyIiwicGF0aEZyb21SZXVuaW9uVWlkIiwic2NydXRpbnNEaXIiLCJwYXRoRnJvbVNjcnV0aW5VaWQiLCJxdWVzdGlvbnNEaXIiLCJxdWVzdGlvblVpZFJlZ2V4IiwicGF0aEZyb21VaWQiLCJjb21wdGVzUmVuZHVzRGlyIiwiY29tcHRlUmVuZHVVaWRSZWdleCIsImFyZ3YiLCJjb21tYW5kTGluZUFyZ3MiLCJleGl0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvcmVvcmdhbml6ZV9kYXRhLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCJcbmltcG9ydCBjb21tYW5kTGluZUFyZ3MgZnJvbSBcImNvbW1hbmQtbGluZS1hcmdzXCJcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIlxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuXG5pbXBvcnQge1xuICBkYXRhc2V0cyxcbiAgRGF0YXNldFN0cnVjdHVyZSxcbiAgRW5hYmxlZERhdGFzZXRzLFxuICBmaWx0ZXJCeUxlZ2lzbGF0dXJlLFxufSBmcm9tIFwiLi4vZGF0YXNldHNcIlxuaW1wb3J0IHsgZXhpc3RpbmdEYXRlVG9Kc29uLCBwYXRjaGVkRGF0ZVRvSnNvbiB9IGZyb20gXCIuLi9kYXRlc1wiXG5pbXBvcnQgKiBhcyBnaXQgZnJvbSBcIi4uL2dpdFwiXG5pbXBvcnQgeyB3YWxrRGlyIH0gZnJvbSBcIi4uL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQge1xuICBwYXRoRnJvbURvY3VtZW50VWlkLFxuICBwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkLFxuICBwYXRoRnJvbVJldW5pb25VaWQsXG4gIHBhdGhGcm9tU2NydXRpblVpZCxcbiAgcGF0aEZyb21VaWQsXG59IGZyb20gXCIuLi9sb2FkZXJzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFnZW5kYXNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9hZ2VuZGFzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQW1lbmRlbWVudHNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9hbWVuZGVtZW50c1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9kb3NzaWVyc19sZWdpc2xhdGlmc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFNjcnV0aW5zUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvc2NydXRpbnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBRdWVzdGlvbnNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9xdWVzdGlvbnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBDb21wdGVzUmVuZHVzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvZGViYXRzXCJcblxuY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICB7XG4gICAgYWxpYXM6IFwiQ1wiLFxuICAgIGhlbHA6IFwiY2xvbmUgcmVwb3NpdG9yaWVzIGZyb20gZ2l2ZW4gZ3JvdXAgKG9yIG9yZ2FuaXphdGlvbikgZ2l0IFVSTFwiLFxuICAgIG5hbWU6IFwiY2xvbmVcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJjXCIsXG4gICAgaGVscDogXCJjb21taXQgc3BsaXQgZmlsZXNcIixcbiAgICBuYW1lOiBcImNvbW1pdFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJrXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBbXCJBbGxcIl0sXG4gICAgaGVscDogXCJjYXRlZ29yaWVzIG9mIGRhdGFzZXRzIHRvIHJlb3JnYW5pemVcIixcbiAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICBuYW1lOiBcImNhdGVnb3JpZXNcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJsXCIsXG4gICAgaGVscDogXCJsZWdpc2xhdHVyZXMgb2YgY2F0ZWdvcmllcyBvZiBkYXRhc2V0cyB0byByZXRyaWV2ZTsgbGVhdmUgZW1wdHkgb3IgdXNlIDAgZm9yIGFsbFwiLFxuICAgIG11bHRpcGxlOiB0cnVlLFxuICAgIG5hbWU6IFwibGVnaXNsYXR1cmVcIixcbiAgICB0eXBlOiBOdW1iZXIsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJwXCIsXG4gICAgaGVscDogXCJwdWxsIHJlcG9zaXRvcmllcyBiZWZvcmUgcHJvY2VlZGluZ1wiLFxuICAgIG5hbWU6IFwicHVsbFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJyXCIsXG4gICAgaGVscDogXCJwdXNoIGNvbW1pdCB0byBnaXZlbiByZW1vdGVcIixcbiAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICBuYW1lOiBcInJlbW90ZVwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInNcIixcbiAgICBoZWxwOiBcImRvbid0IGxvZyBhbnl0aGluZ1wiLFxuICAgIG5hbWU6IFwic2lsZW50XCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcIlZcIixcbiAgICBoZWxwOiBcImRvbid0IHZhbGlkYXRlIHJhdyBkYXRhXCIsXG4gICAgbmFtZTogXCJuby12YWxpZGF0ZS1yYXdcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwidlwiLFxuICAgIGhlbHA6IFwidmVyYm9zZSBsb2dzXCIsXG4gICAgbmFtZTogXCJ2ZXJib3NlXCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGRlZmF1bHRPcHRpb246IHRydWUsXG4gICAgaGVscDogXCJkaXJlY3RvcnkgY29udGFpbmluZyBBc3NlbWJsw6llIG9wZW4gZGF0YSBmaWxlc1wiLFxuICAgIG5hbWU6IFwiZGF0YURpclwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbl1cblxuZnVuY3Rpb24gcmVvcmdhbml6ZURhdGEob3B0aW9uczogYW55KTogbnVtYmVyIHtcbiAgY29uc3QgZGF0YURpciA9IG9wdGlvbnMuZGF0YURpclxuICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBwYXRjaGVkRGF0ZVRvSnNvblxuXG4gIGxldCBleGl0Q29kZSA9IDEwIC8vIE5vdGhpbmcgdG8gY29tbWl0XG4gIGNvbnN0IGdpdEdyb3VwVXJsID0gb3B0aW9ucy5jbG9uZVxuICAgID8gb3B0aW9ucy5jbG9uZS50cmltKCkucmVwbGFjZSgvXFwvKyQvLCBcIlwiKVxuICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IHZhbGlkYXRlUmF3RGF0YSA9ICFvcHRpb25zW1wibm8tdmFsaWRhdGUtcmF3XCJdXG5cbiAgb3B0aW9ucy5jYXRlZ29yaWVzLm1hcCgoZGF0YXNldE5hbWU6IHN0cmluZykgPT5cbiAgICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgICAoRW5hYmxlZERhdGFzZXRzIGFzIGFueSBhcyB7IFtuYW1lOiBzdHJpbmddOiBFbmFibGVkRGF0YXNldHMgfSlbXG4gICAgICAgIGRhdGFzZXROYW1lXG4gICAgICBdLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgYFVua25vd24gbmFtZSBvZiBkYXRhc2V0OiAke2RhdGFzZXROYW1lfWAsXG4gICAgKSxcbiAgKVxuICBjb25zdCBlbmFibGVkRGF0YXNldHMgPSBvcHRpb25zLmNhdGVnb3JpZXMucmVkdWNlKFxuICAgIChlbmFibGVkRGF0YXNldHM6IEVuYWJsZWREYXRhc2V0cywgZGF0YXNldE5hbWU6IHN0cmluZyk6IEVuYWJsZWREYXRhc2V0cyA9PlxuICAgICAgZW5hYmxlZERhdGFzZXRzIHxcbiAgICAgIChFbmFibGVkRGF0YXNldHMgYXMgYW55IGFzIHsgW25hbWU6IHN0cmluZ106IEVuYWJsZWREYXRhc2V0cyB9KVtcbiAgICAgICAgZGF0YXNldE5hbWVcbiAgICAgIF0sXG4gICAgRW5hYmxlZERhdGFzZXRzLk5vbmUsXG4gIClcblxuICBsZXQgY2hvc2VuRGF0YXNldHMgPSBmaWx0ZXJCeUxlZ2lzbGF0dXJlKGRhdGFzZXRzLCBvcHRpb25zLmxlZ2lzbGF0dXJlKVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWN0ZXVyc0V0T3JnYW5lcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9zZW5EYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGlmIChvcHRpb25zLnB1bGwpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCByZXNldCAtLWhhcmQgb3JpZ2luL21hc3RlcmAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgcHVsbCAtLXJlYmFzZWAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuICAgICAgY29uc3QgYWN0ZXVyc1Jlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgXCJhY3RldXJzXCIpXG4gICAgICBmcy5ta2RpclN5bmMoYWN0ZXVyc1Jlb3JnYW5pemVkRGlyKVxuICAgICAgY29uc3Qgb3JnYW5lc1Jlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgXCJvcmdhbmVzXCIpXG4gICAgICBmcy5ta2RpclN5bmMob3JnYW5lc1Jlb3JnYW5pemVkRGlyKVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydC50b0FjdGV1cnNFdE9yZ2FuZXMob3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFjdGV1ciBvZiBvcmlnaW5hbERhdGEuZXhwb3J0LmFjdGV1cnMuYWN0ZXVyKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgYWN0ZXVyc1Jlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIGFjdGV1ci51aWRbXCIjdGV4dFwiXSArIFwiLmpzb25cIixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGFjdGV1ciwgbnVsbCwgMiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBvcmdhbmUgb2Ygb3JpZ2luYWxEYXRhLmV4cG9ydC5vcmdhbmVzLm9yZ2FuZSkge1xuICAgICAgICAgICAgICBjb25zdCByZW9yZ2FuaXplZEpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yZ2FuZXNSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBvcmdhbmUudWlkICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkob3JnYW5lLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgZGVwb3J0c0J5QWN0ZXVyVWlkOiB7XG4gICAgICAgICAgICAgIFthY3RldXJVaWQ6IHN0cmluZ106IHsgdWlkOiBzdHJpbmcgfVtdXG4gICAgICAgICAgICB9ID0ge31cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZnMuZXhpc3RzU3luYyhcbiAgICAgICAgICAgICAgICBwYXRoLmpvaW4ob3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCwgXCJkZXBvcnRcIiksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRlcG9ydFNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgW1wiZGVwb3J0XCJdLFxuICAgICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwb3J0RmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgICAgZGVwb3J0U3BsaXRQYXRoW2RlcG9ydFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICAgIGlmICghZGVwb3J0RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwb3J0T3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICAuLi5kZXBvcnRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgICBgICBMb2FkaW5nIFwiZGVwb3J0XCIgZmlsZTogJHtkZXBvcnRPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgICAgZGVwb3J0T3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgY29uc3QgZGVwb3J0T3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgICAgPyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydC50b0RlcG9ydChkZXBvcnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoZGVwb3J0T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydCA9IGRlcG9ydE9yaWdpbmFsLmRlcG9ydFxuICAgICAgICAgICAgICAgIGxldCBkZXBvcnRzID0gZGVwb3J0c0J5QWN0ZXVyVWlkW2RlcG9ydC5hY3RldXJSZWZdXG4gICAgICAgICAgICAgICAgaWYgKGRlcG9ydHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgZGVwb3J0cyA9IGRlcG9ydHNCeUFjdGV1clVpZFtkZXBvcnQuYWN0ZXVyUmVmXSA9IFtdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlcG9ydHMucHVzaChkZXBvcnQpXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRlcG9ydHMgb2YgT2JqZWN0LnZhbHVlcyhkZXBvcnRzQnlBY3RldXJVaWQpKSB7XG4gICAgICAgICAgICAgICAgZGVwb3J0cy5zb3J0KChhLCBiKSA9PlxuICAgICAgICAgICAgICAgICAgYS51aWQubGVuZ3RoID09PSBiLnVpZC5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgPyBhLnVpZC5sb2NhbGVDb21wYXJlKGIudWlkKVxuICAgICAgICAgICAgICAgICAgICA6IGEudWlkLmxlbmd0aCAtIGIudWlkLmxlbmd0aCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbWFuZGF0c0J5QWN0ZXVyVWlkOiB7XG4gICAgICAgICAgICAgIFthY3RldXJVaWQ6IHN0cmluZ106IHsgdWlkOiBzdHJpbmcgfVtdXG4gICAgICAgICAgICB9ID0ge31cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZnMuZXhpc3RzU3luYyhcbiAgICAgICAgICAgICAgICBwYXRoLmpvaW4ob3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCwgXCJtYW5kYXRcIiksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IG1hbmRhdFNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgW1wibWFuZGF0XCJdLFxuICAgICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWFuZGF0RmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgICAgbWFuZGF0U3BsaXRQYXRoW21hbmRhdFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICAgIGlmICghbWFuZGF0RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbWFuZGF0T3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICAuLi5tYW5kYXRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgICBgICBMb2FkaW5nIFwibWFuZGF0XCIgZmlsZTogJHttYW5kYXRPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgICAgbWFuZGF0T3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgY29uc3QgbWFuZGF0T3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgICAgPyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydC50b01hbmRhdFdyYXBwZXIoXG4gICAgICAgICAgICAgICAgICAgICAgbWFuZGF0T3JpZ2luYWxKc29uLFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UobWFuZGF0T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdCA9IG1hbmRhdE9yaWdpbmFsLm1hbmRhdFxuICAgICAgICAgICAgICAgIGxldCBtYW5kYXRzID0gbWFuZGF0c0J5QWN0ZXVyVWlkW21hbmRhdC5hY3RldXJSZWZdXG4gICAgICAgICAgICAgICAgaWYgKG1hbmRhdHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgbWFuZGF0cyA9IG1hbmRhdHNCeUFjdGV1clVpZFttYW5kYXQuYWN0ZXVyUmVmXSA9IFtdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG1hbmRhdHMucHVzaChtYW5kYXQpXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IG1hbmRhdHMgb2YgT2JqZWN0LnZhbHVlcyhtYW5kYXRzQnlBY3RldXJVaWQpKSB7XG4gICAgICAgICAgICAgICAgbWFuZGF0cy5zb3J0KChhLCBiKSA9PlxuICAgICAgICAgICAgICAgICAgYS51aWQubGVuZ3RoID09PSBiLnVpZC5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgPyBhLnVpZC5sb2NhbGVDb21wYXJlKGIudWlkKVxuICAgICAgICAgICAgICAgICAgICA6IGEudWlkLmxlbmd0aCAtIGIudWlkLmxlbmd0aCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBhY3RldXJTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wiYWN0ZXVyXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBhY3RldXJGaWxlbmFtZSA9IGFjdGV1clNwbGl0UGF0aFthY3RldXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFhY3RldXJGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uYWN0ZXVyU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcImFjdGV1clwiIGZpbGU6ICR7YWN0ZXVyT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBhY3RldXJPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ck9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvQWN0ZXVyKGFjdGV1ck9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoYWN0ZXVyT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXIgPSBhY3RldXJPcmlnaW5hbC5hY3RldXJcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyVWlkID0gYWN0ZXVyLnVpZFtcIiN0ZXh0XCJdXG4gICAgICAgICAgICAgIGNvbnN0IGRlcG9ydHMgPSBkZXBvcnRzQnlBY3RldXJVaWRbYWN0ZXVyVWlkXVxuICAgICAgICAgICAgICBpZiAoZGVwb3J0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFjdGV1ci5kZXBvcnRzLCB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgYWN0ZXVyLmRlcG9ydHMgPSB7IGRlcG9ydDogZGVwb3J0cyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgbWFuZGF0cyA9IG1hbmRhdHNCeUFjdGV1clVpZFthY3RldXJVaWRdXG4gICAgICAgICAgICAgIGlmIChtYW5kYXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWN0ZXVyLm1hbmRhdHMsIHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBhY3RldXIubWFuZGF0cyA9IHsgbWFuZGF0OiBtYW5kYXRzIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJSZW9yZ2FuaXplZEpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIGFjdGV1cnNSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBhY3RldXJVaWQgKyBcIi5qc29uXCIsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBhY3RldXJSZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShhY3RldXIsIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3JnYW5lU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcIm9yZ2FuZVwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lRmlsZW5hbWUgPSBvcmdhbmVTcGxpdFBhdGhbb3JnYW5lU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghb3JnYW5lRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLm9yZ2FuZVNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJvcmdhbmVcIiBmaWxlOiAke29yZ2FuZU9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgb3JnYW5lT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydC50b09yZ2FuZShvcmdhbmVPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yZ2FuZU9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lID0gb3JnYW5lT3JpZ2luYWwub3JnYW5lXG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZVJlb3JnYW5pemVkSnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JnYW5lc1Jlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIG9yZ2FuZS51aWQgKyBcIi5qc29uXCIsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBvcmdhbmVSZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShvcmdhbmUsIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMTAgJiYgZXJyb3JDb2RlICE9PSAxMCkgfHxcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDAgJiYgZXJyb3JDb2RlICE9PSAwICYmIGVycm9yQ29kZSAhPT0gMTApXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFnZW5kYXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvc2VuRGF0YXNldHMuYWdlbmRhcykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBBZ2VuZGFzUmF3Q29udmVydC50b0FnZW5kYXMob3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJldW5pb24gb2Ygb3JpZ2luYWxEYXRhLnJldW5pb25zLnJldW5pb24pIHtcbiAgICAgICAgICAgICAgd3JpdGVSZXVuaW9uUmVvcmdhbml6ZWRKc29uKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgcmV1bmlvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmV1bmlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJyZXVuaW9uXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uRmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIHJldW5pb25TcGxpdFBhdGhbcmV1bmlvblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIXJldW5pb25GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLnJldW5pb25TcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwicmV1bmlvblwiIGZpbGU6ICR7cmV1bmlvbk9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbk9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHJldW5pb25PcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb25PcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBZ2VuZGFzUmF3Q29udmVydC50b1JldW5pb24ocmV1bmlvbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UocmV1bmlvbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbiA9IHJldW5pb25PcmlnaW5hbC5yZXVuaW9uXG4gICAgICAgICAgICAgIHdyaXRlUmV1bmlvblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHJldW5pb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMTAgJiYgZXJyb3JDb2RlICE9PSAxMCkgfHxcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDAgJiYgZXJyb3JDb2RlICE9PSAwICYmIGVycm9yQ29kZSAhPT0gMTApXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFtZW5kZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob3NlbkRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IEFtZW5kZW1lbnRzUmF3Q29udmVydC50b0FtZW5kZW1lbnRzKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCB0ZXh0ZUxlZ2lzbGF0aWYgb2Ygb3JpZ2luYWxEYXRhLnRleHRlc0V0QW1lbmRlbWVudHNcbiAgICAgICAgICAgICAgLnRleHRlbGVnKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudCBvZiB0ZXh0ZUxlZ2lzbGF0aWYuYW1lbmRlbWVudHMpIHtcbiAgICAgICAgICAgICAgICB3cml0ZUFtZW5kZW1lbnRSZW9yZ2FuaXplZEpzb24oXG4gICAgICAgICAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgICBhbWVuZGVtZW50LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCBhbWVuZGVtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgYW1lbmRlbWVudFNwbGl0UGF0aFthbWVuZGVtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghYW1lbmRlbWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uYW1lbmRlbWVudFNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJhbWVuZGVtZW50XCIgZmlsZTogJHthbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50T3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgYW1lbmRlbWVudE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IEFtZW5kZW1lbnRzUmF3Q29udmVydC50b0FtZW5kZW1lbnRXcmFwcGVyKFxuICAgICAgICAgICAgICAgICAgICBhbWVuZGVtZW50T3JpZ2luYWxKc29uLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShhbWVuZGVtZW50T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50ID0gYW1lbmRlbWVudE9yaWdpbmFsLmFtZW5kZW1lbnRcbiAgICAgICAgICAgICAgd3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgYW1lbmRlbWVudClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdpdC5jb21taXRBbmRQdXNoKFxuICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgICBvcHRpb25zLnJlbW90ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGV4aXRDb2RlID09PSAxMCAmJiBlcnJvckNvZGUgIT09IDEwKSB8fFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMCAmJiBlcnJvckNvZGUgIT09IDAgJiYgZXJyb3JDb2RlICE9PSAxMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXhpdENvZGUgPSBlcnJvckNvZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuRG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9zZW5EYXRhc2V0cy5kb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG4gICAgICBjb25zdCBkb2N1bWVudHNEaXIgPSBwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBcImRvY3VtZW50c1wiKVxuICAgICAgZnMubWtkaXJTeW5jKGRvY3VtZW50c0RpcilcbiAgICAgIGNvbnN0IGRvc3NpZXJzRGlyID0gcGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgXCJkb3NzaWVyc1wiKVxuICAgICAgZnMubWtkaXJTeW5jKGRvc3NpZXJzRGlyKVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydC50b0Rvc3NpZXJzTGVnaXNsYXRpZnMoXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvY3VtZW50IG9mIG9yaWdpbmFsRGF0YS5leHBvcnQudGV4dGVzTGVnaXNsYXRpZnNcbiAgICAgICAgICAgICAgLmRvY3VtZW50KSB7XG4gICAgICAgICAgICAgIHdyaXRlRG9jdW1lbnRSZW9yZ2FuaXplZEpzb24oZG9jdW1lbnRzRGlyLCBkb2N1bWVudClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCB7IGRvc3NpZXJQYXJsZW1lbnRhaXJlIH0gb2Ygb3JpZ2luYWxEYXRhLmV4cG9ydFxuICAgICAgICAgICAgICAuZG9zc2llcnNMZWdpc2xhdGlmcy5kb3NzaWVyKSB7XG4gICAgICAgICAgICAgIHdyaXRlRG9zc2llclBhcmxlbWVudGFpcmVSZW9yZ2FuaXplZEpzb24oXG4gICAgICAgICAgICAgICAgZG9zc2llcnNEaXIsXG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmUsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZG9jdW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wiZG9jdW1lbnRcIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50RmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIGRvY3VtZW50U3BsaXRQYXRoW2RvY3VtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghZG9jdW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5kb2N1bWVudFNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJkb2N1bWVudFwiIGZpbGU6ICR7ZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50T3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50T3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQudG9Eb2N1bWVudChkb2N1bWVudE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoZG9jdW1lbnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50ID0gZG9jdW1lbnRPcmlnaW5hbC5kb2N1bWVudFxuICAgICAgICAgICAgICB3cml0ZURvY3VtZW50UmVvcmdhbml6ZWRKc29uKGRvY3VtZW50c0RpciwgZG9jdW1lbnQpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wiZG9zc2llclBhcmxlbWVudGFpcmVcIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoW1xuICAgICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGgubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgaWYgKCFkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcImRvc3NpZXJQYXJsZW1lbnRhaXJlXCIgZmlsZTogJHtkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydC50b0Rvc3NpZXJQYXJsZW1lbnRhaXJlKFxuICAgICAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlID1cbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsLmRvc3NpZXJQYXJsZW1lbnRhaXJlXG4gICAgICAgICAgICAgIHdyaXRlRG9zc2llclBhcmxlbWVudGFpcmVSZW9yZ2FuaXplZEpzb24oXG4gICAgICAgICAgICAgICAgZG9zc2llcnNEaXIsXG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmUsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdpdC5jb21taXRBbmRQdXNoKFxuICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgICBvcHRpb25zLnJlbW90ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGV4aXRDb2RlID09PSAxMCAmJiBlcnJvckNvZGUgIT09IDEwKSB8fFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMCAmJiBlcnJvckNvZGUgIT09IDAgJiYgZXJyb3JDb2RlICE9PSAxMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXhpdENvZGUgPSBlcnJvckNvZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuU2NydXRpbnMpIHtcbiAgICBmb3IgKGxldCBkYXRhc2V0IG9mIGNob3NlbkRhdGFzZXRzLnNjcnV0aW5zKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IFNjcnV0aW5zUmF3Q29udmVydC50b1NjcnV0aW5zKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBzY3J1dGluIG9mIG9yaWdpbmFsRGF0YS5zY3J1dGlucy5zY3J1dGluKSB7XG4gICAgICAgICAgICAgIHdyaXRlU2NydXRpblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHNjcnV0aW4pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNjcnV0aW5TcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBzY3J1dGluU3BsaXRQYXRoW3NjcnV0aW5TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFzY3J1dGluRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbk9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5zY3J1dGluU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcInNjcnV0aW5cIiBmaWxlOiAke3NjcnV0aW5PcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5PcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBzY3J1dGluT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gU2NydXRpbnNSYXdDb252ZXJ0LnRvU2NydXRpbldyYXBwZXIoc2NydXRpbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uoc2NydXRpbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbiA9IHNjcnV0aW5PcmlnaW5hbC5zY3J1dGluXG4gICAgICAgICAgICAgIHdyaXRlU2NydXRpblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHNjcnV0aW4pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMTAgJiYgZXJyb3JDb2RlICE9PSAxMCkgfHxcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDAgJiYgZXJyb3JDb2RlICE9PSAwICYmIGVycm9yQ29kZSAhPT0gMTApXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlF1ZXN0aW9ucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5xdWVzdGlvbnMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCBxdWVzdGlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbkZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBxdWVzdGlvblNwbGl0UGF0aFtxdWVzdGlvblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIXF1ZXN0aW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25PcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4ucXVlc3Rpb25TcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwicXVlc3Rpb25cIiBmaWxlOiAke3F1ZXN0aW9uT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbk9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gUXVlc3Rpb25zUmF3Q29udmVydC50b1F1ZXN0aW9uV3JhcHBlcihxdWVzdGlvbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UocXVlc3Rpb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uID0gcXVlc3Rpb25PcmlnaW5hbC5xdWVzdGlvblxuICAgICAgICAgICAgICB3cml0ZVF1ZXN0aW9uc1Jlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHF1ZXN0aW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDEwICYmIGVycm9yQ29kZSAhPT0gMTApIHx8XG4gICAgICAgICAgKGV4aXRDb2RlID09PSAwICYmIGVycm9yQ29kZSAhPT0gMCAmJiBlcnJvckNvZGUgIT09IDEwKVxuICAgICAgICApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Db21wdGVzUmVuZHVzU2VhbmNlcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5jb21wdGVzUmVuZHVzU2VhbmNlcykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUob3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCwgXCIueG1sXCIpXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjb21wdGVSZW5kdVNlYW5jZVNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBjb21wdGVSZW5kdVNlYW5jZUZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBjb21wdGVSZW5kdVNlYW5jZVNwbGl0UGF0aFtcbiAgICAgICAgICAgICAgICAgIGNvbXB0ZVJlbmR1U2VhbmNlU3BsaXRQYXRoLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIGlmICghY29tcHRlUmVuZHVTZWFuY2VGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5jb21wdGVSZW5kdVNlYW5jZVNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJjb21wdGVSZW5kdVNlYW5jZVwiIGZpbGU6ICR7Y29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQ29tcHRlc1JlbmR1c1Jhd0NvbnZlcnQudG9Db21wdGVSZW5kdVdyYXBwZXIoXG4gICAgICAgICAgICAgICAgICAgIGNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxKc29uLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgICBjb25zdCBjb21wdGVSZW5kdVNlYW5jZSA9IGNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWwuY29tcHRlUmVuZHVcbiAgICAgICAgICAgICAgd3JpdGVDb21wdGVzUmVuZHVzUmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBjb21wdGVSZW5kdVNlYW5jZSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDEwICYmIGVycm9yQ29kZSAhPT0gMTApIHx8XG4gICAgICAgICAgKGV4aXRDb2RlID09PSAwICYmIGVycm9yQ29kZSAhPT0gMCAmJiBlcnJvckNvZGUgIT09IDEwKVxuICAgICAgICApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmVzdG9yZSBzdGFuZGFyZCBjb252ZXJzaW9uIG9mIGRhdGVzIHRvIEpTT04uXG4gIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IGV4aXN0aW5nRGF0ZVRvSnNvblxuXG4gIHJldHVybiBleGl0Q29kZVxufVxuXG5mdW5jdGlvbiB3cml0ZUFtZW5kZW1lbnRSZW9yZ2FuaXplZEpzb24oXG4gIGRhdGFzZXRSZW9yZ2FuaXplZERpcjogc3RyaW5nLFxuICBhbWVuZGVtZW50OiB7XG4gICAgdWlkOiBzdHJpbmdcbiAgICB0ZXh0ZUxlZ2lzbGF0aWZSZWY6IHN0cmluZ1xuICB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IHVpZFRleHRlTGVnaXNsYXRpZiA9IGFtZW5kZW1lbnQudGV4dGVMZWdpc2xhdGlmUmVmXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbCh1aWRUZXh0ZUxlZ2lzbGF0aWYsIHVuZGVmaW5lZClcbiAgY29uc3QgdGV4dGVMZWdpc2xhdGlmRGlyID0gcGF0aC5qb2luKFxuICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICB1aWRUZXh0ZUxlZ2lzbGF0aWYsXG4gIClcbiAgZnMuZW5zdXJlRGlyU3luYyh0ZXh0ZUxlZ2lzbGF0aWZEaXIpXG4gIGNvbnN0IHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgIHRleHRlTGVnaXNsYXRpZkRpcixcbiAgICBhbWVuZGVtZW50LnVpZCArIFwiLmpzb25cIixcbiAgKVxuICBmcy53cml0ZUZpbGVTeW5jKFxuICAgIHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgIEpTT04uc3RyaW5naWZ5KGFtZW5kZW1lbnQsIG51bGwsIDIpLFxuICAgIHtcbiAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICB9LFxuICApXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG9jdW1lbnRSZW9yZ2FuaXplZEpzb24oXG4gIGRvY3VtZW50c0Rpcjogc3RyaW5nLFxuICBkb2N1bWVudDogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21Eb2N1bWVudFVpZChkb2N1bWVudHNEaXIsIGRvY3VtZW50LnVpZClcbiAgZnMud3JpdGVGaWxlU3luYyhgJHtiYXNlbmFtZX0uanNvbmAsIEpTT04uc3RyaW5naWZ5KGRvY3VtZW50LCBudWxsLCAyKSwge1xuICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgfSlcbn1cblxuZnVuY3Rpb24gd3JpdGVEb3NzaWVyUGFybGVtZW50YWlyZVJlb3JnYW5pemVkSnNvbihcbiAgZG9zc2llcnNEaXI6IHN0cmluZyxcbiAgZG9zc2llclBhcmxlbWVudGFpcmU6IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tRG9zc2llclBhcmxlbWVudGFpcmVVaWQoXG4gICAgZG9zc2llcnNEaXIsXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmUudWlkLFxuICApXG4gIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgYCR7YmFzZW5hbWV9Lmpzb25gLFxuICAgIEpTT04uc3RyaW5naWZ5KGRvc3NpZXJQYXJsZW1lbnRhaXJlLCBudWxsLCAyKSxcbiAgICB7XG4gICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgfSxcbiAgKVxufVxuXG5mdW5jdGlvbiB3cml0ZVJldW5pb25SZW9yZ2FuaXplZEpzb24oXG4gIHJldW5pb25zRGlyOiBzdHJpbmcsXG4gIHJldW5pb246IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tUmV1bmlvblVpZChyZXVuaW9uc0RpciwgcmV1bmlvbi51aWQpXG4gIGZzLndyaXRlRmlsZVN5bmMoYCR7YmFzZW5hbWV9Lmpzb25gLCBKU09OLnN0cmluZ2lmeShyZXVuaW9uLCBudWxsLCAyKSwge1xuICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgfSlcbn1cblxuZnVuY3Rpb24gd3JpdGVTY3J1dGluUmVvcmdhbml6ZWRKc29uKFxuICBzY3J1dGluc0Rpcjogc3RyaW5nLFxuICBzY3J1dGluOiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgYmFzZW5hbWUgPSBwYXRoRnJvbVNjcnV0aW5VaWQoc2NydXRpbnNEaXIsIHNjcnV0aW4udWlkKVxuICBmcy53cml0ZUZpbGVTeW5jKGAke2Jhc2VuYW1lfS5qc29uYCwgSlNPTi5zdHJpbmdpZnkoc2NydXRpbiwgbnVsbCwgMiksIHtcbiAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHdyaXRlUXVlc3Rpb25zUmVvcmdhbml6ZWRKc29uKFxuICBxdWVzdGlvbnNEaXI6IHN0cmluZyxcbiAgcXVlc3Rpb246IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBxdWVzdGlvblVpZFJlZ2V4OiBSZWdFeHAgPSAvXlFBTihSXFxkKykoTFxcZCspUShFfEd8T1NEKShcXGQrKSQvXG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21VaWQocXVlc3Rpb25zRGlyLCBxdWVzdGlvbi51aWQsIHF1ZXN0aW9uVWlkUmVnZXgpXG4gIGZzLndyaXRlRmlsZVN5bmMoYCR7YmFzZW5hbWV9Lmpzb25gLCBKU09OLnN0cmluZ2lmeShxdWVzdGlvbiwgbnVsbCwgMiksIHtcbiAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHdyaXRlQ29tcHRlc1JlbmR1c1Jlb3JnYW5pemVkSnNvbihcbiAgY29tcHRlc1JlbmR1c0Rpcjogc3RyaW5nLFxuICBjb21wdGVSZW5kdTogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IGNvbXB0ZVJlbmR1VWlkUmVnZXg6IFJlZ0V4cCA9XG4gICAgL15DUlNBTihSXFxkKykoTFxcZCspKFNcXGQrKShPfEUpKFxcZCspKE5cXGQrKSQvXG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21VaWQoXG4gICAgY29tcHRlc1JlbmR1c0RpcixcbiAgICBjb21wdGVSZW5kdS51aWQsXG4gICAgY29tcHRlUmVuZHVVaWRSZWdleCxcbiAgKVxuICBmcy53cml0ZUZpbGVTeW5jKGAke2Jhc2VuYW1lfS5qc29uYCwgSlNPTi5zdHJpbmdpZnkoY29tcHRlUmVuZHUsIG51bGwsIDIpLCB7XG4gICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICB9KVxufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmIChwcm9jZXNzLmFyZ3ZbMV0uZW5kc1dpdGgoXCJyZW9yZ2FuaXplX2RhdGEudHNcIikpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGNvbW1hbmRMaW5lQXJncyhvcHRpb25zRGVmaW5pdGlvbnMpXG5cbiAgcHJvY2Vzcy5leGl0KHJlb3JnYW5pemVEYXRhKG9wdGlvbnMpKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxjQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxnQkFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsUUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksS0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUssU0FBQSxHQUFBTCxPQUFBO0FBTUEsSUFBQU0sTUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sR0FBQSxHQUFBQyx1QkFBQSxDQUFBUixPQUFBO0FBQ0EsSUFBQVMsYUFBQSxHQUFBVCxPQUFBO0FBQ0EsSUFBQVUsUUFBQSxHQUFBVixPQUFBO0FBT0EsSUFBQVcsbUJBQUEsR0FBQVgsT0FBQTtBQUNBLElBQUFZLFFBQUEsR0FBQVosT0FBQTtBQUNBLElBQUFhLFlBQUEsR0FBQWIsT0FBQTtBQUNBLElBQUFjLHFCQUFBLEdBQUFkLE9BQUE7QUFDQSxJQUFBZSxTQUFBLEdBQUFmLE9BQUE7QUFDQSxJQUFBZ0IsVUFBQSxHQUFBaEIsT0FBQTtBQUNBLElBQUFpQixPQUFBLEdBQUFqQixPQUFBO0FBQXdFLFNBQUFrQix5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxLQUFBRixDQUFBO0FBQUEsU0FBQVgsd0JBQUFXLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFBLElBQUFGLENBQUEsSUFBQUEsQ0FBQSxDQUFBSSxVQUFBLFNBQUFKLENB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
1064
+ if (process.argv[1].endsWith("reorganize_data.ts")) process.exit(main(process.argv));
1065
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY2hpbGRfcHJvY2VzcyIsIl9jb21tYW5kTGluZUFyZ3MiLCJfZnNFeHRyYSIsIl9wYXRoIiwiX2RhdGFzZXRzIiwiX2RhdGVzIiwiZ2l0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfZmlsZV9zeXN0ZW1zIiwiX2xvYWRlcnMiLCJfYWN0ZXVyc19ldF9vcmdhbmVzIiwiX2FnZW5kYXMiLCJfYW1lbmRlbWVudHMiLCJfZG9zc2llcnNfbGVnaXNsYXRpZnMiLCJfc2NydXRpbnMiLCJfcXVlc3Rpb25zIiwiX2RlYmF0cyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIm9iaiIsIl90b0NvbnN1bWFibGVBcnJheSIsImFyciIsIl9hcnJheVdpdGhvdXRIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVTcHJlYWQiLCJUeXBlRXJyb3IiLCJpdGVyIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImZyb20iLCJpc0FycmF5IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIm8iLCJhbGxvd0FycmF5TGlrZSIsIml0IiwibGVuZ3RoIiwiRiIsInMiLCJkb25lIiwidmFsdWUiLCJfZSIsImYiLCJub3JtYWxDb21wbGV0aW9uIiwiZGlkRXJyIiwiZXJyIiwic3RlcCIsIm5leHQiLCJfZTIiLCJtaW5MZW4iLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwidGVzdCIsImxlbiIsImFycjIiLCJwYXJzZUFyZ3MiLCJhcmd2Iiwib3B0aW9uc0RlZmluaXRpb25zIiwiYWxpYXMiLCJoZWxwIiwidHlwZSIsIlN0cmluZyIsIkJvb2xlYW4iLCJkZWZhdWx0VmFsdWUiLCJtdWx0aXBsZSIsIk51bWJlciIsImRlZmF1bHRPcHRpb24iLCJvcHRpb25zIiwiY29tbWFuZExpbmVBcmdzIiwicmVvcmdhbml6ZURhdGEiLCJkYXRhRGlyIiwiRGF0ZSIsInRvSlNPTiIsInBhdGNoZWREYXRlVG9Kc29uIiwiZXhpdENvZGUiLCJjb21taXQiLCJnaXRHcm91cFVybCIsImNsb25lIiwidHJpbSIsInJlcGxhY2UiLCJ1bmRlZmluZWQiLCJ2YWxpZGF0ZVJhd0RhdGEiLCJjYXRlZ29yaWVzIiwibWFwIiwiZGF0YXNldE5hbWUiLCJhc3NlcnQiLCJub3RTdHJpY3RFcXVhbCIsIkVuYWJsZWREYXRhc2V0cyIsImNvbmNhdCIsImVuYWJsZWREYXRhc2V0cyIsInJlZHVjZSIsIk5vbmUiLCJjaG9zZW5EYXRhc2V0cyIsImZpbHRlckJ5TGVnaXNsYXR1cmUiLCJkYXRhc2V0cyIsImxlZ2lzbGF0dXJlIiwiQWN0ZXVyc0V0T3JnYW5lcyIsIl9pdGVyYXRvciIsImFjdGV1cnNFdE9yZ2FuZXMiLCJfc3RlcCIsImRhdGFzZXQiLCJvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoIiwicGF0aCIsImpvaW4iLCJmaWxlbmFtZSIsInNpbGVudCIsImNvbnNvbGUiLCJsb2ciLCJiYXNlbmFtZSIsImV4ZWNTeW5jIiwiY3dkIiwiZW52IiwicHJvY2VzcyIsImVuY29kaW5nIiwic3RkaW8iLCJkYXRhc2V0UmVvcmdhbml6ZWREaXIiLCJwdWxsIiwiZnMiLCJlbnN1cmVEaXJTeW5jIiwiX2l0ZXJhdG9yMiIsInJlYWRkaXJTeW5jIiwiX3N0ZXAyIiwicmVtb3ZlU3luYyIsImFjdGV1cnNSZW9yZ2FuaXplZERpciIsIm1rZGlyU3luYyIsIm9yZ2FuZXNSZW9yZ2FuaXplZERpciIsInN0cnVjdHVyZSIsIkRhdGFzZXRTdHJ1Y3R1cmUiLCJTaW5nbGVGaWxlIiwib3JpZ2luYWxKc29uIiwicmVhZEZpbGVTeW5jIiwib3JpZ2luYWxEYXRhIiwiQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQiLCJ0b0FjdGV1cnNFdE9yZ2FuZXMiLCJKU09OIiwicGFyc2UiLCJfaXRlcmF0b3IzIiwiYWN0ZXVycyIsImFjdGV1ciIsIl9zdGVwMyIsInJlb3JnYW5pemVkSnNvbkZpbGVQYXRoIiwidWlkIiwid3JpdGVGaWxlU3luYyIsInN0cmluZ2lmeSIsIl9pdGVyYXRvcjQiLCJvcmdhbmVzIiwib3JnYW5lIiwiX3N0ZXA0IiwiU2VnbWVudGVkRmlsZXMiLCJkZXBvcnRzQnlBY3RldXJVaWQiLCJleGlzdHNTeW5jIiwiX2l0ZXJhdG9yNSIsIndhbGtEaXIiLCJfc3RlcDUiLCJkZXBvcnRTcGxpdFBhdGgiLCJkZXBvcnRGaWxlbmFtZSIsImVuZHNXaXRoIiwiZGVwb3J0T3JpZ2luYWxGaWxlUGF0aCIsImFwcGx5IiwidmVyYm9zZSIsImRlcG9ydE9yaWdpbmFsSnNvbiIsImRlcG9ydE9yaWdpbmFsIiwidG9EZXBvcnQiLCJkZXBvcnQiLCJkZXBvcnRzIiwiYWN0ZXVyUmVmIiwicHVzaCIsIl9pIiwiX09iamVjdCR2YWx1ZXMiLCJ2YWx1ZXMiLCJzb3J0IiwiYiIsImxvY2FsZUNvbXBhcmUiLCJtYW5kYXRzQnlBY3RldXJVaWQiLCJfaXRlcmF0b3I2IiwiX3N0ZXA2IiwibWFuZGF0U3BsaXRQYXRoIiwibWFuZGF0RmlsZW5hbWUiLCJtYW5kYXRPcmlnaW5hbEZpbGVQYXRoIiwibWFuZGF0T3JpZ2luYWxKc29uIiwibWFuZGF0T3JpZ2luYWwiLCJ0b01hbmRhdFdyYXBwZXIiLCJtYW5kYXQiLCJtYW5kYXRzIiwiX2kyIiwiX09iamVjdCR2YWx1ZXMyIiwiX2l0ZXJhdG9yNyIsIl9zdGVwNyIsImFjdGV1clNwbGl0UGF0aCIsImFjdGV1ckZpbGVuYW1lIiwiYWN0ZXVyT3JpZ2luYWxGaWxlUGF0aCIsImFjdGV1ck9yaWdpbmFsSnNvbiIsImFjdGV1ck9yaWdpbmFsIiwidG9BY3RldXIiLCJhY3RldXJVaWQiLCJzdHJpY3RFcXVhbCIsImFjdGV1clJlb3JnYW5pemVkSnNvbkZpbGVQYXRoIiwiX2l0ZXJhdG9yOCIsIl9zdGVwOCIsIm9yZ2FuZVNwbGl0UGF0aCIsIm9yZ2FuZUZpbGVuYW1lIiwib3JnYW5lT3JpZ2luYWxGaWxlUGF0aCIsIm9yZ2FuZU9yaWdpbmFsSnNvbiIsIm9yZ2FuZU9yaWdpbmFsIiwidG9PcmdhbmUiLCJvcmdhbmVSZW9yZ2FuaXplZEpzb25GaWxlUGF0aCIsImVycm9yQ29kZSIsImNvbW1pdEFuZFB1c2giLCJyZW1vdGUiLCJBZ2VuZGFzIiwiX2l0ZXJhdG9yOSIsImFnZW5kYXMiLCJfc3RlcDkiLCJfaXRlcmF0b3IxMCIsIl9zdGVwMTAiLCJBZ2VuZGFzUmF3Q29udmVydCIsInRvQWdlbmRhcyIsIl9pdGVyYXRvcjExIiwicmV1bmlvbnMiLCJyZXVuaW9uIiwiX3N0ZXAxMSIsIndyaXRlUmV1bmlvblJlb3JnYW5pemVkSnNvbiIsIl9pdGVyYXRvcjEyIiwiX3N0ZXAxMiIsInJldW5pb25TcGxpdFBhdGgiLCJyZXVuaW9uRmlsZW5hbWUiLCJyZXVuaW9uT3JpZ2luYWxGaWxlUGF0aCIsInJldW5pb25PcmlnaW5hbEpzb24iLCJyZXVuaW9uT3JpZ2luYWwiLCJ0b1JldW5pb24iLCJBbWVuZGVtZW50cyIsIl9pdGVyYXRvcjEzIiwiYW1lbmRlbWVudHMiLCJfc3RlcDEzIiwiX2l0ZXJhdG9yMTQiLCJfc3RlcDE0IiwiQW1lbmRlbWVudHNSYXdDb252ZXJ0IiwidG9BbWVuZGVtZW50cyIsIl9pdGVyYXRvcjE1IiwidGV4dGVzRXRBbWVuZGVtZW50cyIsInRleHRlbGVnIiwiX3N0ZXAxNSIsInRleHRlTGVnaXNsYXRpZiIsIl9pdGVyYXRvcjE2IiwiX3N0ZXAxNiIsImFtZW5kZW1lbnQiLCJ3cml0ZUFtZW5kZW1lbnRSZW9yZ2FuaXplZEpzb24iLCJfaXRlcmF0b3IxNyIsIl9zdGVwMTciLCJhbWVuZGVtZW50U3BsaXRQYXRoIiwiYW1lbmRlbWVudEZpbGVuYW1lIiwiYW1lbmRlbWVudE9yaWdpbmFsRmlsZVBhdGgiLCJhbWVuZGVtZW50T3JpZ2luYWxKc29uIiwiYW1lbmRlbWVudE9yaWdpbmFsIiwidG9BbWVuZGVtZW50V3JhcHBlciIsIkRvc3NpZXJzTGVnaXNsYXRpZnMiLCJfaXRlcmF0b3IxOCIsImRvc3NpZXJzTGVnaXNsYXRpZnMiLCJfc3RlcDE4IiwiX2l0ZXJhdG9yMTkiLCJfc3RlcDE5IiwiZG9jdW1lbnRzRGlyIiwiZG9zc2llcnNEaXIiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydCIsInRvRG9zc2llcnNMZWdpc2xhdGlmcyIsIl9pdGVyYXRvcjIwIiwidGV4dGVzTGVnaXNsYXRpZnMiLCJkb2N1bWVudCIsIl9zdGVwMjAiLCJ3cml0ZURvY3VtZW50UmVvcmdhbml6ZWRKc29uIiwiX2l0ZXJhdG9yMjEiLCJkb3NzaWVyIiwiX3N0ZXAyMSIsImRvc3NpZXJQYXJsZW1lbnRhaXJlIiwid3JpdGVEb3NzaWVyUGFybGVtZW50YWlyZVJlb3JnYW5pemVkSnNvbiIsIl9pdGVyYXRvcjIyIiwiX3N0ZXAyMiIsImRvY3VtZW50U3BsaXRQYXRoIiwiZG9jdW1lbnRGaWxlbmFtZSIsImRvY3VtZW50T3JpZ2luYWxGaWxlUGF0aCIsImRvY3VtZW50T3JpZ2luYWxKc29uIiwiZG9jdW1lbnRPcmlnaW5hbCIsInRvRG9jdW1lbnQiLCJfaXRlcmF0b3IyMyIsIl9zdGVwMjMiLCJkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZW5hbWUiLCJkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsRmlsZVBhdGgiLCJkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsSnNvbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWwiLCJ0b0Rvc3NpZXJQYXJsZW1lbnRhaXJlIiwiU2NydXRpbnMiLCJfaXRlcmF0b3IyNCIsInNjcnV0aW5zIiwiX3N0ZXAyNCIsIl9pdGVyYXRvcjI1IiwiX3N0ZXAyNSIsIlNjcnV0aW5zUmF3Q29udmVydCIsInRvU2NydXRpbnMiLCJfaXRlcmF0b3IyNiIsInNjcnV0aW4iLCJfc3RlcDI2Iiwid3JpdGVTY3J1dGluUmVvcmdhbml6ZWRKc29uIiwiX2l0ZXJhdG9yMjciLCJfc3RlcDI3Iiwic2NydXRpblNwbGl0UGF0aCIsInNjcnV0aW5GaWxlbmFtZSIsInNjcnV0aW5PcmlnaW5hbEZpbGVQYXRoIiwic2NydXRpbk9yaWdpbmFsSnNvbiIsInNjcnV0aW5PcmlnaW5hbCIsInRvU2NydXRpbldyYXBwZXIiLCJRdWVzdGlvbnMiLCJfaXRlcmF0b3IyOCIsInF1ZXN0aW9ucyIsIl9zdGVwMjgiLCJfaXRlcmF0b3IyOSIsIl9zdGVwMjkiLCJfaXRlcmF0b3IzMCIsIl9zdGVwMzAiLCJxdWVzdGlvblNwbGl0UGF0aCIsInF1ZXN0aW9uRmlsZW5hbWUiLCJxdWVzdGlvbk9yaWdpbmFsRmlsZVBhdGgiLCJxdWVzdGlvbk9yaWdpbmFsSnNvbiIsInF1ZXN0aW9uT3JpZ2luYWwiLCJRdWVzdGlvbnNSYXdDb252ZXJ0IiwidG9RdWVzdGlvbldyYXBwZXIiLCJxdWVzdGlvbiIsIndyaXRlUXVlc3Rpb25zUmVvcmdhbml6ZWRKc29uIiwiQ29tcHRlc1JlbmR1c1NlYW5jZXMiLCJfaXRlcmF0b3IzMSIsImNvbXB0ZXNSZW5kdXNTZWFuY2VzIiwiX3N0ZXAzMSIsIl9pdGVyYXRvcjMyIiwiX3N0ZXAzMiIsIl9pdGVyYXRvcjMzIiwiX3N0ZXAzMyIsImNvbXB0ZVJlbmR1U2VhbmNlU3BsaXRQYXRoIiwiY29tcHRlUmVuZHVTZWFuY2VGaWxlbmFtZSIsImNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxGaWxlUGF0aCIsImNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxKc29uIiwiY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbCIsIkNvbXB0ZXNSZW5kdXNSYXdDb252ZXJ0IiwidG9Db21wdGVSZW5kdVdyYXBwZXIiLCJjb21wdGVSZW5kdVNlYW5jZSIsImNvbXB0ZVJlbmR1Iiwid3JpdGVDb21wdGVzUmVuZHVzUmVvcmdhbml6ZWRKc29uIiwiZXhpc3RpbmdEYXRlVG9Kc29uIiwidWlkVGV4dGVMZWdpc2xhdGlmIiwidGV4dGVMZWdpc2xhdGlmUmVmIiwidGV4dGVMZWdpc2xhdGlmRGlyIiwicGF0aEZyb21Eb2N1bWVudFVpZCIsInBhdGhGcm9tRG9zc2llclBhcmxlbWVudGFpcmVVaWQiLCJyZXVuaW9uc0RpciIsInBhdGhGcm9tUmV1bmlvblVpZCIsInNjcnV0aW5zRGlyIiwicGF0aEZyb21TY3J1dGluVWlkIiwicXVlc3Rpb25zRGlyIiwicXVlc3Rpb25VaWRSZWdleCIsInBhdGhGcm9tVWlkIiwiY29tcHRlc1JlbmR1c0RpciIsImNvbXB0ZVJlbmR1VWlkUmVnZXgiLCJtYWluIiwiZXhpdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL3Jlb3JnYW5pemVfZGF0YS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiXG5pbXBvcnQgY29tbWFuZExpbmVBcmdzIGZyb20gXCJjb21tYW5kLWxpbmUtYXJnc1wiXG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcblxuaW1wb3J0IHtcbiAgZGF0YXNldHMsXG4gIERhdGFzZXRTdHJ1Y3R1cmUsXG4gIEVuYWJsZWREYXRhc2V0cyxcbiAgZmlsdGVyQnlMZWdpc2xhdHVyZSxcbn0gZnJvbSBcIi4uL2RhdGFzZXRzXCJcbmltcG9ydCB7IGV4aXN0aW5nRGF0ZVRvSnNvbiwgcGF0Y2hlZERhdGVUb0pzb24gfSBmcm9tIFwiLi4vZGF0ZXNcIlxuaW1wb3J0ICogYXMgZ2l0IGZyb20gXCIuLi9naXRcIlxuaW1wb3J0IHsgd2Fsa0RpciB9IGZyb20gXCIuLi9maWxlX3N5c3RlbXNcIlxuaW1wb3J0IHtcbiAgcGF0aEZyb21Eb2N1bWVudFVpZCxcbiAgcGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZCxcbiAgcGF0aEZyb21SZXVuaW9uVWlkLFxuICBwYXRoRnJvbVNjcnV0aW5VaWQsXG4gIHBhdGhGcm9tVWlkLFxufSBmcm9tIFwiLi4vbG9hZGVyc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9hY3RldXJzX2V0X29yZ2FuZXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBZ2VuZGFzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvYWdlbmRhc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFtZW5kZW1lbnRzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvYW1lbmRlbWVudHNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBTY3J1dGluc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL3NjcnV0aW5zXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgUXVlc3Rpb25zUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvcXVlc3Rpb25zXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQ29tcHRlc1JlbmR1c1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2RlYmF0c1wiXG5cbmZ1bmN0aW9uIHBhcnNlQXJncyhhcmd2OiBzdHJpbmdbXSk6IGFueSB7XG4gIGNvbnN0IG9wdGlvbnNEZWZpbml0aW9ucyA9IFtcbiAgICB7XG4gICAgICBhbGlhczogXCJDXCIsXG4gICAgICBoZWxwOiBcImNsb25lIHJlcG9zaXRvcmllcyBmcm9tIGdpdmVuIGdyb3VwIChvciBvcmdhbml6YXRpb24pIGdpdCBVUkxcIixcbiAgICAgIG5hbWU6IFwiY2xvbmVcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcImNcIixcbiAgICAgIGhlbHA6IFwiY29tbWl0IHNwbGl0IGZpbGVzXCIsXG4gICAgICBuYW1lOiBcImNvbW1pdFwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcImtcIixcbiAgICAgIGRlZmF1bHRWYWx1ZTogW1wiQWxsXCJdLFxuICAgICAgaGVscDogXCJjYXRlZ29yaWVzIG9mIGRhdGFzZXRzIHRvIHJlb3JnYW5pemVcIixcbiAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgbmFtZTogXCJjYXRlZ29yaWVzXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJsXCIsXG4gICAgICBoZWxwOiBcImxlZ2lzbGF0dXJlcyBvZiBjYXRlZ29yaWVzIG9mIGRhdGFzZXRzIHRvIHJldHJpZXZlOyBsZWF2ZSBlbXB0eSBvciB1c2UgMCBmb3IgYWxsXCIsXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgIG5hbWU6IFwibGVnaXNsYXR1cmVcIixcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcInBcIixcbiAgICAgIGhlbHA6IFwicHVsbCByZXBvc2l0b3JpZXMgYmVmb3JlIHByb2NlZWRpbmdcIixcbiAgICAgIG5hbWU6IFwicHVsbFwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcInJcIixcbiAgICAgIGhlbHA6IFwicHVzaCBjb21taXQgdG8gZ2l2ZW4gcmVtb3RlXCIsXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgIG5hbWU6IFwicmVtb3RlXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJzXCIsXG4gICAgICBoZWxwOiBcImRvbid0IGxvZyBhbnl0aGluZ1wiLFxuICAgICAgbmFtZTogXCJzaWxlbnRcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJWXCIsXG4gICAgICBoZWxwOiBcImRvbid0IHZhbGlkYXRlIHJhdyBkYXRhXCIsXG4gICAgICBuYW1lOiBcIm5vLXZhbGlkYXRlLXJhd1wiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcInZcIixcbiAgICAgIGhlbHA6IFwidmVyYm9zZSBsb2dzXCIsXG4gICAgICBuYW1lOiBcInZlcmJvc2VcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBkZWZhdWx0T3B0aW9uOiB0cnVlLFxuICAgICAgaGVscDogXCJkaXJlY3RvcnkgY29udGFpbmluZyBBc3NlbWJsw6llIG9wZW4gZGF0YSBmaWxlc1wiLFxuICAgICAgbmFtZTogXCJkYXRhRGlyXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgXVxuICBjb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucywge1xuICAgIGFyZ3Y6IGFyZ3YsXG4gIH0pXG4gIHJldHVybiBvcHRpb25zXG59XG5cbmZ1bmN0aW9uIHJlb3JnYW5pemVEYXRhKG9wdGlvbnM6IGFueSk6IG51bWJlciB7XG4gIGNvbnN0IGRhdGFEaXIgPSBvcHRpb25zLmRhdGFEaXJcbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gcGF0Y2hlZERhdGVUb0pzb25cblxuICBsZXQgZXhpdENvZGUgPSBvcHRpb25zLmNvbW1pdCA/IDEwIDogMDtcbiAgY29uc3QgZ2l0R3JvdXBVcmwgPSBvcHRpb25zLmNsb25lXG4gICAgPyBvcHRpb25zLmNsb25lLnRyaW0oKS5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpXG4gICAgOiB1bmRlZmluZWRcbiAgY29uc3QgdmFsaWRhdGVSYXdEYXRhID0gIW9wdGlvbnNbXCJuby12YWxpZGF0ZS1yYXdcIl1cblxuICBvcHRpb25zLmNhdGVnb3JpZXMubWFwKChkYXRhc2V0TmFtZTogc3RyaW5nKSA9PlxuICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICAgIChFbmFibGVkRGF0YXNldHMgYXMgYW55IGFzIHsgW25hbWU6IHN0cmluZ106IEVuYWJsZWREYXRhc2V0cyB9KVtcbiAgICAgIGRhdGFzZXROYW1lXG4gICAgICBdLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgYFVua25vd24gbmFtZSBvZiBkYXRhc2V0OiAke2RhdGFzZXROYW1lfWAsXG4gICAgKSxcbiAgKVxuICBjb25zdCBlbmFibGVkRGF0YXNldHMgPSBvcHRpb25zLmNhdGVnb3JpZXMucmVkdWNlKFxuICAgIChlbmFibGVkRGF0YXNldHM6IEVuYWJsZWREYXRhc2V0cywgZGF0YXNldE5hbWU6IHN0cmluZyk6IEVuYWJsZWREYXRhc2V0cyA9PlxuICAgICAgZW5hYmxlZERhdGFzZXRzIHxcbiAgICAgIChFbmFibGVkRGF0YXNldHMgYXMgYW55IGFzIHsgW25hbWU6IHN0cmluZ106IEVuYWJsZWREYXRhc2V0cyB9KVtcbiAgICAgIGRhdGFzZXROYW1lXG4gICAgICBdLFxuICAgIEVuYWJsZWREYXRhc2V0cy5Ob25lLFxuICApXG5cbiAgbGV0IGNob3NlbkRhdGFzZXRzID0gZmlsdGVyQnlMZWdpc2xhdHVyZShkYXRhc2V0cywgb3B0aW9ucy5sZWdpc2xhdHVyZSlcblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvc2VuRGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBpZiAob3B0aW9ucy5wdWxsKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi9tYXN0ZXJgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgICBleGVjU3luYyhgZ2l0IHB1bGwgLS1yZWJhc2VgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjdGV1cnNSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwiYWN0ZXVyc1wiKVxuICAgICAgZnMubWtkaXJTeW5jKGFjdGV1cnNSZW9yZ2FuaXplZERpcilcbiAgICAgIGNvbnN0IG9yZ2FuZXNSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwib3JnYW5lc1wiKVxuICAgICAgZnMubWtkaXJTeW5jKG9yZ2FuZXNSZW9yZ2FuaXplZERpcilcblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9BY3RldXJzRXRPcmdhbmVzKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBhY3RldXIgb2Ygb3JpZ2luYWxEYXRhLmV4cG9ydC5hY3RldXJzLmFjdGV1cikge1xuICAgICAgICAgICAgICBjb25zdCByZW9yZ2FuaXplZEpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIGFjdGV1cnNSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBhY3RldXIudWlkW1wiI3RleHRcIl0gKyBcIi5qc29uXCIsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShhY3RldXIsIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3JnYW5lIG9mIG9yaWdpbmFsRGF0YS5leHBvcnQub3JnYW5lcy5vcmdhbmUpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmdhbmVzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgb3JnYW5lLnVpZCArIFwiLmpzb25cIixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9yZ2FuZSwgbnVsbCwgMiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IGRlcG9ydHNCeUFjdGV1clVpZDoge1xuICAgICAgICAgICAgICBbYWN0ZXVyVWlkOiBzdHJpbmddOiB7IHVpZDogc3RyaW5nIH1bXVxuICAgICAgICAgICAgfSA9IHt9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZzLmV4aXN0c1N5bmMoXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsIFwiZGVwb3J0XCIpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBkZXBvcnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIFtcImRlcG9ydFwiXSxcbiAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICAgIGRlcG9ydFNwbGl0UGF0aFtkZXBvcnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgICBpZiAoIWRlcG9ydEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgLi4uZGVwb3J0U3BsaXRQYXRoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgICAgYCAgTG9hZGluZyBcImRlcG9ydFwiIGZpbGU6ICR7ZGVwb3J0T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICAgIGRlcG9ydE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9EZXBvcnQoZGVwb3J0T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRlcG9ydE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnQgPSBkZXBvcnRPcmlnaW5hbC5kZXBvcnRcbiAgICAgICAgICAgICAgICBsZXQgZGVwb3J0cyA9IGRlcG9ydHNCeUFjdGV1clVpZFtkZXBvcnQuYWN0ZXVyUmVmXVxuICAgICAgICAgICAgICAgIGlmIChkZXBvcnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIGRlcG9ydHMgPSBkZXBvcnRzQnlBY3RldXJVaWRbZGVwb3J0LmFjdGV1clJlZl0gPSBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZXBvcnRzLnB1c2goZGVwb3J0KVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9yIChjb25zdCBkZXBvcnRzIG9mIE9iamVjdC52YWx1ZXMoZGVwb3J0c0J5QWN0ZXVyVWlkKSkge1xuICAgICAgICAgICAgICAgIGRlcG9ydHMuc29ydCgoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgIGEudWlkLmxlbmd0aCA9PT0gYi51aWQubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gYS51aWQubG9jYWxlQ29tcGFyZShiLnVpZClcbiAgICAgICAgICAgICAgICAgICAgOiBhLnVpZC5sZW5ndGggLSBiLnVpZC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG1hbmRhdHNCeUFjdGV1clVpZDoge1xuICAgICAgICAgICAgICBbYWN0ZXVyVWlkOiBzdHJpbmddOiB7IHVpZDogc3RyaW5nIH1bXVxuICAgICAgICAgICAgfSA9IHt9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZzLmV4aXN0c1N5bmMoXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsIFwibWFuZGF0XCIpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBtYW5kYXRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIFtcIm1hbmRhdFwiXSxcbiAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICAgIG1hbmRhdFNwbGl0UGF0aFttYW5kYXRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgICBpZiAoIW1hbmRhdEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgLi4ubWFuZGF0U3BsaXRQYXRoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgICAgYCAgTG9hZGluZyBcIm1hbmRhdFwiIGZpbGU6ICR7bWFuZGF0T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICAgIG1hbmRhdE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9NYW5kYXRXcmFwcGVyKFxuICAgICAgICAgICAgICAgICAgICBtYW5kYXRPcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UobWFuZGF0T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdCA9IG1hbmRhdE9yaWdpbmFsLm1hbmRhdFxuICAgICAgICAgICAgICAgIGxldCBtYW5kYXRzID0gbWFuZGF0c0J5QWN0ZXVyVWlkW21hbmRhdC5hY3RldXJSZWZdXG4gICAgICAgICAgICAgICAgaWYgKG1hbmRhdHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgbWFuZGF0cyA9IG1hbmRhdHNCeUFjdGV1clVpZFttYW5kYXQuYWN0ZXVyUmVmXSA9IFtdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG1hbmRhdHMucHVzaChtYW5kYXQpXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IG1hbmRhdHMgb2YgT2JqZWN0LnZhbHVlcyhtYW5kYXRzQnlBY3RldXJVaWQpKSB7XG4gICAgICAgICAgICAgICAgbWFuZGF0cy5zb3J0KChhLCBiKSA9PlxuICAgICAgICAgICAgICAgICAgYS51aWQubGVuZ3RoID09PSBiLnVpZC5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgPyBhLnVpZC5sb2NhbGVDb21wYXJlKGIudWlkKVxuICAgICAgICAgICAgICAgICAgICA6IGEudWlkLmxlbmd0aCAtIGIudWlkLmxlbmd0aCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBhY3RldXJTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wiYWN0ZXVyXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBhY3RldXJGaWxlbmFtZSA9IGFjdGV1clNwbGl0UGF0aFthY3RldXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFhY3RldXJGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uYWN0ZXVyU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcImFjdGV1clwiIGZpbGU6ICR7YWN0ZXVyT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBhY3RldXJPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ck9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvQWN0ZXVyKGFjdGV1ck9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoYWN0ZXVyT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXIgPSBhY3RldXJPcmlnaW5hbC5hY3RldXJcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyVWlkID0gYWN0ZXVyLnVpZFtcIiN0ZXh0XCJdXG4gICAgICAgICAgICAgIGNvbnN0IGRlcG9ydHMgPSBkZXBvcnRzQnlBY3RldXJVaWRbYWN0ZXVyVWlkXVxuICAgICAgICAgICAgICBpZiAoZGVwb3J0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFjdGV1ci5kZXBvcnRzLCB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgYWN0ZXVyLmRlcG9ydHMgPSB7IGRlcG9ydDogZGVwb3J0cyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgbWFuZGF0cyA9IG1hbmRhdHNCeUFjdGV1clVpZFthY3RldXJVaWRdXG4gICAgICAgICAgICAgIGlmIChtYW5kYXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWN0ZXVyLm1hbmRhdHMsIHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBhY3RldXIubWFuZGF0cyA9IHsgbWFuZGF0OiBtYW5kYXRzIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJSZW9yZ2FuaXplZEpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIGFjdGV1cnNSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBhY3RldXJVaWQgKyBcIi5qc29uXCIsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBhY3RldXJSZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShhY3RldXIsIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3JnYW5lU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcIm9yZ2FuZVwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lRmlsZW5hbWUgPSBvcmdhbmVTcGxpdFBhdGhbb3JnYW5lU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghb3JnYW5lRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLm9yZ2FuZVNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJvcmdhbmVcIiBmaWxlOiAke29yZ2FuZU9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgb3JnYW5lT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydC50b09yZ2FuZShvcmdhbmVPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yZ2FuZU9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lID0gb3JnYW5lT3JpZ2luYWwub3JnYW5lXG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZVJlb3JnYW5pemVkSnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JnYW5lc1Jlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIG9yZ2FuZS51aWQgKyBcIi5qc29uXCIsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBvcmdhbmVSZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShvcmdhbmUsIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMTAgJiYgZXJyb3JDb2RlICE9PSAxMCkgfHxcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDAgJiYgZXJyb3JDb2RlICE9PSAwICYmIGVycm9yQ29kZSAhPT0gMTApXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFnZW5kYXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvc2VuRGF0YXNldHMuYWdlbmRhcykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBBZ2VuZGFzUmF3Q29udmVydC50b0FnZW5kYXMob3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJldW5pb24gb2Ygb3JpZ2luYWxEYXRhLnJldW5pb25zLnJldW5pb24pIHtcbiAgICAgICAgICAgICAgd3JpdGVSZXVuaW9uUmVvcmdhbml6ZWRKc29uKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgcmV1bmlvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmV1bmlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJyZXVuaW9uXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uRmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIHJldW5pb25TcGxpdFBhdGhbcmV1bmlvblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIXJldW5pb25GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLnJldW5pb25TcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwicmV1bmlvblwiIGZpbGU6ICR7cmV1bmlvbk9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbk9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHJldW5pb25PcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb25PcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBZ2VuZGFzUmF3Q29udmVydC50b1JldW5pb24ocmV1bmlvbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UocmV1bmlvbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbiA9IHJldW5pb25PcmlnaW5hbC5yZXVuaW9uXG4gICAgICAgICAgICAgIHdyaXRlUmV1bmlvblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHJldW5pb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMTAgJiYgZXJyb3JDb2RlICE9PSAxMCkgfHxcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDAgJiYgZXJyb3JDb2RlICE9PSAwICYmIGVycm9yQ29kZSAhPT0gMTApXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFtZW5kZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob3NlbkRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IEFtZW5kZW1lbnRzUmF3Q29udmVydC50b0FtZW5kZW1lbnRzKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCB0ZXh0ZUxlZ2lzbGF0aWYgb2Ygb3JpZ2luYWxEYXRhLnRleHRlc0V0QW1lbmRlbWVudHNcbiAgICAgICAgICAgICAgLnRleHRlbGVnKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudCBvZiB0ZXh0ZUxlZ2lzbGF0aWYuYW1lbmRlbWVudHMpIHtcbiAgICAgICAgICAgICAgICB3cml0ZUFtZW5kZW1lbnRSZW9yZ2FuaXplZEpzb24oXG4gICAgICAgICAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgICBhbWVuZGVtZW50LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCBhbWVuZGVtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgYW1lbmRlbWVudFNwbGl0UGF0aFthbWVuZGVtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghYW1lbmRlbWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uYW1lbmRlbWVudFNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJhbWVuZGVtZW50XCIgZmlsZTogJHthbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50T3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgYW1lbmRlbWVudE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IEFtZW5kZW1lbnRzUmF3Q29udmVydC50b0FtZW5kZW1lbnRXcmFwcGVyKFxuICAgICAgICAgICAgICAgICAgYW1lbmRlbWVudE9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGFtZW5kZW1lbnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnQgPSBhbWVuZGVtZW50T3JpZ2luYWwuYW1lbmRlbWVudFxuICAgICAgICAgICAgICB3cml0ZUFtZW5kZW1lbnRSZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBhbWVuZGVtZW50KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDEwICYmIGVycm9yQ29kZSAhPT0gMTApIHx8XG4gICAgICAgICAgKGV4aXRDb2RlID09PSAwICYmIGVycm9yQ29kZSAhPT0gMCAmJiBlcnJvckNvZGUgIT09IDEwKVxuICAgICAgICApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Eb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob3NlbkRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRvY3VtZW50c0RpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwiZG9jdW1lbnRzXCIpXG4gICAgICBmcy5ta2RpclN5bmMoZG9jdW1lbnRzRGlyKVxuICAgICAgY29uc3QgZG9zc2llcnNEaXIgPSBwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBcImRvc3NpZXJzXCIpXG4gICAgICBmcy5ta2RpclN5bmMoZG9zc2llcnNEaXIpXG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LnRvRG9zc2llcnNMZWdpc2xhdGlmcyhcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBkb2N1bWVudCBvZiBvcmlnaW5hbERhdGEuZXhwb3J0LnRleHRlc0xlZ2lzbGF0aWZzXG4gICAgICAgICAgICAgIC5kb2N1bWVudCkge1xuICAgICAgICAgICAgICB3cml0ZURvY3VtZW50UmVvcmdhbml6ZWRKc29uKGRvY3VtZW50c0RpciwgZG9jdW1lbnQpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBkb3NzaWVyUGFybGVtZW50YWlyZSB9IG9mIG9yaWdpbmFsRGF0YS5leHBvcnRcbiAgICAgICAgICAgICAgLmRvc3NpZXJzTGVnaXNsYXRpZnMuZG9zc2llcikge1xuICAgICAgICAgICAgICB3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgIGRvc3NpZXJzRGlyLFxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvY3VtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImRvY3VtZW50XCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBkb2N1bWVudFNwbGl0UGF0aFtkb2N1bWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uZG9jdW1lbnRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiZG9jdW1lbnRcIiBmaWxlOiAke2RvY3VtZW50T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGRvY3VtZW50T3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LnRvRG9jdW1lbnQoZG9jdW1lbnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRvY3VtZW50T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudCA9IGRvY3VtZW50T3JpZ2luYWwuZG9jdW1lbnRcbiAgICAgICAgICAgICAgd3JpdGVEb2N1bWVudFJlb3JnYW5pemVkSnNvbihkb2N1bWVudHNEaXIsIGRvY3VtZW50KVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImRvc3NpZXJQYXJsZW1lbnRhaXJlXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aFtcbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aC5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICBpZiAoIWRvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiZG9zc2llclBhcmxlbWVudGFpcmVcIiBmaWxlOiAke2Rvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LnRvRG9zc2llclBhcmxlbWVudGFpcmUoXG4gICAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZSA9XG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbC5kb3NzaWVyUGFybGVtZW50YWlyZVxuICAgICAgICAgICAgICB3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgIGRvc3NpZXJzRGlyLFxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMTAgJiYgZXJyb3JDb2RlICE9PSAxMCkgfHxcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDAgJiYgZXJyb3JDb2RlICE9PSAwICYmIGVycm9yQ29kZSAhPT0gMTApXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlNjcnV0aW5zKSB7XG4gICAgZm9yIChsZXQgZGF0YXNldCBvZiBjaG9zZW5EYXRhc2V0cy5zY3J1dGlucykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBTY3J1dGluc1Jhd0NvbnZlcnQudG9TY3J1dGlucyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2NydXRpbiBvZiBvcmlnaW5hbERhdGEuc2NydXRpbnMuc2NydXRpbikge1xuICAgICAgICAgICAgICB3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBzY3J1dGluKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzY3J1dGluU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5GaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgc2NydXRpblNwbGl0UGF0aFtzY3J1dGluU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghc2NydXRpbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5PcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uc2NydXRpblNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJzY3J1dGluXCIgZmlsZTogJHtzY3J1dGluT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgc2NydXRpbk9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbk9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IFNjcnV0aW5zUmF3Q29udmVydC50b1NjcnV0aW5XcmFwcGVyKHNjcnV0aW5PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKHNjcnV0aW5PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW4gPSBzY3J1dGluT3JpZ2luYWwuc2NydXRpblxuICAgICAgICAgICAgICB3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBzY3J1dGluKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDEwICYmIGVycm9yQ29kZSAhPT0gMTApIHx8XG4gICAgICAgICAgKGV4aXRDb2RlID09PSAwICYmIGVycm9yQ29kZSAhPT0gMCAmJiBlcnJvckNvZGUgIT09IDEwKVxuICAgICAgICApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5RdWVzdGlvbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMucXVlc3Rpb25zKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcXVlc3Rpb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25GaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgcXVlc3Rpb25TcGxpdFBhdGhbcXVlc3Rpb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFxdWVzdGlvbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLnF1ZXN0aW9uU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcInF1ZXN0aW9uXCIgZmlsZTogJHtxdWVzdGlvbk9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25PcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBxdWVzdGlvbk9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbk9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IFF1ZXN0aW9uc1Jhd0NvbnZlcnQudG9RdWVzdGlvbldyYXBwZXIocXVlc3Rpb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKHF1ZXN0aW9uT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbiA9IHF1ZXN0aW9uT3JpZ2luYWwucXVlc3Rpb25cbiAgICAgICAgICAgICAgd3JpdGVRdWVzdGlvbnNSZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBxdWVzdGlvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdpdC5jb21taXRBbmRQdXNoKFxuICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgICBvcHRpb25zLnJlbW90ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGV4aXRDb2RlID09PSAxMCAmJiBlcnJvckNvZGUgIT09IDEwKSB8fFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMCAmJiBlcnJvckNvZGUgIT09IDAgJiYgZXJyb3JDb2RlICE9PSAxMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXhpdENvZGUgPSBlcnJvckNvZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQ29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuY29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsIFwiLnhtbFwiKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29tcHRlUmVuZHVTZWFuY2VTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgY29tcHRlUmVuZHVTZWFuY2VGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgY29tcHRlUmVuZHVTZWFuY2VTcGxpdFBhdGhbXG4gICAgICAgICAgICAgICAgY29tcHRlUmVuZHVTZWFuY2VTcGxpdFBhdGgubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgaWYgKCFjb21wdGVSZW5kdVNlYW5jZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmNvbXB0ZVJlbmR1U2VhbmNlU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcImNvbXB0ZVJlbmR1U2VhbmNlXCIgZmlsZTogJHtjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBDb21wdGVzUmVuZHVzUmF3Q29udmVydC50b0NvbXB0ZVJlbmR1V3JhcHBlcihcbiAgICAgICAgICAgICAgICAgIGNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxKc29uLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgICAgY29uc3QgY29tcHRlUmVuZHVTZWFuY2UgPSBjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsLmNvbXB0ZVJlbmR1XG4gICAgICAgICAgICAgIHdyaXRlQ29tcHRlc1JlbmR1c1Jlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgY29tcHRlUmVuZHVTZWFuY2UsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdpdC5jb21taXRBbmRQdXNoKFxuICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgICBvcHRpb25zLnJlbW90ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGV4aXRDb2RlID09PSAxMCAmJiBlcnJvckNvZGUgIT09IDEwKSB8fFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMCAmJiBlcnJvckNvZGUgIT09IDAgJiYgZXJyb3JDb2RlICE9PSAxMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXhpdENvZGUgPSBlcnJvckNvZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlc3RvcmUgc3RhbmRhcmQgY29udmVyc2lvbiBvZiBkYXRlcyB0byBKU09OLlxuICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBleGlzdGluZ0RhdGVUb0pzb25cblxuICByZXR1cm4gZXhpdENvZGVcbn1cblxuZnVuY3Rpb24gd3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uKFxuICBkYXRhc2V0UmVvcmdhbml6ZWREaXI6IHN0cmluZyxcbiAgYW1lbmRlbWVudDoge1xuICAgIHVpZDogc3RyaW5nXG4gICAgdGV4dGVMZWdpc2xhdGlmUmVmOiBzdHJpbmdcbiAgfSxcbik6IHZvaWQge1xuICBjb25zdCB1aWRUZXh0ZUxlZ2lzbGF0aWYgPSBhbWVuZGVtZW50LnRleHRlTGVnaXNsYXRpZlJlZlxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwodWlkVGV4dGVMZWdpc2xhdGlmLCB1bmRlZmluZWQpXG4gIGNvbnN0IHRleHRlTGVnaXNsYXRpZkRpciA9IHBhdGguam9pbihcbiAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgdWlkVGV4dGVMZWdpc2xhdGlmLFxuICApXG4gIGZzLmVuc3VyZURpclN5bmModGV4dGVMZWdpc2xhdGlmRGlyKVxuICBjb25zdCByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICB0ZXh0ZUxlZ2lzbGF0aWZEaXIsXG4gICAgYW1lbmRlbWVudC51aWQgKyBcIi5qc29uXCIsXG4gIClcbiAgZnMud3JpdGVGaWxlU3luYyhcbiAgICByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICBKU09OLnN0cmluZ2lmeShhbWVuZGVtZW50LCBudWxsLCAyKSxcbiAgICB7XG4gICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgfSxcbiAgKVxufVxuXG5mdW5jdGlvbiB3cml0ZURvY3VtZW50UmVvcmdhbml6ZWRKc29uKFxuICBkb2N1bWVudHNEaXI6IHN0cmluZyxcbiAgZG9jdW1lbnQ6IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tRG9jdW1lbnRVaWQoZG9jdW1lbnRzRGlyLCBkb2N1bWVudC51aWQpXG4gIGZzLndyaXRlRmlsZVN5bmMoYCR7YmFzZW5hbWV9Lmpzb25gLCBKU09OLnN0cmluZ2lmeShkb2N1bWVudCwgbnVsbCwgMiksIHtcbiAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG9zc2llclBhcmxlbWVudGFpcmVSZW9yZ2FuaXplZEpzb24oXG4gIGRvc3NpZXJzRGlyOiBzdHJpbmcsXG4gIGRvc3NpZXJQYXJsZW1lbnRhaXJlOiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgYmFzZW5hbWUgPSBwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkKFxuICAgIGRvc3NpZXJzRGlyLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlLnVpZCxcbiAgKVxuICBmcy53cml0ZUZpbGVTeW5jKFxuICAgIGAke2Jhc2VuYW1lfS5qc29uYCxcbiAgICBKU09OLnN0cmluZ2lmeShkb3NzaWVyUGFybGVtZW50YWlyZSwgbnVsbCwgMiksXG4gICAge1xuICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgIH0sXG4gIClcbn1cblxuZnVuY3Rpb24gd3JpdGVSZXVuaW9uUmVvcmdhbml6ZWRKc29uKFxuICByZXVuaW9uc0Rpcjogc3RyaW5nLFxuICByZXVuaW9uOiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgYmFzZW5hbWUgPSBwYXRoRnJvbVJldW5pb25VaWQocmV1bmlvbnNEaXIsIHJldW5pb24udWlkKVxuICBmcy53cml0ZUZpbGVTeW5jKGAke2Jhc2VuYW1lfS5qc29uYCwgSlNPTi5zdHJpbmdpZnkocmV1bmlvbiwgbnVsbCwgMiksIHtcbiAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHdyaXRlU2NydXRpblJlb3JnYW5pemVkSnNvbihcbiAgc2NydXRpbnNEaXI6IHN0cmluZyxcbiAgc2NydXRpbjogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21TY3J1dGluVWlkKHNjcnV0aW5zRGlyLCBzY3J1dGluLnVpZClcbiAgZnMud3JpdGVGaWxlU3luYyhgJHtiYXNlbmFtZX0uanNvbmAsIEpTT04uc3RyaW5naWZ5KHNjcnV0aW4sIG51bGwsIDIpLCB7XG4gICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICB9KVxufVxuXG5mdW5jdGlvbiB3cml0ZVF1ZXN0aW9uc1Jlb3JnYW5pemVkSnNvbihcbiAgcXVlc3Rpb25zRGlyOiBzdHJpbmcsXG4gIHF1ZXN0aW9uOiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgcXVlc3Rpb25VaWRSZWdleDogUmVnRXhwID0gL15RQU4oUlxcZCspKExcXGQrKVEoRXxHfE9TRCkoXFxkKykkL1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tVWlkKHF1ZXN0aW9uc0RpciwgcXVlc3Rpb24udWlkLCBxdWVzdGlvblVpZFJlZ2V4KVxuICBmcy53cml0ZUZpbGVTeW5jKGAke2Jhc2VuYW1lfS5qc29uYCwgSlNPTi5zdHJpbmdpZnkocXVlc3Rpb24sIG51bGwsIDIpLCB7XG4gICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICB9KVxufVxuXG5mdW5jdGlvbiB3cml0ZUNvbXB0ZXNSZW5kdXNSZW9yZ2FuaXplZEpzb24oXG4gIGNvbXB0ZXNSZW5kdXNEaXI6IHN0cmluZyxcbiAgY29tcHRlUmVuZHU6IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBjb21wdGVSZW5kdVVpZFJlZ2V4OiBSZWdFeHAgPVxuICAgIC9eQ1JTQU4oUlxcZCspKExcXGQrKShTXFxkKykoT3xFKShcXGQrKShOXFxkKykkL1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tVWlkKFxuICAgIGNvbXB0ZXNSZW5kdXNEaXIsXG4gICAgY29tcHRlUmVuZHUudWlkLFxuICAgIGNvbXB0ZVJlbmR1VWlkUmVnZXgsXG4gIClcbiAgZnMud3JpdGVGaWxlU3luYyhgJHtiYXNlbmFtZX0uanNvbmAsIEpTT04uc3RyaW5naWZ5KGNvbXB0ZVJlbmR1LCBudWxsLCAyKSwge1xuICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgfSlcbn1cblxuZnVuY3Rpb24gbWFpbihhcmd2OiBhbnkpOiBudW1iZXIge1xuICBjb25zdCBvcHRpb25zID0gcGFyc2VBcmdzKGFyZ3YpXG4gIHJldHVybiByZW9yZ2FuaXplRGF0YShvcHRpb25zKVxufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmIChwcm9jZXNzLmFyZ3ZbMV0uZW5kc1dpdGgoXCJyZW9yZ2FuaXplX2RhdGEudHNcIikpXG4gIHByb2Nlc3MuZXhpdChtYWluKHByb2Nlc3MuYXJndikpXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGNBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGdCQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxRQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxLQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBSyxTQUFBLEdBQUFMLE9BQUE7QUFNQSxJQUFBTSxNQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxHQUFBLEdBQUFDLHVCQUFBLENBQUFSLE9BQUE7QUFDQSxJQUFBUyxhQUFBLEdBQUFULE9BQUE7QUFDQSxJQUFBVSxRQUFBLEdBQUFWLE9BQUE7QUFPQSxJQUFBVyxtQkFBQSxHQUFBWCxPQUFBO0FBQ0EsSUFBQVksUUFBQSxHQUFBWixPQUFBO0FBQ0EsSUFBQWEsWUFBQSxHQUFBYixPQUFBO0FBQ0EsSUFBQWMscUJBQUEsR0FBQWQsT0FBQTtBQUNBLElBQUFlLFNBQUEs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