cdktn 0.25.0-pre.2 → 0.25.0-pre.21

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 (86) hide show
  1. package/.jsii +927 -107
  2. package/lib/annotations.js +4 -4
  3. package/lib/app.js +54 -5
  4. package/lib/aspect.js +3 -4
  5. package/lib/asset-hash.d.ts +75 -0
  6. package/lib/asset-hash.js +129 -0
  7. package/lib/assets.d.ts +168 -0
  8. package/lib/assets.js +128 -0
  9. package/lib/backends/azurerm-backend.js +4 -6
  10. package/lib/backends/cloud-backend.js +10 -10
  11. package/lib/backends/consul-backend.js +4 -6
  12. package/lib/backends/cos-backend.js +4 -6
  13. package/lib/backends/gcs-backend.js +4 -6
  14. package/lib/backends/http-backend.js +4 -6
  15. package/lib/backends/local-backend.js +38 -7
  16. package/lib/backends/oss-backend.js +4 -6
  17. package/lib/backends/pg-backend.js +4 -6
  18. package/lib/backends/remote-backend.js +8 -10
  19. package/lib/backends/s3-backend.js +4 -6
  20. package/lib/backends/swift-backend.js +4 -6
  21. package/lib/complex-computed-list.js +114 -65
  22. package/lib/errors.d.ts +6 -0
  23. package/lib/errors.js +24 -3
  24. package/lib/functions/provider-function.js +2 -4
  25. package/lib/functions/terraform-functions.generated.js +2 -4
  26. package/lib/ignore-strategy.d.ts +82 -0
  27. package/lib/ignore-strategy.js +29 -0
  28. package/lib/importable-resource.js +3 -4
  29. package/lib/index.d.ts +3 -0
  30. package/lib/index.js +27 -2
  31. package/lib/manifest.js +56 -14
  32. package/lib/private/fs.d.ts +74 -2
  33. package/lib/private/fs.js +129 -17
  34. package/lib/private/unique.js +35 -2
  35. package/lib/resource.js +3 -4
  36. package/lib/synthesize/synthesizer.js +43 -4
  37. package/lib/terraform-asset.d.ts +33 -2
  38. package/lib/terraform-asset.js +118 -34
  39. package/lib/terraform-backend.js +3 -4
  40. package/lib/terraform-count.js +3 -4
  41. package/lib/terraform-data-resource.js +12 -10
  42. package/lib/terraform-data-source.js +10 -4
  43. package/lib/terraform-dynamic-block.js +5 -2
  44. package/lib/terraform-dynamic-expression.js +4 -1
  45. package/lib/terraform-element.js +34 -6
  46. package/lib/terraform-ephemeral-resource.js +10 -4
  47. package/lib/terraform-functions.js +2 -4
  48. package/lib/terraform-hcl-module.js +3 -4
  49. package/lib/terraform-iterator.js +11 -12
  50. package/lib/terraform-local.js +3 -4
  51. package/lib/terraform-module-asset.js +45 -5
  52. package/lib/terraform-module.js +8 -4
  53. package/lib/terraform-operators.js +2 -4
  54. package/lib/terraform-output.js +7 -4
  55. package/lib/terraform-provider.js +5 -4
  56. package/lib/terraform-provisioner.js +2 -4
  57. package/lib/terraform-remote-state.js +5 -5
  58. package/lib/terraform-resource-targets.js +3 -7
  59. package/lib/terraform-resource.js +16 -5
  60. package/lib/terraform-stack.js +38 -38
  61. package/lib/terraform-variable.js +25 -22
  62. package/lib/testing/index.js +42 -8
  63. package/lib/testing/matchers.js +39 -6
  64. package/lib/tfExpression.js +25 -8
  65. package/lib/tokens/lazy.js +11 -7
  66. package/lib/tokens/private/dependency.js +2 -2
  67. package/lib/tokens/private/encoding.js +6 -1
  68. package/lib/tokens/private/intrinsic.js +6 -1
  69. package/lib/tokens/private/resolve.js +2 -5
  70. package/lib/tokens/private/token-map.js +4 -6
  71. package/lib/tokens/private/uniqueid.js +35 -2
  72. package/lib/tokens/resolvable.js +4 -6
  73. package/lib/tokens/string-fragments.js +6 -10
  74. package/lib/tokens/token.js +15 -18
  75. package/lib/upgrade-id-aspect.js +37 -6
  76. package/lib/validations/target-versions.js +39 -2
  77. package/lib/validations/validate-binary-version.js +39 -2
  78. package/lib/validations/validate-function-version-support.js +2 -1
  79. package/lib/validations/validate-provider-function-target-support.js +2 -1
  80. package/lib/validations/validate-provider-presence.js +10 -9
  81. package/lib/validations/validate-terraform-version.js +3 -1
  82. package/package.json +5 -5
  83. package/scripts/pack.mjs +57 -15
  84. package/lib/tsconfig.tsbuildinfo +0 -1
  85. package/tsconfig.json +0 -40
  86. package/tsconfig.test.json +0 -12
package/lib/private/fs.js CHANGED
@@ -1,14 +1,48 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.copySync = copySync;
4
37
  exports.archiveSync = archiveSync;
5
38
  exports.hashPath = hashPath;
39
+ exports.excludeMatcher = excludeMatcher;
6
40
  exports.findFileAboveCwd = findFileAboveCwd;
7
41
  // Copyright (c) HashiCorp, Inc
8
42
  // SPDX-License-Identifier: MPL-2.0
9
- const fs = require("fs");
10
- const path = require("path");
11
- const crypto = require("crypto");
43
+ const fs = __importStar(require("fs"));
44
+ const path = __importStar(require("path"));
45
+ const crypto = __importStar(require("crypto"));
12
46
  const fflate_1 = require("fflate");
13
47
  const errors_1 = require("../errors");
14
48
  const HASH_LEN = 32;
