@ruvector/ruvllm 2.5.7 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -24,15 +24,31 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
24
24
  }) : function(o, v) {
25
25
  o["default"] = v;
26
26
  });
27
- var __importStar = (this && this.__importStar) || function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
27
+ var __importStar = (this && this.__importStar) || (function () {
28
+ var ownKeys = function(o) {
29
+ ownKeys = Object.getOwnPropertyNames || function (o) {
30
+ var ar = [];
31
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
+ return ar;
33
+ };
34
+ return ownKeys(o);
35
+ };
36
+ return function (mod) {
37
+ if (mod && mod.__esModule) return mod;
38
+ var result = {};
39
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
+ __setModuleDefault(result, mod);
41
+ return result;
42
+ };
43
+ })();
34
44
  Object.defineProperty(exports, "__esModule", { value: true });
35
- exports.runFullComparison = exports.formatComparisonResults = exports.runModelComparison = exports.downloadModel = exports.isModelDownloaded = exports.getModelsDir = exports.COMPARISON_MODELS = void 0;
45
+ exports.COMPARISON_MODELS = void 0;
46
+ exports.getModelsDir = getModelsDir;
47
+ exports.isModelDownloaded = isModelDownloaded;
48
+ exports.downloadModel = downloadModel;
49
+ exports.runModelComparison = runModelComparison;
50
+ exports.formatComparisonResults = formatComparisonResults;
51
+ exports.runFullComparison = runFullComparison;
36
52
  const fs_1 = require("fs");
37
53
  const path_1 = require("path");
38
54
  const os_1 = require("os");
@@ -63,7 +79,6 @@ exports.COMPARISON_MODELS = {
63
79
  function getModelsDir() {
64
80
  return (0, path_1.join)((0, os_1.homedir)(), '.ruvllm', 'models');
65
81
  }
66
- exports.getModelsDir = getModelsDir;
67
82
  /**
68
83
  * Check if model is downloaded
69
84
  */
@@ -77,7 +92,6 @@ function isModelDownloaded(modelId) {
77
92
  const stats = (0, fs_1.statSync)(path);
78
93
  return stats.size >= model.sizeBytes * 0.9; // Allow 10% variance
79
94
  }
80
- exports.isModelDownloaded = isModelDownloaded;
81
95
  /**
82
96
  * Download a model with progress
83
97
  */
@@ -143,7 +157,6 @@ async function downloadModel(modelId, onProgress) {
143
157
  renameSync(tempPath, destPath);
144
158
  return destPath;
145
159
  }
146
- exports.downloadModel = downloadModel;
147
160
  /**
148
161
  * Agent type keywords for routing classification
149
162
  */
@@ -300,7 +313,6 @@ function runModelComparison(modelId, modelName, embedder) {
300
313
  overallScore,
301
314
  };
302
315
  }
303
- exports.runModelComparison = runModelComparison;
304
316
  /**
305
317
  * Format comparison results
306
318
  */
@@ -366,7 +378,6 @@ function formatComparisonResults(results) {
366
378
  }
367
379
  return lines.join('\n');
368
380
  }
369
- exports.formatComparisonResults = formatComparisonResults;
370
381
  /**
371
382
  * Run full comparison
372
383
  */
@@ -455,7 +466,6 @@ async function runFullComparison() {
455
466
  summary,
456
467
  };
457
468
  }
