@tricoteuses/assemblee 1.0.7 → 1.1.1

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 (134) hide show
  1. package/lib/api.js +3 -9
  2. package/lib/api.mjs +4 -5
  3. package/lib/bugs/acteur-00010/plugin.test.js +3 -50
  4. package/lib/bugs/acteur-00010/plugin.test.mjs +1 -1
  5. package/lib/bugs/acteur-00010.js +2 -57
  6. package/lib/bugs/acteur-00010.mjs +1 -6
  7. package/lib/bugs/agenda-00002/plugin.test.js +3 -53
  8. package/lib/bugs/agenda-00002/plugin.test.mjs +1 -3
  9. package/lib/bugs/agenda-00002.js +3 -148
  10. package/lib/bugs/agenda-00002.mjs +1 -28
  11. package/lib/bugs/agenda-00008/plugin.test.js +3 -52
  12. package/lib/bugs/agenda-00008/plugin.test.mjs +1 -1
  13. package/lib/bugs/agenda-00008.js +2 -61
  14. package/lib/bugs/agenda-00008.mjs +1 -5
  15. package/lib/bugs/agenda-00011/plugin.test.js +5 -99
  16. package/lib/bugs/agenda-00011/plugin.test.mjs +3 -3
  17. package/lib/bugs/agenda-00011.js +4 -105
  18. package/lib/bugs/agenda-00011.mjs +3 -29
  19. package/lib/bugs.js +3 -164
  20. package/lib/bugs.mjs +1 -26
  21. package/lib/cleaners/actes_legislatifs.js +11 -115
  22. package/lib/cleaners/actes_legislatifs.mjs +7 -82
  23. package/lib/cleaners/acteurs.js +12 -92
  24. package/lib/cleaners/acteurs.mjs +7 -38
  25. package/lib/cleaners/amendements.js +10 -103
  26. package/lib/cleaners/amendements.mjs +4 -58
  27. package/lib/cleaners/documents.js +5 -67
  28. package/lib/cleaners/documents.mjs +1 -37
  29. package/lib/cleaners/dossiers_legislatifs.js +5 -61
  30. package/lib/cleaners/dossiers_legislatifs.mjs +1 -29
  31. package/lib/cleaners/index.js +1 -9
  32. package/lib/cleaners/index.mjs +1 -1
  33. package/lib/cleaners/organes.js +1 -33
  34. package/lib/cleaners/organes.mjs +1 -17
  35. package/lib/cleaners/reunions.js +4 -119
  36. package/lib/cleaners/reunions.mjs +1 -64
  37. package/lib/cleaners/scrutins.js +10 -102
  38. package/lib/cleaners/scrutins.mjs +1 -48
  39. package/lib/cleaners/xml.js +8 -42
  40. package/lib/cleaners/xml.mjs +6 -8
  41. package/lib/datasets.js +14 -113
  42. package/lib/datasets.mjs +6 -46
  43. package/lib/dates.js +7 -37
  44. package/lib/dates.mjs +9 -14
  45. package/lib/dossiers_legislatifs.js +6 -68
  46. package/lib/dossiers_legislatifs.mjs +5 -36
  47. package/lib/file_systems.js +56 -139
  48. package/lib/file_systems.mjs +1 -9
  49. package/lib/git.js +4 -53
  50. package/lib/git.mjs +1 -12
  51. package/lib/index.js +1 -15
  52. package/lib/index.mjs +1 -1
  53. package/lib/inserters.js +23 -146
  54. package/lib/inserters.mjs +6 -87
  55. package/lib/loaders.js +44 -316
  56. package/lib/loaders.mjs +12 -135
  57. package/lib/organes.js +1 -7
  58. package/lib/organes.mjs +1 -4
  59. package/lib/parsers/documents.js +22 -151
  60. package/lib/parsers/documents.mjs +19 -81
  61. package/lib/parsers/index.js +1 -4
  62. package/lib/parsers/index.mjs +1 -1
  63. package/lib/parsers/recherche_amendements.js +302 -527
  64. package/lib/parsers/recherche_amendements.mjs +8 -31
  65. package/lib/raw_types/acteurs_et_organes.d.ts +1 -30
  66. package/lib/raw_types/acteurs_et_organes.js +5 -124
  67. package/lib/raw_types/acteurs_et_organes.mjs +5 -105
  68. package/lib/raw_types/agendas.js +6 -89
  69. package/lib/raw_types/agendas.mjs +9 -65
  70. package/lib/raw_types/amendements.d.ts +2 -0
  71. package/lib/raw_types/amendements.js +10 -90
  72. package/lib/raw_types/amendements.mjs +11 -69
  73. package/lib/raw_types/dossiers_legislatifs.js +6 -96
  74. package/lib/raw_types/dossiers_legislatifs.mjs +6 -73
  75. package/lib/raw_types/scrutins.js +6 -81
  76. package/lib/raw_types/scrutins.mjs +9 -57
  77. package/lib/scripts/bugs_helper.js +2 -181
  78. package/lib/scripts/bugs_helper.mjs +2 -39
  79. package/lib/scripts/clean_data.js +27 -143
  80. package/lib/scripts/clean_data.mjs +15 -34
  81. package/lib/scripts/clean_reorganized_data.js +76 -240
  82. package/lib/scripts/clean_reorganized_data.mjs +36 -99
  83. package/lib/scripts/diff_amendements.js +19 -79
  84. package/lib/scripts/diff_amendements.mjs +17 -35
  85. package/lib/scripts/document_dossiers_legislatifs.js +17 -142
  86. package/lib/scripts/document_dossiers_legislatifs.mjs +6 -90
  87. package/lib/scripts/get_today_reunions.js +4 -22
  88. package/lib/scripts/get_today_reunions.mjs +1 -7
  89. package/lib/scripts/merge_scrutins.js +3 -47
  90. package/lib/scripts/merge_scrutins.mjs +1 -9
  91. package/lib/scripts/parse_textes_lois.js +15 -44
  92. package/lib/scripts/parse_textes_lois.mjs +18 -19
  93. package/lib/scripts/raw_types_from_amendements.js +3 -95
  94. package/lib/scripts/raw_types_from_amendements.mjs +1 -16
  95. package/lib/scripts/reorganize_data.js +74 -294
  96. package/lib/scripts/reorganize_data.mjs +22 -133
  97. package/lib/scripts/retrieve_deputes_photos.js +6 -119
  98. package/lib/scripts/retrieve_deputes_photos.mjs +7 -33
  99. package/lib/scripts/retrieve_documents.js +4 -192
  100. package/lib/scripts/retrieve_documents.mjs +2 -50
  101. package/lib/scripts/retrieve_open_data.js +44 -116
  102. package/lib/scripts/retrieve_open_data.mjs +14 -19
  103. package/lib/scripts/retrieve_pending_amendments.js +4 -98
  104. package/lib/scripts/retrieve_pending_amendments.mjs +1 -14
  105. package/lib/scripts/retrieve_senateurs_photos.js +18 -114
  106. package/lib/scripts/retrieve_senateurs_photos.mjs +20 -48
  107. package/lib/scripts/retrieve_textes_lois.js +3 -122
  108. package/lib/scripts/retrieve_textes_lois.mjs +3 -21
  109. package/lib/scripts/test_load.js +2 -10
  110. package/lib/scripts/test_load.mjs +2 -1
  111. package/lib/scripts/test_load_big_files.js +2 -10
  112. package/lib/scripts/test_load_big_files.mjs +2 -1
  113. package/lib/scripts/validate_json.js +4 -119
  114. package/lib/scripts/validate_json.mjs +2 -36
  115. package/lib/shared_types/codes_actes.js +1 -24
  116. package/lib/shared_types/codes_actes.mjs +3 -10
  117. package/lib/strings.js +1 -5
  118. package/lib/strings.mjs +1 -1
  119. package/lib/types/acteurs_et_organes.js +9 -84
  120. package/lib/types/acteurs_et_organes.mjs +10 -63
  121. package/lib/types/agendas.js +8 -90
  122. package/lib/types/agendas.mjs +11 -66
  123. package/lib/types/amendements.d.ts +2 -0
  124. package/lib/types/amendements.js +12 -92
  125. package/lib/types/amendements.mjs +15 -70
  126. package/lib/types/dossiers_legislatifs.js +8 -96
  127. package/lib/types/dossiers_legislatifs.mjs +10 -72
  128. package/lib/types/legislatures.js +1 -3
  129. package/lib/types/legislatures.mjs +1 -2
  130. package/lib/types/scrutins.js +8 -82
  131. package/lib/types/scrutins.mjs +11 -58
  132. package/lib/urls.js +3 -27
  133. package/lib/urls.mjs +3 -21
  134. package/package.json +1 -1
@@ -1,95 +1,50 @@
1
1
  "use strict";
2
2
 
3
3
  require("core-js/modules/es.array.slice.js");
4
-
5
4
  require("core-js/modules/es.function.name.js");
6
-
7
5
  require("core-js/modules/es.array.from.js");
8
-
9
6
  require("core-js/modules/es.string.iterator.js");
10
-
11
7
  require("core-js/modules/es.symbol.js");
12
-
13
8
  require("core-js/modules/es.symbol.description.js");