@@ -34,17 +68,28 @@ function zipAttrs(mode) {
34
68
  // Full implementation at https://github.com/jprichardson/node-fs-extra/blob/master/lib/copy/copy-sync.js
35
69
  /**
36
70
  * Copy a file or directory. The directory can have contents and subfolders.
71
+ * Symlinks are recreated as symlinks rather than dereferenced, which keeps the
72
+ * copy consistent with {@link hashPath} (it hashes links by their target) and
73
+ * makes dangling links and link cycles harmless.
37
74
  * @param src - source path
38
75
  * @param dest - destination path
76
+ * @param options - copy behaviour, see {@link CopySyncOptions}
39
77
  */
40
- function copySync(src, dest) {
78
+ function copySync(src, dest, options = {}) {
41
79
  /**
42
80
  * Copies file if present otherwise walks subfolder.
43
81
  * @param p - path relative to src/dest
82
+ * @param relPath - `/`-separated path relative to the copy root
44
83
  */
45
- function copyItem(p) {
84
+ function copyItem(p, relPath) {
46
85
  const sourcePath = path.resolve(src, p);
47
86
  const stat = fs.lstatSync(sourcePath);
87
+ const excluded = !!options.shouldExclude?.(relPath, stat.isDirectory());
88
+ // Skip, unless it is an excluded directory being descended into.
89
+ if (excluded &&
90
+ !(stat.isDirectory() && options.descendIntoExcludedDirectories)) {
91
+ return;
92
+ }
48
93
  if (stat.isSymbolicLink()) {
49
94
  fs.symlinkSync(fs.readlinkSync(sourcePath), path.resolve(dest, p));
50
95
  }
@@ -52,26 +97,30 @@ function copySync(src, dest) {
52
97
  fs.copyFileSync(sourcePath, path.resolve(dest, p));
53
98
  }
54
99
  else if (stat.isDirectory()) {
55
- walkSubfolder(p);
100
+ walkSubfolder(p, relPath);
56
101
  }
57
102
  }
58
103
  /**
59
104
  * Copies contents of subfolder.
60
105
  * @param p - path relative to src/dest
106
+ * @param relPath - `/`-separated path relative to the copy root
61
107
  */
62
- function walkSubfolder(p) {
108
+ function walkSubfolder(p, relPath) {
63
109
  const sourceDir = path.resolve(src, p);
64
110
  fs.mkdirSync(path.resolve(dest, p), { recursive: true });
65
- fs.readdirSync(sourceDir).forEach((item) => copyItem(path.join(p, item)));
111
+ fs.readdirSync(sourceDir).forEach((item) => copyItem(path.join(p, item), relPath ? `${relPath}/${item}` : item));
66
112
  }
67
- walkSubfolder(".");
113
+ walkSubfolder(".", "");
68
114
  }
69
115
  /**
70
116
  * Zips contents at src and places zip archive at dest.
71
117
  * @param src - directory to archive
72
118
  * @param dest - path to write the resulting zip to
119
+ * @param shouldExclude - entries to omit, see {@link CopySyncOptions.shouldExclude}
120
+ * @param descendIntoExcludedDirectories - keep walking excluded directories,
121
+ * see {@link CopySyncOptions.descendIntoExcludedDirectories}
73
122
  */
74
- function archiveSync(src, dest) {
123
+ function archiveSync(src, dest, shouldExclude, descendIntoExcludedDirectories = false) {
75
124
  try {
76
125
  const files = {};
77
126
  const walk = (dir, prefix) => {
@@ -81,6 +130,11 @@ function archiveSync(src, dest) {
81
130
  const full = path.join(dir, entry);
82
131
  const zipPath = prefix ? `${prefix}/${entry}` : entry;
83
132
  const stat = fs.lstatSync(full);
133
+ const excluded = !!shouldExclude?.(zipPath, stat.isDirectory());
134
+ if (excluded &&
135
+ !(stat.isDirectory() && descendIntoExcludedDirectories)) {
136
+ continue;
137
+ }
84
138
  if (stat.isSymbolicLink()) {
85
139
  // Store the link target as the entry data with S_IFLNK attrs so
86
140
  // extractors recreate the symlink instead of a copy of the target.
@@ -127,8 +181,8 @@ function archiveSync(src, dest) {
127
181
  */
128
182
  function hashPath(src, options = {}) {
129
183
  const digest = options.canonical
130
- ? canonicalHashPath(src, !options.archive)
131
- : legacyHashPath(src);
184
+ ? canonicalHashPath(src, !options.archive, options.shouldExclude, options.descendIntoExcludedDirectories)
185
+ : legacyHashPath(src, options.shouldExclude, options.descendIntoExcludedDirectories);
132
186
  return digest.slice(0, HASH_LEN).toUpperCase();
133
187
  }
134
188
  /**
@@ -140,8 +194,11 @@ function hashPath(src, options = {}) {
140
194
  * bytes, so a file containing `foo` can never collide with a symlink
141
195
  * targeting `foo`.
142
196
  * @param src - path to a file or directory to hash
197
+ * @param shouldExclude - entries to omit, see {@link HashPathOptions.shouldExclude}
198
+ * @param descendIntoExcludedDirectories - keep walking excluded directories,
199
+ * see {@link HashPathOptions.descendIntoExcludedDirectories}
143
200
  */
144
- function legacyHashPath(src) {
201
+ function legacyHashPath(src, shouldExclude, descendIntoExcludedDirectories = false) {
145
202
  const content = crypto.createHash("md5");
146
203
  const links = crypto.createHash("md5");
147
204
  let linkCount = 0;
@@ -163,7 +220,18 @@ function legacyHashPath(src) {
163
220
  content.update(fs.readFileSync(p));
164
221
  }
165
222
  else if (stat.isDirectory()) {
166
- fs.readdirSync(p).forEach((filename) => hashRecursion(path.resolve(p, filename), relPath ? `${relPath}/${filename}` : filename));
223
+ fs.readdirSync(p).forEach((filename) => {
224
+ const entryRelPath = relPath ? `${relPath}/${filename}` : filename;
225
+ const childPath = path.resolve(p, filename);
226
+ const childIsDir = fs.lstatSync(childPath).isDirectory();
227
+ if (shouldExclude?.(entryRelPath, childIsDir)) {
228
+ // Skip, unless it is an excluded directory being descended into.
229
+ if (!(childIsDir && descendIntoExcludedDirectories)) {
230
+ return;
231
+ }
232
+ }
233
+ hashRecursion(childPath, entryRelPath);
234
+ });
167
235
  }
168
236
  }
169
237
  hashRecursion(src, "", true);
@@ -194,8 +262,9 @@ function legacyHashPath(src) {
194
262
  * @param src - path to a file or directory to hash
195
263
  * @param includeDirectories - record directory entries; false for archive
196
264
  * artifacts, where the emitted zip has no directory entries
265
+ * @param shouldExclude - entries to omit, see {@link HashPathOptions.shouldExclude}
197
266
  */
198
- function canonicalHashPath(src, includeDirectories) {
267
+ function canonicalHashPath(src, includeDirectories, shouldExclude, descendIntoExcludedDirectories = false) {
199
268
  const hash = crypto.createHash("md5");
200
269
  /**
201
270
  * Walk `p`, framing each entry into the enclosing hash accumulator.
@@ -218,17 +287,60 @@ function canonicalHashPath(src, includeDirectories) {
218
287
  hash.update(data);
219
288
  }
220
289
  else if (stat.isDirectory()) {
290
+ // Records the `D` entry even for a descended-into excluded directory,
291
+ // matching the empty directory copySync leaves on disk.
221
292
  if (relPath && includeDirectories) {
222
293
  hash.update(`D ${relPath}\0`);
223
294
  }
224
295
  for (const filename of fs.readdirSync(p).sort()) {
225
- hashRecursion(path.resolve(p, filename), relPath ? `${relPath}/${filename}` : filename);
296
+ const entryRelPath = relPath ? `${relPath}/${filename}` : filename;
297
+ const childPath = path.resolve(p, filename);
298
+ const childIsDir = fs.lstatSync(childPath).isDirectory();
299
+ if (shouldExclude?.(entryRelPath, childIsDir)) {
300
+ // Skip, unless it is an excluded directory being descended into.
301
+ if (!(childIsDir && descendIntoExcludedDirectories)) {
302
+ continue;
303
+ }
304
+ }
305
+ hashRecursion(childPath, entryRelPath);
226
306
  }
227
307
  }
228
308
  }
229
309
  hashRecursion(src, "", true);
230
310
  return hash.digest("hex");
231
311
  }
312
+ /**
313
+ * Build a predicate matching the exclusion forms accepted by
314
+ * `AssetHashOptions.exclude` (via `ExcludeIgnoreStrategy`): an exact relative
315
+ * path, a `*.ext` suffix, or a directory (with or without a trailing `/`),
316
+ * which also excludes its contents.
317
+ * Deliberately not a full glob implementation — `**`, `?`, character classes and
318
+ * `!` negation are not supported, and a pattern is never interpreted as
319
+ * anchoring to a subdirectory it does not name.
320
+ * The returned matcher looks only at the path, not at whether the entry is a
321
+ * directory: `dir` and `dir/` both match a directory named `dir` and its
322
+ * contents. It is therefore narrower than {@link ExcludePredicate}, which also
323
+ * receives an `isDirectory` flag for strategies that need it.
324
+ * @param exclude - patterns to exclude
325
+ * @returns predicate over `/`-separated paths relative to the asset root
326
+ */
327
+ function excludeMatcher(exclude) {
328
+ // `/`-separated throughout: relative paths are normalized before matching, so
329
+ // `dir/child` patterns work the same on Windows.
330
+ const patterns = exclude.map((p) => p.replace(/\\/g, "/"));
331
+ return (relativePath) => {
332
+ for (const pattern of patterns) {
333
+ if (pattern.startsWith("*.") && relativePath.endsWith(pattern.slice(1))) {
334
+ return true;
335
+ }
336
+ const dir = pattern.endsWith("/") ? pattern.slice(0, -1) : pattern;
337
+ if (relativePath === dir || relativePath.startsWith(`${dir}/`)) {
338
+ return true;
339
+ }
340
+ }
341
+ return false;
342
+ };
343
+ }
232
344
  /**
233
345
  * Walk upward from `rootPath` looking for a file with the given name.
234
346
  * Returns the absolute path of the first match, or `null` if the search
@@ -248,4 +360,4 @@ function findFileAboveCwd(file, rootPath = process.cwd()) {
248
360
  }
249
361
  return null;
250
362
  }
251
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJpdmF0ZS9mcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXNDQSw0QkE2QkM7QUFPRCxrQ0EyQ0M7QUE2QkQsNEJBS0M7QUFzSEQsNENBZUM7QUE1UkQsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLGlDQUFpQztBQUNqQyxtQ0FBMEM7QUFFMUMsc0NBQXdEO0FBRXhELE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUVwQix5RUFBeUU7QUFDekUsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDO0FBQ3pCLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQztBQUN6QixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDekIsMEVBQTBFO0FBQzFFLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQztBQUN0Qix5RUFBeUU7QUFDekUseUVBQXlFO0FBQ3pFLDBFQUEwRTtBQUMxRSwwQkFBMEI7QUFDMUIsTUFBTSxlQUFlLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUU3Qzs7OztHQUlHO0FBQ0gsU0FBUyxRQUFRLENBQUMsSUFBWTtJQUM1QixPQUFPLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QixDQUFDO0FBRUQseUdBQXlHO0FBQ3pHOzs7O0dBSUc7QUFDSCxTQUFnQixRQUFRLENBQUMsR0FBVyxFQUFFLElBQVk7SUFDaEQ7OztPQUdHO0lBQ0gsU0FBUyxRQUFRLENBQUMsQ0FBUztRQUN6QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4QyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RDLElBQUksSUFBSSxDQUFDLGNBQWMs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Q0FBQztJQUNsQixDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0MsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN2RCxPQUFPLGdCQUFnQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCB7IHN0clRvVTgsIHppcFN5bmMgfSBmcm9tIFwiZmZsYXRlXCI7XG5pbXBvcnQgdHlwZSB7IFppcE9wdGlvbnMgfSBmcm9tIFwiZmZsYXRlXCI7XG5pbXBvcnQgeyBhc3NldENhbk5vdENyZWF0ZVppcEFyY2hpdmUgfSBmcm9tIFwiLi4vZXJyb3JzXCI7XG5cbmNvbnN0IEhBU0hfTEVOID0gMzI7XG5cbi8vIFVuaXggZmlsZS10eXBlIGJpdHMgZm9yIHppcCBleHRlcm5hbCBhdHRyaWJ1dGVzIChzdF9tb2RlIHVwcGVyIG5pYmJsZSlcbmNvbnN0IFNfSUZMTksgPSAwbzEyMDAwMDtcbmNvbnN0IFNfSUZSRUcgPSAwbzEwMDAwMDtcbmNvbnN0IFBFUk1fTUFTSyA9IDBvNzc3Nztcbi8vIFwidmVyc2lvbiBtYWRlIGJ5XCIgaG9zdCBieXRlOyB1bnppcCBvbmx5IGhvbm9ycyB1bml4IG1vZGUgYXR0cnMgd2hlbiBzZXRcbmNvbnN0IFpJUF9PU19VTklYID0gMztcbi8vIFBpbm5lZCBzbyBhcmNoaXZlcyBhcmUgYnl0ZS1yZXByb2R1Y2libGUgYWNyb3NzIHN5bnRocy4gZmZsYXRlIGVuY29kZXNcbi8vIERPUyBkYXRlcyBmcm9tIGxvY2FsLXRpbWUgZ2V0dGVycyBhbmQgcmVqZWN0cyB5ZWFycyBvdXRzaWRlIDE5ODAtMjA5OSxcbi8vIHNvIHRoaXMgbXVzdCBiZSBhIGxvY2FsLXRpbWUgMTk4MCBkYXRlIChhIFVUQyBvbmUgdW5kZXJmbG93cyB0byAxOTc5IGluXG4vLyB0aW1lem9uZXMgd2VzdCBvZiBVVEMpLlxuY29uc3QgWklQX0VOVFJZX01USU1FID0gbmV3IERhdGUoMTk4MCwgMCwgMSk7XG5cbi8qKlxuICogWmlwIGV4dGVybmFsIGF0dHJpYnV0ZXMgZm9yIGEgdW5peCBtb2RlOiBmaWxlLXR5cGUgYW5kIHBlcm1pc3Npb24gYml0c1xuICogYmVsb25nIGluIHRoZSBoaWdoIDE2IGJpdHMgb2YgdGhlIDMyLWJpdCBmaWVsZC5cbiAqIEBwYXJhbSBtb2RlIC0gdW5peCBzdF9tb2RlIGJpdHMgKHR5cGUgfCBwZXJtaXNzaW9ucylcbiAqL1xuZnVuY3Rpb24gemlwQXR0cnMobW9kZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIChtb2RlIDw8IDE2KSA+Pj4gMDtcbn1cblxuLy8gRnVsbCBpbXBsZW1lbnRhdGlvbiBhdCBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUtZnMtZXh0cmEvYmxvYi9tYXN0ZXIvbGliL2NvcHkvY29weS1zeW5jLmpzXG4vKipcbiAqIENvcHkgYSBmaWxlIG9yIGRpcmVjdG9yeS4gVGhlIGRpcmVjdG9yeSBjYW4gaGF2ZSBjb250ZW50cyBhbmQgc3ViZm9sZGVycy5cbiAqIEBwYXJhbSBzcmMgLSBzb3VyY2UgcGF0aFxuICogQHBhcmFtIGRlc3QgLSBkZXN0aW5hdGlvbiBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5U3luYyhzcmM6IHN0cmluZywgZGVzdDogc3RyaW5nKSB7XG4gIC8qKlxuICAgKiBDb3BpZXMgZmlsZSBpZiBwcmVzZW50IG90aGVyd2lzZSB3YWxrcyBzdWJmb2xkZXIuXG4gICAqIEBwYXJhbSBwIC0gcGF0aCByZWxhdGl2ZSB0byBzcmMvZGVzdFxuICAgKi9cbiAgZnVuY3Rpb24gY29weUl0ZW0ocDogc3RyaW5nKSB7XG4gICAgY29uc3Qgc291cmNlUGF0aCA9IHBhdGgucmVzb2x2ZShzcmMsIHApO1xuICAgIGNvbnN0IHN0YXQgPSBmcy5sc3RhdFN5bmMoc291cmNlUGF0aCk7XG4gICAgaWYgKHN0YXQuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgZnMuc3ltbGlua1N5bmMoZnMucmVhZGxpbmtTeW5jKHNvdXJjZVBhdGgpLCBwYXRoLnJlc29sdmUoZGVzdCwgcCkpO1xuICAgIH0gZWxzZSBpZiAoc3RhdC5pc0ZpbGUoKSkge1xuICAgICAgZnMuY29weUZpbGVTeW5jKHNvdXJjZVBhdGgsIHBhdGgucmVzb2x2ZShkZXN0LCBwKSk7XG4gICAgfSBlbHNlIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIHdhbGtTdWJmb2xkZXIocCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDb3BpZXMgY29udGVudHMgb2Ygc3ViZm9sZGVyLlxuICAgKiBAcGFyYW0gcCAtIHBhdGggcmVsYXRpdmUgdG8gc3JjL2Rlc3RcbiAgICovXG4gIGZ1bmN0aW9uIHdhbGtTdWJmb2xkZXIocDogc3RyaW5nKSB7XG4gICAgY29uc3Qgc291cmNlRGlyID0gcGF0aC5yZXNvbHZlKHNyYywgcCk7XG4gICAgZnMubWtkaXJTeW5jKHBhdGgucmVzb2x2ZShkZXN0LCBwKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgZnMucmVhZGRpclN5bmMoc291cmNlRGlyKS5mb3JFYWNoKChpdGVtOiBzdHJpbmcpID0+XG4gICAgICBjb3B5SXRlbShwYXRoLmpvaW4ocCwgaXRlbSkpLFxuICAgICk7XG4gIH1cblxuICB3YWxrU3ViZm9sZGVyKFwiLlwiKTtcbn1cblxuLyoqXG4gKiBaaXBzIGNvbnRlbnRzIGF0IHNyYyBhbmQgcGxhY2VzIHppcCBhcmNoaXZlIGF0IGRlc3QuXG4gKiBAcGFyYW0gc3JjIC0gZGlyZWN0b3J5IHRvIGFyY2hpdmVcbiAqIEBwYXJhbSBkZXN0IC0gcGF0aCB0byB3cml0ZSB0aGUgcmVzdWx0aW5nIHppcCB0b1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXJjaGl2ZVN5bmMoc3JjOiBzdHJpbmcsIGRlc3Q6IHN0cmluZykge1xuICB0cnkge1xuICAgIGNvbnN0IGZpbGVzOiBSZWNvcmQ8c3RyaW5nLCBbVWludDhBcnJheSwgWmlwT3B0aW9uc10+ID0ge307XG4gICAgY29uc3Qgd2FsayA9IChkaXI6IHN0cmluZywgcHJlZml4OiBzdHJpbmcpID0+IHtcbiAgICAgIC8vIFNvcnRlZCBzbyBlbnRyeSBvcmRlciDigJQgYW5kIHRoZXJlZm9yZSBhcmNoaXZlIGJ5dGVzIOKAlCBjYW5ub3QgZGVwZW5kXG4gICAgICAvLyBvbiBmaWxlc3lzdGVtIGVudW1lcmF0aW9uIG9yZGVyOyBtYXRjaGVzIHRoZSBjYW5vbmljYWwgaGFzaCB3YWxrLlxuICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBmcy5yZWFkZGlyU3luYyhkaXIpLnNvcnQoKSkge1xuICAgICAgICBjb25zdCBmdWxsID0gcGF0aC5qb2luKGRpciwgZW50cnkpO1xuICAgICAgICBjb25zdCB6aXBQYXRoID0gcHJlZml4ID8gYCR7cHJlZml4fS8ke2VudHJ5fWAgOiBlbnRyeTtcbiAgICAgICAgY29uc3Qgc3RhdCA9IGZzLmxzdGF0U3luYyhmdWxsKTtcbiAgICAgICAgaWYgKHN0YXQuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgIC8vIFN0b3JlIHRoZSBsaW5rIHRhcmdldCBhcyB0aGUgZW50cnkgZGF0YSB3aXRoIFNfSUZMTksgYXR0cnMgc29cbiAgICAgICAgICAvLyBleHRyYWN0b3JzIHJlY3JlYXRlIHRoZSBzeW1saW5rIGluc3RlYWQgb2YgYSBjb3B5IG9mIHRoZSB0YXJnZXQuXG4gICAgICAgICAgLy8gTmV2ZXIgcmVjdXJzaW5nIHRocm91Z2ggbGlua3MgYWxzbyBtYWtlcyBjeWNsZXMgdW5yZWFjaGFibGUuXG4gICAgICAgICAgZmlsZXNbemlwUGF0aF0gPSBbXG4gICAgICAgICAgICBzdHJUb1U4KGZzLnJlYWRsaW5rU3luYyhmdWxsKSksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG9zOiBaSVBfT1NfVU5JWCxcbiAgICAgICAgICAgICAgYXR0cnM6IHppcEF0dHJzKFNfSUZMTksgfCAoc3RhdC5tb2RlICYgUEVSTV9NQVNLKSksXG4gICAgICAgICAgICAgIGxldmVsOiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgIHdhbGsoZnVsbCwgemlwUGF0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmlsZXNbemlwUGF0aF0gPSBbXG4gICAgICAgICAgICBmcy5yZWFkRmlsZVN5bmMoZnVsbCksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG9zOiBaSVBfT1NfVU5JWCxcbiAgICAgICAgICAgICAgYXR0cnM6IHppcEF0dHJzKFNfSUZSRUcgfCAoc3RhdC5tb2RlICYgUEVSTV9NQVNLKSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHdhbGsoc3JjLCBcIlwiKTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgZGVzdCxcbiAgICAgIHppcFN5bmMoZmlsZXMsIHsgbGV2ZWw6IDksIG10aW1lOiBaSVBfRU5UUllfTVRJTUUgfSksXG4gICAgKTtcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICB0aHJvdyBhc3NldENhbk5vdENyZWF0ZVppcEFyY2hpdmUoc3JjLCBkZXN0LCBlcnIpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGFzaFBhdGhPcHRpb25zIHtcbiAgLyoqXG4gICAqIFVzZSB0aGUgY2Fub25pY2FsIGVudHJ5LWZyYW1lZCBoYXNoIGluc3RlYWQgb2YgdGhlIGxlZ2FjeVxuICAgKiBjb250ZW50LWNvbmNhdGVuYXRpb24gaGFzaC4gRW5hYmxlZCB0aHJvdWdoIHRoZSBgY2Fub25pY2FsQXNzZXRIYXNoZXNgXG4gICAqIGZlYXR1cmUgZmxhZy5cbiAgICovXG4gIHJlYWRvbmx5IGNhbm9uaWNhbD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBGcmFtZSBmb3IgYW4gYXJjaGl2ZSBhcnRpZmFjdDogYXJjaGl2ZVN5bmMgbmV2ZXIgZW1pdHMgWklQIGRpcmVjdG9yeVxuICAgKiBlbnRyaWVzLCBzbyBjYW5vbmljYWwgaGFzaGluZyBvbWl0cyBkaXJlY3RvcnkgcmVjb3JkcyBhbmQgdGhlIGhhc2hcbiAgICogdHJhY2tzIHRoZSBlbWl0dGVkIGFyY2hpdmUgYnl0ZXMgZXhhY3RseS4gTm9uLWVtcHR5IGRpcmVjdG9yaWVzIHN0YXlcbiAgICogdmlzaWJsZSB0aHJvdWdoIHRoZSByZWxhdGl2ZSBwYXRocyBvZiB0aGVpciBjb250ZW50cy4gSGFzIG5vIGVmZmVjdCBvblxuICAgKiB0aGUgbGVnYWN5IHNjaGVtZSwgd2hpY2ggbmV2ZXIgcmVjb3JkcyBkaXJlY3Rvcmllcy5cbiAgICovXG4gIHJlYWRvbmx5IGFyY2hpdmU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbXB1dGUgYSBzdGFibGUgTUQ1IGhhc2ggb2YgYSBmaWxlIG9yIGRpcmVjdG9yeSdzIGNvbnRlbnRzLlxuICogSW4gYm90aCBzY2hlbWVzIHN5bWxpbmtzIGFyZSBoYXNoZWQgYnkgdGhlaXIgbWV0YWRhdGEgKHBhdGggKyB0YXJnZXQpXG4gKiBpbnN0ZWFkIG9mIGJlaW5nIGZvbGxvd2VkLCBzbyBzaGFyZWQgdGFyZ2V0cyBhcmUgbm90IGRvdWJsZS1jb3VudGVkIGFuZFxuICogY3ljbGVzIGNhbm5vdCByZWN1cnNlOyBhIHN5bWxpbmsgYXQgdGhlIHJvb3QgaXRzZWxmIGlzIGZvbGxvd2VkLCBtYXRjaGluZ1xuICogaG93IHRoZSBhc3NldCBzb3VyY2UgcGF0aCBpcyBvcGVuZWQgd2hlbiB0aGUgYXJ0aWZhY3QgaXMgZW1pdHRlZC5cbiAqIEBwYXJhbSBzcmMgLSBwYXRoIHRvIGEgZmlsZSBvciBkaXJlY3RvcnkgdG8gaGFzaFxuICogQHBhcmFtIG9wdGlvbnMgLSBoYXNoIHNjaGVtZSBzZWxlY3Rpb24sIHNlZSB7QGxpbmsgSGFzaFBhdGhPcHRpb25zfVxuICogQHJldHVybnMgdXBwZXJjYXNlZCBoZXggZGlnZXN0LCB0cnVuY2F0ZWQgdG8gSEFTSF9MRU4gY2hhcmFjdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaFBhdGgoc3JjOiBzdHJpbmcsIG9wdGlvbnM6IEhhc2hQYXRoT3B0aW9ucyA9IHt9KTogc3RyaW5nIHtcbiAgY29uc3QgZGlnZXN0ID0gb3B0aW9ucy5jYW5vbmljYWxcbiAgICA/IGNhbm9uaWNhbEhhc2hQYXRoKHNyYywgIW9wdGlvbnMuYXJjaGl2ZSlcbiAgICA6IGxlZ2FjeUhhc2hQYXRoKHNyYyk7XG4gIHJldHVybiBkaWdlc3Quc2xpY2UoMCwgSEFTSF9MRU4pLnRvVXBwZXJDYXNlKCk7XG59XG5cbi8qKlxuICogTGVnYWN5LWNvbXBhdGlibGUgaGFzaDogZmlsZSBjb250ZW50cyBmb2xkIGludG8gb25lIGRpZ2VzdCBpblxuICogZGlyZWN0b3J5LWxpc3Rpbmcgb3JkZXIsIGV4YWN0bHkgYXMgZWFybGllciByZWxlYXNlcyBkaWQsIHNvIHRyZWVzIHdpdGhvdXRcbiAqIHN5bWxpbmtzIGtlZXAgdGhlaXIgaGlzdG9yaWNhbCBoYXNoZXMuIFN5bWxpbmsgbWV0YWRhdGEgZ29lcyBpbnRvIGEgc2Vjb25kXG4gKiBkaWdlc3QsIGFuZCBvbmx5IHdoZW4gc3ltbGlua3MgZXhpc3QgYXJlIHRoZSB0d28gY29tYmluZWQgdW5kZXIgYSB0YWdnZWRcbiAqIG91dGVyIGhhc2gg4oCUIHRoZSB0YWcga2VlcHMgc3ltbGluayBtZXRhZGF0YSBpbiBhIHNlcGFyYXRlIGRvbWFpbiBmcm9tIGZpbGVcbiAqIGJ5dGVzLCBzbyBhIGZpbGUgY29udGFpbmluZyBgZm9vYCBjYW4gbmV2ZXIgY29sbGlkZSB3aXRoIGEgc3ltbGlua1xuICogdGFyZ2V0aW5nIGBmb29gLlxuICogQHBhcmFtIHNyYyAtIHBhdGggdG8gYSBmaWxlIG9yIGRpcmVjdG9yeSB0byBoYXNoXG4gKi9cbmZ1bmN0aW9uIGxlZ2FjeUhhc2hQYXRoKHNyYzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgY29udGVudCA9IGNyeXB0by5jcmVhdGVIYXNoKFwibWQ1XCIpO1xuICBjb25zdCBsaW5rcyA9IGNyeXB0by5jcmVhdGVIYXNoKFwibWQ1XCIpO1xuICBsZXQgbGlua0NvdW50ID0gMDtcblxuICAvKipcbiAgICogV2FsayBgcGAsIGZlZWRpbmcgZmlsZSBjb250ZW50cyBhbmQgc3ltbGluayBtZXRhZGF0YSBpbnRvIHRoZSBlbmNsb3NpbmdcbiAgICogYWNjdW11bGF0b3JzLlxuICAgKiBAcGFyYW0gcCAtIHBhdGggdG8gd2Fsa1xuICAgKiBAcGFyYW0gcmVsUGF0aCAtIHBhdGggb2YgYHBgIHJlbGF0aXZlIHRvIHRoZSB3YWxrIHJvb3QsIGAvYC1zZXBhcmF0ZWRcbiAgICogQHBhcmFtIGlzUm9vdCAtIGZvbGxvdyBhIHN5bWxpbmsgb25seSBhdCB0aGUgcm9vdCwgbWF0Y2hpbmcgaG93IHRoZVxuICAgKiBhc3NldCdzIG93biBwYXRoIGlzIHJlc29sdmVkIHdoZW4gaXQgaXMgcmVhZFxuICAgKi9cbiAgZnVuY3Rpb24gaGFzaFJlY3Vyc2lvbihwOiBzdHJpbmcsIHJlbFBhdGg6IHN0cmluZywgaXNSb290ID0gZmFsc2UpIHtcbiAgICBjb25zdCBzdGF0ID0gaXNSb290ID8gZnMuc3RhdFN5bmMocCkgOiBmcy5sc3RhdFN5bmMocCk7XG4gICAgaWYgKHN0YXQuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgbGlua3MudXBkYXRlKGAke3JlbFBhdGh9XFwwJHtmcy5yZWFkbGlua1N5bmMocCl9XFwwYCk7XG4gICAgICBsaW5rQ291bnQrKztcbiAgICB9IGVsc2UgaWYgKHN0YXQuaXNGaWxlKCkpIHtcbiAgICAgIGNvbnRlbnQudXBkYXRlKGZzLnJlYWRGaWxlU3luYyhwKSk7XG4gICAgfSBlbHNlIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIGZzLnJlYWRkaXJTeW5jKHApLmZvckVhY2goKGZpbGVuYW1lKSA9PlxuICAgICAgICBoYXNoUmVjdXJzaW9uKFxuICAgICAgICAgIHBhdGgucmVzb2x2ZShwLCBmaWxlbmFtZSksXG4gICAgICAgICAgcmVsUGF0aCA/IGAke3JlbFBhdGh9LyR7ZmlsZW5hbWV9YCA6IGZpbGVuYW1lLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBoYXNoUmVjdXJzaW9uKHNyYywgXCJcIiwgdHJ1ZSk7XG4gIGlmIChsaW5rQ291bnQgPT09IDApIHtcbiAgICByZXR1cm4gY29udGVudC5kaWdlc3QoXCJoZXhcIik7XG4gIH1cbiAgY29uc3Qgb3V0ZXIgPSBjcnlwdG8uY3JlYXRlSGFzaChcIm1kNVwiKTtcbiAgb3V0ZXIudXBkYXRlKFwiY2RrdG4vYXNzZXQtaGFzaC9zeW1saW5rcy92MVxcMFwiKTtcbiAgb3V0ZXIudXBkYXRlKGNvbnRlbnQuZGlnZXN0KFwiaGV4XCIpKTtcbiAgb3V0ZXIudXBkYXRlKGxpbmtzLmRpZ2VzdChcImhleFwiKSk7XG4gIHJldHVybiBvdXRlci5kaWdlc3QoXCJoZXhcIik7XG59XG5cbi8qKlxuICogQ2Fub25pY2FsIGhhc2gsIG1vZGVsZWQgb24gZ2l0IHRyZWVzIGFuZCBOaXggTkFSOiBldmVyeSBlbnRyeSBpcyBmcmFtZWRcbiAqIHdpdGggZXZlcnl0aGluZyB0aGF0IGFmZmVjdHMgdGhlIGVtaXR0ZWQgYXJ0aWZhY3Qg4oCUXG4gKlxuICogLSBmaWxlczogICAgICBgRiA8bW9kZT4gPHJlbFBhdGg+XFwwPHNpemU+XFwwYCArIGNvbnRlbnQsIHdoZXJlIGA8bW9kZT5gIGlzXG4gKiAgICAgICAgICAgICAgIHRoZSBvY3RhbCBwZXJtaXNzaW9uIG1hc2sgKGAwbzc3NzdgIGJpdHMpIHRoYXQgYXJjaGl2ZVN5bmNcbiAqICAgICAgICAgICAgICAgcHJlc2VydmVzIGluIHppcCBleHRlcm5hbCBhdHRyaWJ1dGVzLFxuICogLSBzeW1saW5rczogICBgTCA8bW9kZT4gPHJlbFBhdGg+XFwwPHRhcmdldCBieXRlIGxlbmd0aD5cXDBgICsgdGFyZ2V0LFxuICogLSBkaXJlY3RvcmllcyAoaW5jbHVkaW5nIGVtcHR5IG9uZXMsIHdoaWNoIGNvcHlTeW5jIG1hdGVyaWFsaXplcyk6XG4gKiAgICAgICAgICAgICAgIGBEIDxyZWxQYXRoPlxcMGAsIHdpdGggbm8gbW9kZSDigJQgbmVpdGhlciBhcmNoaXZlU3luYyBub3JcbiAqICAgICAgICAgICAgICAgY29weVN5bmMgcHJlc2VydmVzIGRpcmVjdG9yeSBwZXJtaXNzaW9ucyxcbiAqXG4gKiBpbiBzb3J0ZWQgZGlyZWN0b3J5IG9yZGVyIHdpdGggYC9gLXNlcGFyYXRlZCByZWxhdGl2ZSBwYXRocywgc28gcmVuYW1lcyxcbiAqIGVudHJ5LWJvdW5kYXJ5IHNoaWZ0cywgcGVybWlzc2lvbiBjaGFuZ2VzLCBlbXB0eS1kaXJlY3RvcnkgY2hhbmdlcywgYW5kXG4gKiBmaWxlLXZzLXN5bWxpbmsgc3dhcHMgYWxsIGNoYW5nZSB0aGUgZGlnZXN0LlxuICogQHBhcmFtIHNyYyAtIHBhdGggdG8gYSBmaWxlIG9yIGRpcmVjdG9yeSB0byBoYXNoXG4gKiBAcGFyYW0gaW5jbHVkZURpcmVjdG9yaWVzIC0gcmVjb3JkIGRpcmVjdG9yeSBlbnRyaWVzOyBmYWxzZSBmb3IgYXJjaGl2ZVxuICogYXJ0aWZhY3RzLCB3aGVyZSB0aGUgZW1pdHRlZCB6aXAgaGFzIG5vIGRpcmVjdG9yeSBlbnRyaWVzXG4gKi9cbmZ1bmN0aW9uIGNhbm9uaWNhbEhhc2hQYXRoKHNyYzogc3RyaW5nLCBpbmNsdWRlRGlyZWN0b3JpZXM6IGJvb2xlYW4pOiBzdHJpbmcge1xuICBjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goXCJtZDVcIik7XG5cbiAgLyoqXG4gICAqIFdhbGsgYHBgLCBmcmFtaW5nIGVhY2ggZW50cnkgaW50byB0aGUgZW5jbG9zaW5nIGhhc2ggYWNjdW11bGF0b3IuXG4gICAqIEBwYXJhbSBwIC0gcGF0aCB0byB3YWxrXG4gICAqIEBwYXJhbSByZWxQYXRoIC0gcGF0aCBvZiBgcGAgcmVsYXRpdmUgdG8gdGhlIHdhbGsgcm9vdCwgYC9gLXNlcGFyYXRlZFxuICAgKiBAcGFyYW0gaXNSb290IC0gZm9sbG93IGEgc3ltbGluayBvbmx5IGF0IHRoZSByb290LCBtYXRjaGluZyBob3cgdGhlXG4gICAqIGFzc2V0J3Mgb3duIHBhdGggaXMgcmVzb2x2ZWQgd2hlbiB0aGUgYXJ0aWZhY3QgaXMgZW1pdHRlZFxuICAgKi9cbiAgZnVuY3Rpb24gaGFzaFJlY3Vyc2lvbihwOiBzdHJpbmcsIHJlbFBhdGg6IHN0cmluZywgaXNSb290ID0gZmFsc2UpIHtcbiAgICBjb25zdCBzdGF0ID0gaXNSb290ID8gZnMuc3RhdFN5bmMocCkgOiBmcy5sc3RhdFN5bmMocCk7XG4gICAgY29uc3QgbW9kZSA9IChzdGF0Lm1vZGUgJiBQRVJNX01BU0spLnRvU3RyaW5nKDgpO1xuICAgIGlmIChzdGF0LmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZzLnJlYWRsaW5rU3luYyhwKTtcbiAgICAgIGhhc2gudXBkYXRlKGBMICR7bW9kZX0gJHtyZWxQYXRofVxcMCR7QnVmZmVyLmJ5dGVMZW5ndGgodGFyZ2V0KX1cXDBgKTtcbiAgICAgIGhhc2gudXBkYXRlKHRhcmdldCk7XG4gICAgfSBlbHNlIGlmIChzdGF0LmlzRmlsZSgpKSB7XG4gICAgICBjb25zdCBkYXRhID0gZnMucmVhZEZpbGVTeW5jKHApO1xuICAgICAgaGFzaC51cGRhdGUoYEYgJHttb2RlfSAke3JlbFBhdGh9XFwwJHtkYXRhLmxlbmd0aH1cXDBgKTtcbiAgICAgIGhhc2gudXBkYXRlKGRhdGEpO1xuICAgIH0gZWxzZSBpZiAoc3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICBpZiAocmVsUGF0aCAmJiBpbmNsdWRlRGlyZWN0b3JpZXMpIHtcbiAgICAgICAgaGFzaC51cGRhdGUoYEQgJHtyZWxQYXRofVxcMGApO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhwKS5zb3J0KCkpIHtcbiAgICAgICAgaGFzaFJlY3Vyc2lvbihcbiAgICAgICAgICBwYXRoLnJlc29sdmUocCwgZmlsZW5hbWUpLFxuICAgICAgICAgIHJlbFBhdGggPyBgJHtyZWxQYXRofS8ke2ZpbGVuYW1lfWAgOiBmaWxlbmFtZSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYXNoUmVjdXJzaW9uKHNyYywgXCJcIiwgdHJ1ZSk7XG4gIHJldHVybiBoYXNoLmRpZ2VzdChcImhleFwiKTtcbn1cblxuLyoqXG4gKiBXYWxrIHVwd2FyZCBmcm9tIGByb290UGF0aGAgbG9va2luZyBmb3IgYSBmaWxlIHdpdGggdGhlIGdpdmVuIG5hbWUuXG4gKiBSZXR1cm5zIHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBmaXJzdCBtYXRjaCwgb3IgYG51bGxgIGlmIHRoZSBzZWFyY2hcbiAqIHJlYWNoZXMgdGhlIGZpbGVzeXN0ZW0gcm9vdCB3aXRob3V0IGZpbmRpbmcgaXQuXG4gKiBAcGFyYW0gZmlsZSAtIGZpbGVuYW1lIHRvIHNlYXJjaCBmb3JcbiAqIEBwYXJhbSByb290UGF0aCAtIGRpcmVjdG9yeSB0byBzdGFydCB0aGUgc2VhcmNoIGZyb20gKGRlZmF1bHRzIHRvIGN3ZClcbiAqIEByZXR1cm5zIGFic29sdXRlIHBhdGggdG8gdGhlIGZpbGUsIG9yIG51bGwgaWYgbm90IGZvdW5kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRmlsZUFib3ZlQ3dkKFxuICBmaWxlOiBzdHJpbmcsXG4gIHJvb3RQYXRoOiBzdHJpbmcgPSBwcm9jZXNzLmN3ZCgpLFxuKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5yZXNvbHZlKHJvb3RQYXRoLCBmaWxlKTtcbiAgaWYgKGZzLmV4aXN0c1N5bmMoZnVsbFBhdGgpKSB7XG4gICAgcmV0dXJuIGZ1bGxQYXRoO1xuICB9XG5cbiAgY29uc3QgcGFyZW50RGlyID0gcGF0aC5yZXNvbHZlKHJvb3RQYXRoLCBcIi4uXCIpO1xuICBpZiAoZnMuZXhpc3RzU3luYyhwYXJlbnREaXIpICYmIHBhcmVudERpciAhPT0gcm9vdFBhdGgpIHtcbiAgICByZXR1cm4gZmluZEZpbGVBYm92ZUN3ZChmaWxlLCBwYXJlbnREaXIpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iXX0=
363
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJpdmF0ZS9mcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQThFQSw0QkEyQ0M7QUFVRCxrQ0F1REM7QUFpREQsNEJBY0M7QUF3SkQsd0NBa0JDO0FBVUQsNENBZUM7QUE1YkQsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLCtDQUFpQztBQUNqQyxtQ0FBMEM7QUFFMUMsc0NBQXdEO0FBRXhELE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUVwQix5RUFBeUU7QUFDekUsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDO0FBQ3pCLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQztBQUN6QixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDekIsMEVBQTBFO0FBQzFFLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQztBQUN0Qix5RUFBeUU7QUFDekUseUVBQXlFO0FBQ3pFLDBFQUEwRTtBQUMxRSwwQkFBMEI7QUFDMUIsTUFBTSxlQUFlLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUU3Qzs7OztHQUlHO0FBQ0gsU0FBUyxRQUFRLENBQUMsSUFBWTtJQUM1QixPQUFPLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QixDQUFDO0FBc0NELHlHQUF5RztBQUN6Rzs7Ozs7Ozs7R0FRRztBQUNILFNBQWdCLFFBQVEsQ0FDdEIsR0FBVyxFQUNYLElBQVksRUFDWixVQUEyQixFQUFFO0lBRTdCOzs7O09BSUc7SUFDSCxTQUFTLFFBQVEsQ0FBQyxDQUFTLEVBQUUsT0FBZTtRQUMxQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4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QUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDL0QsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixnQkFBZ0IsQ0FDOUIsSUFBWSxFQUNaLFdBQW1CLE9BQU8sQ0FBQyxHQUFHLEVBQUU7SUFFaEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDNUIsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQy9DLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDdkQsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgeyBzdHJUb1U4LCB6aXBTeW5jIH0gZnJvbSBcImZmbGF0ZVwiO1xuaW1wb3J0IHR5cGUgeyBaaXBPcHRpb25zIH0gZnJvbSBcImZmbGF0ZVwiO1xuaW1wb3J0IHsgYXNzZXRDYW5Ob3RDcmVhdGVaaXBBcmNoaXZlIH0gZnJvbSBcIi4uL2Vycm9yc1wiO1xuXG5jb25zdCBIQVNIX0xFTiA9IDMyO1xuXG4vLyBVbml4IGZpbGUtdHlwZSBiaXRzIGZvciB6aXAgZXh0ZXJuYWwgYXR0cmlidXRlcyAoc3RfbW9kZSB1cHBlciBuaWJibGUpXG5jb25zdCBTX0lGTE5LID0gMG8xMjAwMDA7XG5jb25zdCBTX0lGUkVHID0gMG8xMDAwMDA7XG5jb25zdCBQRVJNX01BU0sgPSAwbzc3Nzc7XG4vLyBcInZlcnNpb24gbWFkZSBieVwiIGhvc3QgYnl0ZTsgdW56aXAgb25seSBob25vcnMgdW5peCBtb2RlIGF0dHJzIHdoZW4gc2V0XG5jb25zdCBaSVBfT1NfVU5JWCA9IDM7XG4vLyBQaW5uZWQgc28gYXJjaGl2ZXMgYXJlIGJ5dGUtcmVwcm9kdWNpYmxlIGFjcm9zcyBzeW50aHMuIGZmbGF0ZSBlbmNvZGVzXG4vLyBET1MgZGF0ZXMgZnJvbSBsb2NhbC10aW1lIGdldHRlcnMgYW5kIHJlamVjdHMgeWVhcnMgb3V0c2lkZSAxOTgwLTIwOTksXG4vLyBzbyB0aGlzIG11c3QgYmUgYSBsb2NhbC10aW1lIDE5ODAgZGF0ZSAoYSBVVEMgb25lIHVuZGVyZmxvd3MgdG8gMTk3OSBpblxuLy8gdGltZXpvbmVzIHdlc3Qgb2YgVVRDKS5cbmNvbnN0IFpJUF9FTlRSWV9NVElNRSA9IG5ldyBEYXRlKDE5ODAsIDAsIDEpO1xuXG4vKipcbiAqIFppcCBleHRlcm5hbCBhdHRyaWJ1dGVzIGZvciBhIHVuaXggbW9kZTogZmlsZS10eXBlIGFuZCBwZXJtaXNzaW9uIGJpdHNcbiAqIGJlbG9uZyBpbiB0aGUgaGlnaCAxNiBiaXRzIG9mIHRoZSAzMi1iaXQgZmllbGQuXG4gKiBAcGFyYW0gbW9kZSAtIHVuaXggc3RfbW9kZSBiaXRzICh0eXBlIHwgcGVybWlzc2lvbnMpXG4gKi9cbmZ1bmN0aW9uIHppcEF0dHJzKG1vZGU6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiAobW9kZSA8PCAxNikgPj4+IDA7XG59XG5cbi8qKlxuICogUHJlZGljYXRlIGRlY2lkaW5nIHdoZXRoZXIgYSB0cmVlIGVudHJ5IGlzIHNraXBwZWQuXG4gKiBgcmVsUGF0aGAgaXMgYWx3YXlzIGAvYC1zZXBhcmF0ZWQgYW5kIHJlbGF0aXZlIHRvIHRoZSB3YWxrIHJvb3QsIHNvIHBhdHRlcm5zXG4gKiBiZWhhdmUgaWRlbnRpY2FsbHkgb24gV2luZG93cy4gYGlzRGlyZWN0b3J5YCBpcyBzdXBwbGllZCBmcm9tIHRoZSB3YWxrZXInc1xuICogYGxzdGF0YCBzbyBgLmdpdGlnbm9yZWAgLyBgLmRvY2tlcmlnbm9yZWAtc3R5bGUgZGlyZWN0b3J5LW9ubHkgcGF0dGVybnMgY2FuXG4gKiBiZSBob25vcmVkIHdpdGhvdXQgdGhlIHByZWRpY2F0ZSBzdGF0LWluZyB0aGUgcGF0aCBpdHNlbGYuXG4gKi9cbmV4cG9ydCB0eXBlIEV4Y2x1ZGVQcmVkaWNhdGUgPSAoXG4gIHJlbFBhdGg6IHN0cmluZyxcbiAgaXNEaXJlY3Rvcnk6IGJvb2xlYW4sXG4pID0+IGJvb2xlYW47XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29weVN5bmNPcHRpb25zIHtcbiAgLyoqXG4gICAqIEVudHJpZXMgZm9yIHdoaWNoIHRoaXMgcmV0dXJucyB0cnVlIGFyZSBub3QgY29waWVkLiBDYWxsZWQgd2l0aCB0aGVcbiAgICogZW50cnkncyBgL2Atc2VwYXJhdGVkIHJlbGF0aXZlIHBhdGggYW5kIHdoZXRoZXIgaXQgaXMgYSBkaXJlY3RvcnkuXG4gICAqIEV4Y2x1ZGluZyBhIGRpcmVjdG9yeSBhbHNvIHNraXBzIGV2ZXJ5dGhpbmcgYmVsb3cgaXQsIHVubGVzc1xuICAgKiB7QGxpbmsgZGVzY2VuZEludG9FeGNsdWRlZERpcmVjdG9yaWVzfSBpcyBzZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm90aGluZyBpcyBleGNsdWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRXhjbHVkZT86IEV4Y2x1ZGVQcmVkaWNhdGU7XG5cbiAgLyoqXG4gICAqIEtlZXAgd2Fsa2luZyBpbnRvIGFuIGV4Y2x1ZGVkIGRpcmVjdG9yeSBpbnN0ZWFkIG9mIHBydW5pbmcgaXQuIFRoZVxuICAgKiBkaXJlY3RvcnkgZW50cnkgaXRzZWxmIGlzIHN0aWxsIG9taXR0ZWQ7IGl0cyBjaGlsZHJlbiBhcmUgdmlzaXRlZCBhbmRcbiAgICogcmUtdGVzdGVkIGFnYWluc3Qge0BsaW5rIHNob3VsZEV4Y2x1ZGV9LCBzbyBhIHN0cmF0ZWd5IHdpdGggbmVnYXRpb25cbiAgICogcGF0dGVybnMgKGBub2RlX21vZHVsZXNgICsgYCFub2RlX21vZHVsZXMva2VlcGApIGNhbiByZS1pbmNsdWRlIGVudHJpZXNcbiAgICogYmVsb3cgYW4gZXhjbHVkZWQgcGFyZW50LiBDb3N0cyBhIGZ1bGwgd2FsayBvZiBleGNsdWRlZCBzdWJ0cmVlcywgc28gaXRcbiAgICogaXMgb2ZmIHVubGVzcyBhIHN0cmF0ZWd5IGFza3MgZm9yIGl0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY2VuZEludG9FeGNsdWRlZERpcmVjdG9yaWVzPzogYm9vbGVhbjtcbn1cblxuLy8gRnVsbCBpbXBsZW1lbnRhdGlvbiBhdCBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUtZnMtZXh0cmEvYmxvYi9tYXN0ZXIvbGliL2NvcHkvY29weS1zeW5jLmpzXG4vKipcbiAqIENvcHkgYSBmaWxlIG9yIGRpcmVjdG9yeS4gVGhlIGRpcmVjdG9yeSBjYW4gaGF2ZSBjb250ZW50cyBhbmQgc3ViZm9sZGVycy5cbiAqIFN5bWxpbmtzIGFyZSByZWNyZWF0ZWQgYXMgc3ltbGlua3MgcmF0aGVyIHRoYW4gZGVyZWZlcmVuY2VkLCB3aGljaCBrZWVwcyB0aGVcbiAqIGNvcHkgY29uc2lzdGVudCB3aXRoIHtAbGluayBoYXNoUGF0aH0gKGl0IGhhc2hlcyBsaW5rcyBieSB0aGVpciB0YXJnZXQpIGFuZFxuICogbWFrZXMgZGFuZ2xpbmcgbGlua3MgYW5kIGxpbmsgY3ljbGVzIGhhcm1sZXNzLlxuICogQHBhcmFtIHNyYyAtIHNvdXJjZSBwYXRoXG4gKiBAcGFyYW0gZGVzdCAtIGRlc3RpbmF0aW9uIHBhdGhcbiAqIEBwYXJhbSBvcHRpb25zIC0gY29weSBiZWhhdmlvdXIsIHNlZSB7QGxpbmsgQ29weVN5bmNPcHRpb25zfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29weVN5bmMoXG4gIHNyYzogc3RyaW5nLFxuICBkZXN0OiBzdHJpbmcsXG4gIG9wdGlvbnM6IENvcHlTeW5jT3B0aW9ucyA9IHt9LFxuKSB7XG4gIC8qKlxuICAgKiBDb3BpZXMgZmlsZSBpZiBwcmVzZW50IG90aGVyd2lzZSB3YWxrcyBzdWJmb2xkZXIuXG4gICAqIEBwYXJhbSBwIC0gcGF0aCByZWxhdGl2ZSB0byBzcmMvZGVzdFxuICAgKiBAcGFyYW0gcmVsUGF0aCAtIGAvYC1zZXBhcmF0ZWQgcGF0aCByZWxhdGl2ZSB0byB0aGUgY29weSByb290XG4gICAqL1xuICBmdW5jdGlvbiBjb3B5SXRlbShwOiBzdHJpbmcsIHJlbFBhdGg6IHN0cmluZykge1xuICAgIGNvbnN0IHNvdXJjZVBhdGggPSBwYXRoLnJlc29sdmUoc3JjLCBwKTtcbiAgICBjb25zdCBzdGF0ID0gZnMubHN0YXRTeW5jKHNvdXJjZVBhdGgpO1xuICAgIGNvbnN0IGV4Y2x1ZGVkID0gISFvcHRpb25zLnNob3VsZEV4Y2x1ZGU/LihyZWxQYXRoLCBzdGF0LmlzRGlyZWN0b3J5KCkpO1xuICAgIC8vIFNraXAsIHVubGVzcyBpdCBpcyBhbiBleGNsdWRlZCBkaXJlY3RvcnkgYmVpbmcgZGVzY2VuZGVkIGludG8uXG4gICAgaWYgKFxuICAgICAgZXhjbHVkZWQgJiZcbiAgICAgICEoc3RhdC5pc0RpcmVjdG9yeSgpICYmIG9wdGlvbnMuZGVzY2VuZEludG9FeGNsdWRlZERpcmVjdG9yaWVzKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoc3RhdC5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICBmcy5zeW1saW5rU3luYyhmcy5yZWFkbGlua1N5bmMoc291cmNlUGF0aCksIHBhdGgucmVzb2x2ZShkZXN0LCBwKSk7XG4gICAgfSBlbHNlIGlmIChzdGF0LmlzRmlsZSgpKSB7XG4gICAgICBmcy5jb3B5RmlsZVN5bmMoc291cmNlUGF0aCwgcGF0aC5yZXNvbHZlKGRlc3QsIHApKTtcbiAgICB9IGVsc2UgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgd2Fsa1N1YmZvbGRlcihwLCByZWxQYXRoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENvcGllcyBjb250ZW50cyBvZiBzdWJmb2xkZXIuXG4gICAqIEBwYXJhbSBwIC0gcGF0aCByZWxhdGl2ZSB0byBzcmMvZGVzdFxuICAgKiBAcGFyYW0gcmVsUGF0aCAtIGAvYC1zZXBhcmF0ZWQgcGF0aCByZWxhdGl2ZSB0byB0aGUgY29weSByb290XG4gICAqL1xuICBmdW5jdGlvbiB3YWxrU3ViZm9sZGVyKHA6IHN0cmluZywgcmVsUGF0aDogc3RyaW5nKSB7XG4gICAgY29uc3Qgc291cmNlRGlyID0gcGF0aC5yZXNvbHZlKHNyYywgcCk7XG4gICAgZnMubWtkaXJTeW5jKHBhdGgucmVzb2x2ZShkZXN0LCBwKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgZnMucmVhZGRpclN5bmMoc291cmNlRGlyKS5mb3JFYWNoKChpdGVtOiBzdHJpbmcpID0+XG4gICAgICBjb3B5SXRlbShwYXRoLmpvaW4ocCwgaXRlbSksIHJlbFBhdGggPyBgJHtyZWxQYXRofS8ke2l0ZW19YCA6IGl0ZW0pLFxuICAgICk7XG4gIH1cblxuICB3YWxrU3ViZm9sZGVyKFwiLlwiLCBcIlwiKTtcbn1cblxuLyoqXG4gKiBaaXBzIGNvbnRlbnRzIGF0IHNyYyBhbmQgcGxhY2VzIHppcCBhcmNoaXZlIGF0IGRlc3QuXG4gKiBAcGFyYW0gc3JjIC0gZGlyZWN0b3J5IHRvIGFyY2hpdmVcbiAqIEBwYXJhbSBkZXN0IC0gcGF0aCB0byB3cml0ZSB0aGUgcmVzdWx0aW5nIHppcCB0b1xuICogQHBhcmFtIHNob3VsZEV4Y2x1ZGUgLSBlbnRyaWVzIHRvIG9taXQsIHNlZSB7QGxpbmsgQ29weVN5bmNPcHRpb25zLnNob3VsZEV4Y2x1ZGV9XG4gKiBAcGFyYW0gZGVzY2VuZEludG9FeGNsdWRlZERpcmVjdG9yaWVzIC0ga2VlcCB3YWxraW5nIGV4Y2x1ZGVkIGRpcmVjdG9yaWVzLFxuICogc2VlIHtAbGluayBDb3B5U3luY09wdGlvbnMuZGVzY2VuZEludG9FeGNsdWRlZERpcmVjdG9yaWVzfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXJjaGl2ZVN5bmMoXG4gIHNyYzogc3RyaW5nLFxuICBkZXN0OiBzdHJpbmcsXG4gIHNob3VsZEV4Y2x1ZGU/OiBFeGNsdWRlUHJlZGljYXRlLFxuICBkZXNjZW5kSW50b0V4Y2x1ZGVkRGlyZWN0b3JpZXMgPSBmYWxzZSxcbikge1xuICB0cnkge1xuICAgIGNvbnN0IGZpbGVzOiBSZWNvcmQ8c3RyaW5nLCBbVWludDhBcnJheSwgWmlwT3B0aW9uc10+ID0ge307XG4gICAgY29uc3Qgd2FsayA9IChkaXI6IHN0cmluZywgcHJlZml4OiBzdHJpbmcpID0+IHtcbiAgICAgIC8vIFNvcnRlZCBzbyBlbnRyeSBvcmRlciDigJQgYW5kIHRoZXJlZm9yZSBhcmNoaXZlIGJ5dGVzIOKAlCBjYW5ub3QgZGVwZW5kXG4gICAgICAvLyBvbiBmaWxlc3lzdGVtIGVudW1lcmF0aW9uIG9yZGVyOyBtYXRjaGVzIHRoZSBjYW5vbmljYWwgaGFzaCB3YWxrLlxuICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBmcy5yZWFkZGlyU3luYyhkaXIpLnNvcnQoKSkge1xuICAgICAgICBjb25zdCBmdWxsID0gcGF0aC5qb2luKGRpciwgZW50cnkpO1xuICAgICAgICBjb25zdCB6aXBQYXRoID0gcHJlZml4ID8gYCR7cHJlZml4fS8ke2VudHJ5fWAgOiBlbnRyeTtcbiAgICAgICAgY29uc3Qgc3RhdCA9IGZzLmxzdGF0U3luYyhmdWxsKTtcbiAgICAgICAgY29uc3QgZXhjbHVkZWQgPSAhIXNob3VsZEV4Y2x1ZGU/Lih6aXBQYXRoLCBzdGF0LmlzRGlyZWN0b3J5KCkpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZXhjbHVkZWQgJiZcbiAgICAgICAgICAhKHN0YXQuaXNEaXJlY3RvcnkoKSAmJiBkZXNjZW5kSW50b0V4Y2x1ZGVkRGlyZWN0b3JpZXMpXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0LmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAvLyBTdG9yZSB0aGUgbGluayB0YXJnZXQgYXMgdGhlIGVudHJ5IGRhdGEgd2l0aCBTX0lGTE5LIGF0dHJzIHNvXG4gICAgICAgICAgLy8gZXh0cmFjdG9ycyByZWNyZWF0ZSB0aGUgc3ltbGluayBpbnN0ZWFkIG9mIGEgY29weSBvZiB0aGUgdGFyZ2V0LlxuICAgICAgICAgIC8vIE5ldmVyIHJlY3Vyc2luZyB0aHJvdWdoIGxpbmtzIGFsc28gbWFrZXMgY3ljbGVzIHVucmVhY2hhYmxlLlxuICAgICAgICAgIGZpbGVzW3ppcFBhdGhdID0gW1xuICAgICAgICAgICAgc3RyVG9VOChmcy5yZWFkbGlua1N5bmMoZnVsbCkpLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBvczogWklQX09TX1VOSVgsXG4gICAgICAgICAgICAgIGF0dHJzOiB6aXBBdHRycyhTX0lGTE5LIHwgKHN0YXQubW9kZSAmIFBFUk1fTUFTSykpLFxuICAgICAgICAgICAgICBsZXZlbDogMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICB3YWxrKGZ1bGwsIHppcFBhdGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpbGVzW3ppcFBhdGhdID0gW1xuICAgICAgICAgICAgZnMucmVhZEZpbGVTeW5jKGZ1bGwpLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBvczogWklQX09TX1VOSVgsXG4gICAgICAgICAgICAgIGF0dHJzOiB6aXBBdHRycyhTX0lGUkVHIHwgKHN0YXQubW9kZSAmIFBFUk1fTUFTSykpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICB3YWxrKHNyYywgXCJcIik7XG4gICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgIGRlc3QsXG4gICAgICB6aXBTeW5jKGZpbGVzLCB7IGxldmVsOiA5LCBtdGltZTogWklQX0VOVFJZX01USU1FIH0pLFxuICAgICk7XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgdGhyb3cgYXNzZXRDYW5Ob3RDcmVhdGVaaXBBcmNoaXZlKHNyYywgZGVzdCwgZXJyKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhhc2hQYXRoT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBVc2UgdGhlIGNhbm9uaWNhbCBlbnRyeS1mcmFtZWQgaGFzaCBpbnN0ZWFkIG9mIHRoZSBsZWdhY3lcbiAgICogY29udGVudC1jb25jYXRlbmF0aW9uIGhhc2guIEVuYWJsZWQgdGhyb3VnaCB0aGUgYGNhbm9uaWNhbEFzc2V0SGFzaGVzYFxuICAgKiBmZWF0dXJlIGZsYWcuXG4gICAqL1xuICByZWFkb25seSBjYW5vbmljYWw/OiBib29sZWFuO1xuICAvKipcbiAgICogRnJhbWUgZm9yIGFuIGFyY2hpdmUgYXJ0aWZhY3Q6IGFyY2hpdmVTeW5jIG5ldmVyIGVtaXRzIFpJUCBkaXJlY3RvcnlcbiAgICogZW50cmllcywgc28gY2Fub25pY2FsIGhhc2hpbmcgb21pdHMgZGlyZWN0b3J5IHJlY29yZHMgYW5kIHRoZSBoYXNoXG4gICAqIHRyYWNrcyB0aGUgZW1pdHRlZCBhcmNoaXZlIGJ5dGVzIGV4YWN0bHkuIE5vbi1lbXB0eSBkaXJlY3RvcmllcyBzdGF5XG4gICAqIHZpc2libGUgdGhyb3VnaCB0aGUgcmVsYXRpdmUgcGF0aHMgb2YgdGhlaXIgY29udGVudHMuIEhhcyBubyBlZmZlY3Qgb25cbiAgICogdGhlIGxlZ2FjeSBzY2hlbWUsIHdoaWNoIG5ldmVyIHJlY29yZHMgZGlyZWN0b3JpZXMuXG4gICAqL1xuICByZWFkb25seSBhcmNoaXZlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEVudHJpZXMgZm9yIHdoaWNoIHRoaXMgcmV0dXJucyB0cnVlIGFyZSBvbWl0dGVkIGZyb20gdGhlIGRpZ2VzdC4gRXhjbHVkaW5nXG4gICAqIGEgZGlyZWN0b3J5IGFsc28gb21pdHMgZXZlcnl0aGluZyBiZWxvdyBpdCwgdW5sZXNzXG4gICAqIHtAbGluayBkZXNjZW5kSW50b0V4Y2x1ZGVkRGlyZWN0b3JpZXN9IGlzIHNldC4gVGhlIHNhbWUgcHJlZGljYXRlIG11c3QgYmVcbiAgICogZ2l2ZW4gdG8ge0BsaW5rIGNvcHlTeW5jfSBzbyB0aGUgaGFzaCBhbmQgdGhlIGVtaXR0ZWQgYXJ0aWZhY3QgZGVzY3JpYmUgdGhlXG4gICAqIHNhbWUgc2V0IG9mIGZpbGVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vdGhpbmcgaXMgZXhjbHVkZWRcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEV4Y2x1ZGU/OiBFeGNsdWRlUHJlZGljYXRlO1xuXG4gIC8qKlxuICAgKiBLZWVwIHdhbGtpbmcgaW50byBleGNsdWRlZCBkaXJlY3Rvcmllcywgc2VlXG4gICAqIHtAbGluayBDb3B5U3luY09wdGlvbnMuZGVzY2VuZEludG9FeGNsdWRlZERpcmVjdG9yaWVzfS4gTXVzdCBtYXRjaCB0aGVcbiAgICogdmFsdWUgZ2l2ZW4gdG8ge0BsaW5rIGNvcHlTeW5jfSAvIHtAbGluayBhcmNoaXZlU3luY30gc28gdGhlIGRpZ2VzdCBjb3ZlcnNcbiAgICogdGhlIHNhbWUgZmlsZSBzZXQgdGhlIGFydGlmYWN0IGNvbnRhaW5zLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY2VuZEludG9FeGNsdWRlZERpcmVjdG9yaWVzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb21wdXRlIGEgc3RhYmxlIE1ENSBoYXNoIG9mIGEgZmlsZSBvciBkaXJlY3RvcnkncyBjb250ZW50cy5cbiAqIEluIGJvdGggc2NoZW1lcyBzeW1saW5rcyBhcmUgaGFzaGVkIGJ5IHRoZWlyIG1ldGFkYXRhIChwYXRoICsgdGFyZ2V0KVxuICogaW5zdGVhZCBvZiBiZWluZyBmb2xsb3dlZCwgc28gc2hhcmVkIHRhcmdldHMgYXJlIG5vdCBkb3VibGUtY291bnRlZCBhbmRcbiAqIGN5Y2xlcyBjYW5ub3QgcmVjdXJzZTsgYSBzeW1saW5rIGF0IHRoZSByb290IGl0c2VsZiBpcyBmb2xsb3dlZCwgbWF0Y2hpbmdcbiAqIGhvdyB0aGUgYXNzZXQgc291cmNlIHBhdGggaXMgb3BlbmVkIHdoZW4gdGhlIGFydGlmYWN0IGlzIGVtaXR0ZWQuXG4gKiBAcGFyYW0gc3JjIC0gcGF0aCB0byBhIGZpbGUgb3IgZGlyZWN0b3J5IHRvIGhhc2hcbiAqIEBwYXJhbSBvcHRpb25zIC0gaGFzaCBzY2hlbWUgc2VsZWN0aW9uLCBzZWUge0BsaW5rIEhhc2hQYXRoT3B0aW9uc31cbiAqIEByZXR1cm5zIHVwcGVyY2FzZWQgaGV4IGRpZ2VzdCwgdHJ1bmNhdGVkIHRvIEhBU0hfTEVOIGNoYXJhY3RlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2hQYXRoKHNyYzogc3RyaW5nLCBvcHRpb25zOiBIYXNoUGF0aE9wdGlvbnMgPSB7fSk6IHN0cmluZyB7XG4gIGNvbnN0IGRpZ2VzdCA9IG9wdGlvbnMuY2Fub25pY2FsXG4gICAgPyBjYW5vbmljYWxIYXNoUGF0aChcbiAgICAgICAgc3JjLFxuICAgICAgICAhb3B0aW9ucy5hcmNoaXZlLFxuICAgICAgICBvcHRpb25zLnNob3VsZEV4Y2x1ZGUsXG4gICAgICAgIG9wdGlvbnMuZGVzY2VuZEludG9FeGNsdWRlZERpcmVjdG9yaWVzLFxuICAgICAgKVxuICAgIDogbGVnYWN5SGFzaFBhdGgoXG4gICAgICAgIHNyYyxcbiAgICAgICAgb3B0aW9ucy5zaG91bGRFeGNsdWRlLFxuICAgICAgICBvcHRpb25zLmRlc2NlbmRJbnRvRXhjbHVkZWREaXJlY3RvcmllcyxcbiAgICAgICk7XG4gIHJldHVybiBkaWdlc3Quc2xpY2UoMCwgSEFTSF9MRU4pLnRvVXBwZXJDYXNlKCk7XG59XG5cbi8qKlxuICogTGVnYWN5LWNvbXBhdGlibGUgaGFzaDogZmlsZSBjb250ZW50cyBmb2xkIGludG8gb25lIGRpZ2VzdCBpblxuICogZGlyZWN0b3J5LWxpc3Rpbmcgb3JkZXIsIGV4YWN0bHkgYXMgZWFybGllciByZWxlYXNlcyBkaWQsIHNvIHRyZWVzIHdpdGhvdXRcbiAqIHN5bWxpbmtzIGtlZXAgdGhlaXIgaGlzdG9yaWNhbCBoYXNoZXMuIFN5bWxpbmsgbWV0YWRhdGEgZ29lcyBpbnRvIGEgc2Vjb25kXG4gKiBkaWdlc3QsIGFuZCBvbmx5IHdoZW4gc3ltbGlua3MgZXhpc3QgYXJlIHRoZSB0d28gY29tYmluZWQgdW5kZXIgYSB0YWdnZWRcbiAqIG91dGVyIGhhc2gg4oCUIHRoZSB0YWcga2VlcHMgc3ltbGluayBtZXRhZGF0YSBpbiBhIHNlcGFyYXRlIGRvbWFpbiBmcm9tIGZpbGVcbiAqIGJ5dGVzLCBzbyBhIGZpbGUgY29udGFpbmluZyBgZm9vYCBjYW4gbmV2ZXIgY29sbGlkZSB3aXRoIGEgc3ltbGlua1xuICogdGFyZ2V0aW5nIGBmb29gLlxuICogQHBhcmFtIHNyYyAtIHBhdGggdG8gYSBmaWxlIG9yIGRpcmVjdG9yeSB0byBoYXNoXG4gKiBAcGFyYW0gc2hvdWxkRXhjbHVkZSAtIGVudHJpZXMgdG8gb21pdCwgc2VlIHtAbGluayBIYXNoUGF0aE9wdGlvbnMuc2hvdWxkRXhjbHVkZX1cbiAqIEBwYXJhbSBkZXNjZW5kSW50b0V4Y2x1ZGVkRGlyZWN0b3JpZXMgLSBrZWVwIHdhbGtpbmcgZXhjbHVkZWQgZGlyZWN0b3JpZXMsXG4gKiBzZWUge0BsaW5rIEhhc2hQYXRoT3B0aW9ucy5kZXNjZW5kSW50b0V4Y2x1ZGVkRGlyZWN0b3JpZXN9XG4gKi9cbmZ1bmN0aW9uIGxlZ2FjeUhhc2hQYXRoKFxuICBzcmM6IHN0cmluZyxcbiAgc2hvdWxkRXhjbHVkZT86IEV4Y2x1ZGVQcmVkaWNhdGUsXG4gIGRlc2NlbmRJbnRvRXhjbHVkZWREaXJlY3RvcmllcyA9IGZhbHNlLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgY29udGVudCA9IGNyeXB0by5jcmVhdGVIYXNoKFwibWQ1XCIpO1xuICBjb25zdCBsaW5rcyA9IGNyeXB0by5jcmVhdGVIYXNoKFwibWQ1XCIpO1xuICBsZXQgbGlua0NvdW50ID0gMDtcblxuICAvKipcbiAgICogV2FsayBgcGAsIGZlZWRpbmcgZmlsZSBjb250ZW50cyBhbmQgc3ltbGluayBtZXRhZGF0YSBpbnRvIHRoZSBlbmNsb3NpbmdcbiAgICogYWNjdW11bGF0b3JzLlxuICAgKiBAcGFyYW0gcCAtIHBhdGggdG8gd2Fsa1xuICAgKiBAcGFyYW0gcmVsUGF0aCAtIHBhdGggb2YgYHBgIHJlbGF0aXZlIHRvIHRoZSB3YWxrIHJvb3QsIGAvYC1zZXBhcmF0ZWRcbiAgICogQHBhcmFtIGlzUm9vdCAtIGZvbGxvdyBhIHN5bWxpbmsgb25seSBhdCB0aGUgcm9vdCwgbWF0Y2hpbmcgaG93IHRoZVxuICAgKiBhc3NldCdzIG93biBwYXRoIGlzIHJlc29sdmVkIHdoZW4gaXQgaXMgcmVhZFxuICAgKi9cbiAgZnVuY3Rpb24gaGFzaFJlY3Vyc2lvbihwOiBzdHJpbmcsIHJlbFBhdGg6IHN0cmluZywgaXNSb290ID0gZmFsc2UpIHtcbiAgICBjb25zdCBzdGF0ID0gaXNSb290ID8gZnMuc3RhdFN5bmMocCkgOiBmcy5sc3RhdFN5bmMocCk7XG4gICAgaWYgKHN0YXQuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgbGlua3MudXBkYXRlKGAke3JlbFBhdGh9XFwwJHtmcy5yZWFkbGlua1N5bmMocCl9XFwwYCk7XG4gICAgICBsaW5rQ291bnQrKztcbiAgICB9IGVsc2UgaWYgKHN0YXQuaXNGaWxlKCkpIHtcbiAgICAgIGNvbnRlbnQudXBkYXRlKGZzLnJlYWRGaWxlU3luYyhwKSk7XG4gICAgfSBlbHNlIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIGZzLnJlYWRkaXJTeW5jKHApLmZvckVhY2goKGZpbGVuYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IGVudHJ5UmVsUGF0aCA9IHJlbFBhdGggPyBgJHtyZWxQYXRofS8ke2ZpbGVuYW1lfWAgOiBmaWxlbmFtZTtcbiAgICAgICAgY29uc3QgY2hpbGRQYXRoID0gcGF0aC5yZXNvbHZlKHAsIGZpbGVuYW1lKTtcbiAgICAgICAgY29uc3QgY2hpbGRJc0RpciA9IGZzLmxzdGF0U3luYyhjaGlsZFBhdGgpLmlzRGlyZWN0b3J5KCk7XG4gICAgICAgIGlmIChzaG91bGRFeGNsdWRlPy4oZW50cnlSZWxQYXRoLCBjaGlsZElzRGlyKSkge1xuICAgICAgICAgIC8vIFNraXAsIHVubGVzcyBpdCBpcyBhbiBleGNsdWRlZCBkaXJlY3RvcnkgYmVpbmcgZGVzY2VuZGVkIGludG8uXG4gICAgICAgICAgaWYgKCEoY2hpbGRJc0RpciAmJiBkZXNjZW5kSW50b0V4Y2x1ZGVkRGlyZWN0b3JpZXMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGhhc2hSZWN1cnNpb24oY2hpbGRQYXRoLCBlbnRyeVJlbFBhdGgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaGFzaFJlY3Vyc2lvbihzcmMsIFwiXCIsIHRydWUpO1xuICBpZiAobGlua0NvdW50ID09PSAwKSB7XG4gICAgcmV0dXJuIGNvbnRlbnQuZGlnZXN0KFwiaGV4XCIpO1xuICB9XG4gIGNvbnN0IG91dGVyID0gY3J5cHRvLmNyZWF0ZUhhc2goXCJtZDVcIik7XG4gIG91dGVyLnVwZGF0ZShcImNka3RuL2Fzc2V0LWhhc2gvc3ltbGlua3MvdjFcXDBcIik7XG4gIG91dGVyLnVwZGF0ZShjb250ZW50LmRpZ2VzdChcImhleFwiKSk7XG4gIG91dGVyLnVwZGF0ZShsaW5rcy5kaWdlc3QoXCJoZXhcIikpO1xuICByZXR1cm4gb3V0ZXIuZGlnZXN0KFwiaGV4XCIpO1xufVxuXG4vKipcbiAqIENhbm9uaWNhbCBoYXNoLCBtb2RlbGVkIG9uIGdpdCB0cmVlcyBhbmQgTml4IE5BUjogZXZlcnkgZW50cnkgaXMgZnJhbWVkXG4gKiB3aXRoIGV2ZXJ5dGhpbmcgdGhhdCBhZmZlY3RzIHRoZSBlbWl0dGVkIGFydGlmYWN0IOKAlFxuICpcbiAqIC0gZmlsZXM6ICAgICAgYEYgPG1vZGU+IDxyZWxQYXRoPlxcMDxzaXplPlxcMGAgKyBjb250ZW50LCB3aGVyZSBgPG1vZGU+YCBpc1xuICogICAgICAgICAgICAgICB0aGUgb2N0YWwgcGVybWlzc2lvbiBtYXNrIChgMG83Nzc3YCBiaXRzKSB0aGF0IGFyY2hpdmVTeW5jXG4gKiAgICAgICAgICAgICAgIHByZXNlcnZlcyBpbiB6aXAgZXh0ZXJuYWwgYXR0cmlidXRlcyxcbiAqIC0gc3ltbGlua3M6ICAgYEwgPG1vZGU+IDxyZWxQYXRoPlxcMDx0YXJnZXQgYnl0ZSBsZW5ndGg+XFwwYCArIHRhcmdldCxcbiAqIC0gZGlyZWN0b3JpZXMgKGluY2x1ZGluZyBlbXB0eSBvbmVzLCB3aGljaCBjb3B5U3luYyBtYXRlcmlhbGl6ZXMpOlxuICogICAgICAgICAgICAgICBgRCA8cmVsUGF0aD5cXDBgLCB3aXRoIG5vIG1vZGUg4oCUIG5laXRoZXIgYXJjaGl2ZVN5bmMgbm9yXG4gKiAgICAgICAgICAgICAgIGNvcHlTeW5jIHByZXNlcnZlcyBkaXJlY3RvcnkgcGVybWlzc2lvbnMsXG4gKlxuICogaW4gc29ydGVkIGRpcmVjdG9yeSBvcmRlciB3aXRoIGAvYC1zZXBhcmF0ZWQgcmVsYXRpdmUgcGF0aHMsIHNvIHJlbmFtZXMsXG4gKiBlbnRyeS1ib3VuZGFyeSBzaGlmdHMsIHBlcm1pc3Npb24gY2hhbmdlcywgZW1wdHktZGlyZWN0b3J5IGNoYW5nZXMsIGFuZFxuICogZmlsZS12cy1zeW1saW5rIHN3YXBzIGFsbCBjaGFuZ2UgdGhlIGRpZ2VzdC5cbiAqIEBwYXJhbSBzcmMgLSBwYXRoIHRvIGEgZmlsZSBvciBkaXJlY3RvcnkgdG8gaGFzaFxuICogQHBhcmFtIGluY2x1ZGVEaXJlY3RvcmllcyAtIHJlY29yZCBkaXJlY3RvcnkgZW50cmllczsgZmFsc2UgZm9yIGFyY2hpdmVcbiAqIGFydGlmYWN0cywgd2hlcmUgdGhlIGVtaXR0ZWQgemlwIGhhcyBubyBkaXJlY3RvcnkgZW50cmllc1xuICogQHBhcmFtIHNob3VsZEV4Y2x1ZGUgLSBlbnRyaWVzIHRvIG9taXQsIHNlZSB7QGxpbmsgSGFzaFBhdGhPcHRpb25zLnNob3VsZEV4Y2x1ZGV9XG4gKi9cbmZ1bmN0aW9uIGNhbm9uaWNhbEhhc2hQYXRoKFxuICBzcmM6IHN0cmluZyxcbiAgaW5jbHVkZURpcmVjdG9yaWVzOiBib29sZWFuLFxuICBzaG91bGRFeGNsdWRlPzogRXhjbHVkZVByZWRpY2F0ZSxcbiAgZGVzY2VuZEludG9FeGNsdWRlZERpcmVjdG9yaWVzID0gZmFsc2UsXG4pOiBzdHJpbmcge1xuICBjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goXCJtZDVcIik7XG5cbiAgLyoqXG4gICAqIFdhbGsgYHBgLCBmcmFtaW5nIGVhY2ggZW50cnkgaW50byB0aGUgZW5jbG9zaW5nIGhhc2ggYWNjdW11bGF0b3IuXG4gICAqIEBwYXJhbSBwIC0gcGF0aCB0byB3YWxrXG4gICAqIEBwYXJhbSByZWxQYXRoIC0gcGF0aCBvZiBgcGAgcmVsYXRpdmUgdG8gdGhlIHdhbGsgcm9vdCwgYC9gLXNlcGFyYXRlZFxuICAgKiBAcGFyYW0gaXNSb290IC0gZm9sbG93IGEgc3ltbGluayBvbmx5IGF0IHRoZSByb290LCBtYXRjaGluZyBob3cgdGhlXG4gICAqIGFzc2V0J3Mgb3duIHBhdGggaXMgcmVzb2x2ZWQgd2hlbiB0aGUgYXJ0aWZhY3QgaXMgZW1pdHRlZFxuICAgKi9cbiAgZnVuY3Rpb24gaGFzaFJlY3Vyc2lvbihwOiBzdHJpbmcsIHJlbFBhdGg6IHN0cmluZywgaXNSb290ID0gZmFsc2UpIHtcbiAgICBjb25zdCBzdGF0ID0gaXNSb290ID8gZnMuc3RhdFN5bmMocCkgOiBmcy5sc3RhdFN5bmMocCk7XG4gICAgY29uc3QgbW9kZSA9IChzdGF0Lm1vZGUgJiBQRVJNX01BU0spLnRvU3RyaW5nKDgpO1xuICAgIGlmIChzdGF0LmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZzLnJlYWRsaW5rU3luYyhwKTtcbiAgICAgIGhhc2gudXBkYXRlKGBMICR7bW9kZX0gJHtyZWxQYXRofVxcMCR7QnVmZmVyLmJ5dGVMZW5ndGgodGFyZ2V0KX1cXDBgKTtcbiAgICAgIGhhc2gudXBkYXRlKHRhcmdldCk7XG4gICAgfSBlbHNlIGlmIChzdGF0LmlzRmlsZSgpKSB7XG4gICAgICBjb25zdCBkYXRhID0gZnMucmVhZEZpbGVTeW5jKHApO1xuICAgICAgaGFzaC51cGRhdGUoYEYgJHttb2RlfSAke3JlbFBhdGh9XFwwJHtkYXRhLmxlbmd0aH1cXDBgKTtcbiAgICAgIGhhc2gudXBkYXRlKGRhdGEpO1xuICAgIH0gZWxzZSBpZiAoc3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAvLyBSZWNvcmRzIHRoZSBgRGAgZW50cnkgZXZlbiBmb3IgYSBkZXNjZW5kZWQtaW50byBleGNsdWRlZCBkaXJlY3RvcnksXG4gICAgICAvLyBtYXRjaGluZyB0aGUgZW1wdHkgZGlyZWN0b3J5IGNvcHlTeW5jIGxlYXZlcyBvbiBkaXNrLlxuICAgICAgaWYgKHJlbFBhdGggJiYgaW5jbHVkZURpcmVjdG9yaWVzKSB7XG4gICAgICAgIGhhc2gudXBkYXRlKGBEICR7cmVsUGF0aH1cXDBgKTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMocCkuc29ydCgpKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5UmVsUGF0aCA9IHJlbFBhdGggPyBgJHtyZWxQYXRofS8ke2ZpbGVuYW1lfWAgOiBmaWxlbmFtZTtcbiAgICAgICAgY29uc3QgY2hpbGRQYXRoID0gcGF0aC5yZXNvbHZlKHAsIGZpbGVuYW1lKTtcbiAgICAgICAgY29uc3QgY2hpbGRJc0RpciA9IGZzLmxzdGF0U3luYyhjaGlsZFBhdGgpLmlzRGlyZWN0b3J5KCk7XG4gICAgICAgIGlmIChzaG91bGRFeGNsdWRlPy4oZW50cnlSZWxQYXRoLCBjaGlsZElzRGlyKSkge1xuICAgICAgICAgIC8vIFNraXAsIHVubGVzcyBpdCBpcyBhbiBleGNsdWRlZCBkaXJlY3RvcnkgYmVpbmcgZGVzY2VuZGVkIGludG8uXG4gICAgICAgICAgaWYgKCEoY2hpbGRJc0RpciAmJiBkZXNjZW5kSW50b0V4Y2x1ZGVkRGlyZWN0b3JpZXMpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaGFzaFJlY3Vyc2lvbihjaGlsZFBhdGgsIGVudHJ5UmVsUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFzaFJlY3Vyc2lvbihzcmMsIFwiXCIsIHRydWUpO1xuICByZXR1cm4gaGFzaC5kaWdlc3QoXCJoZXhcIik7XG59XG5cbi8qKlxuICogQnVpbGQgYSBwcmVkaWNhdGUgbWF0Y2hpbmcgdGhlIGV4Y2x1c2lvbiBmb3JtcyBhY2NlcHRlZCBieVxuICogYEFzc2V0SGFzaE9wdGlvbnMuZXhjbHVkZWAgKHZpYSBgRXhjbHVkZUlnbm9yZVN0cmF0ZWd5YCk6IGFuIGV4YWN0IHJlbGF0aXZlXG4gKiBwYXRoLCBhIGAqLmV4dGAgc3VmZml4LCBvciBhIGRpcmVjdG9yeSAod2l0aCBvciB3aXRob3V0IGEgdHJhaWxpbmcgYC9gKSxcbiAqIHdoaWNoIGFsc28gZXhjbHVkZXMgaXRzIGNvbnRlbnRzLlxuICogRGVsaWJlcmF0ZWx5IG5vdCBhIGZ1bGwgZ2xvYiBpbXBsZW1lbnRhdGlvbiDigJQgYCoqYCwgYD9gLCBjaGFyYWN0ZXIgY2xhc3NlcyBhbmRcbiAqIGAhYCBuZWdhdGlvbiBhcmUgbm90IHN1cHBvcnRlZCwgYW5kIGEgcGF0dGVybiBpcyBuZXZlciBpbnRlcnByZXRlZCBhc1xuICogYW5jaG9yaW5nIHRvIGEgc3ViZGlyZWN0b3J5IGl0IGRvZXMgbm90IG5hbWUuXG4gKiBUaGUgcmV0dXJuZWQgbWF0Y2hlciBsb29rcyBvbmx5IGF0IHRoZSBwYXRoLCBub3QgYXQgd2hldGhlciB0aGUgZW50cnkgaXMgYVxuICogZGlyZWN0b3J5OiBgZGlyYCBhbmQgYGRpci9gIGJvdGggbWF0Y2ggYSBkaXJlY3RvcnkgbmFtZWQgYGRpcmAgYW5kIGl0c1xuICogY29udGVudHMuIEl0IGlzIHRoZXJlZm9yZSBuYXJyb3dlciB0aGFuIHtAbGluayBFeGNsdWRlUHJlZGljYXRlfSwgd2hpY2ggYWxzb1xuICogcmVjZWl2ZXMgYW4gYGlzRGlyZWN0b3J5YCBmbGFnIGZvciBzdHJhdGVnaWVzIHRoYXQgbmVlZCBpdC5cbiAqIEBwYXJhbSBleGNsdWRlIC0gcGF0dGVybnMgdG8gZXhjbHVkZVxuICogQHJldHVybnMgcHJlZGljYXRlIG92ZXIgYC9gLXNlcGFyYXRlZCBwYXRocyByZWxhdGl2ZSB0byB0aGUgYXNzZXQgcm9vdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhjbHVkZU1hdGNoZXIoXG4gIGV4Y2x1ZGU6IHN0cmluZ1tdLFxuKTogKHJlbGF0aXZlUGF0aDogc3RyaW5nKSA9PiBib29sZWFuIHtcbiAgLy8gYC9gLXNlcGFyYXRlZCB0aHJvdWdob3V0OiByZWxhdGl2ZSBwYXRocyBhcmUgbm9ybWFsaXplZCBiZWZvcmUgbWF0Y2hpbmcsIHNvXG4gIC8vIGBkaXIvY2hpbGRgIHBhdHRlcm5zIHdvcmsgdGhlIHNhbWUgb24gV2luZG93cy5cbiAgY29uc3QgcGF0dGVybnMgPSBleGNsdWRlLm1hcCgocCkgPT4gcC5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKSk7XG4gIHJldHVybiAocmVsYXRpdmVQYXRoOiBzdHJpbmcpID0+IHtcbiAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICAgIGlmIChwYXR0ZXJuLnN0YXJ0c1dpdGgoXCIqLlwiKSAmJiByZWxhdGl2ZVBhdGguZW5kc1dpdGgocGF0dGVybi5zbGljZSgxKSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCBkaXIgPSBwYXR0ZXJuLmVuZHNXaXRoKFwiL1wiKSA/IHBhdHRlcm4uc2xpY2UoMCwgLTEpIDogcGF0dGVybjtcbiAgICAgIGlmIChyZWxhdGl2ZVBhdGggPT09IGRpciB8fCByZWxhdGl2ZVBhdGguc3RhcnRzV2l0aChgJHtkaXJ9L2ApKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG59XG5cbi8qKlxuICogV2FsayB1cHdhcmQgZnJvbSBgcm9vdFBhdGhgIGxvb2tpbmcgZm9yIGEgZmlsZSB3aXRoIHRoZSBnaXZlbiBuYW1lLlxuICogUmV0dXJucyB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgZmlyc3QgbWF0Y2gsIG9yIGBudWxsYCBpZiB0aGUgc2VhcmNoXG4gKiByZWFjaGVzIHRoZSBmaWxlc3lzdGVtIHJvb3Qgd2l0aG91dCBmaW5kaW5nIGl0LlxuICogQHBhcmFtIGZpbGUgLSBmaWxlbmFtZSB0byBzZWFyY2ggZm9yXG4gKiBAcGFyYW0gcm9vdFBhdGggLSBkaXJlY3RvcnkgdG8gc3RhcnQgdGhlIHNlYXJjaCBmcm9tIChkZWZhdWx0cyB0byBjd2QpXG4gKiBAcmV0dXJucyBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBmaWxlLCBvciBudWxsIGlmIG5vdCBmb3VuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZEZpbGVBYm92ZUN3ZChcbiAgZmlsZTogc3RyaW5nLFxuICByb290UGF0aDogc3RyaW5nID0gcHJvY2Vzcy5jd2QoKSxcbik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBmdWxsUGF0aCA9IHBhdGgucmVzb2x2ZShyb290UGF0aCwgZmlsZSk7XG4gIGlmIChmcy5leGlzdHNTeW5jKGZ1bGxQYXRoKSkge1xuICAgIHJldHVybiBmdWxsUGF0aDtcbiAgfVxuXG4gIGNvbnN0IHBhcmVudERpciA9IHBhdGgucmVzb2x2ZShyb290UGF0aCwgXCIuLlwiKTtcbiAgaWYgKGZzLmV4aXN0c1N5bmMocGFyZW50RGlyKSAmJiBwYXJlbnREaXIgIT09IHJvb3RQYXRoKSB7XG4gICAgcmV0dXJuIGZpbmRGaWxlQWJvdmVDd2QoZmlsZSwgcGFyZW50RGlyKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuIl19
@@ -1,10 +1,43 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.makeUniqueId = makeUniqueId;
4
37
  // Copyright (c) HashiCorp, Inc
5
38
  // SPDX-License-Identifier: MPL-2.0
6
39
  // tslint:disable-next-line:no-var-requires
7
- const crypto = require("crypto");
40
+ const crypto = __importStar(require("crypto"));
8
41
  const errors_1 = require("../errors");
9
42
  /**
10
43
  * Resources with this ID are hidden from humans
@@ -95,4 +128,4 @@ function removeDupes(path) {
95
128
  }
96
129
  return ret;
97
130
  }
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pcXVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ByaXZhdGUvdW5pcXVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBbUNBLG9DQWlDQztBQXBFRCwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLDJDQUEyQztBQUMzQyxpQ0FBaUM7QUFDakMsc0NBQWdFO0FBRWhFOzs7OztHQUtHO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRyxVQUFVLENBQUM7QUFFeEM7O0dBRUc7QUFDSCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFFNUIsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3JCLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUV2QixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDbkIsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLENBQUMsb0JBQW9CO0FBQy9DLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUV2Qjs7Ozs7Ozs7R0FRRztBQUNILFNBQWdCLFlBQVksQ0FBQyxVQUFvQjtJQUMvQyxVQUFVLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDO0lBRXZELElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM1QixNQUFNLElBQUEsNENBQW1DLEdBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsMkVBQTJFO0lBQzNFLDJFQUEyRTtJQUMzRSxnQ0FBZ0M7SUFDaEMsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzVCLHFFQUFxRTtRQUNyRSx5RUFBeUU7UUFDekUsd0VBQXdFO1FBQ3hFLHFFQUFxRTtRQUNyRSw2Q0FBNkM7UUFDN0MsTUFBTSxTQUFTLEdBQUcsMEJBQTBCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFNUQsMEVBQTBFO1FBQzFFLG1CQUFtQjtRQUNuQixJQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksVUFBVSxFQUFFLENBQUM7WUFDbkMsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbEMsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQztTQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxvQkFBb0IsQ0FBQztTQUN6QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUM7U0FDaEIsS0FBSyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUUzQixPQUFPLEtBQUssR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ25DLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxRQUFRLENBQUMsSUFBYztJQUM5QixNQUFNLEdBQUcsR0FBRyxNQUFNO1NBQ2YsVUFBVSxDQUFDLEtBQUssQ0FBQztTQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMzQixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakIsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUM5QyxDQUFDO0FBRUQsK0NBQStDO0FBQy9DLFNBQVMsMEJBQTBCLENBQUMsQ0FBUztJQUMzQyxPQUFPLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFFRCwrQ0FBK0M7QUFDL0MsU0FBUyx3QkFBd0IsQ0FBQyxDQUFTO0lBQ3pDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxQyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLFdBQVcsQ0FBQyxJQUFjO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7SUFFaEMsS0FBSyxNQUFNLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUM3QixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDakUsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tdmFyLXJlcXVpcmVzXG5pbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IHsgY2Fubm90Q2FsY0lkRm9yRW1wdHlTZXRPZkNvbXBvbmVudHMgfSBmcm9tIFwiLi4vZXJyb3JzXCI7XG5cbi8qKlxuICogUmVzb3VyY2VzIHdpdGggdGhpcyBJRCBhcmUgaGlkZGVuIGZyb20gaHVtYW5zXG4gKlxuICogVGhleSBkbyBub3QgYXBwZWFyIGluIHRoZSBodW1hbi1yZWFkYWJsZSBwYXJ0IG9mIHRoZSBsb2dpY2FsIElELFxuICogYnV0IHRoZXkgYXJlIGluY2x1ZGVkIGluIHRoZSBoYXNoIGNhbGN1bGF0aW9uLlxuICovXG5jb25zdCBISURERU5fRlJPTV9IVU1BTl9JRCA9IFwiUmVzb3VyY2VcIjtcblxuLyoqXG4gKiBSZXNvdXJjZXMgd2l0aCB0aGlzIElEIGFyZSBjb21wbGV0ZSBoaWRkZW4gZnJvbSB0aGUgbG9naWNhbCBJRCBjYWxjdWxhdGlvbi5cbiAqL1xuY29uc3QgSElEREVOX0lEID0gXCJEZWZhdWx0XCI7XG5cbmNvbnN0IFBBVEhfU0VQID0gXCIvXCI7XG5jb25zdCBVTklRVUVfU0VQID0gXCJfXCI7XG5cbmNvbnN0IEhBU0hfTEVOID0gODtcbmNvbnN0IE1BWF9IVU1BTl9MRU4gPSAyNDA7IC8vIG1heCBJRCBsZW4gaXMgMjU1XG5jb25zdCBNQVhfSURfTEVOID0gMjU1O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgYSB1bmlxdWUgSUQgZm9yIGEgc2V0IG9mIHRleHR1YWwgY29tcG9uZW50cy5cbiAqXG4gKiBUaGlzIGlzIGRvbmUgYnkgY2FsY3VsYXRpbmcgYSBoYXNoIG9uIHRoZSBmdWxsIHBhdGggYW5kIHVzaW5nIGl0IGFzIGEgc3VmZml4XG4gKiBvZiBhIGxlbmd0aC1saW1pdGVkIFwiaHVtYW5cIiByZW5kaXRpb24gb2YgdGhlIHBhdGggY29tcG9uZW50cy5cbiAqXG4gKiBAcGFyYW0gY29tcG9uZW50cyBUaGUgcGF0aCBjb21wb25lbnRzXG4gKiBAcmV0dXJucyBhIHVuaXF1ZSBhbHBoYS1udW1lcmljIGlkZW50aWZpZXIgd2l0aCBhIG1heGltdW0gbGVuZ3RoIG9mIDI1NVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZVVuaXF1ZUlkKGNvbXBvbmVudHM6IHN0cmluZ1tdKSB7XG4gIGNvbXBvbmVudHMgPSBjb21wb25lbnRzLmZpbHRlcigoeCkgPT4geCAhPT0gSElEREVOX0lEKTtcblxuICBpZiAoY29tcG9uZW50cy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBjYW5ub3RDYWxjSWRGb3JFbXB0eVNldE9mQ29tcG9uZW50cygpO1xuICB9XG5cbiAgLy8gdG9wLWxldmVsIHJlc291cmNlcyB3aWxsIHNpbXBseSB1c2UgdGhlIGBuYW1lYCBhcy1pcyBpbiBvcmRlciB0byBzdXBwb3J0XG4gIC8vIHRyYW5zcGFyZW50IG1pZ3JhdGlvbiBvZiBjbG91ZGZvcm1hdGlvbiB0ZW1wbGF0ZXMgdG8gdGhlIENESyB3aXRob3V0IHRoZVxuICAvLyBuZWVkIHRvIHJlbmFtZSBhbGwgcmVzb3VyY2VzLlxuICBpZiAoY29tcG9uZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAvLyB3ZSBmaWx0ZXIgb3V0IG5vbi1hbHBoYSBjaGFyYWN0ZXJzIGJ1dCB0aGF0IGlzIGFjdHVhbGx5IGEgYmFkIGlkZWFcbiAgICAvLyBiZWNhdXNlIGl0IGNvdWxkIGNyZWF0ZSBjb25mbGljdHMgKFwiQS1CXCIgYW5kIFwiQUJcIiB3aWxsIHJlbmRlciB0aGUgc2FtZVxuICAgIC8vIGxvZ2ljYWwgSUQpLiBzYWRseSwgY2hhbmdpbmcgaXQgaW4gdGhlIDEueCB2ZXJzaW9uIGxpbmUgaXMgaW1wb3NzaWJsZVxuICAgIC8vIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJyZWFraW5nIGNoYW5nZS4gd2Ugc2hvdWxkIGNvbnNpZGVyIGZvciB2Mi4wLlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvNjQyMVxuICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHJlbW92ZURpc2FsbG93ZWRDaGFyYWN0ZXJzKGNvbXBvbmVudHNbMF0pO1xuXG4gICAgLy8gaWYgb3VyIGNhbmRpZGF0ZSBpcyBzaG9ydCBlbm91Z2gsIHVzZSBpdCBhcyBpcy4gb3RoZXJ3aXNlLCBmYWxsIGJhY2sgdG9cbiAgICAvLyB0aGUgbm9ybWFsIG1vZGUuXG4gICAgaWYgKGNhbmRpZGF0ZS5sZW5ndGggPD0gTUFYX0lEX0xFTikge1xuICAgICAgcmV0dXJuIGNhbmRpZGF0ZTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYXNoID0gcGF0aEhhc2goY29tcG9uZW50cyk7XG4gIGNvbnN0IGh1bWFuID0gcmVtb3ZlRHVwZXMoY29tcG9uZW50cylcbiAgICAuZmlsdGVyKCh4KSA9PiB4ICE9PSBISURERU5fRlJPTV9IVU1BTl9JRClcbiAgICAubWFwKChzKSA9PiByZW1vdmVEaXNhbGxvd2VkQ2hhcmFjdGVycyhzKSlcbiAgICAuam9pbihVTklRVUVfU0VQKVxuICAgIC5zbGljZSgwLCBNQVhfSFVNQU5fTEVOKTtcblxuICByZXR1cm4gaHVtYW4gKyBVTklRVUVfU0VQICsgaGFzaDtcbn1cblxuLyoqXG4gKiBUYWtlIGEgaGFzaCBvZiB0aGUgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBUaGUgaGFzaCBpcyBsaW1pdGVkIGluIHNpemUuXG4gKi9cbmZ1bmN0aW9uIHBhdGhIYXNoKHBhdGg6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgY29uc3QgbWQ1ID0gY3J5cHRvXG4gICAgLmNyZWF0ZUhhc2goXCJtZDVcIilcbiAgICAudXBkYXRlKHBhdGguam9pbihQQVRIX1NFUCkpXG4gICAgLmRpZ2VzdChcImhleFwiKTtcbiAgcmV0dXJuIG1kNS5zbGljZSgwLCBIQVNIX0xFTikudG9VcHBlckNhc2UoKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmZ1bmN0aW9uIHJlbW92ZURpc2FsbG93ZWRDaGFyYWN0ZXJzKHM6IHN0cmluZykge1xuICByZXR1cm4gcmVtb3ZlTm9uQWxwaGFudW1lcmljU2VwKHMpO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZnVuY3Rpb24gcmVtb3ZlTm9uQWxwaGFudW1lcmljU2VwKHM6IHN0cmluZykge1xuICByZXR1cm4gcy5yZXBsYWNlKC9bXkEtWmEtejAtOV8tXS9nLCBcIlwiKTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgZHVwbGljYXRlIFwidGVybXNcIiBmcm9tIHRoZSBwYXRoIGxpc3RcbiAqXG4gKiBJZiB0aGUgcHJldmlvdXMgcGF0aCBjb21wb25lbnQgbmFtZSBlbmRzIHdpdGggdGhpcyBjb21wb25lbnQgbmFtZSwgc2tpcCB0aGVcbiAqIGN1cnJlbnQgY29tcG9uZW50LlxuICovXG5mdW5jdGlvbiByZW1vdmVEdXBlcyhwYXRoOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcmV0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBwYXRoKSB7XG4gICAgaWYgKHJldC5sZW5ndGggPT09IDAgfHwgIXJldFtyZXQubGVuZ3RoIC0gMV0uZW5kc1dpdGgoY29tcG9uZW50KSkge1xuICAgICAgcmV0LnB1c2goY29tcG9uZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuIl19
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pcXVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ByaXZhdGUvdW5pcXVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUNBLG9DQWlDQztBQXBFRCwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLDJDQUEyQztBQUMzQywrQ0FBaUM7QUFDakMsc0NBQWdFO0FBRWhFOzs7OztHQUtHO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRyxVQUFVLENBQUM7QUFFeEM7O0dBRUc7QUFDSCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFFNUIsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3JCLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUV2QixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDbkIsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLENBQUMsb0JBQW9CO0FBQy9DLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUV2Qjs7Ozs7Ozs7R0FRRztBQUNILFNBQWdCLFlBQVksQ0FBQyxVQUFvQjtJQUMvQyxVQUFVLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDO0lBRXZELElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM1QixNQUFNLElBQUEsNENBQW1DLEdBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsMkVBQTJFO0lBQzNFLDJFQUEyRTtJQUMzRSxnQ0FBZ0M7SUFDaEMsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzVCLHFFQUFxRTtRQUNyRSx5RUFBeUU7UUFDekUsd0VBQXdFO1FBQ3hFLHFFQUFxRTtRQUNyRSw2Q0FBNkM7UUFDN0MsTUFBTSxTQUFTLEdBQUcsMEJBQTBCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFNUQsMEVBQTBFO1FBQzFFLG1CQUFtQjtRQUNuQixJQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksVUFBVSxFQUFFLENBQUM7WUFDbkMsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbEMsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQztTQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxvQkFBb0IsQ0FBQztTQUN6QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUM7U0FDaEIsS0FBSyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUUzQixPQUFPLEtBQUssR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ25DLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxRQUFRLENBQUMsSUFBYztJQUM5QixNQUFNLEdBQUcsR0FBRyxNQUFNO1NBQ2YsVUFBVSxDQUFDLEtBQUssQ0FBQztTQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMzQixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakIsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUM5QyxDQUFDO0FBRUQsK0NBQStDO0FBQy9DLFNBQVMsMEJBQTBCLENBQUMsQ0FBUztJQUMzQyxPQUFPLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFFRCwrQ0FBK0M7QUFDL0MsU0FBUyx3QkFBd0IsQ0FBQyxDQUFTO0lBQ3pDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxQyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLFdBQVcsQ0FBQyxJQUFjO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7SUFFaEMsS0FBSyxNQUFNLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUM3QixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDakUsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tdmFyLXJlcXVpcmVzXG5pbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IHsgY2Fubm90Q2FsY0lkRm9yRW1wdHlTZXRPZkNvbXBvbmVudHMgfSBmcm9tIFwiLi4vZXJyb3JzXCI7XG5cbi8qKlxuICogUmVzb3VyY2VzIHdpdGggdGhpcyBJRCBhcmUgaGlkZGVuIGZyb20gaHVtYW5zXG4gKlxuICogVGhleSBkbyBub3QgYXBwZWFyIGluIHRoZSBodW1hbi1yZWFkYWJsZSBwYXJ0IG9mIHRoZSBsb2dpY2FsIElELFxuICogYnV0IHRoZXkgYXJlIGluY2x1ZGVkIGluIHRoZSBoYXNoIGNhbGN1bGF0aW9uLlxuICovXG5jb25zdCBISURERU5fRlJPTV9IVU1BTl9JRCA9IFwiUmVzb3VyY2VcIjtcblxuLyoqXG4gKiBSZXNvdXJjZXMgd2l0aCB0aGlzIElEIGFyZSBjb21wbGV0ZSBoaWRkZW4gZnJvbSB0aGUgbG9naWNhbCBJRCBjYWxjdWxhdGlvbi5cbiAqL1xuY29uc3QgSElEREVOX0lEID0gXCJEZWZhdWx0XCI7XG5cbmNvbnN0IFBBVEhfU0VQID0gXCIvXCI7XG5jb25zdCBVTklRVUVfU0VQID0gXCJfXCI7XG5cbmNvbnN0IEhBU0hfTEVOID0gODtcbmNvbnN0IE1BWF9IVU1BTl9MRU4gPSAyNDA7IC8vIG1heCBJRCBsZW4gaXMgMjU1XG5jb25zdCBNQVhfSURfTEVOID0gMjU1O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgYSB1bmlxdWUgSUQgZm9yIGEgc2V0IG9mIHRleHR1YWwgY29tcG9uZW50cy5cbiAqXG4gKiBUaGlzIGlzIGRvbmUgYnkgY2FsY3VsYXRpbmcgYSBoYXNoIG9uIHRoZSBmdWxsIHBhdGggYW5kIHVzaW5nIGl0IGFzIGEgc3VmZml4XG4gKiBvZiBhIGxlbmd0aC1saW1pdGVkIFwiaHVtYW5cIiByZW5kaXRpb24gb2YgdGhlIHBhdGggY29tcG9uZW50cy5cbiAqXG4gKiBAcGFyYW0gY29tcG9uZW50cyBUaGUgcGF0aCBjb21wb25lbnRzXG4gKiBAcmV0dXJucyBhIHVuaXF1ZSBhbHBoYS1udW1lcmljIGlkZW50aWZpZXIgd2l0aCBhIG1heGltdW0gbGVuZ3RoIG9mIDI1NVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZVVuaXF1ZUlkKGNvbXBvbmVudHM6IHN0cmluZ1tdKSB7XG4gIGNvbXBvbmVudHMgPSBjb21wb25lbnRzLmZpbHRlcigoeCkgPT4geCAhPT0gSElEREVOX0lEKTtcblxuICBpZiAoY29tcG9uZW50cy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBjYW5ub3RDYWxjSWRGb3JFbXB0eVNldE9mQ29tcG9uZW50cygpO1xuICB9XG5cbiAgLy8gdG9wLWxldmVsIHJlc291cmNlcyB3aWxsIHNpbXBseSB1c2UgdGhlIGBuYW1lYCBhcy1pcyBpbiBvcmRlciB0byBzdXBwb3J0XG4gIC8vIHRyYW5zcGFyZW50IG1pZ3JhdGlvbiBvZiBjbG91ZGZvcm1hdGlvbiB0ZW1wbGF0ZXMgdG8gdGhlIENESyB3aXRob3V0IHRoZVxuICAvLyBuZWVkIHRvIHJlbmFtZSBhbGwgcmVzb3VyY2VzLlxuICBpZiAoY29tcG9uZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAvLyB3ZSBmaWx0ZXIgb3V0IG5vbi1hbHBoYSBjaGFyYWN0ZXJzIGJ1dCB0aGF0IGlzIGFjdHVhbGx5IGEgYmFkIGlkZWFcbiAgICAvLyBiZWNhdXNlIGl0IGNvdWxkIGNyZWF0ZSBjb25mbGljdHMgKFwiQS1CXCIgYW5kIFwiQUJcIiB3aWxsIHJlbmRlciB0aGUgc2FtZVxuICAgIC8vIGxvZ2ljYWwgSUQpLiBzYWRseSwgY2hhbmdpbmcgaXQgaW4gdGhlIDEueCB2ZXJzaW9uIGxpbmUgaXMgaW1wb3NzaWJsZVxuICAgIC8vIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJyZWFraW5nIGNoYW5nZS4gd2Ugc2hvdWxkIGNvbnNpZGVyIGZvciB2Mi4wLlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvNjQyMVxuICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHJlbW92ZURpc2FsbG93ZWRDaGFyYWN0ZXJzKGNvbXBvbmVudHNbMF0pO1xuXG4gICAgLy8gaWYgb3VyIGNhbmRpZGF0ZSBpcyBzaG9ydCBlbm91Z2gsIHVzZSBpdCBhcyBpcy4gb3RoZXJ3aXNlLCBmYWxsIGJhY2sgdG9cbiAgICAvLyB0aGUgbm9ybWFsIG1vZGUuXG4gICAgaWYgKGNhbmRpZGF0ZS5sZW5ndGggPD0gTUFYX0lEX0xFTikge1xuICAgICAgcmV0dXJuIGNhbmRpZGF0ZTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYXNoID0gcGF0aEhhc2goY29tcG9uZW50cyk7XG4gIGNvbnN0IGh1bWFuID0gcmVtb3ZlRHVwZXMoY29tcG9uZW50cylcbiAgICAuZmlsdGVyKCh4KSA9PiB4ICE9PSBISURERU5fRlJPTV9IVU1BTl9JRClcbiAgICAubWFwKChzKSA9PiByZW1vdmVEaXNhbGxvd2VkQ2hhcmFjdGVycyhzKSlcbiAgICAuam9pbihVTklRVUVfU0VQKVxuICAgIC5zbGljZSgwLCBNQVhfSFVNQU5fTEVOKTtcblxuICByZXR1cm4gaHVtYW4gKyBVTklRVUVfU0VQICsgaGFzaDtcbn1cblxuLyoqXG4gKiBUYWtlIGEgaGFzaCBvZiB0aGUgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBUaGUgaGFzaCBpcyBsaW1pdGVkIGluIHNpemUuXG4gKi9cbmZ1bmN0aW9uIHBhdGhIYXNoKHBhdGg6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgY29uc3QgbWQ1ID0gY3J5cHRvXG4gICAgLmNyZWF0ZUhhc2goXCJtZDVcIilcbiAgICAudXBkYXRlKHBhdGguam9pbihQQVRIX1NFUCkpXG4gICAgLmRpZ2VzdChcImhleFwiKTtcbiAgcmV0dXJuIG1kNS5zbGljZSgwLCBIQVNIX0xFTikudG9VcHBlckNhc2UoKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmZ1bmN0aW9uIHJlbW92ZURpc2FsbG93ZWRDaGFyYWN0ZXJzKHM6IHN0cmluZykge1xuICByZXR1cm4gcmVtb3ZlTm9uQWxwaGFudW1lcmljU2VwKHMpO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZnVuY3Rpb24gcmVtb3ZlTm9uQWxwaGFudW1lcmljU2VwKHM6IHN0cmluZykge1xuICByZXR1cm4gcy5yZXBsYWNlKC9bXkEtWmEtejAtOV8tXS9nLCBcIlwiKTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgZHVwbGljYXRlIFwidGVybXNcIiBmcm9tIHRoZSBwYXRoIGxpc3RcbiAqXG4gKiBJZiB0aGUgcHJldmlvdXMgcGF0aCBjb21wb25lbnQgbmFtZSBlbmRzIHdpdGggdGhpcyBjb21wb25lbnQgbmFtZSwgc2tpcCB0aGVcbiAqIGN1cnJlbnQgY29tcG9uZW50LlxuICovXG5mdW5jdGlvbiByZW1vdmVEdXBlcyhwYXRoOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcmV0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBwYXRoKSB7XG4gICAgaWYgKHJldC5sZW5ndGggPT09IDAgfHwgIXJldFtyZXQubGVuZ3RoIC0gMV0uZW5kc1dpdGgoY29tcG9uZW50KSkge1xuICAgICAgcmV0LnB1c2goY29tcG9uZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuIl19
package/lib/resource.js CHANGED
@@ -1,5 +1,4 @@
1
1
  "use strict";
2
- var _a;
3
2
  Object.defineProperty(exports, "__esModule", { value: true });
4
3
  exports.Resource = void 0;
5
4
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
@@ -12,12 +11,12 @@ const terraform_stack_1 = require("./terraform-stack");
12
11
  * @deprecated - Please use Construct from the constructs package instead.
13
12
  */
14
13
  class Resource extends constructs_1.Construct {
14
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.Resource", version: "0.25.0-pre.21" };
15
+ stack;
15
16
  constructor(scope, id) {
16
17
  super(scope, id);
17
18
  this.stack = terraform_stack_1.TerraformStack.of(this);
18
19
  }
19
20
  }
20
21
  exports.Resource = Resource;
21
- _a = JSII_RTTI_SYMBOL_1;
22
- Resource[_a] = { fqn: "cdktn.Resource", version: "0.25.0-pre.2" };
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLDJDQUFtRDtBQUNuRCx1REFBbUQ7QUFhbkQ7OztHQUdHO0FBQ0gsTUFBc0IsUUFBUyxTQUFRLHNCQUFTO0lBRzlDLFlBQVksS0FBZ0IsRUFBRSxFQUFVO1FBQ3RDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxnQ0FBYyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDOztBQU5ILDRCQU9DIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IENvbnN0cnVjdCwgSUNvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBUZXJyYWZvcm1TdGFjayB9IGZyb20gXCIuL3RlcnJhZm9ybS1zdGFja1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElSZXNvdXJjZSBleHRlbmRzIElDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogVGhlIHN0YWNrIGluIHdoaWNoIHRoaXMgcmVzb3VyY2UgaXMgZGVmaW5lZC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrOiBUZXJyYWZvcm1TdGFjaztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUmVzb3VyY2VDb25zdHJ1Y3RvciB7XG4gIG5ldyAoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBJUmVzb3VyY2U7XG59XG5cbi8qKlxuICogQSBjb25zdHJ1Y3Qgd2hpY2ggcmVwcmVzZW50cyBhIHJlc291cmNlLlxuICogQGRlcHJlY2F0ZWQgLSBQbGVhc2UgdXNlIENvbnN0cnVjdCBmcm9tIHRoZSBjb25zdHJ1Y3RzIHBhY2thZ2UgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJlc291cmNlIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSVJlc291cmNlIHtcbiAgcHVibGljIHJlYWRvbmx5IHN0YWNrOiBUZXJyYWZvcm1TdGFjaztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLnN0YWNrID0gVGVycmFmb3JtU3RhY2sub2YodGhpcyk7XG4gIH1cbn1cbiJdfQ==
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsMkNBQW1EO0FBQ25ELHVEQUFtRDtBQWFuRDs7O0dBR0c7QUFDSCxNQUFzQixRQUFTLFNBQVEsc0JBQVM7O0lBQzlCLEtBQUssQ0FBaUI7SUFFdEMsWUFBWSxLQUFnQixFQUFFLEVBQVU7UUFDdEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLGdDQUFjLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7O0FBTkgsNEJBT0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0IHsgQ29uc3RydWN0LCBJQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFRlcnJhZm9ybVN0YWNrIH0gZnJvbSBcIi4vdGVycmFmb3JtLXN0YWNrXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJlc291cmNlIGV4dGVuZHMgSUNvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgaW4gd2hpY2ggdGhpcyByZXNvdXJjZSBpcyBkZWZpbmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2s6IFRlcnJhZm9ybVN0YWNrO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSZXNvdXJjZUNvbnN0cnVjdG9yIHtcbiAgbmV3IChzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IElSZXNvdXJjZTtcbn1cblxuLyoqXG4gKiBBIGNvbnN0cnVjdCB3aGljaCByZXByZXNlbnRzIGEgcmVzb3VyY2UuXG4gKiBAZGVwcmVjYXRlZCAtIFBsZWFzZSB1c2UgQ29uc3RydWN0IGZyb20gdGhlIGNvbnN0cnVjdHMgcGFja2FnZSBpbnN0ZWFkLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUmVzb3VyY2UgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJUmVzb3VyY2Uge1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhY2s6IFRlcnJhZm9ybVN0YWNrO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMuc3RhY2sgPSBUZXJyYWZvcm1TdGFjay5vZih0aGlzKTtcbiAgfVxufVxuIl19