@tricoteuses/assemblee 1.1.5 → 1.1.7

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 (120) hide show
  1. package/lib/api.js +1 -1
  2. package/lib/bugs/acteur-00010/plugin.test.js +1 -1
  3. package/lib/bugs/acteur-00010.js +1 -1
  4. package/lib/bugs/acteur-00010.mjs +1 -1
  5. package/lib/bugs/agenda-00002/plugin.test.js +1 -1
  6. package/lib/bugs/agenda-00002.js +2 -2
  7. package/lib/bugs/agenda-00002.mjs +2 -2
  8. package/lib/bugs/agenda-00008/plugin.test.js +1 -1
  9. package/lib/bugs/agenda-00008.js +1 -1
  10. package/lib/bugs/agenda-00008.mjs +1 -1
  11. package/lib/bugs/agenda-00011/plugin.test.js +1 -1
  12. package/lib/bugs/agenda-00011.js +1 -1
  13. package/lib/bugs/agenda-00011.mjs +1 -1
  14. package/lib/bugs.js +1 -1
  15. package/lib/bugs.mjs +1 -1
  16. package/lib/cleaners/actes_legislatifs.js +1 -1
  17. package/lib/cleaners/actes_legislatifs.mjs +1 -1
  18. package/lib/cleaners/acteurs.js +1 -1
  19. package/lib/cleaners/acteurs.mjs +1 -1
  20. package/lib/cleaners/amendements.js +1 -1
  21. package/lib/cleaners/amendements.mjs +1 -1
  22. package/lib/cleaners/documents.js +1 -1
  23. package/lib/cleaners/documents.mjs +1 -1
  24. package/lib/cleaners/dossiers_legislatifs.js +1 -1
  25. package/lib/cleaners/dossiers_legislatifs.mjs +1 -1
  26. package/lib/cleaners/index.js +1 -1
  27. package/lib/cleaners/organes.js +1 -1
  28. package/lib/cleaners/organes.mjs +1 -1
  29. package/lib/cleaners/reunions.js +1 -1
  30. package/lib/cleaners/reunions.mjs +1 -1
  31. package/lib/cleaners/scrutins.js +1 -1
  32. package/lib/cleaners/scrutins.mjs +1 -1
  33. package/lib/cleaners/xml.js +1 -1
  34. package/lib/cleaners/xml.mjs +1 -1
  35. package/lib/datasets.js +1 -1
  36. package/lib/datasets.mjs +1 -1
  37. package/lib/dates.js +16 -7
  38. package/lib/dates.mjs +15 -6
  39. package/lib/dossiers_legislatifs.js +1 -1
  40. package/lib/dossiers_legislatifs.mjs +1 -1
  41. package/lib/file_systems.js +2 -2
  42. package/lib/file_systems.mjs +2 -2
  43. package/lib/git.d.ts +2 -1
  44. package/lib/git.js +77 -44
  45. package/lib/git.mjs +48 -25
  46. package/lib/index.js +1 -1
  47. package/lib/inserters.js +1 -1
  48. package/lib/inserters.mjs +1 -1
  49. package/lib/loaders.d.ts +52 -2
  50. package/lib/loaders.js +961 -187
  51. package/lib/loaders.mjs +285 -3
  52. package/lib/organes.js +1 -1
  53. package/lib/organes.mjs +1 -1
  54. package/lib/parsers/documents.js +1 -1
  55. package/lib/parsers/documents.mjs +1 -1
  56. package/lib/parsers/index.js +1 -1
  57. package/lib/parsers/recherche_amendements.js +39 -32
  58. package/lib/parsers/recherche_amendements.mjs +5 -1
  59. package/lib/raw_types/acteurs_et_organes.js +1 -1
  60. package/lib/raw_types/acteurs_et_organes.mjs +1 -1
  61. package/lib/raw_types/agendas.js +1 -1
  62. package/lib/raw_types/agendas.mjs +1 -1
  63. package/lib/raw_types/amendements.js +1 -1
  64. package/lib/raw_types/amendements.mjs +1 -1
  65. package/lib/raw_types/dossiers_legislatifs.js +1 -1
  66. package/lib/raw_types/dossiers_legislatifs.mjs +1 -1
  67. package/lib/raw_types/scrutins.js +1 -1
  68. package/lib/raw_types/scrutins.mjs +1 -1
  69. package/lib/scripts/bugs_helper.js +3 -3
  70. package/lib/scripts/bugs_helper.mjs +3 -3
  71. package/lib/scripts/clean_data.js +1 -1
  72. package/lib/scripts/clean_data.mjs +1 -1
  73. package/lib/scripts/clean_reorganized_data.js +63 -61
  74. package/lib/scripts/clean_reorganized_data.mjs +55 -48
  75. package/lib/scripts/diff_amendements.js +1 -1
  76. package/lib/scripts/diff_amendements.mjs +1 -1
  77. package/lib/scripts/document_dossiers_legislatifs.js +1 -1
  78. package/lib/scripts/document_dossiers_legislatifs.mjs +1 -1
  79. package/lib/scripts/get_today_reunions.js +1 -1
  80. package/lib/scripts/merge_scrutins.js +1 -1
  81. package/lib/scripts/merge_scrutins.mjs +1 -1
  82. package/lib/scripts/parse_textes_lois.js +5 -48
  83. package/lib/scripts/parse_textes_lois.mjs +5 -49
  84. package/lib/scripts/raw_types_from_amendements.js +1 -1
  85. package/lib/scripts/raw_types_from_amendements.mjs +1 -1
  86. package/lib/scripts/reorganize_data.js +231 -239
  87. package/lib/scripts/reorganize_data.mjs +50 -59
  88. package/lib/scripts/retrieve_deputes_photos.js +86 -107
  89. package/lib/scripts/retrieve_deputes_photos.mjs +21 -42
  90. package/lib/scripts/retrieve_documents.js +3 -3
  91. package/lib/scripts/retrieve_documents.mjs +3 -3
  92. package/lib/scripts/retrieve_open_data.js +29 -22
  93. package/lib/scripts/retrieve_open_data.mjs +9 -4
  94. package/lib/scripts/retrieve_pending_amendments.js +73 -81
  95. package/lib/scripts/retrieve_pending_amendments.mjs +19 -26
  96. package/lib/scripts/retrieve_senateurs_photos.js +65 -87
  97. package/lib/scripts/retrieve_senateurs_photos.mjs +21 -42
  98. package/lib/scripts/retrieve_textes_lois.js +32 -71
  99. package/lib/scripts/retrieve_textes_lois.mjs +6 -44
  100. package/lib/scripts/test_load.js +1 -1
  101. package/lib/scripts/test_load_big_files.js +1 -1
  102. package/lib/scripts/validate_json.js +3 -3
  103. package/lib/scripts/validate_json.mjs +3 -3
  104. package/lib/shared_types/codes_actes.js +1 -1
  105. package/lib/strings.js +1 -1
  106. package/lib/strings.mjs +1 -1
  107. package/lib/types/acteurs_et_organes.js +1 -1
  108. package/lib/types/acteurs_et_organes.mjs +1 -1
  109. package/lib/types/agendas.js +1 -1
  110. package/lib/types/agendas.mjs +1 -1
  111. package/lib/types/amendements.js +1 -1
  112. package/lib/types/amendements.mjs +1 -1
  113. package/lib/types/dossiers_legislatifs.js +1 -1
  114. package/lib/types/dossiers_legislatifs.mjs +1 -1
  115. package/lib/types/legislatures.js +1 -1
  116. package/lib/types/scrutins.js +1 -1
  117. package/lib/types/scrutins.mjs +1 -1
  118. package/lib/urls.js +1 -1
  119. package/lib/urls.mjs +1 -1
  120. package/package.json +6 -5
@@ -5,6 +5,7 @@ import fs from "fs-extra";
5
5
  import path from "path";
6
6
  import { datasets, DatasetStructure, EnabledDatasets } from "../datasets.mjs";
7
7
  import { existingDateToJson, patchedDateToJson } from "../dates.mjs";
8
+ import * as git from "../git.mjs";
8
9
  import { walkDir } from "../file_systems.mjs";
9
10
  import { pathFromDocumentUid, pathFromDossierParlementaireUid, pathFromReunionUid, pathFromScrutinUid } from "../loaders.mjs";
10
11
  import { Convert as ActeursEtOrganesRawConvert } from "../raw_types/acteurs_et_organes.mjs";
@@ -12,6 +13,7 @@ import { Convert as AgendasRawConvert } from "../raw_types/agendas.mjs";
12
13
  import { Convert as AmendementsRawConvert } from "../raw_types/amendements.mjs";
13
14
  import { Convert as DossiersLegislatifsRawConvert } from "../raw_types/dossiers_legislatifs.mjs";
14
15
  import { Convert as ScrutinsRawConvert } from "../raw_types/scrutins.mjs";
16
+ import { Legislature } from "../types/legislatures.mjs";
15
17
  const optionsDefinitions = [{
16
18
  alias: "C",
17
19
  help: "clone repositories from given group (or organization) git URL",
@@ -35,6 +37,11 @@ const optionsDefinitions = [{
35
37
  multiple: true,
36
38
  name: "legislature",
37
39
  type: Number
40
+ }, {
41
+ alias: "p",
42
+ help: "pull repositories before proceeding",
43
+ name: "pull",
44
+ type: Boolean
38
45
  }, {
39
46
  alias: "r",
40
47
  help: "push commit to given remote",
@@ -62,57 +69,22 @@ const optionsDefinitions = [{
62
69
  name: "dataDir",
63
70
  type: String
64
71
  }];
65
- function commitAndPush(repositoryDir, commit, remotes) {
66
- let error = false;
67
- if (commit) {
68
- execSync(`git add .`, {
69
- cwd: repositoryDir,
70
- env: process.env,
71
- encoding: "utf-8",
72
- stdio: ["ignore", "ignore", "pipe"]
73
- });
74
- try {
75
- execSync('git commit -m "Nouvelle moisson" --quiet', {
76
- cwd: repositoryDir,
77
- env: process.env,
78
- encoding: "utf-8"
79
- });
80
- } catch (childProcess) {
81
- if (childProcess.stderr === null || !/nothing to commit/.test(childProcess.stdout)) {
82
- console.error(childProcess.output);
83
- throw childProcess;
84
- }
85
- }
86
- for (const remote of remotes || []) {
87
- try {
88
- execSync(`git push ${remote} master`, {
89
- cwd: repositoryDir,
90
- env: process.env,
91
- encoding: "utf-8",
92
- stdio: ["ignore", "ignore", "pipe"]
93
- });
94
- } catch (childProcess) {
95
- // Don't stop when push fails.
96
- console.error(childProcess.output);
97
- error = true;
98
- }
99
- }
100
- }
101
- return error;
102
- }
103
72
  function reorganizeData(options) {
104
73
  const dataDir = options.dataDir;
105
74
  Date.prototype.toJSON = patchedDateToJson;
106
- let error = false;
75
+ let exitCode = 0;
107
76
  const gitGroupUrl = options.clone ? options.clone.trim().replace(/\/+$/, "") : undefined;
108
77
  const validateRawData = !options["no-validate-raw"];
109
78
  options.categories.map(datasetName => assert.notStrictEqual(EnabledDatasets[datasetName], undefined, `Unknown name of dataset: ${datasetName}`));
110
79
  const enabledDatasets = options.categories.reduce((enabledDatasets, datasetName) => enabledDatasets | EnabledDatasets[datasetName], EnabledDatasets.None);
111
80
  let choosenDatasets = datasets;
112
- if (options.legislature) {
113
- const enabledLegislatures = options.legislature.map(legislature => legislature.toString());
81
+ // When a given legislature is 0, it is the same as giving no legislature:
82
+ // It means "every legislatures".
83
+ const legislatures = options.legislature?.some(legislature => legislature === 0) ? undefined : options.legislature;
84
+ if (legislatures !== undefined) {
85
+ const enabledLegislatures = legislatures.map(legislature => legislature.toString());
114
86
  for (let [key, value] of Object.entries(choosenDatasets)) {
115
- choosenDatasets[key] = value.filter(dataset => enabledLegislatures.includes(dataset.legislature));
87
+ choosenDatasets[key] = value.filter(dataset => dataset.legislature === Legislature.All || enabledLegislatures.includes(dataset.legislature));
116
88
  }
117
89
  }
118
90
  if (enabledDatasets & EnabledDatasets.ActeursEtOrganes) {
@@ -131,6 +103,14 @@ function reorganizeData(options) {
131
103
  });
132
104
  }
133
105
  const datasetReorganizedDir = path.join(dataDir, datasetName);
106
+ if (options.pull) {
107
+ execSync(`git pull --rebase`, {
108
+ cwd: datasetReorganizedDir,
109
+ env: process.env,
110
+ encoding: "utf-8",
111
+ stdio: ["ignore", "ignore", "pipe"]
112
+ });
113
+ }
134
114
  fs.ensureDirSync(datasetReorganizedDir);
135
115
  for (const filename of fs.readdirSync(datasetReorganizedDir)) {
136
116
  if (filename[0] === ".") {
@@ -273,8 +253,11 @@ function reorganizeData(options) {
273
253
  }
274
254
  break;
275
255
  }
276
- if (commitAndPush(datasetReorganizedDir, options.commit, options.remote)) {
277
- error = true;
256
+ if (options.commit) {
257
+ const errorCode = git.commitAndPush(datasetReorganizedDir, "Nouvelle moisson", options.remote);
258
+ if (errorCode !== 0 && exitCode === 0) {
259
+ exitCode = errorCode;
260
+ }
278
261
  }
279
262
  }
280
263
  }
@@ -334,8 +317,11 @@ function reorganizeData(options) {
334
317
  }
335
318
  break;
336
319
  }
337
- if (commitAndPush(datasetReorganizedDir, options.commit, options.remote)) {
338
- error = true;
320
+ if (options.commit) {
321
+ const errorCode = git.commitAndPush(datasetReorganizedDir, "Nouvelle moisson", options.remote);
322
+ if (errorCode !== 0 && exitCode === 0) {
323
+ exitCode = errorCode;
324
+ }
339
325
  }
340
326
  }
341
327
  }
@@ -397,8 +383,11 @@ function reorganizeData(options) {
397
383
  }
398
384
  break;
399
385
  }
400
- if (commitAndPush(datasetReorganizedDir, options.commit, options.remote)) {
401
- error = true;
386
+ if (options.commit) {
387
+ const errorCode = git.commitAndPush(datasetReorganizedDir, "Nouvelle moisson", options.remote);
388
+ if (errorCode !== 0 && exitCode === 0) {
389
+ exitCode = errorCode;
390
+ }
402
391
  }
403
392
  }
404
393
  }
@@ -483,8 +472,11 @@ function reorganizeData(options) {
483
472
  }
484
473
  break;
485
474
  }
486
- if (commitAndPush(datasetReorganizedDir, options.commit, options.remote)) {
487
- error = true;
475
+ if (options.commit) {
476
+ const errorCode = git.commitAndPush(datasetReorganizedDir, "Nouvelle moisson", options.remote);
477
+ if (errorCode !== 0 && exitCode === 0) {
478
+ exitCode = errorCode;
479
+ }
488
480
  }
489
481
  }
490
482
  }
@@ -544,15 +536,18 @@ function reorganizeData(options) {
544
536
  }
545
537
  break;
546
538
  }
547
- if (commitAndPush(datasetReorganizedDir, options.commit, options.remote)) {
548
- error = true;
539
+ if (options.commit) {
540
+ const errorCode = git.commitAndPush(datasetReorganizedDir, "Nouvelle moisson", options.remote);
541
+ if (errorCode !== 0 && exitCode === 0) {
542
+ exitCode = errorCode;
543
+ }
549
544
  }
550
545
  }
551
546
  }
552
547
 
553
548
  // Restore standard conversion of dates to JSON.
554
549
  Date.prototype.toJSON = existingDateToJson;
555
- return error;
550
+ return exitCode;
556
551
  }
