@cichol/logger 4.5.0 → 4.6.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 (39) hide show
  1. package/dists/index.cjs +74 -78
  2. package/dists/index.d.cts +210 -1
  3. package/dists/index.d.ts +210 -1
  4. package/dists/index.js +60 -64
  5. package/package.json +5 -9
  6. package/dists/classes/logger.d.cts +0 -32
  7. package/dists/classes/logger.d.ts +0 -32
  8. package/dists/formatters/command-line.d.cts +0 -2
  9. package/dists/formatters/command-line.d.ts +0 -2
  10. package/dists/formatters/morgan.d.cts +0 -7
  11. package/dists/formatters/morgan.d.ts +0 -7
  12. package/dists/handlers/debug.d.cts +0 -5
  13. package/dists/handlers/debug.d.ts +0 -5
  14. package/dists/handlers/error.d.cts +0 -13
  15. package/dists/handlers/error.d.ts +0 -13
  16. package/dists/handlers/fatal.d.cts +0 -4
  17. package/dists/handlers/fatal.d.ts +0 -4
  18. package/dists/handlers/http.d.cts +0 -5
  19. package/dists/handlers/http.d.ts +0 -5
  20. package/dists/handlers/index.d.cts +0 -12
  21. package/dists/handlers/index.d.ts +0 -12
  22. package/dists/handlers/info.d.cts +0 -5
  23. package/dists/handlers/info.d.ts +0 -5
  24. package/dists/handlers/notice.d.cts +0 -5
  25. package/dists/handlers/notice.d.ts +0 -5
  26. package/dists/handlers/query.d.cts +0 -13
  27. package/dists/handlers/query.d.ts +0 -13
  28. package/dists/handlers/verbose.d.cts +0 -5
  29. package/dists/handlers/verbose.d.ts +0 -5
  30. package/dists/handlers/warning.d.cts +0 -5
  31. package/dists/handlers/warning.d.ts +0 -5
  32. package/dists/helpers/color-scheme.d.cts +0 -12
  33. package/dists/helpers/color-scheme.d.ts +0 -12
  34. package/dists/helpers/constants.d.cts +0 -18
  35. package/dists/helpers/constants.d.ts +0 -18
  36. package/dists/helpers/label-decorator.d.cts +0 -2
  37. package/dists/helpers/label-decorator.d.ts +0 -2
  38. package/dists/helpers/logging-level.d.cts +0 -13
  39. package/dists/helpers/logging-level.d.ts +0 -13
package/dists/index.cjs CHANGED
@@ -29,20 +29,20 @@ var cluster = require('cluster');
29
29
  require('worker_threads');
30
30
 
31
31
  function _interopNamespaceDefault(e) {
32
- var n = Object.create(null);
33
- if (e) {
34
- Object.keys(e).forEach(function (k) {
35
- if (k !== 'default') {
36
- var d = Object.getOwnPropertyDescriptor(e, k);
37
- Object.defineProperty(n, k, d.get ? d : {
38
- enumerable: true,
39
- get: function () { return e[k]; }
40
- });
41
- }
42
- });
43
- }
44
- n.default = e;
45
- return Object.freeze(n);
32
+ var n = Object.create(null);
33
+ if (e) {
34
+ Object.keys(e).forEach(function (k) {
35
+ if (k !== 'default') {
36
+ var d = Object.getOwnPropertyDescriptor(e, k);
37
+ Object.defineProperty(n, k, d.get ? d : {
38
+ enumerable: true,
39
+ get: function () { return e[k]; }
40
+ });
41
+ }
42
+ });
43
+ }
44
+ n.default = e;
45
+ return Object.freeze(n);
46
46
  }
47
47
 
48
48
  var winston__namespace = /*#__PURE__*/_interopNamespaceDefault(winston);
@@ -118,8 +118,6 @@ function getChalkOf(colorSet) {
118
118
  return colorizerMap.get(colorSet) ?? chalk;
119
119
  }
120
120
 
121
- /* eslint-enable no-use-before-define */
122
-
123
121
  // Node.js built-in APIs.
124
122
 
125
123
  // Constants.
@@ -128,9 +126,7 @@ const {
128
126
  } = process.stdout;
129
127
  const isNotOnCLI = !isTTY;