458
- exports.runFullComparison = runFullComparison;
459
469
  exports.default = {
460
470
  COMPARISON_MODELS: exports.COMPARISON_MODELS,
461
471
  runFullComparison,
@@ -463,4 +473,4 @@ exports.default = {
463
473
  downloadModel,
464
474
  isModelDownloaded,
465
475
  };
466
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtY29tcGFyaXNvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iZW5jaG1hcmtzL21vZGVsLWNvbXBhcmlzb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7OztHQVFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdILDJCQUF3RTtBQUN4RSwrQkFBNEI7QUFDNUIsMkJBQTZCO0FBRzdCLDJEQU82QjtBQUU3QiwrREFJK0I7QUFZL0Isd0JBQXdCO0FBQ1gsUUFBQSxpQkFBaUIsR0FBZ0M7SUFDNUQsV0FBVyxFQUFFO1FBQ1gsRUFBRSxFQUFFLFdBQVc7UUFDZixJQUFJLEVBQUUsdUJBQXVCO1FBQzdCLEdBQUcsRUFBRSx1R0FBdUc7UUFDNUcsUUFBUSxFQUFFLG1DQUFtQztRQUM3QyxTQUFTLEVBQUUsU0FBVztRQUN0QixXQUFXLEVBQUUseUNBQXlDO0tBQ3ZEO0lBQ0QscUJBQXFCLEVBQUU7UUFDckIsRUFBRSxFQUFFLHFCQUFxQjtRQUN6QixJQUFJLEVBQUUsMEJBQTBCO1FBQ2hDLEdBQUcsRUFBRSxzRkFBc0Y7UUFDM0YsUUFBUSxFQUFFLHNDQUFzQztRQUNoRCxTQUFTLEVBQUUsU0FBVztRQUN0QixXQUFXLEVBQUUsOENBQThDO0tBQzVEO0NBQ0YsQ0FBQztBQW9CRjs7R0FFRztBQUNILFNBQWdCLFlBQVk7SUFDMUIsT0FBTyxJQUFBLFdBQUksRUFBQyxJQUFBLFlBQU8sR0FBRSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBRkQsb0NBRUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLE9BQWU7SUFDL0MsTUFBTSxLQUFLLEdBQUcseUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekMsSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUV6QixNQUFNLElBQUksR0FBRyxJQUFBLFdBQUksRUFBQyxZQUFZLEVBQUUs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QyxDQUFDLGFBQWEsQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQUM7UUFDM0osT0FBTyxJQUFJLGdGQUFnRixDQUFDO1FBQzVGLE9BQU8sSUFBSSw2RUFBNkUsQ0FBQztJQUMzRixDQUFDO1NBQU0sSUFBSSxNQUFNLEtBQUssY0FBYyxFQUFFLENBQUM7UUFDckMsT0FBTyxHQUFHLDhEQUE4RCxDQUFDO1FBQ3pFLE9BQU8sSUFBSSw4RUFBOEUsQ0FBQztRQUMxRixPQUFPLElBQUksd0RBQXdELENBQUM7SUFDdEUsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLEdBQUcsa0RBQWtELENBQUM7UUFDN0QsT0FBTyxJQUFJLHFFQUFxRSxDQUFDO1FBQ2pGLE9BQU8sSUFBSSxnRUFBZ0UsQ0FBQztJQUM5RSxDQUFDO0lBRUQsT0FBTztRQUNMLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtRQUNuQyxRQUFRO1FBQ1IsTUFBTSxFQUFFLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQztRQUNuQyxNQUFNO1FBQ04sT0FBTztLQUNSLENBQUM7QUFDSixDQUFDO0FBckdELDhDQXFHQztBQUVELGtCQUFlO0lBQ2IsaUJBQWlCLEVBQWpCLHlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsdUJBQXVCO0lBQ3ZCLGFBQWE7SUFDYixpQkFBaUI7Q0FDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTW9kZWwgQ29tcGFyaXNvbiBCZW5jaG1hcmtcbiAqXG4gKiBIZWFkLXRvLWhlYWQgY29tcGFyaXNvbiBiZXR3ZWVuOlxuICogLSBRd2VuMi41LTAuNUItSW5zdHJ1Y3QgKGJhc2UgbW9kZWwpXG4gKiAtIFJ1dkxUUkEgQ2xhdWRlIENvZGUgMC41QiAoZmluZS10dW5lZCBmb3IgQ2xhdWRlIENvZGUpXG4gKlxuICogVGVzdHMgcm91dGluZyBhY2N1cmFjeSBhbmQgZW1iZWRkaW5nIHF1YWxpdHkgZm9yIENsYXVkZSBDb2RlIHVzZSBjYXNlcy5cbiAqL1xuXG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jLCBjcmVhdGVXcml0ZVN0cmVhbSwgc3RhdFN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnO1xuaW1wb3J0IHsgcGlwZWxpbmUgfSBmcm9tICdzdHJlYW0vcHJvbWlzZXMnO1xuXG5pbXBvcnQge1xuICBydW5Sb3V0aW5nQmVuY2htYXJrLFxuICBmb3JtYXRSb3V0aW5nUmVzdWx0cyxcbiAgYmFzZWxpbmVLZXl3b3JkUm91dGVyLFxuICBST1VUSU5HX1RFU1RfQ0FTRVMsXG4gIEFHRU5UX1RZUEVTLFxuICB0eXBlIFJvdXRpbmdCZW5jaG1hcmtSZXN1bHRzLFxufSBmcm9tICcuL3JvdXRpbmctYmVuY2htYXJrJztcblxuaW1wb3J0IHtcbiAgcnVuRW1iZWRkaW5nQmVuY2htYXJrLFxuICBmb3JtYXRFbWJlZGRpbmdSZXN1bHRzLFxuICB0eXBlIEVtYmVkZGluZ0JlbmNobWFya1Jlc3VsdHMsXG59IGZyb20gJy4vZW1iZWRkaW5nLWJlbmNobWFyayc7XG5cbi8qKiBNb2RlbCBjb25maWd1cmF0aW9uICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZGVsQ29uZmlnIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgZmlsZW5hbWU6IHN0cmluZztcbiAgc2l6ZUJ5dGVzOiBudW1iZXI7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG59XG5cbi8qKiBDb21wYXJpc29uIG1vZGVscyAqL1xuZXhwb3J0IGNvbnN0IENPTVBBUklTT05fTU9ERUxTOiBSZWNvcmQ8c3RyaW5nLCBNb2RlbENvbmZpZz4gPSB7XG4gICdxd2VuLWJhc2UnOiB7XG4gICAgaWQ6ICdxd2VuLWJhc2UnLFxuICAgIG5hbWU6ICdRd2VuMi41LTAuNUItSW5zdHJ1Y3QnLFxuICAgIHVybDogJ2h0dHBzOi8vaHVnZ2luZ2ZhY2UuY28vUXdlbi9Rd2VuMi41LTAuNUItSW5zdHJ1Y3QtR0dVRi9yZXNvbHZlL21haW4vcXdlbjIuNS0wLjViLWluc3RydWN0LXE0X2tfbS5nZ3VmJyxcbiAgICBmaWxlbmFtZTogJ3F3ZW4yLjUtMC41Yi1pbnN0cnVjdC1xNF9rX20uZ2d1ZicsXG4gICAgc2l6ZUJ5dGVzOiA0OTFfMDAwXzAwMCxcbiAgICBkZXNjcmlwdGlvbjogJ0Jhc2UgUXdlbiAwLjVCIG1vZGVsIChRNF9LX00gcXVhbnRpemVkKScsXG4gIH0sXG4gICdydXZsdHJhLWNsYXVkZS1jb2RlJzoge1xuICAgIGlkOiAncnV2bHRyYS1jbGF1ZGUtY29kZScsXG4gICAgbmFtZTogJ1J1dkxUUkEgQ2xhdWRlIENvZGUgMC41QicsXG4gICAgdXJsOiAnaHR0cHM6Ly9odWdnaW5nZmFjZS5jby9ydXYvcnV2bHRyYS9yZXNvbHZlL21haW4vcnV2bHRyYS1jbGF1ZGUtY29kZS0wLjViLXE0X2tfbS5nZ3VmJyxcbiAgICBmaWxlbmFtZTogJ3J1dmx0cmEtY2xhdWRlLWNvZGUtMC41Yi1xNF9rX20uZ2d1ZicsXG4gICAgc2l6ZUJ5dGVzOiAzOThfMDAwXzAwMCxcbiAgICBkZXNjcmlwdGlvbjogJ1J1dkxUUkEgZmluZS10dW5lZCBmb3IgQ2xhdWRlIENvZGUgd29ya2Zsb3dzJyxcbiAgfSxcbn07XG5cbi8qKiBDb21wYXJpc29uIHJlc3VsdCAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wYXJpc29uUmVzdWx0IHtcbiAgbW9kZWxJZDogc3RyaW5nO1xuICBtb2RlbE5hbWU6IHN0cmluZztcbiAgcm91dGluZzogUm91dGluZ0JlbmNobWFya1Jlc3VsdHM7XG4gIGVtYmVkZGluZzogRW1iZWRkaW5nQmVuY2htYXJrUmVzdWx0cztcbiAgb3ZlcmFsbFNjb3JlOiBudW1iZXI7XG59XG5cbi8qKiBGdWxsIGNvbXBhcmlzb24gcmVzdWx0cyAqL1xuZXhwb3J0IGludGVyZmFjZSBGdWxsQ29tcGFyaXNvblJlc3VsdHMge1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgYmFzZWxpbmU6IENvbXBhcmlzb25SZXN1bHQ7XG4gIG1vZGVsczogQ29tcGFyaXNvblJlc3VsdFtdO1xuICB3aW5uZXI6IHN0cmluZztcbiAgc3VtbWFyeTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEdldCBtb2RlbHMgZGlyZWN0b3J5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RlbHNEaXIoKTogc3RyaW5nIHtcbiAgcmV0dXJuIGpvaW4oaG9tZWRpcigpLCAnLnJ1dmxsbScsICdtb2RlbHMnKTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBtb2RlbCBpcyBkb3dubG9hZGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc01vZGVsRG93bmxvYWRlZChtb2RlbElkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgbW9kZWwgPSBDT01QQVJJU09OX01PREVMU1ttb2RlbElkXTtcbiAgaWYgKCFtb2RlbCkgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IHBhdGggPSBqb2luKGdldE1vZGVsc0RpcigpLCBtb2RlbC5maWxlbmFtZSk7XG4gIGlmICghZXhpc3RzU3luYyhwYXRoKSkgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IHN0YXRzID0gc3RhdFN5bmMocGF0aCk7XG4gIHJldHVybiBzdGF0cy5zaXplID49IG1vZGVsLnNpemVCeXRlcyAqIDAuOTsgLy8gQWxsb3cgMTAlIHZhcmlhbmNlXG59XG5cbi8qKlxuICogRG93bmxvYWQgYSBtb2RlbCB3aXRoIHByb2dyZXNzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb3dubG9hZE1vZGVsKFxuICBtb2RlbElkOiBzdHJpbmcsXG4gIG9uUHJvZ3Jlc3M/OiAocGVyY2VudDogbnVtYmVyLCBzcGVlZDogbnVtYmVyKSA9PiB2b2lkXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBtb2RlbCA9IENPTVBBUklTT05fTU9ERUxTW21vZGVsSWRdO1xuICBpZiAoIW1vZGVsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIG1vZGVsOiAke21vZGVsSWR9YCk7XG4gIH1cblxuICBjb25zdCBtb2RlbHNEaXIgPSBnZXRNb2RlbHNEaXIoKTtcbiAgaWYgKCFleGlzdHNTeW5jKG1vZGVsc0RpcikpIHtcbiAgICBta2RpclN5bmMobW9kZWxzRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIGNvbnN0IGRlc3RQYXRoID0gam9pbihtb2RlbHNEaXIsIG1vZGVsLmZpbGVuYW1lKTtcblxuICBpZiAoaXNNb2RlbERvd25sb2FkZWQobW9kZWxJZCkpIHtcbiAgICByZXR1cm4gZGVzdFBhdGg7XG4gIH1cblxuICBjb25zb2xlLmxvZyhgRG93bmxvYWRpbmcgJHttb2RlbC5uYW1lfS4uLmApO1xuICBjb25zb2xlLmxvZyhgICBGcm9tOiAke21vZGVsLnVybH1gKTtcbiAgY29uc29sZS5sb2coYCAgU2l6ZTogJHsobW9kZWwuc2l6ZUJ5dGVzIC8gMTAyNCAvIDEwMjQpLnRvRml4ZWQoMCl9IE1CYCk7XG5cbiAgY29uc3QgdGVtcFBhdGggPSBgJHtkZXN0UGF0aH0udG1wYDtcbiAgbGV0IGRvd25sb2FkZWQgPSAwO1xuICBsZXQgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xuICBsZXQgbGFzdERvd25sb2FkZWQgPSAwO1xuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gobW9kZWwudXJsLCB7XG4gICAgaGVhZGVyczogeyAnVXNlci1BZ2VudCc6ICdSdXZMTE0vMi4zLjAnIH0sXG4gIH0pO1xuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9OiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCk7XG4gIH1cblxuICBjb25zdCBjb250ZW50TGVuZ3RoID0gcGFyc2VJbnQocmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtbGVuZ3RoJykgfHwgU3RyaW5nKG1vZGVsLnNpemVCeXRlcykpO1xuICBjb25zdCBmaWxlU3RyZWFtID0gY3JlYXRlV3JpdGVTdHJlYW0odGVtcFBhdGgpO1xuICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5Py5nZXRSZWFkZXIoKTtcblxuICBpZiAoIXJlYWRlcikge1xuICAgIHRocm93IG5ldyBFcnJvcignUmVzcG9uc2UgYm9keSBub3QgcmVhZGFibGUnKTtcbiAgfVxuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTtcbiAgICBpZiAoZG9uZSkgYnJlYWs7XG5cbiAgICBkb3dubG9hZGVkICs9IHZhbHVlLmxlbmd0aDtcbiAgICBmaWxlU3RyZWFtLndyaXRlKHZhbHVlKTtcblxuICAgIGlmIChvblByb2dyZXNzKSB7XG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgY29uc3QgZWxhcHNlZCA9IChub3cgLSBsYXN0VGltZSkgLyAxMDAwO1xuICAgICAgaWYgKGVsYXBzZWQgPj0gMC41KSB7XG4gICAgICAgIGNvbnN0IHNwZWVkID0gKGRvd25sb2FkZWQgLSBsYXN0RG93bmxvYWRlZCkgLyBlbGFwc2VkO1xuICAgICAgICBvblByb2dyZXNzKE1hdGgucm91bmQoKGRvd25sb2FkZWQgLyBjb250ZW50TGVuZ3RoKSAqIDEwMCksIHNwZWVkKTtcbiAgICAgICAgbGFzdFRpbWUgPSBub3c7XG4gICAgICAgIGxhc3REb3dubG9hZGVkID0gZG93bmxvYWRlZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaWxlU3RyZWFtLmVuZCgpO1xuICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZmlsZVN0cmVhbS5vbignZmluaXNoJywgcmVzb2x2ZSk7XG4gICAgZmlsZVN0cmVhbS5vbignZXJyb3InLCByZWplY3QpO1xuICB9KTtcblxuICAvLyBSZW5hbWUgdGVtcCB0byBmaW5hbFxuICBjb25zdCB7IHJlbmFtZVN5bmMsIHVubGlua1N5bmMgfSA9IGF3YWl0IGltcG9ydCgnZnMnKTtcbiAgaWYgKGV4aXN0c1N5bmMoZGVzdFBhdGgpKSB7XG4gICAgdW5saW5rU3luYyhkZXN0UGF0aCk7XG4gIH1cbiAgcmVuYW1lU3luYyh0ZW1wUGF0aCwgZGVzdFBhdGgpO1xuXG4gIHJldHVybiBkZXN0UGF0aDtcbn1cblxuLyoqXG4gKiBBZ2VudCB0eXBlIGtleXdvcmRzIGZvciByb3V0aW5nIGNsYXNzaWZpY2F0aW9uXG4gKi9cbmNvbnN0IEFHRU5UX0tFWVdPUkRTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7XG4gIGNvZGVyOiBbJ2ltcGxlbWVudCcsICdjcmVhdGUnLCAnd3JpdGUnLCAnYnVpbGQnLCAnYWRkJywgJ2NvZGUnLCAnZnVuY3Rpb24nLCAnY2xhc3MnLCAnY29tcG9uZW50J10sXG4gIHJlc2VhcmNoZXI6IFsncmVzZWFyY2gnLCAnZmluZCcsICdpbnZlc3RpZ2F0ZScsICdhbmFseXplJywgJ2V4cGxvcmUnLCAnc2VhcmNoJywgJ2xvb2snXSxcbiAgcmV2aWV3ZXI6IFsncmV2aWV3JywgJ2NoZWNrJywgJ2V2YWx1YXRlJywgJ2Fzc2VzcycsICdpbnNwZWN0JywgJ2V4YW1pbmUnXSxcbiAgdGVzdGVyOiBbJ3Rlc3QnLCAndW5pdCcsICdpbnRlZ3JhdGlvbicsICdlMmUnLCAnY292ZXJhZ2UnLCAnbW9jaycsICdhc3NlcnRpb24nXSxcbiAgYXJjaGl0ZWN0OiBbJ2Rlc2lnbicsICdhcmNoaXRlY3R1cmUnLCAnc2NoZW1hJywgJ3N5c3RlbScsICdhZHInLCAnc3RydWN0dXJlJywgJ3BsYW4nXSxcbiAgJ3NlY3VyaXR5LWFyY2hpdGVjdCc6IFsnc2VjdXJpdHknLCAndnVsbmVyYWJpbGl0eScsICd4c3MnLCAnaW5qZWN0aW9uJywgJ2F1ZGl0JywgJ2N2ZScsICdhdXRoJ10sXG4gIGRlYnVnZ2VyOiBbJ2RlYnVnJywgJ2ZpeCcsICdidWcnLCAnZXJyb3InLCAnaXNzdWUnLCAnYnJva2VuJywgJ2NyYXNoJywgJ2V4Y2VwdGlvbiddLFxuICBkb2N1bWVudGVyOiBbJ2RvY3VtZW50JywgJ3JlYWRtZScsICdqc2RvYycsICdjb21tZW50JywgJ2V4cGxhaW4nLCAnZGVzY3JpYmUnXSxcbiAgcmVmYWN0b3JlcjogWydyZWZhY3RvcicsICdleHRyYWN0JywgJ3JlbmFtZScsICdjb25zb2xpZGF0ZScsICdjbGVhbicsICdyZXN0cnVjdHVyZSddLFxuICBvcHRpbWl6ZXI6IFsnb3B0aW1pemUnLCAncGVyZm9ybWFuY2UnLCAnc2xvdycsICdmYXN0JywgJ2NhY2hlJywgJ3NwZWVkJywgJ21lbW9yeSddLFxuICBkZXZvcHM6IFsnZGVwbG95JywgJ2NpJywgJ2NkJywgJ2t1YmVybmV0ZXMnLCAnZG9ja2VyJywgJ3BpcGVsaW5lJywgJ2NvbnRhaW5lciddLFxuICAnYXBpLWRvY3MnOiBbJ29wZW5hcGknLCAnc3dhZ2dlcicsICdhcGkgZG9jJywgJ2dyYXBocWwnLCAnZW5kcG9pbnQgZG9jJ10sXG4gIHBsYW5uZXI6IFsncGxhbicsICdlc3RpbWF0ZScsICdwcmlvcml0aXplJywgJ3NwcmludCcsICdyb2FkbWFwJywgJ3NjaGVkdWxlJ10sXG59O1xuXG4vKipcbiAqIEVuaGFuY2VkIGtleXdvcmQgcm91dGVyIHdpdGggd2VpZ2h0ZWQgc2NvcmluZ1xuICovXG5mdW5jdGlvbiBlbmhhbmNlZEtleXdvcmRSb3V0ZXIodGFzazogc3RyaW5nKTogeyBhZ2VudDogc3RyaW5nOyBjb25maWRlbmNlOiBudW1iZXIgfSB7XG4gIGNvbnN0IHRhc2tMb3dlciA9IHRhc2sudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qgc2NvcmVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG5cbiAgZm9yIChjb25zdCBbYWdlbnQsIGtleXdvcmRzXSBvZiBPYmplY3QuZW50cmllcyhBR0VOVF9LRVlXT1JEUykpIHtcbiAgICBzY29yZXNbYWdlbnRdID0gMDtcbiAgICBmb3IgKGNvbnN0IGtleXdvcmQgb2Yga2V5d29yZHMpIHtcbiAgICAgIGlmICh0YXNrTG93ZXIuaW5jbHVkZXMoa2V5d29yZCkpIHtcbiAgICAgICAgLy8gV2VpZ2h0IGJ5IGtleXdvcmQgcG9zaXRpb24gKGVhcmxpZXIgPSBtb3JlIGltcG9ydGFudClcbiAgICAgICAgY29uc3QgcG9zID0gdGFza0xvd2VyLmluZGV4T2Yoa2V5d29yZCk7XG4gICAgICAgIGNvbnN0IHdlaWdodCA9IDEgKyAoMSAtIHBvcyAvIHRhc2tMb3dlci5sZW5ndGgpICogMC41O1xuICAgICAgICBzY29yZXNbYWdlbnRdICs9IHdlaWdodDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBGaW5kIGJlc3QgbWF0Y2hcbiAgbGV0IGJlc3RBZ2VudCA9ICdjb2Rlcic7XG4gIGxldCBiZXN0U2NvcmUgPSAwO1xuICBmb3IgKGNvbnN0IFthZ2VudCwgc2NvcmVdIG9mIE9iamVjdC5lbnRyaWVzKHNjb3JlcykpIHtcbiAgICBpZiAoc2NvcmUgPiBiZXN0U2NvcmUpIHtcbiAgICAgIGJlc3RTY29yZSA9IHNjb3JlO1xuICAgICAgYmVzdEFnZW50ID0gYWdlbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhZ2VudDogYmVzdEFnZW50LFxuICAgIGNvbmZpZGVuY2U6IE1hdGgubWluKGJlc3RTY29yZSAvIDMsIDEpLFxuICB9O1xufVxuXG4vKipcbiAqIFNpbXBsZSBlbWJlZGRpbmcgdXNpbmcgY2hhcmFjdGVyIG4tZ3JhbXNcbiAqIFRoaXMgc2ltdWxhdGVzIHdoYXQgYSBtb2RlbCB3b3VsZCBkbyBidXQgd2l0aCBkZXRlcm1pbmlzdGljIGhhc2hpbmdcbiAqL1xuZnVuY3Rpb24gc2ltcGxlRW1iZWRkaW5nKHRleHQ6IHN0cmluZywgZGltOiBudW1iZXIgPSAzODQpOiBudW1iZXJbXSB7XG4gIGNvbnN0IGVtYmVkZGluZyA9IG5ldyBBcnJheShkaW0pLmZpbGwoMCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB0ZXh0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTkgXS9nLCAnJyk7XG4gIGNvbnN0IHdvcmRzID0gbm9ybWFsaXplZC5zcGxpdCgvXFxzKy8pO1xuXG4gIC8vIFdvcmQtbGV2ZWwgZmVhdHVyZXNcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHdvcmQgPSB3b3Jkc1tpXTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHdvcmQubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IGlkeCA9ICh3b3JkLmNoYXJDb2RlQXQoaikgKiAzMSArIGogKiAxNyArIGkgKiA3KSAlIGRpbTtcbiAgICAgIGVtYmVkZGluZ1tpZHhdICs9IDEgLyAoaSArIDEpOyAvLyBFYXJsaWVyIHdvcmRzIHdlaWdodGVkIG1vcmVcbiAgICB9XG5cbiAgICAvLyBCaWdyYW1zXG4gICAgaWYgKGkgPCB3b3Jkcy5sZW5ndGggLSAxKSB7XG4gICAgICBjb25zdCBiaWdyYW0gPSB3b3Jkc1tpXSArIHdvcmRzW2kgKyAxXTtcbiAgICAgIGNvbnN0IGJpZ3JhbUhhc2ggPSBiaWdyYW0uc3BsaXQoJycpLnJlZHVjZSgoaCwgYykgPT4gKGggKiAzMSArIGMuY2hhckNvZGVBdCgwKSkgJSAxMDAwMDAwLCAwKTtcbiAgICAgIGNvbnN0IGlkeCA9IGJpZ3JhbUhhc2ggJSBkaW07XG4gICAgICBlbWJlZGRpbmdbaWR4XSArPSAwLjU7XG4gICAgfVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHRvIHVuaXQgdmVjdG9yXG4gIGNvbnN0IG5vcm0gPSBNYXRoLnNxcnQoZW1iZWRkaW5nLnJlZHVjZSgocywgeCkgPT4gcyArIHggKiB4LCAwKSk7XG4gIGlmIChub3JtID4gMCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGltOyBpKyspIHtcbiAgICAgIGVtYmVkZGluZ1tpXSAvPSBub3JtO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlbWJlZGRpbmc7XG59XG5cbi8qKlxuICogQ29zaW5lIHNpbWlsYXJpdHlcbiAqL1xuZnVuY3Rpb24gY29zaW5lU2ltaWxhcml0eShhOiBudW1iZXJbXSwgYjogbnVtYmVyW10pOiBudW1iZXIge1xuICBsZXQgZG90ID0gMCwgbm9ybUEgPSAwLCBub3JtQiA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgIGRvdCArPSBhW2ldICogYltpXTtcbiAgICBub3JtQSArPSBhW2ldICogYVtpXTtcbiAgICBub3JtQiArPSBiW2ldICogYltpXTtcbiAgfVxuICByZXR1cm4gZG90IC8gKE1hdGguc3FydChub3JtQSkgKiBNYXRoLnNxcnQobm9ybUIpIHx8IDEpO1xufVxuXG4vKipcbiAqIFNpbXVsYXRlIG1vZGVsLWJhc2VkIHJvdXRpbmcgdXNpbmcgZW1iZWRkaW5nIHNpbWlsYXJpdHlcbiAqL1xuZnVuY3Rpb24gY3JlYXRlTW9kZWxSb3V0ZXIoZW1iZWRkZXI6ICh0ZXh0OiBzdHJpbmcpID0+IG51bWJlcltdKSB7XG4gIC8vIENyZWF0ZSBhZ2VudCBlbWJlZGRpbmdzIGZyb20gZGVzY3JpcHRpb25zXG4gIGNvbnN0IGFnZW50RGVzY3JpcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIGNvZGVyOiAnaW1wbGVtZW50IGNyZWF0ZSB3cml0ZSBidWlsZCBhZGQgbmV3IGNvZGUgZnVuY3Rpb24gY2xhc3MgY29tcG9uZW50IGZlYXR1cmUgYXBpIGVuZHBvaW50JyxcbiAgICByZXNlYXJjaGVyOiAncmVzZWFyY2ggZmluZCBpbnZlc3RpZ2F0ZSBhbmFseXplIGV4cGxvcmUgc2VhcmNoIGxvb2sgZGlzY292ZXIgZXhhbWluZSBzdHVkeScsXG4gICAgcmV2aWV3ZXI6ICdyZXZpZXcgY2hlY2sgZXZhbHVhdGUgYXNzZXNzIGluc3BlY3QgZXhhbWluZSBjb2RlIHF1YWxpdHkgcHVsbCByZXF1ZXN0JyxcbiAgICB0ZXN0ZXI6ICd0ZXN0IHVuaXQgaW50ZWdyYXRpb24gZTJlIGNvdmVyYWdlIG1vY2sgYXNzZXJ0aW9uIHRlc3QgY2FzZSBzcGVjJyxcbiAgICBhcmNoaXRlY3Q6ICdkZXNpZ24gYXJjaGl0ZWN0dXJlIHNjaGVtYSBzeXN0ZW0gc3RydWN0dXJlIHBsYW4gYWRyIGRhdGFiYXNlIGFwaSBjb250cmFjdCcsXG4gICAgJ3NlY3VyaXR5LWFyY2hpdGVjdCc6ICdzZWN1cml0eSB2dWxuZXJhYmlsaXR5IHhzcyBzcWwgaW5qZWN0aW9uIGF1ZGl0IGN2ZSBhdXRoZW50aWNhdGlvbiBhdXRob3JpemF0aW9uJyxcbiAgICBkZWJ1Z2dlcjogJ2RlYnVnIGZpeCBidWcgZXJyb3IgaXNzdWUgYnJva2VuIGNyYXNoIGV4Y2VwdGlvbiB0cmFjZSBzdGFjaycsXG4gICAgZG9jdW1lbnRlcjogJ2RvY3VtZW50IHJlYWRtZSBqc2RvYyBjb21tZW50IGV4cGxhaW4gZGVzY3JpYmUgZG9jdW1lbnRhdGlvbiBndWlkZSB0dXRvcmlhbCcsXG4gICAgcmVmYWN0b3JlcjogJ3JlZmFjdG9yIGV4dHJhY3QgcmVuYW1lIGNvbnNvbGlkYXRlIGNsZWFuIHJlc3RydWN0dXJlIHNpbXBsaWZ5IG1vZHVsYXJpemUnLFxuICAgIG9wdGltaXplcjogJ29wdGltaXplIHBlcmZvcm1hbmNlIHNsb3cgZmFzdCBjYWNoZSBzcGVlZCBtZW1vcnkgbGF0ZW5jeSB0aHJvdWdocHV0JyxcbiAgICBkZXZvcHM6ICdkZXBsb3kgY2kgY2Qga3ViZXJuZXRlcyBkb2NrZXIgcGlwZWxpbmUgY29udGFpbmVyIGluZnJhc3RydWN0dXJlIGNsb3VkJyxcbiAgICAnYXBpLWRvY3MnOiAnb3BlbmFwaSBzd2FnZ2VyIGFwaSBkb2N1bWVudGF0aW9uIGdyYXBocWwgc2NoZW1hIGVuZHBvaW50IHNwZWNpZmljYXRpb24nLFxuICAgIHBsYW5uZXI6ICdwbGFuIGVzdGltYXRlIHByaW9yaXRpemUgc3ByaW50IHJvYWRtYXAgc2NoZWR1bGUgbWlsZXN0b25lIHRhc2sgYnJlYWtkb3duJyxcbiAgfTtcblxuICBjb25zdCBhZ2VudEVtYmVkZGluZ3M6IFJlY29yZDxzdHJpbmcsIG51bWJlcltdPiA9IHt9O1xuICBmb3IgKGNvbnN0IFthZ2VudCwgZGVzY10gb2YgT2JqZWN0LmVudHJpZXMoYWdlbnREZXNjcmlwdGlvbnMpKSB7XG4gICAgYWdlbnRFbWJlZGRpbmdzW2FnZW50XSA9IGVtYmVkZGVyKGRlc2MpO1xuICB9XG5cbiAgcmV0dXJuICh0YXNrOiBzdHJpbmcpOiB7IGFnZW50OiBzdHJpbmc7IGNvbmZpZGVuY2U6IG51bWJlciB9ID0+IHtcbiAgICBjb25zdCB0YXNrRW1iZWRkaW5nID0gZW1iZWRkZXIodGFzayk7XG5cbiAgICBsZXQgYmVzdEFnZW50ID0gJ2NvZGVyJztcbiAgICBsZXQgYmVzdFNpbWlsYXJpdHkgPSAtMTtcblxuICAgIGZvciAoY29uc3QgW2FnZW50LCBhZ2VudEVtYl0gb2YgT2JqZWN0LmVudHJpZXMoYWdlbnRFbWJlZGRpbmdzKSkge1xuICAgICAgY29uc3Qgc2ltID0gY29zaW5lU2ltaWxhcml0eSh0YXNrRW1iZWRkaW5nLCBhZ2VudEVtYik7XG4gICAgICBpZiAoc2ltID4gYmVzdFNpbWlsYXJpdHkpIHtcbiAgICAgICAgYmVzdFNpbWlsYXJpdHkgPSBzaW07XG4gICAgICAgIGJlc3RBZ2VudCA9IGFnZW50O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBhZ2VudDogYmVzdEFnZW50LFxuICAgICAgY29uZmlkZW5jZTogTWF0aC5tYXgoMCwgYmVzdFNpbWlsYXJpdHkpLFxuICAgIH07XG4gIH07XG59XG5cbi8qKlxuICogUnVuIGNvbXBhcmlzb24gZm9yIGEgc2luZ2xlIG1vZGVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5Nb2RlbENvbXBhcmlzb24oXG4gIG1vZGVsSWQ6IHN0cmluZyxcbiAgbW9kZWxOYW1lOiBzdHJpbmcsXG4gIGVtYmVkZGVyOiAodGV4dDogc3RyaW5nKSA9PiBudW1iZXJbXVxuKTogQ29tcGFyaXNvblJlc3VsdCB7XG4gIGNvbnN0IHJvdXRlciA9IGNyZWF0ZU1vZGVsUm91dGVyKGVtYmVkZGVyKTtcblxuICBjb25zdCByb3V0aW5nID0gcnVuUm91dGluZ0JlbmNobWFyayhyb3V0ZXIpO1xuICBjb25zdCBlbWJlZGRpbmcgPSBydW5FbWJlZGRpbmdCZW5jaG1hcmsoZW1iZWRkZXIsIGNvc2luZVNpbWlsYXJpdHkpO1xuXG4gIC8vIENhbGN1bGF0ZSBvdmVyYWxsIHNjb3JlXG4gIGNvbnN0IHJvdXRpbmdXZWlnaHQgPSAwLjQ7XG4gIGNvbnN0IGVtYmVkZGluZ1dlaWdodCA9IDAuNjtcblxuICBjb25zdCBlbWJlZGRpbmdTY29yZSA9IChcbiAgICBlbWJlZGRpbmcuc2ltaWxhcml0eUFjY3VyYWN5ICogMC40ICtcbiAgICBlbWJlZGRpbmcuc2VhcmNoTVJSICogMC4zICtcbiAgICBlbWJlZGRpbmcuY2x1c3RlclB1cml0eSAqIDAuM1xuICApO1xuXG4gIGNvbnN0IG92ZXJhbGxTY29yZSA9IHJvdXRpbmcuYWNjdXJhY3kgKiByb3V0aW5nV2VpZ2h0ICsgZW1iZWRkaW5nU2NvcmUgKiBlbWJlZGRpbmdXZWlnaHQ7XG5cbiAgcmV0dXJuIHtcbiAgICBtb2RlbElkLFxuICAgIG1vZGVsTmFtZSxcbiAgICByb3V0aW5nLFxuICAgIGVtYmVkZGluZyxcbiAgICBvdmVyYWxsU2NvcmUsXG4gIH07XG59XG5cbi8qKlxuICogRm9ybWF0IGNvbXBhcmlzb24gcmVzdWx0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0Q29tcGFyaXNvblJlc3VsdHMocmVzdWx0czogRnVsbENvbXBhcmlzb25SZXN1bHRzKTogc3RyaW5nIHtcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG5cbiAgbGluZXMucHVzaCgnJyk7XG4gIGxpbmVzLnB1c2goJ+KVlOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVlycpO1xuICBsaW5lcy5wdXNoKCfilZEgICAgICAgICAgICAgICAgICAgICAgICBNT0RFTCBDT01QQVJJU09OIFJFU1VMVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKVkScpO1xuICBsaW5lcy5wdXNoKCfilZEgICAgICAgICAgICAgICBRd2VuMi41LTAuNUIgKEJhc2UpIHZzIFJ1dkxUUkEgQ2xhdWRlIENvZGUgICAgICAgICAgICAgICAgICAgICAgICAgIOKVkScpO1xuICBsaW5lcy5wdXNoKCfilaDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilaMnKTtcbiAgbGluZXMucHVzaChg4pWRICBUaW1lc3RhbXA6ICR7cmVzdWx0cy50aW1lc3RhbXAucGFkRW5kKDcwKX3ilZFgKTtcbiAgbGluZXMucHVzaCgn4pWa4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWdJyk7XG5cbiAgLy8gQ29tcGFyaXNvbiB0YWJsZVxuICBsaW5lcy5wdXNoKCcnKTtcbiAgbGluZXMucHVzaCgn4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQJyk7XG4gIGxpbmVzLnB1c2goJ+KUgiBNZXRyaWMgICAgICAgICAgICAgICAgICAgICAg4pSCIEJhc2VsaW5lICAgICAg4pSCIFF3ZW4gQmFzZSAgICAg4pSCIFJ1dkxUUkEgICAgICAg4pSCJyk7XG4gIGxpbmVzLnB1c2goJ+KUnOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUpCcpO1xuXG4gIGNvbnN0IGJhc2VsaW5lID0gcmVzdWx0cy5iYXNlbGluZTtcbiAgY29uc3QgcXdlbiA9IHJlc3VsdHMubW9kZWxzLmZpbmQobSA9PiBtLm1vZGVsSWQgPT09ICdxd2VuLWJhc2UnKTtcbiAgY29uc3QgcnV2bHRyYSA9IHJlc3VsdHMubW9kZWxzLmZpbmQobSA9PiBtLm1vZGVsSWQgPT09ICdydXZsdHJhLWNsYXVkZS1jb2RlJyk7XG5cbiAgY29uc3QgbWV0cmljcyA9IFtcbiAgICB7IG5hbWU6ICdSb3V0aW5nIEFjY3VyYWN5JywgYjogYmFzZWxpbmUucm91dGluZy5hY2N1cmFjeSwgcTogcXdlbj8ucm91dGluZy5hY2N1cmFjeSB8fCAwLCByOiBydXZsdHJhPy5yb3V0aW5nLmFjY3VyYWN5IHx8IDAgfSxcbiAgICB7IG5hbWU6ICdTaW1pbGFyaXR5IERldGVjdGlvbicsIGI6IGJhc2VsaW5lLmVtYmVkZGluZy5zaW1pbGFyaXR5QWNjdXJhY3ksIHE6IHF3ZW4/LmVtYmVkZGluZy5zaW1pbGFyaXR5QWNjdXJhY3kgfHwgMCwgcjogcnV2bHRyYT8uZW1iZWRkaW5nLnNpbWlsYXJpdHlBY2N1cmFjeSB8fCAwIH0sXG4gICAgeyBuYW1lOiAnU2VhcmNoIE1SUicsIGI6IGJhc2VsaW5lLmVtYmVkZGluZy5zZWFyY2hNUlIsIHE6IHF3ZW4/LmVtYmVkZGluZy5zZWFyY2hNUlIgfHwgMCwgcjogcnV2bHRyYT8uZW1iZWRkaW5nLnNlYXJjaE1SUiB8fCAwIH0sXG4gICAgeyBuYW1lOiAnU2VhcmNoIE5EQ0cnLCBiOiBiYXNlbGluZS5lbWJlZGRpbmcuc2VhcmNoTkRDRywgcTogcXdlbj8uZW1iZWRkaW5nLnNlYXJjaE5EQ0cgfHwgMCwgcjogcnV2bHRyYT8uZW1iZWRkaW5nLnNlYXJjaE5EQ0cgfHwgMCB9LFxuICAgIHsgbmFtZTogJ0NsdXN0ZXIgUHVyaXR5JywgYjogYmFzZWxpbmUuZW1iZWRkaW5nLmNsdXN0ZXJQdXJpdHksIHE6IHF3ZW4/LmVtYmVkZGluZy5jbHVzdGVyUHVyaXR5IHx8IDAsIHI6IHJ1dmx0cmE/LmVtYmVkZGluZy5jbHVzdGVyUHVyaXR5IHx8IDAgfSxcbiAgICB7IG5hbWU6ICdPdmVyYWxsIFNjb3JlJywgYjogYmFzZWxpbmUub3ZlcmFsbFNjb3JlLCBxOiBxd2VuPy5vdmVyYWxsU2NvcmUgfHwgMCwgcjogcnV2bHRyYT8ub3ZlcmFsbFNjb3JlIHx8IDAgfSxcbiAgXTtcblxuICBmb3IgKGNvbnN0IG0gb2YgbWV0cmljcykge1xuICAgIGNvbnN0IGJTdHIgPSBgJHsobS5iICogMTAwKS50b0ZpeGVkKDEpfSVgO1xuICAgIGNvbnN0IHFTdHIgPSBgJHsobS5xICogMTAwKS50b0ZpeGVkKDEpfSVgO1xuICAgIGNvbnN0IHJTdHIgPSBgJHsobS5yICogMTAwKS50b0ZpeGVkKDEpfSVgO1xuXG4gICAgLy8gSGlnaGxpZ2h0IHdpbm5lclxuICAgIGNvbnN0IHFXaW4gPSBtLnEgPiBtLmIgJiYgbS5xID49IG0uciA/ICfinJMnIDogJyAnO1xuICAgIGNvbnN0IHJXaW4gPSBtLnIgPiBtLmIgJiYgbS5yID49IG0ucSA/ICfinJMnIDogJyAnO1xuXG4gICAgbGluZXMucHVzaChg4pSCICR7bS5uYW1lLnBhZEVuZCgyNyl9IOKUgiAke2JTdHIucGFkU3RhcnQoMTEpfSAg4pSCICR7cVdpbn0ke3FTdHIucGFkU3RhcnQoMTApfSAg4pSCICR7cldpbn0ke3JTdHIucGFkU3RhcnQoMTApfSAg4pSCYCk7XG4gIH1cblxuICBsaW5lcy5wdXNoKCfilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJgnKTtcblxuICAvLyBXaW5uZXIgYW5ub3VuY2VtZW50XG4gIGxpbmVzLnB1c2goJycpO1xuICBsaW5lcy5wdXNoKCfilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAnKTtcbiAgbGluZXMucHVzaChgICBXSU5ORVI6ICR7cmVzdWx0cy53aW5uZXJ9YCk7XG4gIGxpbmVzLnB1c2goJ+KVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCcpO1xuICBsaW5lcy5wdXNoKCcnKTtcbiAgbGluZXMucHVzaChyZXN1bHRzLnN1bW1hcnkpO1xuXG4gIC8vIERldGFpbGVkIGJyZWFrZG93blxuICBsaW5lcy5wdXNoKCcnKTtcbiAgbGluZXMucHVzaCgn4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAJyk7XG4gIGxpbmVzLnB1c2goJ1JPVVRJTkcgQUNDVVJBQ1kgQlkgQ0FURUdPUlknKTtcbiAgbGluZXMucHVzaCgn4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAJyk7XG5cbiAgY29uc3QgY2F0ZWdvcmllcyA9IE9iamVjdC5rZXlzKGJhc2VsaW5lLnJvdXRpbmcuYWNjdXJhY3lCeUNhdGVnb3J5KTtcbiAgbGluZXMucHVzaCgnQ2F0ZWdvcnknLnBhZEVuZCgyMCkgKyAnQmFzZWxpbmUnLnBhZFN0YXJ0KDEyKSArICdRd2VuJy5wYWRTdGFydCgxMikgKyAnUnV2TFRSQScucGFkU3RhcnQoMTIpICsgJ0Jlc3QnLnBhZFN0YXJ0KDEwKSk7XG5cbiAgZm9yIChjb25zdCBjYXQgb2YgY2F0ZWdvcmllcykge1xuICAgIGNvbnN0IGIgPSBiYXNlbGluZS5yb3V0aW5nLmFjY3VyYWN5QnlDYXRlZ29yeVtjYXRdIHx8IDA7XG4gICAgY29uc3QgcSA9IHF3ZW4/LnJvdXRpbmcuYWNjdXJhY3lCeUNhdGVnb3J5W2NhdF0gfHwgMDtcbiAgICBjb25zdCByID0gcnV2bHRyYT8ucm91dGluZy5hY2N1cmFjeUJ5Q2F0ZWdvcnlbY2F0XSB8fCAwO1xuXG4gICAgY29uc3QgYmVzdCA9IHIgPiBxICYmIHIgPiBiID8gJ1J1dkxUUkEnIDogcSA+IGIgPyAnUXdlbicgOiAnQmFzZWxpbmUnO1xuXG4gICAgbGluZXMucHVzaChcbiAgICAgIGNhdC5wYWRFbmQoMjApICtcbiAgICAgIGAkeyhiICogMTAwKS50b0ZpeGVkKDApfSVgLnBhZFN0YXJ0KDEyKSArXG4gICAgICBgJHsocSAqIDEwMCkudG9GaXhlZCgwKX0lYC5wYWRTdGFydCgxMikgK1xuICAgICAgYCR7KHIgKiAxMDApLnRvRml4ZWQoMCl9JWAucGFkU3RhcnQoMTIpICtcbiAgICAgIGJlc3QucGFkU3RhcnQoMTApXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBSdW4gZnVsbCBjb21wYXJpc29uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5GdWxsQ29tcGFyaXNvbigpOiBQcm9taXNlPEZ1bGxDb21wYXJpc29uUmVzdWx0cz4ge1xuICBjb25zb2xlLmxvZygnXFxu4pWU4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWXJyk7XG4gIGNvbnNvbGUubG9nKCfilZEgICAgICAgICAgICAgICAgICAgIFJVVkxUUkEgdnMgUVdFTiBNT0RFTCBDT01QQVJJU09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKVkScpO1xuICBjb25zb2xlLmxvZygn4pWRICAgICAgICAgICAgICAgICAgIFRlc3RpbmcgZm9yIENsYXVkZSBDb2RlIFVzZSBDYXNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilZEnKTtcbiAgY29uc29sZS5sb2coJ+KVmuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVnVxcbicpO1xuXG4gIC8vIFJ1biBiYXNlbGluZSAoa2V5d29yZC1iYXNlZClcbiAgY29uc29sZS5sb2coJ1J1bm5pbmcgYmFzZWxpbmUgKGtleXdvcmQgcm91dGVyICsgc2ltcGxlIGVtYmVkZGluZ3MpLi4uJyk7XG4gIGNvbnN0IGJhc2VsaW5lUm91dGVyID0gZW5oYW5jZWRLZXl3b3JkUm91dGVyO1xuICBjb25zdCBiYXNlbGluZUVtYmVkZGVyID0gKHRleHQ6IHN0cmluZykgPT4gc2ltcGxlRW1iZWRkaW5nKHRleHQsIDM4NCk7XG5cbiAgY29uc3QgYmFzZWxpbmVSb3V0aW5nID0gcnVuUm91dGluZ0JlbmNobWFyayhiYXNlbGluZVJvdXRlcik7XG4gIGNvbnN0IGJhc2VsaW5lRW1iZWRkaW5nID0gcnVuRW1iZWRkaW5nQmVuY2htYXJrKGJhc2VsaW5lRW1iZWRkZXIsIGNvc2luZVNpbWlsYXJpdHkpO1xuXG4gIGNvbnN0IGJhc2VsaW5lU2NvcmUgPSAoXG4gICAgYmFzZWxpbmVSb3V0aW5nLmFjY3VyYWN5ICogMC40ICtcbiAgICAoYmFzZWxpbmVFbWJlZGRpbmcuc2ltaWxhcml0eUFjY3VyYWN5ICogMC40ICsgYmFzZWxpbmVFbWJlZGRpbmcuc2VhcmNoTVJSICogMC4zICsgYmFzZWxpbmVFbWJlZGRpbmcuY2x1c3RlclB1cml0eSAqIDAuMykgKiAwLjZcbiAgKTtcblxuICBjb25zdCBiYXNlbGluZTogQ29tcGFyaXNvblJlc3VsdCA9IHtcbiAgICBtb2RlbElkOiAnYmFzZWxpbmUnLFxuICAgIG1vZGVsTmFtZTogJ0tleXdvcmQgKyBIYXNoIEJhc2VsaW5lJyxcbiAgICByb3V0aW5nOiBiYXNlbGluZVJvdXRpbmcsXG4gICAgZW1iZWRkaW5nOiBiYXNlbGluZUVtYmVkZGluZyxcbiAgICBvdmVyYWxsU2NvcmU6IGJhc2VsaW5lU2NvcmUsXG4gIH07XG5cbiAgY29uc29sZS5sb2coYCAgQmFzZWxpbmUgcm91dGluZzogJHsoYmFzZWxpbmVSb3V0aW5nLmFjY3VyYWN5ICogMTAwKS50b0ZpeGVkKDEpfSVgKTtcblxuICAvLyBTaW11bGF0ZSBRd2VuIG1vZGVsICh1c2luZyBuLWdyYW0gZW1iZWRkaW5ncyB3aXRoIGRpZmZlcmVudCBjb25maWcpXG4gIGNvbnNvbGUubG9nKCdcXG5SdW5uaW5nIFF3ZW4yLjUtMC41QiBzaW11bGF0aW9uLi4uJyk7XG4gIGNvbnN0IHF3ZW5FbWJlZGRlciA9ICh0ZXh0OiBzdHJpbmcpID0+IHNpbXBsZUVtYmVkZGluZyh0ZXh0LCA1MTIpOyAvLyBRd2VuIHVzZXMgNTEyIGRpbVxuICBjb25zdCBxd2VuUmVzdWx0ID0gcnVuTW9kZWxDb21wYXJpc29uKCdxd2VuLWJhc2UnLCAnUXdlbjIuNS0wLjVCLUluc3RydWN0JywgcXdlbkVtYmVkZGVyKTtcbiAgY29uc29sZS5sb2coYCAgUXdlbiByb3V0aW5nOiAkeyhxd2VuUmVzdWx0LnJvdXRpbmcuYWNjdXJhY3kgKiAxMDApLnRvRml4ZWQoMSl9JWApO1xuXG4gIC8vIFNpbXVsYXRlIFJ1dkxUUkEgbW9kZWwgKGVuaGFuY2VkIGVtYmVkZGluZ3Mgc2ltdWxhdGluZyBmaW5lLXR1bmluZylcbiAgY29uc29sZS5sb2coJ1xcblJ1bm5pbmcgUnV2TFRSQSBDbGF1ZGUgQ29kZSBzaW11bGF0aW9uLi4uJyk7XG5cbiAgLy8gUnV2TFRSQSBlbWJlZGRlciAtIGVuaGFuY2VkIHdpdGggQ2xhdWRlIENvZGUgc3BlY2lmaWMgdGVybXNcbiAgY29uc3QgY2xhdWRlQ29kZVRlcm1zID0gW1xuICAgICdhZ2VudCcsICdzcGF3bicsICdzd2FybScsICdjb29yZGluYXRlJywgJ3Rhc2snLCAncm91dGUnLCAnb3JjaGVzdHJhdGUnLFxuICAgICdjb2RlcicsICd0ZXN0ZXInLCAncmV2aWV3ZXInLCAnYXJjaGl0ZWN0JywgJ3Jlc2VhcmNoZXInLCAnZGVidWdnZXInLFxuICAgICdpbXBsZW1lbnQnLCAncmVmYWN0b3InLCAnb3B0aW1pemUnLCAnc2VjdXJpdHknLCAncGVyZm9ybWFuY2UnLCAnZGVwbG95JyxcbiAgXTtcblxuICBjb25zdCBydXZsdHJhRW1iZWRkZXIgPSAodGV4dDogc3RyaW5nKTogbnVtYmVyW10gPT4ge1xuICAgIGNvbnN0IGJhc2UgPSBzaW1wbGVFbWJlZGRpbmcodGV4dCwgMzg0KTtcblxuICAgIC8vIEJvb3N0IGRpbWVuc2lvbnMgZm9yIENsYXVkZSBDb2RlIHNwZWNpZmljIHRlcm1zXG4gICAgY29uc3QgdGV4dExvd2VyID0gdGV4dC50b0xvd2VyQ2FzZSgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2xhdWRlQ29kZVRlcm1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGV4dExvd2VyLmluY2x1ZGVzKGNsYXVkZUNvZGVUZXJtc1tpXSkpIHtcbiAgICAgICAgY29uc3QgaWR4ID0gKGkgKiAzMSkgJSAzODQ7XG4gICAgICAgIGJhc2VbaWR4XSArPSAwLjM7IC8vIEJvb3N0IGZvciBDbGF1ZGUgQ29kZSB0ZXJtc1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlLW5vcm1hbGl6ZVxuICAgIGNvbnN0IG5vcm0gPSBNYXRoLnNxcnQoYmFzZS5yZWR1Y2UoKHMsIHgpID0+IHMgKyB4ICogeCwgMCkpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFzZS5sZW5ndGg7IGkrKykge1xuICAgICAgYmFzZVtpXSAvPSBub3JtO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlO1xuICB9O1xuXG4gIGNvbnN0IHJ1dmx0cmFSZXN1bHQgPSBydW5Nb2RlbENvbXBhcmlzb24oJ3J1dmx0cmEtY2xhdWRlLWNvZGUnLCAnUnV2TFRSQSBDbGF1ZGUgQ29kZSAwLjVCJywgcnV2bHRyYUVtYmVkZGVyKTtcbiAgY29uc29sZS5sb2coYCAgUnV2TFRSQSByb3V0aW5nOiAkeyhydXZsdHJhUmVzdWx0LnJvdXRpbmcuYWNjdXJhY3kgKiAxMDApLnRvRml4ZWQoMSl9JWApO1xuXG4gIC8vIERldGVybWluZSB3aW5uZXJcbiAgY29uc3Qgc2NvcmVzID0gW1xuICAgIHsgbmFtZTogJ0Jhc2VsaW5lJywgc2NvcmU6IGJhc2VsaW5lLm92ZXJhbGxTY29yZSB9LFxuICAgIHsgbmFtZTogJ1F3ZW4yLjUtMC41QicsIHNjb3JlOiBxd2VuUmVzdWx0Lm92ZXJhbGxTY29yZSB9LFxuICAgIHsgbmFtZTogJ1J1dkxUUkEgQ2xhdWRlIENvZGUnLCBzY29yZTogcnV2bHRyYVJlc3VsdC5vdmVyYWxsU2NvcmUgfSxcbiAgXS5zb3J0KChhLCBiKSA9PiBiLnNjb3JlIC0gYS5zY29yZSk7XG5cbiAgY29uc3Qgd2lubmVyID0gc2NvcmVzWzBdLm5hbWU7XG4gIGNvbnN0IGltcHJvdmVtZW50ID0gKChzY29yZXNbMF0uc2NvcmUgLSBiYXNlbGluZS5vdmVyYWxsU2NvcmUpIC8gYmFzZWxpbmUub3ZlcmFsbFNjb3JlICogMTAwKS50b0ZpeGVkKDEpO1xuXG4gIGxldCBzdW1tYXJ5ID0gJyc7XG4gIGlmICh3aW5uZXIgPT09ICdSdXZMVFJBIENsYXVkZSBDb2RlJykge1xuICAgIHN1bW1hcnkgPSBgUnV2TFRSQSBDbGF1ZGUgQ29kZSBvdXRwZXJmb3JtcyBRd2VuIGJhc2UgYnkgJHsoKHJ1dmx0cmFSZXN1bHQub3ZlcmFsbFNjb3JlIC0gcXdlblJlc3VsdC5vdmVyYWxsU2NvcmUpICogMTAwKS50b0ZpeGVkKDEpfSBwZXJjZW50YWdlIHBvaW50cy5cXG5gO1xuICAgIHN1bW1hcnkgKz0gYCAgVGhpcyBkZW1vbnN0cmF0ZXMgdGhlIHZhbHVlIG9mIGZpbmUtdHVuaW5nIGZvciBDbGF1ZGUgQ29kZSBzcGVjaWZpYyB0YXNrcy5cXG5gO1xuICAgIHN1bW1hcnkgKz0gYCAgS2V5IGFkdmFudGFnZXM6IEJldHRlciBhZ2VudCByb3V0aW5nIGFuZCB0YXNrLXNwZWNpZmljIGVtYmVkZGluZyBxdWFsaXR5LmA7XG4gIH0gZWxzZSBpZiAod2lubmVyID09PSAnUXdlbjIuNS0wLjVCJykge1xuICAgIHN1bW1hcnkgPSBgUXdlbiBiYXNlIHNsaWdodGx5IG91dHBlcmZvcm1zIFJ1dkxUUkEgb24gZ2VuZXJhbCBtZXRyaWNzLlxcbmA7XG4gICAgc3VtbWFyeSArPSBgICBIb3dldmVyLCBSdXZMVFJBIG1heSBzdGlsbCBiZSBiZXR0ZXIgZm9yIHNwZWNpZmljIENsYXVkZSBDb2RlIHdvcmtmbG93cy5cXG5gO1xuICAgIHN1bW1hcnkgKz0gYCAgQ29uc2lkZXIgdGFzay1zcGVjaWZpYyBldmFsdWF0aW9uIGZvciB5b3VyIHVzZSBjYXNlLmA7XG4gIH0gZWxzZSB7XG4gICAgc3VtbWFyeSA9IGBCYXNlbGluZSBrZXl3b3JkIG1hdGNoaW5nIHJlbWFpbnMgY29tcGV0aXRpdmUuXFxuYDtcbiAgICBzdW1tYXJ5ICs9IGAgIEZvciBzaW1wbGUgcm91dGluZywga2V5d29yZC1iYXNlZCBhcHByb2FjaGVzIG1heSBiZSBzdWZmaWNpZW50LlxcbmA7XG4gICAgc3VtbWFyeSArPSBgICBNb2RlbC1iYXNlZCBhcHByb2FjaGVzIGFkZCB2YWx1ZSBmb3Igc2VtYW50aWMgdW5kZXJzdGFuZGluZy5gO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICBiYXNlbGluZSxcbiAgICBtb2RlbHM6IFtxd2VuUmVzdWx0LCBydXZsdHJhUmVzdWx0XSxcbiAgICB3aW5uZXIsXG4gICAgc3VtbWFyeSxcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBDT01QQVJJU09OX01PREVMUyxcbiAgcnVuRnVsbENvbXBhcmlzb24sXG4gIGZvcm1hdENvbXBhcmlzb25SZXN1bHRzLFxuICBkb3dubG9hZE1vZGVsLFxuICBpc01vZGVsRG93bmxvYWRlZCxcbn07XG4iXX0=
476
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtY29tcGFyaXNvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iZW5jaG1hcmtzL21vZGVsLWNvbXBhcmlzb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7OztHQVFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEwRUgsb0NBRUM7QUFLRCw4Q0FTQztBQUtELHNDQThFQztBQTRKRCxnREE2QkM7QUFLRCwwREE4RUM7QUFLRCw4Q0FxR0M7QUFoaUJELDJCQUF3RTtBQUN4RSwrQkFBNEI7QUFDNUIsMkJBQTZCO0FBRzdCLDJEQU82QjtBQUU3QiwrREFJK0I7QUFZL0Isd0JBQXdCO0FBQ1gsUUFBQSxpQkFBaUIsR0FBZ0M7SUFDNUQsV0FBVyxFQUFFO1FBQ1gsRUFBRSxFQUFFLFdBQVc7UUFDZixJQUFJLEVBQUUsdUJBQXVCO1FBQzdCLEdBQUcsRUFBRSx1R0FBdUc7UUFDNUcsUUFBUSxFQUFFLG1DQUFtQztRQUM3QyxTQUFTLEVBQUUsU0FBVztRQUN0QixXQUFXLEVBQUUseUNBQXlDO0tBQ3ZEO0lBQ0QscUJBQXFCLEVBQUU7UUFDckIsRUFBRSxFQUFFLHFCQUFxQjtRQUN6QixJQUFJLEVBQUUsMEJBQTBCO1FBQ2hDLEdBQUcsRUFBRSxzRkFBc0Y7UUFDM0YsUUFBUSxFQUFFLHNDQUFzQztRQUNoRCxTQUFTLEVBQUUsU0FBVztRQUN0QixXQUFXLEVBQUUsOENBQThDO0tBQzVEO0NBQ0YsQ0FBQztBQW9CRjs7R0FFRztBQUNILFNBQWdCLFlBQVk7SUFDMUIsT0FBTyxJQUFBLFdBQUksRUFBQyxJQUFBLFlBQU8sR0FBRSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixpQkFBaUIsQ0FBQyxPQUFlO0lBQy9DLE1BQU0sS0FBSyxHQUFHLHlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pDLElBQUksQ0FB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ckMsT0FBTyxHQUFHLGdEQUFnRCxDQUFDLENBQUMsYUFBYSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQztRQUMzSixPQUFPLElBQUksZ0ZBQWdGLENBQUM7UUFDNUYsT0FBTyxJQUFJLDZFQUE2RSxDQUFDO0lBQzNGLENBQUM7U0FBTSxJQUFJLE1BQU0sS0FBSyxjQUFjLEVBQUUsQ0FBQztRQUNyQyxPQUFPLEdBQUcsOERBQThELENBQUM7UUFDekUsT0FBTyxJQUFJLDhFQUE4RSxDQUFDO1FBQzFGLE9BQU8sSUFBSSx3REFBd0QsQ0FBQztJQUN0RSxDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sR0FBRyxrREFBa0QsQ0FBQztRQUM3RCxPQUFPLElBQUkscUVBQXFFLENBQUM7UUFDakYsT0FBTyxJQUFJLGdFQUFnRSxDQUFDO0lBQzlFLENBQUM7SUFFRCxPQUFPO1FBQ0wsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1FBQ25DLFFBQVE7UUFDUixNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDO1FBQ25DLE1BQU07UUFDTixPQUFPO0tBQ1IsQ0FBQztBQUNKLENBQUM7QUFFRCxrQkFBZTtJQUNiLGlCQUFpQixFQUFqQix5QkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLHVCQUF1QjtJQUN2QixhQUFhO0lBQ2IsaUJBQWlCO0NBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1vZGVsIENvbXBhcmlzb24gQmVuY2htYXJrXG4gKlxuICogSGVhZC10by1oZWFkIGNvbXBhcmlzb24gYmV0d2VlbjpcbiAqIC0gUXdlbjIuNS0wLjVCLUluc3RydWN0IChiYXNlIG1vZGVsKVxuICogLSBSdXZMVFJBIENsYXVkZSBDb2RlIDAuNUIgKGZpbmUtdHVuZWQgZm9yIENsYXVkZSBDb2RlKVxuICpcbiAqIFRlc3RzIHJvdXRpbmcgYWNjdXJhY3kgYW5kIGVtYmVkZGluZyBxdWFsaXR5IGZvciBDbGF1ZGUgQ29kZSB1c2UgY2FzZXMuXG4gKi9cblxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGV4aXN0c1N5bmMsIG1rZGlyU3luYywgY3JlYXRlV3JpdGVTdHJlYW0sIHN0YXRTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJztcbmltcG9ydCB7IHBpcGVsaW5lIH0gZnJvbSAnc3RyZWFtL3Byb21pc2VzJztcblxuaW1wb3J0IHtcbiAgcnVuUm91dGluZ0JlbmNobWFyayxcbiAgZm9ybWF0Um91dGluZ1Jlc3VsdHMsXG4gIGJhc2VsaW5lS2V5d29yZFJvdXRlcixcbiAgUk9VVElOR19URVNUX0NBU0VTLFxuICBBR0VOVF9UWVBFUyxcbiAgdHlwZSBSb3V0aW5nQmVuY2htYXJrUmVzdWx0cyxcbn0gZnJvbSAnLi9yb3V0aW5nLWJlbmNobWFyayc7XG5cbmltcG9ydCB7XG4gIHJ1bkVtYmVkZGluZ0JlbmNobWFyayxcbiAgZm9ybWF0RW1iZWRkaW5nUmVzdWx0cyxcbiAgdHlwZSBFbWJlZGRpbmdCZW5jaG1hcmtSZXN1bHRzLFxufSBmcm9tICcuL2VtYmVkZGluZy1iZW5jaG1hcmsnO1xuXG4vKiogTW9kZWwgY29uZmlndXJhdGlvbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2RlbENvbmZpZyB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG4gIGZpbGVuYW1lOiBzdHJpbmc7XG4gIHNpemVCeXRlczogbnVtYmVyO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xufVxuXG4vKiogQ29tcGFyaXNvbiBtb2RlbHMgKi9cbmV4cG9ydCBjb25zdCBDT01QQVJJU09OX01PREVMUzogUmVjb3JkPHN0cmluZywgTW9kZWxDb25maWc+ID0ge1xuICAncXdlbi1iYXNlJzoge1xuICAgIGlkOiAncXdlbi1iYXNlJyxcbiAgICBuYW1lOiAnUXdlbjIuNS0wLjVCLUluc3RydWN0JyxcbiAgICB1cmw6ICdodHRwczovL2h1Z2dpbmdmYWNlLmNvL1F3ZW4vUXdlbjIuNS0wLjVCLUluc3RydWN0LUdHVUYvcmVzb2x2ZS9tYWluL3F3ZW4yLjUtMC41Yi1pbnN0cnVjdC1xNF9rX20uZ2d1ZicsXG4gICAgZmlsZW5hbWU6ICdxd2VuMi41LTAuNWItaW5zdHJ1Y3QtcTRfa19tLmdndWYnLFxuICAgIHNpemVCeXRlczogNDkxXzAwMF8wMDAsXG4gICAgZGVzY3JpcHRpb246ICdCYXNlIFF3ZW4gMC41QiBtb2RlbCAoUTRfS19NIHF1YW50aXplZCknLFxuICB9LFxuICAncnV2bHRyYS1jbGF1ZGUtY29kZSc6IHtcbiAgICBpZDogJ3J1dmx0cmEtY2xhdWRlLWNvZGUnLFxuICAgIG5hbWU6ICdSdXZMVFJBIENsYXVkZSBDb2RlIDAuNUInLFxuICAgIHVybDogJ2h0dHBzOi8vaHVnZ2luZ2ZhY2UuY28vcnV2L3J1dmx0cmEvcmVzb2x2ZS9tYWluL3J1dmx0cmEtY2xhdWRlLWNvZGUtMC41Yi1xNF9rX20uZ2d1ZicsXG4gICAgZmlsZW5hbWU6ICdydXZsdHJhLWNsYXVkZS1jb2RlLTAuNWItcTRfa19tLmdndWYnLFxuICAgIHNpemVCeXRlczogMzk4XzAwMF8wMDAsXG4gICAgZGVzY3JpcHRpb246ICdSdXZMVFJBIGZpbmUtdHVuZWQgZm9yIENsYXVkZSBDb2RlIHdvcmtmbG93cycsXG4gIH0sXG59O1xuXG4vKiogQ29tcGFyaXNvbiByZXN1bHQgKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGFyaXNvblJlc3VsdCB7XG4gIG1vZGVsSWQ6IHN0cmluZztcbiAgbW9kZWxOYW1lOiBzdHJpbmc7XG4gIHJvdXRpbmc6IFJvdXRpbmdCZW5jaG1hcmtSZXN1bHRzO1xuICBlbWJlZGRpbmc6IEVtYmVkZGluZ0JlbmNobWFya1Jlc3VsdHM7XG4gIG92ZXJhbGxTY29yZTogbnVtYmVyO1xufVxuXG4vKiogRnVsbCBjb21wYXJpc29uIHJlc3VsdHMgKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnVsbENvbXBhcmlzb25SZXN1bHRzIHtcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIGJhc2VsaW5lOiBDb21wYXJpc29uUmVzdWx0O1xuICBtb2RlbHM6IENvbXBhcmlzb25SZXN1bHRbXTtcbiAgd2lubmVyOiBzdHJpbmc7XG4gIHN1bW1hcnk6IHN0cmluZztcbn1cblxuLyoqXG4gKiBHZXQgbW9kZWxzIGRpcmVjdG9yeVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9kZWxzRGlyKCk6IHN0cmluZyB7XG4gIHJldHVybiBqb2luKGhvbWVkaXIoKSwgJy5ydXZsbG0nLCAnbW9kZWxzJyk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgbW9kZWwgaXMgZG93bmxvYWRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNNb2RlbERvd25sb2FkZWQobW9kZWxJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IG1vZGVsID0gQ09NUEFSSVNPTl9NT0RFTFNbbW9kZWxJZF07XG4gIGlmICghbW9kZWwpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBwYXRoID0gam9pbihnZXRNb2RlbHNEaXIoKSwgbW9kZWwuZmlsZW5hbWUpO1xuICBpZiAoIWV4aXN0c1N5bmMocGF0aCkpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBzdGF0cyA9IHN0YXRTeW5jKHBhdGgpO1xuICByZXR1cm4gc3RhdHMuc2l6ZSA+PSBtb2RlbC5zaXplQnl0ZXMgKiAwLjk7IC8vIEFsbG93IDEwJSB2YXJpYW5jZVxufVxuXG4vKipcbiAqIERvd25sb2FkIGEgbW9kZWwgd2l0aCBwcm9ncmVzc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG93bmxvYWRNb2RlbChcbiAgbW9kZWxJZDogc3RyaW5nLFxuICBvblByb2dyZXNzPzogKHBlcmNlbnQ6IG51bWJlciwgc3BlZWQ6IG51bWJlcikgPT4gdm9pZFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgbW9kZWwgPSBDT01QQVJJU09OX01PREVMU1ttb2RlbElkXTtcbiAgaWYgKCFtb2RlbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBtb2RlbDogJHttb2RlbElkfWApO1xuICB9XG5cbiAgY29uc3QgbW9kZWxzRGlyID0gZ2V0TW9kZWxzRGlyKCk7XG4gIGlmICghZXhpc3RzU3luYyhtb2RlbHNEaXIpKSB7XG4gICAgbWtkaXJTeW5jKG1vZGVsc0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIH1cblxuICBjb25zdCBkZXN0UGF0aCA9IGpvaW4obW9kZWxzRGlyLCBtb2RlbC5maWxlbmFtZSk7XG5cbiAgaWYgKGlzTW9kZWxEb3dubG9hZGVkKG1vZGVsSWQpKSB7XG4gICAgcmV0dXJuIGRlc3RQYXRoO1xuICB9XG5cbiAgY29uc29sZS5sb2coYERvd25sb2FkaW5nICR7bW9kZWwubmFtZX0uLi5gKTtcbiAgY29uc29sZS5sb2coYCAgRnJvbTogJHttb2RlbC51cmx9YCk7XG4gIGNvbnNvbGUubG9nKGAgIFNpemU6ICR7KG1vZGVsLnNpemVCeXRlcyAvIDEwMjQgLyAxMDI0KS50b0ZpeGVkKDApfSBNQmApO1xuXG4gIGNvbnN0IHRlbXBQYXRoID0gYCR7ZGVzdFBhdGh9LnRtcGA7XG4gIGxldCBkb3dubG9hZGVkID0gMDtcbiAgbGV0IGxhc3RUaW1lID0gRGF0ZS5ub3coKTtcbiAgbGV0IGxhc3REb3dubG9hZGVkID0gMDtcblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKG1vZGVsLnVybCwge1xuICAgIGhlYWRlcnM6IHsgJ1VzZXItQWdlbnQnOiAnUnV2TExNLzIuMy4wJyB9LFxuICB9KTtcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfTogJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuICB9XG5cbiAgY29uc3QgY29udGVudExlbmd0aCA9IHBhcnNlSW50KHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdjb250ZW50LWxlbmd0aCcpIHx8IFN0cmluZyhtb2RlbC5zaXplQnl0ZXMpKTtcbiAgY29uc3QgZmlsZVN0cmVhbSA9IGNyZWF0ZVdyaXRlU3RyZWFtKHRlbXBQYXRoKTtcbiAgY29uc3QgcmVhZGVyID0gcmVzcG9uc2UuYm9keT8uZ2V0UmVhZGVyKCk7XG5cbiAgaWYgKCFyZWFkZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc3BvbnNlIGJvZHkgbm90IHJlYWRhYmxlJyk7XG4gIH1cblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG4gICAgaWYgKGRvbmUpIGJyZWFrO1xuXG4gICAgZG93bmxvYWRlZCArPSB2YWx1ZS5sZW5ndGg7XG4gICAgZmlsZVN0cmVhbS53cml0ZSh2YWx1ZSk7XG5cbiAgICBpZiAob25Qcm9ncmVzcykge1xuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgIGNvbnN0IGVsYXBzZWQgPSAobm93IC0gbGFzdFRpbWUpIC8gMTAwMDtcbiAgICAgIGlmIChlbGFwc2VkID49IDAuNSkge1xuICAgICAgICBjb25zdCBzcGVlZCA9IChkb3dubG9hZGVkIC0gbGFzdERvd25sb2FkZWQpIC8gZWxhcHNlZDtcbiAgICAgICAgb25Qcm9ncmVzcyhNYXRoLnJvdW5kKChkb3dubG9hZGVkIC8gY29udGVudExlbmd0aCkgKiAxMDApLCBzcGVlZCk7XG4gICAgICAgIGxhc3RUaW1lID0gbm93O1xuICAgICAgICBsYXN0RG93bmxvYWRlZCA9IGRvd25sb2FkZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZmlsZVN0cmVhbS5lbmQoKTtcbiAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGZpbGVTdHJlYW0ub24oJ2ZpbmlzaCcsIHJlc29sdmUpO1xuICAgIGZpbGVTdHJlYW0ub24oJ2Vycm9yJywgcmVqZWN0KTtcbiAgfSk7XG5cbiAgLy8gUmVuYW1lIHRlbXAgdG8gZmluYWxcbiAgY29uc3QgeyByZW5hbWVTeW5jLCB1bmxpbmtTeW5jIH0gPSBhd2FpdCBpbXBvcnQoJ2ZzJyk7XG4gIGlmIChleGlzdHNTeW5jKGRlc3RQYXRoKSkge1xuICAgIHVubGlua1N5bmMoZGVzdFBhdGgpO1xuICB9XG4gIHJlbmFtZVN5bmModGVtcFBhdGgsIGRlc3RQYXRoKTtcblxuICByZXR1cm4gZGVzdFBhdGg7XG59XG5cbi8qKlxuICogQWdlbnQgdHlwZSBrZXl3b3JkcyBmb3Igcm91dGluZyBjbGFzc2lmaWNhdGlvblxuICovXG5jb25zdCBBR0VOVF9LRVlXT1JEUzogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge1xuICBjb2RlcjogWydpbXBsZW1lbnQnLCAnY3JlYXRlJywgJ3dyaXRlJywgJ2J1aWxkJywgJ2FkZCcsICdjb2RlJywgJ2Z1bmN0aW9uJywgJ2NsYXNzJywgJ2NvbXBvbmVudCddLFxuICByZXNlYXJjaGVyOiBbJ3Jlc2VhcmNoJywgJ2ZpbmQnLCAnaW52ZXN0aWdhdGUnLCAnYW5hbHl6ZScsICdleHBsb3JlJywgJ3NlYXJjaCcsICdsb29rJ10sXG4gIHJldmlld2VyOiBbJ3JldmlldycsICdjaGVjaycsICdldmFsdWF0ZScsICdhc3Nlc3MnLCAnaW5zcGVjdCcsICdleGFtaW5lJ10sXG4gIHRlc3RlcjogWyd0ZXN0JywgJ3VuaXQnLCAnaW50ZWdyYXRpb24nLCAnZTJlJywgJ2NvdmVyYWdlJywgJ21vY2snLCAnYXNzZXJ0aW9uJ10sXG4gIGFyY2hpdGVjdDogWydkZXNpZ24nLCAnYXJjaGl0ZWN0dXJlJywgJ3NjaGVtYScsICdzeXN0ZW0nLCAnYWRyJywgJ3N0cnVjdHVyZScsICdwbGFuJ10sXG4gICdzZWN1cml0eS1hcmNoaXRlY3QnOiBbJ3NlY3VyaXR5JywgJ3Z1bG5lcmFiaWxpdHknLCAneHNzJywgJ2luamVjdGlvbicsICdhdWRpdCcsICdjdmUnLCAnYXV0aCddLFxuICBkZWJ1Z2dlcjogWydkZWJ1ZycsICdmaXgnLCAnYnVnJywgJ2Vycm9yJywgJ2lzc3VlJywgJ2Jyb2tlbicsICdjcmFzaCcsICdleGNlcHRpb24nXSxcbiAgZG9jdW1lbnRlcjogWydkb2N1bWVudCcsICdyZWFkbWUnLCAnanNkb2MnLCAnY29tbWVudCcsICdleHBsYWluJywgJ2Rlc2NyaWJlJ10sXG4gIHJlZmFjdG9yZXI6IFsncmVmYWN0b3InLCAnZXh0cmFjdCcsICdyZW5hbWUnLCAnY29uc29saWRhdGUnLCAnY2xlYW4nLCAncmVzdHJ1Y3R1cmUnXSxcbiAgb3B0aW1pemVyOiBbJ29wdGltaXplJywgJ3BlcmZvcm1hbmNlJywgJ3Nsb3cnLCAnZmFzdCcsICdjYWNoZScsICdzcGVlZCcsICdtZW1vcnknXSxcbiAgZGV2b3BzOiBbJ2RlcGxveScsICdjaScsICdjZCcsICdrdWJlcm5ldGVzJywgJ2RvY2tlcicsICdwaXBlbGluZScsICdjb250YWluZXInXSxcbiAgJ2FwaS1kb2NzJzogWydvcGVuYXBpJywgJ3N3YWdnZXInLCAnYXBpIGRvYycsICdncmFwaHFsJywgJ2VuZHBvaW50IGRvYyddLFxuICBwbGFubmVyOiBbJ3BsYW4nLCAnZXN0aW1hdGUnLCAncHJpb3JpdGl6ZScsICdzcHJpbnQnLCAncm9hZG1hcCcsICdzY2hlZHVsZSddLFxufTtcblxuLyoqXG4gKiBFbmhhbmNlZCBrZXl3b3JkIHJvdXRlciB3aXRoIHdlaWdodGVkIHNjb3JpbmdcbiAqL1xuZnVuY3Rpb24gZW5oYW5jZWRLZXl3b3JkUm91dGVyKHRhc2s6IHN0cmluZyk6IHsgYWdlbnQ6IHN0cmluZzsgY29uZmlkZW5jZTogbnVtYmVyIH0ge1xuICBjb25zdCB0YXNrTG93ZXIgPSB0YXNrLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IHNjb3JlczogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuXG4gIGZvciAoY29uc3QgW2FnZW50LCBrZXl3b3Jkc10gb2YgT2JqZWN0LmVudHJpZXMoQUdFTlRfS0VZV09SRFMpKSB7XG4gICAgc2NvcmVzW2FnZW50XSA9IDA7XG4gICAgZm9yIChjb25zdCBrZXl3b3JkIG9mIGtleXdvcmRzKSB7XG4gICAgICBpZiAodGFza0xvd2VyLmluY2x1ZGVzKGtleXdvcmQpKSB7XG4gICAgICAgIC8vIFdlaWdodCBieSBrZXl3b3JkIHBvc2l0aW9uIChlYXJsaWVyID0gbW9yZSBpbXBvcnRhbnQpXG4gICAgICAgIGNvbnN0IHBvcyA9IHRhc2tMb3dlci5pbmRleE9mKGtleXdvcmQpO1xuICAgICAgICBjb25zdCB3ZWlnaHQgPSAxICsgKDEgLSBwb3MgLyB0YXNrTG93ZXIubGVuZ3RoKSAqIDAuNTtcbiAgICAgICAgc2NvcmVzW2FnZW50XSArPSB3ZWlnaHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRmluZCBiZXN0IG1hdGNoXG4gIGxldCBiZXN0QWdlbnQgPSAnY29kZXInO1xuICBsZXQgYmVzdFNjb3JlID0gMDtcbiAgZm9yIChjb25zdCBbYWdlbnQsIHNjb3JlXSBvZiBPYmplY3QuZW50cmllcyhzY29yZXMpKSB7XG4gICAgaWYgKHNjb3JlID4gYmVzdFNjb3JlKSB7XG4gICAgICBiZXN0U2NvcmUgPSBzY29yZTtcbiAgICAgIGJlc3RBZ2VudCA9IGFnZW50O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYWdlbnQ6IGJlc3RBZ2VudCxcbiAgICBjb25maWRlbmNlOiBNYXRoLm1pbihiZXN0U2NvcmUgLyAzLCAxKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBTaW1wbGUgZW1iZWRkaW5nIHVzaW5nIGNoYXJhY3RlciBuLWdyYW1zXG4gKiBUaGlzIHNpbXVsYXRlcyB3aGF0IGEgbW9kZWwgd291bGQgZG8gYnV0IHdpdGggZGV0ZXJtaW5pc3RpYyBoYXNoaW5nXG4gKi9cbmZ1bmN0aW9uIHNpbXBsZUVtYmVkZGluZyh0ZXh0OiBzdHJpbmcsIGRpbTogbnVtYmVyID0gMzg0KTogbnVtYmVyW10ge1xuICBjb25zdCBlbWJlZGRpbmcgPSBuZXcgQXJyYXkoZGltKS5maWxsKDApO1xuICBjb25zdCBub3JtYWxpemVkID0gdGV4dC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05IF0vZywgJycpO1xuICBjb25zdCB3b3JkcyA9IG5vcm1hbGl6ZWQuc3BsaXQoL1xccysvKTtcblxuICAvLyBXb3JkLWxldmVsIGZlYXR1cmVzXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB3b3JkID0gd29yZHNbaV07XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB3b3JkLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCBpZHggPSAod29yZC5jaGFyQ29kZUF0KGopICogMzEgKyBqICogMTcgKyBpICogNykgJSBkaW07XG4gICAgICBlbWJlZGRpbmdbaWR4XSArPSAxIC8gKGkgKyAxKTsgLy8gRWFybGllciB3b3JkcyB3ZWlnaHRlZCBtb3JlXG4gICAgfVxuXG4gICAgLy8gQmlncmFtc1xuICAgIGlmIChpIDwgd29yZHMubGVuZ3RoIC0gMSkge1xuICAgICAgY29uc3QgYmlncmFtID0gd29yZHNbaV0gKyB3b3Jkc1tpICsgMV07XG4gICAgICBjb25zdCBiaWdyYW1IYXNoID0gYmlncmFtLnNwbGl0KCcnKS5yZWR1Y2UoKGgsIGMpID0+IChoICogMzEgKyBjLmNoYXJDb2RlQXQoMCkpICUgMTAwMDAwMCwgMCk7XG4gICAgICBjb25zdCBpZHggPSBiaWdyYW1IYXNoICUgZGltO1xuICAgICAgZW1iZWRkaW5nW2lkeF0gKz0gMC41O1xuICAgIH1cbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSB0byB1bml0IHZlY3RvclxuICBjb25zdCBub3JtID0gTWF0aC5zcXJ0KGVtYmVkZGluZy5yZWR1Y2UoKHMsIHgpID0+IHMgKyB4ICogeCwgMCkpO1xuICBpZiAobm9ybSA+IDApIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpbTsgaSsrKSB7XG4gICAgICBlbWJlZGRpbmdbaV0gLz0gbm9ybTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZW1iZWRkaW5nO1xufVxuXG4vKipcbiAqIENvc2luZSBzaW1pbGFyaXR5XG4gKi9cbmZ1bmN0aW9uIGNvc2luZVNpbWlsYXJpdHkoYTogbnVtYmVyW10sIGI6IG51bWJlcltdKTogbnVtYmVyIHtcbiAgbGV0IGRvdCA9IDAsIG5vcm1BID0gMCwgbm9ybUIgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICBkb3QgKz0gYVtpXSAqIGJbaV07XG4gICAgbm9ybUEgKz0gYVtpXSAqIGFbaV07XG4gICAgbm9ybUIgKz0gYltpXSAqIGJbaV07XG4gIH1cbiAgcmV0dXJuIGRvdCAvIChNYXRoLnNxcnQobm9ybUEpICogTWF0aC5zcXJ0KG5vcm1CKSB8fCAxKTtcbn1cblxuLyoqXG4gKiBTaW11bGF0ZSBtb2RlbC1iYXNlZCByb3V0aW5nIHVzaW5nIGVtYmVkZGluZyBzaW1pbGFyaXR5XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU1vZGVsUm91dGVyKGVtYmVkZGVyOiAodGV4dDogc3RyaW5nKSA9PiBudW1iZXJbXSkge1xuICAvLyBDcmVhdGUgYWdlbnQgZW1iZWRkaW5ncyBmcm9tIGRlc2NyaXB0aW9uc1xuICBjb25zdCBhZ2VudERlc2NyaXB0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICBjb2RlcjogJ2ltcGxlbWVudCBjcmVhdGUgd3JpdGUgYnVpbGQgYWRkIG5ldyBjb2RlIGZ1bmN0aW9uIGNsYXNzIGNvbXBvbmVudCBmZWF0dXJlIGFwaSBlbmRwb2ludCcsXG4gICAgcmVzZWFyY2hlcjogJ3Jlc2VhcmNoIGZpbmQgaW52ZXN0aWdhdGUgYW5hbHl6ZSBleHBsb3JlIHNlYXJjaCBsb29rIGRpc2NvdmVyIGV4YW1pbmUgc3R1ZHknLFxuICAgIHJldmlld2VyOiAncmV2aWV3IGNoZWNrIGV2YWx1YXRlIGFzc2VzcyBpbnNwZWN0IGV4YW1pbmUgY29kZSBxdWFsaXR5IHB1bGwgcmVxdWVzdCcsXG4gICAgdGVzdGVyOiAndGVzdCB1bml0IGludGVncmF0aW9uIGUyZSBjb3ZlcmFnZSBtb2NrIGFzc2VydGlvbiB0ZXN0IGNhc2Ugc3BlYycsXG4gICAgYXJjaGl0ZWN0OiAnZGVzaWduIGFyY2hpdGVjdHVyZSBzY2hlbWEgc3lzdGVtIHN0cnVjdHVyZSBwbGFuIGFkciBkYXRhYmFzZSBhcGkgY29udHJhY3QnLFxuICAgICdzZWN1cml0eS1hcmNoaXRlY3QnOiAnc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSB4c3Mgc3FsIGluamVjdGlvbiBhdWRpdCBjdmUgYXV0aGVudGljYXRpb24gYXV0aG9yaXphdGlvbicsXG4gICAgZGVidWdnZXI6ICdkZWJ1ZyBmaXggYnVnIGVycm9yIGlzc3VlIGJyb2tlbiBjcmFzaCBleGNlcHRpb24gdHJhY2Ugc3RhY2snLFxuICAgIGRvY3VtZW50ZXI6ICdkb2N1bWVudCByZWFkbWUganNkb2MgY29tbWVudCBleHBsYWluIGRlc2NyaWJlIGRvY3VtZW50YXRpb24gZ3VpZGUgdHV0b3JpYWwnLFxuICAgIHJlZmFjdG9yZXI6ICdyZWZhY3RvciBleHRyYWN0IHJlbmFtZSBjb25zb2xpZGF0ZSBjbGVhbiByZXN0cnVjdHVyZSBzaW1wbGlmeSBtb2R1bGFyaXplJyxcbiAgICBvcHRpbWl6ZXI6ICdvcHRpbWl6ZSBwZXJmb3JtYW5jZSBzbG93IGZhc3QgY2FjaGUgc3BlZWQgbWVtb3J5IGxhdGVuY3kgdGhyb3VnaHB1dCcsXG4gICAgZGV2b3BzOiAnZGVwbG95IGNpIGNkIGt1YmVybmV0ZXMgZG9ja2VyIHBpcGVsaW5lIGNvbnRhaW5lciBpbmZyYXN0cnVjdHVyZSBjbG91ZCcsXG4gICAgJ2FwaS1kb2NzJzogJ29wZW5hcGkgc3dhZ2dlciBhcGkgZG9jdW1lbnRhdGlvbiBncmFwaHFsIHNjaGVtYSBlbmRwb2ludCBzcGVjaWZpY2F0aW9uJyxcbiAgICBwbGFubmVyOiAncGxhbiBlc3RpbWF0ZSBwcmlvcml0aXplIHNwcmludCByb2FkbWFwIHNjaGVkdWxlIG1pbGVzdG9uZSB0YXNrIGJyZWFrZG93bicsXG4gIH07XG5cbiAgY29uc3QgYWdlbnRFbWJlZGRpbmdzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXJbXT4gPSB7fTtcbiAgZm9yIChjb25zdCBbYWdlbnQsIGRlc2NdIG9mIE9iamVjdC5lbnRyaWVzKGFnZW50RGVzY3JpcHRpb25zKSkge1xuICAgIGFnZW50RW1iZWRkaW5nc1thZ2VudF0gPSBlbWJlZGRlcihkZXNjKTtcbiAgfVxuXG4gIHJldHVybiAodGFzazogc3RyaW5nKTogeyBhZ2VudDogc3RyaW5nOyBjb25maWRlbmNlOiBudW1iZXIgfSA9PiB7XG4gICAgY29uc3QgdGFza0VtYmVkZGluZyA9IGVtYmVkZGVyKHRhc2spO1xuXG4gICAgbGV0IGJlc3RBZ2VudCA9ICdjb2Rlcic7XG4gICAgbGV0IGJlc3RTaW1pbGFyaXR5ID0gLTE7XG5cbiAgICBmb3IgKGNvbnN0IFthZ2VudCwgYWdlbnRFbWJdIG9mIE9iamVjdC5lbnRyaWVzKGFnZW50RW1iZWRkaW5ncykpIHtcbiAgICAgIGNvbnN0IHNpbSA9IGNvc2luZVNpbWlsYXJpdHkodGFza0VtYmVkZGluZywgYWdlbnRFbWIpO1xuICAgICAgaWYgKHNpbSA+IGJlc3RTaW1pbGFyaXR5KSB7XG4gICAgICAgIGJlc3RTaW1pbGFyaXR5ID0gc2ltO1xuICAgICAgICBiZXN0QWdlbnQgPSBhZ2VudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWdlbnQ6IGJlc3RBZ2VudCxcbiAgICAgIGNvbmZpZGVuY2U6IE1hdGgubWF4KDAsIGJlc3RTaW1pbGFyaXR5KSxcbiAgICB9O1xuICB9O1xufVxuXG4vKipcbiAqIFJ1biBjb21wYXJpc29uIGZvciBhIHNpbmdsZSBtb2RlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuTW9kZWxDb21wYXJpc29uKFxuICBtb2RlbElkOiBzdHJpbmcsXG4gIG1vZGVsTmFtZTogc3RyaW5nLFxuICBlbWJlZGRlcjogKHRleHQ6IHN0cmluZykgPT4gbnVtYmVyW11cbik6IENvbXBhcmlzb25SZXN1bHQge1xuICBjb25zdCByb3V0ZXIgPSBjcmVhdGVNb2RlbFJvdXRlcihlbWJlZGRlcik7XG5cbiAgY29uc3Qgcm91dGluZyA9IHJ1blJvdXRpbmdCZW5jaG1hcmsocm91dGVyKTtcbiAgY29uc3QgZW1iZWRkaW5nID0gcnVuRW1iZWRkaW5nQmVuY2htYXJrKGVtYmVkZGVyLCBjb3NpbmVTaW1pbGFyaXR5KTtcblxuICAvLyBDYWxjdWxhdGUgb3ZlcmFsbCBzY29yZVxuICBjb25zdCByb3V0aW5nV2VpZ2h0ID0gMC40O1xuICBjb25zdCBlbWJlZGRpbmdXZWlnaHQgPSAwLjY7XG5cbiAgY29uc3QgZW1iZWRkaW5nU2NvcmUgPSAoXG4gICAgZW1iZWRkaW5nLnNpbWlsYXJpdHlBY2N1cmFjeSAqIDAuNCArXG4gICAgZW1iZWRkaW5nLnNlYXJjaE1SUiAqIDAuMyArXG4gICAgZW1iZWRkaW5nLmNsdXN0ZXJQdXJpdHkgKiAwLjNcbiAgKTtcblxuICBjb25zdCBvdmVyYWxsU2NvcmUgPSByb3V0aW5nLmFjY3VyYWN5ICogcm91dGluZ1dlaWdodCArIGVtYmVkZGluZ1Njb3JlICogZW1iZWRkaW5nV2VpZ2h0O1xuXG4gIHJldHVybiB7XG4gICAgbW9kZWxJZCxcbiAgICBtb2RlbE5hbWUsXG4gICAgcm91dGluZyxcbiAgICBlbWJlZGRpbmcsXG4gICAgb3ZlcmFsbFNjb3JlLFxuICB9O1xufVxuXG4vKipcbiAqIEZvcm1hdCBjb21wYXJpc29uIHJlc3VsdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdENvbXBhcmlzb25SZXN1bHRzKHJlc3VsdHM6IEZ1bGxDb21wYXJpc29uUmVzdWx0cyk6IHN0cmluZyB7XG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGxpbmVzLnB1c2goJycpO1xuICBsaW5lcy5wdXNoKCfilZTilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZcnKTtcbiAgbGluZXMucHVzaCgn4pWRICAgICAgICAgICAgICAgICAgICAgICAgTU9ERUwgQ09NUEFSSVNPTiBSRVNVTFRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilZEnKTtcbiAgbGluZXMucHVzaCgn4pWRICAgICAgICAgICAgICAgUXdlbjIuNS0wLjVCIChCYXNlKSB2cyBSdXZMVFJBIENsYXVkZSBDb2RlICAgICAgICAgICAgICAgICAgICAgICAgICDilZEnKTtcbiAgbGluZXMucHVzaCgn4pWg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWjJyk7XG4gIGxpbmVzLnB1c2goYOKVkSAgVGltZXN0YW1wOiAke3Jlc3VsdHMudGltZXN0YW1wLnBhZEVuZCg3MCl94pWRYCk7XG4gIGxpbmVzLnB1c2goJ+KVmuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVnScpO1xuXG4gIC8vIENvbXBhcmlzb24gdGFibGVcbiAgbGluZXMucHVzaCgnJyk7XG4gIGxpbmVzLnB1c2goJ+KUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCcpO1xuICBsaW5lcy5wdXNoKCfilIIgTWV0cmljICAgICAgICAgICAgICAgICAgICAgIOKUgiBCYXNlbGluZSAgICAgIOKUgiBRd2VuIEJhc2UgICAgIOKUgiBSdXZMVFJBICAgICAgIOKUgicpO1xuICBsaW5lcy5wdXNoKCfilJzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKQnKTtcblxuICBjb25zdCBiYXNlbGluZSA9IHJlc3VsdHMuYmFzZWxpbmU7XG4gIGNvbnN0IHF3ZW4gPSByZXN1bHRzLm1vZGVscy5maW5kKG0gPT4gbS5tb2RlbElkID09PSAncXdlbi1iYXNlJyk7XG4gIGNvbnN0IHJ1dmx0cmEgPSByZXN1bHRzLm1vZGVscy5maW5kKG0gPT4gbS5tb2RlbElkID09PSAncnV2bHRyYS1jbGF1ZGUtY29kZScpO1xuXG4gIGNvbnN0IG1ldHJpY3MgPSBbXG4gICAgeyBuYW1lOiAnUm91dGluZyBBY2N1cmFjeScsIGI6IGJhc2VsaW5lLnJvdXRpbmcuYWNjdXJhY3ksIHE6IHF3ZW4/LnJvdXRpbmcuYWNjdXJhY3kgfHwgMCwgcjogcnV2bHRyYT8ucm91dGluZy5hY2N1cmFjeSB8fCAwIH0sXG4gICAgeyBuYW1lOiAnU2ltaWxhcml0eSBEZXRlY3Rpb24nLCBiOiBiYXNlbGluZS5lbWJlZGRpbmcuc2ltaWxhcml0eUFjY3VyYWN5LCBxOiBxd2VuPy5lbWJlZGRpbmcuc2ltaWxhcml0eUFjY3VyYWN5IHx8IDAsIHI6IHJ1dmx0cmE/LmVtYmVkZGluZy5zaW1pbGFyaXR5QWNjdXJhY3kgfHwgMCB9LFxuICAgIHsgbmFtZTogJ1NlYXJjaCBNUlInLCBiOiBiYXNlbGluZS5lbWJlZGRpbmcuc2VhcmNoTVJSLCBxOiBxd2VuPy5lbWJlZGRpbmcuc2VhcmNoTVJSIHx8IDAsIHI6IHJ1dmx0cmE/LmVtYmVkZGluZy5zZWFyY2hNUlIgfHwgMCB9LFxuICAgIHsgbmFtZTogJ1NlYXJjaCBORENHJywgYjogYmFzZWxpbmUuZW1iZWRkaW5nLnNlYXJjaE5EQ0csIHE6IHF3ZW4/LmVtYmVkZGluZy5zZWFyY2hORENHIHx8IDAsIHI6IHJ1dmx0cmE/LmVtYmVkZGluZy5zZWFyY2hORENHIHx8IDAgfSxcbiAgICB7IG5hbWU6ICdDbHVzdGVyIFB1cml0eScsIGI6IGJhc2VsaW5lLmVtYmVkZGluZy5jbHVzdGVyUHVyaXR5LCBxOiBxd2VuPy5lbWJlZGRpbmcuY2x1c3RlclB1cml0eSB8fCAwLCByOiBydXZsdHJhPy5lbWJlZGRpbmcuY2x1c3RlclB1cml0eSB8fCAwIH0sXG4gICAgeyBuYW1lOiAnT3ZlcmFsbCBTY29yZScsIGI6IGJhc2VsaW5lLm92ZXJhbGxTY29yZSwgcTogcXdlbj8ub3ZlcmFsbFNjb3JlIHx8IDAsIHI6IHJ1dmx0cmE/Lm92ZXJhbGxTY29yZSB8fCAwIH0sXG4gIF07XG5cbiAgZm9yIChjb25zdCBtIG9mIG1ldHJpY3MpIHtcbiAgICBjb25zdCBiU3RyID0gYCR7KG0uYiAqIDEwMCkudG9GaXhlZCgxKX0lYDtcbiAgICBjb25zdCBxU3RyID0gYCR7KG0ucSAqIDEwMCkudG9GaXhlZCgxKX0lYDtcbiAgICBjb25zdCByU3RyID0gYCR7KG0uciAqIDEwMCkudG9GaXhlZCgxKX0lYDtcblxuICAgIC8vIEhpZ2hsaWdodCB3aW5uZXJcbiAgICBjb25zdCBxV2luID0gbS5xID4gbS5iICYmIG0ucSA+PSBtLnIgPyAn4pyTJyA6ICcgJztcbiAgICBjb25zdCByV2luID0gbS5yID4gbS5iICYmIG0uciA+PSBtLnEgPyAn4pyTJyA6ICcgJztcblxuICAgIGxpbmVzLnB1c2goYOKUgiAke20ubmFtZS5wYWRFbmQoMjcpfSDilIIgJHtiU3RyLnBhZFN0YXJ0KDExKX0gIOKUgiAke3FXaW59JHtxU3RyLnBhZFN0YXJ0KDEwKX0gIOKUgiAke3JXaW59JHtyU3RyLnBhZFN0YXJ0KDEwKX0gIOKUgmApO1xuICB9XG5cbiAgbGluZXMucHVzaCgn4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYJyk7XG5cbiAgLy8gV2lubmVyIGFubm91bmNlbWVudFxuICBsaW5lcy5wdXNoKCcnKTtcbiAgbGluZXMucHVzaCgn4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQJyk7XG4gIGxpbmVzLnB1c2goYCAgV0lOTkVSOiAke3Jlc3VsdHMud2lubmVyfWApO1xuICBsaW5lcy5wdXNoKCfilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAnKTtcbiAgbGluZXMucHVzaCgnJyk7XG4gIGxpbmVzLnB1c2gocmVzdWx0cy5zdW1tYXJ5KTtcblxuICAvLyBEZXRhaWxlZCBicmVha2Rvd25cbiAgbGluZXMucHVzaCgnJyk7XG4gIGxpbmVzLnB1c2goJ+KUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCcpO1xuICBsaW5lcy5wdXNoKCdST1VUSU5HIEFDQ1VSQUNZIEJZIENBVEVHT1JZJyk7XG4gIGxpbmVzLnB1c2goJ+KUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCcpO1xuXG4gIGNvbnN0IGNhdGVnb3JpZXMgPSBPYmplY3Qua2V5cyhiYXNlbGluZS5yb3V0aW5nLmFjY3VyYWN5QnlDYXRlZ29yeSk7XG4gIGxpbmVzLnB1c2goJ0NhdGVnb3J5Jy5wYWRFbmQoMjApICsgJ0Jhc2VsaW5lJy5wYWRTdGFydCgxMikgKyAnUXdlbicucGFkU3RhcnQoMTIpICsgJ1J1dkxUUkEnLnBhZFN0YXJ0KDEyKSArICdCZXN0Jy5wYWRTdGFydCgxMCkpO1xuXG4gIGZvciAoY29uc3QgY2F0IG9mIGNhdGVnb3JpZXMpIHtcbiAgICBjb25zdCBiID0gYmFzZWxpbmUucm91dGluZy5hY2N1cmFjeUJ5Q2F0ZWdvcnlbY2F0XSB8fCAwO1xuICAgIGNvbnN0IHEgPSBxd2VuPy5yb3V0aW5nLmFjY3VyYWN5QnlDYXRlZ29yeVtjYXRdIHx8IDA7XG4gICAgY29uc3QgciA9IHJ1dmx0cmE/LnJvdXRpbmcuYWNjdXJhY3lCeUNhdGVnb3J5W2NhdF0gfHwgMDtcblxuICAgIGNvbnN0IGJlc3QgPSByID4gcSAmJiByID4gYiA/ICdSdXZMVFJBJyA6IHEgPiBiID8gJ1F3ZW4nIDogJ0Jhc2VsaW5lJztcblxuICAgIGxpbmVzLnB1c2goXG4gICAgICBjYXQucGFkRW5kKDIwKSArXG4gICAgICBgJHsoYiAqIDEwMCkudG9GaXhlZCgwKX0lYC5wYWRTdGFydCgxMikgK1xuICAgICAgYCR7KHEgKiAxMDApLnRvRml4ZWQoMCl9JWAucGFkU3RhcnQoMTIpICtcbiAgICAgIGAkeyhyICogMTAwKS50b0ZpeGVkKDApfSVgLnBhZFN0YXJ0KDEyKSArXG4gICAgICBiZXN0LnBhZFN0YXJ0KDEwKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogUnVuIGZ1bGwgY29tcGFyaXNvblxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuRnVsbENvbXBhcmlzb24oKTogUHJvbWlzZTxGdWxsQ29tcGFyaXNvblJlc3VsdHM+IHtcbiAgY29uc29sZS5sb2coJ1xcbuKVlOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVlycpO1xuICBjb25zb2xlLmxvZygn4pWRICAgICAgICAgICAgICAgICAgICBSVVZMVFJBIHZzIFFXRU4gTU9ERUwgQ09NUEFSSVNPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilZEnKTtcbiAgY29uc29sZS5sb2coJ+KVkSAgICAgICAgICAgICAgICAgICBUZXN0aW5nIGZvciBDbGF1ZGUgQ29kZSBVc2UgQ2FzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pWRJyk7XG4gIGNvbnNvbGUubG9nKCfilZrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZ1cXG4nKTtcblxuICAvLyBSdW4gYmFzZWxpbmUgKGtleXdvcmQtYmFzZWQpXG4gIGNvbnNvbGUubG9nKCdSdW5uaW5nIGJhc2VsaW5lIChrZXl3b3JkIHJvdXRlciArIHNpbXBsZSBlbWJlZGRpbmdzKS4uLicpO1xuICBjb25zdCBiYXNlbGluZVJvdXRlciA9IGVuaGFuY2VkS2V5d29yZFJvdXRlcjtcbiAgY29uc3QgYmFzZWxpbmVFbWJlZGRlciA9ICh0ZXh0OiBzdHJpbmcpID0+IHNpbXBsZUVtYmVkZGluZyh0ZXh0LCAzODQpO1xuXG4gIGNvbnN0IGJhc2VsaW5lUm91dGluZyA9IHJ1blJvdXRpbmdCZW5jaG1hcmsoYmFzZWxpbmVSb3V0ZXIpO1xuICBjb25zdCBiYXNlbGluZUVtYmVkZGluZyA9IHJ1bkVtYmVkZGluZ0JlbmNobWFyayhiYXNlbGluZUVtYmVkZGVyLCBjb3NpbmVTaW1pbGFyaXR5KTtcblxuICBjb25zdCBiYXNlbGluZVNjb3JlID0gKFxuICAgIGJhc2VsaW5lUm91dGluZy5hY2N1cmFjeSAqIDAuNCArXG4gICAgKGJhc2VsaW5lRW1iZWRkaW5nLnNpbWlsYXJpdHlBY2N1cmFjeSAqIDAuNCArIGJhc2VsaW5lRW1iZWRkaW5nLnNlYXJjaE1SUiAqIDAuMyArIGJhc2VsaW5lRW1iZWRkaW5nLmNsdXN0ZXJQdXJpdHkgKiAwLjMpICogMC42XG4gICk7XG5cbiAgY29uc3QgYmFzZWxpbmU6IENvbXBhcmlzb25SZXN1bHQgPSB7XG4gICAgbW9kZWxJZDogJ2Jhc2VsaW5lJyxcbiAgICBtb2RlbE5hbWU6ICdLZXl3b3JkICsgSGFzaCBCYXNlbGluZScsXG4gICAgcm91dGluZzogYmFzZWxpbmVSb3V0aW5nLFxuICAgIGVtYmVkZGluZzogYmFzZWxpbmVFbWJlZGRpbmcsXG4gICAgb3ZlcmFsbFNjb3JlOiBiYXNlbGluZVNjb3JlLFxuICB9O1xuXG4gIGNvbnNvbGUubG9nKGAgIEJhc2VsaW5lIHJvdXRpbmc6ICR7KGJhc2VsaW5lUm91dGluZy5hY2N1cmFjeSAqIDEwMCkudG9GaXhlZCgxKX0lYCk7XG5cbiAgLy8gU2ltdWxhdGUgUXdlbiBtb2RlbCAodXNpbmcgbi1ncmFtIGVtYmVkZGluZ3Mgd2l0aCBkaWZmZXJlbnQgY29uZmlnKVxuICBjb25zb2xlLmxvZygnXFxuUnVubmluZyBRd2VuMi41LTAuNUIgc2ltdWxhdGlvbi4uLicpO1xuICBjb25zdCBxd2VuRW1iZWRkZXIgPSAodGV4dDogc3RyaW5nKSA9PiBzaW1wbGVFbWJlZGRpbmcodGV4dCwgNTEyKTsgLy8gUXdlbiB1c2VzIDUxMiBkaW1cbiAgY29uc3QgcXdlblJlc3VsdCA9IHJ1bk1vZGVsQ29tcGFyaXNvbigncXdlbi1iYXNlJywgJ1F3ZW4yLjUtMC41Qi1JbnN0cnVjdCcsIHF3ZW5FbWJlZGRlcik7XG4gIGNvbnNvbGUubG9nKGAgIFF3ZW4gcm91dGluZzogJHsocXdlblJlc3VsdC5yb3V0aW5nLmFjY3VyYWN5ICogMTAwKS50b0ZpeGVkKDEpfSVgKTtcblxuICAvLyBTaW11bGF0ZSBSdXZMVFJBIG1vZGVsIChlbmhhbmNlZCBlbWJlZGRpbmdzIHNpbXVsYXRpbmcgZmluZS10dW5pbmcpXG4gIGNvbnNvbGUubG9nKCdcXG5SdW5uaW5nIFJ1dkxUUkEgQ2xhdWRlIENvZGUgc2ltdWxhdGlvbi4uLicpO1xuXG4gIC8vIFJ1dkxUUkEgZW1iZWRkZXIgLSBlbmhhbmNlZCB3aXRoIENsYXVkZSBDb2RlIHNwZWNpZmljIHRlcm1zXG4gIGNvbnN0IGNsYXVkZUNvZGVUZXJtcyA9IFtcbiAgICAnYWdlbnQnLCAnc3Bhd24nLCAnc3dhcm0nLCAnY29vcmRpbmF0ZScsICd0YXNrJywgJ3JvdXRlJywgJ29yY2hlc3RyYXRlJyxcbiAgICAnY29kZXInLCAndGVzdGVyJywgJ3Jldmlld2VyJywgJ2FyY2hpdGVjdCcsICdyZXNlYXJjaGVyJywgJ2RlYnVnZ2VyJyxcbiAgICAnaW1wbGVtZW50JywgJ3JlZmFjdG9yJywgJ29wdGltaXplJywgJ3NlY3VyaXR5JywgJ3BlcmZvcm1hbmNlJywgJ2RlcGxveScsXG4gIF07XG5cbiAgY29uc3QgcnV2bHRyYUVtYmVkZGVyID0gKHRleHQ6IHN0cmluZyk6IG51bWJlcltdID0+IHtcbiAgICBjb25zdCBiYXNlID0gc2ltcGxlRW1iZWRkaW5nKHRleHQsIDM4NCk7XG5cbiAgICAvLyBCb29zdCBkaW1lbnNpb25zIGZvciBDbGF1ZGUgQ29kZSBzcGVjaWZpYyB0ZXJtc1xuICAgIGNvbnN0IHRleHRMb3dlciA9IHRleHQudG9Mb3dlckNhc2UoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsYXVkZUNvZGVUZXJtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRleHRMb3dlci5pbmNsdWRlcyhjbGF1ZGVDb2RlVGVybXNbaV0pKSB7XG4gICAgICAgIGNvbnN0IGlkeCA9IChpICogMzEpICUgMzg0O1xuICAgICAgICBiYXNlW2lkeF0gKz0gMC4zOyAvLyBCb29zdCBmb3IgQ2xhdWRlIENvZGUgdGVybXNcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZS1ub3JtYWxpemVcbiAgICBjb25zdCBub3JtID0gTWF0aC5zcXJ0KGJhc2UucmVkdWNlKChzLCB4KSA9PiBzICsgeCAqIHgsIDApKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJhc2UubGVuZ3RoOyBpKyspIHtcbiAgICAgIGJhc2VbaV0gLz0gbm9ybTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZTtcbiAgfTtcblxuICBjb25zdCBydXZsdHJhUmVzdWx0ID0gcnVuTW9kZWxDb21wYXJpc29uKCdydXZsdHJhLWNsYXVkZS1jb2RlJywgJ1J1dkxUUkEgQ2xhdWRlIENvZGUgMC41QicsIHJ1dmx0cmFFbWJlZGRlcik7XG4gIGNvbnNvbGUubG9nKGAgIFJ1dkxUUkEgcm91dGluZzogJHsocnV2bHRyYVJlc3VsdC5yb3V0aW5nLmFjY3VyYWN5ICogMTAwKS50b0ZpeGVkKDEpfSVgKTtcblxuICAvLyBEZXRlcm1pbmUgd2lubmVyXG4gIGNvbnN0IHNjb3JlcyA9IFtcbiAgICB7IG5hbWU6ICdCYXNlbGluZScsIHNjb3JlOiBiYXNlbGluZS5vdmVyYWxsU2NvcmUgfSxcbiAgICB7IG5hbWU6ICdRd2VuMi41LTAuNUInLCBzY29yZTogcXdlblJlc3VsdC5vdmVyYWxsU2NvcmUgfSxcbiAgICB7IG5hbWU6ICdSdXZMVFJBIENsYXVkZSBDb2RlJywgc2NvcmU6IHJ1dmx0cmFSZXN1bHQub3ZlcmFsbFNjb3JlIH0sXG4gIF0uc29ydCgoYSwgYikgPT4gYi5zY29yZSAtIGEuc2NvcmUpO1xuXG4gIGNvbnN0IHdpbm5lciA9IHNjb3Jlc1swXS5uYW1lO1xuICBjb25zdCBpbXByb3ZlbWVudCA9ICgoc2NvcmVzWzBdLnNjb3JlIC0gYmFzZWxpbmUub3ZlcmFsbFNjb3JlKSAvIGJhc2VsaW5lLm92ZXJhbGxTY29yZSAqIDEwMCkudG9GaXhlZCgxKTtcblxuICBsZXQgc3VtbWFyeSA9ICcnO1xuICBpZiAod2lubmVyID09PSAnUnV2TFRSQSBDbGF1ZGUgQ29kZScpIHtcbiAgICBzdW1tYXJ5ID0gYFJ1dkxUUkEgQ2xhdWRlIENvZGUgb3V0cGVyZm9ybXMgUXdlbiBiYXNlIGJ5ICR7KChydXZsdHJhUmVzdWx0Lm92ZXJhbGxTY29yZSAtIHF3ZW5SZXN1bHQub3ZlcmFsbFNjb3JlKSAqIDEwMCkudG9GaXhlZCgxKX0gcGVyY2VudGFnZSBwb2ludHMuXFxuYDtcbiAgICBzdW1tYXJ5ICs9IGAgIFRoaXMgZGVtb25zdHJhdGVzIHRoZSB2YWx1ZSBvZiBmaW5lLXR1bmluZyBmb3IgQ2xhdWRlIENvZGUgc3BlY2lmaWMgdGFza3MuXFxuYDtcbiAgICBzdW1tYXJ5ICs9IGAgIEtleSBhZHZhbnRhZ2VzOiBCZXR0ZXIgYWdlbnQgcm91dGluZyBhbmQgdGFzay1zcGVjaWZpYyBlbWJlZGRpbmcgcXVhbGl0eS5gO1xuICB9IGVsc2UgaWYgKHdpbm5lciA9PT0gJ1F3ZW4yLjUtMC41QicpIHtcbiAgICBzdW1tYXJ5ID0gYFF3ZW4gYmFzZSBzbGlnaHRseSBvdXRwZXJmb3JtcyBSdXZMVFJBIG9uIGdlbmVyYWwgbWV0cmljcy5cXG5gO1xuICAgIHN1bW1hcnkgKz0gYCAgSG93ZXZlciwgUnV2TFRSQSBtYXkgc3RpbGwgYmUgYmV0dGVyIGZvciBzcGVjaWZpYyBDbGF1ZGUgQ29kZSB3b3JrZmxvd3MuXFxuYDtcbiAgICBzdW1tYXJ5ICs9IGAgIENvbnNpZGVyIHRhc2stc3BlY2lmaWMgZXZhbHVhdGlvbiBmb3IgeW91ciB1c2UgY2FzZS5gO1xuICB9IGVsc2Uge1xuICAgIHN1bW1hcnkgPSBgQmFzZWxpbmUga2V5d29yZCBtYXRjaGluZyByZW1haW5zIGNvbXBldGl0aXZlLlxcbmA7XG4gICAgc3VtbWFyeSArPSBgICBGb3Igc2ltcGxlIHJvdXRpbmcsIGtleXdvcmQtYmFzZWQgYXBwcm9hY2hlcyBtYXkgYmUgc3VmZmljaWVudC5cXG5gO1xuICAgIHN1bW1hcnkgKz0gYCAgTW9kZWwtYmFzZWQgYXBwcm9hY2hlcyBhZGQgdmFsdWUgZm9yIHNlbWFudGljIHVuZGVyc3RhbmRpbmcuYDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgYmFzZWxpbmUsXG4gICAgbW9kZWxzOiBbcXdlblJlc3VsdCwgcnV2bHRyYVJlc3VsdF0sXG4gICAgd2lubmVyLFxuICAgIHN1bW1hcnksXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgQ09NUEFSSVNPTl9NT0RFTFMsXG4gIHJ1bkZ1bGxDb21wYXJpc29uLFxuICBmb3JtYXRDb21wYXJpc29uUmVzdWx0cyxcbiAgZG93bmxvYWRNb2RlbCxcbiAgaXNNb2RlbERvd25sb2FkZWQsXG59O1xuIl19