557
552
  function writeAmendementReorganizedJson(datasetReorganizedDir, amendement) {
558
553
  const uidTexteLegislatif = amendement.texteLegislatifRef;
@@ -592,10 +587,6 @@ function writeScrutinReorganizedJson(scrutinsDir, scrutin) {
592
587
  /* istanbul ignore if */
593
588
  if (process.argv[1].endsWith("reorganize_data.ts")) {
594
589
  const options = commandLineArgs(optionsDefinitions);
595
- if (reorganizeData(options)) {
596
- process.exit(1);
597
- } else {
598
- process.exit(0);
599
- }
590
+ process.exit(reorganizeData(options));
600
591
  }
601
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJleGVjU3luYyIsImNvbW1hbmRMaW5lQXJncyIsImZzIiwicGF0aCIsImRhdGFzZXRzIiwiRGF0YXNldFN0cnVjdHVyZSIsIkVuYWJsZWREYXRhc2V0cyIsImV4aXN0aW5nRGF0ZVRvSnNvbiIsInBhdGNoZWREYXRlVG9Kc29uIiwid2Fsa0RpciIsInBhdGhGcm9tRG9jdW1lbnRVaWQiLCJwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkIiwicGF0aEZyb21SZXVuaW9uVWlkIiwicGF0aEZyb21TY3J1dGluVWlkIiwiQ29udmVydCIsIkFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0IiwiQWdlbmRhc1Jhd0NvbnZlcnQiLCJBbWVuZGVtZW50c1Jhd0NvbnZlcnQiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydCIsIlNjcnV0aW5zUmF3Q29udmVydCIsIm9wdGlvbnNEZWZpbml0aW9ucyIsImFsaWFzIiwiaGVscCIsIm5hbWUiLCJ0eXBlIiwiU3RyaW5nIiwiQm9vbGVhbiIsImRlZmF1bHRWYWx1ZSIsIm11bHRpcGxlIiwiTnVtYmVyIiwiZGVmYXVsdE9wdGlvbiIsImNvbW1pdEFuZFB1c2giLCJyZXBvc2l0b3J5RGlyIiwiY29tbWl0IiwicmVtb3RlcyIsImVycm9yIiwiY3dkIiwiZW52IiwicHJvY2VzcyIsImVuY29kaW5nIiwic3RkaW8iLCJjaGlsZFByb2Nlc3MiLCJzdGRlcnIiLCJ0ZXN0Iiwic3Rkb3V0IiwiY29uc29sZSIsIm91dHB1dCIsInJlbW90ZSIsInJlb3JnYW5pemVEYXRhIiwib3B0aW9ucyIsImRhdGFEaXIiLCJEYXRlIiwicHJvdG90eXBlIiwidG9KU09OIiwiZ2l0R3JvdXBVcmwiLCJjbG9uZSIsInRyaW0iLCJyZXBsYWNlIiwidW5kZWZpbmVkIiwidmFsaWRhdGVSYXdEYXRhIiwiY2F0ZWdvcmllcyIsIm1hcCIsImRhdGFzZXROYW1lIiwibm90U3RyaWN0RXF1YWwiLCJlbmFibGVkRGF0YXNldHMiLCJyZWR1Y2UiLCJOb25lIiwiY2hvb3NlbkRhdGFzZXRzIiwibGVnaXNsYXR1cmUiLCJlbmFibGVkTGVnaXNsYXR1cmVzIiwidG9TdHJpbmciLCJrZXkiLCJ2YWx1ZSIsIk9iamVjdCIsImVudHJpZXMiLCJmaWx0ZXIiLCJkYXRhc2V0IiwiaW5jbHVkZXMiLCJBY3RldXJzRXRPcmdhbmVzIiwiYWN0ZXVyc0V0T3JnYW5lcyIsIm9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgiLCJqb2luIiwiZmlsZW5hbWUiLCJzaWxlbnQiLCJsb2ciLCJiYXNlbmFtZSIsImRhdGFzZXRSZW9yZ2FuaXplZERpciIsImVuc3VyZURpclN5bmMiLCJyZWFkZGlyU3luYyIsInJlbW92ZVN5bmMiLCJhY3RldXJzUmVvcmdhbml6ZWREaXIiLCJta2RpclN5bmMiLCJvcmdhbmVzUmVvcmdhbml6ZWREaXIiLCJzdHJ1Y3R1cmUiLCJTaW5nbGVGaWxlIiwib3JpZ2luYWxKc29uIiwicmVhZEZpbGVTeW5jIiwib3JpZ2luYWxEYXRhIiwidG9BY3RldXJzRXRPcmdhbmVzIiwiSlNPTiIsInBhcnNlIiwiYWN0ZXVyIiwiZXhwb3J0IiwiYWN0ZXVycyIsInJlb3JnYW5pemVkSnNvbkZpbGVQYXRoIiwidWlkIiwid3JpdGVGaWxlU3luYyIsInN0cmluZ2lmeSIsIm9yZ2FuZSIsIm9yZ2FuZXMiLCJTZWdtZW50ZWRGaWxlcyIsImRlcG9ydHNCeUFjdGV1clVpZCIsImV4aXN0c1N5bmMiLCJkZXBvcnRTcGxpdFBhdGgiLCJkZXBvcnRGaWxlbmFtZSIsImxlbmd0aCIsImVuZHNXaXRoIiwiZGVwb3J0T3JpZ2luYWxGaWxlUGF0aCIsInZlcmJvc2UiLCJkZXBvcnRPcmlnaW5hbEpzb24iLCJkZXBvcnRPcmlnaW5hbCIsInRvRGVwb3J0IiwiZGVwb3J0IiwiZGVwb3J0cyIsImFjdGV1clJlZiIsInB1c2giLCJ2YWx1ZXMiLCJzb3J0IiwiYSIsImIiLCJsb2NhbGVDb21wYXJlIiwibWFuZGF0c0J5QWN0ZXVyVWlkIiwibWFuZGF0U3BsaXRQYXRoIiwibWFuZGF0RmlsZW5hbWUiLCJtYW5kYXRPcmlnaW5hbEZpbGVQYXRoIiwibWFuZGF0T3JpZ2luYWxKc29uIiwibWFuZGF0T3JpZ2luYWwiLCJ0b01hbmRhdFdyYXBwZXIiLCJtYW5kYXQiLCJtYW5kYXRzIiwiYWN0ZXVyU3BsaXRQYXRoIiwiYWN0ZXVyRmlsZW5hbWUiLCJhY3RldXJPcmlnaW5hbEZpbGVQYXRoIiwiYWN0ZXVyT3JpZ2luYWxKc29uIiwiYWN0ZXVyT3JpZ2luYWwiLCJ0b0FjdGV1ciIsImFjdGV1clVpZCIsInN0cmljdEVxdWFsIiwiYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgiLCJvcmdhbmVTcGxpdFBhdGgiLCJvcmdhbmVGaWxlbmFtZSIsIm9yZ2FuZU9yaWdpbmFsRmlsZVBhdGgiLCJvcmdhbmVPcmlnaW5hbEpzb24iLCJvcmdhbmVPcmlnaW5hbCIsInRvT3JnYW5lIiwib3JnYW5lUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgiLCJBZ2VuZGFzIiwiYWdlbmRhcyIsInRvQWdlbmRhcyIsInJldW5pb24iLCJyZXVuaW9ucyIsIndyaXRlUmV1bmlvblJlb3JnYW5pemVkSnNvbiIsInJldW5pb25TcGxpdFBhdGgiLCJyZXVuaW9uRmlsZW5hbWUiLCJyZXVuaW9uT3JpZ2luYWxGaWxlUGF0aCIsInJldW5pb25PcmlnaW5hbEpzb24iLCJyZXVuaW9uT3JpZ2luYWwiLCJ0b1JldW5pb24iLCJBbWVuZGVtZW50cyIsImFtZW5kZW1lbnRzIiwidG9BbWVuZGVtZW50cyIsInRleHRlTGVnaXNsYXRpZiIsInRleHRlc0V0QW1lbmRlbWVudHMiLCJ0ZXh0ZWxlZyIsImFtZW5kZW1lbnQiLCJ3cml0ZUFtZW5kZW1lbnRSZW9yZ2FuaXplZEpzb24iLCJhbWVuZGVtZW50U3BsaXRQYXRoIiwiYW1lbmRlbWVudEZpbGVuYW1lIiwiYW1lbmRlbWVudE9yaWdpbmFsRmlsZVBhdGgiLCJhbWVuZGVtZW50T3JpZ2luYWxKc29uIiwiYW1lbmRlbWVudE9yaWdpbmFsIiwidG9BbWVuZGVtZW50V3JhcHBlciIsIkRvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9jdW1lbnRzRGlyIiwiZG9zc2llcnNEaXIiLCJ0b0Rvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb2N1bWVudCIsInRleHRlc0xlZ2lzbGF0aWZzIiwid3JpdGVEb2N1bWVudFJlb3JnYW5pemVkSnNvbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlIiwiZG9zc2llciIsIndyaXRlRG9zc2llclBhcmxlbWVudGFpcmVSZW9yZ2FuaXplZEpzb24iLCJkb2N1bWVudFNwbGl0UGF0aCIsImRvY3VtZW50RmlsZW5hbWUiLCJkb2N1bWVudE9yaWdpbmFsRmlsZVBhdGgiLCJkb2N1bWVudE9yaWdpbmFsSnNvbiIsImRvY3VtZW50T3JpZ2luYWwiLCJ0b0RvY3VtZW50IiwiZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGgiLCJkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVuYW1lIiwiZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRoIiwiZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEpzb24iLCJkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsIiwidG9Eb3NzaWVyUGFybGVtZW50YWlyZSIsIlNjcnV0aW5zIiwic2NydXRpbnMiLCJ0b1NjcnV0aW5zIiwic2NydXRpbiIsIndyaXRlU2NydXRpblJlb3JnYW5pemVkSnNvbiIsInNjcnV0aW5TcGxpdFBhdGgiLCJzY3J1dGluRmlsZW5hbWUiLCJzY3J1dGluT3JpZ2luYWxGaWxlUGF0aCIsInNjcnV0aW5PcmlnaW5hbEpzb24iLCJzY3J1dGluT3JpZ2luYWwiLCJ0b1NjcnV0aW5XcmFwcGVyIiwidWlkVGV4dGVMZWdpc2xhdGlmIiwidGV4dGVMZWdpc2xhdGlmUmVmIiwidGV4dGVMZWdpc2xhdGlmRGlyIiwicmV1bmlvbnNEaXIiLCJzY3J1dGluc0RpciIsImFyZ3YiLCJleGl0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvcmVvcmdhbml6ZV9kYXRhLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5pbXBvcnQgeyBDaGlsZFByb2Nlc3MsIGV4ZWNTeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIlxuaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmltcG9ydCB7IGRhdGFzZXRzLCBEYXRhc2V0U3RydWN0dXJlLCBFbmFibGVkRGF0YXNldHMgfSBmcm9tIFwiLi4vZGF0YXNldHNcIlxuaW1wb3J0IHsgZXhpc3RpbmdEYXRlVG9Kc29uLCBwYXRjaGVkRGF0ZVRvSnNvbiB9IGZyb20gXCIuLi9kYXRlc1wiXG5pbXBvcnQgeyB3YWxrRGlyIH0gZnJvbSBcIi4uL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQge1xuICBwYXRoRnJvbURvY3VtZW50VWlkLFxuICBwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkLFxuICBwYXRoRnJvbVJldW5pb25VaWQsXG4gIHBhdGhGcm9tU2NydXRpblVpZCxcbn0gZnJvbSBcIi4uL2xvYWRlcnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvYWN0ZXVyc19ldF9vcmdhbmVzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQWdlbmRhc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FnZW5kYXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgU2NydXRpbnNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9zY3J1dGluc1wiXG5cbmNvbnN0IG9wdGlvbnNEZWZpbml0aW9ucyA9IFtcbiAge1xuICAgIGFsaWFzOiBcIkNcIixcbiAgICBoZWxwOiBcImNsb25lIHJlcG9zaXRvcmllcyBmcm9tIGdpdmVuIGdyb3VwIChvciBvcmdhbml6YXRpb24pIGdpdCBVUkxcIixcbiAgICBuYW1lOiBcImNsb25lXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwiY1wiLFxuICAgIGhlbHA6IFwiY29tbWl0IHNwbGl0IGZpbGVzXCIsXG4gICAgbmFtZTogXCJjb21taXRcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwia1wiLFxuICAgIGRlZmF1bHRWYWx1ZTogW1wiQWxsXCJdLFxuICAgIGhlbHA6IFwiY2F0ZWdvcmllcyBvZiBkYXRhc2V0cyB0byByZW9yZ2FuaXplXCIsXG4gICAgbXVsdGlwbGU6IHRydWUsXG4gICAgbmFtZTogXCJjYXRlZ29yaWVzXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwibFwiLFxuICAgIGhlbHA6IFwibGVnaXNsYXR1cmVzIG9mIGNhdGVnb3JpZXMgb2YgZGF0YXNldHMgdG8gcmV0cmlldmVcIixcbiAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICBuYW1lOiBcImxlZ2lzbGF0dXJlXCIsXG4gICAgdHlwZTogTnVtYmVyLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwiclwiLFxuICAgIGhlbHA6IFwicHVzaCBjb21taXQgdG8gZ2l2ZW4gcmVtb3RlXCIsXG4gICAgbXVsdGlwbGU6IHRydWUsXG4gICAgbmFtZTogXCJyZW1vdGVcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJzXCIsXG4gICAgaGVscDogXCJkb24ndCBsb2cgYW55dGhpbmdcIixcbiAgICBuYW1lOiBcInNpbGVudFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJWXCIsXG4gICAgaGVscDogXCJkb24ndCB2YWxpZGF0ZSByYXcgZGF0YVwiLFxuICAgIG5hbWU6IFwibm8tdmFsaWRhdGUtcmF3XCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInZcIixcbiAgICBoZWxwOiBcInZlcmJvc2UgbG9nc1wiLFxuICAgIG5hbWU6IFwidmVyYm9zZVwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBkZWZhdWx0T3B0aW9uOiB0cnVlLFxuICAgIGhlbHA6IFwiZGlyZWN0b3J5IGNvbnRhaW5pbmcgQXNzZW1ibMOpZSBvcGVuIGRhdGEgZmlsZXNcIixcbiAgICBuYW1lOiBcImRhdGFEaXJcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG5dXG5cbmZ1bmN0aW9uIGNvbW1pdEFuZFB1c2goXG4gIHJlcG9zaXRvcnlEaXI6IHN0cmluZyxcbiAgY29tbWl0OiBib29sZWFuLFxuICByZW1vdGVzPzogc3RyaW5nW10sXG4pOiBib29sZWFuIHtcbiAgbGV0IGVycm9yID0gZmFsc2VcbiAgaWYgKGNvbW1pdCkge1xuICAgIGV4ZWNTeW5jKGBnaXQgYWRkIC5gLCB7XG4gICAgICBjd2Q6IHJlcG9zaXRvcnlEaXIsXG4gICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgIH0pXG4gICAgdHJ5IHtcbiAgICAgIGV4ZWNTeW5jKCdnaXQgY29tbWl0IC1tIFwiTm91dmVsbGUgbW9pc3NvblwiIC0tcXVpZXQnLCB7XG4gICAgICAgIGN3ZDogcmVwb3NpdG9yeURpcixcbiAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoY2hpbGRQcm9jZXNzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChjaGlsZFByb2Nlc3MgYXMgQ2hpbGRQcm9jZXNzKS5zdGRlcnIgPT09IG51bGwgfHxcbiAgICAgICAgIS9ub3RoaW5nIHRvIGNvbW1pdC8udGVzdCgoY2hpbGRQcm9jZXNzIGFzIGFueSkuc3Rkb3V0KVxuICAgICAgKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoKGNoaWxkUHJvY2VzcyBhcyBhbnkpLm91dHB1dClcbiAgICAgICAgdGhyb3cgY2hpbGRQcm9jZXNzXG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3QgcmVtb3RlIG9mIHJlbW90ZXMgfHwgW10pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgcHVzaCAke3JlbW90ZX0gbWFzdGVyYCwge1xuICAgICAgICAgIGN3ZDogcmVwb3NpdG9yeURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChjaGlsZFByb2Nlc3MpIHtcbiAgICAgICAgLy8gRG9uJ3Qgc3RvcCB3aGVuIHB1c2ggZmFpbHMuXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoKGNoaWxkUHJvY2VzcyBhcyBhbnkpLm91dHB1dClcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBlcnJvclxufVxuXG5mdW5jdGlvbiByZW9yZ2FuaXplRGF0YShvcHRpb25zOiBhbnkpOiBib29sZWFuIHtcbiAgY29uc3QgZGF0YURpciA9IG9wdGlvbnMuZGF0YURpclxuICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBwYXRjaGVkRGF0ZVRvSnNvblxuXG4gIGxldCBlcnJvciA9IGZhbHNlXG4gIGNvbnN0IGdpdEdyb3VwVXJsID0gb3B0aW9ucy5jbG9uZVxuICAgID8gb3B0aW9ucy5jbG9uZS50cmltKCkucmVwbGFjZSgvXFwvKyQvLCBcIlwiKVxuICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IHZhbGlkYXRlUmF3RGF0YSA9ICFvcHRpb25zW1wibm8tdmFsaWRhdGUtcmF3XCJdXG5cbiAgb3B0aW9ucy5jYXRlZ29yaWVzLm1hcCgoZGF0YXNldE5hbWU6IHN0cmluZykgPT5cbiAgICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgICAoRW5hYmxlZERhdGFzZXRzIGFzIGFueSBhcyB7IFtuYW1lOiBzdHJpbmddOiBFbmFibGVkRGF0YXNldHMgfSlbXG4gICAgICAgIGRhdGFzZXROYW1lXG4gICAgICBdLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgYFVua25vd24gbmFtZSBvZiBkYXRhc2V0OiAke2RhdGFzZXROYW1lfWAsXG4gICAgKSxcbiAgKVxuICBjb25zdCBlbmFibGVkRGF0YXNldHMgPSBvcHRpb25zLmNhdGVnb3JpZXMucmVkdWNlKFxuICAgIChlbmFibGVkRGF0YXNldHM6IEVuYWJsZWREYXRhc2V0cywgZGF0YXNldE5hbWU6IHN0cmluZyk6IEVuYWJsZWREYXRhc2V0cyA9PlxuICAgICAgZW5hYmxlZERhdGFzZXRzIHxcbiAgICAgIChFbmFibGVkRGF0YXNldHMgYXMgYW55IGFzIHsgW25hbWU6IHN0cmluZ106IEVuYWJsZWREYXRhc2V0cyB9KVtcbiAgICAgICAgZGF0YXNldE5hbWVcbiAgICAgIF0sXG4gICAgRW5hYmxlZERhdGFzZXRzLk5vbmUsXG4gIClcblxuICBsZXQgY2hvb3NlbkRhdGFzZXRzID0gZGF0YXNldHNcbiAgaWYgKG9wdGlvbnMubGVnaXNsYXR1cmUpIHtcbiAgICBjb25zdCBlbmFibGVkTGVnaXNsYXR1cmVzID0gb3B0aW9ucy5sZWdpc2xhdHVyZS5tYXAoKGxlZ2lzbGF0dXJlOiBudW1iZXIpID0+XG4gICAgICBsZWdpc2xhdHVyZS50b1N0cmluZygpLFxuICAgIClcbiAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY2hvb3NlbkRhdGFzZXRzKSkge1xuICAgICAgY2hvb3NlbkRhdGFzZXRzW2tleSBhcyBrZXlvZiB0eXBlb2YgY2hvb3NlbkRhdGFzZXRzXSA9IHZhbHVlLmZpbHRlcihcbiAgICAgICAgKGRhdGFzZXQ6IHsgbGVnaXNsYXR1cmU6IGFueSB9KSA9PlxuICAgICAgICAgIGVuYWJsZWRMZWdpc2xhdHVyZXMuaW5jbHVkZXMoZGF0YXNldC5sZWdpc2xhdHVyZSksXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob29zZW5EYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG4gICAgICBjb25zdCBhY3RldXJzUmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBcImFjdGV1cnNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhhY3RldXJzUmVvcmdhbml6ZWREaXIpXG4gICAgICBjb25zdCBvcmdhbmVzUmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBcIm9yZ2FuZXNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhvcmdhbmVzUmVvcmdhbml6ZWREaXIpXG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvQWN0ZXVyc0V0T3JnYW5lcyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgYWN0ZXVyIG9mIG9yaWdpbmFsRGF0YS5leHBvcnQuYWN0ZXVycy5hY3RldXIpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBhY3RldXJzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgYWN0ZXVyLnVpZFtcIiN0ZXh0XCJdICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoYWN0ZXVyLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9yZ2FuZSBvZiBvcmlnaW5hbERhdGEuZXhwb3J0Lm9yZ2FuZXMub3JnYW5lKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JnYW5lc1Jlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIG9yZ2FuZS51aWQgKyBcIi5qc29uXCIsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShvcmdhbmUsIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBkZXBvcnRzQnlBY3RldXJVaWQ6IHtcbiAgICAgICAgICAgICAgW2FjdGV1clVpZDogc3RyaW5nXTogeyB1aWQ6IHN0cmluZyB9W11cbiAgICAgICAgICAgIH0gPSB7fVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmcy5leGlzdHNTeW5jKFxuICAgICAgICAgICAgICAgIHBhdGguam9pbihvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLCBcImRlcG9ydFwiKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgZGVwb3J0U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBbXCJkZXBvcnRcIl0sXG4gICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgICBkZXBvcnRTcGxpdFBhdGhbZGVwb3J0U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgICAgaWYgKCFkZXBvcnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgIC4uLmRlcG9ydFNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICAgIGAgIExvYWRpbmcgXCJkZXBvcnRcIiBmaWxlOiAke2RlcG9ydE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwb3J0T3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgICBkZXBvcnRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvRGVwb3J0KGRlcG9ydE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShkZXBvcnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgY29uc3QgZGVwb3J0ID0gZGVwb3J0T3JpZ2luYWwuZGVwb3J0XG4gICAgICAgICAgICAgICAgbGV0IGRlcG9ydHMgPSBkZXBvcnRzQnlBY3RldXJVaWRbZGVwb3J0LmFjdGV1clJlZl1cbiAgICAgICAgICAgICAgICBpZiAoZGVwb3J0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICBkZXBvcnRzID0gZGVwb3J0c0J5QWN0ZXVyVWlkW2RlcG9ydC5hY3RldXJSZWZdID0gW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVwb3J0cy5wdXNoKGRlcG9ydClcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGZvciAoY29uc3QgZGVwb3J0cyBvZiBPYmplY3QudmFsdWVzKGRlcG9ydHNCeUFjdGV1clVpZCkpIHtcbiAgICAgICAgICAgICAgICBkZXBvcnRzLnNvcnQoKGEsIGIpID0+XG4gICAgICAgICAgICAgICAgICBhLnVpZC5sZW5ndGggPT09IGIudWlkLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICA/IGEudWlkLmxvY2FsZUNvbXBhcmUoYi51aWQpXG4gICAgICAgICAgICAgICAgICAgIDogYS51aWQubGVuZ3RoIC0gYi51aWQubGVuZ3RoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBtYW5kYXRzQnlBY3RldXJVaWQ6IHtcbiAgICAgICAgICAgICAgW2FjdGV1clVpZDogc3RyaW5nXTogeyB1aWQ6IHN0cmluZyB9W11cbiAgICAgICAgICAgIH0gPSB7fVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmcy5leGlzdHNTeW5jKFxuICAgICAgICAgICAgICAgIHBhdGguam9pbihvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLCBcIm1hbmRhdFwiKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgbWFuZGF0U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBbXCJtYW5kYXRcIl0sXG4gICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgICBtYW5kYXRTcGxpdFBhdGhbbWFuZGF0U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgICAgaWYgKCFtYW5kYXRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgIC4uLm1hbmRhdFNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICAgIGAgIExvYWRpbmcgXCJtYW5kYXRcIiBmaWxlOiAke21hbmRhdE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbWFuZGF0T3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgICBtYW5kYXRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvTWFuZGF0V3JhcHBlcihcbiAgICAgICAgICAgICAgICAgICAgICBtYW5kYXRPcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShtYW5kYXRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgY29uc3QgbWFuZGF0ID0gbWFuZGF0T3JpZ2luYWwubWFuZGF0XG4gICAgICAgICAgICAgICAgbGV0IG1hbmRhdHMgPSBtYW5kYXRzQnlBY3RldXJVaWRbbWFuZGF0LmFjdGV1clJlZl1cbiAgICAgICAgICAgICAgICBpZiAobWFuZGF0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICBtYW5kYXRzID0gbWFuZGF0c0J5QWN0ZXVyVWlkW21hbmRhdC5hY3RldXJSZWZdID0gW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbWFuZGF0cy5wdXNoKG1hbmRhdClcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGZvciAoY29uc3QgbWFuZGF0cyBvZiBPYmplY3QudmFsdWVzKG1hbmRhdHNCeUFjdGV1clVpZCkpIHtcbiAgICAgICAgICAgICAgICBtYW5kYXRzLnNvcnQoKGEsIGIpID0+XG4gICAgICAgICAgICAgICAgICBhLnVpZC5sZW5ndGggPT09IGIudWlkLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICA/IGEudWlkLmxvY2FsZUNvbXBhcmUoYi51aWQpXG4gICAgICAgICAgICAgICAgICAgIDogYS51aWQubGVuZ3RoIC0gYi51aWQubGVuZ3RoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFjdGV1clNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJhY3RldXJcIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ckZpbGVuYW1lID0gYWN0ZXVyU3BsaXRQYXRoW2FjdGV1clNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIWFjdGV1ckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ck9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5hY3RldXJTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiYWN0ZXVyXCIgZmlsZTogJHthY3RldXJPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ck9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGFjdGV1ck9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9BY3RldXIoYWN0ZXVyT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShhY3RldXJPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ciA9IGFjdGV1ck9yaWdpbmFsLmFjdGV1clxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJVaWQgPSBhY3RldXIudWlkW1wiI3RleHRcIl1cbiAgICAgICAgICAgICAgY29uc3QgZGVwb3J0cyA9IGRlcG9ydHNCeUFjdGV1clVpZFthY3RldXJVaWRdXG4gICAgICAgICAgICAgIGlmIChkZXBvcnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWN0ZXVyLmRlcG9ydHMsIHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBhY3RldXIuZGVwb3J0cyA9IHsgZGVwb3J0OiBkZXBvcnRzIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBtYW5kYXRzID0gbWFuZGF0c0J5QWN0ZXVyVWlkW2FjdGV1clVpZF1cbiAgICAgICAgICAgICAgaWYgKG1hbmRhdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhY3RldXIubWFuZGF0cywgdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGFjdGV1ci5tYW5kYXRzID0geyBtYW5kYXQ6IG1hbmRhdHMgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1clJlb3JnYW5pemVkSnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgYWN0ZXVyc1Jlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIGFjdGV1clVpZCArIFwiLmpzb25cIixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGFjdGV1clJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGFjdGV1ciwgbnVsbCwgMiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBvcmdhbmVTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wib3JnYW5lXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVGaWxlbmFtZSA9IG9yZ2FuZVNwbGl0UGF0aFtvcmdhbmVTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFvcmdhbmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4ub3JnYW5lU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcIm9yZ2FuZVwiIGZpbGU6ICR7b3JnYW5lT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBvcmdhbmVPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZU9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvT3JnYW5lKG9yZ2FuZU9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JnYW5lT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmUgPSBvcmdhbmVPcmlnaW5hbC5vcmdhbmVcbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lUmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmdhbmVzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgb3JnYW5lLnVpZCArIFwiLmpzb25cIixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIG9yZ2FuZVJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9yZ2FuZSwgbnVsbCwgMiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBjb21taXRBbmRQdXNoKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgb3B0aW9ucy5jb21taXQsIG9wdGlvbnMucmVtb3RlKVxuICAgICAgKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWdlbmRhcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9vc2VuRGF0YXNldHMuYWdlbmRhcykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBBZ2VuZGFzUmF3Q29udmVydC50b0FnZW5kYXMob3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJldW5pb24gb2Ygb3JpZ2luYWxEYXRhLnJldW5pb25zLnJldW5pb24pIHtcbiAgICAgICAgICAgICAgd3JpdGVSZXVuaW9uUmVvcmdhbml6ZWRKc29uKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgcmV1bmlvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmV1bmlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJyZXVuaW9uXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uRmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIHJldW5pb25TcGxpdFBhdGhbcmV1bmlvblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIXJldW5pb25GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLnJldW5pb25TcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwicmV1bmlvblwiIGZpbGU6ICR7cmV1bmlvbk9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbk9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHJldW5pb25PcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb25PcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBZ2VuZGFzUmF3Q29udmVydC50b1JldW5pb24ocmV1bmlvbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UocmV1bmlvbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbiA9IHJldW5pb25PcmlnaW5hbC5yZXVuaW9uXG4gICAgICAgICAgICAgIHdyaXRlUmV1bmlvblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHJldW5pb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgY29tbWl0QW5kUHVzaChkYXRhc2V0UmVvcmdhbml6ZWREaXIsIG9wdGlvbnMuY29tbWl0LCBvcHRpb25zLnJlbW90ZSlcbiAgICAgICkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFtZW5kZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob29zZW5EYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQudG9BbWVuZGVtZW50cyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgdGV4dGVMZWdpc2xhdGlmIG9mIG9yaWdpbmFsRGF0YS50ZXh0ZXNFdEFtZW5kZW1lbnRzXG4gICAgICAgICAgICAgIC50ZXh0ZWxlZykge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnQgb2YgdGV4dGVMZWdpc2xhdGlmLmFtZW5kZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgd3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgICAgYW1lbmRlbWVudCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50RmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIGFtZW5kZW1lbnRTcGxpdFBhdGhbYW1lbmRlbWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIWFtZW5kZW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmFtZW5kZW1lbnRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiYW1lbmRlbWVudFwiIGZpbGU6ICR7YW1lbmRlbWVudE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGFtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQudG9BbWVuZGVtZW50V3JhcHBlcihcbiAgICAgICAgICAgICAgICAgICAgYW1lbmRlbWVudE9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoYW1lbmRlbWVudE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudCA9IGFtZW5kZW1lbnRPcmlnaW5hbC5hbWVuZGVtZW50XG4gICAgICAgICAgICAgIHdyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGFtZW5kZW1lbnQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgY29tbWl0QW5kUHVzaChkYXRhc2V0UmVvcmdhbml6ZWREaXIsIG9wdGlvbnMuY29tbWl0LCBvcHRpb25zLnJlbW90ZSlcbiAgICAgICkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvb3NlbkRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRvY3VtZW50c0RpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwiZG9jdW1lbnRzXCIpXG4gICAgICBmcy5ta2RpclN5bmMoZG9jdW1lbnRzRGlyKVxuICAgICAgY29uc3QgZG9zc2llcnNEaXIgPSBwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBcImRvc3NpZXJzXCIpXG4gICAgICBmcy5ta2RpclN5bmMoZG9zc2llcnNEaXIpXG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LnRvRG9zc2llcnNMZWdpc2xhdGlmcyhcbiAgICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZG9jdW1lbnQgb2Ygb3JpZ2luYWxEYXRhLmV4cG9ydC50ZXh0ZXNMZWdpc2xhdGlmc1xuICAgICAgICAgICAgICAuZG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgd3JpdGVEb2N1bWVudFJlb3JnYW5pemVkSnNvbihkb2N1bWVudHNEaXIsIGRvY3VtZW50KVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHsgZG9zc2llclBhcmxlbWVudGFpcmUgfSBvZiBvcmlnaW5hbERhdGEuZXhwb3J0XG4gICAgICAgICAgICAgIC5kb3NzaWVyc0xlZ2lzbGF0aWZzLmRvc3NpZXIpIHtcbiAgICAgICAgICAgICAgd3JpdGVEb3NzaWVyUGFybGVtZW50YWlyZVJlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICBkb3NzaWVyc0RpcixcbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCBkb2N1bWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJkb2N1bWVudFwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgZG9jdW1lbnRTcGxpdFBhdGhbZG9jdW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFkb2N1bWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50T3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmRvY3VtZW50U3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcImRvY3VtZW50XCIgZmlsZTogJHtkb2N1bWVudE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBkb2N1bWVudE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydC50b0RvY3VtZW50KGRvY3VtZW50T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShkb2N1bWVudE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnQgPSBkb2N1bWVudE9yaWdpbmFsLmRvY3VtZW50XG4gICAgICAgICAgICAgIHdyaXRlRG9jdW1lbnRSZW9yZ2FuaXplZEpzb24oZG9jdW1lbnRzRGlyLCBkb2N1bWVudClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJkb3NzaWVyUGFybGVtZW50YWlyZVwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGhbXG4gICAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aC5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICBpZiAoIWRvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiZG9zc2llclBhcmxlbWVudGFpcmVcIiBmaWxlOiAke2Rvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LnRvRG9zc2llclBhcmxlbWVudGFpcmUoXG4gICAgICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmUgPVxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWwuZG9zc2llclBhcmxlbWVudGFpcmVcbiAgICAgICAgICAgICAgd3JpdGVEb3NzaWVyUGFybGVtZW50YWlyZVJlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICBkb3NzaWVyc0RpcixcbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGNvbW1pdEFuZFB1c2goZGF0YXNldFJlb3JnYW5pemVkRGlyLCBvcHRpb25zLmNvbW1pdCwgb3B0aW9ucy5yZW1vdGUpXG4gICAgICApIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5TY3J1dGlucykge1xuICAgIGZvciAobGV0IGRhdGFzZXQgb2YgY2hvb3NlbkRhdGFzZXRzLnNjcnV0aW5zKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IFNjcnV0aW5zUmF3Q29udmVydC50b1NjcnV0aW5zKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBzY3J1dGluIG9mIG9yaWdpbmFsRGF0YS5zY3J1dGlucy5zY3J1dGluKSB7XG4gICAgICAgICAgICAgIHdyaXRlU2NydXRpblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHNjcnV0aW4pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNjcnV0aW5TcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBzY3J1dGluU3BsaXRQYXRoW3NjcnV0aW5TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFzY3J1dGluRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbk9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5zY3J1dGluU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcInNjcnV0aW5cIiBmaWxlOiAke3NjcnV0aW5PcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5PcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBzY3J1dGluT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gU2NydXRpbnNSYXdDb252ZXJ0LnRvU2NydXRpbldyYXBwZXIoc2NydXRpbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uoc2NydXRpbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbiA9IHNjcnV0aW5PcmlnaW5hbC5zY3J1dGluXG4gICAgICAgICAgICAgIHdyaXRlU2NydXRpblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHNjcnV0aW4pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgY29tbWl0QW5kUHVzaChkYXRhc2V0UmVvcmdhbml6ZWREaXIsIG9wdGlvbnMuY29tbWl0LCBvcHRpb25zLnJlbW90ZSlcbiAgICAgICkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZXN0b3JlIHN0YW5kYXJkIGNvbnZlcnNpb24gb2YgZGF0ZXMgdG8gSlNPTi5cbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZXhpc3RpbmdEYXRlVG9Kc29uXG5cbiAgcmV0dXJuIGVycm9yXG59XG5cbmZ1bmN0aW9uIHdyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbihcbiAgZGF0YXNldFJlb3JnYW5pemVkRGlyOiBzdHJpbmcsXG4gIGFtZW5kZW1lbnQ6IHtcbiAgICB1aWQ6IHN0cmluZ1xuICAgIHRleHRlTGVnaXNsYXRpZlJlZjogc3RyaW5nXG4gIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgdWlkVGV4dGVMZWdpc2xhdGlmID0gYW1lbmRlbWVudC50ZXh0ZUxlZ2lzbGF0aWZSZWZcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKHVpZFRleHRlTGVnaXNsYXRpZiwgdW5kZWZpbmVkKVxuICBjb25zdCB0ZXh0ZUxlZ2lzbGF0aWZEaXIgPSBwYXRoLmpvaW4oXG4gICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgIHVpZFRleHRlTGVnaXNsYXRpZixcbiAgKVxuICBmcy5lbnN1cmVEaXJTeW5jKHRleHRlTGVnaXNsYXRpZkRpcilcbiAgY29uc3QgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgdGV4dGVMZWdpc2xhdGlmRGlyLFxuICAgIGFtZW5kZW1lbnQudWlkICsgXCIuanNvblwiLFxuICApXG4gIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgSlNPTi5zdHJpbmdpZnkoYW1lbmRlbWVudCwgbnVsbCwgMiksXG4gICAge1xuICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgIH0sXG4gIClcbn1cblxuZnVuY3Rpb24gd3JpdGVEb2N1bWVudFJlb3JnYW5pemVkSnNvbihcbiAgZG9jdW1lbnRzRGlyOiBzdHJpbmcsXG4gIGRvY3VtZW50OiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgYmFzZW5hbWUgPSBwYXRoRnJvbURvY3VtZW50VWlkKGRvY3VtZW50c0RpciwgZG9jdW1lbnQudWlkKVxuICBmcy53cml0ZUZpbGVTeW5jKGAke2Jhc2VuYW1lfS5qc29uYCwgSlNPTi5zdHJpbmdpZnkoZG9jdW1lbnQsIG51bGwsIDIpLCB7XG4gICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICB9KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uKFxuICBkb3NzaWVyc0Rpcjogc3RyaW5nLFxuICBkb3NzaWVyUGFybGVtZW50YWlyZTogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZChcbiAgICBkb3NzaWVyc0RpcixcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZS51aWQsXG4gIClcbiAgZnMud3JpdGVGaWxlU3luYyhcbiAgICBgJHtiYXNlbmFtZX0uanNvbmAsXG4gICAgSlNPTi5zdHJpbmdpZnkoZG9zc2llclBhcmxlbWVudGFpcmUsIG51bGwsIDIpLFxuICAgIHtcbiAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICB9LFxuICApXG59XG5cbmZ1bmN0aW9uIHdyaXRlUmV1bmlvblJlb3JnYW5pemVkSnNvbihcbiAgcmV1bmlvbnNEaXI6IHN0cmluZyxcbiAgcmV1bmlvbjogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21SZXVuaW9uVWlkKHJldW5pb25zRGlyLCByZXVuaW9uLnVpZClcbiAgZnMud3JpdGVGaWxlU3luYyhgJHtiYXNlbmFtZX0uanNvbmAsIEpTT04uc3RyaW5naWZ5KHJldW5pb24sIG51bGwsIDIpLCB7XG4gICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICB9KVxufVxuXG5mdW5jdGlvbiB3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24oXG4gIHNjcnV0aW5zRGlyOiBzdHJpbmcsXG4gIHNjcnV0aW46IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tU2NydXRpblVpZChzY3J1dGluc0Rpciwgc2NydXRpbi51aWQpXG4gIGZzLndyaXRlRmlsZVN5bmMoYCR7YmFzZW5hbWV9Lmpzb25gLCBKU09OLnN0cmluZ2lmeShzY3J1dGluLCBudWxsLCAyKSwge1xuICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgfSlcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAocHJvY2Vzcy5hcmd2WzFdLmVuZHNXaXRoKFwicmVvcmdhbml6ZV9kYXRhLnRzXCIpKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBjb21tYW5kTGluZUFyZ3Mob3B0aW9uc0RlZmluaXRpb25zKVxuXG4gIGlmIChyZW9yZ2FuaXplRGF0YShvcHRpb25zKSkge1xuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9IGVsc2Uge1xuICAgIHByb2Nlc3MuZXhpdCgwKVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLE1BQU0sTUFBTSxRQUFRO0FBQzNCLFNBQXVCQyxRQUFRLFFBQVEsZUFBZTtBQUN0RCxPQUFPQyxlQUFlLE1BQU0sbUJBQW1CO0FBQy9DLE9BQU9DLEVBQUUsTUFBTSxVQUFVO0FBQ3pCLE9BQU9DLElBQUksTUFBTSxNQUFNO0FBQUEsU0FFZEMsUUFBUSxFQUFFQyxnQkFBZ0IsRUFBRUMsZUFBZTtBQUFBLFNBQzNDQyxrQkFBa0IsRUFBRUMsaUJBQWlCO0FBQUEsU0FDckNDLE9BQU87QUFBQSxTQUVkQyxtQkFBbUIsRUFDbkJDLCtCQUErQixFQUMvQkMsa0JBQWtCLEVBQ2xCQyxrQkFBa0I7QUFBQSxTQUVY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
592
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJleGVjU3luYyIsImNvbW1hbmRMaW5lQXJncyIsImZzIiwicGF0aCIsImRhdGFzZXRzIiwiRGF0YXNldFN0cnVjdHVyZSIsIkVuYWJsZWREYXRhc2V0cyIsImV4aXN0aW5nRGF0ZVRvSnNvbiIsInBhdGNoZWREYXRlVG9Kc29uIiwiZ2l0Iiwid2Fsa0RpciIsInBhdGhGcm9tRG9jdW1lbnRVaWQiLCJwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkIiwicGF0aEZyb21SZXVuaW9uVWlkIiwicGF0aEZyb21TY3J1dGluVWlkIiwiQ29udmVydCIsIkFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0IiwiQWdlbmRhc1Jhd0NvbnZlcnQiLCJBbWVuZGVtZW50c1Jhd0NvbnZlcnQiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydCIsIlNjcnV0aW5zUmF3Q29udmVydCIsIkxlZ2lzbGF0dXJlIiwib3B0aW9uc0RlZmluaXRpb25zIiwiYWxpYXMiLCJoZWxwIiwibmFtZSIsInR5cGUiLCJTdHJpbmciLCJCb29sZWFuIiwiZGVmYXVsdFZhbHVlIiwibXVsdGlwbGUiLCJOdW1iZXIiLCJkZWZhdWx0T3B0aW9uIiwicmVvcmdhbml6ZURhdGEiLCJvcHRpb25zIiwiZGF0YURpciIsIkRhdGUiLCJwcm90b3R5cGUiLCJ0b0pTT04iLCJleGl0Q29kZSIsImdpdEdyb3VwVXJsIiwiY2xvbmUiLCJ0cmltIiwicmVwbGFjZSIsInVuZGVmaW5lZCIsInZhbGlkYXRlUmF3RGF0YSIsImNhdGVnb3JpZXMiLCJtYXAiLCJkYXRhc2V0TmFtZSIsIm5vdFN0cmljdEVxdWFsIiwiZW5hYmxlZERhdGFzZXRzIiwicmVkdWNlIiwiTm9uZSIsImNob29zZW5EYXRhc2V0cyIsImxlZ2lzbGF0dXJlcyIsImxlZ2lzbGF0dXJlIiwic29tZSIsImVuYWJsZWRMZWdpc2xhdHVyZXMiLCJ0b1N0cmluZyIsImtleSIsInZhbHVlIiwiT2JqZWN0IiwiZW50cmllcyIsImZpbHRlciIsImRhdGFzZXQiLCJBbGwiLCJpbmNsdWRlcyIsIkFjdGV1cnNFdE9yZ2FuZXMiLCJhY3RldXJzRXRPcmdhbmVzIiwib3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCIsImpvaW4iLCJmaWxlbmFtZSIsInNpbGVudCIsImNvbnNvbGUiLCJsb2ciLCJiYXNlbmFtZSIsImN3ZCIsImVudiIsInByb2Nlc3MiLCJlbmNvZGluZyIsInN0ZGlvIiwiZGF0YXNldFJlb3JnYW5pemVkRGlyIiwicHVsbCIsImVuc3VyZURpclN5bmMiLCJyZWFkZGlyU3luYyIsInJlbW92ZVN5bmMiLCJhY3RldXJzUmVvcmdhbml6ZWREaXIiLCJta2RpclN5bmMiLCJvcmdhbmVzUmVvcmdhbml6ZWREaXIiLCJzdHJ1Y3R1cmUiLCJTaW5nbGVGaWxlIiwib3JpZ2luYWxKc29uIiwicmVhZEZpbGVTeW5jIiwib3JpZ2luYWxEYXRhIiwidG9BY3RldXJzRXRPcmdhbmVzIiwiSlNPTiIsInBhcnNlIiwiYWN0ZXVyIiwiZXhwb3J0IiwiYWN0ZXVycyIsInJlb3JnYW5pemVkSnNvbkZpbGVQYXRoIiwidWlkIiwid3JpdGVGaWxlU3luYyIsInN0cmluZ2lmeSIsIm9yZ2FuZSIsIm9yZ2FuZXMiLCJTZWdtZW50ZWRGaWxlcyIsImRlcG9ydHNCeUFjdGV1clVpZCIsImV4aXN0c1N5bmMiLCJkZXBvcnRTcGxpdFBhdGgiLCJkZXBvcnRGaWxlbmFtZSIsImxlbmd0aCIsImVuZHNXaXRoIiwiZGVwb3J0T3JpZ2luYWxGaWxlUGF0aCIsInZlcmJvc2UiLCJkZXBvcnRPcmlnaW5hbEpzb24iLCJkZXBvcnRPcmlnaW5hbCIsInRvRGVwb3J0IiwiZGVwb3J0IiwiZGVwb3J0cyIsImFjdGV1clJlZiIsInB1c2giLCJ2YWx1ZXMiLCJzb3J0IiwiYSIsImIiLCJsb2NhbGVDb21wYXJlIiwibWFuZGF0c0J5QWN0ZXVyVWlkIiwibWFuZGF0U3BsaXRQYXRoIiwibWFuZGF0RmlsZW5hbWUiLCJtYW5kYXRPcmlnaW5hbEZpbGVQYXRoIiwibWFuZGF0T3JpZ2luYWxKc29uIiwibWFuZGF0T3JpZ2luYWwiLCJ0b01hbmRhdFdyYXBwZXIiLCJtYW5kYXQiLCJtYW5kYXRzIiwiYWN0ZXVyU3BsaXRQYXRoIiwiYWN0ZXVyRmlsZW5hbWUiLCJhY3RldXJPcmlnaW5hbEZpbGVQYXRoIiwiYWN0ZXVyT3JpZ2luYWxKc29uIiwiYWN0ZXVyT3JpZ2luYWwiLCJ0b0FjdGV1ciIsImFjdGV1clVpZCIsInN0cmljdEVxdWFsIiwiYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgiLCJvcmdhbmVTcGxpdFBhdGgiLCJvcmdhbmVGaWxlbmFtZSIsIm9yZ2FuZU9yaWdpbmFsRmlsZVBhdGgiLCJvcmdhbmVPcmlnaW5hbEpzb24iLCJvcmdhbmVPcmlnaW5hbCIsInRvT3JnYW5lIiwib3JnYW5lUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgiLCJjb21taXQiLCJlcnJvckNvZGUiLCJjb21taXRBbmRQdXNoIiwicmVtb3RlIiwiQWdlbmRhcyIsImFnZW5kYXMiLCJ0b0FnZW5kYXMiLCJyZXVuaW9uIiwicmV1bmlvbnMiLCJ3cml0ZVJldW5pb25SZW9yZ2FuaXplZEpzb24iLCJyZXVuaW9uU3BsaXRQYXRoIiwicmV1bmlvbkZpbGVuYW1lIiwicmV1bmlvbk9yaWdpbmFsRmlsZVBhdGgiLCJyZXVuaW9uT3JpZ2luYWxKc29uIiwicmV1bmlvbk9yaWdpbmFsIiwidG9SZXVuaW9uIiwiQW1lbmRlbWVudHMiLCJhbWVuZGVtZW50cyIsInRvQW1lbmRlbWVudHMiLCJ0ZXh0ZUxlZ2lzbGF0aWYiLCJ0ZXh0ZXNFdEFtZW5kZW1lbnRzIiwidGV4dGVsZWciLCJhbWVuZGVtZW50Iiwid3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uIiwiYW1lbmRlbWVudFNwbGl0UGF0aCIsImFtZW5kZW1lbnRGaWxlbmFtZSIsImFtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRoIiwiYW1lbmRlbWVudE9yaWdpbmFsSnNvbiIsImFtZW5kZW1lbnRPcmlnaW5hbCIsInRvQW1lbmRlbWVudFdyYXBwZXIiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llcnNMZWdpc2xhdGlmcyIsImRvY3VtZW50c0RpciIsImRvc3NpZXJzRGlyIiwidG9Eb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9jdW1lbnQiLCJ0ZXh0ZXNMZWdpc2xhdGlmcyIsIndyaXRlRG9jdW1lbnRSZW9yZ2FuaXplZEpzb24iLCJkb3NzaWVyUGFybGVtZW50YWlyZSIsImRvc3NpZXIiLCJ3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uIiwiZG9jdW1lbnRTcGxpdFBhdGgiLCJkb2N1bWVudEZpbGVuYW1lIiwiZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRoIiwiZG9jdW1lbnRPcmlnaW5hbEpzb24iLCJkb2N1bWVudE9yaWdpbmFsIiwidG9Eb2N1bWVudCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIiwiZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZSIsImRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uIiwiZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbCIsInRvRG9zc2llclBhcmxlbWVudGFpcmUiLCJTY3J1dGlucyIsInNjcnV0aW5zIiwidG9TY3J1dGlucyIsInNjcnV0aW4iLCJ3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24iLCJzY3J1dGluU3BsaXRQYXRoIiwic2NydXRpbkZpbGVuYW1lIiwic2NydXRpbk9yaWdpbmFsRmlsZVBhdGgiLCJzY3J1dGluT3JpZ2luYWxKc29uIiwic2NydXRpbk9yaWdpbmFsIiwidG9TY3J1dGluV3JhcHBlciIsInVpZFRleHRlTGVnaXNsYXRpZiIsInRleHRlTGVnaXNsYXRpZlJlZiIsInRleHRlTGVnaXNsYXRpZkRpciIsInJldW5pb25zRGlyIiwic2NydXRpbnNEaXIiLCJhcmd2IiwiZXhpdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL3Jlb3JnYW5pemVfZGF0YS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiXG5pbXBvcnQgY29tbWFuZExpbmVBcmdzIGZyb20gXCJjb21tYW5kLWxpbmUtYXJnc1wiXG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcblxuaW1wb3J0IHsgZGF0YXNldHMsIERhdGFzZXRTdHJ1Y3R1cmUsIEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuLi9kYXRhc2V0c1wiXG5pbXBvcnQgeyBleGlzdGluZ0RhdGVUb0pzb24sIHBhdGNoZWREYXRlVG9Kc29uIH0gZnJvbSBcIi4uL2RhdGVzXCJcbmltcG9ydCAqIGFzIGdpdCBmcm9tIFwiLi4vZ2l0XCJcbmltcG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi4vZmlsZV9zeXN0ZW1zXCJcbmltcG9ydCB7XG4gIHBhdGhGcm9tRG9jdW1lbnRVaWQsXG4gIHBhdGhGcm9tRG9zc2llclBhcmxlbWVudGFpcmVVaWQsXG4gIHBhdGhGcm9tUmV1bmlvblVpZCxcbiAgcGF0aEZyb21TY3J1dGluVWlkLFxufSBmcm9tIFwiLi4vbG9hZGVyc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9hY3RldXJzX2V0X29yZ2FuZXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBZ2VuZGFzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvYWdlbmRhc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFtZW5kZW1lbnRzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvYW1lbmRlbWVudHNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBTY3J1dGluc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL3NjcnV0aW5zXCJcbmltcG9ydCB7IExlZ2lzbGF0dXJlIH0gZnJvbSBcIi4uL3R5cGVzL2xlZ2lzbGF0dXJlc1wiXG5cbmNvbnN0IG9wdGlvbnNEZWZpbml0aW9ucyA9IFtcbiAge1xuICAgIGFsaWFzOiBcIkNcIixcbiAgICBoZWxwOiBcImNsb25lIHJlcG9zaXRvcmllcyBmcm9tIGdpdmVuIGdyb3VwIChvciBvcmdhbml6YXRpb24pIGdpdCBVUkxcIixcbiAgICBuYW1lOiBcImNsb25lXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwiY1wiLFxuICAgIGhlbHA6IFwiY29tbWl0IHNwbGl0IGZpbGVzXCIsXG4gICAgbmFtZTogXCJjb21taXRcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwia1wiLFxuICAgIGRlZmF1bHRWYWx1ZTogW1wiQWxsXCJdLFxuICAgIGhlbHA6IFwiY2F0ZWdvcmllcyBvZiBkYXRhc2V0cyB0byByZW9yZ2FuaXplXCIsXG4gICAgbXVsdGlwbGU6IHRydWUsXG4gICAgbmFtZTogXCJjYXRlZ29yaWVzXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwibFwiLFxuICAgIGhlbHA6IFwibGVnaXNsYXR1cmVzIG9mIGNhdGVnb3JpZXMgb2YgZGF0YXNldHMgdG8gcmV0cmlldmVcIixcbiAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICBuYW1lOiBcImxlZ2lzbGF0dXJlXCIsXG4gICAgdHlwZTogTnVtYmVyLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwicFwiLFxuICAgIGhlbHA6IFwicHVsbCByZXBvc2l0b3JpZXMgYmVmb3JlIHByb2NlZWRpbmdcIixcbiAgICBuYW1lOiBcInB1bGxcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwiclwiLFxuICAgIGhlbHA6IFwicHVzaCBjb21taXQgdG8gZ2l2ZW4gcmVtb3RlXCIsXG4gICAgbXVsdGlwbGU6IHRydWUsXG4gICAgbmFtZTogXCJyZW1vdGVcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJzXCIsXG4gICAgaGVscDogXCJkb24ndCBsb2cgYW55dGhpbmdcIixcbiAgICBuYW1lOiBcInNpbGVudFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJWXCIsXG4gICAgaGVscDogXCJkb24ndCB2YWxpZGF0ZSByYXcgZGF0YVwiLFxuICAgIG5hbWU6IFwibm8tdmFsaWRhdGUtcmF3XCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInZcIixcbiAgICBoZWxwOiBcInZlcmJvc2UgbG9nc1wiLFxuICAgIG5hbWU6IFwidmVyYm9zZVwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBkZWZhdWx0T3B0aW9uOiB0cnVlLFxuICAgIGhlbHA6IFwiZGlyZWN0b3J5IGNvbnRhaW5pbmcgQXNzZW1ibMOpZSBvcGVuIGRhdGEgZmlsZXNcIixcbiAgICBuYW1lOiBcImRhdGFEaXJcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG5dXG5cbmZ1bmN0aW9uIHJlb3JnYW5pemVEYXRhKG9wdGlvbnM6IGFueSk6IG51bWJlciB7XG4gIGNvbnN0IGRhdGFEaXIgPSBvcHRpb25zLmRhdGFEaXJcbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gcGF0Y2hlZERhdGVUb0pzb25cblxuICBsZXQgZXhpdENvZGUgPSAwXG4gIGNvbnN0IGdpdEdyb3VwVXJsID0gb3B0aW9ucy5jbG9uZVxuICAgID8gb3B0aW9ucy5jbG9uZS50cmltKCkucmVwbGFjZSgvXFwvKyQvLCBcIlwiKVxuICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IHZhbGlkYXRlUmF3RGF0YSA9ICFvcHRpb25zW1wibm8tdmFsaWRhdGUtcmF3XCJdXG5cbiAgb3B0aW9ucy5jYXRlZ29yaWVzLm1hcCgoZGF0YXNldE5hbWU6IHN0cmluZykgPT5cbiAgICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgICAoRW5hYmxlZERhdGFzZXRzIGFzIGFueSBhcyB7IFtuYW1lOiBzdHJpbmddOiBFbmFibGVkRGF0YXNldHMgfSlbXG4gICAgICAgIGRhdGFzZXROYW1lXG4gICAgICBdLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgYFVua25vd24gbmFtZSBvZiBkYXRhc2V0OiAke2RhdGFzZXROYW1lfWAsXG4gICAgKSxcbiAgKVxuICBjb25zdCBlbmFibGVkRGF0YXNldHMgPSBvcHRpb25zLmNhdGVnb3JpZXMucmVkdWNlKFxuICAgIChlbmFibGVkRGF0YXNldHM6IEVuYWJsZWREYXRhc2V0cywgZGF0YXNldE5hbWU6IHN0cmluZyk6IEVuYWJsZWREYXRhc2V0cyA9PlxuICAgICAgZW5hYmxlZERhdGFzZXRzIHxcbiAgICAgIChFbmFibGVkRGF0YXNldHMgYXMgYW55IGFzIHsgW25hbWU6IHN0cmluZ106IEVuYWJsZWREYXRhc2V0cyB9KVtcbiAgICAgICAgZGF0YXNldE5hbWVcbiAgICAgIF0sXG4gICAgRW5hYmxlZERhdGFzZXRzLk5vbmUsXG4gIClcblxuICBsZXQgY2hvb3NlbkRhdGFzZXRzID0gZGF0YXNldHNcbiAgLy8gV2hlbiBhIGdpdmVuIGxlZ2lzbGF0dXJlIGlzIDAsIGl0IGlzIHRoZSBzYW1lIGFzIGdpdmluZyBubyBsZWdpc2xhdHVyZTpcbiAgLy8gSXQgbWVhbnMgXCJldmVyeSBsZWdpc2xhdHVyZXNcIi5cbiAgY29uc3QgbGVnaXNsYXR1cmVzID0gb3B0aW9ucy5sZWdpc2xhdHVyZT8uc29tZShcbiAgICAobGVnaXNsYXR1cmU6IG51bWJlcikgPT4gbGVnaXNsYXR1cmUgPT09IDAsXG4gIClcbiAgICA/IHVuZGVmaW5lZFxuICAgIDogb3B0aW9ucy5sZWdpc2xhdHVyZVxuICBpZiAobGVnaXNsYXR1cmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBlbmFibGVkTGVnaXNsYXR1cmVzID0gbGVnaXNsYXR1cmVzLm1hcCgobGVnaXNsYXR1cmU6IG51bWJlcikgPT5cbiAgICAgIGxlZ2lzbGF0dXJlLnRvU3RyaW5nKCksXG4gICAgKVxuICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhjaG9vc2VuRGF0YXNldHMpKSB7XG4gICAgICBjaG9vc2VuRGF0YXNldHNba2V5IGFzIGtleW9mIHR5cGVvZiBjaG9vc2VuRGF0YXNldHNdID0gdmFsdWUuZmlsdGVyKFxuICAgICAgICAoZGF0YXNldDogeyBsZWdpc2xhdHVyZTogYW55IH0pID0+XG4gICAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSA9PT0gTGVnaXNsYXR1cmUuQWxsIHx8XG4gICAgICAgICAgZW5hYmxlZExlZ2lzbGF0dXJlcy5pbmNsdWRlcyhkYXRhc2V0LmxlZ2lzbGF0dXJlKSxcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvb3NlbkRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgaWYgKG9wdGlvbnMucHVsbCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IHB1bGwgLS1yZWJhc2VgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjdGV1cnNSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwiYWN0ZXVyc1wiKVxuICAgICAgZnMubWtkaXJTeW5jKGFjdGV1cnNSZW9yZ2FuaXplZERpcilcbiAgICAgIGNvbnN0IG9yZ2FuZXNSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwib3JnYW5lc1wiKVxuICAgICAgZnMubWtkaXJTeW5jKG9yZ2FuZXNSZW9yZ2FuaXplZERpcilcblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9BY3RldXJzRXRPcmdhbmVzKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBhY3RldXIgb2Ygb3JpZ2luYWxEYXRhLmV4cG9ydC5hY3RldXJzLmFjdGV1cikge1xuICAgICAgICAgICAgICBjb25zdCByZW9yZ2FuaXplZEpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIGFjdGV1cnNSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBhY3RldXIudWlkW1wiI3RleHRcIl0gKyBcIi5qc29uXCIsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShhY3RldXIsIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3JnYW5lIG9mIG9yaWdpbmFsRGF0YS5leHBvcnQub3JnYW5lcy5vcmdhbmUpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmdhbmVzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgb3JnYW5lLnVpZCArIFwiLmpzb25cIixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9yZ2FuZSwgbnVsbCwgMiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IGRlcG9ydHNCeUFjdGV1clVpZDoge1xuICAgICAgICAgICAgICBbYWN0ZXVyVWlkOiBzdHJpbmddOiB7IHVpZDogc3RyaW5nIH1bXVxuICAgICAgICAgICAgfSA9IHt9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZzLmV4aXN0c1N5bmMoXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsIFwiZGVwb3J0XCIpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBkZXBvcnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIFtcImRlcG9ydFwiXSxcbiAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICAgIGRlcG9ydFNwbGl0UGF0aFtkZXBvcnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgICBpZiAoIWRlcG9ydEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgLi4uZGVwb3J0U3BsaXRQYXRoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgICAgYCAgTG9hZGluZyBcImRlcG9ydFwiIGZpbGU6ICR7ZGVwb3J0T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICAgIGRlcG9ydE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9EZXBvcnQoZGVwb3J0T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRlcG9ydE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnQgPSBkZXBvcnRPcmlnaW5hbC5kZXBvcnRcbiAgICAgICAgICAgICAgICBsZXQgZGVwb3J0cyA9IGRlcG9ydHNCeUFjdGV1clVpZFtkZXBvcnQuYWN0ZXVyUmVmXVxuICAgICAgICAgICAgICAgIGlmIChkZXBvcnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIGRlcG9ydHMgPSBkZXBvcnRzQnlBY3RldXJVaWRbZGVwb3J0LmFjdGV1clJlZl0gPSBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZXBvcnRzLnB1c2goZGVwb3J0KVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9yIChjb25zdCBkZXBvcnRzIG9mIE9iamVjdC52YWx1ZXMoZGVwb3J0c0J5QWN0ZXVyVWlkKSkge1xuICAgICAgICAgICAgICAgIGRlcG9ydHMuc29ydCgoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgIGEudWlkLmxlbmd0aCA9PT0gYi51aWQubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gYS51aWQubG9jYWxlQ29tcGFyZShiLnVpZClcbiAgICAgICAgICAgICAgICAgICAgOiBhLnVpZC5sZW5ndGggLSBiLnVpZC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG1hbmRhdHNCeUFjdGV1clVpZDoge1xuICAgICAgICAgICAgICBbYWN0ZXVyVWlkOiBzdHJpbmddOiB7IHVpZDogc3RyaW5nIH1bXVxuICAgICAgICAgICAgfSA9IHt9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZzLmV4aXN0c1N5bmMoXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsIFwibWFuZGF0XCIpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBtYW5kYXRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIFtcIm1hbmRhdFwiXSxcbiAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICAgIG1hbmRhdFNwbGl0UGF0aFttYW5kYXRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgICBpZiAoIW1hbmRhdEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgLi4ubWFuZGF0U3BsaXRQYXRoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgICAgYCAgTG9hZGluZyBcIm1hbmRhdFwiIGZpbGU6ICR7bWFuZGF0T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICAgIG1hbmRhdE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9NYW5kYXRXcmFwcGVyKFxuICAgICAgICAgICAgICAgICAgICAgIG1hbmRhdE9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG1hbmRhdE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXQgPSBtYW5kYXRPcmlnaW5hbC5tYW5kYXRcbiAgICAgICAgICAgICAgICBsZXQgbWFuZGF0cyA9IG1hbmRhdHNCeUFjdGV1clVpZFttYW5kYXQuYWN0ZXVyUmVmXVxuICAgICAgICAgICAgICAgIGlmIChtYW5kYXRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIG1hbmRhdHMgPSBtYW5kYXRzQnlBY3RldXJVaWRbbWFuZGF0LmFjdGV1clJlZl0gPSBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtYW5kYXRzLnB1c2gobWFuZGF0KVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9yIChjb25zdCBtYW5kYXRzIG9mIE9iamVjdC52YWx1ZXMobWFuZGF0c0J5QWN0ZXVyVWlkKSkge1xuICAgICAgICAgICAgICAgIG1hbmRhdHMuc29ydCgoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgIGEudWlkLmxlbmd0aCA9PT0gYi51aWQubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gYS51aWQubG9jYWxlQ29tcGFyZShiLnVpZClcbiAgICAgICAgICAgICAgICAgICAgOiBhLnVpZC5sZW5ndGggLSBiLnVpZC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgYWN0ZXVyU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImFjdGV1clwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyRmlsZW5hbWUgPSBhY3RldXJTcGxpdFBhdGhbYWN0ZXVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghYWN0ZXVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmFjdGV1clNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJhY3RldXJcIiBmaWxlOiAke2FjdGV1ck9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgYWN0ZXVyT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydC50b0FjdGV1cihhY3RldXJPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGFjdGV1ck9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyID0gYWN0ZXVyT3JpZ2luYWwuYWN0ZXVyXG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1clVpZCA9IGFjdGV1ci51aWRbXCIjdGV4dFwiXVxuICAgICAgICAgICAgICBjb25zdCBkZXBvcnRzID0gZGVwb3J0c0J5QWN0ZXVyVWlkW2FjdGV1clVpZF1cbiAgICAgICAgICAgICAgaWYgKGRlcG9ydHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhY3RldXIuZGVwb3J0cywgdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGFjdGV1ci5kZXBvcnRzID0geyBkZXBvcnQ6IGRlcG9ydHMgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG1hbmRhdHMgPSBtYW5kYXRzQnlBY3RldXJVaWRbYWN0ZXVyVWlkXVxuICAgICAgICAgICAgICBpZiAobWFuZGF0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFjdGV1ci5tYW5kYXRzLCB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgYWN0ZXVyLm1hbmRhdHMgPSB7IG1hbmRhdDogbWFuZGF0cyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBhY3RldXJzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgYWN0ZXVyVWlkICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoYWN0ZXVyLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9yZ2FuZVNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJvcmdhbmVcIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVuYW1lID0gb3JnYW5lU3BsaXRQYXRoW29yZ2FuZVNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIW9yZ2FuZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZU9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5vcmdhbmVTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwib3JnYW5lXCIgZmlsZTogJHtvcmdhbmVPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZU9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIG9yZ2FuZU9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9PcmdhbmUob3JnYW5lT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmdhbmVPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZSA9IG9yZ2FuZU9yaWdpbmFsLm9yZ2FuZVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVSZW9yZ2FuaXplZEpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yZ2FuZXNSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBvcmdhbmUudWlkICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgb3JnYW5lUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkob3JnYW5lLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChlcnJvckNvZGUgIT09IDAgJiYgZXhpdENvZGUgPT09IDApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob29zZW5EYXRhc2V0cy5hZ2VuZGFzKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IEFnZW5kYXNSYXdDb252ZXJ0LnRvQWdlbmRhcyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgcmV1bmlvbiBvZiBvcmlnaW5hbERhdGEucmV1bmlvbnMucmV1bmlvbikge1xuICAgICAgICAgICAgICB3cml0ZVJldW5pb25SZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCByZXVuaW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCByZXVuaW9uU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcInJldW5pb25cIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb25GaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgcmV1bmlvblNwbGl0UGF0aFtyZXVuaW9uU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghcmV1bmlvbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb25PcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4ucmV1bmlvblNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJyZXVuaW9uXCIgZmlsZTogJHtyZXVuaW9uT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgcmV1bmlvbk9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbk9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IEFnZW5kYXNSYXdDb252ZXJ0LnRvUmV1bmlvbihyZXVuaW9uT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShyZXVuaW9uT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uID0gcmV1bmlvbk9yaWdpbmFsLnJldW5pb25cbiAgICAgICAgICAgICAgd3JpdGVSZXVuaW9uUmVvcmdhbml6ZWRKc29uKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgcmV1bmlvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdpdC5jb21taXRBbmRQdXNoKFxuICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgICBvcHRpb25zLnJlbW90ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoZXJyb3JDb2RlICE9PSAwICYmIGV4aXRDb2RlID09PSAwKSB7XG4gICAgICAgICAgZXhpdENvZGUgPSBlcnJvckNvZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQW1lbmRlbWVudHMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvb3NlbkRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IEFtZW5kZW1lbnRzUmF3Q29udmVydC50b0FtZW5kZW1lbnRzKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCB0ZXh0ZUxlZ2lzbGF0aWYgb2Ygb3JpZ2luYWxEYXRhLnRleHRlc0V0QW1lbmRlbWVudHNcbiAgICAgICAgICAgICAgLnRleHRlbGVnKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudCBvZiB0ZXh0ZUxlZ2lzbGF0aWYuYW1lbmRlbWVudHMpIHtcbiAgICAgICAgICAgICAgICB3cml0ZUFtZW5kZW1lbnRSZW9yZ2FuaXplZEpzb24oXG4gICAgICAgICAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgICBhbWVuZGVtZW50LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCBhbWVuZGVtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgYW1lbmRlbWVudFNwbGl0UGF0aFthbWVuZGVtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghYW1lbmRlbWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uYW1lbmRlbWVudFNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJhbWVuZGVtZW50XCIgZmlsZTogJHthbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50T3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgYW1lbmRlbWVudE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IEFtZW5kZW1lbnRzUmF3Q29udmVydC50b0FtZW5kZW1lbnRXcmFwcGVyKFxuICAgICAgICAgICAgICAgICAgICBhbWVuZGVtZW50T3JpZ2luYWxKc29uLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShhbWVuZGVtZW50T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50ID0gYW1lbmRlbWVudE9yaWdpbmFsLmFtZW5kZW1lbnRcbiAgICAgICAgICAgICAgd3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgYW1lbmRlbWVudClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdpdC5jb21taXRBbmRQdXNoKFxuICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgICBvcHRpb25zLnJlbW90ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoZXJyb3JDb2RlICE9PSAwICYmIGV4aXRDb2RlID09PSAwKSB7XG4gICAgICAgICAgZXhpdENvZGUgPSBlcnJvckNvZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuRG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9vc2VuRGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuICAgICAgY29uc3QgZG9jdW1lbnRzRGlyID0gcGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgXCJkb2N1bWVudHNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhkb2N1bWVudHNEaXIpXG4gICAgICBjb25zdCBkb3NzaWVyc0RpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwiZG9zc2llcnNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhkb3NzaWVyc0RpcilcblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQudG9Eb3NzaWVyc0xlZ2lzbGF0aWZzKFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBkb2N1bWVudCBvZiBvcmlnaW5hbERhdGEuZXhwb3J0LnRleHRlc0xlZ2lzbGF0aWZzXG4gICAgICAgICAgICAgIC5kb2N1bWVudCkge1xuICAgICAgICAgICAgICB3cml0ZURvY3VtZW50UmVvcmdhbml6ZWRKc29uKGRvY3VtZW50c0RpciwgZG9jdW1lbnQpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBkb3NzaWVyUGFybGVtZW50YWlyZSB9IG9mIG9yaWdpbmFsRGF0YS5leHBvcnRcbiAgICAgICAgICAgICAgLmRvc3NpZXJzTGVnaXNsYXRpZnMuZG9zc2llcikge1xuICAgICAgICAgICAgICB3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgIGRvc3NpZXJzRGlyLFxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvY3VtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImRvY3VtZW50XCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBkb2N1bWVudFNwbGl0UGF0aFtkb2N1bWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uZG9jdW1lbnRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiZG9jdW1lbnRcIiBmaWxlOiAke2RvY3VtZW50T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGRvY3VtZW50T3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LnRvRG9jdW1lbnQoZG9jdW1lbnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRvY3VtZW50T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudCA9IGRvY3VtZW50T3JpZ2luYWwuZG9jdW1lbnRcbiAgICAgICAgICAgICAgd3JpdGVEb2N1bWVudFJlb3JnYW5pemVkSnNvbihkb2N1bWVudHNEaXIsIGRvY3VtZW50KVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImRvc3NpZXJQYXJsZW1lbnRhaXJlXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aFtcbiAgICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIGlmICghZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5kb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJkb3NzaWVyUGFybGVtZW50YWlyZVwiIGZpbGU6ICR7ZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQudG9Eb3NzaWVyUGFybGVtZW50YWlyZShcbiAgICAgICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZSA9XG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbC5kb3NzaWVyUGFybGVtZW50YWlyZVxuICAgICAgICAgICAgICB3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgIGRvc3NpZXJzRGlyLFxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKGVycm9yQ29kZSAhPT0gMCAmJiBleGl0Q29kZSA9PT0gMCkge1xuICAgICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlNjcnV0aW5zKSB7XG4gICAgZm9yIChsZXQgZGF0YXNldCBvZiBjaG9vc2VuRGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gU2NydXRpbnNSYXdDb252ZXJ0LnRvU2NydXRpbnMob3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNjcnV0aW4gb2Ygb3JpZ2luYWxEYXRhLnNjcnV0aW5zLnNjcnV0aW4pIHtcbiAgICAgICAgICAgICAgd3JpdGVTY3J1dGluUmVvcmdhbml6ZWRKc29uKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgc2NydXRpbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2NydXRpblNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluRmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIHNjcnV0aW5TcGxpdFBhdGhbc2NydXRpblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIXNjcnV0aW5GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLnNjcnV0aW5TcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwic2NydXRpblwiIGZpbGU6ICR7c2NydXRpbk9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbk9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHNjcnV0aW5PcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5PcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBTY3J1dGluc1Jhd0NvbnZlcnQudG9TY3J1dGluV3JhcHBlcihzY3J1dGluT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShzY3J1dGluT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluID0gc2NydXRpbk9yaWdpbmFsLnNjcnV0aW5cbiAgICAgICAgICAgICAgd3JpdGVTY3J1dGluUmVvcmdhbml6ZWRKc29uKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgc2NydXRpbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdpdC5jb21taXRBbmRQdXNoKFxuICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgICBvcHRpb25zLnJlbW90ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoZXJyb3JDb2RlICE9PSAwICYmIGV4aXRDb2RlID09PSAwKSB7XG4gICAgICAgICAgZXhpdENvZGUgPSBlcnJvckNvZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlc3RvcmUgc3RhbmRhcmQgY29udmVyc2lvbiBvZiBkYXRlcyB0byBKU09OLlxuICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBleGlzdGluZ0RhdGVUb0pzb25cblxuICByZXR1cm4gZXhpdENvZGVcbn1cblxuZnVuY3Rpb24gd3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uKFxuICBkYXRhc2V0UmVvcmdhbml6ZWREaXI6IHN0cmluZyxcbiAgYW1lbmRlbWVudDoge1xuICAgIHVpZDogc3RyaW5nXG4gICAgdGV4dGVMZWdpc2xhdGlmUmVmOiBzdHJpbmdcbiAgfSxcbik6IHZvaWQge1xuICBjb25zdCB1aWRUZXh0ZUxlZ2lzbGF0aWYgPSBhbWVuZGVtZW50LnRleHRlTGVnaXNsYXRpZlJlZlxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwodWlkVGV4dGVMZWdpc2xhdGlmLCB1bmRlZmluZWQpXG4gIGNvbnN0IHRleHRlTGVnaXNsYXRpZkRpciA9IHBhdGguam9pbihcbiAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgdWlkVGV4dGVMZWdpc2xhdGlmLFxuICApXG4gIGZzLmVuc3VyZURpclN5bmModGV4dGVMZWdpc2xhdGlmRGlyKVxuICBjb25zdCByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICB0ZXh0ZUxlZ2lzbGF0aWZEaXIsXG4gICAgYW1lbmRlbWVudC51aWQgKyBcIi5qc29uXCIsXG4gIClcbiAgZnMud3JpdGVGaWxlU3luYyhcbiAgICByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICBKU09OLnN0cmluZ2lmeShhbWVuZGVtZW50LCBudWxsLCAyKSxcbiAgICB7XG4gICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgfSxcbiAgKVxufVxuXG5mdW5jdGlvbiB3cml0ZURvY3VtZW50UmVvcmdhbml6ZWRKc29uKFxuICBkb2N1bWVudHNEaXI6IHN0cmluZyxcbiAgZG9jdW1lbnQ6IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tRG9jdW1lbnRVaWQoZG9jdW1lbnRzRGlyLCBkb2N1bWVudC51aWQpXG4gIGZzLndyaXRlRmlsZVN5bmMoYCR7YmFzZW5hbWV9Lmpzb25gLCBKU09OLnN0cmluZ2lmeShkb2N1bWVudCwgbnVsbCwgMiksIHtcbiAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG9zc2llclBhcmxlbWVudGFpcmVSZW9yZ2FuaXplZEpzb24oXG4gIGRvc3NpZXJzRGlyOiBzdHJpbmcsXG4gIGRvc3NpZXJQYXJsZW1lbnRhaXJlOiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgYmFzZW5hbWUgPSBwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkKFxuICAgIGRvc3NpZXJzRGlyLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlLnVpZCxcbiAgKVxuICBmcy53cml0ZUZpbGVTeW5jKFxuICAgIGAke2Jhc2VuYW1lfS5qc29uYCxcbiAgICBKU09OLnN0cmluZ2lmeShkb3NzaWVyUGFybGVtZW50YWlyZSwgbnVsbCwgMiksXG4gICAge1xuICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgIH0sXG4gIClcbn1cblxuZnVuY3Rpb24gd3JpdGVSZXVuaW9uUmVvcmdhbml6ZWRKc29uKFxuICByZXVuaW9uc0Rpcjogc3RyaW5nLFxuICByZXVuaW9uOiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgYmFzZW5hbWUgPSBwYXRoRnJvbVJldW5pb25VaWQocmV1bmlvbnNEaXIsIHJldW5pb24udWlkKVxuICBmcy53cml0ZUZpbGVTeW5jKGAke2Jhc2VuYW1lfS5qc29uYCwgSlNPTi5zdHJpbmdpZnkocmV1bmlvbiwgbnVsbCwgMiksIHtcbiAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHdyaXRlU2NydXRpblJlb3JnYW5pemVkSnNvbihcbiAgc2NydXRpbnNEaXI6IHN0cmluZyxcbiAgc2NydXRpbjogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21TY3J1dGluVWlkKHNjcnV0aW5zRGlyLCBzY3J1dGluLnVpZClcbiAgZnMud3JpdGVGaWxlU3luYyhgJHtiYXNlbmFtZX0uanNvbmAsIEpTT04uc3RyaW5naWZ5KHNjcnV0aW4sIG51bGwsIDIpLCB7XG4gICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICB9KVxufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmIChwcm9jZXNzLmFyZ3ZbMV0uZW5kc1dpdGgoXCJyZW9yZ2FuaXplX2RhdGEudHNcIikpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGNvbW1hbmRMaW5lQXJncyhvcHRpb25zRGVmaW5pdGlvbnMpXG5cbiAgcHJvY2Vzcy5leGl0KHJlb3JnYW5pemVEYXRhKG9wdGlvbnMpKVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxNQUFNLE1BQU0sUUFBUTtBQUMzQixTQUFTQyxRQUFRLFFBQVEsZUFBZTtBQUN4QyxPQUFPQyxlQUFlLE1BQU0sbUJBQW1CO0FBQy9DLE9BQU9DLEVBQUUsTUFBTSxVQUFVO0FBQ3pCLE9BQU9DLElBQUksTUFBTSxNQUFNO0FBQUEsU0FFZEMsUUFBUSxFQUFFQyxnQkFBZ0IsRUFBRUMsZUFBZTtBQUFBLFNBQzNDQyxrQkFBa0IsRUFBRUMsaUJBQWlCO0FBQUEsT0FDdkMsS0FBS0MsR0FBRztBQUFBLFNBQ05DLE9BQU87QUFBQSxTQUVkQyxtQkFBbUIsRUFDbkJDLCtCQUErQixFQUMvQkMsa0JBQWtCLEVBQ2xCQyxrQkFBa0I7QUFBQSxTQUVYQyxPQUFPLElBQUlDLDBCQUEwQjtBQUFBLFNBQ3JDRCxPQUFPLElBQUlFLGlCQUFpQjtBQUFBLFNBQzVCRixPQUFPLElBQUlHLHFCQUFxQjtBQUFBLFNBQ2hDSCxPQUFPLElBQUlJLDZCQUE2QjtBQUFBLFNBQ3hDSixPQUFPLElBQUlLLGtCQUFrQjtBQUFBLFNBQzdCQyxXQUFXO0FBRXBCLE1BQU1DLGtCQUFrQixHQUFHLENBQ3pCO0VBQ0VDLEtBQUssRUFBRSxHQUFHO0VBQ1ZDLElBQUksRUFBRSwrREFBK0Q7RUFDckVDLElBQUksRUFBRSxPQUFPO0VBQ2JDLElBQUksRUFBRUM7QUFDUixDQUFDLEVBQ0Q7RUFDRUosS0FBSyxFQUFFLEdBQUc7RUFDVkMsSUFBSSxFQUFFLG9CQUFvQjtFQUMxQkMsSUFBSSxFQUFFLFFBQVE7RUFDZEMsSUFBSSxFQUFFRTtBQUNSLENBQUMsRUFDRDtFQUNFTCxLQUFLLEVBQUUsR0FBRztFQUNWTSxZQUFZLEVBQUUsQ0FBQyxLQUFLLENBQUM7RUFDckJMLElBQUksRUFBRSxzQ0FBc0M7RUFDNUNNLFFBQVEsRUFBRSxJQUFJO0VBQ2RMLElBQUksRUFBRSxZQUFZO0VBQ2xCQyxJQUFJLEVBQUVDO0FBQ1IsQ0FBQyxFQUNEO0VBQ0VKLEtBQUssRUFBRSxHQUFHO0VBQ1ZDLElBQUksRUFBRSxvREFBb0Q7RUFDMURNLFFBQVEsRUFBRSxJQUFJO0VBQ2RMLElBQUksRUFBRSxhQUFhO0VBQ25CQyxJQUFJLEVBQUVLO0FBQ1IsQ0FBQyxFQUNEO0VBQ0VSLEtBQUssRUFBRSxHQUFHO0VBQ1ZDLElBQUksRUFBRSxxQ0FBcUM7RUFDM0NDLElBQUksRUFBRSxNQUFNO0VBQ1pDLElBQUksRUFBRUU7QUFDUixDQUFDLEVBQ0Q7RUFDRUwsS0FBSyxFQUFFLEdBQUc7RUFDVkMsSUFBSSxFQUFFLDZCQUE2QjtFQUNuQ00sUUFBUSxFQUFFLElBQUk7RUFDZEwsSUFBSSxFQUFFLFFBQVE7RUFDZEMsSUFBSSxFQUFFQztBQUNSLENBQUMsRUFDRDtFQUNFSixLQUFLLEVBQUUsR0FBRztFQUNWQyxJQUFJLEVBQUUsb0JBQW9CO0VBQzFCQyxJQUFJLEVBQUUsUUFBUTtFQUNkQyxJQUFJLEVBQUVFO0FBQ1IsQ0FBQyxFQUNEO0VBQ0VMLEtBQUssRUFBRSxHQUFHO0VBQ1ZDLElBQUksRUFBRSx5QkFBeUI7RUFDL0JDLElBQUksRUFBRSxpQkFBaUI7RUFDdkJDLElBQUksRUFBRUU7QUFDUixDQUFDLEVBQ0Q7RUFDRUwsS0FBSyxFQUFFLEdBQUc7RUFDVkMsSUFBSSxFQUFFLGNBQWM7RUFDcEJDLElBQUksRUFBRSxTQUFTO0VBQ2ZDLElBQUksRUFBRUU7QUFDUixDQUFDLEVBQ0Q7RUFDRUksYUFBYSxFQUFFLElBQUk7RUFDbkJSLElBQUksRUFBRSxnREFBZ0Q7RUFDdERDLElBQUksRUFBRSxTQUFTO0VBQ2ZDLElBQUksRUFBRUM7QUFDUixDQUFDLENBQ0Y7QUFFRCxTQUFTTSxjQUFjQSxDQUFDQyxPQUFZLEVBQVU7RUFDNUMsTUFBTUMsT0FBTyxHQUFHRCxPQUFPLENBQUNDLE9BQU87RUFDL0JDLElBQUksQ0FBQ0MsU0FBUyxDQUFDQyxNQUFNLEdBQUc5QixpQkFBaUI7RUFFekMsSUFBSStCLFFBQVEsR0FBRyxDQUFDO0VBQ2hCLE1BQU1DLFdBQVcsR0FBR04sT0FBTyxDQUFDTyxLQUFLLEdBQzdCUCxPQUFPLENBQUNPLEtBQUssQ0FBQ0MsSUFBSSxFQUFFLENBQUNDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQ3hDQyxTQUFTO0VBQ2IsTUFBTUMsZUFBZSxHQUFHLENBQUNYLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztFQUVuREEsT0FBTyxDQUFDWSxVQUFVLENBQUNDLEdBQUcsQ0FBRUMsV0FBbUIsSUFDekNqRCxNQUFNLENBQUNrRCxjQUFjLENBQ2xCM0MsZUFBZSxDQUNkMEMsV0FBVyxDQUNaLEVBQ0RKLFNBQVMsRUFDUiw0QkFBMkJJLFdBQVksRUFBQyxDQUMxQyxDQUNGO0VBQ0QsTUFBTUUsZUFBZSxHQUFHaEIsT0FBTyxDQUFDWSxVQUFVLENBQUNLLE1BQU0sQ0FDL0MsQ0FBQ0QsZUFBZ0MsRUFBRUYsV0FBbUIsS0FDcERFLGVBQWUsR0FDZDVDLGVBQWUsQ0FDZDBDLFdBQVcsQ0FDWixFQUNIMUMsZUFBZSxDQUFDOEMsSUFBSSxDQUNyQjtFQUVELElBQUlDLGVBQWUsR0FBR2pELFFBQVE7RUFDOUI7RUFDQTtFQUNBLE1BQU1rRCxZQUFZLEdBQUdwQixPQUFPLENBQUNxQixXQUFXLEVBQUVDLElBQUksQ0FDM0NELFdBQW1CLElBQUtBLFdBQVcsS0FBSyxDQUFDLENBQzNDLEdBQ0dYLFNBQVMsR0FDVFYsT0FBTyxDQUFDcUIsV0FBVztFQUN2QixJQUFJRCxZQUFZLEtBQUtWLFNBQVMsRUFBRTtJQUM5QixNQUFNYSxtQkFBbUIsR0FBR0gsWUFBWSxDQUFDUCxHQUFHLENBQUVRLFdBQW1CLElBQy9EQSxXQUFXLENBQUNHLFFBQVEsRUFBRSxDQUN2QjtJQUNELEtBQUssSUFBSSxDQUFDQyxHQUFHLEVBQUVDLEtBQUssQ0FBQyxJQUFJQyxNQUFNLENBQUNDLE9BQU8sQ0FBQ1QsZUFBZSxDQUFDLEVBQUU7TUFDeERBLGVBQWUsQ0FBQ00sR0FBRyxDQUFpQyxHQUFHQyxLQUFLLENBQUNHLE1BQU0sQ0FDaEVDLE9BQTZCLElBQzVCQSxPQUFPLENBQUNULFdBQVcsS0FBS2xDLFdBQVcsQ0FBQzRDLEdBQUcsSUFDdkNSLG1CQUFtQixDQUFDUyxRQUFRLENBQUNGLE9BQU8sQ0FBQ1QsV0FBVyxDQUFDLENBQ3BEO0lBQ0g7RUFDRjtFQUVBLElBQUlMLGVBQWUsR0FBRzVDLGVBQWUsQ0FBQzZELGdCQUFnQixFQUFFO0lBQ3RELEtBQUssTUFBTUgsT0FBTyxJQUFJWCxlQUFlLENBQUNlLGdCQUFnQixFQUFFO01BQ3RELE1BQU1DLCtCQUF1QyxHQUFHbEUsSUFBSSxDQUFDbUUsSUFBSSxDQUN2RG5DLE9BQU8sRUFDUDZCLE9BQU8sQ0FBQ08sUUFBUSxDQUNqQjtNQUNELElBQUksQ0FBQ3JDLE9BQU8sQ0FBQ3NDLE1BQU0sRUFBRTtRQUNuQkMsT0FBTyxDQUFDQyxHQUFHLENBQUUsZ0JBQWVMLCtCQUFnQyxFQUFDLENBQUM7TUFDaEU7TUFFQSxNQUFNckIsV0FBVyxHQUFHN0MsSUFBSSxDQUFDd0UsUUFBUSxDQUMvQk4sK0JBQStCLEVBQy9CLE9BQU8sQ0FDUjtNQUNELElBQUk3QixXQUFXLEtBQUtJLFNBQVMsRUFBRTtRQUM3QjVDLFFBQVEsQ0FBRSxhQUFZd0MsV0FBWSxJQUFHUSxXQUFZLE1BQUssRUFBRTtVQUN0RDRCLEdBQUcsRUFBRXpDLE9BQU87VUFDWjBDLEdBQUcsRUFBRUMsT0FBTyxDQUFDRCxHQUFHO1VBQ2hCRSxRQUFRLEVBQUUsT0FBTztVQUNqQkMsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNO1FBQ3BDLENBQUMsQ0FBQztNQUNKO01BQ0EsTUFBTUMscUJBQXFCLEdBQUc5RSxJQUFJLENBQUNtRSxJQUFJLENBQUNuQyxPQUFPLEVBQUVhLFdBQVcsQ0FBQztNQUM3RCxJQUFJZCxPQUFPLENBQUNnRCxJQUFJLEVBQUU7UUFDaEJsRixRQUFRLENBQUUsbUJBQWtCLEVBQUU7VUFDNUI0RSxHQUFHLEVBQUVLLHFCQUFxQjtVQUMxQkosR0FBRyxFQUFFQyxPQUFPLENBQUNELEdBQUc7VUFDaEJFLFFBQVEsRUFBRSxPQUFPO1VBQ2pCQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU07UUFDcEMsQ0FBQyxDQUFDO01BQ0o7TUFFQTlFLEVBQUUsQ0FBQ2lGLGFBQWEsQ0FBQ0YscUJBQXFCLENBQUM7TUFDdkMsS0FBSyxNQUFNVixRQUFRLElBQUlyRSxFQUFFLENBQUNrRixXQUFXLENBQUNILHFCQUFxQixDQUFDLEVBQUU7UUFDNUQsSUFBSVYsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtVQUN2QjtRQUNGO1FBQ0FyRSxFQUFFLENBQUNtRixVQUFVLENBQUNsRixJQUFJLENBQUNtRSxJQUFJLENBQUNXLHFCQUFxQixFQUFFVixRQUFRLENBQUMsQ0FBQztNQUMzRDtNQUNBLE1BQU1lLHFCQUFxQixHQUFHbkYsSUFBSSxDQUFDbUUsSUFBSSxDQUFDVyxxQkFBcUIsRUFBRSxTQUFTLENBQUM7TUFDekUvRSxFQUFFLENBQUNxRixTQUFTLENBQUNELHFCQUFxQixDQUFDO01BQ25DLE1BQU1FLHFCQUFxQixHQUFHckYsSUFBSSxDQUFDbUUsSUFBSSxDQUFDVyxxQkFBcUIsRUFBRSxTQUFTLENBQUM7TUFDekUvRSxFQUFFLENBQUNxRixTQUFTLENBQUNDLHFCQUFxQixDQUFDO01BRW5DLFFBQVF4QixPQUFPLENBQUN5QixTQUFTO1FBQ3ZCLEtBQUtwRixnQkFBZ0IsQ0FBQ3FGLFVBQVU7VUFDOUI7WUFDRSxNQUFNQyxZQUFvQixHQUFHekYsRUFBRSxDQUFDMEYsWUFBWSxDQUMxQ3ZCLCtCQUErQixFQUMvQjtjQUNFVSxRQUFRLEVBQUU7WUFDWixDQUFDLENBQ0Y7WUFDRCxNQUFNYyxZQUFpQixHQUFHaEQsZUFBZSxHQUNyQzdCLDBCQUEwQixDQUFDOEUsa0JBQWtCLENBQUNILFlBQVksQ0FBQyxHQUMzREksSUFBSSxDQUFDQyxLQUFLLENBQUNMLFlBQVksQ0FBQztZQUU1QixLQUFLLE1BQU1NLE1BQU0sSUFBSUosWUFBWSxDQUFDSyxNQUFNLENBQUNDLE9BQU8sQ0FBQ0YsTUFBTSxFQUFFO2NBQ3ZELE1BQU1HLHVCQUErQixHQUFHakcsSUFBSSxDQUFDbUUsSUFBSSxDQUMvQ2dCLHFCQUFxQixFQUNyQlcsTUFBTSxDQUFDSSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUM5QjtjQUNEbkcsRUFBRSxDQUFDb0csYUFBYSxDQUNkRix1QkFBdUIsRUFDdkJMLElBQUksQ0FBQ1EsU0FBUyxDQUFDTixNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUMvQjtnQkFDRWxCLFFBQVEsRUFBRTtjQUNaLENBQUMsQ0FDRjtZQUNIO1lBRUEsS0FBSyxNQUFNeUIsTUFBTSxJQUFJWCxZQUFZLENBQUNLLE1BQU0sQ0FBQ08sT0FBTyxDQUFDRCxNQUFNLEVBQUU7Y0FDdkQsTUFBTUosdUJBQStCLEdBQUdqRyxJQUFJLENBQUNtRSxJQUFJLENBQy9Da0IscUJBQXFCLEVBQ3JCZ0IsTUFBTSxDQUFDSCxHQUFHLEdBQUcsT0FBTyxDQUNyQjtjQUNEbkcsRUFBRSxDQUFDb0csYUFBYSxDQUNkRix1QkFBdUIsRUFDdkJMLElBQUksQ0FBQ1EsU0FBUyxDQUFDQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUMvQjtnQkFDRXpCLFFBQVEsRUFBRTtjQUNaLENBQUMsQ0FDRjtZQUNIO1VBQ0Y7VUFDQTtRQUNGLEtBQUsxRSxnQkFBZ0IsQ0FBQ3FHLGNBQWM7VUFDbEM7WUFDRSxNQUFNQyxrQkFFTCxHQUFHLENBQUMsQ0FBQztZQUNOLElBQ0V6RyxFQUFFLENBQUMwRyxVQUFVLENBQ1h6RyxJQUFJLENBQUNtRSxJQUFJLENBQUNELCtCQUErQixFQUFFLFFBQVEsQ0FBQyxDQUNyRCxFQUNEO2NBQ0EsS0FBSyxNQUFNd0MsZUFBZSxJQUFJbkcsT0FBTyxDQUNuQzJELCtCQUErQixFQUMvQixDQUFDLFFBQVEsQ0FBQyxDQUNYLEVBQUU7Z0JBQ0QsTUFBTXlDLGNBQWMsR0FDbEJELGVBQWUsQ0FBQ0EsZUFBZSxDQUFDRSxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLENBQUNELGNBQWMsQ0FBQ0UsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2tCQUNyQztnQkFDRjtnQkFDQSxNQUFNQyxzQkFBc0IsR0FBRzlHLElBQUksQ0FBQ21FLElBQUksQ0FDdENELCtCQUErQixFQUMvQixHQUFHd0MsZUFBZSxDQUNuQjtnQkFDRCxJQUFJM0UsT0FBTyxDQUFDZ0YsT0FBTyxFQUFFO2tCQUNuQnpDLE9BQU8sQ0FBQ0MsR0FBRyxDQUNSLDRCQUEyQnVDLHNCQUF1QixHQUFFLENBQ3REO2dCQUNIO2dCQUNBLE1BQU1FLGtCQUEwQixHQUFHakgsRUFBRSxDQUFDMEYsWUFBWSxDQUNoRHFCLHNCQUFzQixFQUN0QjtrQkFDRWxDLFFBQVEsRUFBRTtnQkFDWixDQUFDLENBQ0Y7Z0JBQ0QsTUFBTXFDLGNBQW1CLEdBQUd2RSxlQUFlLEdBQ3ZDN0IsMEJBQTBCLENBQUNxRyxRQUFRLENBQUNGLGtCQUFrQixDQUFDLEdBQ3ZEcEIsSUFBSSxDQUFDQyxLQUFLLENBQUNtQixrQkFBa0IsQ0FBQztnQkFDbEMsTUFBTUcsTUFBTSxHQUFHRixjQUFjLENBQUNFLE1BQU07Z0JBQ3BDLElBQUlDLE9BQU8sR0FBR1osa0JBQWtCLENBQUNXLE1BQU0sQ0FBQ0UsU0FBUyxDQUFDO2dCQUNsRCxJQUFJRCxPQUFPLEtBQUszRSxTQUFTLEVBQUU7a0JBQ3pCMkUsT0FBTyxHQUFHWixrQkFBa0IsQ0FBQ1csTUFBTSxDQUFDRSxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNyRDtnQkFDQUQsT0FBTyxDQUFDRSxJQUFJLENBQUNILE1BQU0sQ0FBQztjQUN0QjtjQUVBLEtBQUssTUFBTUMsT0FBTyxJQUFJMUQsTUFBTSxDQUFDNkQsTUFBTSxDQUFDZixrQkFBa0IsQ0FBQyxFQUFFO2dCQUN2RFksT0FBTyxDQUFDSSxJQUFJLENBQUMsQ0FBQ0MsQ0FBQyxFQUFFQyxDQUFDLEtBQ2hCRCxDQUFDLENBQUN2QixHQUFHLENBQUNVLE1BQU0sS0FBS2MsQ0FBQyxDQUFDeEIsR0FBRyxDQUFDVSxNQUFNLEdBQ3pCYSxDQUFDLENBQUN2QixHQUFHLENBQUN5QixhQUFhLENBQUNELENBQUMsQ0FBQ3hCLEdBQUcsQ0FBQyxHQUMxQnVCLENBQUMsQ0FBQ3ZCLEdBQUcsQ0FBQ1UsTUFBTSxHQUFHYyxDQUFDLENBQUN4QixHQUFHLENBQUNVLE1BQU0sQ0FDaEM7Y0FDSDtZQUNGO1lBRUEsTUFBTWdCLGtCQUVMLEdBQUcsQ0FBQyxDQUFDO1lBQ04sSUFDRTdILEVBQUUsQ0FBQzBHLFVBQVUsQ0FDWHpHLElBQUksQ0FBQ21FLElBQUksQ0FBQ0QsK0JBQStCLEVBQUUsUUFBUSxDQUFDLENBQ3JELEVBQ0Q7Y0FDQSxLQUFLLE1BQU0yRCxlQUFlLElBQUl0SCxPQUFPLENBQ25DMkQsK0JBQStCLEVBQy9CLENBQUMsUUFBUSxDQUFDLENBQ1gsRUFBRTtnQkFDRCxNQUFNNEQsY0FBYyxHQUNsQkQsZUFBZSxDQUFDQSxlQUFlLENBQUNqQixNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLENBQUNrQixjQUFjLENBQUNqQixRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7a0JBQ3JDO2dCQUNGO2dCQUNBLE1BQU1rQixzQkFBc0IsR0FBRy9ILElBQUksQ0FBQ21FLElBQUksQ0FDdENELCtCQUErQixFQUMvQixHQUFHMkQsZUFBZSxDQUNuQjtnQkFDRCxJQUFJOUYsT0FBTyxDQUFDZ0YsT0FBTyxFQUFFO2tCQUNuQnpDLE9BQU8sQ0FBQ0MsR0FBRyxDQUNSLDRCQUEyQndELHNCQUF1QixHQUFFLENBQ3REO2dCQUNIO2dCQUNBLE1BQU1DLGtCQUEwQixHQUFHakksRUFBRSxDQUFDMEYsWUFBWSxDQUNoRHNDLHNCQUFzQixFQUN0QjtrQkFDRW5ELFFBQVEsRUFBRTtnQkFDWixDQUFDLENBQ0Y7Z0JBQ0QsTUFBTXFELGNBQW1CLEdBQUd2RixlQUFlLEdBQ3ZDN0IsMEJBQTBCLENBQUNxSCxlQUFlLENBQ3hDRixrQkFBa0IsQ0FDbkIsR0FDRHBDLElBQUksQ0FBQ0MsS0FBSyxDQUFDbUMsa0JBQWtCLENBQUM7Z0JBQ2xDLE1BQU1HLE1BQU0sR0FBR0YsY0FBYyxDQUFDRSxNQUFNO2dCQUNwQyxJQUFJQyxPQUFPLEdBQUdSLGtCQUFrQixDQUFDTyxNQUFNLENBQUNkLFNBQVMsQ0FBQztnQkFDbEQsSUFBSWUsT0FBTyxLQUFLM0YsU0FBUyxFQUFFO2tCQUN6QjJGLE9BQU8sR0FBR1Isa0JBQWtCLENBQUNPLE1BQU0sQ0FBQ2QsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDckQ7Z0JBQ0FlLE9BQU8sQ0FBQ2QsSUFBSSxDQUFDYSxNQUFNLENBQUM7Y0FDdEI7Y0FFQSxLQUFLLE1BQU1DLE9BQU8sSUFBSTFFLE1BQU0sQ0FBQzZELE1BQU0sQ0FBQ0ssa0JBQWtCLENBQUMsRUFBRTtnQkFDdkRRLE9BQU8sQ0FBQ1osSUFBSSxDQUFDLENBQUNDLENBQUMsRUFBRUMsQ0FBQyxLQUNoQkQsQ0FBQyxDQUFDdkIsR0FBRyxDQUFDVSxNQUFNLEtBQUtjLENBQUMsQ0FBQ3hCLEdBQUcsQ0FBQ1UsTUFBTSxHQUN6QmEsQ0FBQyxDQUFDdkIsR0FBRyxDQUFDeUIsYUFBYSxDQUFDRCxDQUFDLENBQUN4QixHQUFHLENBQUMsR0FDMUJ1QixDQUFDLENBQUN2QixHQUFHLENBQUNVLE1BQU0sR0FBR2MsQ0FBQyxDQUFDeEIsR0FBRyxDQUFDVSxNQUFNLENBQ2hDO2NBQ0g7WUFDRjtZQUVBLEtBQUssTUFBTXlCLGVBQWUsSUFBSTlILE9BQU8sQ0FDbkMyRCwrQkFBK0IsRUFDL0IsQ0FBQyxRQUFRLENBQUMsQ0FDWCxFQUFFO2NBQ0QsTUFBTW9FLGNBQWMsR0FBR0QsZUFBZSxDQUFDQSxlQUFlLENBQUN6QixNQUFNLEdBQUcsQ0FBQyxDQUFDO2NBQ2xFLElBQUksQ0FBQzBCLGNBQWMsQ0FBQ3pCLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDckM7Y0FDRjtjQUNBLE1BQU0wQixzQkFBc0IsR0FBR3ZJLElBQUksQ0FBQ21FLElBQUksQ0FDdENELCtCQUErQixFQUMvQixHQUFHbUUsZUFBZSxDQUNuQjtjQUNELElBQUl0RyxPQUFPLENBQUNnRixPQUFPLEVBQUU7Z0JBQ25CekMsT0FBTyxDQUFDQyxHQUFHLENBQ1IsaUNBQWdDZ0Usc0JBQXVCLEdBQUUsQ0FDM0Q7Y0FDSDtjQUNBLE1BQU1DLGtCQUEwQixHQUFHekksRUFBRSxDQUFDMEYsWUFBWSxDQUNoRDhDLHNCQUFzQixFQUN0QjtnQkFDRTNELFFBQVEsRUFBRTtjQUNaLENBQUMsQ0FDRjtjQUNELE1BQU02RCxjQUFtQixHQUFHL0YsZUFBZSxHQUN2QzdCLDBCQUEwQixDQUFDNkgsUUFBUSxDQUFDRixrQkFBa0IsQ0FBQyxHQUN2RDVDLElBQUksQ0FBQ0MsS0FBSyxDQUFDMkMsa0JBQWtCLENBQUM7Y0FDbEMsTUFBTTFDLE1BQU0sR0FBRzJDLGNBQWMsQ0FBQzNDLE1BQU07Y0FDcEMsTUFBTTZDLFNBQVMsR0FBRzdDLE1BQU0sQ0FBQ0ksR0FBRyxDQUFDLE9BQU8sQ0FBQztjQUNyQyxNQUFNa0IsT0FBTyxHQUFHWixrQkFBa0IsQ0FBQ21DLFNBQVMsQ0FBQztjQUM3QyxJQUFJdkIsT0FBTyxLQUFLM0UsU0FBUyxFQUFFO2dCQUN6QjdDLE1BQU0sQ0FBQ2dKLFdBQVcsQ0FBQzlDLE1BQU0sQ0FBQ3NCLE9BQU8sRUFBRTNFLFNBQVMsQ0FBQztnQkFDN0NxRCxNQUFNLENBQUNzQixPQUFPLEdBQUc7a0JBQUVELE1BQU0sRUFBRUM7Z0JBQVEsQ0FBQztjQUN0QztjQUNBLE1BQU1nQixPQUFPLEdBQUdSLGtCQUFrQixDQUFDZSxTQUFTLENBQUM7Y0FDN0MsSUFBSVAsT0FBTyxLQUFLM0YsU0FBUyxFQUFFO2dCQUN6QjdDLE1BQU0sQ0FBQ2dKLFdBQVcsQ0FBQzlDLE1BQU0sQ0FBQ3NDLE9BQU8sRUFBRTNGLFNBQVMsQ0FBQztnQkFDN0NxRCxNQUFNLENBQUNzQyxPQUFPLEdBQUc7a0JBQUVELE1BQU0sRUFBRUM7Z0JBQVEsQ0FBQztjQUN0QztjQUNBLE1BQU1TLDZCQUFxQyxHQUFHN0ksSUFBSSxDQUFDbUUsSUFBSSxDQUNyRGdCLHFCQUFxQixFQUNyQndELFNBQVMsR0FBRyxPQUFPLENBQ3BCO2NBQ0Q1SSxFQUFFLENBQUNvRyxhQUFhLENBQ2QwQyw2QkFBNkIsRUFDN0JqRCxJQUFJLENBQUNRLFNBQVMsQ0FBQ04sTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFDL0I7Z0JBQ0VsQixRQUFRLEVBQUU7Y0FDWixDQUFDLENBQ0Y7WUFDSDtZQUVBLEtBQUssTUFBTWtFLGVBQWUsSUFBSXZJLE9BQU8sQ0FDbkMyRCwrQkFBK0IsRUFDL0IsQ0FBQyxRQUFRLENBQUMsQ0FDWCxFQUFFO2NBQ0QsTUFBTTZFLGNBQWMsR0FBR0QsZUFBZSxDQUFDQSxlQUFlLENBQUNsQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2NBQ2xFLElBQUksQ0FBQ21DLGNBQWMsQ0FBQ2xDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDckM7Y0FDRjtjQUNBLE1BQU1tQyxzQkFBc0IsR0FBR2hKLElBQUksQ0FBQ21FLElBQUksQ0FDdENELCtCQUErQixFQUMvQixHQUFHNEUsZUFBZSxDQUNuQjtjQUNELElBQUkvRyxPQUFPLENBQUNnRixPQUFPLEVBQUU7Z0JBQ25CekMsT0FBTyxDQUFDQyxHQUFHLENBQ1IsaUNBQWdDeUUsc0JBQXVCLEdBQUUsQ0FDM0Q7Y0FDSDtjQUNBLE1BQU1DLGtCQUEwQixHQUFHbEosRUFBRSxDQUFDMEYsWUFBWSxDQUNoRHVELHNCQUFzQixFQUN0QjtnQkFDRXBFLFFBQVEsRUFBRTtjQUNaLENBQUMsQ0FDRjtjQUNELE1BQU1zRSxjQUFtQixHQUFHeEcsZUFBZSxHQUN2QzdCLDBCQUEwQixDQUFDc0ksUUFBUSxDQUFDRixrQkFBa0IsQ0FBQyxHQUN2RHJELElBQUksQ0FBQ0MsS0FBSyxDQUFDb0Qsa0JBQWtCLENBQUM7Y0FDbEMsTUFBTTVDLE1BQU0sR0FBRzZDLGNBQWMsQ0FBQzdDLE1BQU07Y0FDcEMsTUFBTStDLDZCQUFxQyxHQUFHcEosSUFBSSxDQUFDbUUsSUFBSSxDQUNyRGtCLHFCQUFxQixFQUNyQmdCLE1BQU0sQ0FBQ0gsR0FBRyxHQUFHLE9BQU8sQ0FDckI7Y0FDRG5HLEVBQUUsQ0FBQ29HLGFBQWEsQ0FDZGlELDZCQUE2QixFQUM3QnhELElBQUksQ0FBQ1EsU0FBUyxDQUFDQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUMvQjtnQkFDRXpCLFFBQVEsRUFBRTtjQUNaLENBQUMsQ0FDRjtZQUNIO1VBQ0Y7VUFDQTtNQUFLO01BR1QsSUFBSTdDLE9BQU8sQ0FBQ3NILE1BQU0sRUFBRTtRQUNsQixNQUFNQyxTQUFTLEdBQUdoSixHQUFHLENBQUNpSixhQUFhLENBQ2pDekUscUJBQXFCLEVBQ3JCLGtCQUFrQixFQUNsQi9DLE9BQU8sQ0FBQ3lILE1BQU0sQ0FDZjtRQUNELElBQUlGLFNBQVMsS0FBSyxDQUFDLElBQUlsSCxRQUFRLEtBQUssQ0FBQyxFQUFFO1VBQ3JDQSxRQUFRLEdBQUdrSCxTQUFTO1FBQ3RCO01BQ0Y7SUFDRjtFQUNGO0VBRUEsSUFBSXZHLGVBQWUsR0FBRzVDLGVBQWUsQ0FBQ3NKLE9BQU8sRUFBRTtJQUM3QyxLQUFLLE1BQU01RixPQUFPLElBQUlYLGVBQWUsQ0FBQ3dHLE9BQU8sRUFBRTtNQUM3QyxNQUFNeEYsK0JBQXVDLEdBQUdsRSxJQUFJLENBQUNtRSxJQUFJLENBQ3ZEbkMsT0FBTyxFQUNQNkIsT0FBTyxDQUFDTyxRQUFRLENBQ2pCO01BQ0QsSUFBSSxDQUFDckMsT0FBTyxDQUFDc0MsTUFBTSxFQUFFO1FBQ25CQyxPQUFPLENBQUNDLEdBQUcsQ0FBRSxnQkFBZUwsK0JBQWdDLEVBQUMsQ0FBQztNQUNoRTtNQUVBLE1BQU1yQixXQUFXLEdBQUc3QyxJQUFJLENBQUN3RSxRQUFRLENBQy9CTiwrQkFBK0IsRUFDL0IsT0FBTyxDQUNSO01BQ0QsSUFBSTdCLFdBQVcsS0FBS0ksU0FBUyxFQUFFO1FBQzdCNUMsUUFBUSxDQUFFLGFBQVl3QyxXQUFZLElBQUdRLFdBQVksTUFBSyxFQUFFO1VBQ3RENEIsR0FBRyxFQUFFekMsT0FBTztVQUNaMEMsR0FBRyxFQUFFQyxPQUFPLENBQUNELEdBQUc7VUFDaEJFLFFBQVEsRUFBRSxPQUFPO1VBQ2pCQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU07UUFDcEMsQ0FBQyxDQUFDO01BQ0o7TUFFQSxNQUFNQyxxQkFBcUIsR0FBRzlFLElBQUksQ0FBQ21FLElBQUksQ0FBQ25DLE9BQU8sRUFBRWEsV0FBVyxDQUFDO01BQzdEOUMsRUFBRSxDQUFDaUYsYUFBYSxDQUFDRixxQkFBcUIsQ0FBQztNQUN2QyxLQUFLLE1BQU1WLFFBQVEsSUFBSXJFLEVBQUUsQ0FBQ2tGLFdBQVcsQ0FBQ0gscUJBQXFCLENBQUMsRUFBRTtRQUM1RCxJQUFJVixRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO1VBQ3ZCO1FBQ0Y7UUFDQXJFLEVBQUUsQ0FBQ21GLFVBQVUsQ0FBQ2xGLElBQUksQ0FBQ21FLElBQUksQ0FBQ1cscUJBQXFCLEVBQUVWLFFBQVEsQ0FBQyxDQUFDO01BQzNEO01BRUEsUUFBUVAsT0FBTyxDQUFDeUIsU0FBUztRQUN2QixLQUFLcEYsZ0JBQWdCLENBQUNxRixVQUFVO1VBQzlCO1lBQ0UsTUFBTUMsWUFBb0IsR0FBR3pGLEVBQUUsQ0FBQzBGLFlBQVksQ0FDMUN2QiwrQkFBK0IsRUFDL0I7Y0FDRVUsUUFBUSxFQUFFO1lBQ1osQ0FBQyxDQUNGO1lBQ0QsTUFBTWMsWUFBaUIsR0FBR2hELGVBQWUsR0FDckM1QixpQkFBaUIsQ0FBQzZJLFNBQVMsQ0FBQ25FLFlBQVksQ0FBQyxHQUN6Q0ksSUFBSSxDQUFDQyxLQUFLLENBQUNMLFlBQVksQ0FBQztZQUU1QixLQUFLLE1BQU1vRSxPQUFPLElBQUlsRSxZQUFZLENBQUNtRSxRQUFRLENBQUNELE9BQU8sRUFBRTtjQUNuREUsMkJBQTJCLENBQUNoRixxQkFBcUIsRUFBRThFLE9BQU8sQ0FBQztZQUM3RDtVQUNGO1VBQ0E7UUFDRixLQUFLMUosZ0JBQWdCLENBQUNxRyxjQUFjO1VBQ2xDO1lBQ0UsS0FBSyxNQUFNd0QsZ0JBQWdCLElBQUl4SixPQUFPLENBQ3BDMkQsK0JBQStCLEVBQy9CLENBQUMsU0FBUyxDQUFDLENBQ1osRUFBRTtjQUNELE1BQU04RixlQUFlLEdBQ25CRCxnQkFBZ0IsQ0FBQ0EsZ0JBQWdCLENBQUNuRCxNQUFNLEdBQUcsQ0FBQyxDQUFDO2NBQy9DLElBQUksQ0FBQ29ELGVBQWUsQ0FBQ25ELFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDdEM7Y0FDRjtjQUNBLE1BQU1vRCx1QkFBdUIsR0FBR2pLLElBQUksQ0FBQ21FLElBQUksQ0FDdkNELCtCQUErQixFQUMvQixHQUFHNkYsZ0JBQWdCLENBQ3BCO2NBQ0QsSUFBSWhJLE9BQU8sQ0FBQ2dGLE9BQU8sRUFBRTtnQkFDbkJ6QyxPQUFPLENBQUNDLEdBQUcsQ0FDUixrQ0FBaUMwRix1QkFBd0IsR0FBRSxDQUM3RDtjQUNIO2NBQ0EsTUFBTUMsbUJBQTJCLEdBQUduSyxFQUFFLENBQUMwRixZQUFZLENBQ2pEd0UsdUJBQXVCLEVBQ3ZCO2dCQUNFckYsUUFBUSxFQUFFO2NBQ1osQ0FBQyxDQUNGO2NBQ0QsTUFBTXVGLGVBQW9CLEdBQUd6SCxlQUFlLEdBQ3hDNUIsaUJBQWlCLENBQUNzSixTQUFTLENBQUNGLG1CQUFtQixDQUFDLEdBQ2hEdEUsSUFBSSxDQUFDQyxLQUFLLENBQUNxRSxtQkFBbUIsQ0FBQztjQUNuQyxNQUFNTixPQUFPLEdBQUdPLGVBQWUsQ0FBQ1AsT0FBTztjQUN2Q0UsMkJBQTJCLENBQUNoRixxQkFBcUIsRUFBRThFLE9BQU8sQ0FBQztZQUM3RDtVQUNGO1VBQ0E7TUFBSztNQUdULElBQUk3SCxPQUFPLENBQUNzSCxNQUFNLEVBQUU7UUFDbEIsTUFBTUMsU0FBUyxHQUFHaEosR0FBRyxDQUFDaUosYUFBYSxDQUNqQ3pFLHFCQUFxQixFQUNyQixrQkFBa0IsRUFDbEIvQyxPQUFPLENBQUN5SCxNQUFNLENBQ2Y7UUFDRCxJQUFJRixTQUFTLEtBQUssQ0FBQyxJQUFJbEgsUUFBUSxLQUFLLENBQUMsRUFBRTtVQUNyQ0EsUUFBUSxHQUFHa0gsU0FBUztRQUN0QjtNQUNGO0lBQ0Y7RUFDRjtFQUVBLElBQUl2RyxlQUFlLEdBQUc1QyxlQUFlLENBQUNrSyxXQUFXLEVBQUU7SUFDakQsS0FBSyxNQUFNeEcsT0FBTyxJQUFJWCxlQUFlLENBQUNvSCxXQUFXLEVBQUU7TUFDakQsTUFBTXBHLCtCQUF1QyxHQUFHbEUsSUFBSSxDQUFDbUUsSUFBSSxDQUN2RG5DLE9BQU8sRUFDUDZCLE9BQU8sQ0FBQ08sUUFBUSxDQUNqQjtNQUNELElBQUksQ0FBQ3JDLE9BQU8sQ0FBQ3NDLE1BQU0sRUFBRTtRQUNuQkMsT0FBTyxDQUFDQyxHQUFHLENBQUUsZ0JBQWVMLCtCQUFnQyxFQUFDLENBQUM7TUFDaEU7TUFFQSxNQUFNckIsV0FBVyxHQUFHN0MsSUFBSSxDQUFDd0UsUUFBUSxDQUMvQk4sK0JBQStCLEVBQy9CLE9BQU8sQ0FDUjtNQUNELElBQUk3QixXQUFXLEtBQUtJLFNBQVMsRUFBRTtRQUM3QjVDLFFBQVEsQ0FBRSxhQUFZd0MsV0FBWSxJQUFHUSxXQUFZLE1BQUssRUFBRTtVQUN0RDRCLEdBQUcsRUFBRXpDLE9BQU87VUFDWjBDLEdBQUcsRUFBRUMsT0FBTyxDQUFDRCxHQUFHO1VBQ2hCRSxRQUFRLEVBQUUsT0FBTztVQUNqQkMsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNO1FBQ3BDLENBQUMsQ0FBQztNQUNKO01BRUEsTUFBTUMscUJBQXFCLEdBQUc5RSxJQUFJLENBQUNtRSxJQUFJLENBQUNuQyxPQUFPLEVBQUVhLFdBQVcsQ0FBQztNQUM3RDlDLEVBQUUsQ0FBQ2lGLGFBQWEsQ0FBQ0YscUJBQXFCLENBQUM7TUFDdkMsS0FBSyxNQUFNVixRQUFRLElBQUlyRSxFQUFFLENBQUNrRixXQUFXLENBQUNILHFCQUFxQixDQUFDLEVBQUU7UUFDNUQsSUFBSVYsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtVQUN2QjtRQUNGO1FBQ0FyRSxFQUFFLENBQUNtRixVQUFVLENBQUNsRixJQUFJLENBQUNtRSxJQUFJLENBQUNXLHFCQUFxQixFQUFFVixRQUFRLENBQUMsQ0FBQztNQUMzRDtNQUVBLFFBQVFQLE9BQU8sQ0FBQ3lCLFNBQVM7UUFDdkIsS0FBS3BGLGdCQUFnQixDQUFDcUYsVUFBVTtVQUM5QjtZQUNFLE1BQU1DLFlBQW9CLEdBQUd6RixFQUFFLENBQUMwRixZQUFZLENBQzFDdkIsK0JBQStCLEVBQy9CO2NBQ0VVLFFBQVEsRUFBRTtZQUNaLENBQUMsQ0FDRjtZQUNELE1BQU1jLFlBQWlCLEdBQUdoRCxlQUFlLEdBQ3JDM0IscUJBQXFCLENBQUN3SixhQUFhLENBQUMvRSxZQUFZLENBQUMsR0FDakRJLElBQUksQ0FBQ0MsS0FBSyxDQUFDTCxZQUFZLENBQUM7WUFFNUIsS0FBSyxNQUFNZ0YsZUFBZSxJQUFJOUUsWUFBWSxDQUFDK0UsbUJBQW1CLENBQzNEQyxRQUFRLEVBQUU7Y0FDWCxLQUFLLE1BQU1DLFVBQVUsSUFBSUgsZUFBZSxDQUFDRixXQUFXLEVBQUU7Z0JBQ3BETSw4QkFBOEIsQ0FDNUI5RixxQkFBcUIsRUFDckI2RixVQUFVLENBQ1g7Y0FDSDtZQUNGO1VBQ0Y7VUFDQTtRQUNGLEtBQUt6SyxnQkFBZ0IsQ0FBQ3FHLGNBQWM7VUFDbEM7WUFDRSxLQUFLLE1BQU1zRSxtQkFBbUIsSUFBSXRLLE9BQU8sQ0FDdkMyRCwrQkFBK0IsQ0FDaEMsRUFBRTtjQUNELE1BQU00RyxrQkFBa0IsR0FDdEJELG1CQUFtQixDQUFDQSxtQkFBbUIsQ0FBQ2pFLE1BQU0sR0FBRyxDQUFDLENBQUM7Y0FDckQsSUFBSSxDQUFDa0Usa0JBQWtCLENBQUNqRSxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3pDO2NBQ0Y7Y0FDQSxNQUFNa0UsMEJBQTBCLEdBQUcvSyxJQUFJLENBQUNtRSxJQUFJLENBQzFDRCwrQkFBK0IsRUFDL0IsR0FBRzJHLG1CQUFtQixDQUN2QjtjQUNELElBQUk5SSxPQUFPLENBQUNnRixPQUFPLEVBQUU7Z0JBQ25CekMsT0FBTyxDQUFDQyxHQUFHLENBQ1IscUNBQW9Dd0csMEJBQTJCLEdBQUUsQ0FDbkU7Y0FDSDtjQUNBLE1BQU1DLHNCQUE4QixHQUFHakwsRUFBRSxDQUFDMEYsWUFBWSxDQUNwRHNGLDBCQUEwQixFQUMxQjtnQkFDRW5HLFFBQVEsRUFBRTtjQUNaLENBQUMsQ0FDRjtjQUNELE1BQU1xRyxrQkFBdUIsR0FBR3ZJLGVBQWUsR0FDM0MzQixxQkFBcUIsQ0FBQ21LLG1CQUFtQixDQUN2Q0Ysc0JBQXNCLENBQ3ZCLEdBQ0RwRixJQUFJLENBQUNDLEtBQUssQ0FBQ21GLHNCQUFzQixDQUFDO2NBQ3RDLE1BQU1MLFVBQVUsR0FBR00sa0JBQWtCLENBQUNOLFVBQVU7Y0FDaERDLDhCQUE4QixDQUFDOUYscUJBQXFCLEVBQUU2RixVQUFVLENBQUM7WUFDbkU7VUFDRjtVQUNBO01BQUs7TUFHVCxJQUFJNUksT0FBTyxDQUFDc0gsTUFBTSxFQUFFO1FBQ2xCLE1BQU1DLFNBQVMsR0FBR2hKLEdBQUcsQ0FBQ2lKLGFBQWEsQ0FDakN6RSxxQkFBcUIsRUFDckIsa0JBQWtCLEVBQ2xCL0MsT0FBTyxDQUFDeUgsTUFBTSxDQUNmO1FBQ0QsSUFBSUYsU0FBUyxLQUFLLENBQUMsSUFBSWxILFFBQVEsS0FBSyxDQUFDLEVBQUU7VUFDckNBLFFBQVEsR0FBR2tILFNBQVM7UUFDdEI7TUFDRjtJQUNGO0VBQ0Y7RUFFQSxJQUFJdkcsZUFBZSxHQUFHNUMsZUFBZSxDQUFDZ0wsbUJBQW1CLEVBQUU7SUFDekQsS0FBSyxNQUFNdEgsT0FBTyxJQUFJWCxlQUFlLENBQUNrSSxtQkFBbUIsRUFBRTtNQUN6RCxNQUFNbEgsK0JBQXVDLEdBQUdsRSxJQUFJLENBQUNtRSxJQUFJLENBQ3ZEbkMsT0FBTyxFQUNQNkIsT0FBTyxDQUFDTyxRQUFRLENBQ2pCO01BQ0QsSUFBSSxDQUFDckMsT0FBTyxDQUFDc0MsTUFBTSxFQUFFO1FBQ25CQyxPQUFPLENBQUNDLEdBQUcsQ0FBRSxnQkFBZUwsK0JBQWdDLEVBQUMsQ0FBQztNQUNoRTtNQUVBLE1BQU1yQixXQUFXLEdBQUc3QyxJQUFJLENBQUN3RSxRQUFRLENBQy9CTiwrQkFBK0IsRUFDL0IsT0FBTyxDQUNSO01BQ0QsSUFBSTdCLFdBQVcsS0FBS0ksU0FBUyxFQUFFO1FBQzdCNUMsUUFBUSxDQUFFLGFBQVl3QyxXQUFZLElBQUdRLFdBQVksTUFBSyxFQUFFO1VBQ3RENEIsR0FBRyxFQUFFekMsT0FBTztVQUNaMEMsR0FBRyxFQUFFQyxPQUFPLENBQUNELEdBQUc7VUFDaEJFLFFBQVEsRUFBRSxPQUFPO1VBQ2pCQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU07UUFDcEMsQ0FBQyxDQUFDO01BQ0o7TUFFQSxNQUFNQyxxQkFBcUIsR0FBRzlFLElBQUksQ0FBQ21FLElBQUksQ0FBQ25DLE9BQU8sRUFBRWEsV0FBVyxDQUFDO01BQzdEOUMsRUFBRSxDQUFDaUYsYUFBYSxDQUFDRixxQkFBcUIsQ0FBQztNQUN2QyxLQUFLLE1BQU1WLFFBQVEsSUFBSXJFLEVBQUUsQ0FBQ2tGLFdBQVcsQ0FBQ0gscUJBQXFCLENBQUMsRUFBRTtRQUM1RCxJQUFJVixRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO1VBQ3ZCO1FBQ0Y7UUFDQXJFLEVBQUUsQ0FBQ21GLFVBQVUsQ0FBQ2xGLElBQUksQ0FBQ21FLElBQUksQ0FBQ1cscUJBQXFCLEVBQUVWLFFBQVEsQ0FBQyxDQUFDO01BQzNEO01BQ0EsTUFBTWlILFlBQVksR0FBR3JMLElBQUksQ0FBQ21FLElBQUksQ0FBQ1cscUJBQXFCLEVBQUUsV0FBVyxDQUFDO01BQ2xFL0UsRUFBRSxDQUFDcUYsU0FBUyxDQUFDaUcsWUFBWSxDQUFDO01BQzFCLE1BQU1DLFdBQVcsR0FBR3RMLElBQUksQ0FBQ21FLElBQUksQ0FBQ1cscUJBQXFCLEVBQUUsVUFBVSxDQUFDO01BQ2hFL0UsRUFBRSxDQUFDcUYsU0FBUyxDQUFDa0csV0FBVyxDQUFDO01BRXpCLFFBQVF6SCxPQUFPLENBQUN5QixTQUFTO1FBQ3ZCLEtBQUtwRixnQkFBZ0IsQ0FBQ3FGLFVBQVU7VUFDOUI7WUFDRSxNQUFNQyxZQUFvQixHQUFHekYsRUFBRSxDQUFDMEYsWUFBWSxDQUMxQ3ZCLCtCQUErQixFQUMvQjtjQUNFVSxRQUFRLEVBQUU7WUFDWixDQUFDLENBQ0Y7WUFDRCxNQUFNYyxZQUFpQixHQUFHaEQsZUFBZSxHQUNyQzFCLDZCQUE2QixDQUFDdUsscUJBQXFCLENBQ2pEL0YsWUFBWSxDQUNiLEdBQ0RJLElBQUksQ0FBQ0MsS0FBSyxDQUFDTCxZQUFZLENBQUM7WUFFNUIsS0FBSyxNQUFNZ0csUUFBUSxJQUFJOUYsWUFBWSxDQUFDSyxNQUFNLENBQUMwRixpQkFBaUIsQ0FDekRELFFBQVEsRUFBRTtjQUNYRSw0QkFBNEIsQ0FBQ0wsWUFBWSxFQUFFRyxRQUFRLENBQUM7WUFDdEQ7WUFFQSxLQUFLLE1BQU07Y0FBRUc7WUFBcUIsQ0FBQyxJQUFJakcsWUFBWSxDQUFDSyxNQUFNLENBQ3ZEcUYsbUJBQW1CLENBQUNRLE9BQU8sRUFBRTtjQUM5QkMsd0NBQXdDLENBQ3RDUCxXQUFXLEVBQ1hLLG9CQUFvQixDQUNyQjtZQUNIO1VBQ0Y7VUFDQTtRQUNGLEtBQUt6TCxnQkFBZ0IsQ0FBQ3FHLGNBQWM7VUFDbEM7WUFDRSxLQUFLLE1BQU11RixpQkFBaUIsSUFBSXZMLE9BQU8sQ0FDckMyRCwrQkFBK0IsRUFDL0IsQ0FBQyxVQUFVLENBQUMsQ0FDYixFQUFFO2NBQ0QsTUFBTTZILGdCQUFnQixHQUNwQkQsaUJBQWlCLENBQUNBLGlCQUFpQixDQUFDbEYsTUFBTSxHQUFHLENBQUMsQ0FBQztjQUNqRCxJQUFJLENBQUNtRixnQkFBZ0IsQ0FBQ2xGLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDdkM7Y0FDRjtjQUNBLE1BQU1tRix3QkFBd0IsR0FBR2hNLElBQUksQ0FBQ21FLElBQUksQ0FDeENELCtCQUErQixFQUMvQixHQUFHNEgsaUJBQWlCLENBQ3JCO2NBQ0QsSUFBSS9KLE9BQU8sQ0FBQ2dGLE9BQU8sRUFBRTtnQkFDbkJ6QyxPQUFPLENBQUNDLEdBQUcsQ0FDUixtQ0FBa0N5SCx3QkFBeUIsR0FBRSxDQUMvRDtjQUNIO2NBQ0EsTUFBTUMsb0JBQTRCLEdBQUdsTSxFQUFFLENBQUMwRixZQUFZLENBQ2xEdUcsd0JBQXdCLEVBQ3hCO2dCQUNFcEgsUUFBUSxFQUFFO2NBQ1osQ0FBQyxDQUNGO2NBQ0QsTUFBTXNILGdCQUFxQixHQUFHeEosZUFBZSxHQUN6QzFCLDZCQUE2QixDQUFDbUwsVUFBVSxDQUFDRixvQkFBb0IsQ0FBQyxHQUM5RHJHLElBQUksQ0FBQ0MsS0FBSyxDQUFDb0csb0JBQW9CLENBQUM7Y0FDcEMsTUFBTVQsUUFBUSxHQUFHVSxnQkFBZ0IsQ0FBQ1YsUUFBUTtjQUMxQ0UsNEJBQTRCLENBQUNMLFlBQVksRUFBRUcsUUFBUSxDQUFDO1lBQ3REO1lBRUEsS0FBSyxNQUFNWSw2QkFBNkIsSUFBSTdMLE9BQU8sQ0FDakQyRCwrQkFBK0IsRUFDL0IsQ0FBQyxzQkFBc0IsQ0FBQyxDQUN6QixFQUFFO2NBQ0QsTUFBTW1JLDRCQUE0QixHQUNoQ0QsNkJBQTZCLENBQzNCQSw2QkFBNkIsQ0FBQ3hGLE1BQU0sR0FBRyxDQUFDLENBQ3pDO2NBQ0gsSUFBSSxDQUFDeUYsNEJBQTRCLENBQUN4RixRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ25EO2NBQ0Y7Y0FDQSxNQUFNeUYsb0NBQW9DLEdBQUd0TSxJQUFJLENBQUNtRSxJQUFJLENBQ3BERCwrQkFBK0IsRUFDL0IsR0FBR2tJLDZCQUE2QixDQUNqQztjQUNELElBQUlySyxPQUFPLENBQUNnRixPQUFPLEVBQUU7Z0JBQ25CekMsT0FBTyxDQUFDQyxHQUFHLENBQ1IsK0NBQThDK0gsb0NBQXFDLEdBQUUsQ0FDdkY7Y0FDSDtjQUNBLE1BQU1DLGdDQUF3QyxHQUFHeE0sRUFBRSxDQUFDMEYsWUFBWSxDQUM5RDZHLG9DQUFvQyxFQUNwQztnQkFDRTFILFFBQVEsRUFBRTtjQUNaLENBQUMsQ0FDRjtjQUNELE1BQU00SCw0QkFBaUMsR0FBRzlKLGVBQWUsR0FDckQxQiw2QkFBNkIsQ0FBQ3lMLHNCQUFzQixDQUNsREYsZ0NBQWdDLENBQ2pDLEdBQ0QzRyxJQUFJLENBQUNDLEtBQUssQ0FBQzBHLGdDQUFnQyxDQUFDO2NBQ2hELE1BQU1aLG9CQUFvQixHQUN4QmEsNEJBQTRCLENBQUNiLG9CQUFvQjtjQUNuREUsd0NBQXdDLENBQ3RDUCxXQUFXLEVBQ1hLLG9CQUFvQixDQUNyQjtZQUNIO1VBQ0Y7VUFDQTtNQUFLO01BR1QsSUFBSTVKLE9BQU8sQ0FBQ3NILE1BQU0sRUFBRTtRQUNsQixNQUFNQyxTQUFTLEdBQUdoSixHQUFHLENBQUNpSixhQUFhLENBQ2pDekUscUJBQXFCLEVBQ3JCLGtCQUFrQixFQUNsQi9DLE9BQU8sQ0FBQ3lILE1BQU0sQ0FDZjtRQUNELElBQUlGLFNBQVMsS0FBSyxDQUFDLElBQUlsSCxRQUFRLEtBQUssQ0FBQyxFQUFFO1VBQ3JDQSxRQUFRLEdBQUdrSCxTQUFTO1FBQ3RCO01BQ0Y7SUFDRjtFQUNGO0VBRUEsSUFBSXZHLGVBQWUsR0FBRzVDLGVBQWUsQ0FBQ3VNLFFBQVEsRUFBRTtJQUM5QyxLQUFLLElBQUk3SSxPQUFPLElBQUlYLGVBQWUsQ0FBQ3lKLFFBQVEsRUFBRTtNQUM1QyxNQUFNekksK0JBQXVDLEdBQUdsRSxJQUFJLENBQUNtRSxJQUFJLENBQ3ZEbkMsT0FBTyxFQUNQNkIsT0FBTyxDQUFDTyxRQUFRLENBQ2pCO01BQ0QsSUFBSSxDQUFDckMsT0FBTyxDQUFDc0MsTUFBTSxFQUFFO1FBQ25CQyxPQUFPLENBQUNDLEdBQUcsQ0FBRSxnQkFBZUwsK0JBQWdDLEVBQUMsQ0FBQztNQUNoRTtNQUVBLE1BQU1yQixXQUFXLEdBQUc3QyxJQUFJLENBQUN3RSxRQUFRLENBQy9CTiwrQkFBK0IsRUFDL0IsT0FBTyxDQUNSO01BQ0QsSUFBSTdCLFdBQVcsS0FBS0ksU0FBUyxFQUFFO1FBQzdCNUMsUUFBUSxDQUFFLGFBQVl3QyxXQUFZLElBQUdRLFdBQVksTUFBSyxFQUFFO1VBQ3RENEIsR0FBRyxFQUFFekMsT0FBTztVQUNaMEMsR0FBRyxFQUFFQyxPQUFPLENBQUNELEdBQUc7VUFDaEJFLFFBQVEsRUFBRSxPQUFPO1VBQ2pCQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU07UUFDcEMsQ0FBQyxDQUFDO01BQ0o7TUFFQSxNQUFNQyxxQkFBcUIsR0FBRzlFLElBQUksQ0FBQ21FLElBQUksQ0FBQ25DLE9BQU8sRUFBRWEsV0FBVyxDQUFDO01BQzdEOUMsRUFBRSxDQUFDaUYsYUFBYSxDQUFDRixxQkFBcUIsQ0FBQztNQUN2QyxLQUFLLE1BQU1WLFFBQVEsSUFBSXJFLEVBQUUsQ0FBQ2tGLFdBQVcsQ0FBQ0gscUJBQXFCLENBQUMsRUFBRTtRQUM1RCxJQUFJVixRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO1VBQ3ZCO1FBQ0Y7UUFDQXJFLEVBQUUsQ0FBQ21GLFVBQVUsQ0FBQ2xGLElBQUksQ0FBQ21FLElBQUksQ0FBQ1cscUJBQXFCLEVBQUVWLFFBQVEsQ0FBQyxDQUFDO01BQzNEO01BRUEsUUFBUVAsT0FBTyxDQUFDeUIsU0FBUztRQUN2QixLQUFLcEYsZ0JBQWdCLENBQUNxRixVQUFVO1VBQzlCO1lBQ0UsTUFBTUMsWUFBb0IsR0FBR3pGLEVBQUUsQ0FBQzBGLFlBQVksQ0FDMUN2QiwrQkFBK0IsRUFDL0I7Y0FDRVUsUUFBUSxFQUFFO1lBQ1osQ0FBQyxDQUNGO1lBQ0QsTUFBTWMsWUFBaUIsR0FBR2hELGVBQWUsR0FDckN6QixrQkFBa0IsQ0FBQzJMLFVBQVUsQ0FBQ3BILFlBQVksQ0FBQyxHQUMzQ0ksSUFBSSxDQUFDQyxLQUFLLENBQUNMLFlBQVksQ0FBQztZQUU1QixLQUFLLE1BQU1xSCxPQUFPLElBQUluSCxZQUFZLENBQUNpSCxRQUFRLENBQUNFLE9BQU8sRUFBRTtjQUNuREMsMkJBQTJCLENBQUNoSSxxQkFBcUIsRUFBRStILE9BQU8sQ0FBQztZQUM3RDtVQUNGO1VBQ0E7UUFDRixLQUFLM00sZ0JBQWdCLENBQUNxRyxjQUFjO1VBQ2xDO1lBQ0UsS0FBSyxNQUFNd0csZ0JBQWdCLElBQUl4TSxPQUFPLENBQ3BDMkQsK0JBQStCLENBQ2hDLEVBQUU7Y0FDRCxNQUFNOEksZUFBZSxHQUNuQkQsZ0JBQWdCLENBQUNBLGdCQUFnQixDQUFDbkcsTUFBTSxHQUFHLENBQUMsQ0FBQztjQUMvQyxJQUFJLENBQUNvRyxlQUFlLENBQUNuRyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3RDO2NBQ0Y7Y0FDQSxNQUFNb0csdUJBQXVCLEdBQUdqTixJQUFJLENBQUNtRSxJQUFJLENBQ3ZDRCwrQkFBK0IsRUFDL0IsR0FBRzZJLGdCQUFnQixDQUNwQjtjQUNELElBQUloTCxPQUFPLENBQUNnRixPQUFPLEVBQUU7Z0JBQ25CekMsT0FBTyxDQUFDQyxHQUFHLENBQ1Isa0NBQWlDMEksdUJBQXdCLEdBQUUsQ0FDN0Q7Y0FDSDtjQUNBLE1BQU1DLG1CQUEyQixHQUFHbk4sRUFBRSxDQUFDMEYsWUFBWSxDQUNqRHdILHVCQUF1QixFQUN2QjtnQkFDRXJJLFFBQVEsRUFBRTtjQUNaLENBQUMsQ0FDRjtjQUNELE1BQU11SSxlQUFvQixHQUFHekssZUFBZSxHQUN4Q3pCLGtCQUFrQixDQUFDbU0sZ0JBQWdCLENBQUNGLG1CQUFtQixDQUFDLEdBQ3hEdEgsSUFBSSxDQUFDQyxLQUFLLENBQUNxSCxtQkFBbUIsQ0FBQztjQUNuQyxNQUFNTCxPQUFPLEdBQUdNLGVBQWUsQ0FBQ04sT0FBTztjQUN2Q0MsMkJBQTJCLENBQUNoSSxxQkFBcUIsRUFBRStILE9BQU8sQ0FBQztZQUM3RDtVQUNGO1VBQ0E7TUFBSztNQUdULElBQUk5SyxPQUFPLENBQUNzSCxNQUFNLEVBQUU7UUFDbEIsTUFBTUMsU0FBUyxHQUFHaEosR0FBRyxDQUFDaUosYUFBYSxDQUNqQ3pFLHFCQUFxQixFQUNyQixrQkFBa0IsRUFDbEIvQyxPQUFPLENBQUN5SCxNQUFNLENBQ2Y7UUFDRCxJQUFJRixTQUFTLEtBQUssQ0FBQyxJQUFJbEgsUUFBUSxLQUFLLENBQUMsRUFBRTtVQUNyQ0EsUUFBUSxHQUFHa0gsU0FBUztRQUN0QjtNQUNGO0lBQ0Y7RUFDRjs7RUFFQTtFQUNBckgsSUFBSSxDQUFDQyxTQUFTLENBQUNDLE1BQU0sR0FBRy9CLGtCQUFrQjtFQUUxQyxPQUFPZ0MsUUFBUTtBQUNqQjtBQUVBLFNBQVN3SSw4QkFBOEJBLENBQ3JDOUYscUJBQTZCLEVBQzdCNkYsVUFHQyxFQUNLO0VBQ04sTUFBTTBDLGtCQUFrQixHQUFHMUMsVUFBVSxDQUFDMkMsa0JBQWtCO0VBQ3hEMU4sTUFBTSxDQUFDa0QsY0FBYyxDQUFDdUssa0JBQWtCLEVBQUU1SyxTQUFTLENBQUM7RUFDcEQsTUFBTThLLGtCQUFrQixHQUFHdk4sSUFBSSxDQUFDbUUsSUFBSSxDQUNsQ1cscUJBQXFCLEVBQ3JCdUksa0JBQWtCLENBQ25CO0VBQ0R0TixFQUFFLENBQUNpRixhQUFhLENBQUN1SSxrQkFBa0IsQ0FBQztFQUNwQyxNQUFNdEgsdUJBQXVCLEdBQUdqRyxJQUFJLENBQUNtRSxJQUFJLENBQ3ZDb0osa0JBQWtCLEVBQ2xCNUMsVUFBVSxDQUFDekUsR0FBRyxHQUFHLE9BQU8sQ0FDekI7RUFDRG5HLEVBQUUsQ0FBQ29HLGFBQWEsQ0FDZEYsdUJBQXVCLEVBQ3ZCTCxJQUFJLENBQUNRLFNBQVMsQ0FBQ3VFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQ25DO0lBQ0UvRixRQUFRLEVBQUU7RUFDWixDQUFDLENBQ0Y7QUFDSDtBQUVBLFNBQVM4Ryw0QkFBNEJBLENBQ25DTCxZQUFvQixFQUNwQkcsUUFBeUIsRUFDbkI7RUFDTixNQUFNaEgsUUFBUSxHQUFHaEUsbUJBQW1CLENBQUM2SyxZQUFZLEVBQUVHLFFBQVEsQ0FBQ3RGLEdBQUcsQ0FBQztFQUNoRW5HLEVBQUUsQ0FBQ29HLGFBQWEsQ0FBRSxHQUFFM0IsUUFBUyxPQUFNLEVBQUVvQixJQUFJLENBQUNRLFNBQVMsQ0FBQ29GLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDdEU1RyxRQUFRLEVBQUU7RUFDWixDQUFDLENBQUM7QUFDSjtBQUVBLFNBQVNpSCx3Q0FBd0NBLENBQy9DUCxXQUFtQixFQUNuQkssb0JBQXFDLEVBQy9CO0VBQ04sTUFBTW5ILFFBQVEsR0FBRy9ELCtCQUErQixDQUM5QzZLLFdBQVcsRUFDWEssb0JBQW9CLENBQUN6RixHQUFHLENBQ3pCO0VBQ0RuRyxFQUFFLENBQUNvRyxhQUFhLENBQ2IsR0FBRTNCLFFBQVMsT0FBTSxFQUNsQm9CLElBQUksQ0FBQ1EsU0FBUyxDQUFDdUYsb0JBQW9CLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUM3QztJQUNFL0csUUFBUSxFQUFFO0VBQ1osQ0FBQyxDQUNGO0FBQ0g7QUFFQSxTQUFTa0YsMkJBQTJCQSxDQUNsQzBELFdBQW1CLEVBQ25CNUQsT0FBd0IsRUFDbEI7RUFDTixNQUFNcEYsUUFBUSxHQUFHOUQsa0JBQWtCLENBQUM4TSxXQUFXLEVBQUU1RCxPQUFPLENBQUMxRCxHQUFHLENBQUM7RUFDN0RuRyxFQUFFLENBQUNvRyxhQUFhLENBQUUsR0FBRTNCLFFBQVMsT0FBTSxFQUFFb0IsSUFBSSxDQUFDUSxTQUFTLENBQUN3RCxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ3JFaEYsUUFBUSxFQUFFO0VBQ1osQ0FBQyxDQUFDO0FBQ0o7QUFFQSxTQUFTa0ksMkJBQTJCQSxDQUNsQ1csV0FBbUIsRUFDbkJaLE9BQXdCLEVBQ2xCO0VBQ04sTUFBTXJJLFFBQVEsR0FBRzdELGtCQUFrQixDQUFDOE0sV0FBVyxFQUFFWixPQUFPLENBQUMzRyxHQUFHLENBQUM7RUFDN0RuRyxFQUFFLENBQUNvRyxhQUFhLENBQUUsR0FBRTNCLFFBQVMsT0FBTSxFQUFFb0IsSUFBSSxDQUFDUSxTQUFTLENBQUN5RyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ3JFakksUUFBUSxFQUFFO0VBQ1osQ0FBQyxDQUFDO0FBQ0o7O0FBRUE7QUFDQSxJQUFJRCxPQUFPLENBQUMrSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM3RyxRQUFRLENBQUMsb0JBQW9CLENBQUMsRUFBRTtFQUNsRCxNQUFNOUUsT0FBTyxHQUFHakMsZUFBZSxDQUFDcUIsa0JBQWtCLENBQUM7RUFFbkR3RCxPQUFPLENBQUNnSixJQUFJLENBQUM3TCxjQUFjLENBQUNDLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZDIn0=