130
128
  function decorateLabel(label, scheme) {
131
- if (isNotOnCLI) {
132
- return label;
133
- }
129
+ if (isNotOnCLI) return label;
134
130
  const chalk = getChalkOf(scheme);
135
131
  const decoratedLabel = chalk.bold(` ${label} `);
136
132
  return decoratedLabel;
@@ -150,8 +146,7 @@ const label$8 = decorateLabel('ERROR', ColorScheme.Critical);
150
146
  function mapLocationOfErrorThrown(filename) {
151
147
  let target = path.relative(rootPath, filename);
152
148
  if (_startsWithInstanceProperty(target).call(target, 'node_modules')) {
153
- target = chalk.gray(target).replace(/node_modules[\\/]([^\\/]+)(.*)/, (matches, moduleName, trailing) => `node_modules${path.sep}${chalk.bold.underline(moduleName)}${chalk.gray(trailing)}` // eslint-disable-line max-len
154
- );
149
+ target = chalk.gray(target).replace(/node_modules[\\/]([^\\/]+)(.*)/, (matches, moduleName, trailing) => `node_modules${path.sep}${chalk.bold.underline(moduleName)}${chalk.gray(trailing)}`);
155
150
  } else {
156
151
  target = `${chalk.gray(path.dirname(target) + path.sep)}${chalk.bold.underline(path.basename(target))}`;
157
152
  }
@@ -166,40 +161,40 @@ function handle$1(data) {
166
161
  return undefined;
167
162
  }
168
163
  const {
169
- name,
164
+ name: errorName,
170
165
  message,
171
166
  stack: rawStack = ''
172
167
  } = error;
173
- const stack = _mapInstanceProperty(_context = _mapInstanceProperty(_context2 = _mapInstanceProperty(_context3 = _sliceInstanceProperty(rawStack).call(rawStack, name.length + message.length + 3).split('\n')).call(_context3, line => line.replace(/^\s+at /g, ''))).call(_context2, line => path.isAbsolute(line) ? `<anonymous>${conjunction}${mapLocationOfErrorThrown(line)}` : line)).call(_context, line => line.replace(/^(.+) \((.+)\)$/, (matches, contextName, rawLocation) => {
174
- let location;
168
+ const stack = _mapInstanceProperty(_context = _mapInstanceProperty(_context2 = _mapInstanceProperty(_context3 = _sliceInstanceProperty(rawStack).call(rawStack, errorName.length + message.length + 3).split('\n')).call(_context3, line => line.replace(/^\s+at /g, ''))).call(_context2, line => path.isAbsolute(line) ? `<anonymous>${conjunction}${mapLocationOfErrorThrown(line)}` : line)).call(_context, line => line.replace(/^(.+) \((.+)\)$/, (matches, contextName, rawLocation) => {
169
+ let location = '';
175
170
  if (rawLocation === '<anonymous>') {
176
171
  location = chalk.gray(rawLocation);
177
172
  } else {
178
- const [filename, line, column] = rawLocation.split(':');
173
+ const [filename, occurredLine, occurredColumn] = rawLocation.split(':');
179
174
  if (path.isAbsolute(filename)) {
180
175
  const target = mapLocationOfErrorThrown(path.relative(rootPath, filename));
181
- const trailing = chalk.gray(`:${line}:${column}`);
176
+ const trailing = chalk.gray(`:${occurredLine}:${occurredColumn}`);
182
177
  location = target + trailing;
183
- } else {
184
- location = chalk.gray(`https://github.com/${chalk.bold.underline('nodejs')}/node/blob/${process.version}/lib/${filename}#L${line}`); // eslint-disable-line max-len
178
+ } else if (!_startsWithInstanceProperty(filename).call(filename, 'data:')) {
179
+ location = chalk.gray(`https://github.com/${chalk.bold.underline('nodejs')}/node/blob/${process.version}/lib/${filename}#L${occurredLine}`);
185
180
  }
186
181
  }
187
182
  return `${contextName}${conjunction}${location}`;
188
183
  })).join('\n');
189
- const label = decorateLabel(name, ColorScheme.Critical);
184
+ const decoratedLabel = decorateLabel(errorName, ColorScheme.Critical);
190
185
  const payload = `${message}\n\n${stack}\n`;
191
186
  return {
192
- label,
187
+ label: decoratedLabel,
193
188
  payload
194
189
  };
195
190
  }
196
191
 
197
192
  var ErrorHandler = /*#__PURE__*/Object.freeze({
198
- __proto__: null,
199
- default: handle$1,
200
- label: label$8,
201
- level: level$8,
202
- name: name$8
193
+ __proto__: null,
194
+ default: handle$1,
195
+ label: label$8,
196
+ level: level$8,
197
+ name: name$8
203
198
  });
204
199
 
205
200
  // Local helpers.
@@ -208,13 +203,14 @@ var ErrorHandler = /*#__PURE__*/Object.freeze({
208
203
  const name$7 = 'fatal';
209
204
  const level$7 = LoggingLevel.Fatal;
210
205
  const label$7 = decorateLabel('FATAL', ColorScheme.Critical);
206
+ // eslint-disable-line no-restricted-exports
211
207
 
212
208
  var FatalHandler = /*#__PURE__*/Object.freeze({
213
- __proto__: null,
214
- default: handle$1,
215
- label: label$7,
216
- level: level$7,
217
- name: name$7
209
+ __proto__: null,
210
+ default: handle$1,
211
+ label: label$7,
212
+ level: level$7,
213
+ name: name$7
218
214
  });
219
215
 
220
216
  // Local helpers.
@@ -226,11 +222,11 @@ const label$6 = decorateLabel('WARNING', ColorScheme.Warning);
226
222
  var warning = null;
227
223
 
228
224
  var WarningHandler = /*#__PURE__*/Object.freeze({
229
- __proto__: null,
230
- default: warning,
231
- label: label$6,
232
- level: level$6,
233
- name: name$6
225
+ __proto__: null,
226
+ default: warning,
227
+ label: label$6,
228
+ level: level$6,
229
+ name: name$6
234
230
  });
235
231
 
236
232
  // Local helpers.
@@ -242,11 +238,11 @@ const label$5 = decorateLabel('NOTICE', ColorScheme.Regular);
242
238
  var notice = null;
243
239
 
244
240
  var NoticeHandler = /*#__PURE__*/Object.freeze({
245
- __proto__: null,
246
- default: notice,
247
- label: label$5,
248
- level: level$5,
249
- name: name$5
241
+ __proto__: null,
242
+ default: notice,
243
+ label: label$5,
244
+ level: level$5,
245
+ name: name$5
250
246
  });
251
247
 
252
248
  // Local helpers.
@@ -258,11 +254,11 @@ const label$4 = decorateLabel('INFO', ColorScheme.Regular);
258
254
  var info = null;
259
255
 
260
256
  var InfoHandler = /*#__PURE__*/Object.freeze({
261
- __proto__: null,
262
- default: info,
263
- label: label$4,
264
- level: level$4,
265
- name: name$4
257
+ __proto__: null,
258
+ default: info,
259
+ label: label$4,
260
+ level: level$4,
261
+ name: name$4
266
262
  });
267
263
 
268
264
  // Local helpers.
@@ -274,11 +270,11 @@ const label$3 = decorateLabel('HTTP', ColorScheme.Http);
274
270
  var http = null;
275
271
 
276
272
  var HttpHandler = /*#__PURE__*/Object.freeze({
277
- __proto__: null,
278
- default: http,
279
- label: label$3,
280
- level: level$3,
281
- name: name$3
273
+ __proto__: null,
274
+ default: http,
275
+ label: label$3,
276
+ level: level$3,
277
+ name: name$3
282
278
  });
283
279
 
284
280
  // Highlight.js
@@ -300,11 +296,11 @@ function handle(data) {
300
296
  }
301
297
 
302
298
  var QueryHandler = /*#__PURE__*/Object.freeze({
303
- __proto__: null,
304
- default: handle,
305
- label: label$2,
306
- level: level$2,
307
- name: name$2
299
+ __proto__: null,
300
+ default: handle,
301
+ label: label$2,
302
+ level: level$2,
303
+ name: name$2
308
304
  });
309
305
 
310
306
  // Local helpers.
@@ -316,11 +312,11 @@ const label$1 = decorateLabel('VERBOSE', ColorScheme.Loud);
316
312
  var verbose = null;
317
313
 
318
314
  var VerboseHandler = /*#__PURE__*/Object.freeze({
319
- __proto__: null,
320
- default: verbose,
321
- label: label$1,
322
- level: level$1,
323
- name: name$1
315
+ __proto__: null,
316
+ default: verbose,
317
+ label: label$1,
318
+ level: level$1,
319
+ name: name$1
324
320
  });
325
321
 
326
322
  // Local helpers.
@@ -332,11 +328,11 @@ const label = decorateLabel('DEBUG', ColorScheme.Loud);
332
328
  var debug = null;
333
329
 
334
330
  var DebugHandler = /*#__PURE__*/Object.freeze({
335
- __proto__: null,
336
- default: debug,
337
- label: label,
338
- level: level,
339
- name: name
331
+ __proto__: null,
332
+ default: debug,
333
+ label: label,
334
+ level: level,
335
+ name: name
340
336
  });
341
337
 
342
338
  // Handler implementations.
@@ -511,12 +507,12 @@ class Logger {
511
507
 
512
508
  log(...args) {
513
509
  const logger = this.#logger;
514
- const morgan = this.#morgan;
510
+ const format = this.#morgan;
515
511
  switch (true) {
516
512
  case args.length >= 2 && args[0] instanceof http$1.IncomingMessage && args[1] instanceof http$1.ServerResponse:
517
513
  {
518
514
  const [request, response] = args;
519
- return Promise$1.fromCallback(callback => morgan(request, response, callback));
515
+ return Promise$1.fromCallback(callback => format(request, response, callback));
520
516
  }
521
517
  case args.length >= 1 && args[0] instanceof Error:
522
518
  {
@@ -540,4 +536,4 @@ class Logger {
540
536
  var logger = Logger.instance;
541
537
 
542
538
  module.exports = logger;
543
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzIiwic291cmNlcyI6WyIuLi9zb3VyY2VzL2hlbHBlcnMvbG9nZ2luZy1sZXZlbC50cyIsIi4uL3NvdXJjZXMvaGVscGVycy9jb2xvci1zY2hlbWUudHMiLCIuLi9zb3VyY2VzL2hlbHBlcnMvbGFiZWwtZGVjb3JhdG9yLnRzIiwiLi4vc291cmNlcy9oYW5kbGVycy9lcnJvci50cyIsIi4uL3NvdXJjZXMvaGFuZGxlcnMvZmF0YWwudHMiLCIuLi9zb3VyY2VzL2hhbmRsZXJzL3dhcm5pbmcudHMiLCIuLi9zb3VyY2VzL2hhbmRsZXJzL25vdGljZS50cyIsIi4uL3NvdXJjZXMvaGFuZGxlcnMvaW5mby50cyIsIi4uL3NvdXJjZXMvaGFuZGxlcnMvaHR0cC50cyIsIi4uL3NvdXJjZXMvaGFuZGxlcnMvcXVlcnkudHMiLCIuLi9zb3VyY2VzL2hhbmRsZXJzL3ZlcmJvc2UudHMiLCIuLi9zb3VyY2VzL2hhbmRsZXJzL2RlYnVnLnRzIiwiLi4vc291cmNlcy9oYW5kbGVycy9pbmRleC50cyIsIi4uL3NvdXJjZXMvZm9ybWF0dGVycy9jb21tYW5kLWxpbmUudHMiLCIuLi9zb3VyY2VzL2hlbHBlcnMvY29uc3RhbnRzLnRzIiwiLi4vc291cmNlcy9mb3JtYXR0ZXJzL21vcmdhbi50cyIsIi4uL3NvdXJjZXMvY2xhc3Nlcy9sb2dnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgTG9nZ2luZ0xldmVsID0ge1xuICAgIC8vIENyaXRpY2FsIGxldmVscy4gKEl0IHdpbGwgY3Jhc2ggdGhlIHByb2Nlc3MpXG4gICAgRmF0YWw6IDAsXG4gICAgRXJyb3I6IDEsXG5cbiAgICAvLyBXYXJuaW5nIGxldmVscy4gKEl0IGp1c3QgcmVwb3J0IHdhcm5pbmcgaW5mb3JtYXRpb24sIG5vdCBjcmFzaCB0aGUgcHJvY2VzcylcbiAgICBXYXJuaW5nOiAyLFxuXG4gICAgLy8gUmVndWxhciBsZXZlbCBhbmQgYWxpYXNlcy5cbiAgICBOb3RpY2U6IDMsXG4gICAgSW5mbzogMyxcblxuICAgIC8vIE1heWJlIHNlbnNpdGl2ZSBsZXZlbHMuIChJbiBnZW5lcmFsLCBkb2VzIG5vdCB1c2VmdWwpXG4gICAgSHR0cDogNCxcbiAgICBRdWVyeTogNCxcblxuICAgIC8vIExvdWQgbGV2ZWxzLlxuICAgIFZlcmJvc2U6IDUsXG4gICAgRGVidWc6IDVcbn0gYXMgY29uc3Q7XG5cbnR5cGUgTG9nZ2luZ0xldmVsID0gdHlwZW9mIExvZ2dpbmdMZXZlbFtrZXlvZiB0eXBlb2YgTG9nZ2luZ0xldmVsXTtcblxuZXhwb3J0IGRlZmF1bHQgTG9nZ2luZ0xldmVsO1xuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cblxuLy8gVGhpcmQtcGFydHkgbW9kdWxlcy5cbmltcG9ydCBjaGFsaywgeyB0eXBlIENoYWxrSW5zdGFuY2UgfSBmcm9tICdjaGFsayc7XG5cbi8vIENvbnN0YW50cy5cbmNvbnN0IGNvbG9yaXplck1hcCA9IG5ldyBNYXA8bnVtYmVyLCBDaGFsa0luc3RhbmNlPigpO1xuXG4vLyBIZWxwZXJzLlxuZnVuY3Rpb24gY3JlYXRlU2NoZW1lKG9wdGlvbnM6IHsgYmFja2dyb3VuZDogQ29sb3JWYWx1ZSwgZm9yZWdyb3VuZDogQ29sb3JWYWx1ZSB9KTogbnVtYmVyIHtcbiAgICBjb25zdCBuZXh0SW5kZXggPSBjb2xvcml6ZXJNYXAuc2l6ZTtcbiAgICBjb25zdCBjb2xvcml6ZXIgPSBjaGFsay5iZ0hleChvcHRpb25zLmJhY2tncm91bmQpLmhleChvcHRpb25zLmZvcmVncm91bmQpO1xuXG4gICAgY29sb3JpemVyTWFwLnNldChuZXh0SW5kZXgsIGNvbG9yaXplcik7XG5cbiAgICByZXR1cm4gbmV4dEluZGV4O1xufVxuXG4vLyBDb2xvciBkZWZpbml0aW9ucy5cbmNvbnN0IENvbG9yVmFsdWUgPSB7XG4gICAgLy8gQmFzaWMgY29sb3JzLlxuICAgIFdoaXRlOiAnI0ZGRkZGRicsXG4gICAgR3JheTogJyM4MDgwODAnLFxuICAgIEJsYWNrOiAnIzAwMDAwMCcsXG5cbiAgICAvLyBTcGVjaWFsaXplZCBjb2xvcnMuXG4gICAgQ3JpdGljYWw6ICcjRDYzMDMxJyxcbiAgICBXYXJuaW5nOiAnI0ZEQ0I2RScsXG4gICAgUmVndWxhcjogJyMwOTg0RTMnLFxuICAgIEh0dHA6ICcjNkFCMDRDJyxcbiAgICBRdWVyeTogJyMzOTlBRjMnXG59IGFzIGNvbnN0O1xuXG50eXBlIENvbG9yVmFsdWUgPSB0eXBlb2YgQ29sb3JWYWx1ZVtrZXlvZiB0eXBlb2YgQ29sb3JWYWx1ZV07XG5cbmNvbnN0IENvbG9yU2NoZW1lID0ge1xuICAgIENyaXRpY2FsOiBjcmVhdGVTY2hlbWUoe1xuICAgICAgICBiYWNrZ3JvdW5kOiBDb2xvclZhbHVlLkNyaXRpY2FsLFxuICAgICAgICBmb3JlZ3JvdW5kOiBDb2xvclZhbHVlLkJsYWNrXG4gICAgfSksXG5cbiAgICBXYXJuaW5nOiBjcmVhdGVTY2hlbWUoe1xuICAgICAgICBiYWNrZ3JvdW5kOiBDb2xvclZhbHVlLldhcm5pbmcsXG4gICAgICAgIGZvcmVncm91bmQ6IENvbG9yVmFsdWUuQmxhY2tcbiAgICB9KSxcblxuICAgIFJlZ3VsYXI6IGNyZWF0ZVNjaGVtZSh7XG4gICAgICAgIGJhY2tncm91bmQ6IENvbG9yVmFsdWUuUmVndWxhcixcbiAgICAgICAgZm9yZWdyb3VuZDogQ29sb3JWYWx1ZS5XaGl0ZVxuICAgIH0pLFxuXG4gICAgSHR0cDogY3JlYXRlU2NoZW1lKHtcbiAgICAgICAgYmFja2dyb3VuZDogQ29sb3JWYWx1ZS5IdHRwLFxuICAgICAgICBmb3JlZ3JvdW5kOiBDb2xvclZhbHVlLkJsYWNrXG4gICAgfSksXG5cbiAgICBRdWVyeTogY3JlYXRlU2NoZW1lKHtcbiAgICAgICAgYmFja2dyb3VuZDogQ29sb3JWYWx1ZS5RdWVyeSxcbiAgICAgICAgZm9yZWdyb3VuZDogQ29sb3JWYWx1ZS5CbGFja1xuICAgIH0pLFxuXG4gICAgTG91ZDogY3JlYXRlU2NoZW1lKHtcbiAgICAgICAgYmFja2dyb3VuZDogQ29sb3JWYWx1ZS5CbGFjayxcbiAgICAgICAgZm9yZWdyb3VuZDogQ29sb3JWYWx1ZS5HcmF5XG4gICAgfSlcbn0gYXMgY29uc3Q7XG5cbnR5cGUgQ29sb3JTY2hlbWUgPSB0eXBlb2YgQ29sb3JTY2hlbWVba2V5b2YgdHlwZW9mIENvbG9yU2NoZW1lXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoYWxrT2YoY29sb3JTZXQ6IENvbG9yU2NoZW1lKTogQ2hhbGtJbnN0YW5jZSB7XG4gICAgcmV0dXJuIGNvbG9yaXplck1hcC5nZXQoY29sb3JTZXQpID8/IGNoYWxrO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDb2xvclNjaGVtZTtcblxuLyogZXNsaW50LWVuYWJsZSBuby11c2UtYmVmb3JlLWRlZmluZSAqL1xuIiwiLy8gTm9kZS5qcyBidWlsdC1pbiBBUElzLlxuaW1wb3J0IHByb2Nlc3MgZnJvbSAncHJvY2Vzcyc7XG5cbi8vIExvY2FsIGhlbHBlcnMuXG5pbXBvcnQgQ29sb3JTY2hlbWUsIHsgZ2V0Q2hhbGtPZiB9IGZyb20gJy4vY29sb3Itc2NoZW1lJztcblxuLy8gQ29uc3RhbnRzLlxuY29uc3QgeyBpc1RUWSB9ID0gcHJvY2Vzcy5zdGRvdXQ7XG5jb25zdCBpc05vdE9uQ0xJID0gIWlzVFRZO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWNvcmF0ZUxhYmVsPFQgZXh0ZW5kcyBzdHJpbmc+KGxhYmVsOiBULCBzY2hlbWU6IENvbG9yU2NoZW1lKTogVCB7XG4gICAgaWYgKGlzTm90T25DTEkpIHtcbiAgICAgICAgcmV0dXJuIGxhYmVsO1xuICAgIH1cblxuICAgIGNvbnN0IGNoYWxrID0gZ2V0Q2hhbGtPZihzY2hlbWUpO1xuICAgIGNvbnN0IGRlY29yYXRlZExhYmVsID0gY2hhbGsuYm9sZChgICR7bGFiZWx9IGApO1xuXG4gICAgcmV0dXJuIGRlY29yYXRlZExhYmVsIGFzIFQ7XG59XG4iLCIvLyBOb2RlLmpzIGJ1aWx0LWluIEFQSXMuXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBwcm9jZXNzLCB7IHZlcnNpb24gfSBmcm9tICdwcm9jZXNzJztcblxuLy8gVGhpcmQtcGFydHkgbW9kdWxlcy5cbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5cbi8vIExvY2FsIGhlbHBlcnMuXG5pbXBvcnQgTG9nZ2luZ0xldmVsIGZyb20gJy4uL2hlbHBlcnMvbG9nZ2luZy1sZXZlbCc7XG5pbXBvcnQgQ29sb3JTY2hlbWUgZnJvbSAnLi4vaGVscGVycy9jb2xvci1zY2hlbWUnO1xuaW1wb3J0IGRlY29yYXRlTGFiZWwgZnJvbSAnLi4vaGVscGVycy9sYWJlbC1kZWNvcmF0b3InO1xuXG4vLyBUeXBlIGRlZmluaXRpb25zLlxudHlwZSBMb2dnaW5nRGF0YSA9IHsgbGV2ZWw6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nIH0gJiBSZWNvcmQ8UHJvcGVydHlLZXksIGFueT47XG50eXBlIEhhbmRsZWREYXRhID0geyBsYWJlbDogc3RyaW5nLCBwYXlsb2FkOiBzdHJpbmcgfTtcblxuLy8gQ29uc3RhbnRzLlxuY29uc3Qgcm9vdFBhdGggPSBwcm9jZXNzLmN3ZCgpO1xuY29uc3QgY29uanVuY3Rpb24gPSBgICR7Y2hhbGsuYmx1ZSgn4pSA4pSAJyl9IGA7XG5jb25zdCBzcGxhdDogdW5pcXVlIHN5bWJvbCA9IFN5bWJvbC5mb3IoJ3NwbGF0Jyk7XG5cbi8vIEhhbmRsZXIgbWV0YWRhdGEuXG5leHBvcnQgY29uc3QgbmFtZSA9ICdlcnJvcic7XG5leHBvcnQgY29uc3QgbGV2ZWwgPSBMb2dnaW5nTGV2ZWwuRXJyb3I7XG5leHBvcnQgY29uc3QgbGFiZWwgPSBkZWNvcmF0ZUxhYmVsKCdFUlJPUicsIENvbG9yU2NoZW1lLkNyaXRpY2FsKTtcblxuZnVuY3Rpb24gbWFwTG9jYXRpb25PZkVycm9yVGhyb3duKGZpbGVuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCB0YXJnZXQgPSBwYXRoLnJlbGF0aXZlKHJvb3RQYXRoLCBmaWxlbmFtZSk7XG5cbiAgICBpZiAodGFyZ2V0LnN0YXJ0c1dpdGgoJ25vZGVfbW9kdWxlcycpKSB7XG4gICAgICAgIHRhcmdldCA9IGNoYWxrLmdyYXkodGFyZ2V0KS5yZXBsYWNlKFxuICAgICAgICAgICAgL25vZGVfbW9kdWxlc1tcXFxcL10oW15cXFxcL10rKSguKikvLFxuICAgICAgICAgICAgKG1hdGNoZXMsIG1vZHVsZU5hbWU6IHN0cmluZywgdHJhaWxpbmc6IHN0cmluZykgPT4gYG5vZGVfbW9kdWxlcyR7cGF0aC5zZXB9JHtjaGFsay5ib2xkLnVuZGVybGluZShtb2R1bGVOYW1lKX0ke2NoYWxrLmdyYXkodHJhaWxpbmcpfWAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBtYXgtbGVuXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0ID0gYCR7Y2hhbGsuZ3JheShwYXRoLmRpcm5hbWUodGFyZ2V0KSArIHBhdGguc2VwKX0ke2NoYWxrLmJvbGQudW5kZXJsaW5lKHBhdGguYmFzZW5hbWUodGFyZ2V0KSl9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoYW5kbGUoZGF0YTogTG9nZ2luZ0RhdGEpOiBIYW5kbGVkRGF0YSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgeyBbc3BsYXRdOiBbIGVycm9yIF0gPSBbXSB9ID0gZGF0YSBhcyBhbnk7XG5cbiAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHsgbmFtZSwgbWVzc2FnZSwgc3RhY2s6IHJhd1N0YWNrID0gJycgfSA9IGVycm9yO1xuXG4gICAgY29uc3Qgc3RhY2sgPSByYXdTdGFja1xuICAgICAgICAuc2xpY2UobmFtZS5sZW5ndGggKyBtZXNzYWdlLmxlbmd0aCArIDMpXG4gICAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgICAgLm1hcChsaW5lID0+IGxpbmUucmVwbGFjZSgvXlxccythdCAvZywgJycpKVxuICAgICAgICAubWFwKGxpbmUgPT4gKHBhdGguaXNBYnNvbHV0ZShsaW5lKSA/IGA8YW5vbnltb3VzPiR7Y29uanVuY3Rpb259JHttYXBMb2NhdGlvbk9mRXJyb3JUaHJvd24obGluZSl9YCA6IGxpbmUpKVxuICAgICAgICAubWFwKGxpbmUgPT4gbGluZS5yZXBsYWNlKC9eKC4rKSBcXCgoLispXFwpJC8sIChtYXRjaGVzLCBjb250ZXh0TmFtZTogc3RyaW5nLCByYXdMb2NhdGlvbjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBsZXQgbG9jYXRpb247XG5cbiAgICAgICAgICAgIGlmIChyYXdMb2NhdGlvbiA9PT0gJzxhbm9ueW1vdXM+Jykge1xuICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gY2hhbGsuZ3JheShyYXdMb2NhdGlvbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IFsgZmlsZW5hbWUsIGxpbmUsIGNvbHVtbiBdID0gcmF3TG9jYXRpb24uc3BsaXQoJzonKTtcblxuICAgICAgICAgICAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUoZmlsZW5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IG1hcExvY2F0aW9uT2ZFcnJvclRocm93bihwYXRoLnJlbGF0aXZlKHJvb3RQYXRoLCBmaWxlbmFtZSkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmFpbGluZyA9IGNoYWxrLmdyYXkoYDoke2xpbmV9OiR7Y29sdW1ufWApO1xuXG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gdGFyZ2V0ICsgdHJhaWxpbmc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gPSBjaGFsay5ncmF5KGBodHRwczovL2dpdGh1Yi5jb20vJHtjaGFsay5ib2xkLnVuZGVybGluZSgnbm9kZWpzJyl9L25vZGUvYmxvYi8ke3ZlcnNpb259L2xpYi8ke2ZpbGVuYW1lfSNMJHtsaW5lfWApOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG1heC1sZW5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBgJHtjb250ZXh0TmFtZX0ke2Nvbmp1bmN0aW9ufSR7bG9jYXRpb259YDtcbiAgICAgICAgfSkpXG4gICAgICAgIC5qb2luKCdcXG4nKTtcblxuICAgIGNvbnN0IGxhYmVsID0gZGVjb3JhdGVMYWJlbChuYW1lLCBDb2xvclNjaGVtZS5Dcml0aWNhbCk7XG4gICAgY29uc3QgcGF5bG9hZCA9IGAke21lc3NhZ2V9XFxuXFxuJHtzdGFja31cXG5gO1xuXG4gICAgcmV0dXJuIHsgbGFiZWwsIHBheWxvYWQgfTtcbn1cbiIsIi8vIExvY2FsIGhlbHBlcnMuXG5pbXBvcnQgTG9nZ2luZ0xldmVsIGZyb20gJy4uL2hlbHBlcnMvbG9nZ2luZy1sZXZlbCc7XG5pbXBvcnQgQ29sb3JTY2hlbWUgZnJvbSAnLi4vaGVscGVycy9jb2xvci1zY2hlbWUnO1xuaW1wb3J0IGRlY29yYXRlTGFiZWwgZnJvbSAnLi4vaGVscGVycy9sYWJlbC1kZWNvcmF0b3InO1xuXG4vLyBIYW5kbGVyIG1ldGFkYXRhLlxuZXhwb3J0IGNvbnN0IG5hbWUgPSAnZmF0YWwnO1xuZXhwb3J0IGNvbnN0IGxldmVsID0gTG9nZ2luZ0xldmVsLkZhdGFsO1xuZXhwb3J0IGNvbnN0IGxhYmVsID0gZGVjb3JhdGVMYWJlbCgnRkFUQUwnLCBDb2xvclNjaGVtZS5Dcml0aWNhbCk7XG5cbmV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tICcuL2Vycm9yJztcbiIsIi8vIExvY2FsIGhlbHBlcnMuXG5pbXBvcnQgTG9nZ2luZ0xldmVsIGZyb20gJy4uL2hlbHBlcnMvbG9nZ2luZy1sZXZlbCc7XG5pbXBvcnQgQ29sb3JTY2hlbWUgZnJvbSAnLi4vaGVscGVycy9jb2xvci1zY2hlbWUnO1xuaW1wb3J0IGRlY29yYXRlTGFiZWwgZnJvbSAnLi4vaGVscGVycy9sYWJlbC1kZWNvcmF0b3InO1xuXG4vLyBIYW5kbGVyIG1ldGFkYXRhLlxuZXhwb3J0IGNvbnN0IG5hbWUgPSAnd2FybmluZyc7XG5leHBvcnQgY29uc3QgbGV2ZWwgPSBMb2dnaW5nTGV2ZWwuV2FybmluZztcbmV4cG9ydCBjb25zdCBsYWJlbCA9IGRlY29yYXRlTGFiZWwoJ1dBUk5JTkcnLCBDb2xvclNjaGVtZS5XYXJuaW5nKTtcblxuZXhwb3J0IGRlZmF1bHQgbnVsbDtcbiIsIi8vIExvY2FsIGhlbHBlcnMuXG5pbXBvcnQgTG9nZ2luZ0xldmVsIGZyb20gJy4uL2hlbHBlcnMvbG9nZ2luZy1sZXZlbCc7XG5pbXBvcnQgQ29sb3JTY2hlbWUgZnJvbSAnLi4vaGVscGVycy9jb2xvci1zY2hlbWUnO1xuaW1wb3J0IGRlY29yYXRlTGFiZWwgZnJvbSAnLi4vaGVscGVycy9sYWJlbC1kZWNvcmF0b3InO1xuXG4vLyBIYW5kbGVyIG1ldGFkYXRhLlxuZXhwb3J0IGNvbnN0IG5hbWUgPSAnbm90aWNlJztcbmV4cG9ydCBjb25zdCBsZXZlbCA9IExvZ2dpbmdMZXZlbC5Ob3RpY2U7XG5leHBvcnQgY29uc3QgbGFiZWwgPSBkZWNvcmF0ZUxhYmVsKCdOT1RJQ0UnLCBDb2xvclNjaGVtZS5SZWd1bGFyKTtcblxuZXhwb3J0IGRlZmF1bHQgbnVsbDtcbiIsIi8vIExvY2FsIGhlbHBlcnMuXG5pbXBvcnQgTG9nZ2luZ0xldmVsIGZyb20gJy4uL2hlbHBlcnMvbG9nZ2luZy1sZXZlbCc7XG5pbXBvcnQgQ29sb3JTY2hlbWUgZnJvbSAnLi4vaGVscGVycy9jb2xvci1zY2hlbWUnO1xuaW1wb3J0IGRlY29yYXRlTGFiZWwgZnJvbSAnLi4vaGVscGVycy9sYWJlbC1kZWNvcmF0b3InO1xuXG4vLyBIYW5kbGVyIG1ldGFkYXRhLlxuZXhwb3J0IGNvbnN0IG5hbWUgPSAnaW5mbyc7XG5leHBvcnQgY29uc3QgbGV2ZWwgPSBMb2dnaW5nTGV2ZWwuSW5mbztcbmV4cG9ydCBjb25zdCBsYWJlbCA9IGRlY29yYXRlTGFiZWwoJ0lORk8nLCBDb2xvclNjaGVtZS5SZWd1bGFyKTtcblxuZXhwb3J0IGRlZmF1bHQgbnVsbDtcbiIsIi8vIExvY2FsIGhlbHBlcnMuXG5pbXBvcnQgTG9nZ2luZ0xldmVsIGZyb20gJy4uL2hlbHBlcnMvbG9nZ2luZy1sZXZlbCc7XG5pbXBvcnQgQ29sb3JTY2hlbWUgZnJvbSAnLi4vaGVscGVycy9jb2xvci1zY2hlbWUnO1xuaW1wb3J0IGRlY29yYXRlTGFiZWwgZnJvbSAnLi4vaGVscGVycy9sYWJlbC1kZWNvcmF0b3InO1xuXG4vLyBIYW5kbGVyIG1ldGFkYXRhLlxuZXhwb3J0IGNvbnN0IG5hbWUgPSAnaHR0cCc7XG5leHBvcnQgY29uc3QgbGV2ZWwgPSBMb2dnaW5nTGV2ZWwuSHR0cDtcbmV4cG9ydCBjb25zdCBsYWJlbCA9IGRlY29yYXRlTGFiZWwoJ0hUVFAnLCBDb2xvclNjaGVtZS5IdHRwKTtcblxuZXhwb3J0IGRlZmF1bHQgbnVsbDtcbiIsIi8vIEhpZ2hsaWdodC5qc1xuaW1wb3J0IGhpZ2hsaWdodCBmcm9tICdjbGktaGlnaGxpZ2h0JztcblxuLy8gTG9jYWwgaGVscGVycy5cbmltcG9ydCBMb2dnaW5nTGV2ZWwgZnJvbSAnLi4vaGVscGVycy9sb2dnaW5nLWxldmVsJztcbmltcG9ydCBDb2xvclNjaGVtZSBmcm9tICcuLi9oZWxwZXJzL2NvbG9yLXNjaGVtZSc7XG5pbXBvcnQgZGVjb3JhdGVMYWJlbCBmcm9tICcuLi9oZWxwZXJzL2xhYmVsLWRlY29yYXRvcic7XG5cbi8vIFR5cGUgZGVmaW5pdGlvbnMuXG50eXBlIExvZ2dpbmdEYXRhID0geyBsZXZlbDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcgfSAmIFJlY29yZDxQcm9wZXJ0eUtleSwgYW55PjtcbnR5cGUgSGFuZGxlZERhdGEgPSB7IGxhYmVsOiBzdHJpbmcsIHBheWxvYWQ6IHN0cmluZyB9O1xuXG4vLyBIYW5kbGVyIG1ldGFkYXRhLlxuZXhwb3J0IGNvbnN0IG5hbWUgPSAncXVlcnknO1xuZXhwb3J0IGNvbnN0IGxldmVsID0gTG9nZ2luZ0xldmVsLlF1ZXJ5O1xuZXhwb3J0IGNvbnN0IGxhYmVsID0gZGVjb3JhdGVMYWJlbCgnUVVFUlknLCBDb2xvclNjaGVtZS5RdWVyeSk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGhhbmRsZShkYXRhOiBMb2dnaW5nRGF0YSk6IEhhbmRsZWREYXRhIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBwYXlsb2FkID0gaGlnaGxpZ2h0KGRhdGEubWVzc2FnZSwgeyBsYW5ndWFnZTogJ3NxbCcgfSk7XG5cbiAgICByZXR1cm4geyBsYWJlbCwgcGF5bG9hZCB9O1xufVxuIiwiLy8gTG9jYWwgaGVscGVycy5cbmltcG9ydCBMb2dnaW5nTGV2ZWwgZnJvbSAnLi4vaGVscGVycy9sb2dnaW5nLWxldmVsJztcbmltcG9ydCBDb2xvclNjaGVtZSBmcm9tICcuLi9oZWxwZXJzL2NvbG9yLXNjaGVtZSc7XG5pbXBvcnQgZGVjb3JhdGVMYWJlbCBmcm9tICcuLi9oZWxwZXJzL2xhYmVsLWRlY29yYXRvcic7XG5cbi8vIEhhbmRsZXIgbWV0YWRhdGEuXG5leHBvcnQgY29uc3QgbmFtZSA9ICd2ZXJib3NlJztcbmV4cG9ydCBjb25zdCBsZXZlbCA9IExvZ2dpbmdMZXZlbC5WZXJib3NlO1xuZXhwb3J0IGNvbnN0IGxhYmVsID0gZGVjb3JhdGVMYWJlbCgnVkVSQk9TRScsIENvbG9yU2NoZW1lLkxvdWQpO1xuXG5leHBvcnQgZGVmYXVsdCBudWxsO1xuIiwiLy8gTG9jYWwgaGVscGVycy5cbmltcG9ydCBMb2dnaW5nTGV2ZWwgZnJvbSAnLi4vaGVscGVycy9sb2dnaW5nLWxldmVsJztcbmltcG9ydCBDb2xvclNjaGVtZSBmcm9tICcuLi9oZWxwZXJzL2NvbG9yLXNjaGVtZSc7XG5pbXBvcnQgZGVjb3JhdGVMYWJlbCBmcm9tICcuLi9oZWxwZXJzL2xhYmVsLWRlY29yYXRvcic7XG5cbi8vIEhhbmRsZXIgbWV0YWRhdGEuXG5leHBvcnQgY29uc3QgbmFtZSA9ICdkZWJ1Zyc7XG5leHBvcnQgY29uc3QgbGV2ZWwgPSBMb2dnaW5nTGV2ZWwuRGVidWc7XG5leHBvcnQgY29uc3QgbGFiZWwgPSBkZWNvcmF0ZUxhYmVsKCdERUJVRycsIENvbG9yU2NoZW1lLkxvdWQpO1xuXG5leHBvcnQgZGVmYXVsdCBudWxsO1xuIiwiLy8gSGFuZGxlciBpbXBsZW1lbnRhdGlvbnMuXG5pbXBvcnQgKiBhcyBGYXRhbEhhbmRsZXIgZnJvbSAnLi9mYXRhbCc7XG5pbXBvcnQgKiBhcyBFcnJvckhhbmRsZXIgZnJvbSAnLi9lcnJvcic7XG5pbXBvcnQgKiBhcyBXYXJuaW5nSGFuZGxlciBmcm9tICcuL3dhcm5pbmcnO1xuaW1wb3J0ICogYXMgTm90aWNlSGFuZGxlciBmcm9tICcuL25vdGljZSc7XG5pbXBvcnQgKiBhcyBJbmZvSGFuZGxlciBmcm9tICcuL2luZm8nO1xuaW1wb3J0ICogYXMgSHR0cEhhbmRsZXIgZnJvbSAnLi9odHRwJztcbmltcG9ydCAqIGFzIFF1ZXJ5SGFuZGxlciBmcm9tICcuL3F1ZXJ5JztcbmltcG9ydCAqIGFzIFZlcmJvc2VIYW5kbGVyIGZyb20gJy4vdmVyYm9zZSc7XG5pbXBvcnQgKiBhcyBEZWJ1Z0hhbmRsZXIgZnJvbSAnLi9kZWJ1Zyc7XG5cbmNvbnN0IGhhbmRsZXJzID0gW1xuICAgIEZhdGFsSGFuZGxlcixcbiAgICBFcnJvckhhbmRsZXIsXG4gICAgV2FybmluZ0hhbmRsZXIsXG4gICAgTm90aWNlSGFuZGxlcixcbiAgICBJbmZvSGFuZGxlcixcbiAgICBIdHRwSGFuZGxlcixcbiAgICBRdWVyeUhhbmRsZXIsXG4gICAgVmVyYm9zZUhhbmRsZXIsXG4gICAgRGVidWdIYW5kbGVyXG5dO1xuXG5leHBvcnQgdHlwZSBMb2dnaW5nTGV2ZWxOYW1lID0gKHR5cGVvZiBoYW5kbGVycyBleHRlbmRzIChpbmZlciBUKVtdID8gVCA6IG5ldmVyKVsnbmFtZSddO1xuZXhwb3J0IGRlZmF1bHQgaGFuZGxlcnM7XG4iLCIvLyBUaGlyZC1wYXJ0eSBtb2R1bGVzLlxuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCByVHJhY2VyIGZyb20gJ2Nscy1ydHJhY2VyJztcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSAnbHV4b24nO1xuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAnd2luc3Rvbic7XG5cbi8vIExvY2FsIGhlbHBlcnMuXG5pbXBvcnQgTG9nZ2luZ0xldmVsIGZyb20gJy4uL2hlbHBlcnMvbG9nZ2luZy1sZXZlbCc7XG5cbi8vIEhhbmRsZXIgaW1wbGVtZW50YXRpb25zLlxuaW1wb3J0IGhhbmRsZXJzIGZyb20gJy4uL2hhbmRsZXJzJztcblxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0LnByaW50ZihkYXRhID0+IHtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBjaGFsay5ncmF5KERhdGVUaW1lLm5vdygpLnRvSVNPKHsgaW5jbHVkZU9mZnNldDogdHJ1ZSB9KSk7XG4gICAgY29uc3QgaGFuZGxlciA9IGhhbmRsZXJzLmZpbmQoKHsgbmFtZSB9KSA9PiBuYW1lID09PSBkYXRhLmxldmVsKTtcbiAgICBjb25zdCBmYWxsYmFjayA9IHsgbGFiZWw6IGhhbmRsZXI/LmxhYmVsLCBwYXlsb2FkOiBkYXRhLm1lc3NhZ2UgfTtcbiAgICBjb25zdCBwZXJmb3JtSGFuZGxlID0gaGFuZGxlcj8uZGVmYXVsdCA/PyAoKCk6IHR5cGVvZiBmYWxsYmFjayA9PiBmYWxsYmFjayk7XG5cbiAgICAvLyBFeGVjdXRlIGhhbmRsZXIgYW5kIHRoZW4sIGdldCBkZWNvcmF0ZWQgcGF5bG9hZC5cbiAgICBjb25zdCB7IGxhYmVsLCBwYXlsb2FkIH0gPSBSZWZsZWN0LmFwcGx5KHBlcmZvcm1IYW5kbGUsIHVuZGVmaW5lZCwgWyBkYXRhIF0pID8/IGZhbGxiYWNrO1xuXG4gICAgbGV0IGV4dHJhRmluZ2VycHJpbnQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGlmIChoYW5kbGVyPy5sZXZlbCA9PT0gTG9nZ2luZ0xldmVsLkh0dHApIHtcbiAgICAgICAgZXh0cmFGaW5nZXJwcmludCA9IGRhdGEudHJhbnNhY3Rpb25JZFxuICAgICAgICAgICAgPyBgKFRyYW5zYWN0aW9uLUlEID0gJHtkYXRhLnRyYW5zYWN0aW9uSWQgYXMgc3RyaW5nfSlgXG4gICAgICAgICAgICA6IGAoUmVxdWVzdC1JRCA9ICR7clRyYWNlci5pZCgpIGFzIHN0cmluZ30pYDtcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7bGFiZWwgYXMgc3RyaW5nfSAke3RpbWVzdGFtcH0ke2V4dHJhRmluZ2VycHJpbnQgPyBgICR7ZXh0cmFGaW5nZXJwcmludH1gIDogJyd9XFxuJHtwYXlsb2FkIGFzIHN0cmluZ31gO1xufSk7XG4iLCIvLyBOb2RlLmpzIGJ1aWx0LWluIEFQSXMuXG5pbXBvcnQgY2x1c3RlciBmcm9tICdjbHVzdGVyJztcbmltcG9ydCB7IGVudiBhcyBlbnZpcm9ubWVudHMgfSBmcm9tICdwcm9jZXNzJztcbmltcG9ydCB7IGlzTWFpblRocmVhZCB9IGZyb20gJ3dvcmtlcl90aHJlYWRzJztcblxuLy8gVHlwZSBkZWZpbml0aW9ucy5cbmV4cG9ydCBjb25zdCBFeGVjdXRpb25Nb2RlID0ge1xuICAgIERldmVsb3BtZW50TW9kZTogJ2RldmVsb3BtZW50JyxcbiAgICBQcm9kdWN0aW9uTW9kZTogJ3Byb2R1Y3Rpb24nXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgQ2x1c3RlcmluZ01vZGUgPSB7XG4gICAgTWFzdGVyUHJvY2VzczogMCxcbiAgICBXb3JrZXJQcm9jZXNzOiAxXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgVGhyZWFkaW5nTW9kZSA9IHtcbiAgICBNYWluVGhyZWFkOiAwLFxuICAgIFdvcmtlclRocmVhZDogMVxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgRXhlY3V0aW9uTW9kZSA9IHR5cGVvZiBFeGVjdXRpb25Nb2RlW2tleW9mIHR5cGVvZiBFeGVjdXRpb25Nb2RlXTtcbmV4cG9ydCB0eXBlIENsdXN0ZXJpbmdNb2RlID0gdHlwZW9mIENsdXN0ZXJpbmdNb2RlW2tleW9mIHR5cGVvZiBDbHVzdGVyaW5nTW9kZV07XG5leHBvcnQgdHlwZSBUaHJlYWRpbmdNb2RlID0gdHlwZW9mIFRocmVhZGluZ01vZGVba2V5b2YgdHlwZW9mIFRocmVhZGluZ01vZGVdO1xuXG4vLyBFeHBvcnRpbmdzLlxuZXhwb3J0IGNvbnN0IGV4ZWN1dGlvbk1vZGUgPSBlbnZpcm9ubWVudHMuTk9ERV9FTlYgYXMgRXhlY3V0aW9uTW9kZSA/PyBFeGVjdXRpb25Nb2RlLkRldmVsb3BtZW50TW9kZTtcblxuZXhwb3J0IGNvbnN0IGNsdXN0ZXJpbmdNb2RlOiBDbHVzdGVyaW5nTW9kZSA9IGNsdXN0ZXIuaXNQcmltYXJ5ID8/IGNsdXN0ZXIuaXNNYXN0ZXJcbiAgICA/IENsdXN0ZXJpbmdNb2RlLk1hc3RlclByb2Nlc3NcbiAgICA6IENsdXN0ZXJpbmdNb2RlLldvcmtlclByb2Nlc3M7XG5cbmV4cG9ydCBjb25zdCB0aHJlYWRpbmdNb2RlOiBUaHJlYWRpbmdNb2RlID0gaXNNYWluVGhyZWFkXG4gICAgPyBUaHJlYWRpbmdNb2RlLk1haW5UaHJlYWRcbiAgICA6IFRocmVhZGluZ01vZGUuV29ya2VyVGhyZWFkO1xuIiwiLy8gTm9kZS5qcyBidWlsdC1pbiBBUElzLlxuaW1wb3J0IHtcbiAgICBTVEFUVVNfQ09ERVMsXG4gICAgSW5jb21pbmdNZXNzYWdlIGFzIEh0dHBSZXF1ZXN0LFxuICAgIFNlcnZlclJlc3BvbnNlIGFzIEh0dHBSZXNwb25zZVxufSBmcm9tICdodHRwJztcblxuLy8gVGhpcmQtcGFydHkgbW9kdWxlcy5cbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgbW9yZ2FuIGZyb20gJ21vcmdhbic7XG5pbXBvcnQgcHJldHR5Qnl0ZXMgZnJvbSAncHJldHR5LWJ5dGVzJztcbmltcG9ydCBwcmV0dHlNcyBmcm9tICdwcmV0dHktbXMnO1xuXG4vLyBMb2NhbCBoZWxwZXJzLlxuaW1wb3J0IHsgRXhlY3V0aW9uTW9kZSwgZXhlY3V0aW9uTW9kZSB9IGZyb20gJy4uL2hlbHBlcnMvY29uc3RhbnRzJztcblxuLy8gVHlwZSBkZWZpbml0aW9ucy5cbmRlY2xhcmUgbW9kdWxlICdtb3JnYW4nIHtcbiAgICBjb25zdCBjb21iaW5lZDogbW9yZ2FuLkZvcm1hdEZuO1xufVxuXG5pbnRlcmZhY2UgVG9rZW5JbmRleGVyIHtcbiAgICBbdG9rZW5OYW1lOiBzdHJpbmddOiAoXG4gICAgICAgIHJlcXVlc3Q6IEh0dHBSZXF1ZXN0LFxuICAgICAgICByZXNwb25zZTogSHR0cFJlc3BvbnNlLFxuICAgICAgICAuLi5hcmdzOiBhbnlbXVxuICAgICkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG4vLyBIZWxwZXJzLlxuZnVuY3Rpb24gZGVjb3JhdGVTdGF0dXNDb2RlKHN0YXR1c0NvZGU6IGtleW9mIHR5cGVvZiBTVEFUVVNfQ09ERVMpOiBzdHJpbmcge1xuICAgIGNvbnN0IGdyb3VwT2ZDb2RlID0gTWF0aC5mbG9vcihOdW1iZXIoc3RhdHVzQ29kZSkgLyAxMDApICogMTAwO1xuICAgIGNvbnN0IGJhc2VNZXNzYWdlID0gYCR7c3RhdHVzQ29kZX0gJHtTVEFUVVNfQ09ERVNbc3RhdHVzQ29kZV0gYXMgc3RyaW5nfWA7XG5cbiAgICBzd2l0Y2ggKGdyb3VwT2ZDb2RlKSB7XG4gICAgY2FzZSAyMDA6IHtcbiAgICAgICAgcmV0dXJuIGNoYWxrLmdyZWVuKGJhc2VNZXNzYWdlKTtcbiAgICB9XG5cbiAgICBjYXNlIDMwMDoge1xuICAgICAgICByZXR1cm4gY2hhbGsubWFnZW50YShiYXNlTWVzc2FnZSk7XG4gICAgfVxuICAgIGNhc2UgNDAwOlxuICAgIGNhc2UgNTAwOiB7XG4gICAgICAgIHJldHVybiBjaGFsay5yZWQoYmFzZU1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIGNoYWxrLmdyYXkoYmFzZU1lc3NhZ2UpO1xuICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZvck1vcmdhbih0b2tlbnM6IGFueSwgcmVxdWVzdDogSHR0cFJlcXVlc3QsIHJlc3BvbnNlOiBIdHRwUmVzcG9uc2UpOiBzdHJpbmcge1xuICAgIGZ1bmN0aW9uIF8odG9rZW46IHN0cmluZywgLi4uc3ViQXJnczogYW55W10pOiBzdHJpbmcgfCB2b2lkIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXJndW1lbnRcbiAgICAgICAgcmV0dXJuICh0b2tlbnMgYXMgVG9rZW5JbmRleGVyKVt0b2tlbl0ocmVxdWVzdCwgcmVzcG9uc2UsIC4uLnN1YkFyZ3MpO1xuICAgIH1cblxuICAgIC8vIFJhdyB2YWx1ZXMuXG4gICAgY29uc3QgbWV0aG9kID0gXygnbWV0aG9kJyk7XG4gICAgY29uc3QgVVJMID0gXygndXJsJyk7XG4gICAgY29uc3QgaHR0cFZlcnNpb24gPSBgSFRUUC8ke18oJ2h0dHAtdmVyc2lvbicpIGFzIHN0cmluZ31gO1xuICAgIGNvbnN0IHN0YXR1c0NvZGUgPSBOdW1iZXIoXygnc3RhdHVzJykpO1xuICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBOdW1iZXIoXygncmVzJywgJ2NvbnRlbnQtbGVuZ3RoJykgPz8gLTEpO1xuICAgIGNvbnN0IHJlc3BvbnNlVGltZSA9IE51bWJlcihfKCdyZXNwb25zZS10aW1lJykgPz8gLTEpO1xuXG4gICAgLy8gRGVjb3JhdGVkIHZhbHVlcy5cbiAgICBjb25zdCAkbWV0aG9kID0gY2hhbGsuYm9sZChtZXRob2QpO1xuICAgIGNvbnN0ICR2ZXJzaW9uID0gY2hhbGsucmdiKDk4LCAxNzcsIDI1NSkoaHR0cFZlcnNpb24pO1xuICAgIGNvbnN0ICRzdGF0dXNDb2RlID0gZGVjb3JhdGVTdGF0dXNDb2RlKHN0YXR1c0NvZGUpO1xuICAgIGNvbnN0ICRjb250ZW50TGVuZ3RoID0gY29udGVudExlbmd0aCA+PSAwID8gcHJldHR5Qnl0ZXMoY29udGVudExlbmd0aCkgOiAnPyBCJztcbiAgICBjb25zdCAkcmVzcG9uc2VUaW1lID0gcmVzcG9uc2VUaW1lID49IDAgPyBwcmV0dHlNcyhyZXNwb25zZVRpbWUpIDogJyc7XG5cbiAgICAvLyBBZGRpdGlvbmFsIGluZm9ybWF0aW9uLlxuICAgIGNvbnN0IG1ldGFkYXRhID0gYCgkeyRjb250ZW50TGVuZ3RofSwgJHskcmVzcG9uc2VUaW1lfSlgO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgICAgYOKGkiAkeyRtZXRob2R9ICR7VVJMIGFzIHN0cmluZ30gJHskdmVyc2lvbn1gLFxuICAgICAgICBg4oaQICR7JHZlcnNpb259ICR7JHN0YXR1c0NvZGV9ICR7bWV0YWRhdGF9YFxuICAgIF0uam9pbignXFxuJyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGV4ZWN1dGlvbk1vZGUgPT09IEV4ZWN1dGlvbk1vZGUuRGV2ZWxvcG1lbnRNb2RlID8gZm9ybWF0Rm9yTW9yZ2FuIDogbW9yZ2FuLmNvbWJpbmVkO1xuIiwiaW1wb3J0ICdyZWZsZWN0LW1ldGFkYXRhJztcblxuLy8gTm9kZS5qcyBidWlsdC1pbiBBUElzLlxuaW1wb3J0IHsgSW5jb21pbmdNZXNzYWdlIGFzIEh0dHBSZXF1ZXN0LCBTZXJ2ZXJSZXNwb25zZSBhcyBIdHRwUmVzcG9uc2UgfSBmcm9tICdodHRwJztcbmltcG9ydCB7IFBhc3NUaHJvdWdoIH0gZnJvbSAnc3RyZWFtJztcblxuLy8gVGhpcmQtcGFydHkgbW9kdWxlcy5cbmltcG9ydCBQcm9taXNlIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBsb2Rhc2ggZnJvbSAnbG9kYXNoJztcbmltcG9ydCBtb3JnYW4gZnJvbSAnbW9yZ2FuJztcbmltcG9ydCB0eXBlIHsgbGV2ZWwgYXMgTG9nZ2luZ0xldmVsIH0gZnJvbSAnd2luc3Rvbic7XG5pbXBvcnQgKiBhcyB3aW5zdG9uIGZyb20gJ3dpbnN0b24nO1xuaW1wb3J0IHsgTG9nZ2VyIGFzIEJhc2VMb2dnZXIgfSBmcm9tICd3aW5zdG9uJztcblxuLy8gRm9ybWF0dGVycy5cbmltcG9ydCBmb3JtYXRGb3JDTEkgZnJvbSAnLi4vZm9ybWF0dGVycy9jb21tYW5kLWxpbmUnO1xuaW1wb3J0IGZvcm1hdEZvck1vcmdhbiBmcm9tICcuLi9mb3JtYXR0ZXJzL21vcmdhbic7XG5cbi8vIExvY2FsIGhlbHBlcnMuXG5pbXBvcnQgeyBFeGVjdXRpb25Nb2RlLCBleGVjdXRpb25Nb2RlIH0gZnJvbSAnLi4vaGVscGVycy9jb25zdGFudHMnO1xuXG4vLyBIYW5kbGVyIGltcGxlbWVudGF0aW9ucy5cbmltcG9ydCB0eXBlIHsgTG9nZ2luZ0xldmVsTmFtZSB9IGZyb20gJy4uL2hhbmRsZXJzJztcbmltcG9ydCBoYW5kbGVycyBmcm9tICcuLi9oYW5kbGVycyc7XG5cbi8vIFR5cGUgZGVmaW5pdGlvbnMuXG50eXBlIE1vcmdhbiA9IChyZXE6IEh0dHBSZXF1ZXN0LCByZXM6IEh0dHBSZXNwb25zZSwgbmV4dDogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpID0+IHZvaWQ7XG5cbi8vIFRyYW5zcG9ydHMuXG5jb25zdCB7IENvbnNvbGU6IENvbnNvbGVUcmFuc3BvcnQgfSA9IHdpbnN0b24udHJhbnNwb3J0cztcblxuLy8gS2V5cyBpbiBvcmRlciB0byBhY2Nlc3MgcHJpdmF0ZSBwcm9wZXJ0aWVzLlxuY29uc3QgS2V5T2ZJbnN0YW5jZTogdW5pcXVlIHN5bWJvbCA9IFN5bWJvbCgnQGNpY2hvbC9sb2dnZXI6OmNsYXNzZXMvbG9nZ2VyOjpJbnN0YW5jZScpO1xuY29uc3QgS2V5T2ZQYXNzcG9ydDogdW5pcXVlIHN5bWJvbCA9IFN5bWJvbCgnQGNpY2hvbC9sb2dnZXI6OmNsYXNzZXMvbG9nZ2VyOjpQYXNzcG9ydCcpO1xuXG5jbGFzcyBMb2dnZXIge1xuICAgICNsb2dnZXI6IEJhc2VMb2dnZXIgPSB3aW5zdG9uLmNyZWF0ZUxvZ2dlcih7XG4gICAgICAgIGxldmVsczogbG9kYXNoKGhhbmRsZXJzKVxuICAgICAgICAgICAgLm1hcCgoeyBuYW1lLCBsZXZlbCB9KSA9PiBbIG5hbWUsIGxldmVsIF0pXG4gICAgICAgICAgICAuZmlsdGVyKChbICwgbGV2ZWwgXSkgPT4gdHlwZW9mIGxldmVsID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgIC5mcm9tUGFpcnMoKVxuICAgICAgICAgICAgLnZhbHVlKCksXG5cbiAgICAgICAgbGV2ZWw6IChleGVjdXRpb25Nb2RlID09PSBFeGVjdXRpb25Nb2RlLlByb2R1Y3Rpb25Nb2RlID8gJ2h0dHAnIDogJ3ZlcmJvc2UnKSBhcyB0eXBlb2YgTG9nZ2luZ0xldmVsLFxuXG4gICAgICAgIHRyYW5zcG9ydHM6IFtcbiAgICAgICAgICAgIG5ldyBDb25zb2xlVHJhbnNwb3J0KHsgZm9ybWF0OiBmb3JtYXRGb3JDTEkgfSlcbiAgICAgICAgXSxcblxuICAgICAgICBleGl0T25FcnJvcjogZmFsc2VcbiAgICB9KTtcblxuICAgICNtb3JnYW46IE1vcmdhbiA9IG1vcmdhbihmb3JtYXRGb3JNb3JnYW4sIHtcbiAgICAgICAgc3RyZWFtOiBuZXcgUGFzc1Rocm91Z2goeyBvYmplY3RNb2RlOiB0cnVlIH0pLm9uKCdkYXRhJywgKGRhdGE6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2coJ2h0dHAnLCBkYXRhLnRyaW0oKSk7XG4gICAgICAgIH0pXG4gICAgfSkgYXMgTW9yZ2FuO1xuXG4gICAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihwYXNzcG9ydDogdHlwZW9mIEtleU9mUGFzc3BvcnQpIHtcbiAgICAgICAgaWYgKHBhc3Nwb3J0ICE9PSBLZXlPZlBhc3Nwb3J0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ0xvZ2dlciBjbGFzcyBjYW5ub3QgYmUgY29uc3RydWN0ZWQgaW4gZGlyZWN0bHknKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IGluc3RhbmNlKCk6IExvZ2dlciB7XG4gICAgICAgIGlmICh0aGlzICE9PSBMb2dnZXIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignTG9nZ2VyIGNsYXNzIGlzIG5vdCBpbmhlcml0YWJsZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFJlZmxlY3QuaGFzT3duTWV0YWRhdGEoS2V5T2ZJbnN0YW5jZSwgTG9nZ2VyKSkge1xuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0T3duTWV0YWRhdGEoS2V5T2ZJbnN0YW5jZSwgTG9nZ2VyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IExvZ2dlcihLZXlPZlBhc3Nwb3J0KTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShLZXlPZkluc3RhbmNlLCBpbnN0YW5jZSwgTG9nZ2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvZ2dpbmcgbWVzc2FnZSB3aXRoIHNwZWNpZmljIGxldmVsLlxuICAgICAqXG4gICAgICogQHBhcmFtIGxldmVsXG4gICAgICogQHBhcmFtIG1lc3NhZ2VcbiAgICAgKiBAcGFyYW0gYXJncyBBZGRpdGlvbmFsIG1ldGFkYXRhLlxuICAgICAqL1xuICAgIHB1YmxpYyBsb2cobGV2ZWw6IExvZ2dpbmdMZXZlbE5hbWUsIG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkO1xuXG4gICAgLyoqXG4gICAgICogTG9nZ2luZyBIVFRQIEkvTy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXF1ZXN0IE5vZGUuanMgYnVpbHQtaW4gYEluY29taW5nTWVzc2FnZWAgaW5zdGFuY2UgZnJvbSBgaHR0cGAgbW9kdWxlLlxuICAgICAqIEBwYXJhbSByZXNwb25zZSBOb2RlLmpzIGJ1aWx0LWluIGBTZXJ2ZXJSZXNwb25zZWAgaW5zdGFuY2UgZnJvbSBgaHR0cGAgbW9kdWxlLlxuICAgICAqL1xuICAgIHB1YmxpYyBsb2cocmVxdWVzdDogSHR0cFJlcXVlc3QsIHJlc3BvbnNlOiBIdHRwUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+O1xuXG4gICAgLyoqXG4gICAgICogTG9nZ2luZyBlcnJvcnMgaW4gZGV0YWlsLlxuICAgICAqXG4gICAgICogQHBhcmFtIGVycm9yXG4gICAgICovXG4gICAgcHVibGljIGxvZyhlcnJvcjogRXJyb3IpOiB2b2lkO1xuXG4gICAgcHVibGljIGxvZyguLi5hcmdzOiBhbnlbXSk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgbG9nZ2VyID0gdGhpcy4jbG9nZ2VyO1xuICAgICAgICBjb25zdCBtb3JnYW4gPSB0aGlzLiNtb3JnYW47XG5cbiAgICAgICAgc3dpdGNoICh0cnVlKSB7XG4gICAgICAgIGNhc2UgKGFyZ3MubGVuZ3RoID49IDIgJiYgYXJnc1swXSBpbnN0YW5jZW9mIEh0dHBSZXF1ZXN0ICYmIGFyZ3NbMV0gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UpOiB7XG4gICAgICAgICAgICBjb25zdCBbIHJlcXVlc3QsIHJlc3BvbnNlIF0gPSBhcmdzIGFzIFsgSHR0cFJlcXVlc3QsIEh0dHBSZXNwb25zZSBdO1xuXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5mcm9tQ2FsbGJhY2s8dm9pZD4oY2FsbGJhY2sgPT4gbW9yZ2FuKHJlcXVlc3QsIHJlc3BvbnNlLCBjYWxsYmFjaykpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAoYXJncy5sZW5ndGggPj0gMSAmJiBhcmdzWzBdIGluc3RhbmNlb2YgRXJyb3IpOiB7XG4gICAgICAgICAgICBjb25zdCBbIGVycm9yLCAuLi5kYXRhIF0gPSBhcmdzIGFzIFsgRXJyb3IsIC4uLmFueVtdIF07XG5cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFyZ3VtZW50XG4gICAgICAgICAgICBsb2dnZXIubG9nKCdlcnJvcicsIGVycm9yLm1lc3NhZ2UsIGVycm9yLCAuLi5kYXRhKTtcblxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGNvbnN0IFsgbGV2ZWwsIG1lc3NhZ2UsIC4uLmRhdGEgXSA9IGFyZ3MgYXMgWyB0eXBlb2YgTG9nZ2luZ0xldmVsLCBzdHJpbmcsIC4uLmFueVtdIF07XG5cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFyZ3VtZW50XG4gICAgICAgICAgICBsb2dnZXIubG9nKGxldmVsLCBtZXNzYWdlLCAuLi5kYXRhKTtcblxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMb2dnZXIuaW5zdGFuY2U7XG4iXSwibmFtZXMiOlsiTG9nZ2luZ0xldmVsIiwiRmF0YWwiLCJFcnJvciIsIldhcm5pbmciLCJOb3RpY2UiLCJJbmZvIiwiSHR0cCIsIlF1ZXJ5IiwiVmVyYm9zZSIsIkRlYnVnIiwiY29sb3JpemVyTWFwIiwiX01hcCIsImNyZWF0ZVNjaGVtZSIsIm9wdGlvbnMiLCJuZXh0SW5kZXgiLCJzaXplIiwiY29sb3JpemVyIiwiY2hhbGsiLCJiZ0hleCIsImJhY2tncm91bmQiLCJoZXgiLCJmb3JlZ3JvdW5kIiwic2V0IiwiQ29sb3JWYWx1ZSIsIldoaXRlIiwiR3JheSIsIkJsYWNrIiwiQ3JpdGljYWwiLCJSZWd1bGFyIiwiQ29sb3JTY2hlbWUiLCJMb3VkIiwiZ2V0Q2hhbGtPZiIsImNvbG9yU2V0IiwiZ2V0IiwiaXNUVFkiLCJwcm9jZXNzIiwic3Rkb3V0IiwiaXNOb3RPbkNMSSIsImRlY29yYXRlTGFiZWwiLCJsYWJlbCIsInNjaGVtZSIsImRlY29yYXRlZExhYmVsIiwiYm9sZCIsInJvb3RQYXRoIiwiY3dkIiwiY29uanVuY3Rpb24iLCJibHVlIiwic3BsYXQiLCJfU3ltYm9sJGZvciIsIm5hbWUiLCJsZXZlbCIsIm1hcExvY2F0aW9uT2ZFcnJvclRocm93biIsImZpbGVuYW1lIiwidGFyZ2V0IiwicGF0aCIsInJlbGF0aXZlIiwiX3N0YXJ0c1dpdGhJbnN0YW5jZVByb3BlcnR5IiwiY2FsbCIsImdyYXkiLCJyZXBsYWNlIiwibWF0Y2hlcyIsIm1vZHVsZU5hbWUiLCJ0cmFpbGluZyIsInNlcCIsInVuZGVybGluZSIsImRpcm5hbWUiLCJiYXNlbmFtZSIsImhhbmRsZSIsImRhdGEiLCJfY29udGV4dCIsIl9jb250ZXh0MiIsIl9jb250ZXh0MyIsImVycm9yIiwidW5kZWZpbmVkIiwibWVzc2FnZSIsInN0YWNrIiwicmF3U3RhY2siLCJfbWFwSW5zdGFuY2VQcm9wZXJ0eSIsIl9zbGljZUluc3RhbmNlUHJvcGVydHkiLCJsZW5ndGgiLCJzcGxpdCIsImxpbmUiLCJpc0Fic29sdXRlIiwiY29udGV4dE5hbWUiLCJyYXdMb2NhdGlvbiIsImxvY2F0aW9uIiwiY29sdW1uIiwidmVyc2lvbiIsImpvaW4iLCJwYXlsb2FkIiwiaGlnaGxpZ2h0IiwibGFuZ3VhZ2UiLCJoYW5kbGVycyIsIkZhdGFsSGFuZGxlciIsIkVycm9ySGFuZGxlciIsIldhcm5pbmdIYW5kbGVyIiwiTm90aWNlSGFuZGxlciIsIkluZm9IYW5kbGVyIiwiSHR0cEhhbmRsZXIiLCJRdWVyeUhhbmRsZXIiLCJWZXJib3NlSGFuZGxlciIsIkRlYnVnSGFuZGxlciIsImZvcm1hdCIsInByaW50ZiIsInRpbWVzdGFtcCIsIkRhdGVUaW1lIiwibm93IiwidG9JU08iLCJpbmNsdWRlT2Zmc2V0IiwiaGFuZGxlciIsIl9maW5kSW5zdGFuY2VQcm9wZXJ0eSIsImZhbGxiYWNrIiwicGVyZm9ybUhhbmRsZSIsImRlZmF1bHQiLCJfUmVmbGVjdCRhcHBseSIsImV4dHJhRmluZ2VycHJpbnQiLCJ0cmFuc2FjdGlvbklkIiwiclRyYWNlciIsImlkIiwiRXhlY3V0aW9uTW9kZSIsIkRldmVsb3BtZW50TW9kZSIsIlByb2R1Y3Rpb25Nb2RlIiwiQ2x1c3RlcmluZ01vZGUiLCJNYXN0ZXJQcm9jZXNzIiwiV29ya2VyUHJvY2VzcyIsImV4ZWN1dGlvbk1vZGUiLCJlbnZpcm9ubWVudHMiLCJOT0RFX0VOViIsImNsdXN0ZXIiLCJpc1ByaW1hcnkiLCJpc01hc3RlciIsImRlY29yYXRlU3RhdHVzQ29kZSIsInN0YXR1c0NvZGUiLCJncm91cE9mQ29kZSIsIk1hdGgiLCJmbG9vciIsIk51bWJlciIsImJhc2VNZXNzYWdlIiwiU1RBVFVTX0NPREVTIiwiZ3JlZW4iLCJtYWdlbnRhIiwicmVkIiwiZm9ybWF0Rm9yTW9yZ2FuIiwidG9rZW5zIiwicmVxdWVzdCIsInJlc3BvbnNlIiwiXyIsInRva2VuIiwic3ViQXJncyIsIm1ldGhvZCIsIlVSTCIsImh0dHBWZXJzaW9uIiwiY29udGVudExlbmd0aCIsInJlc3BvbnNlVGltZSIsIiRtZXRob2QiLCIkdmVyc2lvbiIsInJnYiIsIiRzdGF0dXNDb2RlIiwiJGNvbnRlbnRMZW5ndGgiLCJwcmV0dHlCeXRlcyIsIiRyZXNwb25zZVRpbWUiLCJwcmV0dHlNcyIsIm1ldGFkYXRhIiwibW9yZ2FuIiwiY29tYmluZWQiLCJDb25zb2xlIiwiQ29uc29sZVRyYW5zcG9ydCIsIndpbnN0b24iLCJ0cmFuc3BvcnRzIiwiS2V5T2ZJbnN0YW5jZSIsIl9TeW1ib2wiLCJLZXlPZlBhc3Nwb3J0IiwiTG9nZ2VyIiwiY3JlYXRlTG9nZ2VyIiwibGV2ZWxzIiwiX2ZpbHRlckluc3RhbmNlUHJvcGVydHkiLCJsb2Rhc2giLCJmcm9tUGFpcnMiLCJ2YWx1ZSIsImZvcm1hdEZvckNMSSIsImV4aXRPbkVycm9yIiwic3RyZWFtIiwiUGFzc1Rocm91Z2giLCJvYmplY3RNb2RlIiwib24iLCJsb2ciLCJfdHJpbUluc3RhbmNlUHJvcGVydHkiLCJjb25zdHJ1Y3RvciIsInBhc3Nwb3J0IiwiUmVmZXJlbmNlRXJyb3IiLCJpbnN0YW5jZSIsIlJlZmxlY3QiLCJoYXNPd25NZXRhZGF0YSIsImdldE93bk1ldGFkYXRhIiwiZGVmaW5lTWV0YWRhdGEiLCJhcmdzIiwibG9nZ2VyIiwiSHR0cFJlcXVlc3QiLCJIdHRwUmVzcG9uc2UiLCJQcm9taXNlIiwiZnJvbUNhbGxiYWNrIiwiY2FsbGJh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
539
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzIiwic291cmNlcyI6WyIuLi9zb3VyY2VzL2hlbHBlcnMvbG9nZ2luZy1sZXZlbC50cyIsIi4uL3NvdXJjZXMvaGVscGVycy9jb2xvci1zY2hlbWUudHMiLCIuLi9zb3VyY2VzL2hlbHBlcnMvbGFiZWwtZGVjb3JhdG9yLnRzIiwiLi4vc291cmNlcy9oYW5kbGVycy9lcnJvci50cyIsIi4uL3NvdXJjZXMvaGFuZGxlcnMvZmF0YWwudHMiLCIuLi9zb3VyY2VzL2hhbmRsZXJzL3dhcm5pbmcudHMiLCIuLi9zb3VyY2VzL2hhbmRsZXJzL25vdGljZS50cyIsIi4uL3NvdXJjZXMvaGFuZGxlcnMvaW5mby50cyIsIi4uL3NvdXJjZXMvaGFuZGxlcnMvaHR0cC50cyIsIi4uL3NvdXJjZXMvaGFuZGxlcnMvcXVlcnkudHMiLCIuLi9zb3VyY2VzL2hhbmRsZXJzL3ZlcmJvc2UudHMiLCIuLi9zb3VyY2VzL2hhbmRsZXJzL2RlYnVnLnRzIiwiLi4vc291cmNlcy9oYW5kbGVycy9pbmRleC50cyIsIi4uL3NvdXJjZXMvZm9ybWF0dGVycy9jb21tYW5kLWxpbmUudHMiLCIuLi9zb3VyY2VzL2hlbHBlcnMvY29uc3RhbnRzLnRzIiwiLi4vc291cmNlcy9mb3JtYXR0ZXJzL21vcmdhbi50cyIsIi4uL3NvdXJjZXMvY2xhc3Nlcy9sb2dnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgTG9nZ2luZ0xldmVsID0ge1xuXHQvLyBDcml0aWNhbCBsZXZlbHMuIChJdCB3aWxsIGNyYXNoIHRoZSBwcm9jZXNzKVxuXHRGYXRhbDogMCxcblx0RXJyb3I6IDEsXG5cblx0Ly8gV2FybmluZyBsZXZlbHMuIChJdCBqdXN0IHJlcG9ydCB3YXJuaW5nIGluZm9ybWF0aW9uLCBub3QgY3Jhc2ggdGhlIHByb2Nlc3MpXG5cdFdhcm5pbmc6IDIsXG5cblx0Ly8gUmVndWxhciBsZXZlbCBhbmQgYWxpYXNlcy5cblx0Tm90aWNlOiAzLFxuXHRJbmZvOiAzLFxuXG5cdC8vIE1heWJlIHNlbnNpdGl2ZSBsZXZlbHMuIChJbiBnZW5lcmFsLCBkb2VzIG5vdCB1c2VmdWwpXG5cdEh0dHA6IDQsXG5cdFF1ZXJ5OiA0LFxuXG5cdC8vIExvdWQgbGV2ZWxzLlxuXHRWZXJib3NlOiA1LFxuXHREZWJ1ZzogNSxcbn0gYXMgY29uc3RcblxudHlwZSBMb2dnaW5nTGV2ZWwgPSB0eXBlb2YgTG9nZ2luZ0xldmVsW2tleW9mIHR5cGVvZiBMb2dnaW5nTGV2ZWxdXG5cbmV4cG9ydCBkZWZhdWx0IExvZ2dpbmdMZXZlbFxuIiwiLy8gVGhpcmQtcGFydHkgbW9kdWxlcy5cbmltcG9ydCBjaGFsaywgeyB0eXBlIENoYWxrSW5zdGFuY2UgfSBmcm9tICdjaGFsaydcblxuLy8gQ29uc3RhbnRzLlxuY29uc3QgY29sb3JpemVyTWFwID0gbmV3IE1hcDxudW1iZXIsIENoYWxrSW5zdGFuY2U+KClcblxuLy8gSGVscGVycy5cbmZ1bmN0aW9uIGNyZWF0ZVNjaGVtZShvcHRpb25zOiB7IGJhY2tncm91bmQ6IENvbG9yVmFsdWUsIGZvcmVncm91bmQ6IENvbG9yVmFsdWUgfSk6IG51bWJlciB7XG5cdGNvbnN0IG5leHRJbmRleCA9IGNvbG9yaXplck1hcC5zaXplXG5cdGNvbnN0IGNvbG9yaXplciA9IGNoYWxrLmJnSGV4KG9wdGlvbnMuYmFja2dyb3VuZCkuaGV4KG9wdGlvbnMuZm9yZWdyb3VuZClcblxuXHRjb2xvcml6ZXJNYXAuc2V0KG5leHRJbmRleCwgY29sb3JpemVyKVxuXG5cdHJldHVybiBuZXh0SW5kZXhcbn1cblxuLy8gQ29sb3IgZGVmaW5pdGlvbnMuXG5jb25zdCBDb2xvclZhbHVlID0ge1xuXHQvLyBCYXNpYyBjb2xvcnMuXG5cdFdoaXRlOiAnI0ZGRkZGRicsXG5cdEdyYXk6ICcjODA4MDgwJyxcblx0QmxhY2s6ICcjMDAwMDAwJyxcblxuXHQvLyBTcGVjaWFsaXplZCBjb2xvcnMuXG5cdENyaXRpY2FsOiAnI0Q2MzAzMScsXG5cdFdhcm5pbmc6ICcjRkRDQjZFJyxcblx0UmVndWxhcjogJyMwOTg0RTMnLFxuXHRIdHRwOiAnIzZBQjA0QycsXG5cdFF1ZXJ5OiAnIzM5OUFGMycsXG59IGFzIGNvbnN0XG5cbnR5cGUgQ29sb3JWYWx1ZSA9IHR5cGVvZiBDb2xvclZhbHVlW2tleW9mIHR5cGVvZiBDb2xvclZhbHVlXVxuXG5jb25zdCBDb2xvclNjaGVtZSA9IHtcblx0Q3JpdGljYWw6IGNyZWF0ZVNjaGVtZSh7XG5cdFx0YmFja2dyb3VuZDogQ29sb3JWYWx1ZS5Dcml0aWNhbCxcblx0XHRmb3JlZ3JvdW5kOiBDb2xvclZhbHVlLkJsYWNrLFxuXHR9KSxcblxuXHRXYXJuaW5nOiBjcmVhdGVTY2hlbWUoe1xuXHRcdGJhY2tncm91bmQ6IENvbG9yVmFsdWUuV2FybmluZyxcblx0XHRmb3JlZ3JvdW5kOiBDb2xvclZhbHVlLkJsYWNrLFxuXHR9KSxcblxuXHRSZWd1bGFyOiBjcmVhdGVTY2hlbWUoe1xuXHRcdGJhY2tncm91bmQ6IENvbG9yVmFsdWUuUmVndWxhcixcblx0XHRmb3JlZ3JvdW5kOiBDb2xvclZhbHVlLldoaXRlLFxuXHR9KSxcblxuXHRIdHRwOiBjcmVhdGVTY2hlbWUoe1xuXHRcdGJhY2tncm91bmQ6IENvbG9yVmFsdWUuSHR0cCxcblx0XHRmb3JlZ3JvdW5kOiBDb2xvclZhbHVlLkJsYWNrLFxuXHR9KSxcblxuXHRRdWVyeTogY3JlYXRlU2NoZW1lKHtcblx0XHRiYWNrZ3JvdW5kOiBDb2xvclZhbHVlLlF1ZXJ5LFxuXHRcdGZvcmVncm91bmQ6IENvbG9yVmFsdWUuQmxhY2ssXG5cdH0pLFxuXG5cdExvdWQ6IGNyZWF0ZVNjaGVtZSh7XG5cdFx0YmFja2dyb3VuZDogQ29sb3JWYWx1ZS5CbGFjayxcblx0XHRmb3JlZ3JvdW5kOiBDb2xvclZhbHVlLkdyYXksXG5cdH0pLFxufSBhcyBjb25zdFxuXG50eXBlIENvbG9yU2NoZW1lID0gdHlwZW9mIENvbG9yU2NoZW1lW2tleW9mIHR5cGVvZiBDb2xvclNjaGVtZV1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoYWxrT2YoY29sb3JTZXQ6IENvbG9yU2NoZW1lKTogQ2hhbGtJbnN0YW5jZSB7XG5cdHJldHVybiBjb2xvcml6ZXJNYXAuZ2V0KGNvbG9yU2V0KSA/PyBjaGFsa1xufVxuXG5leHBvcnQgZGVmYXVsdCBDb2xvclNjaGVtZVxuIiwiLy8gTm9kZS5qcyBidWlsdC1pbiBBUElzLlxuaW1wb3J0IHByb2Nlc3MgZnJvbSAncHJvY2VzcydcblxuLy8gTG9jYWwgaGVscGVycy5cbmltcG9ydCBDb2xvclNjaGVtZSwgeyBnZXRDaGFsa09mIH0gZnJvbSAnLi9jb2xvci1zY2hlbWUnXG5cbi8vIENvbnN0YW50cy5cbmNvbnN0IHsgaXNUVFkgfSA9IHByb2Nlc3Muc3Rkb3V0XG5jb25zdCBpc05vdE9uQ0xJID0gIWlzVFRZXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlY29yYXRlTGFiZWw8VCBleHRlbmRzIHN0cmluZz4obGFiZWw6IFQsIHNjaGVtZTogQ29sb3JTY2hlbWUpOiBUIHtcblx0aWYgKGlzTm90T25DTEkpIHJldHVybiBsYWJlbFxuXG5cdGNvbnN0IGNoYWxrID0gZ2V0Q2hhbGtPZihzY2hlbWUpXG5cdGNvbnN0IGRlY29yYXRlZExhYmVsID0gY2hhbGsuYm9sZChgICR7bGFiZWx9IGApXG5cblx0cmV0dXJuIGRlY29yYXRlZExhYmVsIGFzIFRcbn1cbiIsIi8vIE5vZGUuanMgYnVpbHQtaW4gQVBJcy5cbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgcHJvY2VzcywgeyB2ZXJzaW9uIH0gZnJvbSAncHJvY2VzcydcblxuLy8gVGhpcmQtcGFydHkgbW9kdWxlcy5cbmltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcblxuLy8gTG9jYWwgaGVscGVycy5cbmltcG9ydCBMb2dnaW5nTGV2ZWwgZnJvbSAnLi4vaGVscGVycy9sb2dnaW5nLWxldmVsJ1xuaW1wb3J0IENvbG9yU2NoZW1lIGZyb20gJy4uL2hlbHBlcnMvY29sb3Itc2NoZW1lJ1xuaW1wb3J0IGRlY29yYXRlTGFiZWwgZnJvbSAnLi4vaGVscGVycy9sYWJlbC1kZWNvcmF0b3InXG5cbi8vIFR5cGUgZGVmaW5pdGlvbnMuXG50eXBlIExvZ2dpbmdEYXRhID0geyBsZXZlbDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcgfSAmIFJlY29yZDxQcm9wZXJ0eUtleSwgYW55PlxudHlwZSBIYW5kbGVkRGF0YSA9IHsgbGFiZWw6IHN0cmluZywgcGF5bG9hZDogc3RyaW5nIH1cblxuLy8gQ29uc3RhbnRzLlxuY29uc3Qgcm9vdFBhdGggPSBwcm9jZXNzLmN3ZCgpXG5jb25zdCBjb25qdW5jdGlvbiA9IGAgJHtjaGFsay5ibHVlKCfilIDilIAnKX0gYFxuY29uc3Qgc3BsYXQ6IHVuaXF1ZSBzeW1ib2wgPSBTeW1ib2wuZm9yKCdzcGxhdCcpXG5cbi8vIEhhbmRsZXIgbWV0YWRhdGEuXG5leHBvcnQgY29uc3QgbmFtZSA9ICdlcnJvcidcbmV4cG9ydCBjb25zdCBsZXZlbCA9IExvZ2dpbmdMZXZlbC5FcnJvclxuZXhwb3J0IGNvbnN0IGxhYmVsID0gZGVjb3JhdGVMYWJlbCgnRVJST1InLCBDb2xvclNjaGVtZS5Dcml0aWNhbClcblxuZnVuY3Rpb24gbWFwTG9jYXRpb25PZkVycm9yVGhyb3duKGZpbGVuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRsZXQgdGFyZ2V0ID0gcGF0aC5yZWxhdGl2ZShyb290UGF0aCwgZmlsZW5hbWUpXG5cblx0aWYgKHRhcmdldC5zdGFydHNXaXRoKCdub2RlX21vZHVsZXMnKSkge1xuXHRcdHRhcmdldCA9IGNoYWxrLmdyYXkodGFyZ2V0KS5yZXBsYWNlKFxuXHRcdFx0L25vZGVfbW9kdWxlc1tcXFxcL10oW15cXFxcL10rKSguKikvLFxuXHRcdFx0KG1hdGNoZXMsIG1vZHVsZU5hbWU6IHN0cmluZywgdHJhaWxpbmc6IHN0cmluZykgPT4gYG5vZGVfbW9kdWxlcyR7cGF0aC5zZXB9JHtjaGFsay5ib2xkLnVuZGVybGluZShtb2R1bGVOYW1lKX0ke2NoYWxrLmdyYXkodHJhaWxpbmcpfWAsXG5cdFx0KVxuXHR9IGVsc2Uge1xuXHRcdHRhcmdldCA9IGAke2NoYWxrLmdyYXkocGF0aC5kaXJuYW1lKHRhcmdldCkgKyBwYXRoLnNlcCl9JHtjaGFsay5ib2xkLnVuZGVybGluZShwYXRoLmJhc2VuYW1lKHRhcmdldCkpfWBcblx0fVxuXG5cdHJldHVybiB0YXJnZXRcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaGFuZGxlKGRhdGE6IExvZ2dpbmdEYXRhKTogSGFuZGxlZERhdGEgfCB1bmRlZmluZWQge1xuXHRjb25zdCB7IFtzcGxhdF06IFsgZXJyb3IgXSA9IFtdIH0gPSBkYXRhIGFzIGFueVxuXG5cdGlmICghKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZFxuXHR9XG5cblx0Y29uc3QgeyBuYW1lOiBlcnJvck5hbWUsIG1lc3NhZ2UsIHN0YWNrOiByYXdTdGFjayA9ICcnIH0gPSBlcnJvclxuXG5cdGNvbnN0IHN0YWNrID0gcmF3U3RhY2tcblx0XHQuc2xpY2UoZXJyb3JOYW1lLmxlbmd0aCArIG1lc3NhZ2UubGVuZ3RoICsgMylcblx0XHQuc3BsaXQoJ1xcbicpXG5cdFx0Lm1hcChsaW5lID0+IGxpbmUucmVwbGFjZSgvXlxccythdCAvZywgJycpKVxuXHRcdC5tYXAobGluZSA9PiAocGF0aC5pc0Fic29sdXRlKGxpbmUpID8gYDxhbm9ueW1vdXM+JHtjb25qdW5jdGlvbn0ke21hcExvY2F0aW9uT2ZFcnJvclRocm93bihsaW5lKX1gIDogbGluZSkpXG5cdFx0Lm1hcChsaW5lID0+IGxpbmUucmVwbGFjZSgvXiguKykgXFwoKC4rKVxcKSQvLCAobWF0Y2hlcywgY29udGV4dE5hbWU6IHN0cmluZywgcmF3TG9jYXRpb246IHN0cmluZykgPT4ge1xuXHRcdFx0bGV0IGxvY2F0aW9uID0gJydcblxuXHRcdFx0aWYgKHJhd0xvY2F0aW9uID09PSAnPGFub255bW91cz4nKSB7XG5cdFx0XHRcdGxvY2F0aW9uID0gY2hhbGsuZ3JheShyYXdMb2NhdGlvbilcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IFsgZmlsZW5hbWUsIG9jY3VycmVkTGluZSwgb2NjdXJyZWRDb2x1bW4gXSA9IHJhd0xvY2F0aW9uLnNwbGl0KCc6JylcblxuXHRcdFx0XHRpZiAocGF0aC5pc0Fic29sdXRlKGZpbGVuYW1lKSkge1xuXHRcdFx0XHRcdGNvbnN0IHRhcmdldCA9IG1hcExvY2F0aW9uT2ZFcnJvclRocm93bihwYXRoLnJlbGF0aXZlKHJvb3RQYXRoLCBmaWxlbmFtZSkpXG5cdFx0XHRcdFx0Y29uc3QgdHJhaWxpbmcgPSBjaGFsay5ncmF5KGA6JHtvY2N1cnJlZExpbmV9OiR7b2NjdXJyZWRDb2x1bW59YClcblxuXHRcdFx0XHRcdGxvY2F0aW9uID0gdGFyZ2V0ICsgdHJhaWxpbmdcblx0XHRcdFx0fSBlbHNlIGlmICghZmlsZW5hbWUuc3RhcnRzV2l0aCgnZGF0YTonKSkge1xuXHRcdFx0XHRcdGxvY2F0aW9uID0gY2hhbGsuZ3JheShgaHR0cHM6Ly9naXRodWIuY29tLyR7Y2hhbGsuYm9sZC51bmRlcmxpbmUoJ25vZGVqcycpfS9ub2RlL2Jsb2IvJHt2ZXJzaW9ufS9saWIvJHtmaWxlbmFtZX0jTCR7b2NjdXJyZWRMaW5lfWApXG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGAke2NvbnRleHROYW1lfSR7Y29uanVuY3Rpb259JHtsb2NhdGlvbn1gXG5cdFx0fSkpXG5cdFx0LmpvaW4oJ1xcbicpXG5cblx0Y29uc3QgZGVjb3JhdGVkTGFiZWwgPSBkZWNvcmF0ZUxhYmVsKGVycm9yTmFtZSwgQ29sb3JTY2hlbWUuQ3JpdGljYWwpXG5cdGNvbnN0IHBheWxvYWQgPSBgJHttZXNzYWdlfVxcblxcbiR7c3RhY2t9XFxuYFxuXG5cdHJldHVybiB7IGxhYmVsOiBkZWNvcmF0ZWRMYWJlbCwgcGF5bG9hZCB9XG59XG4iLCIvLyBMb2NhbCBoZWxwZXJzLlxuaW1wb3J0IExvZ2dpbmdMZXZlbCBmcm9tICcuLi9oZWxwZXJzL2xvZ2dpbmctbGV2ZWwnXG5pbXBvcnQgQ29sb3JTY2hlbWUgZnJvbSAnLi4vaGVscGVycy9jb2xvci1zY2hlbWUnXG5pbXBvcnQgZGVjb3JhdGVMYWJlbCBmcm9tICcuLi9oZWxwZXJzL2xhYmVsLWRlY29yYXRvcidcblxuLy8gSGFuZGxlciBtZXRhZGF0YS5cbmV4cG9ydCBjb25zdCBuYW1lID0gJ2ZhdGFsJ1xuZXhwb3J0IGNvbnN0IGxldmVsID0gTG9nZ2luZ0xldmVsLkZhdGFsXG5leHBvcnQgY29uc3QgbGFiZWwgPSBkZWNvcmF0ZUxhYmVsKCdGQVRBTCcsIENvbG9yU2NoZW1lLkNyaXRpY2FsKVxuXG5leHBvcnQgeyBkZWZhdWx0IH0gZnJvbSAnLi9lcnJvcicgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLWV4cG9ydHNcbiIsIi8vIExvY2FsIGhlbHBlcnMuXG5pbXBvcnQgTG9nZ2luZ0xldmVsIGZyb20gJy4uL2hlbHBlcnMvbG9nZ2luZy1sZXZlbCdcbmltcG9ydCBDb2xvclNjaGVtZSBmcm9tICcuLi9oZWxwZXJzL2NvbG9yLXNjaGVtZSdcbmltcG9ydCBkZWNvcmF0ZUxhYmVsIGZyb20gJy4uL2hlbHBlcnMvbGFiZWwtZGVjb3JhdG9yJ1xuXG4vLyBIYW5kbGVyIG1ldGFkYXRhLlxuZXhwb3J0IGNvbnN0IG5hbWUgPSAnd2FybmluZydcbmV4cG9ydCBjb25zdCBsZXZlbCA9IExvZ2dpbmdMZXZlbC5XYXJuaW5nXG5leHBvcnQgY29uc3QgbGFiZWwgPSBkZWNvcmF0ZUxhYmVsKCdXQVJOSU5HJywgQ29sb3JTY2hlbWUuV2FybmluZylcblxuZXhwb3J0IGRlZmF1bHQgbnVsbFxuIiwiLy8gTG9jYWwgaGVscGVycy5cbmltcG9ydCBMb2dnaW5nTGV2ZWwgZnJvbSAnLi4vaGVscGVycy9sb2dnaW5nLWxldmVsJ1xuaW1wb3J0IENvbG9yU2NoZW1lIGZyb20gJy4uL2hlbHBlcnMvY29sb3Itc2NoZW1lJ1xuaW1wb3J0IGRlY29yYXRlTGFiZWwgZnJvbSAnLi4vaGVscGVycy9sYWJlbC1kZWNvcmF0b3InXG5cbi8vIEhhbmRsZXIgbWV0YWRhdGEuXG5leHBvcnQgY29uc3QgbmFtZSA9ICdub3RpY2UnXG5leHBvcnQgY29uc3QgbGV2ZWwgPSBMb2dnaW5nTGV2ZWwuTm90aWNlXG5leHBvcnQgY29uc3QgbGFiZWwgPSBkZWNvcmF0ZUxhYmVsKCdOT1RJQ0UnLCBDb2xvclNjaGVtZS5SZWd1bGFyKVxuXG5leHBvcnQgZGVmYXVsdCBudWxsXG4iLCIvLyBMb2NhbCBoZWxwZXJzLlxuaW1wb3J0IExvZ2dpbmdMZXZlbCBmcm9tICcuLi9oZWxwZXJzL2xvZ2dpbmctbGV2ZWwnXG5pbXBvcnQgQ29sb3JTY2hlbWUgZnJvbSAnLi4vaGVscGVycy9jb2xvci1zY2hlbWUnXG5pbXBvcnQgZGVjb3JhdGVMYWJlbCBmcm9tICcuLi9oZWxwZXJzL2xhYmVsLWRlY29yYXRvcidcblxuLy8gSGFuZGxlciBtZXRhZGF0YS5cbmV4cG9ydCBjb25zdCBuYW1lID0gJ2luZm8nXG5leHBvcnQgY29uc3QgbGV2ZWwgPSBMb2dnaW5nTGV2ZWwuSW5mb1xuZXhwb3J0IGNvbnN0IGxhYmVsID0gZGVjb3JhdGVMYWJlbCgnSU5GTycsIENvbG9yU2NoZW1lLlJlZ3VsYXIpXG5cbmV4cG9ydCBkZWZhdWx0IG51bGxcbiIsIi8vIExvY2FsIGhlbHBlcnMuXG5pbXBvcnQgTG9nZ2luZ0xldmVsIGZyb20gJy4uL2hlbHBlcnMvbG9nZ2luZy1sZXZlbCdcbmltcG9ydCBDb2xvclNjaGVtZSBmcm9tICcuLi9oZWxwZXJzL2NvbG9yLXNjaGVtZSdcbmltcG9ydCBkZWNvcmF0ZUxhYmVsIGZyb20gJy4uL2hlbHBlcnMvbGFiZWwtZGVjb3JhdG9yJ1xuXG4vLyBIYW5kbGVyIG1ldGFkYXRhLlxuZXhwb3J0IGNvbnN0IG5hbWUgPSAnaHR0cCdcbmV4cG9ydCBjb25zdCBsZXZlbCA9IExvZ2dpbmdMZXZlbC5IdHRwXG5leHBvcnQgY29uc3QgbGFiZWwgPSBkZWNvcmF0ZUxhYmVsKCdIVFRQJywgQ29sb3JTY2hlbWUuSHR0cClcblxuZXhwb3J0IGRlZmF1bHQgbnVsbFxuIiwiLy8gSGlnaGxpZ2h0LmpzXG5pbXBvcnQgaGlnaGxpZ2h0IGZyb20gJ2NsaS1oaWdobGlnaHQnXG5cbi8vIExvY2FsIGhlbHBlcnMuXG5pbXBvcnQgTG9nZ2luZ0xldmVsIGZyb20gJy4uL2hlbHBlcnMvbG9nZ2luZy1sZXZlbCdcbmltcG9ydCBDb2xvclNjaGVtZSBmcm9tICcuLi9oZWxwZXJzL2NvbG9yLXNjaGVtZSdcbmltcG9ydCBkZWNvcmF0ZUxhYmVsIGZyb20gJy4uL2hlbHBlcnMvbGFiZWwtZGVjb3JhdG9yJ1xuXG4vLyBUeXBlIGRlZmluaXRpb25zLlxudHlwZSBMb2dnaW5nRGF0YSA9IHsgbGV2ZWw6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nIH0gJiBSZWNvcmQ8UHJvcGVydHlLZXksIGFueT5cbnR5cGUgSGFuZGxlZERhdGEgPSB7IGxhYmVsOiBzdHJpbmcsIHBheWxvYWQ6IHN0cmluZyB9XG5cbi8vIEhhbmRsZXIgbWV0YWRhdGEuXG5leHBvcnQgY29uc3QgbmFtZSA9ICdxdWVyeSdcbmV4cG9ydCBjb25zdCBsZXZlbCA9IExvZ2dpbmdMZXZlbC5RdWVyeVxuZXhwb3J0IGNvbnN0IGxhYmVsID0gZGVjb3JhdGVMYWJlbCgnUVVFUlknLCBDb2xvclNjaGVtZS5RdWVyeSlcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaGFuZGxlKGRhdGE6IExvZ2dpbmdEYXRhKTogSGFuZGxlZERhdGEgfCB1bmRlZmluZWQge1xuXHRjb25zdCBwYXlsb2FkID0gaGlnaGxpZ2h0KGRhdGEubWVzc2FnZSwgeyBsYW5ndWFnZTogJ3NxbCcgfSlcblxuXHRyZXR1cm4geyBsYWJlbCwgcGF5bG9hZCB9XG59XG4iLCIvLyBMb2NhbCBoZWxwZXJzLlxuaW1wb3J0IExvZ2dpbmdMZXZlbCBmcm9tICcuLi9oZWxwZXJzL2xvZ2dpbmctbGV2ZWwnXG5pbXBvcnQgQ29sb3JTY2hlbWUgZnJvbSAnLi4vaGVscGVycy9jb2xvci1zY2hlbWUnXG5pbXBvcnQgZGVjb3JhdGVMYWJlbCBmcm9tICcuLi9oZWxwZXJzL2xhYmVsLWRlY29yYXRvcidcblxuLy8gSGFuZGxlciBtZXRhZGF0YS5cbmV4cG9ydCBjb25zdCBuYW1lID0gJ3ZlcmJvc2UnXG5leHBvcnQgY29uc3QgbGV2ZWwgPSBMb2dnaW5nTGV2ZWwuVmVyYm9zZVxuZXhwb3J0IGNvbnN0IGxhYmVsID0gZGVjb3JhdGVMYWJlbCgnVkVSQk9TRScsIENvbG9yU2NoZW1lLkxvdWQpXG5cbmV4cG9ydCBkZWZhdWx0IG51bGxcbiIsIi8vIExvY2FsIGhlbHBlcnMuXG5pbXBvcnQgTG9nZ2luZ0xldmVsIGZyb20gJy4uL2hlbHBlcnMvbG9nZ2luZy1sZXZlbCdcbmltcG9ydCBDb2xvclNjaGVtZSBmcm9tICcuLi9oZWxwZXJzL2NvbG9yLXNjaGVtZSdcbmltcG9ydCBkZWNvcmF0ZUxhYmVsIGZyb20gJy4uL2hlbHBlcnMvbGFiZWwtZGVjb3JhdG9yJ1xuXG4vLyBIYW5kbGVyIG1ldGFkYXRhLlxuZXhwb3J0IGNvbnN0IG5hbWUgPSAnZGVidWcnXG5leHBvcnQgY29uc3QgbGV2ZWwgPSBMb2dnaW5nTGV2ZWwuRGVidWdcbmV4cG9ydCBjb25zdCBsYWJlbCA9IGRlY29yYXRlTGFiZWwoJ0RFQlVHJywgQ29sb3JTY2hlbWUuTG91ZClcblxuZXhwb3J0IGRlZmF1bHQgbnVsbFxuIiwiLy8gSGFuZGxlciBpbXBsZW1lbnRhdGlvbnMuXG5pbXBvcnQgKiBhcyBGYXRhbEhhbmRsZXIgZnJvbSAnLi9mYXRhbCdcbmltcG9ydCAqIGFzIEVycm9ySGFuZGxlciBmcm9tICcuL2Vycm9yJ1xuaW1wb3J0ICogYXMgV2FybmluZ0hhbmRsZXIgZnJvbSAnLi93YXJuaW5nJ1xuaW1wb3J0ICogYXMgTm90aWNlSGFuZGxlciBmcm9tICcuL25vdGljZSdcbmltcG9ydCAqIGFzIEluZm9IYW5kbGVyIGZyb20gJy4vaW5mbydcbmltcG9ydCAqIGFzIEh0dHBIYW5kbGVyIGZyb20gJy4vaHR0cCdcbmltcG9ydCAqIGFzIFF1ZXJ5SGFuZGxlciBmcm9tICcuL3F1ZXJ5J1xuaW1wb3J0ICogYXMgVmVyYm9zZUhhbmRsZXIgZnJvbSAnLi92ZXJib3NlJ1xuaW1wb3J0ICogYXMgRGVidWdIYW5kbGVyIGZyb20gJy4vZGVidWcnXG5cbmNvbnN0IGhhbmRsZXJzID0gW1xuXHRGYXRhbEhhbmRsZXIsXG5cdEVycm9ySGFuZGxlcixcblx0V2FybmluZ0hhbmRsZXIsXG5cdE5vdGljZUhhbmRsZXIsXG5cdEluZm9IYW5kbGVyLFxuXHRIdHRwSGFuZGxlcixcblx0UXVlcnlIYW5kbGVyLFxuXHRWZXJib3NlSGFuZGxlcixcblx0RGVidWdIYW5kbGVyLFxuXVxuXG5leHBvcnQgdHlwZSBMb2dnaW5nTGV2ZWxOYW1lID0gKHR5cGVvZiBoYW5kbGVycyBleHRlbmRzIChpbmZlciBUKVtdID8gVCA6IG5ldmVyKVsnbmFtZSddXG5leHBvcnQgZGVmYXVsdCBoYW5kbGVyc1xuIiwiLy8gVGhpcmQtcGFydHkgbW9kdWxlcy5cbmltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcbmltcG9ydCByVHJhY2VyIGZyb20gJ2Nscy1ydHJhY2VyJ1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tICdsdXhvbidcbmltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ3dpbnN0b24nXG5cbi8vIExvY2FsIGhlbHBlcnMuXG5pbXBvcnQgTG9nZ2luZ0xldmVsIGZyb20gJy4uL2hlbHBlcnMvbG9nZ2luZy1sZXZlbCdcblxuLy8gSGFuZGxlciBpbXBsZW1lbnRhdGlvbnMuXG5pbXBvcnQgaGFuZGxlcnMgZnJvbSAnLi4vaGFuZGxlcnMnXG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1hdC5wcmludGYoZGF0YSA9PiB7XG5cdGNvbnN0IHRpbWVzdGFtcCA9IGNoYWxrLmdyYXkoRGF0ZVRpbWUubm93KCkudG9JU08oeyBpbmNsdWRlT2Zmc2V0OiB0cnVlIH0pKVxuXHRjb25zdCBoYW5kbGVyID0gaGFuZGxlcnMuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUgPT09IGRhdGEubGV2ZWwpXG5cdGNvbnN0IGZhbGxiYWNrID0geyBsYWJlbDogaGFuZGxlcj8ubGFiZWwsIHBheWxvYWQ6IGRhdGEubWVzc2FnZSB9XG5cdGNvbnN0IHBlcmZvcm1IYW5kbGUgPSBoYW5kbGVyPy5kZWZhdWx0ID8/ICgoKTogdHlwZW9mIGZhbGxiYWNrID0+IGZhbGxiYWNrKVxuXG5cdC8vIEV4ZWN1dGUgaGFuZGxlciBhbmQgdGhlbiwgZ2V0IGRlY29yYXRlZCBwYXlsb2FkLlxuXHRjb25zdCB7IGxhYmVsLCBwYXlsb2FkIH0gPSBSZWZsZWN0LmFwcGx5KHBlcmZvcm1IYW5kbGUsIHVuZGVmaW5lZCwgWyBkYXRhIF0pID8/IGZhbGxiYWNrXG5cblx0bGV0IGV4dHJhRmluZ2VycHJpbnQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuXG5cdGlmIChoYW5kbGVyPy5sZXZlbCA9PT0gTG9nZ2luZ0xldmVsLkh0dHApIHtcblx0XHRleHRyYUZpbmdlcnByaW50ID0gZGF0YS50cmFuc2FjdGlvbklkXG5cdFx0XHQ/IGAoVHJhbnNhY3Rpb24tSUQgPSAke2RhdGEudHJhbnNhY3Rpb25JZCBhcyBzdHJpbmd9KWBcblx0XHRcdDogYChSZXF1ZXN0LUlEID0gJHtyVHJhY2VyLmlkKCkgYXMgc3RyaW5nfSlgXG5cdH1cblxuXHRyZXR1cm4gYCR7bGFiZWwgYXMgc3RyaW5nfSAke3RpbWVzdGFtcH0ke2V4dHJhRmluZ2VycHJpbnQgPyBgICR7ZXh0cmFGaW5nZXJwcmludH1gIDogJyd9XFxuJHtwYXlsb2FkIGFzIHN0cmluZ31gXG59KVxuIiwiLy8gTm9kZS5qcyBidWlsdC1pbiBBUElzLlxuaW1wb3J0IGNsdXN0ZXIgZnJvbSAnY2x1c3RlcidcbmltcG9ydCB7IGVudiBhcyBlbnZpcm9ubWVudHMgfSBmcm9tICdwcm9jZXNzJ1xuaW1wb3J0IHsgaXNNYWluVGhyZWFkIH0gZnJvbSAnd29ya2VyX3RocmVhZHMnXG5cbi8vIFR5cGUgZGVmaW5pdGlvbnMuXG5leHBvcnQgY29uc3QgRXhlY3V0aW9uTW9kZSA9IHtcblx0RGV2ZWxvcG1lbnRNb2RlOiAnZGV2ZWxvcG1lbnQnLFxuXHRQcm9kdWN0aW9uTW9kZTogJ3Byb2R1Y3Rpb24nLFxufSBhcyBjb25zdFxuXG5leHBvcnQgY29uc3QgQ2x1c3RlcmluZ01vZGUgPSB7XG5cdE1hc3RlclByb2Nlc3M6IDAsXG5cdFdvcmtlclByb2Nlc3M6IDEsXG59IGFzIGNvbnN0XG5cbmV4cG9ydCBjb25zdCBUaHJlYWRpbmdNb2RlID0ge1xuXHRNYWluVGhyZWFkOiAwLFxuXHRXb3JrZXJUaHJlYWQ6IDEsXG59IGFzIGNvbnN0XG5cbmV4cG9ydCB0eXBlIEV4ZWN1dGlvbk1vZGUgPSB0eXBlb2YgRXhlY3V0aW9uTW9kZVtrZXlvZiB0eXBlb2YgRXhlY3V0aW9uTW9kZV1cbmV4cG9ydCB0eXBlIENsdXN0ZXJpbmdNb2RlID0gdHlwZW9mIENsdXN0ZXJpbmdNb2RlW2tleW9mIHR5cGVvZiBDbHVzdGVyaW5nTW9kZV1cbmV4cG9ydCB0eXBlIFRocmVhZGluZ01vZGUgPSB0eXBlb2YgVGhyZWFkaW5nTW9kZVtrZXlvZiB0eXBlb2YgVGhyZWFkaW5nTW9kZV1cblxuLy8gRXhwb3J0aW5ncy5cbmV4cG9ydCBjb25zdCBleGVjdXRpb25Nb2RlID0gZW52aXJvbm1lbnRzLk5PREVfRU5WIGFzIEV4ZWN1dGlvbk1vZGUgPz8gRXhlY3V0aW9uTW9kZS5EZXZlbG9wbWVudE1vZGVcblxuZXhwb3J0IGNvbnN0IGNsdXN0ZXJpbmdNb2RlOiBDbHVzdGVyaW5nTW9kZSA9IGNsdXN0ZXIuaXNQcmltYXJ5ID8/IGNsdXN0ZXIuaXNNYXN0ZXJcblx0PyBDbHVzdGVyaW5nTW9kZS5NYXN0ZXJQcm9jZXNzXG5cdDogQ2x1c3RlcmluZ01vZGUuV29ya2VyUHJvY2Vzc1xuXG5leHBvcnQgY29uc3QgdGhyZWFkaW5nTW9kZTogVGhyZWFkaW5nTW9kZSA9IGlzTWFpblRocmVhZFxuXHQ/IFRocmVhZGluZ01vZGUuTWFpblRocmVhZFxuXHQ6IFRocmVhZGluZ01vZGUuV29ya2VyVGhyZWFkXG4iLCIvLyBOb2RlLmpzIGJ1aWx0LWluIEFQSXMuXG5pbXBvcnQge1xuXHRTVEFUVVNfQ09ERVMsXG5cdEluY29taW5nTWVzc2FnZSBhcyBIdHRwUmVxdWVzdCxcblx0U2VydmVyUmVzcG9uc2UgYXMgSHR0cFJlc3BvbnNlLFxufSBmcm9tICdodHRwJ1xuXG4vLyBUaGlyZC1wYXJ0eSBtb2R1bGVzLlxuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xuaW1wb3J0IG1vcmdhbiBmcm9tICdtb3JnYW4nXG5pbXBvcnQgcHJldHR5Qnl0ZXMgZnJvbSAncHJldHR5LWJ5dGVzJ1xuaW1wb3J0IHByZXR0eU1zIGZyb20gJ3ByZXR0eS1tcydcblxuLy8gTG9jYWwgaGVscGVycy5cbmltcG9ydCB7IEV4ZWN1dGlvbk1vZGUsIGV4ZWN1dGlvbk1vZGUgfSBmcm9tICcuLi9oZWxwZXJzL2NvbnN0YW50cydcblxuLy8gVHlwZSBkZWZpbml0aW9ucy5cbmRlY2xhcmUgbW9kdWxlICdtb3JnYW4nIHtcblx0Y29uc3QgY29tYmluZWQ6IG1vcmdhbi5Gb3JtYXRGblxufVxuXG5pbnRlcmZhY2UgVG9rZW5JbmRleGVyIHtcblx0W3Rva2VuTmFtZTogc3RyaW5nXTogKFxuXHRcdHJlcXVlc3Q6IEh0dHBSZXF1ZXN0LFxuXHRcdHJlc3BvbnNlOiBIdHRwUmVzcG9uc2UsXG5cdFx0Li4uYXJnczogYW55W11cblx0KSA9PiBzdHJpbmcgfCB1bmRlZmluZWRcbn1cblxuLy8gSGVscGVycy5cbmZ1bmN0aW9uIGRlY29yYXRlU3RhdHVzQ29kZShzdGF0dXNDb2RlOiBrZXlvZiB0eXBlb2YgU1RBVFVTX0NPREVTKTogc3RyaW5nIHtcblx0Y29uc3QgZ3JvdXBPZkNvZGUgPSBNYXRoLmZsb29yKE51bWJlcihzdGF0dXNDb2RlKSAvIDEwMCkgKiAxMDBcblx0Y29uc3QgYmFzZU1lc3NhZ2UgPSBgJHtzdGF0dXNDb2RlfSAke1NUQVRVU19DT0RFU1tzdGF0dXNDb2RlXSBhcyBzdHJpbmd9YFxuXG5cdHN3aXRjaCAoZ3JvdXBPZkNvZGUpIHtcblx0Y2FzZSAyMDA6IHtcblx0XHRyZXR1cm4gY2hhbGsuZ3JlZW4oYmFzZU1lc3NhZ2UpXG5cdH1cblxuXHRjYXNlIDMwMDoge1xuXHRcdHJldHVybiBjaGFsay5tYWdlbnRhKGJhc2VNZXNzYWdlKVxuXHR9XG5cdGNhc2UgNDAwOlxuXHRjYXNlIDUwMDoge1xuXHRcdHJldHVybiBjaGFsay5yZWQoYmFzZU1lc3NhZ2UpXG5cdH1cblxuXHRkZWZhdWx0OiB7XG5cdFx0cmV0dXJuIGNoYWxrLmdyYXkoYmFzZU1lc3NhZ2UpXG5cdH1cblx0fVxufVxuXG5mdW5jdGlvbiBmb3JtYXRGb3JNb3JnYW4odG9rZW5zOiBhbnksIHJlcXVlc3Q6IEh0dHBSZXF1ZXN0LCByZXNwb25zZTogSHR0cFJlc3BvbnNlKTogc3RyaW5nIHtcblx0ZnVuY3Rpb24gXyh0b2tlbjogc3RyaW5nLCAuLi5zdWJBcmdzOiBhbnlbXSk6IHN0cmluZyB8IHZvaWQge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFyZ3VtZW50XG5cdFx0cmV0dXJuICh0b2tlbnMgYXMgVG9rZW5JbmRleGVyKVt0b2tlbl0ocmVxdWVzdCwgcmVzcG9uc2UsIC4uLnN1YkFyZ3MpXG5cdH1cblxuXHQvLyBSYXcgdmFsdWVzLlxuXHRjb25zdCBtZXRob2QgPSBfKCdtZXRob2QnKVxuXHRjb25zdCBVUkwgPSBfKCd1cmwnKVxuXHRjb25zdCBodHRwVmVyc2lvbiA9IGBIVFRQLyR7XygnaHR0cC12ZXJzaW9uJykgYXMgc3RyaW5nfWBcblx0Y29uc3Qgc3RhdHVzQ29kZSA9IE51bWJlcihfKCdzdGF0dXMnKSlcblx0Y29uc3QgY29udGVudExlbmd0aCA9IE51bWJlcihfKCdyZXMnLCAnY29udGVudC1sZW5ndGgnKSA/PyAtMSlcblx0Y29uc3QgcmVzcG9uc2VUaW1lID0gTnVtYmVyKF8oJ3Jlc3BvbnNlLXRpbWUnKSA/PyAtMSlcblxuXHQvLyBEZWNvcmF0ZWQgdmFsdWVzLlxuXHRjb25zdCAkbWV0aG9kID0gY2hhbGsuYm9sZChtZXRob2QpXG5cdGNvbnN0ICR2ZXJzaW9uID0gY2hhbGsucmdiKDk4LCAxNzcsIDI1NSkoaHR0cFZlcnNpb24pXG5cdGNvbnN0ICRzdGF0dXNDb2RlID0gZGVjb3JhdGVTdGF0dXNDb2RlKHN0YXR1c0NvZGUpXG5cdGNvbnN0ICRjb250ZW50TGVuZ3RoID0gY29udGVudExlbmd0aCA+PSAwID8gcHJldHR5Qnl0ZXMoY29udGVudExlbmd0aCkgOiAnPyBCJ1xuXHRjb25zdCAkcmVzcG9uc2VUaW1lID0gcmVzcG9uc2VUaW1lID49IDAgPyBwcmV0dHlNcyhyZXNwb25zZVRpbWUpIDogJydcblxuXHQvLyBBZGRpdGlvbmFsIGluZm9ybWF0aW9uLlxuXHRjb25zdCBtZXRhZGF0YSA9IGAoJHskY29udGVudExlbmd0aH0sICR7JHJlc3BvbnNlVGltZX0pYFxuXG5cdHJldHVybiBbXG5cdFx0YOKGkiAkeyRtZXRob2R9ICR7VVJMIGFzIHN0cmluZ30gJHskdmVyc2lvbn1gLFxuXHRcdGDihpAgJHskdmVyc2lvbn0gJHskc3RhdHVzQ29kZX0gJHttZXRhZGF0YX1gLFxuXHRdLmpvaW4oJ1xcbicpXG59XG5cbmV4cG9ydCBkZWZhdWx0IGV4ZWN1dGlvbk1vZGUgPT09IEV4ZWN1dGlvbk1vZGUuRGV2ZWxvcG1lbnRNb2RlID8gZm9ybWF0Rm9yTW9yZ2FuIDogbW9yZ2FuLmNvbWJpbmVkXG4iLCJpbXBvcnQgJ3JlZmxlY3QtbWV0YWRhdGEnXG5cbi8vIE5vZGUuanMgYnVpbHQtaW4gQVBJcy5cbmltcG9ydCB7IEluY29taW5nTWVzc2FnZSBhcyBIdHRwUmVxdWVzdCwgU2VydmVyUmVzcG9uc2UgYXMgSHR0cFJlc3BvbnNlIH0gZnJvbSAnaHR0cCdcbmltcG9ydCB7IFBhc3NUaHJvdWdoIH0gZnJvbSAnc3RyZWFtJ1xuXG4vLyBUaGlyZC1wYXJ0eSBtb2R1bGVzLlxuaW1wb3J0IFByb21pc2UgZnJvbSAnYmx1ZWJpcmQnXG5pbXBvcnQgbG9kYXNoIGZyb20gJ2xvZGFzaCdcbmltcG9ydCBtb3JnYW4gZnJvbSAnbW9yZ2FuJ1xuaW1wb3J0IHR5cGUgeyBsZXZlbCBhcyBMb2dnaW5nTGV2ZWwgfSBmcm9tICd3aW5zdG9uJ1xuaW1wb3J0ICogYXMgd2luc3RvbiBmcm9tICd3aW5zdG9uJ1xuaW1wb3J0IHsgTG9nZ2VyIGFzIEJhc2VMb2dnZXIgfSBmcm9tICd3aW5zdG9uJ1xuXG4vLyBGb3JtYXR0ZXJzLlxuaW1wb3J0IGZvcm1hdEZvckNMSSBmcm9tICcuLi9mb3JtYXR0ZXJzL2NvbW1hbmQtbGluZSdcbmltcG9ydCBmb3JtYXRGb3JNb3JnYW4gZnJvbSAnLi4vZm9ybWF0dGVycy9tb3JnYW4nXG5cbi8vIExvY2FsIGhlbHBlcnMuXG5pbXBvcnQgeyBFeGVjdXRpb25Nb2RlLCBleGVjdXRpb25Nb2RlIH0gZnJvbSAnLi4vaGVscGVycy9jb25zdGFudHMnXG5cbi8vIEhhbmRsZXIgaW1wbGVtZW50YXRpb25zLlxuaW1wb3J0IHR5cGUgeyBMb2dnaW5nTGV2ZWxOYW1lIH0gZnJvbSAnLi4vaGFuZGxlcnMnXG5pbXBvcnQgaGFuZGxlcnMgZnJvbSAnLi4vaGFuZGxlcnMnXG5cbi8vIFR5cGUgZGVmaW5pdGlvbnMuXG50eXBlIE1vcmdhbiA9IChyZXE6IEh0dHBSZXF1ZXN0LCByZXM6IEh0dHBSZXNwb25zZSwgbmV4dDogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpID0+IHZvaWRcblxuLy8gVHJhbnNwb3J0cy5cbmNvbnN0IHsgQ29uc29sZTogQ29uc29sZVRyYW5zcG9ydCB9ID0gd2luc3Rvbi50cmFuc3BvcnRzXG5cbi8vIEtleXMgaW4gb3JkZXIgdG8gYWNjZXNzIHByaXZhdGUgcHJvcGVydGllcy5cbmNvbnN0IEtleU9mSW5zdGFuY2U6IHVuaXF1ZSBzeW1ib2wgPSBTeW1ib2woJ0BjaWNob2wvbG9nZ2VyOjpjbGFzc2VzL2xvZ2dlcjo6SW5zdGFuY2UnKVxuY29uc3QgS2V5T2ZQYXNzcG9ydDogdW5pcXVlIHN5bWJvbCA9IFN5bWJvbCgnQGNpY2hvbC9sb2dnZXI6OmNsYXNzZXMvbG9nZ2VyOjpQYXNzcG9ydCcpXG5cbmNsYXNzIExvZ2dlciB7XG5cdCNsb2dnZXI6IEJhc2VMb2dnZXIgPSB3aW5zdG9uLmNyZWF0ZUxvZ2dlcih7XG5cdFx0bGV2ZWxzOiBsb2Rhc2goaGFuZGxlcnMpXG5cdFx0XHQubWFwKCh7IG5hbWUsIGxldmVsIH0pID0+IFsgbmFtZSwgbGV2ZWwgXSlcblx0XHRcdC5maWx0ZXIoKFsgLCBsZXZlbCBdKSA9PiB0eXBlb2YgbGV2ZWwgPT09ICdudW1iZXInKVxuXHRcdFx0LmZyb21QYWlycygpXG5cdFx0XHQudmFsdWUoKSxcblxuXHRcdGxldmVsOiAoZXhlY3V0aW9uTW9kZSA9PT0gRXhlY3V0aW9uTW9kZS5Qcm9kdWN0aW9uTW9kZSA/ICdodHRwJyA6ICd2ZXJib3NlJykgYXMgdHlwZW9mIExvZ2dpbmdMZXZlbCxcblxuXHRcdHRyYW5zcG9ydHM6IFtcblx0XHRcdG5ldyBDb25zb2xlVHJhbnNwb3J0KHsgZm9ybWF0OiBmb3JtYXRGb3JDTEkgfSksXG5cdFx0XSxcblxuXHRcdGV4aXRPbkVycm9yOiBmYWxzZSxcblx0fSlcblxuXHQjbW9yZ2FuOiBNb3JnYW4gPSBtb3JnYW4oZm9ybWF0Rm9yTW9yZ2FuLCB7XG5cdFx0c3RyZWFtOiBuZXcgUGFzc1Rocm91Z2goeyBvYmplY3RNb2RlOiB0cnVlIH0pLm9uKCdkYXRhJywgKGRhdGE6IHN0cmluZykgPT4ge1xuXHRcdFx0dGhpcy5sb2coJ2h0dHAnLCBkYXRhLnRyaW0oKSlcblx0XHR9KSxcblx0fSkgYXMgTW9yZ2FuXG5cblx0cHJpdmF0ZSBjb25zdHJ1Y3RvcihwYXNzcG9ydDogdHlwZW9mIEtleU9mUGFzc3BvcnQpIHtcblx0XHRpZiAocGFzc3BvcnQgIT09IEtleU9mUGFzc3BvcnQpIHtcblx0XHRcdHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignTG9nZ2VyIGNsYXNzIGNhbm5vdCBiZSBjb25zdHJ1Y3RlZCBpbiBkaXJlY3RseScpXG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHN0YXRpYyBnZXQgaW5zdGFuY2UoKTogTG9nZ2VyIHtcblx0XHRpZiAodGhpcyAhPT0gTG9nZ2VyKSB7XG5cdFx0XHR0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ0xvZ2dlciBjbGFzcyBpcyBub3QgaW5oZXJpdGFibGUnKVxuXHRcdH1cblxuXHRcdGlmIChSZWZsZWN0Lmhhc093bk1ldGFkYXRhKEtleU9mSW5zdGFuY2UsIExvZ2dlcikpIHtcblx0XHRcdHJldHVybiBSZWZsZWN0LmdldE93bk1ldGFkYXRhKEtleU9mSW5zdGFuY2UsIExvZ2dlcilcblx0XHR9XG5cblx0XHRjb25zdCBpbnN0YW5jZSA9IG5ldyBMb2dnZXIoS2V5T2ZQYXNzcG9ydClcblxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gaW5zdGFuY2Vcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0UmVmbGVjdC5kZWZpbmVNZXRhZGF0YShLZXlPZkluc3RhbmNlLCBpbnN0YW5jZSwgTG9nZ2VyKVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBMb2dnaW5nIG1lc3NhZ2Ugd2l0aCBzcGVjaWZpYyBsZXZlbC5cblx0ICpcblx0ICogQHBhcmFtIGxldmVsXG5cdCAqIEBwYXJhbSBtZXNzYWdlXG5cdCAqIEBwYXJhbSBhcmdzIEFkZGl0aW9uYWwgbWV0YWRhdGEuXG5cdCAqL1xuXHRwdWJsaWMgbG9nKGxldmVsOiBMb2dnaW5nTGV2ZWxOYW1lLCBtZXNzYWdlOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogdm9pZFxuXG5cdC8qKlxuXHQgKiBMb2dnaW5nIEhUVFAgSS9PLlxuXHQgKlxuXHQgKiBAcGFyYW0gcmVxdWVzdCBOb2RlLmpzIGJ1aWx0LWluIGBJbmNvbWluZ01lc3NhZ2VgIGluc3RhbmNlIGZyb20gYGh0dHBgIG1vZHVsZS5cblx0ICogQHBhcmFtIHJlc3BvbnNlIE5vZGUuanMgYnVpbHQtaW4gYFNlcnZlclJlc3BvbnNlYCBpbnN0YW5jZSBmcm9tIGBodHRwYCBtb2R1bGUuXG5cdCAqL1xuXHRwdWJsaWMgbG9nKHJlcXVlc3Q6IEh0dHBSZXF1ZXN0LCByZXNwb25zZTogSHR0cFJlc3BvbnNlKTogUHJvbWlzZTx2b2lkPlxuXG5cdC8qKlxuXHQgKiBMb2dnaW5nIGVycm9ycyBpbiBkZXRhaWwuXG5cdCAqXG5cdCAqIEBwYXJhbSBlcnJvclxuXHQgKi9cblx0cHVibGljIGxvZyhlcnJvcjogRXJyb3IpOiB2b2lkXG5cblx0cHVibGljIGxvZyguLi5hcmdzOiBhbnlbXSk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBsb2dnZXIgPSB0aGlzLiNsb2dnZXJcblx0XHRjb25zdCBmb3JtYXQgPSB0aGlzLiNtb3JnYW5cblxuXHRcdHN3aXRjaCAodHJ1ZSkge1xuXHRcdGNhc2UgKGFyZ3MubGVuZ3RoID49IDIgJiYgYXJnc1swXSBpbnN0YW5jZW9mIEh0dHBSZXF1ZXN0ICYmIGFyZ3NbMV0gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UpOiB7XG5cdFx0XHRjb25zdCBbIHJlcXVlc3QsIHJlc3BvbnNlIF0gPSBhcmdzIGFzIFsgSHR0cFJlcXVlc3QsIEh0dHBSZXNwb25zZSBdXG5cblx0XHRcdHJldHVybiBQcm9taXNlLmZyb21DYWxsYmFjazx2b2lkPihjYWxsYmFjayA9PiBmb3JtYXQocmVxdWVzdCwgcmVzcG9uc2UsIGNhbGxiYWNrKSlcblx0XHR9XG5cblx0XHRjYXNlIChhcmdzLmxlbmd0aCA+PSAxICYmIGFyZ3NbMF0gaW5zdGFuY2VvZiBFcnJvcik6IHtcblx0XHRcdGNvbnN0IFsgZXJyb3IsIC4uLmRhdGEgXSA9IGFyZ3MgYXMgWyBFcnJvciwgLi4uYW55W10gXVxuXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hcmd1bWVudFxuXHRcdFx0bG9nZ2VyLmxvZygnZXJyb3InLCBlcnJvci5tZXNzYWdlLCBlcnJvciwgLi4uZGF0YSlcblxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZFxuXHRcdH1cblxuXHRcdGRlZmF1bHQ6IHtcblx0XHRcdGNvbnN0IFsgbGV2ZWwsIG1lc3NhZ2UsIC4uLmRhdGEgXSA9IGFyZ3MgYXMgWyB0eXBlb2YgTG9nZ2luZ0xldmVsLCBzdHJpbmcsIC4uLmFueVtdIF1cblxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXJndW1lbnRcblx0XHRcdGxvZ2dlci5sb2cobGV2ZWwsIG1lc3NhZ2UsIC4uLmRhdGEpXG5cblx0XHRcdHJldHVybiB1bmRlZmluZWRcblx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExvZ2dlci5pbnN0YW5jZVxuIl0sIm5hbWVzIjpbIkxvZ2dpbmdMZXZlbCIsIkZhdGFsIiwiRXJyb3IiLCJXYXJuaW5nIiwiTm90aWNlIiwiSW5mbyIsIkh0dHAiLCJRdWVyeSIsIlZlcmJvc2UiLCJEZWJ1ZyIsImNvbG9yaXplck1hcCIsIl9NYXAiLCJjcmVhdGVTY2hlbWUiLCJvcHRpb25zIiwibmV4dEluZGV4Iiwic2l6ZSIsImNvbG9yaXplciIsImNoYWxrIiwiYmdIZXgiLCJiYWNrZ3JvdW5kIiwiaGV4IiwiZm9yZWdyb3VuZCIsInNldCIsIkNvbG9yVmFsdWUiLCJXaGl0ZSIsIkdyYXkiLCJCbGFjayIsIkNyaXRpY2FsIiwiUmVndWxhciIsIkNvbG9yU2NoZW1lIiwiTG91ZCIsImdldENoYWxrT2YiLCJjb2xvclNldCIsImdldCIsImlzVFRZIiwicHJvY2VzcyIsInN0ZG91dCIsImlzTm90T25DTEkiLCJkZWNvcmF0ZUxhYmVsIiwibGFiZWwiLCJzY2hlbWUiLCJkZWNvcmF0ZWRMYWJlbCIsImJvbGQiLCJyb290UGF0aCIsImN3ZCIsImNvbmp1bmN0aW9uIiwiYmx1ZSIsInNwbGF0IiwiX1N5bWJvbCRmb3IiLCJuYW1lIiwibGV2ZWwiLCJtYXBMb2NhdGlvbk9mRXJyb3JUaHJvd24iLCJmaWxlbmFtZSIsInRhcmdldCIsInBhdGgiLCJyZWxhdGl2ZSIsIl9zdGFydHNXaXRoSW5zdGFuY2VQcm9wZXJ0eSIsImNhbGwiLCJncmF5IiwicmVwbGFjZSIsIm1hdGNoZXMiLCJtb2R1bGVOYW1lIiwidHJhaWxpbmciLCJzZXAiLCJ1bmRlcmxpbmUiLCJkaXJuYW1lIiwiYmFzZW5hbWUiLCJoYW5kbGUiLCJkYXRhIiwiX2NvbnRleHQiLCJfY29udGV4dDIiLCJfY29udGV4dDMiLCJlcnJvciIsInVuZGVmaW5lZCIsImVycm9yTmFtZSIsIm1lc3NhZ2UiLCJzdGFjayIsInJhd1N0YWNrIiwiX21hcEluc3RhbmNlUHJvcGVydHkiLCJfc2xpY2VJbnN0YW5jZVByb3BlcnR5IiwibGVuZ3RoIiwic3BsaXQiLCJsaW5lIiwiaXNBYnNvbHV0ZSIsImNvbnRleHROYW1lIiwicmF3TG9jYXRpb24iLCJsb2NhdGlvbiIsIm9jY3VycmVkTGluZSIsIm9jY3VycmVkQ29sdW1uIiwidmVyc2lvbiIsImpvaW4iLCJwYXlsb2FkIiwiaGlnaGxpZ2h0IiwibGFuZ3VhZ2UiLCJoYW5kbGVycyIsIkZhdGFsSGFuZGxlciIsIkVycm9ySGFuZGxlciIsIldhcm5pbmdIYW5kbGVyIiwiTm90aWNlSGFuZGxlciIsIkluZm9IYW5kbGVyIiwiSHR0cEhhbmRsZXIiLCJRdWVyeUhhbmRsZXIiLCJWZXJib3NlSGFuZGxlciIsIkRlYnVnSGFuZGxlciIsImZvcm1hdCIsInByaW50ZiIsInRpbWVzdGFtcCIsIkRhdGVUaW1lIiwibm93IiwidG9JU08iLCJpbmNsdWRlT2Zmc2V0IiwiaGFuZGxlciIsIl9maW5kSW5zdGFuY2VQcm9wZXJ0eSIsImZhbGxiYWNrIiwicGVyZm9ybUhhbmRsZSIsImRlZmF1bHQiLCJfUmVmbGVjdCRhcHBseSIsImV4dHJhRmluZ2VycHJpbnQiLCJ0cmFuc2FjdGlvbklkIiwiclRyYWNlciIsImlkIiwiRXhlY3V0aW9uTW9kZSIsIkRldmVsb3BtZW50TW9kZSIsIlByb2R1Y3Rpb25Nb2RlIiwiQ2x1c3RlcmluZ01vZGUiLCJNYXN0ZXJQcm9jZXNzIiwiV29ya2VyUHJvY2VzcyIsImV4ZWN1dGlvbk1vZGUiLCJlbnZpcm9ubWVudHMiLCJOT0RFX0VOViIsImNsdXN0ZXIiLCJpc1ByaW1hcnkiLCJpc01hc3RlciIsImRlY29yYXRlU3RhdHVzQ29kZSIsInN0YXR1c0NvZGUiLCJncm91cE9mQ29kZSIsIk1hdGgiLCJmbG9vciIsIk51bWJlciIsImJhc2VNZXNzYWdlIiwiU1RBVFVTX0NPREVTIiwiZ3JlZW4iLCJtYWdlbnRhIiwicmVkIiwiZm9ybWF0Rm9yTW9yZ2FuIiwidG9rZW5zIiwicmVxdWVzdCIsInJlc3BvbnNlIiwiXyIsInRva2VuIiwic3ViQXJncyIsIm1ldGhvZCIsIlVSTCIsImh0dHBWZXJzaW9uIiwiY29udGVudExlbmd0aCIsInJlc3BvbnNlVGltZSIsIiRtZXRob2QiLCIkdmVyc2lvbiIsInJnYiIsIiRzdGF0dXNDb2RlIiwiJGNvbnRlbnRMZW5ndGgiLCJwcmV0dHlCeXRlcyIsIiRyZXNwb25zZVRpbWUiLCJwcmV0dHlNcyIsIm1ldGFkYXRhIiwibW9yZ2FuIiwiY29tYmluZWQiLCJDb25zb2xlIiwiQ29uc29sZVRyYW5zcG9ydCIsIndpbnN0b24iLCJ0cmFuc3BvcnRzIiwiS2V5T2ZJbnN0YW5jZSIsIl9TeW1ib2wiLCJLZXlPZlBhc3Nwb3J0IiwiTG9nZ2VyIiwiY3JlYXRlTG9nZ2VyIiwibGV2ZWxzIiwiX2ZpbHRlckluc3RhbmNlUHJvcGVydHkiLCJsb2Rhc2giLCJmcm9tUGFpcnMiLCJ2YWx1ZSIsImZvcm1hdEZvckNMSSIsImV4aXRPbkVycm9yIiwic3RyZWFtIiwiUGFzc1Rocm91Z2giLCJvYmplY3RNb2RlIiwib24iLCJsb2ciLCJfdHJpbUluc3RhbmNlUHJvcGVydHkiLCJjb25zdHJ1Y3RvciIsInBhc3Nwb3J0IiwiUmVmZXJlbmNlRXJyb3IiLCJpbnN0YW5jZSIsIlJlZmxlY3QiLCJoYXNPd25NZXRhZGF0YSIsImdldE93bk1ldGFkYXRhIiwiZGVmaW5lTWV0YWRhdGEiLCJhcmdzIiwibG9nZ2VyIiwiSHR0cFJlcXVlc3QiLCJIdHRwUmVzcG9uc2UiLCJQcm9taXNlIiwiZnJvbUNhbGxiYWNrIiwiY2FsbGJhY2siXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxNQUFNQSxZQUFZLEdBQUc7QUFDcEI7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