14
-
15
9
  require("core-js/modules/es.symbol.iterator.js");
16
-
17
10
  require("core-js/modules/es.array.iterator.js");
18
-
19
11
  require("core-js/modules/web.dom-collections.iterator.js");
20
-
21
12
  require("core-js/modules/es.array.is-array.js");
22
-
23
13
  require("core-js/modules/es.date.to-json.js");
24
-
25
14
  require("core-js/modules/es.date.to-string.js");
26
-
27
15
  require("core-js/modules/es.array.map.js");
28
-
29
16
  require("core-js/modules/es.array.reduce.js");
30
-
31
17
  require("core-js/modules/es.object.to-string.js");
32
-
33
18
  require("core-js/modules/es.array.join.js");
34
-
35
19
  require("core-js/modules/es.regexp.exec.js");
36
-
37
20
  require("core-js/modules/es.string.replace.js");
38
-
39
21
  var _assert = _interopRequireDefault(require("assert"));
40
-
41
22
  var _commandLineArgs = _interopRequireDefault(require("command-line-args"));
42
-
43
23
  var _fs = _interopRequireDefault(require("fs"));
44
-
45
24
  var _path = _interopRequireDefault(require("path"));
46
-
47
25
  var _acteurs = require("../cleaners/acteurs");
48
-
49
26
  var _amendements = require("../cleaners/amendements");
50
-
51
27
  var _documents = require("../cleaners/documents");
52
-
53
28
  var _dossiers_legislatifs = require("../cleaners/dossiers_legislatifs");
54
-
55
29
  var _organes = require("../cleaners/organes");
56
-
57
30
  var _reunions = require("../cleaners/reunions");
58
-
59
31
  var _scrutins = require("../cleaners/scrutins");
60
-
61
32
  var _datasets = require("../datasets");
62
-
63
33
  var _dates = require("../dates");
64
-
65
34
  var _acteurs_et_organes = require("../types/acteurs_et_organes");
66
-
67
35
  var _agendas = require("../types/agendas");
68
-
69
36
  var _amendements2 = require("../types/amendements");
70
-
71
37
  var _dossiers_legislatifs2 = require("../types/dossiers_legislatifs");
72
-
73
38
  var _scrutins2 = require("../types/scrutins");
74
-
75
39
  var _acteurs_et_organes2 = require("../raw_types/acteurs_et_organes");
76
-
77
40
  var _agendas2 = require("../raw_types/agendas");
78
-
79
41
  var _amendements3 = require("../raw_types/amendements");
80
-
81
42
  var _dossiers_legislatifs3 = require("../raw_types/dossiers_legislatifs");
82
-
83
43
  var _scrutins3 = require("../raw_types/scrutins");
84
-
85
44
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
86
-
87
45
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
88
-
89
46
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
90
-
91
47
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
92
-
93
48
  var optionsDefinitions = [{
94
49
  alias: "k",
95
50
  defaultValue: ["All"],
@@ -104,7 +59,6 @@ var optionsDefinitions = [{
104
59
  type: String
105
60
  }];
106
61
  var options = (0, _commandLineArgs["default"])(optionsDefinitions);
107
-
108
62
  function cleanData(dataDir) {
109
63
  Date.prototype.toJSON = _dates.patchedDateToJson;
110
64
  options.categories.map(function (datasetName) {
@@ -113,35 +67,26 @@ function cleanData(dataDir) {
113
67
  var enabledDatasets = options.categories.reduce(function (enabledDatasets, datasetName) {
114
68
  return enabledDatasets | _datasets.EnabledDatasets[datasetName];
115
69
  }, _datasets.EnabledDatasets.None);
116
-
117
70
  if (enabledDatasets & _datasets.EnabledDatasets.ActeursEtOrganes) {
118
71
  var _iterator = _createForOfIteratorHelper(_datasets.datasets.acteursEtOrganes),
119
- _step;
120
-
72
+ _step;
121
73
  try {
122
74
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
123
75
  var dataset = _step.value;
124
-
125
76
  var rawJsonFilePath = _path["default"].join(dataDir, dataset.filename);
126
-
127
77
  console.log("Loading file: ".concat(rawJsonFilePath));
128
-
129
78
  var rawJson = _fs["default"].readFileSync(rawJsonFilePath, {
130
79
  encoding: "utf8"
131
80
  });
132
-
133
- var acteursEtOrganes = _acteurs_et_organes2.Convert.toActeursEtOrganes(rawJson); // const acteurs = jp.query(acteursEtOrganes, "$.export.acteurs.acteur")[0]
134
-
135
-
81
+ var acteursEtOrganes = _acteurs_et_organes2.Convert.toActeursEtOrganes(rawJson);
82
+ // const acteurs = jp.query(acteursEtOrganes, "$.export.acteurs.acteur")[0]
136
83
  var organes = acteursEtOrganes["export"].organes.organe;
137
84
  acteursEtOrganes.organes = organes;
138
85
  var acteurs = acteursEtOrganes["export"].acteurs.acteur;
139
86
  acteursEtOrganes.acteurs = acteurs;
140
87
  delete acteursEtOrganes["export"];
141
-
142
88
  var _iterator2 = _createForOfIteratorHelper(acteurs),
143
- _step2;
144
-
89
+ _step2;
145
90
  try {
146
91
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
147
92
  var acteur = _step2.value;
@@ -152,10 +97,8 @@ function cleanData(dataDir) {
152
97
  } finally {
153
98
  _iterator2.f();
154
99
  }
155
-
156
100
  var _iterator3 = _createForOfIteratorHelper(organes),
157
- _step3;
158
-
101
+ _step3;
159
102
  try {
160
103
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
161
104
  var organe = _step3.value;
@@ -166,15 +109,11 @@ function cleanData(dataDir) {
166
109
  } finally {
167
110
  _iterator3.f();
168
111
  }
169
-
170
- var acteursEtOrganesJson = JSON.stringify(acteursEtOrganes, null, 2); // Validate generated JSON.
171
-
112
+ var acteursEtOrganesJson = JSON.stringify(acteursEtOrganes, null, 2);
113
+ // Validate generated JSON.
172
114
  var acteursEtOrganesClean = _acteurs_et_organes.Convert.toActeursEtOrganes(acteursEtOrganesJson);
173
-
174
115
  var acteursEtOrganesCleanJson = _acteurs_et_organes.Convert.acteursEtOrganesToJson(acteursEtOrganesClean);
175
-
176
116
  var jsonFilePath = _path["default"].join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye.json"));
177
-
178
117
  _fs["default"].writeFileSync(jsonFilePath, acteursEtOrganesCleanJson, {
179
118
  encoding: "utf8"
180
119
  });
@@ -185,30 +124,21 @@ function cleanData(dataDir) {
185
124
  _iterator.f();
186
125
  }
187
126
  }
188
-
189
127
  if (enabledDatasets & _datasets.EnabledDatasets.Agendas) {
190
128
  var _iterator4 = _createForOfIteratorHelper(_datasets.datasets.agendas),
191
- _step4;
192
-
129
+ _step4;
193
130
  try {
194
131
  for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
195
132
  var _dataset = _step4.value;
196
-
197
133
  var _rawJsonFilePath = _path["default"].join(dataDir, _dataset.filename);
198
-
199
134
  console.log("Loading file: ".concat(_rawJsonFilePath));
200
-
201
135
  var _rawJson = _fs["default"].readFileSync(_rawJsonFilePath, {
202
136
  encoding: "utf8"
203
137
  });
204
-
205
138
  var agendas = _agendas2.Convert.toAgendas(_rawJson);
206
-
207
139
  agendas.reunions = agendas.reunions.reunion;
208
-
209
140
  var _iterator5 = _createForOfIteratorHelper(agendas.reunions),
210
- _step5;
211
-
141
+ _step5;
212
142
  try {
213
143
  for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
214
144
  var reunion = _step5.value;
@@ -219,15 +149,11 @@ function cleanData(dataDir) {
219
149
  } finally {
220
150
  _iterator5.f();
221
151
  }
222
-
223
- var agendasJson = JSON.stringify(agendas, null, 2); // Validate generated JSON.
224
-
152
+ var agendasJson = JSON.stringify(agendas, null, 2);
153
+ // Validate generated JSON.
225
154
  var agendasClean = _agendas.Convert.toAgendas(agendasJson);
226
-
227
155
  var agendasCleanJson = _agendas.Convert.agendasToJson(agendasClean);
228
-
229
156
  var _jsonFilePath = _path["default"].join(dataDir, _dataset.filename.replace(/\.json$/, "_nettoye.json"));
230
-
231
157
  _fs["default"].writeFileSync(_jsonFilePath, agendasCleanJson, {
232
158
  encoding: "utf8"
233
159
  });
@@ -238,31 +164,22 @@ function cleanData(dataDir) {
238
164
  _iterator4.f();
239
165
  }
240
166
  }
241
-
242
167
  if (enabledDatasets & _datasets.EnabledDatasets.Amendements) {
243
168
  var _iterator6 = _createForOfIteratorHelper(_datasets.datasets.amendements),
244
- _step6;
245
-
169
+ _step6;
246
170
  try {
247
171
  for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
248
172
  var _dataset2 = _step6.value;
249
-
250
173
  var _rawJsonFilePath2 = _path["default"].join(dataDir, _dataset2.filename);
251
-
252
174
  console.log("Loading file: ".concat(_rawJsonFilePath2));
253
-
254
175
  var _rawJson2 = _fs["default"].readFileSync(_rawJsonFilePath2, {
255
176
  encoding: "utf8"
256
177
  });
257
-
258
178
  var amendements = _amendements3.Convert.toAmendements(_rawJson2);
259
-
260
179
  amendements.textesLegislatifs = amendements.textesEtAmendements.texteleg;
261
180
  delete amendements.textesEtAmendements;
262
-
263
181
  var _iterator7 = _createForOfIteratorHelper(amendements.textesLegislatifs),
264
- _step7;
265
-
182
+ _step7;
266
183
  try {
267
184
  for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
268
185
  var texteLegislatif = _step7.value;
@@ -273,15 +190,11 @@ function cleanData(dataDir) {
273
190
  } finally {
274
191
  _iterator7.f();
275
192
  }
276
-
277
- var amendementsJson = JSON.stringify(amendements, null, 2); // Validate generated JSON.
278
-
193
+ var amendementsJson = JSON.stringify(amendements, null, 2);
194
+ // Validate generated JSON.
279
195
  var amendementsClean = _amendements2.Convert.toAmendements(amendementsJson);
280
-
281
196
  var amendementsCleanJson = _amendements2.Convert.amendementsToJson(amendementsClean);
282
-
283
197
  var _jsonFilePath2 = _path["default"].join(dataDir, _dataset2.filename.replace(/\.json$/, "_nettoye.json"));
284
-
285
198
  _fs["default"].writeFileSync(_jsonFilePath2, amendementsCleanJson, {
286
199
  encoding: "utf8"
287
200
  });
@@ -292,34 +205,25 @@ function cleanData(dataDir) {
292
205
  _iterator6.f();
293
206
  }
294
207
  }
295
-
296
208
  if (enabledDatasets & _datasets.EnabledDatasets.DossiersLegislatifs) {
297
209
  var _iterator8 = _createForOfIteratorHelper(_datasets.datasets.dossiersLegislatifs),
298
- _step8;
299
-
210
+ _step8;
300
211
  try {
301
212
  for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
302
213
  var _dataset3 = _step8.value;
303
-
304
214
  var _rawJsonFilePath3 = _path["default"].join(dataDir, _dataset3.filename);
305
-
306
215
  console.log("Loading file: ".concat(_rawJsonFilePath3));
307
-
308
216
  var _rawJson3 = _fs["default"].readFileSync(_rawJsonFilePath3, {
309
217
  encoding: "utf8"
310
218
  });
311
-
312
219
  var dossiersLegislatifs = _dossiers_legislatifs3.Convert.toDossiersLegislatifs(_rawJson3);
313
-
314
220
  dossiersLegislatifs.textesLegislatifs = dossiersLegislatifs["export"].textesLegislatifs.document;
315
221
  dossiersLegislatifs.dossiersParlementaires = dossiersLegislatifs["export"].dossiersLegislatifs.dossier.map(function (dossier) {
316
222
  return dossier.dossierParlementaire;
317
223
  });
318
224
  delete dossiersLegislatifs["export"];
319
-
320
225
  var _iterator9 = _createForOfIteratorHelper(dossiersLegislatifs.textesLegislatifs),
321
- _step9;
322
-
226
+ _step9;
323
227
  try {
324
228
  for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
325
229
  var document = _step9.value;
@@ -330,10 +234,8 @@ function cleanData(dataDir) {
330
234
  } finally {
331
235
  _iterator9.f();
332
236
  }
333
-
334
237
  var _iterator10 = _createForOfIteratorHelper(dossiersLegislatifs.dossiersParlementaires),
335
- _step10;
336
-
238
+ _step10;
337
239
  try {
338
240
  for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
339
241
  var dossierParlementaire = _step10.value;
@@ -344,15 +246,11 @@ function cleanData(dataDir) {
344
246
  } finally {
345
247
  _iterator10.f();
346
248
  }
347
-
348
- var dossiersLegislatifsJson = JSON.stringify(dossiersLegislatifs, null, 2); // Validate generated JSON.
349
-
249
+ var dossiersLegislatifsJson = JSON.stringify(dossiersLegislatifs, null, 2);
250
+ // Validate generated JSON.
350
251
  var dossiersLegislatifsClean = _dossiers_legislatifs2.Convert.toDossiersLegislatifs(dossiersLegislatifsJson);
351
-
352
252
  var dossiersLegislatifsCleanJson = _dossiers_legislatifs2.Convert.dossiersLegislatifsToJson(dossiersLegislatifsClean);
353
-
354
253
  var _jsonFilePath3 = _path["default"].join(dataDir, _dataset3.filename.replace(/\.json$/, "_nettoye.json"));
355
-
356
254
  _fs["default"].writeFileSync(_jsonFilePath3, dossiersLegislatifsCleanJson, {
357
255
  encoding: "utf8"
358
256
  });
@@ -363,30 +261,21 @@ function cleanData(dataDir) {
363
261
  _iterator8.f();
364
262
  }
365
263
  }
366
-
367
264
  if (enabledDatasets & _datasets.EnabledDatasets.Scrutins) {
368
265
  var _iterator11 = _createForOfIteratorHelper(_datasets.datasets.scrutins),
369
- _step11;
370
-
266
+ _step11;
371
267
  try {
372
268
  for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
373
269
  var _dataset4 = _step11.value;
374
-
375
270
  var _rawJsonFilePath4 = _path["default"].join(dataDir, _dataset4.filename);
376
-
377
271
  console.log("Loading file: ".concat(_rawJsonFilePath4));
378
-
379
272
  var _rawJson4 = _fs["default"].readFileSync(_rawJsonFilePath4, {
380
273
  encoding: "utf8"
381
274
  });
382
-
383
275
  var scrutins = _scrutins3.Convert.toScrutins(_rawJson4);
384
-
385
276
  scrutins.scrutins = scrutins.scrutins.scrutin;
386
-
387
277
  var _iterator12 = _createForOfIteratorHelper(scrutins.scrutins),
388
- _step12;
389
-
278
+ _step12;
390
279
  try {
391
280
  for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
392
281
  var scrutin = _step12.value;
@@ -397,15 +286,11 @@ function cleanData(dataDir) {
397
286
  } finally {
398
287
  _iterator12.f();
399
288
  }
400
-
401
- var scrutinsJson = JSON.stringify(scrutins, null, 2); // Validate generated JSON.
402
-
289
+ var scrutinsJson = JSON.stringify(scrutins, null, 2);
290
+ // Validate generated JSON.
403
291
  var scrutinsClean = _scrutins2.Convert.toScrutins(scrutinsJson);
404
-
405
292
  var scrutinsCleanJson = _scrutins2.Convert.scrutinsToJson(scrutinsClean);
406
-
407
293
  var _jsonFilePath4 = _path["default"].join(dataDir, _dataset4.filename.replace(/\.json$/, "_nettoye.json"));
408
-
409
294
  _fs["default"].writeFileSync(_jsonFilePath4, scrutinsCleanJson, {
410
295
  encoding: "utf8"
411
296
  });
@@ -415,11 +300,10 @@ function cleanData(dataDir) {
415
300
  } finally {
416
301
  _iterator11.f();
417
302
  }
418
- } // Restore standard conversion of dates to JSON.
419
-
303
+ }
420
304
 
305
+ // Restore standard conversion of dates to JSON.
421
306
  Date.prototype.toJSON = _dates.existingDateToJson;
422
307
  }
423
-
424
308
  cleanData(options.dataDir);
425
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJvcHRpb25zRGVmaW5pdGlvbnMiLCJhbGlhcyIsImRlZmF1bHRWYWx1ZSIsImhlbHAiLCJtdWx0aXBsZSIsIm5hbWUiLCJ0eXBlIiwiU3RyaW5nIiwiZGVmYXVsdE9wdGlvbiIsIm9wdGlvbnMiLCJjb21tYW5kTGluZUFyZ3MiLCJjbGVhbkRhdGEiLCJkYXRhRGlyIiwiRGF0ZSIsInByb3RvdHlwZSIsInRvSlNPTiIsInBhdGNoZWREYXRlVG9Kc29uIiwiY2F0ZWdvcmllcyIsIm1hcCIsImRhdGFzZXROYW1lIiwiYXNzZXJ0Iiwibm90U3RyaWN0RXF1YWwiLCJFbmFibGVkRGF0YXNldHMiLCJ1bmRlZmluZWQiLCJlbmFibGVkRGF0YXNldHMiLCJyZWR1Y2UiLCJOb25lIiwiQWN0ZXVyc0V0T3JnYW5lcyIsImRhdGFzZXRzIiwiYWN0ZXVyc0V0T3JnYW5lcyIsImRhdGFzZXQiLCJyYXdKc29uRmlsZVBhdGgiLCJwYXRoIiwiam9pbiIsImZpbGVuYW1lIiwiY29uc29sZSIsImxvZyIsInJhd0pzb24iLCJmcyIsInJlYWRGaWxlU3luYyIsImVuY29kaW5nIiwiQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQiLCJ0b0FjdGV1cnNFdE9yZ2FuZXMiLCJvcmdhbmVzIiwib3JnYW5lIiwiYWN0ZXVycyIsImFjdGV1ciIsImNsZWFuQWN0ZXVyIiwiY2xlYW5PcmdhbmUiLCJhY3RldXJzRXRPcmdhbmVzSnNvbiIsIkpTT04iLCJzdHJpbmdpZnkiLCJhY3RldXJzRXRPcmdhbmVzQ2xlYW4iLCJBY3RldXJzRXRPcmdhbmVzQ29udmVydCIsImFjdGV1cnNFdE9yZ2FuZXNDbGVhbkpzb24iLCJhY3RldXJzRXRPcmdhbmVzVG9Kc29uIiwianNvbkZpbGVQYXRoIiwicmVwbGFjZSIsIndyaXRlRmlsZVN5bmMiLCJBZ2VuZGFzIiwiYWdlbmRhcyIsIkFnZW5kYXNSYXdDb252ZXJ0IiwidG9BZ2VuZGFzIiwicmV1bmlvbnMiLCJyZXVuaW9uIiwiY2xlYW5SZXVuaW9uIiwiYWdlbmRhc0pzb24iLCJhZ2VuZGFzQ2xlYW4iLCJBZ2VuZGFzQ29udmVydCIsImFnZW5kYXNDbGVhbkpzb24iLCJhZ2VuZGFzVG9Kc29uIiwiQW1lbmRlbWVudHMiLCJhbWVuZGVtZW50cyIsIkFtZW5kZW1lbnRzUmF3Q29udmVydCIsInRvQW1lbmRlbWVudHMiLCJ0ZXh0ZXNMZWdpc2xhdGlmcyIsInRleHRlc0V0QW1lbmRlbWVudHMiLCJ0ZXh0ZWxlZyIsInRleHRlTGVnaXNsYXRpZiIsImNsZWFuVGV4dGVMZWdpc2xhdGlmIiwiYW1lbmRlbWVudHNKc29uIiwiYW1lbmRlbWVudHNDbGVhbiIsIkFtZW5kZW1lbnRzQ29udmVydCIsImFtZW5kZW1lbnRzQ2xlYW5Kc29uIiwiYW1lbmRlbWVudHNUb0pzb24iLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llcnNMZWdpc2xhdGlmcyIsIkRvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0IiwidG9Eb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9jdW1lbnQiLCJkb3NzaWVyc1BhcmxlbWVudGFpcmVzIiwiZG9zc2llciIsImRvc3NpZXJQYXJsZW1lbnRhaXJlIiwiY2xlYW5Eb2N1bWVudE9yRGl2aXNpb24iLCJjbGVhbkRvc3NpZXJQYXJsZW1lbnRhaXJlIiwiZG9zc2llcnNMZWdpc2xhdGlmc0pzb24iLCJkb3NzaWVyc0xlZ2lzbGF0aWZzQ2xlYW4iLCJEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydCIsImRvc3NpZXJzTGVnaXNsYXRpZnNDbGVhbkpzb24iLCJkb3NzaWVyc0xlZ2lzbGF0aWZzVG9Kc29uIiwiU2NydXRpbnMiLCJzY3J1dGlucyIsIlNjcnV0aW5zUmF3Q29udmVydCIsInRvU2NydXRpbnMiLCJzY3J1dGluIiwiY2xlYW5TY3J1dGluIiwic2NydXRpbnNKc29uIiwic2NydXRpbnNDbGVhbiIsIlNjcnV0aW5zQ29udmVydCIsInNjcnV0aW5zQ2xlYW5Kc29uIiwic2NydXRpbnNUb0pzb24iLCJleGlzdGluZ0RhdGVUb0pzb24iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9jbGVhbl9kYXRhLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5pbXBvcnQgY29tbWFuZExpbmVBcmdzIGZyb20gXCJjb21tYW5kLWxpbmUtYXJnc1wiXG5pbXBvcnQgZnMgZnJvbSBcImZzXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcblxuaW1wb3J0IHsgY2xlYW5BY3RldXIgfSBmcm9tIFwiLi4vY2xlYW5lcnMvYWN0ZXVyc1wiXG5pbXBvcnQgeyBjbGVhblRleHRlTGVnaXNsYXRpZiB9IGZyb20gXCIuLi9jbGVhbmVycy9hbWVuZGVtZW50c1wiXG5pbXBvcnQgeyBjbGVhbkRvY3VtZW50T3JEaXZpc2lvbiB9IGZyb20gXCIuLi9jbGVhbmVycy9kb2N1bWVudHNcIlxuaW1wb3J0IHsgY2xlYW5Eb3NzaWVyUGFybGVtZW50YWlyZSB9IGZyb20gXCIuLi9jbGVhbmVycy9kb3NzaWVyc19sZWdpc2xhdGlmc1wiXG5pbXBvcnQgeyBjbGVhbk9yZ2FuZSB9IGZyb20gXCIuLi9jbGVhbmVycy9vcmdhbmVzXCJcbmltcG9ydCB7IGNsZWFuUmV1bmlvbiB9IGZyb20gXCIuLi9jbGVhbmVycy9yZXVuaW9uc1wiXG5pbXBvcnQgeyBjbGVhblNjcnV0aW4gfSBmcm9tIFwiLi4vY2xlYW5lcnMvc2NydXRpbnNcIlxuaW1wb3J0IHsgZGF0YXNldHMsIEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuLi9kYXRhc2V0c1wiXG5pbXBvcnQgeyBleGlzdGluZ0RhdGVUb0pzb24sIHBhdGNoZWREYXRlVG9Kc29uIH0gZnJvbSBcIi4uL2RhdGVzXCJcbmltcG9ydCB7XG4gIEFjdGV1cnNFdE9yZ2FuZXMsXG4gIENvbnZlcnQgYXMgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQsXG59IGZyb20gXCIuLi90eXBlcy9hY3RldXJzX2V0X29yZ2FuZXNcIlxuaW1wb3J0IHsgQWdlbmRhcywgQ29udmVydCBhcyBBZ2VuZGFzQ29udmVydCB9IGZyb20gXCIuLi90eXBlcy9hZ2VuZGFzXCJcbmltcG9ydCB7XG4gIEFtZW5kZW1lbnRzLFxuICBDb252ZXJ0IGFzIEFtZW5kZW1lbnRzQ29udmVydCxcbn0gZnJvbSBcIi4uL3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7XG4gIERvc3NpZXJzTGVnaXNsYXRpZnMsXG4gIENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQsXG59IGZyb20gXCIuLi90eXBlcy9kb3NzaWVyc19sZWdpc2xhdGlmc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFNjcnV0aW5zQ29udmVydCwgU2NydXRpbnMgfSBmcm9tIFwiLi4vdHlwZXMvc2NydXRpbnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvYWN0ZXVyc19ldF9vcmdhbmVzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQWdlbmRhc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FnZW5kYXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7XG4gIENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQsXG4gIERvc3NpZXIgYXMgRG9zc2llclJhdyxcbn0gZnJvbSBcIi4uL3Jhd190eXBlcy9kb3NzaWVyc19sZWdpc2xhdGlmc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFNjcnV0aW5zUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvc2NydXRpbnNcIlxuXG5jb25zdCBvcHRpb25zRGVmaW5pdGlvbnMgPSBbXG4gIHtcbiAgICBhbGlhczogXCJrXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBbXCJBbGxcIl0sXG4gICAgaGVscDogXCJjYXRlZ29yaWVzIG9mIGRhdGFzZXRzIHRvIHJlb3JnYW5pemVcIixcbiAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICBuYW1lOiBcImNhdGVnb3JpZXNcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBkZWZhdWx0T3B0aW9uOiB0cnVlLFxuICAgIGhlbHA6IFwiZGlyZWN0b3J5IGNvbnRhaW5pbmcgQXNzZW1ibMOpZSBvcGVuIGRhdGEgZmlsZXNcIixcbiAgICBuYW1lOiBcImRhdGFEaXJcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG5dXG5jb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucylcblxuZnVuY3Rpb24gY2xlYW5EYXRhKGRhdGFEaXI6IHN0cmluZyk6IHZvaWQge1xuICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBwYXRjaGVkRGF0ZVRvSnNvblxuXG4gIG9wdGlvbnMuY2F0ZWdvcmllcy5tYXAoKGRhdGFzZXROYW1lOiBzdHJpbmcpID0+XG4gICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgICAgKEVuYWJsZWREYXRhc2V0cyBhcyBhbnkgYXMgeyBbbmFtZTogc3RyaW5nXTogRW5hYmxlZERhdGFzZXRzIH0pW1xuICAgICAgICBkYXRhc2V0TmFtZVxuICAgICAgXSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGBVbmtub3duIG5hbWUgb2YgZGF0YXNldDogJHtkYXRhc2V0TmFtZX1gLFxuICAgICksXG4gIClcbiAgY29uc3QgZW5hYmxlZERhdGFzZXRzID0gb3B0aW9ucy5jYXRlZ29yaWVzLnJlZHVjZShcbiAgICAoZW5hYmxlZERhdGFzZXRzOiBFbmFibGVkRGF0YXNldHMsIGRhdGFzZXROYW1lOiBzdHJpbmcpOiBFbmFibGVkRGF0YXNldHMgPT5cbiAgICAgIGVuYWJsZWREYXRhc2V0cyB8XG4gICAgICAoRW5hYmxlZERhdGFzZXRzIGFzIGFueSBhcyB7IFtuYW1lOiBzdHJpbmddOiBFbmFibGVkRGF0YXNldHMgfSlbXG4gICAgICAgIGRhdGFzZXROYW1lXG4gICAgICBdLFxuICAgIEVuYWJsZWREYXRhc2V0cy5Ob25lLFxuICApXG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICAgIGNvbnN0IHJhd0pzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXQuZmlsZW5hbWUpXG4gICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3Jhd0pzb25GaWxlUGF0aH1gKVxuICAgICAgY29uc3QgcmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHJhd0pzb25GaWxlUGF0aCwge1xuICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBhY3RldXJzRXRPcmdhbmVzOiBhbnkgPVxuICAgICAgICBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydC50b0FjdGV1cnNFdE9yZ2FuZXMocmF3SnNvbilcbiAgICAgIC8vIGNvbnN0IGFjdGV1cnMgPSBqcC5xdWVyeShhY3RldXJzRXRPcmdhbmVzLCBcIiQuZXhwb3J0LmFjdGV1cnMuYWN0ZXVyXCIpWzBdXG4gICAgICBjb25zdCBvcmdhbmVzID0gYWN0ZXVyc0V0T3JnYW5lcy5leHBvcnQub3JnYW5lcy5vcmdhbmVcbiAgICAgIGFjdGV1cnNFdE9yZ2FuZXMub3JnYW5lcyA9IG9yZ2FuZXNcbiAgICAgIGNvbnN0IGFjdGV1cnMgPSBhY3RldXJzRXRPcmdhbmVzLmV4cG9ydC5hY3RldXJzLmFjdGV1clxuICAgICAgYWN0ZXVyc0V0T3JnYW5lcy5hY3RldXJzID0gYWN0ZXVyc1xuICAgICAgZGVsZXRlIGFjdGV1cnNFdE9yZ2FuZXMuZXhwb3J0XG5cbiAgICAgIGZvciAoY29uc3QgYWN0ZXVyIG9mIGFjdGV1cnMpIHtcbiAgICAgICAgY2xlYW5BY3RldXIoYWN0ZXVyKVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IG9yZ2FuZSBvZiBvcmdhbmVzKSB7XG4gICAgICAgIGNsZWFuT3JnYW5lKG9yZ2FuZSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWN0ZXVyc0V0T3JnYW5lc0pzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICBhY3RldXJzRXRPcmdhbmVzLFxuICAgICAgICBudWxsLFxuICAgICAgICAyLFxuICAgICAgKVxuICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICBjb25zdCBhY3RldXJzRXRPcmdhbmVzQ2xlYW46IEFjdGV1cnNFdE9yZ2FuZXMgPVxuICAgICAgICBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b0FjdGV1cnNFdE9yZ2FuZXMoYWN0ZXVyc0V0T3JnYW5lc0pzb24pXG4gICAgICBjb25zdCBhY3RldXJzRXRPcmdhbmVzQ2xlYW5Kc29uOiBzdHJpbmcgPVxuICAgICAgICBBY3RldXJzRXRPcmdhbmVzQ29udmVydC5hY3RldXJzRXRPcmdhbmVzVG9Kc29uKGFjdGV1cnNFdE9yZ2FuZXNDbGVhbilcbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgZnMud3JpdGVGaWxlU3luYyhqc29uRmlsZVBhdGgsIGFjdGV1cnNFdE9yZ2FuZXNDbGVhbkpzb24sIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFnZW5kYXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWdlbmRhcykge1xuICAgICAgY29uc3QgcmF3SnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldC5maWxlbmFtZSlcbiAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7cmF3SnNvbkZpbGVQYXRofWApXG4gICAgICBjb25zdCByYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMocmF3SnNvbkZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IGFnZW5kYXM6IGFueSA9IEFnZW5kYXNSYXdDb252ZXJ0LnRvQWdlbmRhcyhyYXdKc29uKVxuICAgICAgYWdlbmRhcy5yZXVuaW9ucyA9IGFnZW5kYXMucmV1bmlvbnMucmV1bmlvblxuXG4gICAgICBmb3IgKGNvbnN0IHJldW5pb24gb2YgYWdlbmRhcy5yZXVuaW9ucykge1xuICAgICAgICBjbGVhblJldW5pb24ocmV1bmlvbilcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWdlbmRhc0pzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGFnZW5kYXMsIG51bGwsIDIpXG4gICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgIGNvbnN0IGFnZW5kYXNDbGVhbjogQWdlbmRhcyA9IEFnZW5kYXNDb252ZXJ0LnRvQWdlbmRhcyhhZ2VuZGFzSnNvbilcbiAgICAgIGNvbnN0IGFnZW5kYXNDbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgIEFnZW5kYXNDb252ZXJ0LmFnZW5kYXNUb0pzb24oYWdlbmRhc0NsZWFuKVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGpzb25GaWxlUGF0aCwgYWdlbmRhc0NsZWFuSnNvbiwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFtZW5kZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgICBjb25zdCByYXdKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0LmZpbGVuYW1lKVxuICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtyYXdKc29uRmlsZVBhdGh9YClcbiAgICAgIGNvbnN0IHJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhyYXdKc29uRmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcblxuICAgICAgY29uc3QgYW1lbmRlbWVudHM6IGFueSA9IEFtZW5kZW1lbnRzUmF3Q29udmVydC50b0FtZW5kZW1lbnRzKHJhd0pzb24pXG4gICAgICBhbWVuZGVtZW50cy50ZXh0ZXNMZWdpc2xhdGlmcyA9IGFtZW5kZW1lbnRzLnRleHRlc0V0QW1lbmRlbWVudHMudGV4dGVsZWdcbiAgICAgIGRlbGV0ZSBhbWVuZGVtZW50cy50ZXh0ZXNFdEFtZW5kZW1lbnRzXG5cbiAgICAgIGZvciAoY29uc3QgdGV4dGVMZWdpc2xhdGlmIG9mIGFtZW5kZW1lbnRzLnRleHRlc0xlZ2lzbGF0aWZzKSB7XG4gICAgICAgIGNsZWFuVGV4dGVMZWdpc2xhdGlmKHRleHRlTGVnaXNsYXRpZilcbiAgICAgIH1cblxuICAgICAgY29uc3QgYW1lbmRlbWVudHNKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShhbWVuZGVtZW50cywgbnVsbCwgMilcbiAgICAgIC8vIFZhbGlkYXRlIGdlbmVyYXRlZCBKU09OLlxuICAgICAgY29uc3QgYW1lbmRlbWVudHNDbGVhbjogQW1lbmRlbWVudHMgPVxuICAgICAgICBBbWVuZGVtZW50c0NvbnZlcnQudG9BbWVuZGVtZW50cyhhbWVuZGVtZW50c0pzb24pXG4gICAgICBjb25zdCBhbWVuZGVtZW50c0NsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgQW1lbmRlbWVudHNDb252ZXJ0LmFtZW5kZW1lbnRzVG9Kc29uKGFtZW5kZW1lbnRzQ2xlYW4pXG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoanNvbkZpbGVQYXRoLCBhbWVuZGVtZW50c0NsZWFuSnNvbiwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgY29uc3QgcmF3SnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldC5maWxlbmFtZSlcbiAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7cmF3SnNvbkZpbGVQYXRofWApXG4gICAgICBjb25zdCByYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMocmF3SnNvbkZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IGRvc3NpZXJzTGVnaXNsYXRpZnM6IGFueSA9XG4gICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LnRvRG9zc2llcnNMZWdpc2xhdGlmcyhyYXdKc29uKVxuICAgICAgZG9zc2llcnNMZWdpc2xhdGlmcy50ZXh0ZXNMZWdpc2xhdGlmcyA9XG4gICAgICAgIGRvc3NpZXJzTGVnaXNsYXRpZnMuZXhwb3J0LnRleHRlc0xlZ2lzbGF0aWZzLmRvY3VtZW50XG4gICAgICBkb3NzaWVyc0xlZ2lzbGF0aWZzLmRvc3NpZXJzUGFybGVtZW50YWlyZXMgPSAoXG4gICAgICAgIGRvc3NpZXJzTGVnaXNsYXRpZnMuZXhwb3J0LmRvc3NpZXJzTGVnaXNsYXRpZnMuZG9zc2llciBhcyBEb3NzaWVyUmF3W11cbiAgICAgICkubWFwKChkb3NzaWVyKSA9PiBkb3NzaWVyLmRvc3NpZXJQYXJsZW1lbnRhaXJlKVxuICAgICAgZGVsZXRlIGRvc3NpZXJzTGVnaXNsYXRpZnMuZXhwb3J0XG5cbiAgICAgIGZvciAoY29uc3QgZG9jdW1lbnQgb2YgZG9zc2llcnNMZWdpc2xhdGlmcy50ZXh0ZXNMZWdpc2xhdGlmcykge1xuICAgICAgICBjbGVhbkRvY3VtZW50T3JEaXZpc2lvbihkb2N1bWVudClcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZSBvZiBkb3NzaWVyc0xlZ2lzbGF0aWZzLmRvc3NpZXJzUGFybGVtZW50YWlyZXMpIHtcbiAgICAgICAgY2xlYW5Eb3NzaWVyUGFybGVtZW50YWlyZShkb3NzaWVyUGFybGVtZW50YWlyZSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZG9zc2llcnNMZWdpc2xhdGlmc0pzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICBkb3NzaWVyc0xlZ2lzbGF0aWZzLFxuICAgICAgICBudWxsLFxuICAgICAgICAyLFxuICAgICAgKVxuICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICBjb25zdCBkb3NzaWVyc0xlZ2lzbGF0aWZzQ2xlYW46IERvc3NpZXJzTGVnaXNsYXRpZnMgPVxuICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0Rvc3NpZXJzTGVnaXNsYXRpZnMoXG4gICAgICAgICAgZG9zc2llcnNMZWdpc2xhdGlmc0pzb24sXG4gICAgICAgIClcbiAgICAgIGNvbnN0IGRvc3NpZXJzTGVnaXNsYXRpZnNDbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LmRvc3NpZXJzTGVnaXNsYXRpZnNUb0pzb24oXG4gICAgICAgICAgZG9zc2llcnNMZWdpc2xhdGlmc0NsZWFuLFxuICAgICAgICApXG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoanNvbkZpbGVQYXRoLCBkb3NzaWVyc0xlZ2lzbGF0aWZzQ2xlYW5Kc29uLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5TY3J1dGlucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5zY3J1dGlucykge1xuICAgICAgY29uc3QgcmF3SnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldC5maWxlbmFtZSlcbiAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7cmF3SnNvbkZpbGVQYXRofWApXG4gICAgICBjb25zdCByYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMocmF3SnNvbkZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IHNjcnV0aW5zOiBhbnkgPSBTY3J1dGluc1Jhd0NvbnZlcnQudG9TY3J1dGlucyhyYXdKc29uKVxuICAgICAgc2NydXRpbnMuc2NydXRpbnMgPSBzY3J1dGlucy5zY3J1dGlucy5zY3J1dGluXG5cbiAgICAgIGZvciAoY29uc3Qgc2NydXRpbiBvZiBzY3J1dGlucy5zY3J1dGlucykge1xuICAgICAgICBjbGVhblNjcnV0aW4oc2NydXRpbilcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2NydXRpbnNKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShzY3J1dGlucywgbnVsbCwgMilcbiAgICAgIC8vIFZhbGlkYXRlIGdlbmVyYXRlZCBKU09OLlxuICAgICAgY29uc3Qgc2NydXRpbnNDbGVhbjogU2NydXRpbnMgPSBTY3J1dGluc0NvbnZlcnQudG9TY3J1dGlucyhzY3J1dGluc0pzb24pXG4gICAgICBjb25zdCBzY3J1dGluc0NsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgU2NydXRpbnNDb252ZXJ0LnNjcnV0aW5zVG9Kc29uKHNjcnV0aW5zQ2xlYW4pXG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoanNvbkZpbGVQYXRoLCBzY3J1dGluc0NsZWFuSnNvbiwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICB9XG4gIH1cblxuICAvLyBSZXN0b3JlIHN0YW5kYXJkIGNvbnZlcnNpb24gb2YgZGF0ZXMgdG8gSlNPTi5cbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZXhpc3RpbmdEYXRlVG9Kc29uXG59XG5cbmNsZWFuRGF0YShvcHRpb25zLmRhdGFEaXIpXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBSUE7O0FBQ0E7O0FBSUE7O0FBSUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBSUE7Ozs7Ozs7Ozs7QUFFQSxJQUFNQSxrQkFB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
309
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJvcHRpb25zRGVmaW5pdGlvbnMiLCJhbGlhcyIsImRlZmF1bHRWYWx1ZSIsImhlbHAiLCJtdWx0aXBsZSIsIm5hbWUiLCJ0eXBlIiwiU3RyaW5nIiwiZGVmYXVsdE9wdGlvbiIsIm9wdGlvbnMiLCJjb21tYW5kTGluZUFyZ3MiLCJjbGVhbkRhdGEiLCJkYXRhRGlyIiwiRGF0ZSIsInByb3RvdHlwZSIsInRvSlNPTiIsInBhdGNoZWREYXRlVG9Kc29uIiwiY2F0ZWdvcmllcyIsIm1hcCIsImRhdGFzZXROYW1lIiwiYXNzZXJ0Iiwibm90U3RyaWN0RXF1YWwiLCJFbmFibGVkRGF0YXNldHMiLCJ1bmRlZmluZWQiLCJlbmFibGVkRGF0YXNldHMiLCJyZWR1Y2UiLCJOb25lIiwiQWN0ZXVyc0V0T3JnYW5lcyIsImRhdGFzZXRzIiwiYWN0ZXVyc0V0T3JnYW5lcyIsImRhdGFzZXQiLCJyYXdKc29uRmlsZVBhdGgiLCJwYXRoIiwiam9pbiIsImZpbGVuYW1lIiwiY29uc29sZSIsImxvZyIsInJhd0pzb24iLCJmcyIsInJlYWRGaWxlU3luYyIsImVuY29kaW5nIiwiQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQiLCJ0b0FjdGV1cnNFdE9yZ2FuZXMiLCJvcmdhbmVzIiwib3JnYW5lIiwiYWN0ZXVycyIsImFjdGV1ciIsImNsZWFuQWN0ZXVyIiwiY2xlYW5PcmdhbmUiLCJhY3RldXJzRXRPcmdhbmVzSnNvbiIsIkpTT04iLCJzdHJpbmdpZnkiLCJhY3RldXJzRXRPcmdhbmVzQ2xlYW4iLCJBY3RldXJzRXRPcmdhbmVzQ29udmVydCIsImFjdGV1cnNFdE9yZ2FuZXNDbGVhbkpzb24iLCJhY3RldXJzRXRPcmdhbmVzVG9Kc29uIiwianNvbkZpbGVQYXRoIiwicmVwbGFjZSIsIndyaXRlRmlsZVN5bmMiLCJBZ2VuZGFzIiwiYWdlbmRhcyIsIkFnZW5kYXNSYXdDb252ZXJ0IiwidG9BZ2VuZGFzIiwicmV1bmlvbnMiLCJyZXVuaW9uIiwiY2xlYW5SZXVuaW9uIiwiYWdlbmRhc0pzb24iLCJhZ2VuZGFzQ2xlYW4iLCJBZ2VuZGFzQ29udmVydCIsImFnZW5kYXNDbGVhbkpzb24iLCJhZ2VuZGFzVG9Kc29uIiwiQW1lbmRlbWVudHMiLCJhbWVuZGVtZW50cyIsIkFtZW5kZW1lbnRzUmF3Q29udmVydCIsInRvQW1lbmRlbWVudHMiLCJ0ZXh0ZXNMZWdpc2xhdGlmcyIsInRleHRlc0V0QW1lbmRlbWVudHMiLCJ0ZXh0ZWxlZyIsInRleHRlTGVnaXNsYXRpZiIsImNsZWFuVGV4dGVMZWdpc2xhdGlmIiwiYW1lbmRlbWVudHNKc29uIiwiYW1lbmRlbWVudHNDbGVhbiIsIkFtZW5kZW1lbnRzQ29udmVydCIsImFtZW5kZW1lbnRzQ2xlYW5Kc29uIiwiYW1lbmRlbWVudHNUb0pzb24iLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llcnNMZWdpc2xhdGlmcyIsIkRvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0IiwidG9Eb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9jdW1lbnQiLCJkb3NzaWVyc1BhcmxlbWVudGFpcmVzIiwiZG9zc2llciIsImRvc3NpZXJQYXJsZW1lbnRhaXJlIiwiY2xlYW5Eb2N1bWVudE9yRGl2aXNpb24iLCJjbGVhbkRvc3NpZXJQYXJsZW1lbnRhaXJlIiwiZG9zc2llcnNMZWdpc2xhdGlmc0pzb24iLCJkb3NzaWVyc0xlZ2lzbGF0aWZzQ2xlYW4iLCJEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydCIsImRvc3NpZXJzTGVnaXNsYXRpZnNDbGVhbkpzb24iLCJkb3NzaWVyc0xlZ2lzbGF0aWZzVG9Kc29uIiwiU2NydXRpbnMiLCJzY3J1dGlucyIsIlNjcnV0aW5zUmF3Q29udmVydCIsInRvU2NydXRpbnMiLCJzY3J1dGluIiwiY2xlYW5TY3J1dGluIiwic2NydXRpbnNKc29uIiwic2NydXRpbnNDbGVhbiIsIlNjcnV0aW5zQ29udmVydCIsInNjcnV0aW5zQ2xlYW5Kc29uIiwic2NydXRpbnNUb0pzb24iLCJleGlzdGluZ0RhdGVUb0pzb24iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9jbGVhbl9kYXRhLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5pbXBvcnQgY29tbWFuZExpbmVBcmdzIGZyb20gXCJjb21tYW5kLWxpbmUtYXJnc1wiXG5pbXBvcnQgZnMgZnJvbSBcImZzXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcblxuaW1wb3J0IHsgY2xlYW5BY3RldXIgfSBmcm9tIFwiLi4vY2xlYW5lcnMvYWN0ZXVyc1wiXG5pbXBvcnQgeyBjbGVhblRleHRlTGVnaXNsYXRpZiB9IGZyb20gXCIuLi9jbGVhbmVycy9hbWVuZGVtZW50c1wiXG5pbXBvcnQgeyBjbGVhbkRvY3VtZW50T3JEaXZpc2lvbiB9IGZyb20gXCIuLi9jbGVhbmVycy9kb2N1bWVudHNcIlxuaW1wb3J0IHsgY2xlYW5Eb3NzaWVyUGFybGVtZW50YWlyZSB9IGZyb20gXCIuLi9jbGVhbmVycy9kb3NzaWVyc19sZWdpc2xhdGlmc1wiXG5pbXBvcnQgeyBjbGVhbk9yZ2FuZSB9IGZyb20gXCIuLi9jbGVhbmVycy9vcmdhbmVzXCJcbmltcG9ydCB7IGNsZWFuUmV1bmlvbiB9IGZyb20gXCIuLi9jbGVhbmVycy9yZXVuaW9uc1wiXG5pbXBvcnQgeyBjbGVhblNjcnV0aW4gfSBmcm9tIFwiLi4vY2xlYW5lcnMvc2NydXRpbnNcIlxuaW1wb3J0IHsgZGF0YXNldHMsIEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuLi9kYXRhc2V0c1wiXG5pbXBvcnQgeyBleGlzdGluZ0RhdGVUb0pzb24sIHBhdGNoZWREYXRlVG9Kc29uIH0gZnJvbSBcIi4uL2RhdGVzXCJcbmltcG9ydCB7XG4gIEFjdGV1cnNFdE9yZ2FuZXMsXG4gIENvbnZlcnQgYXMgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQsXG59IGZyb20gXCIuLi90eXBlcy9hY3RldXJzX2V0X29yZ2FuZXNcIlxuaW1wb3J0IHsgQWdlbmRhcywgQ29udmVydCBhcyBBZ2VuZGFzQ29udmVydCB9IGZyb20gXCIuLi90eXBlcy9hZ2VuZGFzXCJcbmltcG9ydCB7XG4gIEFtZW5kZW1lbnRzLFxuICBDb252ZXJ0IGFzIEFtZW5kZW1lbnRzQ29udmVydCxcbn0gZnJvbSBcIi4uL3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7XG4gIERvc3NpZXJzTGVnaXNsYXRpZnMsXG4gIENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQsXG59IGZyb20gXCIuLi90eXBlcy9kb3NzaWVyc19sZWdpc2xhdGlmc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFNjcnV0aW5zQ29udmVydCwgU2NydXRpbnMgfSBmcm9tIFwiLi4vdHlwZXMvc2NydXRpbnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvYWN0ZXVyc19ldF9vcmdhbmVzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQWdlbmRhc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FnZW5kYXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7XG4gIENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQsXG4gIERvc3NpZXIgYXMgRG9zc2llclJhdyxcbn0gZnJvbSBcIi4uL3Jhd190eXBlcy9kb3NzaWVyc19sZWdpc2xhdGlmc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFNjcnV0aW5zUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvc2NydXRpbnNcIlxuXG5jb25zdCBvcHRpb25zRGVmaW5pdGlvbnMgPSBbXG4gIHtcbiAgICBhbGlhczogXCJrXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBbXCJBbGxcIl0sXG4gICAgaGVscDogXCJjYXRlZ29yaWVzIG9mIGRhdGFzZXRzIHRvIHJlb3JnYW5pemVcIixcbiAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICBuYW1lOiBcImNhdGVnb3JpZXNcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBkZWZhdWx0T3B0aW9uOiB0cnVlLFxuICAgIGhlbHA6IFwiZGlyZWN0b3J5IGNvbnRhaW5pbmcgQXNzZW1ibMOpZSBvcGVuIGRhdGEgZmlsZXNcIixcbiAgICBuYW1lOiBcImRhdGFEaXJcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG5dXG5jb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucylcblxuZnVuY3Rpb24gY2xlYW5EYXRhKGRhdGFEaXI6IHN0cmluZyk6IHZvaWQge1xuICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBwYXRjaGVkRGF0ZVRvSnNvblxuXG4gIG9wdGlvbnMuY2F0ZWdvcmllcy5tYXAoKGRhdGFzZXROYW1lOiBzdHJpbmcpID0+XG4gICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgICAgKEVuYWJsZWREYXRhc2V0cyBhcyBhbnkgYXMgeyBbbmFtZTogc3RyaW5nXTogRW5hYmxlZERhdGFzZXRzIH0pW1xuICAgICAgICBkYXRhc2V0TmFtZVxuICAgICAgXSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGBVbmtub3duIG5hbWUgb2YgZGF0YXNldDogJHtkYXRhc2V0TmFtZX1gLFxuICAgICksXG4gIClcbiAgY29uc3QgZW5hYmxlZERhdGFzZXRzID0gb3B0aW9ucy5jYXRlZ29yaWVzLnJlZHVjZShcbiAgICAoZW5hYmxlZERhdGFzZXRzOiBFbmFibGVkRGF0YXNldHMsIGRhdGFzZXROYW1lOiBzdHJpbmcpOiBFbmFibGVkRGF0YXNldHMgPT5cbiAgICAgIGVuYWJsZWREYXRhc2V0cyB8XG4gICAgICAoRW5hYmxlZERhdGFzZXRzIGFzIGFueSBhcyB7IFtuYW1lOiBzdHJpbmddOiBFbmFibGVkRGF0YXNldHMgfSlbXG4gICAgICAgIGRhdGFzZXROYW1lXG4gICAgICBdLFxuICAgIEVuYWJsZWREYXRhc2V0cy5Ob25lLFxuICApXG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICAgIGNvbnN0IHJhd0pzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXQuZmlsZW5hbWUpXG4gICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3Jhd0pzb25GaWxlUGF0aH1gKVxuICAgICAgY29uc3QgcmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHJhd0pzb25GaWxlUGF0aCwge1xuICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBhY3RldXJzRXRPcmdhbmVzOiBhbnkgPVxuICAgICAgICBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydC50b0FjdGV1cnNFdE9yZ2FuZXMocmF3SnNvbilcbiAgICAgIC8vIGNvbnN0IGFjdGV1cnMgPSBqcC5xdWVyeShhY3RldXJzRXRPcmdhbmVzLCBcIiQuZXhwb3J0LmFjdGV1cnMuYWN0ZXVyXCIpWzBdXG4gICAgICBjb25zdCBvcmdhbmVzID0gYWN0ZXVyc0V0T3JnYW5lcy5leHBvcnQub3JnYW5lcy5vcmdhbmVcbiAgICAgIGFjdGV1cnNFdE9yZ2FuZXMub3JnYW5lcyA9IG9yZ2FuZXNcbiAgICAgIGNvbnN0IGFjdGV1cnMgPSBhY3RldXJzRXRPcmdhbmVzLmV4cG9ydC5hY3RldXJzLmFjdGV1clxuICAgICAgYWN0ZXVyc0V0T3JnYW5lcy5hY3RldXJzID0gYWN0ZXVyc1xuICAgICAgZGVsZXRlIGFjdGV1cnNFdE9yZ2FuZXMuZXhwb3J0XG5cbiAgICAgIGZvciAoY29uc3QgYWN0ZXVyIG9mIGFjdGV1cnMpIHtcbiAgICAgICAgY2xlYW5BY3RldXIoYWN0ZXVyKVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IG9yZ2FuZSBvZiBvcmdhbmVzKSB7XG4gICAgICAgIGNsZWFuT3JnYW5lKG9yZ2FuZSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWN0ZXVyc0V0T3JnYW5lc0pzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICBhY3RldXJzRXRPcmdhbmVzLFxuICAgICAgICBudWxsLFxuICAgICAgICAyLFxuICAgICAgKVxuICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICBjb25zdCBhY3RldXJzRXRPcmdhbmVzQ2xlYW46IEFjdGV1cnNFdE9yZ2FuZXMgPVxuICAgICAgICBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b0FjdGV1cnNFdE9yZ2FuZXMoYWN0ZXVyc0V0T3JnYW5lc0pzb24pXG4gICAgICBjb25zdCBhY3RldXJzRXRPcmdhbmVzQ2xlYW5Kc29uOiBzdHJpbmcgPVxuICAgICAgICBBY3RldXJzRXRPcmdhbmVzQ29udmVydC5hY3RldXJzRXRPcmdhbmVzVG9Kc29uKGFjdGV1cnNFdE9yZ2FuZXNDbGVhbilcbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgZnMud3JpdGVGaWxlU3luYyhqc29uRmlsZVBhdGgsIGFjdGV1cnNFdE9yZ2FuZXNDbGVhbkpzb24sIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFnZW5kYXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWdlbmRhcykge1xuICAgICAgY29uc3QgcmF3SnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldC5maWxlbmFtZSlcbiAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7cmF3SnNvbkZpbGVQYXRofWApXG4gICAgICBjb25zdCByYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMocmF3SnNvbkZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IGFnZW5kYXM6IGFueSA9IEFnZW5kYXNSYXdDb252ZXJ0LnRvQWdlbmRhcyhyYXdKc29uKVxuICAgICAgYWdlbmRhcy5yZXVuaW9ucyA9IGFnZW5kYXMucmV1bmlvbnMucmV1bmlvblxuXG4gICAgICBmb3IgKGNvbnN0IHJldW5pb24gb2YgYWdlbmRhcy5yZXVuaW9ucykge1xuICAgICAgICBjbGVhblJldW5pb24ocmV1bmlvbilcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWdlbmRhc0pzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGFnZW5kYXMsIG51bGwsIDIpXG4gICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgIGNvbnN0IGFnZW5kYXNDbGVhbjogQWdlbmRhcyA9IEFnZW5kYXNDb252ZXJ0LnRvQWdlbmRhcyhhZ2VuZGFzSnNvbilcbiAgICAgIGNvbnN0IGFnZW5kYXNDbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgIEFnZW5kYXNDb252ZXJ0LmFnZW5kYXNUb0pzb24oYWdlbmRhc0NsZWFuKVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGpzb25GaWxlUGF0aCwgYWdlbmRhc0NsZWFuSnNvbiwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFtZW5kZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgICBjb25zdCByYXdKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0LmZpbGVuYW1lKVxuICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtyYXdKc29uRmlsZVBhdGh9YClcbiAgICAgIGNvbnN0IHJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhyYXdKc29uRmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcblxuICAgICAgY29uc3QgYW1lbmRlbWVudHM6IGFueSA9IEFtZW5kZW1lbnRzUmF3Q29udmVydC50b0FtZW5kZW1lbnRzKHJhd0pzb24pXG4gICAgICBhbWVuZGVtZW50cy50ZXh0ZXNMZWdpc2xhdGlmcyA9IGFtZW5kZW1lbnRzLnRleHRlc0V0QW1lbmRlbWVudHMudGV4dGVsZWdcbiAgICAgIGRlbGV0ZSBhbWVuZGVtZW50cy50ZXh0ZXNFdEFtZW5kZW1lbnRzXG5cbiAgICAgIGZvciAoY29uc3QgdGV4dGVMZWdpc2xhdGlmIG9mIGFtZW5kZW1lbnRzLnRleHRlc0xlZ2lzbGF0aWZzKSB7XG4gICAgICAgIGNsZWFuVGV4dGVMZWdpc2xhdGlmKHRleHRlTGVnaXNsYXRpZilcbiAgICAgIH1cblxuICAgICAgY29uc3QgYW1lbmRlbWVudHNKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShhbWVuZGVtZW50cywgbnVsbCwgMilcbiAgICAgIC8vIFZhbGlkYXRlIGdlbmVyYXRlZCBKU09OLlxuICAgICAgY29uc3QgYW1lbmRlbWVudHNDbGVhbjogQW1lbmRlbWVudHMgPVxuICAgICAgICBBbWVuZGVtZW50c0NvbnZlcnQudG9BbWVuZGVtZW50cyhhbWVuZGVtZW50c0pzb24pXG4gICAgICBjb25zdCBhbWVuZGVtZW50c0NsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgQW1lbmRlbWVudHNDb252ZXJ0LmFtZW5kZW1lbnRzVG9Kc29uKGFtZW5kZW1lbnRzQ2xlYW4pXG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoanNvbkZpbGVQYXRoLCBhbWVuZGVtZW50c0NsZWFuSnNvbiwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgY29uc3QgcmF3SnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldC5maWxlbmFtZSlcbiAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7cmF3SnNvbkZpbGVQYXRofWApXG4gICAgICBjb25zdCByYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMocmF3SnNvbkZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IGRvc3NpZXJzTGVnaXNsYXRpZnM6IGFueSA9XG4gICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LnRvRG9zc2llcnNMZWdpc2xhdGlmcyhyYXdKc29uKVxuICAgICAgZG9zc2llcnNMZWdpc2xhdGlmcy50ZXh0ZXNMZWdpc2xhdGlmcyA9XG4gICAgICAgIGRvc3NpZXJzTGVnaXNsYXRpZnMuZXhwb3J0LnRleHRlc0xlZ2lzbGF0aWZzLmRvY3VtZW50XG4gICAgICBkb3NzaWVyc0xlZ2lzbGF0aWZzLmRvc3NpZXJzUGFybGVtZW50YWlyZXMgPSAoXG4gICAgICAgIGRvc3NpZXJzTGVnaXNsYXRpZnMuZXhwb3J0LmRvc3NpZXJzTGVnaXNsYXRpZnMuZG9zc2llciBhcyBEb3NzaWVyUmF3W11cbiAgICAgICkubWFwKChkb3NzaWVyKSA9PiBkb3NzaWVyLmRvc3NpZXJQYXJsZW1lbnRhaXJlKVxuICAgICAgZGVsZXRlIGRvc3NpZXJzTGVnaXNsYXRpZnMuZXhwb3J0XG5cbiAgICAgIGZvciAoY29uc3QgZG9jdW1lbnQgb2YgZG9zc2llcnNMZWdpc2xhdGlmcy50ZXh0ZXNMZWdpc2xhdGlmcykge1xuICAgICAgICBjbGVhbkRvY3VtZW50T3JEaXZpc2lvbihkb2N1bWVudClcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZSBvZiBkb3NzaWVyc0xlZ2lzbGF0aWZzLmRvc3NpZXJzUGFybGVtZW50YWlyZXMpIHtcbiAgICAgICAgY2xlYW5Eb3NzaWVyUGFybGVtZW50YWlyZShkb3NzaWVyUGFybGVtZW50YWlyZSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZG9zc2llcnNMZWdpc2xhdGlmc0pzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICBkb3NzaWVyc0xlZ2lzbGF0aWZzLFxuICAgICAgICBudWxsLFxuICAgICAgICAyLFxuICAgICAgKVxuICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICBjb25zdCBkb3NzaWVyc0xlZ2lzbGF0aWZzQ2xlYW46IERvc3NpZXJzTGVnaXNsYXRpZnMgPVxuICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0Rvc3NpZXJzTGVnaXNsYXRpZnMoXG4gICAgICAgICAgZG9zc2llcnNMZWdpc2xhdGlmc0pzb24sXG4gICAgICAgIClcbiAgICAgIGNvbnN0IGRvc3NpZXJzTGVnaXNsYXRpZnNDbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LmRvc3NpZXJzTGVnaXNsYXRpZnNUb0pzb24oXG4gICAgICAgICAgZG9zc2llcnNMZWdpc2xhdGlmc0NsZWFuLFxuICAgICAgICApXG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoanNvbkZpbGVQYXRoLCBkb3NzaWVyc0xlZ2lzbGF0aWZzQ2xlYW5Kc29uLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5TY3J1dGlucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5zY3J1dGlucykge1xuICAgICAgY29uc3QgcmF3SnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldC5maWxlbmFtZSlcbiAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7cmF3SnNvbkZpbGVQYXRofWApXG4gICAgICBjb25zdCByYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMocmF3SnNvbkZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IHNjcnV0aW5zOiBhbnkgPSBTY3J1dGluc1Jhd0NvbnZlcnQudG9TY3J1dGlucyhyYXdKc29uKVxuICAgICAgc2NydXRpbnMuc2NydXRpbnMgPSBzY3J1dGlucy5zY3J1dGlucy5zY3J1dGluXG5cbiAgICAgIGZvciAoY29uc3Qgc2NydXRpbiBvZiBzY3J1dGlucy5zY3J1dGlucykge1xuICAgICAgICBjbGVhblNjcnV0aW4oc2NydXRpbilcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2NydXRpbnNKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShzY3J1dGlucywgbnVsbCwgMilcbiAgICAgIC8vIFZhbGlkYXRlIGdlbmVyYXRlZCBKU09OLlxuICAgICAgY29uc3Qgc2NydXRpbnNDbGVhbjogU2NydXRpbnMgPSBTY3J1dGluc0NvbnZlcnQudG9TY3J1dGlucyhzY3J1dGluc0pzb24pXG4gICAgICBjb25zdCBzY3J1dGluc0NsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgU2NydXRpbnNDb252ZXJ0LnNjcnV0aW5zVG9Kc29uKHNjcnV0aW5zQ2xlYW4pXG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoanNvbkZpbGVQYXRoLCBzY3J1dGluc0NsZWFuSnNvbiwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICB9XG4gIH1cblxuICAvLyBSZXN0b3JlIHN0YW5kYXJkIGNvbnZlcnNpb24gb2YgZGF0ZXMgdG8gSlNPTi5cbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZXhpc3RpbmdEYXRlVG9Kc29uXG59XG5cbmNsZWFuRGF0YShvcHRpb25zLmRhdGFEaXIpXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFJQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUFxRTtBQUFBO0FBQUE7QUFBQTtBQUVyRSxJQUFNQSxrQkFBa0IsR0FBRyxDQUN6QjtFQUNFQyxLQUFLLEVB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