@mnemonica/tactica 0.4.2 → 0.4.4

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.
@@ -51,11 +51,18 @@ export declare class TypesGenerator {
51
51
  private generateCompleteInstanceInterface;
52
52
  /**
53
53
  * Emit one nested-ctor field: dual signatures (construct + the
54
- * chain-tip CALL form). The call branch returns exactly what the
55
- * construct branch returns, so async tips stay consistent with the
56
- * existing async modeling, whatever it emits.
54
+ * chain-tip CALL form). Both branches resolve to the constructor
55
+ * result type — Promise<InstanceType> for async handlers, the plain
56
+ * instance type otherwise (getConstructorResultType).
57
57
  */
58
58
  private pushChildConstructorField;
59
+ /**
60
+ * The type a constructor invocation resolves to: the instance type, or
61
+ * Promise<InstanceType> for async handlers (isAsync). The instance type
62
+ * itself is never wrapped — only the constructor RESULT positions
63
+ * (subtype property twins + registry entries).
64
+ */
65
+ private getConstructorResultType;
59
66
  /**
60
67
  * Generate a simple type declaration for a single type
61
68
  */
package/lib/generator.js CHANGED
@@ -284,18 +284,29 @@ class TypesGenerator {
284
284
  }
285
285
  /**
286
286
  * Emit one nested-ctor field: dual signatures (construct + the
287
- * chain-tip CALL form). The call branch returns exactly what the
288
- * construct branch returns, so async tips stay consistent with the
289
- * existing async modeling, whatever it emits.
287
+ * chain-tip CALL form). Both branches resolve to the constructor
288
+ * result type — Promise<InstanceType> for async handlers, the plain
289
+ * instance type otherwise (getConstructorResultType).
290
290
  */
291
291
  pushChildConstructorField(lines, indentStr, child) {
292
- const childInstanceType = this.getInstanceTypeName(child);
292
+ const childInstanceType = this.getConstructorResultType(child);
293
293
  const constructorParams = this.generateConstructorParams(child);
294
294
  lines.push(`${indentStr}\t${child.name}: {`);
295
295
  lines.push(`${indentStr}\t\tnew ${constructorParams}: ${childInstanceType};`);
296
296
  lines.push(`${indentStr}\t\t${constructorParams}: ${childInstanceType};`);
297
297
  lines.push(`${indentStr}\t};`);
298
298
  }
299
+ /**
300
+ * The type a constructor invocation resolves to: the instance type, or
301
+ * Promise<InstanceType> for async handlers (isAsync). The instance type
302
+ * itself is never wrapped — only the constructor RESULT positions
303
+ * (subtype property twins + registry entries).
304
+ */
305
+ getConstructorResultType(node) {
306
+ const instanceType = this.getInstanceTypeName(node);
307
+ const result = node.isAsync ? `Promise<${instanceType}>` : instanceType;
308
+ return result;
309
+ }
299
310
  /**
300
311
  * Generate a simple type declaration for a single type
301
312
  */
@@ -357,7 +368,7 @@ class TypesGenerator {
357
368
  continue;
358
369
  }
359
370
  const fullPath = this.getFullPath(node);
360
- const instanceType = this.getInstanceTypeName(node);
371
+ const instanceType = this.getConstructorResultType(node);
361
372
  // Generate typed constructor signature for nested types with properties
362
373
  const constructorSig = this.generateConstructorSignature(node);
363
374
  lines.push(`\t\t'${fullPath}': ${constructorSig} => ${instanceType};`);
@@ -376,7 +387,7 @@ class TypesGenerator {
376
387
  lines.push(`\tinterface ${registryInterfaceName} {`);
377
388
  for (const node of nodes) {
378
389
  const fullPath = this.getFullPath(node);
379
- const instanceType = this.getInstanceTypeName(node);
390
+ const instanceType = this.getConstructorResultType(node);
380
391
  const constructorSig = this.generateConstructorSignature(node);
381
392
  lines.push(`\t\t'${fullPath}': ${constructorSig} => ${instanceType};`);
382
393
  }
@@ -564,4 +575,4 @@ class TypesGenerator {
564
575
  }
565
576
  }
566
577
  exports.TypesGenerator = TypesGenerator;
567
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2dlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUViLDJDQUE2QjtBQWdCN0I7O0dBRUc7QUFDSCxNQUFhLGNBQWM7SUFLMUIsWUFDUyxLQUFvQixFQUM1QixHQUFHLEdBQUcsS0FBSyxFQUNYLFNBQVMsR0FBRyxVQUFVLEVBQ2QsaUJBQTBDO1FBSDFDLFVBQUssR0FBTCxLQUFLLENBQWU7UUFHcEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUF5QjtRQU4zQyxxQkFBZ0IsR0FBc0IsRUFBRSxDQUFDO1FBUWhELElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssVUFBVSxDQUFFLFFBQWdCO1FBQ25DLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQy9DLENBQUM7SUFFRDs7Ozs7OztVQU9HO0lBQ0gsMEJBQTBCO1FBQ3pCLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztRQUMzQixNQUFNLGNBQWMsR0FBYSxFQUFFLENBQUM7UUFFcEMsMkRBQTJEO1FBQzNELEtBQUssQ0FBQyxJQUFJLENBQUMsa0RBQWtELENBQUMsQ0FBQztRQUMvRCxLQUFLLENBQUMsSUFBSSxDQUFDLHlFQUF5RSxDQUFDLENBQUM7UUFDdEYsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNmLEtBQUssQ0FBQyxJQUFJLENBQUMsOERBQThELENBQUMsQ0FBQztRQUMzRSxLQUFLLENBQUMsSUFBSSxDQUFDLDREQUE0RCxDQUFDLENBQUM7UUFDekUsS0FBSyxDQUFDLElBQUksQ0FB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LE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ25ELE9BQU8sYUFBYSxDQUFDO0lBQ3RCLENBQUM7Q0FDRDtBQXprQkQsd0NBeWtCQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7XG5cdFR5cGVOb2RlLCBHZW5lcmF0ZWRUeXBlcywgUmVzb2x1dGlvbkVycm9yIFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFR5cGVHcmFwaEltcGwgfSBmcm9tICcuL2dyYXBoJztcblxuLyoqXG4gKiBQYXRoLWF3YXJlIHJlc29sdmVyIGZvciBtbmVtb25pY2EgZ3JhcGggdHlwZSBuYW1lcyByZWZlcmVuY2VkIGluc2lkZSB0eXBlXG4gKiBzdHJpbmdzIHdoaWxlIGdlbmVyYXRpbmcgb3V0cHV0LiBSZXR1cm5zIHRoZSB1bmlxdWUgdHlwZSwgJ2FtYmlndW91cycsIG9yXG4gKiB1bmRlZmluZWQgKHJlc29sdmVzIHRvIG5vdGhpbmcpIOKAlCBzZWUgcmVzb2x2ZUdyYXBoVHlwZVJlZmVyZW5jZS5cbiAqL1xuZXhwb3J0IHR5cGUgR3JhcGhSZWZlcmVuY2VSZXNvbHZlciA9IChcblx0c2ltcGxlTmFtZTogc3RyaW5nLFxuXHRjdXJyZW50Tm9kZTogVHlwZU5vZGVcbikgPT4gVHlwZU5vZGUgfCAnYW1iaWd1b3VzJyB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGZpbGUgZ2VuZXJhdG9yXG4gKi9cbmV4cG9ydCBjbGFzcyBUeXBlc0dlbmVyYXRvciB7XG5cdHByaXZhdGUgZXNtOiBib29sZWFuO1xuXHRwcml2YXRlIG91dHB1dERpcjogc3RyaW5nO1xuXHRwcml2YXRlIHJlc29sdXRpb25FcnJvcnM6IFJlc29sdXRpb25FcnJvcltdID0gW107XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgZ3JhcGg6IFR5cGVHcmFwaEltcGwsXG5cdFx0ZXNtID0gZmFsc2UsXG5cdFx0b3V0cHV0RGlyID0gJy50YWN0aWNhJyxcblx0XHRwcml2YXRlIHJlZmVyZW5jZVJlc29sdmVyPzogR3JhcGhSZWZlcmVuY2VSZXNvbHZlclxuXHQpIHtcblx0XHR0aGlzLmVzbSA9IGVzbTtcblx0XHR0aGlzLm91dHB1dERpciA9IG91dHB1dERpcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgaW1wb3J0IHBhdGggd2l0aCBvcHRpb25hbCAuanMgZXh0ZW5zaW9uIGZvciBFU00gTm9kZU5leHRcblx0ICovXG5cdHByaXZhdGUgaW1wb3J0UGF0aCAocmVsYXRpdmU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuZXNtID8gYCR7cmVsYXRpdmV9LmpzYCA6IHJlbGF0aXZlO1xuXHR9XG5cblx0LyoqXG5cdFx0KiBHZW5lcmF0ZSBnbG9iYWwgYXVnbWVudGF0aW9uIGZpbGUgdGhhdCBhdWdtZW50cyB1c2VyIGNsYXNzZXMgZGlyZWN0bHlcblx0XHQqIFRoaXMgYWxsb3dzIHVzaW5nIGRlY29yYXRlZCBjbGFzc2VzIHdpdGhvdXQgbWFudWFsIHR5cGUgY2FzdGluZ1xuXHRcdCpcblx0XHQqIEFsbCB0eXBlcyBhcmUgcGxhY2VkIGluIHRoZSBnbG9iYWwgc2NvcGUgdmlhIGRlY2xhcmUgZ2xvYmFsLCB3aGljaCBhbGxvd3Ncblx0XHQqIHRoZW0gdG8gYmUgYWNjZXNzZWQgZnJvbSBhbnkgbW9kdWxlIHdpdGhvdXQgaW1wb3J0cy4gSW50ZXJmYWNlcyBkZWNsYXJlZFxuXHRcdCogaW4gdGhlIGdsb2JhbCBzY29wZSB3aWxsIG1lcmdlIHdpdGggY2xhc3NlcyBvZiB0aGUgc2FtZSBuYW1lIGluIHVzZXIgbW9kdWxlcy5cblx0XHQqL1xuXHRnZW5lcmF0ZUdsb2JhbEF1Z21lbnRhdGlvbiAoKTogR2VuZXJhdGVkVHlwZXMge1xuXHRcdGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnN0IGdlbmVyYXRlZFR5cGVzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdFx0Ly8gSGVhZGVyIC0gbWFrZSB0aGlzIGEgbW9kdWxlIHNvIHdlIGNhbiB1c2UgZGVjbGFyZSBnbG9iYWxcblx0XHRsaW5lcy5wdXNoKCcvLyBHZW5lcmF0ZWQgYnkgQG1uZW1vbmljYS90YWN0aWNhIC0gRE8gTk9UIEVESVQnKTtcblx0XHRsaW5lcy5wdXNoKCcvLyBUaGlzIGZpbGUgcHJvdmlkZXMgYXV0b21hdGljIHR5cGUgYXVnbWVudGF0aW9uIGZvciBkZWNvcmF0ZWQgY2xhc3NlcycpO1xuXHRcdGxpbmVzLnB1c2goJycpO1xuXHRcdGxpbmVzLnB1c2goJy8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZSAqLycpO1xuXHRcdGxpbmVzLnB1c2goJy8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1pbnRlcmZhY2UgKi8nKTtcblx0XHRsaW5lcy5wdXNoKCcnKTtcblxuXHRcdC8vIEltcG9ydCBQcm90b0ZsYXQgZnJvbSBtbmVtb25pY2Fcblx0XHRsaW5lcy5wdXNoKCdpbXBvcnQgdHlwZSB7IFByb3RvRmxhdCB9IGZyb20gXFwnbW5lbW9uaWNhXFwnOycpO1xuXHRcdGxpbmVzLnB1c2goJycpO1xuXG5cdFx0Ly8gTWFrZSB0aGlzIGEgbW9kdWxlIHNvIHdlIGNhbiB1c2UgZGVjbGFyZSBnbG9iYWxcblx0XHRsaW5lcy5wdXNoKCdleHBvcnQge307Jyk7XG5cdFx0bGluZXMucHVzaCgnJyk7XG5cblx0XHQvLyBBbGwgdHlwZXMgZ28gaW5zaWRlIGRlY2xhcmUgZ2xvYmFsIHNvIHRoZXkgYXJlIGdsb2JhbGx5IGFjY2Vzc2libGVcblx0XHRsaW5lcy5wdXNoKCdkZWNsYXJlIGdsb2JhbCB7Jyk7XG5cdFx0bGluZXMucHVzaCgnJyk7XG5cblxuXHRcdC8vIEdlbmVyYXRlIGluc3RhbmNlIHR5cGVzIGZvciBhbGwgZGVmYXVsdC1jb2xsZWN0aW9uIHR5cGVzIC0gaW4gZ2xvYmFsIHNjb3BlXG5cdFx0Zm9yIChjb25zdCByb290IG9mIHRoaXMuZ3JhcGgucm9vdHMudmFsdWVzKCkpIHtcblx0XHRcdGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLmdyYXBoLmRmcyhyb290KSkge1xuXHRcdFx0XHRpZiAobm9kZS5jb2xsZWN0aW9uSWQpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBpbnN0YW5jZU5hbWUgPSB0aGlzLmdldEluc3RhbmNlVHlwZU5hbWUobm9kZSk7XG5cdFx0XHRcdGdlbmVyYXRlZFR5cGVzLnB1c2goaW5zdGFuY2VOYW1lKTtcblx0XHRcdFx0Ly8gUm9vdCB0eXBlcyBhcmUgZGVjbGFyZWQgYXMgaW50ZXJmYWNlcyBiZWxvdyAoZGVjbGFyYXRpb25cblx0XHRcdFx0Ly8gbWVyZ2luZyB3aXRoIEBkZWNvcmF0ZSBjbGFzc2VzKS4gRW1pdHRpbmcgYHR5cGUgWGAgaGVyZSBhc1xuXHRcdFx0XHQvLyB3ZWxsIHdvdWxkIGNvbGxpZGUgd2l0aCBgaW50ZXJmYWNlIFhgIGluIHRoZSBzYW1lIGdsb2JhbFxuXHRcdFx0XHQvLyBzY29wZSAoVFMyMzAwKSwgYW5kIHRoZSByb290IGludGVyZmFjZSBhbHJlYWR5IGNhcnJpZXNcblx0XHRcdFx0Ly8gZXZlcnl0aGluZyB0aGUgYWxpYXMgd291bGQgKHByb3BzICsgY2hpbGQgY29uc3RydWN0b3JzKS5cblx0XHRcdFx0aWYgKCFub2RlLnBhcmVudCkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuZ2VuZXJhdGVJbnN0YW5jZVR5cGUobm9kZSwgbGluZXMsIDEpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEdlbmVyYXRlIGNsYXNzIGludGVyZmFjZXMgLSBpbiBnbG9iYWwgc2NvcGUgZm9yIGRlY2xhcmF0aW9uIG1lcmdpbmdcblx0XHQvLyBUaGVzZSBpbnRlcmZhY2VzIHdpbGwgbWVyZ2Ugd2l0aCBjbGFzc2VzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdXNlciBtb2R1bGVzXG5cdFx0bGluZXMucHVzaCgnXHQvLyBDbGFzcyBpbnRlcmZhY2VzIGZvciBkZWNsYXJhdGlvbiBtZXJnaW5nJyk7XG5cdFx0bGluZXMucHVzaCgnXHQvLyBUaGVzZSBtZXJnZSB3aXRoIEBkZWNvcmF0ZSgpIGNsYXNzZXMgdG8gcHJvdmlkZSBwcm9wZXIgdHlwaW5nJyk7XG5cdFx0bGluZXMucHVzaCgnJyk7XG5cdFx0Zm9yIChjb25zdCByb290IG9mIHRoaXMuZ3JhcGgucm9vdHMudmFsdWVzKCkpIHtcblx0XHRcdGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLmdyYXBoLmRmcyhyb290KSkge1xuXHRcdFx0XHRpZiAobm9kZS5jb2xsZWN0aW9uSWQpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLmdlbmVyYXRlQ2xhc3NJbnRlcmZhY2Uobm9kZSwgbGluZXMsIDEpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGxpbmVzLnB1c2goJ30nKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRjb250ZW50IDogbGluZXMuam9pbignXFxuJyksXG5cdFx0XHR0eXBlcyAgIDogZ2VuZXJhdGVkVHlwZXMsXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHRcdCAqIEdlbmVyYXRlIGluc3RhbmNlIHR5cGUgYWxpYXMgKGRlc2NyaWJlcyB3aGF0IHRoZSBpbnN0YW5jZSBJUylcblx0XHQgKiBVc2VzIFByb3RvRmxhdCBmb3IgcHJvcGVyIGluaGVyaXRhbmNlIChleGNsdWRlcyBvdmVycmlkZGVuIHBhcmVudCBwcm9wcylcblx0XHQgKi9cblx0cHJpdmF0ZSBnZW5lcmF0ZUluc3RhbmNlVHlwZSAobm9kZTogVHlwZU5vZGUsIGxpbmVzOiBzdHJpbmdbXSwgaW5kZW50OiBudW1iZXIpOiB2b2lkIHtcblx0XHRjb25zdCBpbmRlbnRTdHIgPSAnXFx0Jy5yZXBlYXQoaW5kZW50KTtcblx0XHRjb25zdCBpbnN0YW5jZU5hbWUgPSB0aGlzLmdldEluc3RhbmNlVHlwZU5hbWUobm9kZSk7XG5cblx0XHRpZiAobm9kZS5wYXJlbnQpIHtcblx0XHRcdC8vIE5lc3RlZCB0eXBlOiBVc2UgUHJvdG9GbGF0IHRvIHByb3Blcmx5IGV4Y2x1ZGUgb3ZlcnJpZGRlbiBwcm9wZXJ0aWVzXG5cdFx0XHRsaW5lcy5wdXNoKGAke2luZGVudFN0cn10eXBlICR7aW5zdGFuY2VOYW1lfSA9IFByb3RvRmxhdDwke3RoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShub2RlLnBhcmVudCl9LCB7YCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFJvb3QgdHlwZToganVzdCB0aGUgcHJvcGVydGllcyBvYmplY3Rcblx0XHRcdGxpbmVzLnB1c2goYCR7aW5kZW50U3RyfXR5cGUgJHtpbnN0YW5jZU5hbWV9ID0ge2ApO1xuXHRcdH1cblxuXHRcdC8vIEFkZCBpbnN0YW5jZSBwcm9wZXJ0aWVzXG5cdFx0Zm9yIChjb25zdCBbIHByb3BOYW1lLCBwcm9wSW5mbyBdIG9mIG5vZGUucHJvcGVydGllcy5lbnRyaWVzKCkpIHtcblx0XHRcdGNvbnN0IG9wdGlvbmFsID0gcHJvcEluZm8ub3B0aW9uYWwgPyAnPycgOiAnJztcblx0XHRcdGNvbnN0IHJlYWRvbmx5ID0gcHJvcEluZm8ucmVhZG9ubHkgPyAncmVhZG9ubHkgJyA6ICcnO1xuXHRcdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9XFx0JHtyZWFkb25seX0ke3Byb3BOYW1lfSR7b3B0aW9uYWx9OiAke3Byb3BJbmZvLnR5cGV9O2ApO1xuXHRcdH1cblxuXHRcdC8vIEFkZCBuZXN0ZWQgY29uc3RydWN0b3IgcHJvcGVydGllcyBmb3Igbm9uLWxlYWYgbm9kZXMg4oCUIG1pcnJvcnNcblx0XHQvLyBnZW5lcmF0ZUNvbXBsZXRlSW5zdGFuY2VJbnRlcmZhY2UgKHR5cGVzLnRzKTogc3VidHlwZXMgY29uc3RydWN0XG5cdFx0Ly8gZnJvbSBwYXJlbnQgaW5zdGFuY2VzIGF0IGFueSBkZXB0aCwgbm90IG9ubHkgZnJvbSByb290cy5cblx0XHRpZiAobm9kZS5jaGlsZHJlbi5zaXplID4gMCkge1xuXHRcdFx0Zm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuLnZhbHVlcygpKSB7XG5cdFx0XHRcdHRoaXMucHVzaENoaWxkQ29uc3RydWN0b3JGaWVsZChsaW5lcywgaW5kZW50U3RyLCBjaGlsZCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRm9yIG5lc3RlZCB0eXBlcywgYWRkIHRoaXMgbm9kZSdzIGNvbnN0cnVjdG9yIGFuZCBhbGwgc2libGluZ3MgYXNcblx0XHQvLyB1bmRlZmluZWQgKHN0cmljdC1jaGFpbiBiZWhhdmlvcjsgcGFyZW50IHVuZGVmaW5lZHMgY29tZSB2aWEgUHJvdG9GbGF0KVxuXHRcdGlmIChub2RlLnBhcmVudCkge1xuXHRcdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9XFx0JHtub2RlLm5hbWV9OiB1bmRlZmluZWQ7YCk7XG5cdFx0XHRmb3IgKGNvbnN0IHNpYmxpbmcgb2Ygbm9kZS5wYXJlbnQuY2hpbGRyZW4udmFsdWVzKCkpIHtcblx0XHRcdFx0aWYgKHNpYmxpbmcubmFtZSAhPT0gbm9kZS5uYW1lKSB7XG5cdFx0XHRcdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9XFx0JHtzaWJsaW5nLm5hbWV9OiB1bmRlZmluZWQ7YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDbG9zZSB0aGUgdHlwZSBwcm9wZXJseSAtIFByb3RvRmxhdCB1c2VzIH0+OyBmb3IgbmVzdGVkLCB9OyBmb3Igcm9vdFxuXHRcdGlmIChub2RlLnBhcmVudCkge1xuXHRcdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9fT47YCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxpbmVzLnB1c2goYCR7aW5kZW50U3RyfX07YCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIGVtcHR5IGxpbmUgYWZ0ZXIgZWFjaCB0eXBlXG5cdFx0bGluZXMucHVzaCgnJyk7XG5cdH1cblxuXHQvKipcblx0XHQgKiBHZW5lcmF0ZSBjbGFzcyBpbnRlcmZhY2UgZm9yIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gbWVyZ2luZ1xuXHRcdCAqIFRoaXMgbWVyZ2VzIHdpdGggdGhlIGFjdHVhbCBjbGFzcyB0byBwcm92aWRlIHByb3BlciB0eXBpbmdcblx0XHQgKi9cblx0cHJpdmF0ZSBnZW5lcmF0ZUNsYXNzSW50ZXJmYWNlIChub2RlOiBUeXBlTm9kZSwgbGluZXM6IHN0cmluZ1tdLCBpbmRlbnQ6IG51bWJlcik6IHZvaWQge1xuXHRcdGNvbnN0IGluZGVudFN0ciA9ICdcXHQnLnJlcGVhdChpbmRlbnQpO1xuXG5cdFx0Ly8gQnVpbGQgZXh0ZW5kcyBjbGF1c2Vcblx0XHRjb25zdCBleHRlbmRzVHlwZXM6IHN0cmluZ1tdID0gW107XG5cdFx0aWYgKG5vZGUucGFyZW50KSB7XG5cdFx0XHRleHRlbmRzVHlwZXMucHVzaChub2RlLnBhcmVudC5uYW1lKTtcblx0XHR9XG5cblx0XHRjb25zdCBleHRlbmRzQ2xhdXNlID0gZXh0ZW5kc1R5cGVzLmxlbmd0aCA+IDBcblx0XHRcdD8gYCBleHRlbmRzICR7ZXh0ZW5kc1R5cGVzLmpvaW4oJywgJyl9YFxuXHRcdFx0OiAnJztcblxuXHRcdC8vIEludGVyZmFjZSB3aXRoIHNhbWUgbmFtZSBhcyBjbGFzcyAtIFR5cGVTY3JpcHQgbWVyZ2VzIHRoZXNlXG5cdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9aW50ZXJmYWNlICR7bm9kZS5uYW1lfSR7ZXh0ZW5kc0NsYXVzZX0ge2ApO1xuXHRcdFx0XG5cdFx0Ly8gQWRkIGFsbCBpbnN0YW5jZSBwcm9wZXJ0aWVzIChmb3IgdHlwZSBtZXJnaW5nKVxuXHRcdGZvciAoY29uc3QgWyBwcm9wTmFtZSwgcHJvcEluZm8gXSBvZiBub2RlLnByb3BlcnRpZXMuZW50cmllcygpKSB7XG5cdFx0XHRjb25zdCBvcHRpb25hbCA9IHByb3BJbmZvLm9wdGlvbmFsID8gJz8nIDogJyc7XG5cdFx0XHRjb25zdCByZWFkb25seSA9IHByb3BJbmZvLnJlYWRvbmx5ID8gJ3JlYWRvbmx5ICcgOiAnJztcblx0XHRcdGxpbmVzLnB1c2goYCR7aW5kZW50U3RyfVxcdCR7cmVhZG9ubHl9JHtwcm9wTmFtZX0ke29wdGlvbmFsfTogJHtwcm9wSW5mby50eXBlfTtgKTtcblx0XHR9XG5cblx0XHQvLyBBZGQgc3VidHlwZSBjb25zdHJ1Y3RvcnMgKG5vbi1vcHRpb25hbCBzbyB0aGV5J3JlIGFjY2Vzc2libGUpIC0gb25seSBmb3Igcm9vdCB0eXBlc1xuXHRcdGlmICghbm9kZS5wYXJlbnQpIHtcblx0XHRcdGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbi52YWx1ZXMoKSkge1xuXHRcdFx0XHR0aGlzLnB1c2hDaGlsZENvbnN0cnVjdG9yRmllbGQobGluZXMsIGluZGVudFN0ciwgY2hpbGQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XG5cdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9fWApO1xuXHRcdGxpbmVzLnB1c2goJycpO1xuXHR9XG5cdFx0XG5cdC8qKlxuXHRcdCogR2VuZXJhdGUgYSB0eXBlcy50cyBmaWxlIHdpdGggY29tcGxldGUgaW5zdGFuY2UgaW50ZXJmYWNlc1xuXHRcdCogVGhpcyBpbmNsdWRlcyBhbGwgcHJvcGVydGllcyBleHRyYWN0ZWQgZnJvbSB0aGUgY29uc3RydWN0b3JzXG5cdFx0Ki9cblx0Z2VuZXJhdGVUeXBlc0ZpbGUgKCk6IEdlbmVyYXRlZFR5cGVzIHtcblx0XHRjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcblx0XHRjb25zdCBnZW5lcmF0ZWRUeXBlczogc3RyaW5nW10gPSBbXTtcblxuXHRcdC8vIEhlYWRlclxuXHRcdGxpbmVzLnB1c2goJy8vIEdlbmVyYXRlZCBieSBAbW5lbW9uaWNhL3RhY3RpY2EgLSBETyBOT1QgRURJVCcpO1xuXHRcdGxpbmVzLnB1c2goJy8vIFRoaXMgZmlsZSBwcm92aWRlcyBjb21wbGV0ZSBUeXBlU2NyaXB0IGludGVyZmFjZXMgZm9yIE1uZW1vbmljYSB0eXBlcycpO1xuXHRcdGxpbmVzLnB1c2goJycpO1xuXHRcdGxpbmVzLnB1c2goJy8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZSAqLycpO1xuXHRcdGxpbmVzLnB1c2goJy8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1pbnRlcmZhY2UgKi8nKTtcblx0XHRsaW5lcy5wdXNoKCcnKTtcblxuXHRcdC8vIEltcG9ydCBQcm90b0ZsYXQgZnJvbSBtbmVtb25pY2Fcblx0XHRsaW5lcy5wdXNoKCdpbXBvcnQgdHlwZSB7IFByb3RvRmxhdCB9IGZyb20gXFwnbW5lbW9uaWNhXFwnOycpO1xuXHRcdGxpbmVzLnB1c2goJycpO1xuXG5cdFx0Ly8gR2VuZXJhdGUgY29tcGxldGUgaW5zdGFuY2UgaW50ZXJmYWNlcyBmb3IgZGVmYXVsdC1jb2xsZWN0aW9uIHR5cGVzIGFuZFxuXHRcdC8vIGZvciBjdXN0b20gY29sbGVjdGlvbnMgdGhhdCBkZWNsYXJlIGEgdXNlci1wcm92aWRlZCByZWdpc3RyeSBpbnRlcmZhY2Vcblx0XHQvLyAoT3B0aW9uIEIpLiBDdXN0b20tY29sbGVjdGlvbiB0eXBlcyB3aXRob3V0IGEgcmVnaXN0cnkgaW50ZXJmYWNlIGFyZVxuXHRcdC8vIGlzb2xhdGVkIGF0IHJ1bnRpbWUgYW5kIGFyZSBub3QgZW1pdHRlZC5cblx0XHRmb3IgKGNvbnN0IHJvb3Qgb2YgdGhpcy5ncmFwaC5yb290cy52YWx1ZXMoKSkge1xuXHRcdFx0Zm9yIChjb25zdCBub2RlIG9mIHRoaXMuZ3JhcGguZGZzKHJvb3QpKSB7XG5cdFx0XHRcdGlmIChub2RlLmNvbGxlY3Rpb25JZCAmJiAhbm9kZS5yZWdpc3RyeUludGVyZmFjZU5hbWUpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBpbnRlcmZhY2VOYW1lID0gdGhpcy5nZXRJbnN0YW5jZVR5cGVOYW1lKG5vZGUpO1xuXHRcdFx0XHRnZW5lcmF0ZWRUeXBlcy5wdXNoKGludGVyZmFjZU5hbWUpO1xuXHRcdFx0XHR0aGlzLmdlbmVyYXRlQ29tcGxldGVJbnN0YW5jZUludGVyZmFjZShub2RlLCBsaW5lcyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGNvbnRlbnQgOiBsaW5lcy5qb2luKCdcXG4nKSxcblx0XHRcdHR5cGVzICAgOiBnZW5lcmF0ZWRUeXBlcyxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdFx0ICogR2VuZXJhdGUgYSBjb21wbGV0ZSBpbnN0YW5jZSB0eXBlIGFsaWFzIHdpdGggYWxsIHByb3BlcnRpZXNcblx0XHQgKiBUaGlzIGlzIGZvciB0aGUgdHlwZXMudHMgZmlsZSB0aGF0IHVzZXJzIGltcG9ydCBmcm9tXG5cdFx0ICovXG5cdHByaXZhdGUgZ2VuZXJhdGVDb21wbGV0ZUluc3RhbmNlSW50ZXJmYWNlIChub2RlOiBUeXBlTm9kZSwgbGluZXM6IHN0cmluZ1tdKTogdm9pZCB7XG5cdFx0Y29uc3QgdHlwZU5hbWUgPSB0aGlzLmdldEluc3RhbmNlVHlwZU5hbWUobm9kZSk7XG5cblx0XHRpZiAobm9kZS5wYXJlbnQpIHtcblx0XHRcdC8vIE5lc3RlZCB0eXBlOiBVc2UgUHJvdG9GbGF0IHRvIHByb3Blcmx5IGV4Y2x1ZGUgb3ZlcnJpZGRlbiBwcm9wZXJ0aWVzXG5cdFx0XHRsaW5lcy5wdXNoKGBleHBvcnQgdHlwZSAke3R5cGVOYW1lfSA9IFByb3RvRmxhdDwke3RoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShub2RlLnBhcmVudCl9LCB7YCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFJvb3QgdHlwZToganVzdCB0aGUgcHJvcGVydGllcyBvYmplY3Rcblx0XHRcdGxpbmVzLnB1c2goYGV4cG9ydCB0eXBlICR7dHlwZU5hbWV9ID0ge2ApO1xuXHRcdH1cblxuXHRcdC8vIEFkZCBpbnN0YW5jZSBwcm9wZXJ0aWVzIGV4dHJhY3RlZCBmcm9tIHRoZSBjb25zdHJ1Y3RvclxuXHRcdGZvciAoY29uc3QgWyBwcm9wTmFtZSwgcHJvcEluZm8gXSBvZiBub2RlLnByb3BlcnRpZXMuZW50cmllcygpKSB7XG5cdFx0XHRjb25zdCBvcHRpb25hbCA9IHByb3BJbmZvLm9wdGlvbmFsID8gJz8nIDogJyc7XG5cdFx0XHRjb25zdCByZWFkb25seSA9IHByb3BJbmZvLnJlYWRvbmx5ID8gJ3JlYWRvbmx5ICcgOiAnJztcblx0XHRcdGxpbmVzLnB1c2goYFxcdCR7cmVhZG9ubHl9JHtwcm9wTmFtZX0ke29wdGlvbmFsfTogJHt0aGlzLnJlc29sdmVUeXBlSW5TdHJpbmcocHJvcEluZm8udHlwZSwgbm9kZSl9O2ApO1xuXHRcdH1cblxuXHRcdC8vIEFkZCBuZXN0ZWQgY29uc3RydWN0b3IgcHJvcGVydGllcyBmb3Igbm9uLWxlYWYgbm9kZXNcblx0XHQvLyBMZWFmIG5vZGVzIChubyBjaGlsZHJlbikgZG9uJ3QgZ2V0IGNvbnN0cnVjdG9yIHByb3BlcnRpZXNcblx0XHQvLyBUaGlzIGZvbGxvd3MgbW5lbW9uaWNhJ3Mgc3RyaWN0Q2hhaW4gYmVoYXZpb3Jcblx0XHRpZiAobm9kZS5jaGlsZHJlbi5zaXplID4gMCkge1xuXHRcdFx0Zm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuLnZhbHVlcygpKSB7XG5cdFx0XHRcdHRoaXMucHVzaENoaWxkQ29uc3RydWN0b3JGaWVsZChsaW5lcywgJycsIGNoaWxkKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGb3IgbmVzdGVkIHR5cGVzLCBhZGQgdGhpcyBub2RlJ3MgY29uc3RydWN0b3IgYW5kIGFsbCBzaWJsaW5ncyBmcm9tIHNhbWUgcGFyZW50IGFzIHVuZGVmaW5lZFxuXHRcdC8vIFRoaXMgaXMgbmVlZGVkIGZvciBzdHJpY3QgY2hhaW4gYmVoYXZpb3IgLSBwYXJlbnQgdW5kZWZpbmVkcyBhcmUgaW5oZXJpdGVkIHZpYSBQcm90b0ZsYXRcblx0XHRpZiAobm9kZS5wYXJlbnQpIHtcblx0XHRcdC8vIEFkZCB0aGlzIG5vZGUncyBvd24gY29uc3RydWN0b3IgYXMgdW5kZWZpbmVkXG5cdFx0XHRsaW5lcy5wdXNoKGBcXHQke25vZGUubmFtZX06IHVuZGVmaW5lZDtgKTtcblxuXHRcdFx0Ly8gQWRkIGFsbCBzaWJsaW5ncyAob3RoZXIgY2hpbGRyZW4gb2YgdGhlIHNhbWUgcGFyZW50KSBhcyB1bmRlZmluZWRcblx0XHRcdGZvciAoY29uc3Qgc2libGluZyBvZiBub2RlLnBhcmVudC5jaGlsZHJlbi52YWx1ZXMoKSkge1xuXHRcdFx0XHRpZiAoc2libGluZy5uYW1lICE9PSBub2RlLm5hbWUpIHtcblx0XHRcdFx0XHRsaW5lcy5wdXNoKGBcXHQke3NpYmxpbmcubmFtZX06IHVuZGVmaW5lZDtgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENsb3NlIHRoZSB0eXBlIHByb3Blcmx5IC0gUHJvdG9GbGF0IHVzZXMgfT47IGZvciBuZXN0ZWQsIH07IGZvciByb290XG5cdFx0aWYgKG5vZGUucGFyZW50KSB7XG5cdFx0XHRsaW5lcy5wdXNoKCd9PjsnKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bGluZXMucHVzaCgnfTsnKTtcblx0XHR9XG5cdFx0bGluZXMucHVzaCgnJyk7XG5cdH1cblxuXHQvKipcblx0XHQgKiBFbWl0IG9uZSBuZXN0ZWQtY3RvciBmaWVsZDogZHVhbCBzaWduYXR1cmVzIChjb25zdHJ1Y3QgKyB0aGVcblx0XHQgKiBjaGFpbi10aXAgQ0FMTCBmb3JtKS4gVGhlIGNhbGwgYnJhbmNoIHJldHVybnMgZXhhY3RseSB3aGF0IHRoZVxuXHRcdCAqIGNvbnN0cnVjdCBicmFuY2ggcmV0dXJucywgc28gYXN5bmMgdGlwcyBzdGF5IGNvbnNpc3RlbnQgd2l0aCB0aGVcblx0XHQgKiBleGlzdGluZyBhc3luYyBtb2RlbGluZywgd2hhdGV2ZXIgaXQgZW1pdHMuXG5cdFx0ICovXG5cdHByaXZhdGUgcHVzaENoaWxkQ29uc3RydWN0b3JGaWVsZCAobGluZXM6IHN0cmluZ1tdLCBpbmRlbnRTdHI6IHN0cmluZywgY2hpbGQ6IFR5cGVOb2RlKTogdm9pZCB7XG5cdFx0Y29uc3QgY2hpbGRJbnN0YW5jZVR5cGUgPSB0aGlzLmdldEluc3RhbmNlVHlwZU5hbWUoY2hpbGQpO1xuXHRcdGNvbnN0IGNvbnN0cnVjdG9yUGFyYW1zID0gdGhpcy5nZW5lcmF0ZUNvbnN0cnVjdG9yUGFyYW1zKGNoaWxkKTtcblx0XHRsaW5lcy5wdXNoKGAke2luZGVudFN0cn1cXHQke2NoaWxkLm5hbWV9OiB7YCk7XG5cdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9XFx0XFx0bmV3ICR7Y29uc3RydWN0b3JQYXJhbXN9OiAke2NoaWxkSW5zdGFuY2VUeXBlfTtgKTtcblx0XHRsaW5lcy5wdXNoKGAke2luZGVudFN0cn1cXHRcXHQke2NvbnN0cnVjdG9yUGFyYW1zfTogJHtjaGlsZEluc3RhbmNlVHlwZX07YCk7XG5cdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9XFx0fTtgKTtcblx0fVxuXG5cdC8qKlxuXHRcdCAqIEdlbmVyYXRlIGEgc2ltcGxlIHR5cGUgZGVjbGFyYXRpb24gZm9yIGEgc2luZ2xlIHR5cGVcblx0XHQgKi9cblx0Z2VuZXJhdGVTaW5nbGVUeXBlIChub2RlOiBUeXBlTm9kZSk6IHN0cmluZyB7XG5cdFx0Y29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG5cdFx0dGhpcy5nZW5lcmF0ZUNvbXBsZXRlSW5zdGFuY2VJbnRlcmZhY2Uobm9kZSwgbGluZXMpO1xuXHRcdHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcblx0fVxuXG5cdC8qKlxuXHRcdCAqIEdlbmVyYXRlIFR5cGVSZWdpc3RyeSBpbnRlcmZhY2UgZm9yIHR5cGUtc2FmZSBsb29rdXAoKSBmdW5jdGlvblxuXHRcdCAqIEF1Z21lbnQgbW5lbW9uaWNhJ3MgVHlwZVJlZ2lzdHJ5IHNvIGxvb2t1cCgnVHlwZU5hbWUnKSByZXR1cm5zIHRoZSB0eXBlZCBjb25zdHJ1Y3RvclxuXHRcdCAqL1xuXHRnZW5lcmF0ZVR5cGVSZWdpc3RyeSAoKTogR2VuZXJhdGVkVHlwZXMge1xuXHRcdGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnN0IGdlbmVyYXRlZFR5cGVzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdFx0Ly8gSGVhZGVyXG5cdFx0bGluZXMucHVzaCgnLy8gR2VuZXJhdGVkIFR5cGVSZWdpc3RyeSBmb3IgdHlwZS1zYWZlIG1uZW1vbmljYS5sb29rdXAoKScpO1xuXHRcdGxpbmVzLnB1c2goJy8vIFRoaXMgZmlsZSBhdWdtZW50cyBtbmVtb25pY2FcXCdzIFR5cGVSZWdpc3RyeSB2aWEgZGVjbGFyYXRpb24gbWVyZ2luZy4nKTtcblx0XHRsaW5lcy5wdXNoKCcvLycpO1xuXHRcdGxpbmVzLnB1c2goJy8vIFVzYWdlOicpO1xuXHRcdGxpbmVzLnB1c2goJy8vICAgaW1wb3J0IHsgbG9va3VwIH0gZnJvbSBcXCdtbmVtb25pY2FcXCc7Jyk7XG5cdFx0bGluZXMucHVzaCgnLy8gICBpbXBvcnQgXFwnLi8udGFjdGljYS9yZWdpc3RyeVxcJzsgIC8vIGFwcGxpZXMgdGhlIGF1Z21lbnRhdGlvbicpO1xuXHRcdGxpbmVzLnB1c2goJy8vICAgY29uc3QgTXlUeXBlID0gbG9va3VwKFxcJ015VHlwZVxcJyk7Jyk7XG5cdFx0bGluZXMucHVzaCgnLy8gICAvLyBUeXBlU2NyaXB0IGtub3dzOiBNeVR5cGUgaXMgdGhlIHR5cGVkIGNvbnN0cnVjdG9yIGZvciBNeVR5cGUnKTtcblx0XHRsaW5lcy5wdXNoKCcvLyAgIGNvbnN0IGluc3RhbmNlID0gbmV3IE15VHlwZSh7IC8qIGNvbnN0cnVjdG9yIGFyZ3MgKi8gfSk7Jyk7XG5cdFx0bGluZXMucHVzaCgnLy8gICAvLyBpbnN0YW5jZSBoYXMgZnVsbCBpbnRlbGxpc2Vuc2UgZm9yIHRoZSBnZW5lcmF0ZWQgdHlwZScpO1xuXHRcdGxpbmVzLnB1c2goJycpO1xuXG5cdFx0Ly8gSW1wb3J0IGluc3RhbmNlIHR5cGVzIGZyb20gdHlwZXMudHMuXG5cdFx0Ly8gU2tpcCBjdXN0b20tY29sbGVjdGlvbiB0eXBlcyB0aGF0IGhhdmUgbm8gdXNlci1wcm92aWRlZCByZWdpc3RyeSBpbnRlcmZhY2UuXG5cdFx0bGluZXMucHVzaCgnaW1wb3J0IHR5cGUgeycpO1xuXHRcdGZvciAoY29uc3Qgcm9vdCBvZiB0aGlzLmdyYXBoLnJvb3RzLnZhbHVlcygpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy5ncmFwaC5kZnMocm9vdCkpIHtcblx0XHRcdFx0aWYgKG5vZGUuY29sbGVjdGlvbklkICYmICFub2RlLnJlZ2lzdHJ5SW50ZXJmYWNlTmFtZSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGluc3RhbmNlVHlwZU5hbWUgPSB0aGlzLmdldEluc3RhbmNlVHlwZU5hbWUobm9kZSk7XG5cdFx0XHRcdGxpbmVzLnB1c2goYFxcdCR7aW5zdGFuY2VUeXBlTmFtZX0sYCk7XG5cdFx0XHRcdGdlbmVyYXRlZFR5cGVzLnB1c2goaW5zdGFuY2VUeXBlTmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGxpbmVzLnB1c2goYH0gZnJvbSAnJHt0aGlzLmltcG9ydFBhdGgoJy4vdHlwZXMnKX0nO2ApO1xuXHRcdGxpbmVzLnB1c2goJycpO1xuXG5cdFx0Ly8gR2VuZXJhdGUgbW9kdWxlIGF1Z21lbnRhdGlvbiBmb3IgbW5lbW9uaWNhIFR5cGVSZWdpc3RyeVxuXHRcdGxpbmVzLnB1c2goJy8qKicpO1xuXHRcdGxpbmVzLnB1c2goJyAqIFR5cGUgcmVnaXN0cnkgYXVnbWVudGluZyBtbmVtb25pY2FcXCdzIFR5cGVSZWdpc3RyeSBpbnRlcmZhY2UnKTtcblx0XHRsaW5lcy5wdXNoKCcgKiBUaGlzIGVuYWJsZXMgdHlwZS1zYWZlIGxvb2t1cCgpIHdpdGhvdXQgZXhwbGljaXQgdHlwZSBhcmd1bWVudHMnKTtcblx0XHRsaW5lcy5wdXNoKCcgKicpO1xuXHRcdGxpbmVzLnB1c2goJyAqIFVzYWdlOiBjb25zdCBTb21lVHlwZSA9IGxvb2t1cChcXCdTb21lVHlwZVxcJyk7IC8vIEZ1bGx5IHR5cGVkIScpO1xuXHRcdGxpbmVzLnB1c2goJyAqLycpO1xuXHRcdGxpbmVzLnB1c2goJ2RlY2xhcmUgbW9kdWxlIFxcJ21uZW1vbmljYVxcJyB7Jyk7XG5cdFx0bGluZXMucHVzaCgnXHRpbnRlcmZhY2UgVHlwZVJlZ2lzdHJ5IHsnKTtcblxuXHRcdC8vIEdlbmVyYXRlIGVudHJpZXMgZm9yIGFsbCB0eXBlIHBhdGhzIHRoYXQgYmVsb25nIHRvIHRoZSBkZWZhdWx0L2dsb2JhbCBjb2xsZWN0aW9uLlxuXHRcdC8vIFR5cGVzIHRoYXQgbGl2ZSBpbiBhIGN1c3RvbSBjb2xsZWN0aW9uIChjb2xsZWN0aW9uSWQgc2V0KSBhcmUgaXNvbGF0ZWQgYXQgcnVudGltZVxuXHRcdC8vIGFuZCBhcmUgbm90IHJlYWNoYWJsZSB0aHJvdWdoIGZyZWUgbG9va3VwKCksIHNvIHRoZXkgbXVzdCBub3QgYmUgYWRkZWQgdG8gdGhlXG5cdFx0Ly8gZ2xvYmFsIFR5cGVSZWdpc3RyeSBhdWdtZW50YXRpb24uXG5cdFx0Zm9yIChjb25zdCByb290IG9mIHRoaXMuZ3JhcGgucm9vdHMudmFsdWVzKCkpIHtcblx0XHRcdGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLmdyYXBoLmRmcyhyb290KSkge1xuXHRcdFx0XHRpZiAobm9kZS5jb2xsZWN0aW9uSWQpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBmdWxsUGF0aCA9IHRoaXMuZ2V0RnVsbFBhdGgobm9kZSk7XG5cdFx0XHRcdGNvbnN0IGluc3RhbmNlVHlwZSA9IHRoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShub2RlKTtcblx0XHRcdFx0Ly8gR2VuZXJhdGUgdHlwZWQgY29uc3RydWN0b3Igc2lnbmF0dXJlIGZvciBuZXN0ZWQgdHlwZXMgd2l0aCBwcm9wZXJ0aWVzXG5cdFx0XHRcdGNvbnN0IGNvbnN0cnVjdG9yU2lnID0gdGhpcy5nZW5lcmF0ZUNvbnN0cnVjdG9yU2lnbmF0dXJlKG5vZGUpO1xuXHRcdFx0XHRsaW5lcy5wdXNoKGBcXHRcXHQnJHtmdWxsUGF0aH0nOiAke2NvbnN0cnVjdG9yU2lnfSA9PiAke2luc3RhbmNlVHlwZX07YCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGluZXMucHVzaCgnXFx0fScpO1xuXHRcdGxpbmVzLnB1c2goJ30nKTtcblx0XHRsaW5lcy5wdXNoKCcnKTtcblxuXHRcdC8vIEdlbmVyYXRlIHBlci1jb2xsZWN0aW9uIHJlZ2lzdHJ5IGF1Z21lbnRhdGlvbnMgZm9yIE9wdGlvbiBCXG5cdFx0Ly8gKHVzZXItcHJvdmlkZWQgcmVnaXN0cnkgaW50ZXJmYWNlcykuXG5cdFx0Y29uc3QgY29sbGVjdGlvbkdyb3VwcyA9IHRoaXMuZ3JvdXBDb2xsZWN0aW9uUmVnaXN0cnlOb2RlcygpO1xuXHRcdGZvciAoY29uc3QgWyBrZXksIG5vZGVzIF0gb2YgY29sbGVjdGlvbkdyb3Vwcykge1xuXHRcdFx0Y29uc3QgWyByZWdpc3RyeUludGVyZmFjZU5hbWUsIHNvdXJjZUZpbGUgXSA9IGtleS5zcGxpdCgnOjonKTtcblx0XHRcdGNvbnN0IG1vZHVsZVBhdGggPSB0aGlzLnJlc29sdmVNb2R1bGVQYXRoKHNvdXJjZUZpbGUpO1xuXHRcdFx0bGluZXMucHVzaChgZGVjbGFyZSBtb2R1bGUgJyR7bW9kdWxlUGF0aH0nIHtgKTtcblx0XHRcdGxpbmVzLnB1c2goYFxcdGludGVyZmFjZSAke3JlZ2lzdHJ5SW50ZXJmYWNlTmFtZX0ge2ApO1xuXHRcdFx0Zm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG5cdFx0XHRcdGNvbnN0IGZ1bGxQYXRoID0gdGhpcy5nZXRGdWxsUGF0aChub2RlKTtcblx0XHRcdFx0Y29uc3QgaW5zdGFuY2VUeXBlID0gdGhpcy5nZXRJbnN0YW5jZVR5cGVOYW1lKG5vZGUpO1xuXHRcdFx0XHRjb25zdCBjb25zdHJ1Y3RvclNpZyA9IHRoaXMuZ2VuZXJhdGVDb25zdHJ1Y3RvclNpZ25hdHVyZShub2RlKTtcblx0XHRcdFx0bGluZXMucHVzaChgXFx0XFx0JyR7ZnVsbFBhdGh9JzogJHtjb25zdHJ1Y3RvclNpZ30gPT4gJHtpbnN0YW5jZVR5cGV9O2ApO1xuXHRcdFx0fVxuXHRcdFx0bGluZXMucHVzaCgnXFx0fScpO1xuXHRcdFx0bGluZXMucHVzaCgnfScpO1xuXHRcdFx0bGluZXMucHVzaCgnJyk7XG5cdFx0fVxuXG5cdFx0Ly8gUmUtZXhwb3J0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFuZCBleHBsaWNpdCB1c2FnZVxuXHRcdGxpbmVzLnB1c2goJ2ltcG9ydCB0eXBlIHsgVHlwZVJlZ2lzdHJ5IH0gZnJvbSBcXCdtbmVtb25pY2FcXCc7Jyk7XG5cdFx0bGluZXMucHVzaCgnZXhwb3J0IHR5cGUgeyBUeXBlUmVnaXN0cnkgfTsnKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRjb250ZW50IDogbGluZXMuam9pbignXFxuJyksXG5cdFx0XHR0eXBlcyAgIDogZ2VuZXJhdGVkVHlwZXMsXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHRcdCAqIEdlbmVyYXRlIGNvbnN0cnVjdG9yIHBhcmFtZXRlciBsaXN0IGZvciBhIHR5cGUgbm9kZSAodGhlIFwiKOKApilcIiBwYXJ0KVxuXHRcdCAqL1xuXHRwcml2YXRlIGdlbmVyYXRlQ29uc3RydWN0b3JQYXJhbXMgKG5vZGU6IFR5cGVOb2RlKTogc3RyaW5nIHtcblx0XHRjb25zdCBwYXJhbXMgPSBub2RlLmNvbnN0cnVjdG9yUGFyYW1zO1xuXHRcdGlmICghcGFyYW1zIHx8IHBhcmFtcy5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiAnKCknO1xuXHRcdH1cblx0XHRjb25zdCBwcm9wczogc3RyaW5nW10gPSBbXTtcblx0XHRmb3IgKGNvbnN0IHBhcmFtIG9mIHBhcmFtcykge1xuXHRcdFx0Y29uc3Qgb3B0aW9uYWwgPSBwYXJhbS5vcHRpb25hbCA/ICc/JyA6ICcnO1xuXHRcdFx0cHJvcHMucHVzaChgJHtwYXJhbS5uYW1lfSR7b3B0aW9uYWx9OiAke3BhcmFtLnR5cGV9YCk7XG5cdFx0fVxuXHRcdHJldHVybiBgKCR7cHJvcHMuam9pbignLCAnKX0pYDtcblx0fVxuXG5cdC8qKlxuXHRcdCAqIEdlbmVyYXRlIGNvbnN0cnVjdG9yIHNpZ25hdHVyZSBmb3IgYSB0eXBlIG5vZGVcblx0XHQgKiBVc2VzIGNvbnN0cnVjdG9yUGFyYW1zIGZvciBUeXBlUmVnaXN0cnkgc2lnbmF0dXJlIChub3QgaW5zdGFuY2UgcHJvcGVydGllcylcblx0XHQgKi9cblx0cHJpdmF0ZSBnZW5lcmF0ZUNvbnN0cnVjdG9yU2lnbmF0dXJlIChub2RlOiBUeXBlTm9kZSk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGBuZXcgJHt0aGlzLmdlbmVyYXRlQ29uc3RydWN0b3JQYXJhbXMobm9kZSl9YDtcblx0fVxuXG5cdC8qKlxuXHRcdCAqIEdldCB0aGUgZnVsbCBkb3R0ZWQgcGF0aCBmb3IgYSB0eXBlIG5vZGVcblx0XHQgKi9cblx0cHJpdmF0ZSBnZXRGdWxsUGF0aCAobm9kZTogVHlwZU5vZGUpOiBzdHJpbmcge1xuXHRcdGlmICghbm9kZS5wYXJlbnQpIHtcblx0XHRcdHJldHVybiBub2RlLm5hbWU7XG5cdFx0fVxuXHRcdHJldHVybiBgJHt0aGlzLmdldEZ1bGxQYXRoKG5vZGUucGFyZW50KX0uJHtub2RlLm5hbWV9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGluc3RhbmNlIHR5cGUgbmFtZSBmb3IgYSBub2RlXG5cdCAqIFVzZXMgZnVsbCBwYXRoIHdpdGggdW5kZXJzY29yZXM6IFVzYWdlcy5Vc2FnZUVudHJ5IC0+IFVzYWdlc19Vc2FnZUVudHJ5XG5cdCAqIEZvciBPcHRpb24gQiBjdXN0b20gY29sbGVjdGlvbnMsIHByZWZpeGVzIHdpdGggdGhlIHJlZ2lzdHJ5IGludGVyZmFjZSBuYW1lLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRJbnN0YW5jZVR5cGVOYW1lIChub2RlOiBUeXBlTm9kZSk6IHN0cmluZyB7XG5cdFx0Y29uc3QgZnVsbFBhdGggPSB0aGlzLmdldEZ1bGxQYXRoKG5vZGUpO1xuXHRcdGNvbnN0IHByZWZpeCA9IG5vZGUucmVnaXN0cnlJbnRlcmZhY2VOYW1lID8gYCR7bm9kZS5yZWdpc3RyeUludGVyZmFjZU5hbWV9X2AgOiAnJztcblx0XHRyZXR1cm4gYCR7cHJlZml4fSR7ZnVsbFBhdGgucmVwbGFjZSgvXFwuL2csICdfJyl9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNvbHZlIGEgc2ltcGxlIHR5cGUgbmFtZSB0byBpdHMgZnVsbCBwYXRoIG5hbWVcblx0ICogZS5nLiwgXCJEZWZpbml0aW9uRW50cnlcIiAtPiBcIkRlZmluaXRpb25zX0RlZmluaXRpb25FbnRyeVwiXG5cdCAqXG5cdCAqIFdpdGggYSByZWZlcmVuY2VSZXNvbHZlciBpbnN0YWxsZWQgKHRoZSBDTEkgcGF0aCksIHJlc29sdXRpb24gaXNcblx0ICogcGF0aC1hd2FyZSBwZXIgdGhlIGdyYXBoIGlkZW50aXR5IGxhdzogdGhlIHJlc29sdmVyIHJldHVybnMgdGhlIHVuaXF1ZVxuXHQgKiB0eXBlLCAnYW1iaWd1b3VzJywgb3IgdW5kZWZpbmVkIOKAlCB0aGUgbGF0dGVyIHR3byByZWNvcmQgYSBoYXJkLWZhaWxcblx0ICogUmVzb2x1dGlvbkVycm9yIGFuZCBlbWl0IGB1bmtub3duYCBpbnN0ZWFkIG9mIHNpbGVudGx5IHBpY2tpbmcgYVxuXHQgKiBmaXJzdCBtYXRjaC4gV2l0aG91dCBhIHJlc29sdmVyIHRoZSBsZWdhY3kgZmlyc3QtbWF0Y2ggc2NhbiBzdGF5cy5cblx0ICovXG5cdHByaXZhdGUgcmVzb2x2ZVR5cGVOYW1lIChzaW1wbGVOYW1lOiBzdHJpbmcsIGN1cnJlbnROb2RlOiBUeXBlTm9kZSk6IHN0cmluZyB7XG5cdFx0aWYgKHRoaXMucmVmZXJlbmNlUmVzb2x2ZXIpIHtcblx0XHRcdGNvbnN0IHJlc29sdmVkID0gdGhpcy5yZWZlcmVuY2VSZXNvbHZlcihzaW1wbGVOYW1lLCBjdXJyZW50Tm9kZSk7XG5cdFx0XHRpZiAocmVzb2x2ZWQgJiYgcmVzb2x2ZWQgIT09ICdhbWJpZ3VvdXMnKSB7XG5cdFx0XHRcdGNvbnN0IGluc3RhbmNlTmFtZSA9IHRoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShyZXNvbHZlZCk7XG5cdFx0XHRcdHJldHVybiBpbnN0YW5jZU5hbWU7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBhbmNob3JMb2NhdGlvbiA9IGAke2N1cnJlbnROb2RlLnNvdXJjZUZpbGV9OiR7Y3VycmVudE5vZGUubGluZX06JHtjdXJyZW50Tm9kZS5jb2x1bW59YDtcblx0XHRcdGNvbnN0IGFtYmlndW91c0dlbmVyYXRpb25NZXNzYWdlID0gYEFtYmlndW91cyByZWZlcmVuY2UgdG8gbW5lbW9uaWNhIHR5cGUgJyR7c2ltcGxlTmFtZX0nIGAgK1xuXHRcdFx0XHRgd2hpbGUgZ2VuZXJhdGluZyAnJHt0aGlzLmdldEZ1bGxQYXRoKGN1cnJlbnROb2RlKX0nYDtcblx0XHRcdGNvbnN0IHVucmVzb2x2ZWRHZW5lcmF0aW9uTWVzc2FnZSA9IGBVbnJlc29sdmVkIHJlZmVyZW5jZSB0byBtbmVtb25pY2EgdHlwZSAnJHtzaW1wbGVOYW1lfScgYCArXG5cdFx0XHRcdGB3aGlsZSBnZW5lcmF0aW5nICcke3RoaXMuZ2V0RnVsbFBhdGgoY3VycmVudE5vZGUpfSdgO1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IHJlc29sdmVkID09PSAnYW1iaWd1b3VzJ1xuXHRcdFx0XHQ/IGFtYmlndW91c0dlbmVyYXRpb25NZXNzYWdlXG5cdFx0XHRcdDogdW5yZXNvbHZlZEdlbmVyYXRpb25NZXNzYWdlO1xuXHRcdFx0Y29uc3QgZXJyb3I6IFJlc29sdXRpb25FcnJvciA9IHsgbWVzc2FnZSwgbG9jYXRpb25zIDogWyBhbmNob3JMb2NhdGlvbiBdIH07XG5cdFx0XHR0aGlzLnJlc29sdXRpb25FcnJvcnMucHVzaChlcnJvcik7XG5cdFx0XHRjb25zdCB1bmtub3duUmVzdWx0ID0gJ3Vua25vd24nO1xuXHRcdFx0cmV0dXJuIHVua25vd25SZXN1bHQ7XG5cdFx0fVxuXG5cdFx0Ly8gRmlyc3QgY2hlY2sgaWYgaXQncyB0aGUgY3VycmVudCBub2RlIG9yIGl0cyBjaGlsZHJlblxuXHRcdGlmIChjdXJyZW50Tm9kZS5uYW1lID09PSBzaW1wbGVOYW1lKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRJbnN0YW5jZVR5cGVOYW1lKGN1cnJlbnROb2RlKTtcblx0XHR9XG5cdFx0Zm9yIChjb25zdCBjaGlsZCBvZiBjdXJyZW50Tm9kZS5jaGlsZHJlbi52YWx1ZXMoKSkge1xuXHRcdFx0aWYgKGNoaWxkLm5hbWUgPT09IHNpbXBsZU5hbWUpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShjaGlsZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIFNlYXJjaCBhbGwgdHlwZXMgaW4gdGhlIGdyYXBoXG5cdFx0Zm9yIChjb25zdCB0eXBlIG9mIHRoaXMuZ3JhcGguZ2V0QWxsVHlwZXMoKSkge1xuXHRcdFx0aWYgKHR5cGUubmFtZSA9PT0gc2ltcGxlTmFtZSkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRJbnN0YW5jZVR5cGVOYW1lKHR5cGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc2ltcGxlTmFtZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYXJkLWZhaWwgZ3JhcGggcmVmZXJlbmNlIGVycm9ycyByZWNvcmRlZCB3aGlsZSBnZW5lcmF0aW5nIChzZWVcblx0ICogcmVmZXJlbmNlUmVzb2x2ZXIpLiBUaGUgQ0xJIHByaW50cyBldmVyeSBsb2NhdGlvbiBhbmQgd3JpdGVzIG5vIG91dHB1dC5cblx0ICovXG5cdGdldFJlc29sdXRpb25FcnJvcnMgKCk6IFJlc29sdXRpb25FcnJvcltdIHtcblx0XHRjb25zdCByZXN1bHQgPSBbIC4uLnRoaXMucmVzb2x1dGlvbkVycm9ycyBdO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogUmVzb2x2ZSBzaW1wbGUgdHlwZSBuYW1lcyB0byBmdWxsIHBhdGggbmFtZXMgd2l0aGluIGEgdHlwZSBzdHJpbmdcblx0ICogSGFuZGxlcyBjb21wbGV4IHR5cGVzIGxpa2UgQXJyYXk8VXNhZ2VFbnRyeT4sIE1hcDxzdHJpbmcsIFR5cGVFbnRyeT4sIGV0Yy5cblx0ICovXG5cdHByaXZhdGUgcmVzb2x2ZVR5cGVJblN0cmluZyAodHlwZVN0cjogc3RyaW5nLCBjdXJyZW50Tm9kZTogVHlwZU5vZGUpOiBzdHJpbmcge1xuXHRcdC8vIEdldCBhbGwgdHlwZSBuYW1lcyBmcm9tIHRoZSBncmFwaFxuXHRcdGNvbnN0IGFsbFR5cGVzID0gdGhpcy5ncmFwaC5nZXRBbGxUeXBlcygpO1xuXHRcdGNvbnN0IHR5cGVOYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRcdGZvciAoY29uc3QgdHlwZSBvZiBhbGxUeXBlcykge1xuXHRcdFx0dHlwZU5hbWVzLmFkZCh0eXBlLm5hbWUpO1xuXHRcdH1cblxuXHRcdC8vIFNvcnQgYnkgbGVuZ3RoIChsb25nZXN0IGZpcnN0KSB0byBhdm9pZCBwYXJ0aWFsIHJlcGxhY2VtZW50c1xuXHRcdGNvbnN0IHNvcnRlZE5hbWVzID0gQXJyYXkuZnJvbSh0eXBlTmFtZXMpLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpO1xuXG5cdFx0Ly8gUmVwbGFjZSBlYWNoIHNpbXBsZSB0eXBlIG5hbWUgd2l0aCBpdHMgZnVsbCBwYXRoIHZlcnNpb25cblx0XHRsZXQgcmVzdWx0ID0gdHlwZVN0cjtcblx0XHRmb3IgKGNvbnN0IG5hbWUgb2Ygc29ydGVkTmFtZXMpIHtcblx0XHRcdC8vIFNraXAgbmFtZXMgdGhhdCBkbyBub3Qgb2NjdXIg4oCUIHdpdGggYSByZWZlcmVuY2VSZXNvbHZlciBpbnN0YWxsZWQsXG5cdFx0XHQvLyByZXNvbHZpbmcgYWJzZW50IG5hbWVzIHdvdWxkIHJlY29yZCBzcHVyaW91cyBlcnJvcnNcblx0XHRcdGNvbnN0IG9jY3VycyA9IG5ldyBSZWdFeHAoYFxcXFxiJHtuYW1lfVxcXFxiYCkudGVzdChyZXN1bHQpO1xuXHRcdFx0aWYgKCFvY2N1cnMpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHQvLyBVc2Ugd29yZCBib3VuZGFyeSBtYXRjaGluZyB0byBhdm9pZCByZXBsYWNpbmcgcGFydGlhbCBuYW1lc1xuXHRcdFx0Y29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBcXFxcYiR7bmFtZX1cXFxcYmAsICdnJyk7XG5cdFx0XHRjb25zdCBmdWxsVHlwZU5hbWUgPSB0aGlzLnJlc29sdmVUeXBlTmFtZShuYW1lLCBjdXJyZW50Tm9kZSk7XG5cdFx0XHRpZiAoZnVsbFR5cGVOYW1lICE9PSBuYW1lKSB7XG5cdFx0XHRcdHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKHJlZ2V4LCBmdWxsVHlwZU5hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdyb3VwIGNvbGxlY3Rpb24gdHlwZSBub2RlcyBieSB0aGVpciByZWdpc3RyeSBpbnRlcmZhY2UgbmFtZSBhbmQgdGhlXG5cdCAqIGNvbGxlY3Rpb24ncyBob21lIGZpbGUgKHRoZSBtb2R1bGUgZGVjbGFyaW5nIHRoZSBpbnRlcmZhY2Ug4oCUIHRoZVxuXHQgKiBhdWdtZW50YXRpb24gdGFyZ2V0KSwgTk9UIGVhY2ggdHlwZSdzIG93biBkZWZpbmUgZmlsZTogbXVsdGktZmlsZVxuXHQgKiBjb2xsZWN0aW9ucyBkZWZpbmUgdHlwZXMgYWNyb3NzIG1hbnkgbW9kdWxlcy5cblx0ICogUmV0dXJucyBhIG1hcCBrZXllZCBieSBgJHtyZWdpc3RyeUludGVyZmFjZU5hbWV9Ojoke3NvdXJjZUZpbGV9YC5cblx0ICovXG5cdHByaXZhdGUgZ3JvdXBDb2xsZWN0aW9uUmVnaXN0cnlOb2RlcyAoKTogTWFwPHN0cmluZywgVHlwZU5vZGVbXT4ge1xuXHRcdGNvbnN0IGdyb3VwcyA9IG5ldyBNYXA8c3RyaW5nLCBUeXBlTm9kZVtdPigpO1xuXHRcdGZvciAoY29uc3Qgcm9vdCBvZiB0aGlzLmdyYXBoLnJvb3RzLnZhbHVlcygpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy5ncmFwaC5kZnMocm9vdCkpIHtcblx0XHRcdFx0aWYgKCFub2RlLnJlZ2lzdHJ5SW50ZXJmYWNlTmFtZSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGhvbWVGaWxlID0gbm9kZS5jb2xsZWN0aW9uU291cmNlRmlsZSA/PyBub2RlLnNvdXJjZUZpbGU7XG5cdFx0XHRcdGNvbnN0IGtleSA9IGAke25vZGUucmVnaXN0cnlJbnRlcmZhY2VOYW1lfTo6JHtob21lRmlsZX1gO1xuXHRcdFx0XHRjb25zdCBleGlzdGluZyA9IGdyb3Vwcy5nZXQoa2V5KTtcblx0XHRcdFx0aWYgKGV4aXN0aW5nKSB7XG5cdFx0XHRcdFx0ZXhpc3RpbmcucHVzaChub2RlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRncm91cHMuc2V0KGtleSwgWyBub2RlIF0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBncm91cHM7XG5cdH1cblxuXHQvKipcblx0ICogUmVzb2x2ZSBhIHNvdXJjZSBmaWxlIHBhdGggdG8gYSBtb2R1bGUgc3BlY2lmaWVyIHJlbGF0aXZlIHRvIHRoZSBvdXRwdXQgZGlyZWN0b3J5LFxuXHQgKiBzdWl0YWJsZSBmb3IgdXNlIGluIGEgYGRlY2xhcmUgbW9kdWxlICcuLi4nYCBibG9jay5cblx0ICovXG5cdHByaXZhdGUgcmVzb2x2ZU1vZHVsZVBhdGggKHNvdXJjZUZpbGU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgb3V0cHV0QWJzb2x1dGUgPSBwYXRoLnJlc29sdmUodGhpcy5vdXRwdXREaXIpO1xuXHRcdGNvbnN0IHNvdXJjZUFic29sdXRlID0gcGF0aC5yZXNvbHZlKHNvdXJjZUZpbGUpO1xuXHRcdGxldCByZWxhdGl2ZSA9IHBhdGgucmVsYXRpdmUob3V0cHV0QWJzb2x1dGUsIHNvdXJjZUFic29sdXRlKTtcblx0XHQvLyBSZW1vdmUgLnRzIGV4dGVuc2lvbjsga2VlcCAudHN4IGlmIHByZXNlbnRcblx0XHRpZiAocmVsYXRpdmUuZW5kc1dpdGgoJy50cycpICYmICFyZWxhdGl2ZS5lbmRzV2l0aCgnLnRzeCcpKSB7XG5cdFx0XHRyZWxhdGl2ZSA9IHJlbGF0aXZlLnNsaWNlKDAsIC0zKTtcblx0XHR9XG5cdFx0Ly8gQ29udmVydCBXaW5kb3dzIHNlcGFyYXRvcnMgdG8gUE9TSVhcblx0XHRjb25zdCBwb3NpeFJlbGF0aXZlID0gcmVsYXRpdmUucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuXHRcdHJldHVybiBwb3NpeFJlbGF0aXZlO1xuXHR9XG59XG4iXX0=
578
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2dlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUViLDJDQUE2QjtBQWdCN0I7O0dBRUc7QUFDSCxNQUFhLGNBQWM7SUFLMUIsWUFDUyxLQUFvQixFQUM1QixHQUFHLEdBQUcsS0FBSyxFQUNYLFNBQVMsR0FBRyxVQUFVLEVBQ2QsaUJBQTBDO1FBSDFDLFVBQUssR0FBTCxLQUFLLENBQWU7UUFHcEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUF5QjtRQU4zQyxxQkFBZ0IsR0FBc0IsRUFBRSxDQUFDO1FBUWhELElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssVUFBVSxDQUFFLFFBQWdCO1FBQ25DLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQy9DLENBQUM7SUFFRDs7Ozs7OztVQU9HO0lBQ0gsMEJBQTBCO1FBQ3pCLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztRQUMzQixNQUFNLGNBQWMsR0FBYSxFQUFFLENBQUM7UUFFcEMsMkRBQTJEO1FBQzNELEtBQUssQ0FBQyxJQUFJLENBQUMsa0RBQWtELENBQUMsQ0FBQztRQUMvRCxLQUFLLENBQUMsSUFBSSxDQUFDLHlFQUF5RSxDQUFDLENBQUM7UUFDdEYsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNmLEtBQUssQ0FBQyxJQUFJLENBQUMsOERBQThELENBQUMsQ0FBQztRQUMzRSxLQUFLLENBQUMsSUFBSSxDQUFDLDREQUE0RCxDQUFDLENBQUM7UUFDekUsS0FBSyxDQUFDLElBQUksQ0FB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QUUsY0FBYyxDQUFDLENBQUM7UUFDN0QsNkNBQTZDO1FBQzdDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUM1RCxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBQ0Qsc0NBQXNDO1FBQ3RDLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ25ELE9BQU8sYUFBYSxDQUFDO0lBQ3RCLENBQUM7Q0FDRDtBQXJsQkQsd0NBcWxCQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7XG5cdFR5cGVOb2RlLCBHZW5lcmF0ZWRUeXBlcywgUmVzb2x1dGlvbkVycm9yIFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFR5cGVHcmFwaEltcGwgfSBmcm9tICcuL2dyYXBoJztcblxuLyoqXG4gKiBQYXRoLWF3YXJlIHJlc29sdmVyIGZvciBtbmVtb25pY2EgZ3JhcGggdHlwZSBuYW1lcyByZWZlcmVuY2VkIGluc2lkZSB0eXBlXG4gKiBzdHJpbmdzIHdoaWxlIGdlbmVyYXRpbmcgb3V0cHV0LiBSZXR1cm5zIHRoZSB1bmlxdWUgdHlwZSwgJ2FtYmlndW91cycsIG9yXG4gKiB1bmRlZmluZWQgKHJlc29sdmVzIHRvIG5vdGhpbmcpIOKAlCBzZWUgcmVzb2x2ZUdyYXBoVHlwZVJlZmVyZW5jZS5cbiAqL1xuZXhwb3J0IHR5cGUgR3JhcGhSZWZlcmVuY2VSZXNvbHZlciA9IChcblx0c2ltcGxlTmFtZTogc3RyaW5nLFxuXHRjdXJyZW50Tm9kZTogVHlwZU5vZGVcbikgPT4gVHlwZU5vZGUgfCAnYW1iaWd1b3VzJyB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGZpbGUgZ2VuZXJhdG9yXG4gKi9cbmV4cG9ydCBjbGFzcyBUeXBlc0dlbmVyYXRvciB7XG5cdHByaXZhdGUgZXNtOiBib29sZWFuO1xuXHRwcml2YXRlIG91dHB1dERpcjogc3RyaW5nO1xuXHRwcml2YXRlIHJlc29sdXRpb25FcnJvcnM6IFJlc29sdXRpb25FcnJvcltdID0gW107XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgZ3JhcGg6IFR5cGVHcmFwaEltcGwsXG5cdFx0ZXNtID0gZmFsc2UsXG5cdFx0b3V0cHV0RGlyID0gJy50YWN0aWNhJyxcblx0XHRwcml2YXRlIHJlZmVyZW5jZVJlc29sdmVyPzogR3JhcGhSZWZlcmVuY2VSZXNvbHZlclxuXHQpIHtcblx0XHR0aGlzLmVzbSA9IGVzbTtcblx0XHR0aGlzLm91dHB1dERpciA9IG91dHB1dERpcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgaW1wb3J0IHBhdGggd2l0aCBvcHRpb25hbCAuanMgZXh0ZW5zaW9uIGZvciBFU00gTm9kZU5leHRcblx0ICovXG5cdHByaXZhdGUgaW1wb3J0UGF0aCAocmVsYXRpdmU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuZXNtID8gYCR7cmVsYXRpdmV9LmpzYCA6IHJlbGF0aXZlO1xuXHR9XG5cblx0LyoqXG5cdFx0KiBHZW5lcmF0ZSBnbG9iYWwgYXVnbWVudGF0aW9uIGZpbGUgdGhhdCBhdWdtZW50cyB1c2VyIGNsYXNzZXMgZGlyZWN0bHlcblx0XHQqIFRoaXMgYWxsb3dzIHVzaW5nIGRlY29yYXRlZCBjbGFzc2VzIHdpdGhvdXQgbWFudWFsIHR5cGUgY2FzdGluZ1xuXHRcdCpcblx0XHQqIEFsbCB0eXBlcyBhcmUgcGxhY2VkIGluIHRoZSBnbG9iYWwgc2NvcGUgdmlhIGRlY2xhcmUgZ2xvYmFsLCB3aGljaCBhbGxvd3Ncblx0XHQqIHRoZW0gdG8gYmUgYWNjZXNzZWQgZnJvbSBhbnkgbW9kdWxlIHdpdGhvdXQgaW1wb3J0cy4gSW50ZXJmYWNlcyBkZWNsYXJlZFxuXHRcdCogaW4gdGhlIGdsb2JhbCBzY29wZSB3aWxsIG1lcmdlIHdpdGggY2xhc3NlcyBvZiB0aGUgc2FtZSBuYW1lIGluIHVzZXIgbW9kdWxlcy5cblx0XHQqL1xuXHRnZW5lcmF0ZUdsb2JhbEF1Z21lbnRhdGlvbiAoKTogR2VuZXJhdGVkVHlwZXMge1xuXHRcdGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnN0IGdlbmVyYXRlZFR5cGVzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdFx0Ly8gSGVhZGVyIC0gbWFrZSB0aGlzIGEgbW9kdWxlIHNvIHdlIGNhbiB1c2UgZGVjbGFyZSBnbG9iYWxcblx0XHRsaW5lcy5wdXNoKCcvLyBHZW5lcmF0ZWQgYnkgQG1uZW1vbmljYS90YWN0aWNhIC0gRE8gTk9UIEVESVQnKTtcblx0XHRsaW5lcy5wdXNoKCcvLyBUaGlzIGZpbGUgcHJvdmlkZXMgYXV0b21hdGljIHR5cGUgYXVnbWVudGF0aW9uIGZvciBkZWNvcmF0ZWQgY2xhc3NlcycpO1xuXHRcdGxpbmVzLnB1c2goJycpO1xuXHRcdGxpbmVzLnB1c2goJy8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZSAqLycpO1xuXHRcdGxpbmVzLnB1c2goJy8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1pbnRlcmZhY2UgKi8nKTtcblx0XHRsaW5lcy5wdXNoKCcnKTtcblxuXHRcdC8vIEltcG9ydCBQcm90b0ZsYXQgZnJvbSBtbmVtb25pY2Fcblx0XHRsaW5lcy5wdXNoKCdpbXBvcnQgdHlwZSB7IFByb3RvRmxhdCB9IGZyb20gXFwnbW5lbW9uaWNhXFwnOycpO1xuXHRcdGxpbmVzLnB1c2goJycpO1xuXG5cdFx0Ly8gTWFrZSB0aGlzIGEgbW9kdWxlIHNvIHdlIGNhbiB1c2UgZGVjbGFyZSBnbG9iYWxcblx0XHRsaW5lcy5wdXNoKCdleHBvcnQge307Jyk7XG5cdFx0bGluZXMucHVzaCgnJyk7XG5cblx0XHQvLyBBbGwgdHlwZXMgZ28gaW5zaWRlIGRlY2xhcmUgZ2xvYmFsIHNvIHRoZXkgYXJlIGdsb2JhbGx5IGFjY2Vzc2libGVcblx0XHRsaW5lcy5wdXNoKCdkZWNsYXJlIGdsb2JhbCB7Jyk7XG5cdFx0bGluZXMucHVzaCgnJyk7XG5cblxuXHRcdC8vIEdlbmVyYXRlIGluc3RhbmNlIHR5cGVzIGZvciBhbGwgZGVmYXVsdC1jb2xsZWN0aW9uIHR5cGVzIC0gaW4gZ2xvYmFsIHNjb3BlXG5cdFx0Zm9yIChjb25zdCByb290IG9mIHRoaXMuZ3JhcGgucm9vdHMudmFsdWVzKCkpIHtcblx0XHRcdGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLmdyYXBoLmRmcyhyb290KSkge1xuXHRcdFx0XHRpZiAobm9kZS5jb2xsZWN0aW9uSWQpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBpbnN0YW5jZU5hbWUgPSB0aGlzLmdldEluc3RhbmNlVHlwZU5hbWUobm9kZSk7XG5cdFx0XHRcdGdlbmVyYXRlZFR5cGVzLnB1c2goaW5zdGFuY2VOYW1lKTtcblx0XHRcdFx0Ly8gUm9vdCB0eXBlcyBhcmUgZGVjbGFyZWQgYXMgaW50ZXJmYWNlcyBiZWxvdyAoZGVjbGFyYXRpb25cblx0XHRcdFx0Ly8gbWVyZ2luZyB3aXRoIEBkZWNvcmF0ZSBjbGFzc2VzKS4gRW1pdHRpbmcgYHR5cGUgWGAgaGVyZSBhc1xuXHRcdFx0XHQvLyB3ZWxsIHdvdWxkIGNvbGxpZGUgd2l0aCBgaW50ZXJmYWNlIFhgIGluIHRoZSBzYW1lIGdsb2JhbFxuXHRcdFx0XHQvLyBzY29wZSAoVFMyMzAwKSwgYW5kIHRoZSByb290IGludGVyZmFjZSBhbHJlYWR5IGNhcnJpZXNcblx0XHRcdFx0Ly8gZXZlcnl0aGluZyB0aGUgYWxpYXMgd291bGQgKHByb3BzICsgY2hpbGQgY29uc3RydWN0b3JzKS5cblx0XHRcdFx0aWYgKCFub2RlLnBhcmVudCkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuZ2VuZXJhdGVJbnN0YW5jZVR5cGUobm9kZSwgbGluZXMsIDEpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEdlbmVyYXRlIGNsYXNzIGludGVyZmFjZXMgLSBpbiBnbG9iYWwgc2NvcGUgZm9yIGRlY2xhcmF0aW9uIG1lcmdpbmdcblx0XHQvLyBUaGVzZSBpbnRlcmZhY2VzIHdpbGwgbWVyZ2Ugd2l0aCBjbGFzc2VzIG9mIHRoZSBzYW1lIG5hbWUgaW4gdXNlciBtb2R1bGVzXG5cdFx0bGluZXMucHVzaCgnXHQvLyBDbGFzcyBpbnRlcmZhY2VzIGZvciBkZWNsYXJhdGlvbiBtZXJnaW5nJyk7XG5cdFx0bGluZXMucHVzaCgnXHQvLyBUaGVzZSBtZXJnZSB3aXRoIEBkZWNvcmF0ZSgpIGNsYXNzZXMgdG8gcHJvdmlkZSBwcm9wZXIgdHlwaW5nJyk7XG5cdFx0bGluZXMucHVzaCgnJyk7XG5cdFx0Zm9yIChjb25zdCByb290IG9mIHRoaXMuZ3JhcGgucm9vdHMudmFsdWVzKCkpIHtcblx0XHRcdGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLmdyYXBoLmRmcyhyb290KSkge1xuXHRcdFx0XHRpZiAobm9kZS5jb2xsZWN0aW9uSWQpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLmdlbmVyYXRlQ2xhc3NJbnRlcmZhY2Uobm9kZSwgbGluZXMsIDEpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGxpbmVzLnB1c2goJ30nKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRjb250ZW50IDogbGluZXMuam9pbignXFxuJyksXG5cdFx0XHR0eXBlcyAgIDogZ2VuZXJhdGVkVHlwZXMsXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHRcdCAqIEdlbmVyYXRlIGluc3RhbmNlIHR5cGUgYWxpYXMgKGRlc2NyaWJlcyB3aGF0IHRoZSBpbnN0YW5jZSBJUylcblx0XHQgKiBVc2VzIFByb3RvRmxhdCBmb3IgcHJvcGVyIGluaGVyaXRhbmNlIChleGNsdWRlcyBvdmVycmlkZGVuIHBhcmVudCBwcm9wcylcblx0XHQgKi9cblx0cHJpdmF0ZSBnZW5lcmF0ZUluc3RhbmNlVHlwZSAobm9kZTogVHlwZU5vZGUsIGxpbmVzOiBzdHJpbmdbXSwgaW5kZW50OiBudW1iZXIpOiB2b2lkIHtcblx0XHRjb25zdCBpbmRlbnRTdHIgPSAnXFx0Jy5yZXBlYXQoaW5kZW50KTtcblx0XHRjb25zdCBpbnN0YW5jZU5hbWUgPSB0aGlzLmdldEluc3RhbmNlVHlwZU5hbWUobm9kZSk7XG5cblx0XHRpZiAobm9kZS5wYXJlbnQpIHtcblx0XHRcdC8vIE5lc3RlZCB0eXBlOiBVc2UgUHJvdG9GbGF0IHRvIHByb3Blcmx5IGV4Y2x1ZGUgb3ZlcnJpZGRlbiBwcm9wZXJ0aWVzXG5cdFx0XHRsaW5lcy5wdXNoKGAke2luZGVudFN0cn10eXBlICR7aW5zdGFuY2VOYW1lfSA9IFByb3RvRmxhdDwke3RoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShub2RlLnBhcmVudCl9LCB7YCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFJvb3QgdHlwZToganVzdCB0aGUgcHJvcGVydGllcyBvYmplY3Rcblx0XHRcdGxpbmVzLnB1c2goYCR7aW5kZW50U3RyfXR5cGUgJHtpbnN0YW5jZU5hbWV9ID0ge2ApO1xuXHRcdH1cblxuXHRcdC8vIEFkZCBpbnN0YW5jZSBwcm9wZXJ0aWVzXG5cdFx0Zm9yIChjb25zdCBbIHByb3BOYW1lLCBwcm9wSW5mbyBdIG9mIG5vZGUucHJvcGVydGllcy5lbnRyaWVzKCkpIHtcblx0XHRcdGNvbnN0IG9wdGlvbmFsID0gcHJvcEluZm8ub3B0aW9uYWwgPyAnPycgOiAnJztcblx0XHRcdGNvbnN0IHJlYWRvbmx5ID0gcHJvcEluZm8ucmVhZG9ubHkgPyAncmVhZG9ubHkgJyA6ICcnO1xuXHRcdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9XFx0JHtyZWFkb25seX0ke3Byb3BOYW1lfSR7b3B0aW9uYWx9OiAke3Byb3BJbmZvLnR5cGV9O2ApO1xuXHRcdH1cblxuXHRcdC8vIEFkZCBuZXN0ZWQgY29uc3RydWN0b3IgcHJvcGVydGllcyBmb3Igbm9uLWxlYWYgbm9kZXMg4oCUIG1pcnJvcnNcblx0XHQvLyBnZW5lcmF0ZUNvbXBsZXRlSW5zdGFuY2VJbnRlcmZhY2UgKHR5cGVzLnRzKTogc3VidHlwZXMgY29uc3RydWN0XG5cdFx0Ly8gZnJvbSBwYXJlbnQgaW5zdGFuY2VzIGF0IGFueSBkZXB0aCwgbm90IG9ubHkgZnJvbSByb290cy5cblx0XHRpZiAobm9kZS5jaGlsZHJlbi5zaXplID4gMCkge1xuXHRcdFx0Zm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuLnZhbHVlcygpKSB7XG5cdFx0XHRcdHRoaXMucHVzaENoaWxkQ29uc3RydWN0b3JGaWVsZChsaW5lcywgaW5kZW50U3RyLCBjaGlsZCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRm9yIG5lc3RlZCB0eXBlcywgYWRkIHRoaXMgbm9kZSdzIGNvbnN0cnVjdG9yIGFuZCBhbGwgc2libGluZ3MgYXNcblx0XHQvLyB1bmRlZmluZWQgKHN0cmljdC1jaGFpbiBiZWhhdmlvcjsgcGFyZW50IHVuZGVmaW5lZHMgY29tZSB2aWEgUHJvdG9GbGF0KVxuXHRcdGlmIChub2RlLnBhcmVudCkge1xuXHRcdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9XFx0JHtub2RlLm5hbWV9OiB1bmRlZmluZWQ7YCk7XG5cdFx0XHRmb3IgKGNvbnN0IHNpYmxpbmcgb2Ygbm9kZS5wYXJlbnQuY2hpbGRyZW4udmFsdWVzKCkpIHtcblx0XHRcdFx0aWYgKHNpYmxpbmcubmFtZSAhPT0gbm9kZS5uYW1lKSB7XG5cdFx0XHRcdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9XFx0JHtzaWJsaW5nLm5hbWV9OiB1bmRlZmluZWQ7YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDbG9zZSB0aGUgdHlwZSBwcm9wZXJseSAtIFByb3RvRmxhdCB1c2VzIH0+OyBmb3IgbmVzdGVkLCB9OyBmb3Igcm9vdFxuXHRcdGlmIChub2RlLnBhcmVudCkge1xuXHRcdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9fT47YCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxpbmVzLnB1c2goYCR7aW5kZW50U3RyfX07YCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIGVtcHR5IGxpbmUgYWZ0ZXIgZWFjaCB0eXBlXG5cdFx0bGluZXMucHVzaCgnJyk7XG5cdH1cblxuXHQvKipcblx0XHQgKiBHZW5lcmF0ZSBjbGFzcyBpbnRlcmZhY2UgZm9yIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gbWVyZ2luZ1xuXHRcdCAqIFRoaXMgbWVyZ2VzIHdpdGggdGhlIGFjdHVhbCBjbGFzcyB0byBwcm92aWRlIHByb3BlciB0eXBpbmdcblx0XHQgKi9cblx0cHJpdmF0ZSBnZW5lcmF0ZUNsYXNzSW50ZXJmYWNlIChub2RlOiBUeXBlTm9kZSwgbGluZXM6IHN0cmluZ1tdLCBpbmRlbnQ6IG51bWJlcik6IHZvaWQge1xuXHRcdGNvbnN0IGluZGVudFN0ciA9ICdcXHQnLnJlcGVhdChpbmRlbnQpO1xuXG5cdFx0Ly8gQnVpbGQgZXh0ZW5kcyBjbGF1c2Vcblx0XHRjb25zdCBleHRlbmRzVHlwZXM6IHN0cmluZ1tdID0gW107XG5cdFx0aWYgKG5vZGUucGFyZW50KSB7XG5cdFx0XHRleHRlbmRzVHlwZXMucHVzaChub2RlLnBhcmVudC5uYW1lKTtcblx0XHR9XG5cblx0XHRjb25zdCBleHRlbmRzQ2xhdXNlID0gZXh0ZW5kc1R5cGVzLmxlbmd0aCA+IDBcblx0XHRcdD8gYCBleHRlbmRzICR7ZXh0ZW5kc1R5cGVzLmpvaW4oJywgJyl9YFxuXHRcdFx0OiAnJztcblxuXHRcdC8vIEludGVyZmFjZSB3aXRoIHNhbWUgbmFtZSBhcyBjbGFzcyAtIFR5cGVTY3JpcHQgbWVyZ2VzIHRoZXNlXG5cdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9aW50ZXJmYWNlICR7bm9kZS5uYW1lfSR7ZXh0ZW5kc0NsYXVzZX0ge2ApO1xuXHRcdFx0XG5cdFx0Ly8gQWRkIGFsbCBpbnN0YW5jZSBwcm9wZXJ0aWVzIChmb3IgdHlwZSBtZXJnaW5nKVxuXHRcdGZvciAoY29uc3QgWyBwcm9wTmFtZSwgcHJvcEluZm8gXSBvZiBub2RlLnByb3BlcnRpZXMuZW50cmllcygpKSB7XG5cdFx0XHRjb25zdCBvcHRpb25hbCA9IHByb3BJbmZvLm9wdGlvbmFsID8gJz8nIDogJyc7XG5cdFx0XHRjb25zdCByZWFkb25seSA9IHByb3BJbmZvLnJlYWRvbmx5ID8gJ3JlYWRvbmx5ICcgOiAnJztcblx0XHRcdGxpbmVzLnB1c2goYCR7aW5kZW50U3RyfVxcdCR7cmVhZG9ubHl9JHtwcm9wTmFtZX0ke29wdGlvbmFsfTogJHtwcm9wSW5mby50eXBlfTtgKTtcblx0XHR9XG5cblx0XHQvLyBBZGQgc3VidHlwZSBjb25zdHJ1Y3RvcnMgKG5vbi1vcHRpb25hbCBzbyB0aGV5J3JlIGFjY2Vzc2libGUpIC0gb25seSBmb3Igcm9vdCB0eXBlc1xuXHRcdGlmICghbm9kZS5wYXJlbnQpIHtcblx0XHRcdGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbi52YWx1ZXMoKSkge1xuXHRcdFx0XHR0aGlzLnB1c2hDaGlsZENvbnN0cnVjdG9yRmllbGQobGluZXMsIGluZGVudFN0ciwgY2hpbGQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XG5cdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9fWApO1xuXHRcdGxpbmVzLnB1c2goJycpO1xuXHR9XG5cdFx0XG5cdC8qKlxuXHRcdCogR2VuZXJhdGUgYSB0eXBlcy50cyBmaWxlIHdpdGggY29tcGxldGUgaW5zdGFuY2UgaW50ZXJmYWNlc1xuXHRcdCogVGhpcyBpbmNsdWRlcyBhbGwgcHJvcGVydGllcyBleHRyYWN0ZWQgZnJvbSB0aGUgY29uc3RydWN0b3JzXG5cdFx0Ki9cblx0Z2VuZXJhdGVUeXBlc0ZpbGUgKCk6IEdlbmVyYXRlZFR5cGVzIHtcblx0XHRjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcblx0XHRjb25zdCBnZW5lcmF0ZWRUeXBlczogc3RyaW5nW10gPSBbXTtcblxuXHRcdC8vIEhlYWRlclxuXHRcdGxpbmVzLnB1c2goJy8vIEdlbmVyYXRlZCBieSBAbW5lbW9uaWNhL3RhY3RpY2EgLSBETyBOT1QgRURJVCcpO1xuXHRcdGxpbmVzLnB1c2goJy8vIFRoaXMgZmlsZSBwcm92aWRlcyBjb21wbGV0ZSBUeXBlU2NyaXB0IGludGVyZmFjZXMgZm9yIE1uZW1vbmljYSB0eXBlcycpO1xuXHRcdGxpbmVzLnB1c2goJycpO1xuXHRcdGxpbmVzLnB1c2goJy8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZSAqLycpO1xuXHRcdGxpbmVzLnB1c2goJy8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1pbnRlcmZhY2UgKi8nKTtcblx0XHRsaW5lcy5wdXNoKCcnKTtcblxuXHRcdC8vIEltcG9ydCBQcm90b0ZsYXQgZnJvbSBtbmVtb25pY2Fcblx0XHRsaW5lcy5wdXNoKCdpbXBvcnQgdHlwZSB7IFByb3RvRmxhdCB9IGZyb20gXFwnbW5lbW9uaWNhXFwnOycpO1xuXHRcdGxpbmVzLnB1c2goJycpO1xuXG5cdFx0Ly8gR2VuZXJhdGUgY29tcGxldGUgaW5zdGFuY2UgaW50ZXJmYWNlcyBmb3IgZGVmYXVsdC1jb2xsZWN0aW9uIHR5cGVzIGFuZFxuXHRcdC8vIGZvciBjdXN0b20gY29sbGVjdGlvbnMgdGhhdCBkZWNsYXJlIGEgdXNlci1wcm92aWRlZCByZWdpc3RyeSBpbnRlcmZhY2Vcblx0XHQvLyAoT3B0aW9uIEIpLiBDdXN0b20tY29sbGVjdGlvbiB0eXBlcyB3aXRob3V0IGEgcmVnaXN0cnkgaW50ZXJmYWNlIGFyZVxuXHRcdC8vIGlzb2xhdGVkIGF0IHJ1bnRpbWUgYW5kIGFyZSBub3QgZW1pdHRlZC5cblx0XHRmb3IgKGNvbnN0IHJvb3Qgb2YgdGhpcy5ncmFwaC5yb290cy52YWx1ZXMoKSkge1xuXHRcdFx0Zm9yIChjb25zdCBub2RlIG9mIHRoaXMuZ3JhcGguZGZzKHJvb3QpKSB7XG5cdFx0XHRcdGlmIChub2RlLmNvbGxlY3Rpb25JZCAmJiAhbm9kZS5yZWdpc3RyeUludGVyZmFjZU5hbWUpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBpbnRlcmZhY2VOYW1lID0gdGhpcy5nZXRJbnN0YW5jZVR5cGVOYW1lKG5vZGUpO1xuXHRcdFx0XHRnZW5lcmF0ZWRUeXBlcy5wdXNoKGludGVyZmFjZU5hbWUpO1xuXHRcdFx0XHR0aGlzLmdlbmVyYXRlQ29tcGxldGVJbnN0YW5jZUludGVyZmFjZShub2RlLCBsaW5lcyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGNvbnRlbnQgOiBsaW5lcy5qb2luKCdcXG4nKSxcblx0XHRcdHR5cGVzICAgOiBnZW5lcmF0ZWRUeXBlcyxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdFx0ICogR2VuZXJhdGUgYSBjb21wbGV0ZSBpbnN0YW5jZSB0eXBlIGFsaWFzIHdpdGggYWxsIHByb3BlcnRpZXNcblx0XHQgKiBUaGlzIGlzIGZvciB0aGUgdHlwZXMudHMgZmlsZSB0aGF0IHVzZXJzIGltcG9ydCBmcm9tXG5cdFx0ICovXG5cdHByaXZhdGUgZ2VuZXJhdGVDb21wbGV0ZUluc3RhbmNlSW50ZXJmYWNlIChub2RlOiBUeXBlTm9kZSwgbGluZXM6IHN0cmluZ1tdKTogdm9pZCB7XG5cdFx0Y29uc3QgdHlwZU5hbWUgPSB0aGlzLmdldEluc3RhbmNlVHlwZU5hbWUobm9kZSk7XG5cblx0XHRpZiAobm9kZS5wYXJlbnQpIHtcblx0XHRcdC8vIE5lc3RlZCB0eXBlOiBVc2UgUHJvdG9GbGF0IHRvIHByb3Blcmx5IGV4Y2x1ZGUgb3ZlcnJpZGRlbiBwcm9wZXJ0aWVzXG5cdFx0XHRsaW5lcy5wdXNoKGBleHBvcnQgdHlwZSAke3R5cGVOYW1lfSA9IFByb3RvRmxhdDwke3RoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShub2RlLnBhcmVudCl9LCB7YCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFJvb3QgdHlwZToganVzdCB0aGUgcHJvcGVydGllcyBvYmplY3Rcblx0XHRcdGxpbmVzLnB1c2goYGV4cG9ydCB0eXBlICR7dHlwZU5hbWV9ID0ge2ApO1xuXHRcdH1cblxuXHRcdC8vIEFkZCBpbnN0YW5jZSBwcm9wZXJ0aWVzIGV4dHJhY3RlZCBmcm9tIHRoZSBjb25zdHJ1Y3RvclxuXHRcdGZvciAoY29uc3QgWyBwcm9wTmFtZSwgcHJvcEluZm8gXSBvZiBub2RlLnByb3BlcnRpZXMuZW50cmllcygpKSB7XG5cdFx0XHRjb25zdCBvcHRpb25hbCA9IHByb3BJbmZvLm9wdGlvbmFsID8gJz8nIDogJyc7XG5cdFx0XHRjb25zdCByZWFkb25seSA9IHByb3BJbmZvLnJlYWRvbmx5ID8gJ3JlYWRvbmx5ICcgOiAnJztcblx0XHRcdGxpbmVzLnB1c2goYFxcdCR7cmVhZG9ubHl9JHtwcm9wTmFtZX0ke29wdGlvbmFsfTogJHt0aGlzLnJlc29sdmVUeXBlSW5TdHJpbmcocHJvcEluZm8udHlwZSwgbm9kZSl9O2ApO1xuXHRcdH1cblxuXHRcdC8vIEFkZCBuZXN0ZWQgY29uc3RydWN0b3IgcHJvcGVydGllcyBmb3Igbm9uLWxlYWYgbm9kZXNcblx0XHQvLyBMZWFmIG5vZGVzIChubyBjaGlsZHJlbikgZG9uJ3QgZ2V0IGNvbnN0cnVjdG9yIHByb3BlcnRpZXNcblx0XHQvLyBUaGlzIGZvbGxvd3MgbW5lbW9uaWNhJ3Mgc3RyaWN0Q2hhaW4gYmVoYXZpb3Jcblx0XHRpZiAobm9kZS5jaGlsZHJlbi5zaXplID4gMCkge1xuXHRcdFx0Zm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuLnZhbHVlcygpKSB7XG5cdFx0XHRcdHRoaXMucHVzaENoaWxkQ29uc3RydWN0b3JGaWVsZChsaW5lcywgJycsIGNoaWxkKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGb3IgbmVzdGVkIHR5cGVzLCBhZGQgdGhpcyBub2RlJ3MgY29uc3RydWN0b3IgYW5kIGFsbCBzaWJsaW5ncyBmcm9tIHNhbWUgcGFyZW50IGFzIHVuZGVmaW5lZFxuXHRcdC8vIFRoaXMgaXMgbmVlZGVkIGZvciBzdHJpY3QgY2hhaW4gYmVoYXZpb3IgLSBwYXJlbnQgdW5kZWZpbmVkcyBhcmUgaW5oZXJpdGVkIHZpYSBQcm90b0ZsYXRcblx0XHRpZiAobm9kZS5wYXJlbnQpIHtcblx0XHRcdC8vIEFkZCB0aGlzIG5vZGUncyBvd24gY29uc3RydWN0b3IgYXMgdW5kZWZpbmVkXG5cdFx0XHRsaW5lcy5wdXNoKGBcXHQke25vZGUubmFtZX06IHVuZGVmaW5lZDtgKTtcblxuXHRcdFx0Ly8gQWRkIGFsbCBzaWJsaW5ncyAob3RoZXIgY2hpbGRyZW4gb2YgdGhlIHNhbWUgcGFyZW50KSBhcyB1bmRlZmluZWRcblx0XHRcdGZvciAoY29uc3Qgc2libGluZyBvZiBub2RlLnBhcmVudC5jaGlsZHJlbi52YWx1ZXMoKSkge1xuXHRcdFx0XHRpZiAoc2libGluZy5uYW1lICE9PSBub2RlLm5hbWUpIHtcblx0XHRcdFx0XHRsaW5lcy5wdXNoKGBcXHQke3NpYmxpbmcubmFtZX06IHVuZGVmaW5lZDtgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENsb3NlIHRoZSB0eXBlIHByb3Blcmx5IC0gUHJvdG9GbGF0IHVzZXMgfT47IGZvciBuZXN0ZWQsIH07IGZvciByb290XG5cdFx0aWYgKG5vZGUucGFyZW50KSB7XG5cdFx0XHRsaW5lcy5wdXNoKCd9PjsnKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bGluZXMucHVzaCgnfTsnKTtcblx0XHR9XG5cdFx0bGluZXMucHVzaCgnJyk7XG5cdH1cblxuXHQvKipcblx0XHQgKiBFbWl0IG9uZSBuZXN0ZWQtY3RvciBmaWVsZDogZHVhbCBzaWduYXR1cmVzIChjb25zdHJ1Y3QgKyB0aGVcblx0XHQgKiBjaGFpbi10aXAgQ0FMTCBmb3JtKS4gQm90aCBicmFuY2hlcyByZXNvbHZlIHRvIHRoZSBjb25zdHJ1Y3RvclxuXHRcdCAqIHJlc3VsdCB0eXBlIOKAlCBQcm9taXNlPEluc3RhbmNlVHlwZT4gZm9yIGFzeW5jIGhhbmRsZXJzLCB0aGUgcGxhaW5cblx0XHQgKiBpbnN0YW5jZSB0eXBlIG90aGVyd2lzZSAoZ2V0Q29uc3RydWN0b3JSZXN1bHRUeXBlKS5cblx0XHQgKi9cblx0cHJpdmF0ZSBwdXNoQ2hpbGRDb25zdHJ1Y3RvckZpZWxkIChsaW5lczogc3RyaW5nW10sIGluZGVudFN0cjogc3RyaW5nLCBjaGlsZDogVHlwZU5vZGUpOiB2b2lkIHtcblx0XHRjb25zdCBjaGlsZEluc3RhbmNlVHlwZSA9IHRoaXMuZ2V0Q29uc3RydWN0b3JSZXN1bHRUeXBlKGNoaWxkKTtcblx0XHRjb25zdCBjb25zdHJ1Y3RvclBhcmFtcyA9IHRoaXMuZ2VuZXJhdGVDb25zdHJ1Y3RvclBhcmFtcyhjaGlsZCk7XG5cdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9XFx0JHtjaGlsZC5uYW1lfToge2ApO1xuXHRcdGxpbmVzLnB1c2goYCR7aW5kZW50U3RyfVxcdFxcdG5ldyAke2NvbnN0cnVjdG9yUGFyYW1zfTogJHtjaGlsZEluc3RhbmNlVHlwZX07YCk7XG5cdFx0bGluZXMucHVzaChgJHtpbmRlbnRTdHJ9XFx0XFx0JHtjb25zdHJ1Y3RvclBhcmFtc306ICR7Y2hpbGRJbnN0YW5jZVR5cGV9O2ApO1xuXHRcdGxpbmVzLnB1c2goYCR7aW5kZW50U3RyfVxcdH07YCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIHR5cGUgYSBjb25zdHJ1Y3RvciBpbnZvY2F0aW9uIHJlc29sdmVzIHRvOiB0aGUgaW5zdGFuY2UgdHlwZSwgb3Jcblx0ICogUHJvbWlzZTxJbnN0YW5jZVR5cGU+IGZvciBhc3luYyBoYW5kbGVycyAoaXNBc3luYykuIFRoZSBpbnN0YW5jZSB0eXBlXG5cdCAqIGl0c2VsZiBpcyBuZXZlciB3cmFwcGVkIOKAlCBvbmx5IHRoZSBjb25zdHJ1Y3RvciBSRVNVTFQgcG9zaXRpb25zXG5cdCAqIChzdWJ0eXBlIHByb3BlcnR5IHR3aW5zICsgcmVnaXN0cnkgZW50cmllcykuXG5cdCAqL1xuXHRwcml2YXRlIGdldENvbnN0cnVjdG9yUmVzdWx0VHlwZSAobm9kZTogVHlwZU5vZGUpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGluc3RhbmNlVHlwZSA9IHRoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShub2RlKTtcblx0XHRjb25zdCByZXN1bHQgPSBub2RlLmlzQXN5bmMgPyBgUHJvbWlzZTwke2luc3RhbmNlVHlwZX0+YCA6IGluc3RhbmNlVHlwZTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdFx0ICogR2VuZXJhdGUgYSBzaW1wbGUgdHlwZSBkZWNsYXJhdGlvbiBmb3IgYSBzaW5nbGUgdHlwZVxuXHRcdCAqL1xuXHRnZW5lcmF0ZVNpbmdsZVR5cGUgKG5vZGU6IFR5cGVOb2RlKTogc3RyaW5nIHtcblx0XHRjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcblx0XHR0aGlzLmdlbmVyYXRlQ29tcGxldGVJbnN0YW5jZUludGVyZmFjZShub2RlLCBsaW5lcyk7XG5cdFx0cmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xuXHR9XG5cblx0LyoqXG5cdFx0ICogR2VuZXJhdGUgVHlwZVJlZ2lzdHJ5IGludGVyZmFjZSBmb3IgdHlwZS1zYWZlIGxvb2t1cCgpIGZ1bmN0aW9uXG5cdFx0ICogQXVnbWVudCBtbmVtb25pY2EncyBUeXBlUmVnaXN0cnkgc28gbG9va3VwKCdUeXBlTmFtZScpIHJldHVybnMgdGhlIHR5cGVkIGNvbnN0cnVjdG9yXG5cdFx0ICovXG5cdGdlbmVyYXRlVHlwZVJlZ2lzdHJ5ICgpOiBHZW5lcmF0ZWRUeXBlcyB7XG5cdFx0Y29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG5cdFx0Y29uc3QgZ2VuZXJhdGVkVHlwZXM6IHN0cmluZ1tdID0gW107XG5cblx0XHQvLyBIZWFkZXJcblx0XHRsaW5lcy5wdXNoKCcvLyBHZW5lcmF0ZWQgVHlwZVJlZ2lzdHJ5IGZvciB0eXBlLXNhZmUgbW5lbW9uaWNhLmxvb2t1cCgpJyk7XG5cdFx0bGluZXMucHVzaCgnLy8gVGhpcyBmaWxlIGF1Z21lbnRzIG1uZW1vbmljYVxcJ3MgVHlwZVJlZ2lzdHJ5IHZpYSBkZWNsYXJhdGlvbiBtZXJnaW5nLicpO1xuXHRcdGxpbmVzLnB1c2goJy8vJyk7XG5cdFx0bGluZXMucHVzaCgnLy8gVXNhZ2U6Jyk7XG5cdFx0bGluZXMucHVzaCgnLy8gICBpbXBvcnQgeyBsb29rdXAgfSBmcm9tIFxcJ21uZW1vbmljYVxcJzsnKTtcblx0XHRsaW5lcy5wdXNoKCcvLyAgIGltcG9ydCBcXCcuLy50YWN0aWNhL3JlZ2lzdHJ5XFwnOyAgLy8gYXBwbGllcyB0aGUgYXVnbWVudGF0aW9uJyk7XG5cdFx0bGluZXMucHVzaCgnLy8gICBjb25zdCBNeVR5cGUgPSBsb29rdXAoXFwnTXlUeXBlXFwnKTsnKTtcblx0XHRsaW5lcy5wdXNoKCcvLyAgIC8vIFR5cGVTY3JpcHQga25vd3M6IE15VHlwZSBpcyB0aGUgdHlwZWQgY29uc3RydWN0b3IgZm9yIE15VHlwZScpO1xuXHRcdGxpbmVzLnB1c2goJy8vICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgTXlUeXBlKHsgLyogY29uc3RydWN0b3IgYXJncyAqLyB9KTsnKTtcblx0XHRsaW5lcy5wdXNoKCcvLyAgIC8vIGluc3RhbmNlIGhhcyBmdWxsIGludGVsbGlzZW5zZSBmb3IgdGhlIGdlbmVyYXRlZCB0eXBlJyk7XG5cdFx0bGluZXMucHVzaCgnJyk7XG5cblx0XHQvLyBJbXBvcnQgaW5zdGFuY2UgdHlwZXMgZnJvbSB0eXBlcy50cy5cblx0XHQvLyBTa2lwIGN1c3RvbS1jb2xsZWN0aW9uIHR5cGVzIHRoYXQgaGF2ZSBubyB1c2VyLXByb3ZpZGVkIHJlZ2lzdHJ5IGludGVyZmFjZS5cblx0XHRsaW5lcy5wdXNoKCdpbXBvcnQgdHlwZSB7Jyk7XG5cdFx0Zm9yIChjb25zdCByb290IG9mIHRoaXMuZ3JhcGgucm9vdHMudmFsdWVzKCkpIHtcblx0XHRcdGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLmdyYXBoLmRmcyhyb290KSkge1xuXHRcdFx0XHRpZiAobm9kZS5jb2xsZWN0aW9uSWQgJiYgIW5vZGUucmVnaXN0cnlJbnRlcmZhY2VOYW1lKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgaW5zdGFuY2VUeXBlTmFtZSA9IHRoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShub2RlKTtcblx0XHRcdFx0bGluZXMucHVzaChgXFx0JHtpbnN0YW5jZVR5cGVOYW1lfSxgKTtcblx0XHRcdFx0Z2VuZXJhdGVkVHlwZXMucHVzaChpbnN0YW5jZVR5cGVOYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0bGluZXMucHVzaChgfSBmcm9tICcke3RoaXMuaW1wb3J0UGF0aCgnLi90eXBlcycpfSc7YCk7XG5cdFx0bGluZXMucHVzaCgnJyk7XG5cblx0XHQvLyBHZW5lcmF0ZSBtb2R1bGUgYXVnbWVudGF0aW9uIGZvciBtbmVtb25pY2EgVHlwZVJlZ2lzdHJ5XG5cdFx0bGluZXMucHVzaCgnLyoqJyk7XG5cdFx0bGluZXMucHVzaCgnICogVHlwZSByZWdpc3RyeSBhdWdtZW50aW5nIG1uZW1vbmljYVxcJ3MgVHlwZVJlZ2lzdHJ5IGludGVyZmFjZScpO1xuXHRcdGxpbmVzLnB1c2goJyAqIFRoaXMgZW5hYmxlcyB0eXBlLXNhZmUgbG9va3VwKCkgd2l0aG91dCBleHBsaWNpdCB0eXBlIGFyZ3VtZW50cycpO1xuXHRcdGxpbmVzLnB1c2goJyAqJyk7XG5cdFx0bGluZXMucHVzaCgnICogVXNhZ2U6IGNvbnN0IFNvbWVUeXBlID0gbG9va3VwKFxcJ1NvbWVUeXBlXFwnKTsgLy8gRnVsbHkgdHlwZWQhJyk7XG5cdFx0bGluZXMucHVzaCgnICovJyk7XG5cdFx0bGluZXMucHVzaCgnZGVjbGFyZSBtb2R1bGUgXFwnbW5lbW9uaWNhXFwnIHsnKTtcblx0XHRsaW5lcy5wdXNoKCdcdGludGVyZmFjZSBUeXBlUmVnaXN0cnkgeycpO1xuXG5cdFx0Ly8gR2VuZXJhdGUgZW50cmllcyBmb3IgYWxsIHR5cGUgcGF0aHMgdGhhdCBiZWxvbmcgdG8gdGhlIGRlZmF1bHQvZ2xvYmFsIGNvbGxlY3Rpb24uXG5cdFx0Ly8gVHlwZXMgdGhhdCBsaXZlIGluIGEgY3VzdG9tIGNvbGxlY3Rpb24gKGNvbGxlY3Rpb25JZCBzZXQpIGFyZSBpc29sYXRlZCBhdCBydW50aW1lXG5cdFx0Ly8gYW5kIGFyZSBub3QgcmVhY2hhYmxlIHRocm91Z2ggZnJlZSBsb29rdXAoKSwgc28gdGhleSBtdXN0IG5vdCBiZSBhZGRlZCB0byB0aGVcblx0XHQvLyBnbG9iYWwgVHlwZVJlZ2lzdHJ5IGF1Z21lbnRhdGlvbi5cblx0XHRmb3IgKGNvbnN0IHJvb3Qgb2YgdGhpcy5ncmFwaC5yb290cy52YWx1ZXMoKSkge1xuXHRcdFx0Zm9yIChjb25zdCBub2RlIG9mIHRoaXMuZ3JhcGguZGZzKHJvb3QpKSB7XG5cdFx0XHRcdGlmIChub2RlLmNvbGxlY3Rpb25JZCkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGZ1bGxQYXRoID0gdGhpcy5nZXRGdWxsUGF0aChub2RlKTtcblx0XHRcdFx0Y29uc3QgaW5zdGFuY2VUeXBlID0gdGhpcy5nZXRDb25zdHJ1Y3RvclJlc3VsdFR5cGUobm9kZSk7XG5cdFx0XHRcdC8vIEdlbmVyYXRlIHR5cGVkIGNvbnN0cnVjdG9yIHNpZ25hdHVyZSBmb3IgbmVzdGVkIHR5cGVzIHdpdGggcHJvcGVydGllc1xuXHRcdFx0XHRjb25zdCBjb25zdHJ1Y3RvclNpZyA9IHRoaXMuZ2VuZXJhdGVDb25zdHJ1Y3RvclNpZ25hdHVyZShub2RlKTtcblx0XHRcdFx0bGluZXMucHVzaChgXFx0XFx0JyR7ZnVsbFBhdGh9JzogJHtjb25zdHJ1Y3RvclNpZ30gPT4gJHtpbnN0YW5jZVR5cGV9O2ApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGxpbmVzLnB1c2goJ1xcdH0nKTtcblx0XHRsaW5lcy5wdXNoKCd9Jyk7XG5cdFx0bGluZXMucHVzaCgnJyk7XG5cblx0XHQvLyBHZW5lcmF0ZSBwZXItY29sbGVjdGlvbiByZWdpc3RyeSBhdWdtZW50YXRpb25zIGZvciBPcHRpb24gQlxuXHRcdC8vICh1c2VyLXByb3ZpZGVkIHJlZ2lzdHJ5IGludGVyZmFjZXMpLlxuXHRcdGNvbnN0IGNvbGxlY3Rpb25Hcm91cHMgPSB0aGlzLmdyb3VwQ29sbGVjdGlvblJlZ2lzdHJ5Tm9kZXMoKTtcblx0XHRmb3IgKGNvbnN0IFsga2V5LCBub2RlcyBdIG9mIGNvbGxlY3Rpb25Hcm91cHMpIHtcblx0XHRcdGNvbnN0IFsgcmVnaXN0cnlJbnRlcmZhY2VOYW1lLCBzb3VyY2VGaWxlIF0gPSBrZXkuc3BsaXQoJzo6Jyk7XG5cdFx0XHRjb25zdCBtb2R1bGVQYXRoID0gdGhpcy5yZXNvbHZlTW9kdWxlUGF0aChzb3VyY2VGaWxlKTtcblx0XHRcdGxpbmVzLnB1c2goYGRlY2xhcmUgbW9kdWxlICcke21vZHVsZVBhdGh9JyB7YCk7XG5cdFx0XHRsaW5lcy5wdXNoKGBcXHRpbnRlcmZhY2UgJHtyZWdpc3RyeUludGVyZmFjZU5hbWV9IHtgKTtcblx0XHRcdGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuXHRcdFx0XHRjb25zdCBmdWxsUGF0aCA9IHRoaXMuZ2V0RnVsbFBhdGgobm9kZSk7XG5cdFx0XHRcdGNvbnN0IGluc3RhbmNlVHlwZSA9IHRoaXMuZ2V0Q29uc3RydWN0b3JSZXN1bHRUeXBlKG5vZGUpO1xuXHRcdFx0XHRjb25zdCBjb25zdHJ1Y3RvclNpZyA9IHRoaXMuZ2VuZXJhdGVDb25zdHJ1Y3RvclNpZ25hdHVyZShub2RlKTtcblx0XHRcdFx0bGluZXMucHVzaChgXFx0XFx0JyR7ZnVsbFBhdGh9JzogJHtjb25zdHJ1Y3RvclNpZ30gPT4gJHtpbnN0YW5jZVR5cGV9O2ApO1xuXHRcdFx0fVxuXHRcdFx0bGluZXMucHVzaCgnXFx0fScpO1xuXHRcdFx0bGluZXMucHVzaCgnfScpO1xuXHRcdFx0bGluZXMucHVzaCgnJyk7XG5cdFx0fVxuXG5cdFx0Ly8gUmUtZXhwb3J0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFuZCBleHBsaWNpdCB1c2FnZVxuXHRcdGxpbmVzLnB1c2goJ2ltcG9ydCB0eXBlIHsgVHlwZVJlZ2lzdHJ5IH0gZnJvbSBcXCdtbmVtb25pY2FcXCc7Jyk7XG5cdFx0bGluZXMucHVzaCgnZXhwb3J0IHR5cGUgeyBUeXBlUmVnaXN0cnkgfTsnKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRjb250ZW50IDogbGluZXMuam9pbignXFxuJyksXG5cdFx0XHR0eXBlcyAgIDogZ2VuZXJhdGVkVHlwZXMsXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHRcdCAqIEdlbmVyYXRlIGNvbnN0cnVjdG9yIHBhcmFtZXRlciBsaXN0IGZvciBhIHR5cGUgbm9kZSAodGhlIFwiKOKApilcIiBwYXJ0KVxuXHRcdCAqL1xuXHRwcml2YXRlIGdlbmVyYXRlQ29uc3RydWN0b3JQYXJhbXMgKG5vZGU6IFR5cGVOb2RlKTogc3RyaW5nIHtcblx0XHRjb25zdCBwYXJhbXMgPSBub2RlLmNvbnN0cnVjdG9yUGFyYW1zO1xuXHRcdGlmICghcGFyYW1zIHx8IHBhcmFtcy5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiAnKCknO1xuXHRcdH1cblx0XHRjb25zdCBwcm9wczogc3RyaW5nW10gPSBbXTtcblx0XHRmb3IgKGNvbnN0IHBhcmFtIG9mIHBhcmFtcykge1xuXHRcdFx0Y29uc3Qgb3B0aW9uYWwgPSBwYXJhbS5vcHRpb25hbCA/ICc/JyA6ICcnO1xuXHRcdFx0cHJvcHMucHVzaChgJHtwYXJhbS5uYW1lfSR7b3B0aW9uYWx9OiAke3BhcmFtLnR5cGV9YCk7XG5cdFx0fVxuXHRcdHJldHVybiBgKCR7cHJvcHMuam9pbignLCAnKX0pYDtcblx0fVxuXG5cdC8qKlxuXHRcdCAqIEdlbmVyYXRlIGNvbnN0cnVjdG9yIHNpZ25hdHVyZSBmb3IgYSB0eXBlIG5vZGVcblx0XHQgKiBVc2VzIGNvbnN0cnVjdG9yUGFyYW1zIGZvciBUeXBlUmVnaXN0cnkgc2lnbmF0dXJlIChub3QgaW5zdGFuY2UgcHJvcGVydGllcylcblx0XHQgKi9cblx0cHJpdmF0ZSBnZW5lcmF0ZUNvbnN0cnVjdG9yU2lnbmF0dXJlIChub2RlOiBUeXBlTm9kZSk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGBuZXcgJHt0aGlzLmdlbmVyYXRlQ29uc3RydWN0b3JQYXJhbXMobm9kZSl9YDtcblx0fVxuXG5cdC8qKlxuXHRcdCAqIEdldCB0aGUgZnVsbCBkb3R0ZWQgcGF0aCBmb3IgYSB0eXBlIG5vZGVcblx0XHQgKi9cblx0cHJpdmF0ZSBnZXRGdWxsUGF0aCAobm9kZTogVHlwZU5vZGUpOiBzdHJpbmcge1xuXHRcdGlmICghbm9kZS5wYXJlbnQpIHtcblx0XHRcdHJldHVybiBub2RlLm5hbWU7XG5cdFx0fVxuXHRcdHJldHVybiBgJHt0aGlzLmdldEZ1bGxQYXRoKG5vZGUucGFyZW50KX0uJHtub2RlLm5hbWV9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGluc3RhbmNlIHR5cGUgbmFtZSBmb3IgYSBub2RlXG5cdCAqIFVzZXMgZnVsbCBwYXRoIHdpdGggdW5kZXJzY29yZXM6IFVzYWdlcy5Vc2FnZUVudHJ5IC0+IFVzYWdlc19Vc2FnZUVudHJ5XG5cdCAqIEZvciBPcHRpb24gQiBjdXN0b20gY29sbGVjdGlvbnMsIHByZWZpeGVzIHdpdGggdGhlIHJlZ2lzdHJ5IGludGVyZmFjZSBuYW1lLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRJbnN0YW5jZVR5cGVOYW1lIChub2RlOiBUeXBlTm9kZSk6IHN0cmluZyB7XG5cdFx0Y29uc3QgZnVsbFBhdGggPSB0aGlzLmdldEZ1bGxQYXRoKG5vZGUpO1xuXHRcdGNvbnN0IHByZWZpeCA9IG5vZGUucmVnaXN0cnlJbnRlcmZhY2VOYW1lID8gYCR7bm9kZS5yZWdpc3RyeUludGVyZmFjZU5hbWV9X2AgOiAnJztcblx0XHRyZXR1cm4gYCR7cHJlZml4fSR7ZnVsbFBhdGgucmVwbGFjZSgvXFwuL2csICdfJyl9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNvbHZlIGEgc2ltcGxlIHR5cGUgbmFtZSB0byBpdHMgZnVsbCBwYXRoIG5hbWVcblx0ICogZS5nLiwgXCJEZWZpbml0aW9uRW50cnlcIiAtPiBcIkRlZmluaXRpb25zX0RlZmluaXRpb25FbnRyeVwiXG5cdCAqXG5cdCAqIFdpdGggYSByZWZlcmVuY2VSZXNvbHZlciBpbnN0YWxsZWQgKHRoZSBDTEkgcGF0aCksIHJlc29sdXRpb24gaXNcblx0ICogcGF0aC1hd2FyZSBwZXIgdGhlIGdyYXBoIGlkZW50aXR5IGxhdzogdGhlIHJlc29sdmVyIHJldHVybnMgdGhlIHVuaXF1ZVxuXHQgKiB0eXBlLCAnYW1iaWd1b3VzJywgb3IgdW5kZWZpbmVkIOKAlCB0aGUgbGF0dGVyIHR3byByZWNvcmQgYSBoYXJkLWZhaWxcblx0ICogUmVzb2x1dGlvbkVycm9yIGFuZCBlbWl0IGB1bmtub3duYCBpbnN0ZWFkIG9mIHNpbGVudGx5IHBpY2tpbmcgYVxuXHQgKiBmaXJzdCBtYXRjaC4gV2l0aG91dCBhIHJlc29sdmVyIHRoZSBsZWdhY3kgZmlyc3QtbWF0Y2ggc2NhbiBzdGF5cy5cblx0ICovXG5cdHByaXZhdGUgcmVzb2x2ZVR5cGVOYW1lIChzaW1wbGVOYW1lOiBzdHJpbmcsIGN1cnJlbnROb2RlOiBUeXBlTm9kZSk6IHN0cmluZyB7XG5cdFx0aWYgKHRoaXMucmVmZXJlbmNlUmVzb2x2ZXIpIHtcblx0XHRcdGNvbnN0IHJlc29sdmVkID0gdGhpcy5yZWZlcmVuY2VSZXNvbHZlcihzaW1wbGVOYW1lLCBjdXJyZW50Tm9kZSk7XG5cdFx0XHRpZiAocmVzb2x2ZWQgJiYgcmVzb2x2ZWQgIT09ICdhbWJpZ3VvdXMnKSB7XG5cdFx0XHRcdGNvbnN0IGluc3RhbmNlTmFtZSA9IHRoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShyZXNvbHZlZCk7XG5cdFx0XHRcdHJldHVybiBpbnN0YW5jZU5hbWU7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBhbmNob3JMb2NhdGlvbiA9IGAke2N1cnJlbnROb2RlLnNvdXJjZUZpbGV9OiR7Y3VycmVudE5vZGUubGluZX06JHtjdXJyZW50Tm9kZS5jb2x1bW59YDtcblx0XHRcdGNvbnN0IGFtYmlndW91c0dlbmVyYXRpb25NZXNzYWdlID0gYEFtYmlndW91cyByZWZlcmVuY2UgdG8gbW5lbW9uaWNhIHR5cGUgJyR7c2ltcGxlTmFtZX0nIGAgK1xuXHRcdFx0XHRgd2hpbGUgZ2VuZXJhdGluZyAnJHt0aGlzLmdldEZ1bGxQYXRoKGN1cnJlbnROb2RlKX0nYDtcblx0XHRcdGNvbnN0IHVucmVzb2x2ZWRHZW5lcmF0aW9uTWVzc2FnZSA9IGBVbnJlc29sdmVkIHJlZmVyZW5jZSB0byBtbmVtb25pY2EgdHlwZSAnJHtzaW1wbGVOYW1lfScgYCArXG5cdFx0XHRcdGB3aGlsZSBnZW5lcmF0aW5nICcke3RoaXMuZ2V0RnVsbFBhdGgoY3VycmVudE5vZGUpfSdgO1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IHJlc29sdmVkID09PSAnYW1iaWd1b3VzJ1xuXHRcdFx0XHQ/IGFtYmlndW91c0dlbmVyYXRpb25NZXNzYWdlXG5cdFx0XHRcdDogdW5yZXNvbHZlZEdlbmVyYXRpb25NZXNzYWdlO1xuXHRcdFx0Y29uc3QgZXJyb3I6IFJlc29sdXRpb25FcnJvciA9IHsgbWVzc2FnZSwgbG9jYXRpb25zIDogWyBhbmNob3JMb2NhdGlvbiBdIH07XG5cdFx0XHR0aGlzLnJlc29sdXRpb25FcnJvcnMucHVzaChlcnJvcik7XG5cdFx0XHRjb25zdCB1bmtub3duUmVzdWx0ID0gJ3Vua25vd24nO1xuXHRcdFx0cmV0dXJuIHVua25vd25SZXN1bHQ7XG5cdFx0fVxuXG5cdFx0Ly8gRmlyc3QgY2hlY2sgaWYgaXQncyB0aGUgY3VycmVudCBub2RlIG9yIGl0cyBjaGlsZHJlblxuXHRcdGlmIChjdXJyZW50Tm9kZS5uYW1lID09PSBzaW1wbGVOYW1lKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRJbnN0YW5jZVR5cGVOYW1lKGN1cnJlbnROb2RlKTtcblx0XHR9XG5cdFx0Zm9yIChjb25zdCBjaGlsZCBvZiBjdXJyZW50Tm9kZS5jaGlsZHJlbi52YWx1ZXMoKSkge1xuXHRcdFx0aWYgKGNoaWxkLm5hbWUgPT09IHNpbXBsZU5hbWUpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0SW5zdGFuY2VUeXBlTmFtZShjaGlsZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIFNlYXJjaCBhbGwgdHlwZXMgaW4gdGhlIGdyYXBoXG5cdFx0Zm9yIChjb25zdCB0eXBlIG9mIHRoaXMuZ3JhcGguZ2V0QWxsVHlwZXMoKSkge1xuXHRcdFx0aWYgKHR5cGUubmFtZSA9PT0gc2ltcGxlTmFtZSkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRJbnN0YW5jZVR5cGVOYW1lKHR5cGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc2ltcGxlTmFtZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYXJkLWZhaWwgZ3JhcGggcmVmZXJlbmNlIGVycm9ycyByZWNvcmRlZCB3aGlsZSBnZW5lcmF0aW5nIChzZWVcblx0ICogcmVmZXJlbmNlUmVzb2x2ZXIpLiBUaGUgQ0xJIHByaW50cyBldmVyeSBsb2NhdGlvbiBhbmQgd3JpdGVzIG5vIG91dHB1dC5cblx0ICovXG5cdGdldFJlc29sdXRpb25FcnJvcnMgKCk6IFJlc29sdXRpb25FcnJvcltdIHtcblx0XHRjb25zdCByZXN1bHQgPSBbIC4uLnRoaXMucmVzb2x1dGlvbkVycm9ycyBdO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogUmVzb2x2ZSBzaW1wbGUgdHlwZSBuYW1lcyB0byBmdWxsIHBhdGggbmFtZXMgd2l0aGluIGEgdHlwZSBzdHJpbmdcblx0ICogSGFuZGxlcyBjb21wbGV4IHR5cGVzIGxpa2UgQXJyYXk8VXNhZ2VFbnRyeT4sIE1hcDxzdHJpbmcsIFR5cGVFbnRyeT4sIGV0Yy5cblx0ICovXG5cdHByaXZhdGUgcmVzb2x2ZVR5cGVJblN0cmluZyAodHlwZVN0cjogc3RyaW5nLCBjdXJyZW50Tm9kZTogVHlwZU5vZGUpOiBzdHJpbmcge1xuXHRcdC8vIEdldCBhbGwgdHlwZSBuYW1lcyBmcm9tIHRoZSBncmFwaFxuXHRcdGNvbnN0IGFsbFR5cGVzID0gdGhpcy5ncmFwaC5nZXRBbGxUeXBlcygpO1xuXHRcdGNvbnN0IHR5cGVOYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRcdGZvciAoY29uc3QgdHlwZSBvZiBhbGxUeXBlcykge1xuXHRcdFx0dHlwZU5hbWVzLmFkZCh0eXBlLm5hbWUpO1xuXHRcdH1cblxuXHRcdC8vIFNvcnQgYnkgbGVuZ3RoIChsb25nZXN0IGZpcnN0KSB0byBhdm9pZCBwYXJ0aWFsIHJlcGxhY2VtZW50c1xuXHRcdGNvbnN0IHNvcnRlZE5hbWVzID0gQXJyYXkuZnJvbSh0eXBlTmFtZXMpLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpO1xuXG5cdFx0Ly8gUmVwbGFjZSBlYWNoIHNpbXBsZSB0eXBlIG5hbWUgd2l0aCBpdHMgZnVsbCBwYXRoIHZlcnNpb25cblx0XHRsZXQgcmVzdWx0ID0gdHlwZVN0cjtcblx0XHRmb3IgKGNvbnN0IG5hbWUgb2Ygc29ydGVkTmFtZXMpIHtcblx0XHRcdC8vIFNraXAgbmFtZXMgdGhhdCBkbyBub3Qgb2NjdXIg4oCUIHdpdGggYSByZWZlcmVuY2VSZXNvbHZlciBpbnN0YWxsZWQsXG5cdFx0XHQvLyByZXNvbHZpbmcgYWJzZW50IG5hbWVzIHdvdWxkIHJlY29yZCBzcHVyaW91cyBlcnJvcnNcblx0XHRcdGNvbnN0IG9jY3VycyA9IG5ldyBSZWdFeHAoYFxcXFxiJHtuYW1lfVxcXFxiYCkudGVzdChyZXN1bHQpO1xuXHRcdFx0aWYgKCFvY2N1cnMpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHQvLyBVc2Ugd29yZCBib3VuZGFyeSBtYXRjaGluZyB0byBhdm9pZCByZXBsYWNpbmcgcGFydGlhbCBuYW1lc1xuXHRcdFx0Y29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBcXFxcYiR7bmFtZX1cXFxcYmAsICdnJyk7XG5cdFx0XHRjb25zdCBmdWxsVHlwZU5hbWUgPSB0aGlzLnJlc29sdmVUeXBlTmFtZShuYW1lLCBjdXJyZW50Tm9kZSk7XG5cdFx0XHRpZiAoZnVsbFR5cGVOYW1lICE9PSBuYW1lKSB7XG5cdFx0XHRcdHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKHJlZ2V4LCBmdWxsVHlwZU5hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdyb3VwIGNvbGxlY3Rpb24gdHlwZSBub2RlcyBieSB0aGVpciByZWdpc3RyeSBpbnRlcmZhY2UgbmFtZSBhbmQgdGhlXG5cdCAqIGNvbGxlY3Rpb24ncyBob21lIGZpbGUgKHRoZSBtb2R1bGUgZGVjbGFyaW5nIHRoZSBpbnRlcmZhY2Ug4oCUIHRoZVxuXHQgKiBhdWdtZW50YXRpb24gdGFyZ2V0KSwgTk9UIGVhY2ggdHlwZSdzIG93biBkZWZpbmUgZmlsZTogbXVsdGktZmlsZVxuXHQgKiBjb2xsZWN0aW9ucyBkZWZpbmUgdHlwZXMgYWNyb3NzIG1hbnkgbW9kdWxlcy5cblx0ICogUmV0dXJucyBhIG1hcCBrZXllZCBieSBgJHtyZWdpc3RyeUludGVyZmFjZU5hbWV9Ojoke3NvdXJjZUZpbGV9YC5cblx0ICovXG5cdHByaXZhdGUgZ3JvdXBDb2xsZWN0aW9uUmVnaXN0cnlOb2RlcyAoKTogTWFwPHN0cmluZywgVHlwZU5vZGVbXT4ge1xuXHRcdGNvbnN0IGdyb3VwcyA9IG5ldyBNYXA8c3RyaW5nLCBUeXBlTm9kZVtdPigpO1xuXHRcdGZvciAoY29uc3Qgcm9vdCBvZiB0aGlzLmdyYXBoLnJvb3RzLnZhbHVlcygpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy5ncmFwaC5kZnMocm9vdCkpIHtcblx0XHRcdFx0aWYgKCFub2RlLnJlZ2lzdHJ5SW50ZXJmYWNlTmFtZSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGhvbWVGaWxlID0gbm9kZS5jb2xsZWN0aW9uU291cmNlRmlsZSA/PyBub2RlLnNvdXJjZUZpbGU7XG5cdFx0XHRcdGNvbnN0IGtleSA9IGAke25vZGUucmVnaXN0cnlJbnRlcmZhY2VOYW1lfTo6JHtob21lRmlsZX1gO1xuXHRcdFx0XHRjb25zdCBleGlzdGluZyA9IGdyb3Vwcy5nZXQoa2V5KTtcblx0XHRcdFx0aWYgKGV4aXN0aW5nKSB7XG5cdFx0XHRcdFx0ZXhpc3RpbmcucHVzaChub2RlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRncm91cHMuc2V0KGtleSwgWyBub2RlIF0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBncm91cHM7XG5cdH1cblxuXHQvKipcblx0ICogUmVzb2x2ZSBhIHNvdXJjZSBmaWxlIHBhdGggdG8gYSBtb2R1bGUgc3BlY2lmaWVyIHJlbGF0aXZlIHRvIHRoZSBvdXRwdXQgZGlyZWN0b3J5LFxuXHQgKiBzdWl0YWJsZSBmb3IgdXNlIGluIGEgYGRlY2xhcmUgbW9kdWxlICcuLi4nYCBibG9jay5cblx0ICovXG5cdHByaXZhdGUgcmVzb2x2ZU1vZHVsZVBhdGggKHNvdXJjZUZpbGU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgb3V0cHV0QWJzb2x1dGUgPSBwYXRoLnJlc29sdmUodGhpcy5vdXRwdXREaXIpO1xuXHRcdGNvbnN0IHNvdXJjZUFic29sdXRlID0gcGF0aC5yZXNvbHZlKHNvdXJjZUZpbGUpO1xuXHRcdGxldCByZWxhdGl2ZSA9IHBhdGgucmVsYXRpdmUob3V0cHV0QWJzb2x1dGUsIHNvdXJjZUFic29sdXRlKTtcblx0XHQvLyBSZW1vdmUgLnRzIGV4dGVuc2lvbjsga2VlcCAudHN4IGlmIHByZXNlbnRcblx0XHRpZiAocmVsYXRpdmUuZW5kc1dpdGgoJy50cycpICYmICFyZWxhdGl2ZS5lbmRzV2l0aCgnLnRzeCcpKSB7XG5cdFx0XHRyZWxhdGl2ZSA9IHJlbGF0aXZlLnNsaWNlKDAsIC0zKTtcblx0XHR9XG5cdFx0Ly8gQ29udmVydCBXaW5kb3dzIHNlcGFyYXRvcnMgdG8gUE9TSVhcblx0XHRjb25zdCBwb3NpeFJlbGF0aXZlID0gcmVsYXRpdmUucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuXHRcdHJldHVybiBwb3NpeFJlbGF0aXZlO1xuXHR9XG59XG4iXX0=
package/lib/types.d.ts CHANGED
@@ -37,6 +37,13 @@ export interface TypeNode {
37
37
  properties: Map<string, PropertyInfo>;
38
38
  /** Constructor parameters (for TypeRegistry constructor signature) */
39
39
  constructorParams?: ConstructorParamInfo[];
40
+ /**
41
+ * True when the construct handler is an async function/arrow (detected
42
+ * syntactically by the async modifier). Emitted constructor shapes then
43
+ * resolve to Promise<InstanceType>. Async CLASSES are never flagged —
44
+ * they are typed by the user in userland (documented in AGENTS.md).
45
+ */
46
+ isAsync?: boolean;
40
47
  /** Parent type node */
41
48
  parent?: TypeNode;
42
49
  /** Child types */
package/lib/types.js CHANGED
@@ -1,3 +1,3 @@
1
1
  'use strict';
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFR5cGUgZGVmaW5pdGlvbnMgZm9yIFRhY3RpY2FcbiAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIFRhY3RpY2FDb25maWcge1xuXHQvKiogT3V0cHV0IGRpcmVjdG9yeSBmb3IgZ2VuZXJhdGVkIHR5cGVzIChkZWZhdWx0OiAudGFjdGljYSkgKi9cblx0b3V0cHV0RGlyPzogc3RyaW5nO1xuXHQvKiogRmlsZXMgdG8gaW5jbHVkZSAoZ2xvYiBwYXR0ZXJucykgKi9cblx0aW5jbHVkZT86IHN0cmluZ1tdO1xuXHQvKiogRmlsZXMgdG8gZXhjbHVkZSAoZ2xvYiBwYXR0ZXJucykgKi9cblx0ZXhjbHVkZT86IHN0cmluZ1tdO1xuXHQvKiogRW5hYmxlIHZlcmJvc2UgbG9nZ2luZyAqL1xuXHR2ZXJib3NlPzogYm9vbGVhbjtcblx0LyoqIEdlbmVyYXRlIGdsb2JhbCBhdWdtZW50YXRpb24gaW5zdGVhZCBvZiBtb2R1bGUgYXVnbWVudGF0aW9uIChkZWZhdWx0OiB0cnVlKSAqL1xuXHRnbG9iYWxBdWdtZW50YXRpb24/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb3BlcnR5SW5mbyB7XG5cdG5hbWU6IHN0cmluZztcblx0dHlwZTogc3RyaW5nO1xuXHRvcHRpb25hbDogYm9vbGVhbjtcblx0LyoqIFRydWUgaWYgdGhpcyBpcyBhIGdldHRlciBwcm9wZXJ0eSAocmVhZG9ubHkpICovXG5cdHJlYWRvbmx5PzogYm9vbGVhbjtcbn1cblxuLyoqIENvbnN0cnVjdG9yIHBhcmFtZXRlciBpbmZvIGZvciBUeXBlUmVnaXN0cnkgc2lnbmF0dXJlcyAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25zdHJ1Y3RvclBhcmFtSW5mbyB7XG5cdC8qKiBQYXJhbWV0ZXIgbmFtZSAoZS5nLiwgXCJ1c2FnZXNcIiwgXCJkYXRhXCIsIFwiY29uZmlnXCIpICovXG5cdG5hbWU6IHN0cmluZztcblx0LyoqIFRoZSB0eXBlIHN0cmluZyAtIGNhbiBiZSBhIHNpbXBsZSB0eXBlIG9yIGV4cGFuZGVkIG9iamVjdCBsaXRlcmFsICovXG5cdHR5cGU6IHN0cmluZztcblx0b3B0aW9uYWw6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZU5vZGUge1xuXHQvKiogVHlwZSBuYW1lIChlLmcuLCBcIlNlY29uZFR5cGVcIikgKi9cblx0bmFtZTogc3RyaW5nO1xuXHQvKiogRnVsbCBwYXRoIChlLmcuLCBcIkZpcnN0VHlwZS5TZWNvbmRUeXBlXCIpICovXG5cdGZ1bGxQYXRoOiBzdHJpbmc7XG5cdC8qKiBQcm9wZXJ0aWVzIGRlZmluZWQgaW4gdGhpcyB0eXBlJ3MgY29uc3RydWN0b3IgKi9cblx0cHJvcGVydGllczogTWFwPHN0cmluZywgUHJvcGVydHlJbmZvPjtcblx0LyoqIENvbnN0cnVjdG9yIHBhcmFtZXRlcnMgKGZvciBUeXBlUmVnaXN0cnkgY29uc3RydWN0b3Igc2lnbmF0dXJlKSAqL1xuXHRjb25zdHJ1Y3RvclBhcmFtcz86IENvbnN0cnVjdG9yUGFyYW1JbmZvW107XG5cdC8qKiBQYXJlbnQgdHlwZSBub2RlICovXG5cdHBhcmVudD86IFR5cGVOb2RlO1xuXHQvKiogQ2hpbGQgdHlwZXMgKi9cblx0Y2hpbGRyZW46IE1hcDxzdHJpbmcsIFR5cGVOb2RlPjtcblx0LyoqIFNvdXJjZSBmaWxlIHBhdGggKi9cblx0c291cmNlRmlsZTogc3RyaW5nO1xuXHQvKiogTGluZSBudW1iZXIgaW4gc291cmNlICovXG5cdGxpbmU6IG51bWJlcjtcblx0LyoqIENvbHVtbiBudW1iZXIgaW4gc291cmNlICovXG5cdGNvbHVtbjogbnVtYmVyO1xuXHQvKiogQ29uc3RydWN0b3IgZnVuY3Rpb24gbmFtZSBvciBjbGFzcyBuYW1lICovXG5cdGNvbnN0cnVjdG9yTmFtZT86IHN0cmluZztcblx0LyoqIENvbGxlY3Rpb24gaWRlbnRpZmllciBpZiB0aGUgdHlwZSBiZWxvbmdzIHRvIGEgY3VzdG9tIGNvbGxlY3Rpb24gKHVuZGVmaW5lZCA9IGRlZmF1bHQvZ2xvYmFsIHJlZ2lzdHJ5KSAqL1xuXHRjb2xsZWN0aW9uSWQ/OiBzdHJpbmc7XG5cdC8qKiBSZWdpc3RyeSBpbnRlcmZhY2UgbmFtZSBmb3IgY3VzdG9tIGNvbGxlY3Rpb25zIHVzaW5nIE9wdGlvbiBCICh1c2VyLXByb3ZpZGVkIHJlZ2lzdHJ5IGludGVyZmFjZSkgKi9cblx0cmVnaXN0cnlJbnRlcmZhY2VOYW1lPzogc3RyaW5nO1xuXHQvKipcblx0ICogU291cmNlIGZpbGUgb2YgdGhlIGNyZWF0ZVR5cGVzQ29sbGVjdGlvbigpIGNhbGwg4oCUIHRoZSBtb2R1bGUgdGhlXG5cdCAqIE9wdGlvbiBCIHJlZ2lzdHJ5IGF1Z21lbnRhdGlvbiBtdXN0IHRhcmdldCAodGhlIGludGVyZmFjZSBpc1xuXHQgKiBjb25maXJtZWQgZGVjbGFyZWQgdGhlcmUpXG5cdCAqL1xuXHRjb2xsZWN0aW9uU291cmNlRmlsZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBlR3JhcGgge1xuXHQvKiogUm9vdCB0eXBlcywga2V5ZWQgYnkgZnVsbCBwYXRoIChjdXN0b20tY29sbGVjdGlvbiByb290cyBjYXJyeSB0aGUgYGNvbGxlY3Rpb25JZDo6YCBwcmVmaXgpICovXG5cdHJvb3RzOiBNYXA8c3RyaW5nLCBUeXBlTm9kZT47XG5cdC8qKiBBbGwgdHlwZXMgYnkgZnVsbCBwYXRoICovXG5cdGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlTm9kZT47XG5cdC8qKiBBZGQgYSByb290IHR5cGUgKi9cblx0YWRkUm9vdChub2RlOiBUeXBlTm9kZSk6IHZvaWQ7XG5cdC8qKiBGaW5kIGEgdHlwZSBieSBmdWxsIHBhdGggKi9cblx0ZmluZFR5cGUoZnVsbFBhdGg6IHN0cmluZyk6IFR5cGVOb2RlIHwgdW5kZWZpbmVkO1xuXHQvKiogR2V0IGFsbCB0eXBlcyBhcyBhcnJheSAqL1xuXHRnZXRBbGxUeXBlcygpOiBUeXBlTm9kZVtdO1xuXHQvKiogQ2xlYXIgdGhlIGdyYXBoICovXG5cdGNsZWFyKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW5hbHl6ZVJlc3VsdCB7XG5cdC8qKiBUeXBlcyBmb3VuZCBpbiB0aGUgYW5hbHlzaXMgKi9cblx0dHlwZXM6IFR5cGVOb2RlW107XG5cdC8qKiBFcnJvcnMgZW5jb3VudGVyZWQgKi9cblx0ZXJyb3JzOiBBbmFseXplRXJyb3JbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbmFseXplRXJyb3Ige1xuXHRtZXNzYWdlOiBzdHJpbmc7XG5cdGZpbGU6IHN0cmluZztcblx0bGluZTogbnVtYmVyO1xuXHRjb2x1bW46IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZWRUeXBlcyB7XG5cdC8qKiBDb250ZW50IG9mIHRoZSAuZC50cyBmaWxlICovXG5cdGNvbnRlbnQ6IHN0cmluZztcblx0LyoqIFR5cGVzIHRoYXQgd2VyZSBnZW5lcmF0ZWQgKi9cblx0dHlwZXM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIERlZmluaXRpb24gaW5mbyBmb3IgY29kZSBuYXZpZ2F0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVmaW5pdGlvbkluZm8ge1xuXHQvKiogVHlwZSBuYW1lIChlLmcuLCBcIkFkbWluVHlwZVwiKSAqL1xuXHRuYW1lOiBzdHJpbmc7XG5cdC8qKiBMb2NhdGlvbiBpbiBzb3VyY2U6IGZpbGUudHM6TGluZTpDb2wgKi9cblx0bG9jYXRpb246IHN0cmluZztcblx0LyoqIEhvdyB0eXBlIHdhcyBjcmVhdGVkOiAnZGVmaW5lJyBvciAnZGVjb3JhdGUnICovXG5cdGtpbmQ6ICdkZWZpbmUnIHwgJ2RlY29yYXRlJztcblx0LyoqIFBhcmVudCB0eXBlIGZ1bGwgcGF0aCwgbnVsbCBpZiByb290ICovXG5cdHBhcmVudDogc3RyaW5nIHwgbnVsbDtcblx0LyoqIHN0cmljdENoYWluIGNvbmZpZyBvcHRpb24gKi9cblx0c3RyaWN0Q2hhaW46IGJvb2xlYW47XG5cdC8qKiBibG9ja0Vycm9ycyBjb25maWcgb3B0aW9uICovXG5cdGJsb2NrRXJyb3JzOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFVzYWdlIGluZm8gZm9yIGNvZGUgbmF2aWdhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzYWdlSW5mbyB7XG5cdC8qKiBMb2NhdGlvbiBpbiBzb3VyY2U6IGZpbGUudHM6TGluZTpDb2wgKi9cblx0bG9jYXRpb246IHN0cmluZztcblx0LyoqIEtpbmQgb2YgdXNhZ2U6IGluc3RhbnRpYXRpb24sIHR5cGVBbm5vdGF0aW9uLCBwcm9wZXJ0eUFjY2VzcywgbG9va3VwLCByZWZlcmVuY2UgKi9cblx0a2luZDogJ2luc3RhbnRpYXRpb24nIHwgJ3R5cGVBbm5vdGF0aW9uJyB8ICdwcm9wZXJ0eUFjY2VzcycgfCAnbG9va3VwJyB8ICdyZWZlcmVuY2UnO1xuXHQvKiogQ29kZSBzbmlwcGV0ICovXG5cdGNvZGU6IHN0cmluZztcblx0LyoqXG5cdCAqIFNjb3BlIGhvbGRpbmcgdGhpcyB1c2FnZSAoTG9jYWxTY29wZVdhbGtlciBzY29wZUlkOiBtb2R1bGUgc2NvcGUgaXMgdGhlXG5cdCAqIGZpbGUgcGF0aCwgZnVuY3Rpb24gc2NvcGVzIGFyZSBmaWxlOmxpbmU6Y29sKS4gQWRkaXRpdmU7IGFic2VudCB3aGVuIHRoZVxuXHQgKiB1c2FnZSBzaXRzIG91dHNpZGUgdHJhY2tlZCBmaWxlcy5cblx0ICovXG5cdGhvbGRlclNjb3BlSWQ/OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBDb25zdHJ1Y3RvciBleHByZXNzaW9uIHRleHQgYXQgYW4gaW5zdGFudGlhdGlvbiBzaXRlICgnVGhpbmcnLFxuXHQgKiAndXNlci5BZG1pbkVudGl0eScsICdUMicgZm9yIGEgbG9va3VwIGFsaWFzKS4gQWRkaXRpdmU7IHNldCBvbmx5IG9uXG5cdCAqIGtpbmQgJ2luc3RhbnRpYXRpb24nLiBGZWVkcyBDcmVhdGlvbkFuY2hvci5jb25zdHJ1Y3RvclRleHQgKFBoYXNlIDMpLlxuXHQgKi9cblx0Y29uc3RydWN0b3JUZXh0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEpTT04gb3V0cHV0IGZvciBkZWZpbml0aW9ucy5qc29uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVmaW5pdGlvbnNKc29uIHtcblx0dmVyc2lvbjogc3RyaW5nO1xuXHRnZW5lcmF0ZWRBdDogc3RyaW5nO1xuXHRkZWZpbml0aW9uczogUmVjb3JkPHN0cmluZywgRGVmaW5pdGlvbkluZm8+O1xufVxuXG4vKipcbiAqIEpTT04gb3V0cHV0IGZvciB1c2FnZXMuanNvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzYWdlc0pzb24ge1xuXHR2ZXJzaW9uOiBzdHJpbmc7XG5cdGdlbmVyYXRlZEF0OiBzdHJpbmc7XG5cdHVzYWdlczogUmVjb3JkPHN0cmluZywgVXNhZ2VJbmZvW10+O1xufVxuXG4vKipcbiAqIEVEUyAoRXhlY3V0aW9uIERhdGEgU3RvcmFnZSkga2luZCBmb3IgdHJhY2tpbmcgZXhlY3V0aW9uIGZsb3cgcGF0dGVybnNcbiAqL1xuZXhwb3J0IHR5cGUgRURTS2luZCA9XG5cdHwgJ3dyYXAnXG5cdHwgJ2NvbnRleHRDb25zdW1lJ1xuXHR8ICdob29rQXR0YWNoJztcblxuLyoqXG4gKiBFRFMgaW5mbyBmb3IgZXhlY3V0aW9uIGRhdGEgZmxvdyB0cmFja2luZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEVEU0luZm8ge1xuXHQvKiogTG9jYXRpb24gaW4gc291cmNlOiBmaWxlLnRzOkxpbmU6Q29sICovXG5cdGxvY2F0aW9uOiBzdHJpbmc7XG5cdC8qKiBLaW5kIG9mIEVEUyB1c2FnZSAqL1xuXHRraW5kOiBFRFNLaW5kO1xuXHQvKiogQ29kZSBzbmlwcGV0ICovXG5cdGNvZGU6IHN0cmluZztcblx0LyoqIFJlc29sdmVkIHRhcmdldCB0eXBlIGlmIGRldGVjdGFibGUgKi9cblx0dGFyZ2V0VHlwZT86IHN0cmluZztcblx0LyoqXG5cdCAqIEVuY2xvc2luZyBtbmVtb25pY2EgdHlwZSBwYXRoIChkZWZpbmUvbGF6eSBoYW5kbGVyIG9yIGRlY29yYXRlZCBjbGFzcyk7XG5cdCAqIGZvciB3cmFwIHNpdGVzIG91dHNpZGUgYW55IGhhbmRsZXIsIGF0dHJpYnV0ZWQgdGhyb3VnaCB0aGUgaW5zdGFuY2UvY29udGV4dFxuXHQgKiBhcmd1bWVudCAodHJhY2tlZCBhc3NpZ25tZW50IG9yIHBhcmFtZXRlciBhbm5vdGF0aW9uKSwgdGhlbiBpbmhlcml0ZWQgZG93blxuXHQgKiB0aGUgd3JhcCBnZW5lcmF0aW9uIGNoYWluIChgdmlhYClcblx0ICovXG5cdHNjb3BlPzogc3RyaW5nO1xuXHQvKiogTG9jYXRpb24gb2YgdGhlIGVuY2xvc2luZyB3cmFwIHNpdGUgd2hvc2UgcnVudGltZSB3cmFwcGluZyBjYXVzZWQgdGhpcyBlbnRyeSAqL1xuXHR2aWE/OiBzdHJpbmc7XG5cdC8qKiBNbmVtb25pY2EgdHlwZSBmdWxsUGF0aHMgaW5zdGFudGlhdGVkIGluc2lkZSB0aGUgd3JhcHBlZCBib2R5IOKAlCBndWFyYW50ZWVkIHBhdGggaGl0cyAqL1xuXHRjcmVhdGVzVHlwZXM/OiBzdHJpbmdbXTtcblx0LyoqIExhYmVsIHN0cmluZyBsaXRlcmFsIHBhc3NlZCB0byB3cmFwKGZuLCDigKYsICdsYWJlbCcpIHdoZW4gc3RhdGljYWxseSB2aXNpYmxlICovXG5cdGxhYmVsPzogc3RyaW5nO1xuXHQvKiogc2NvcGVJZCAoc2NvcGVzLmpzb24pIG9mIHRoZSB3cmFwcGVkIGNhbGxiYWNrJ3Mgb3duIHNjb3BlIOKAlCBqb2lucyB0byB0aGUgY3JlYXRpb24gZ3JhcGggKi9cblx0Y2FsbGJhY2tTY29wZUlkPzogc3RyaW5nO1xuXHQvKiogSWRlbnRpZmllciBwYXNzZWQgYXMgdGhlIGluc3RhbmNlL2NvbnRleHQgYXJndW1lbnQgKCd1c2VyJyksIHdoZW4gaXQgaXMgb25lICovXG5cdGluc3RhbmNlQXJnPzogc3RyaW5nO1xuXHQvKiogc2NvcGVJZCBvZiB0aGUgc2NvcGUgaG9sZGluZyB0aGUgd3JhcCBjYWxsIHNpdGUg4oCUIGpvaW5zIHRvIHRoZSBjcmVhdGlvbiBncmFwaCAqL1xuXHRzY29wZUlkPzogc3RyaW5nO1xuXHQvKiogTW5lbW9uaWNhIGZ1bGxQYXRoIG9mIHRoZSBpbnN0YW5jZSBhcmd1bWVudCwgcmVzb2x2ZWQgdGhyb3VnaCBzY29wZSB2YXJpYWJsZXMgKi9cblx0d3JhcHNUeXBlUGF0aD86IHN0cmluZztcblx0LyoqIFdyYXAtZmFtaWx5IGZ1bmN0aW9uIG5hbWUgKCd3cmFwJyB8ICd3cmFwQ29uc3RydWN0b3JBcmcnIHwg4oCmKSDigJQgam9pbnMgdGhlXG5cdCAqICBjYWxsIHNpdGUgdG8gZGl2ZSdzIGVuZ2luZSBrbm90IGluIGdyYXBoIGNvbnN1bWVycyAqL1xuXHRmbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBKU09OIG91dHB1dCBmb3IgZWRzLmpzb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFRFNKc29uIHtcblx0dmVyc2lvbjogc3RyaW5nO1xuXHRnZW5lcmF0ZWRBdDogc3RyaW5nO1xuXHRlZHM6IFJlY29yZDxzdHJpbmcsIEVEU0luZm9bXT47XG59XG5cbi8qKlxuICogSW5zdHJ1bWVudGF0aW9uIGtpbmQgZm9yIGZyYW1ld29yayBsaWZlY3ljbGUgY3Jvc3Nyb2Fkc1xuICovXG5leHBvcnQgdHlwZSBJbnN0cnVtZW50YXRpb25LaW5kID1cblx0fCAnaW50ZXJjZXB0b3InXG5cdHwgJ2d1YXJkJ1xuXHR8ICdwaXBlJ1xuXHR8ICdmaWx0ZXInXG5cdHwgJ21pZGRsZXdhcmUnO1xuXG4vKipcbiAqIEluc3RydW1lbnRhdGlvbiBzY29wZTogd2hlcmUgdGhlIHBvaW50IGF0dGFjaGVzLlxuICogJ2dsb2JhbCcgZm9yIHByb3ZpZGVyLXRva2VuIHJlZ2lzdHJhdGlvbnMsICdtb2R1bGUnIGZvciBtaWRkbGV3YXJlIHdpcmVkXG4gKiB2aWEgY29uc3VtZXIuYXBwbHkoKSBBTkQgZm9yIGJhcmUgaGVyaXRhZ2UgZGVjbGFyYXRpb25zIHdob3NlIGF0dGFjaG1lbnRcbiAqIGlzIHN0YXRpY2FsbHkgdW5rbm93biwgYGNvbnRyb2xsZXI6TmFtZWAgLyBgbWV0aG9kOkNsYXNzLm1ldGhvZGAgZm9yXG4gKiBkZWNvcmF0b3Itc2NvcGVkIGF0dGFjaG1lbnRzLlxuICovXG5leHBvcnQgdHlwZSBJbnN0cnVtZW50YXRpb25TY29wZSA9XG5cdHwgJ2dsb2JhbCdcblx0fCAnbW9kdWxlJ1xuXHR8IGBjb250cm9sbGVyOiR7c3RyaW5nfWBcblx0fCBgbWV0aG9kOiR7c3RyaW5nfWA7XG5cbi8qKlxuICogSW5zdHJ1bWVudGF0aW9uIHBvaW50OiBhIGZyYW1ld29yayBsaWZlY3ljbGUgY3Jvc3Nyb2FkIChpbnRlcmNlcHRvcixcbiAqIGd1YXJkLCBwaXBlLCBmaWx0ZXIsIG1pZGRsZXdhcmUpIGRldGVjdGVkIHN5bnRhY3RpY2FsbHkuIFRoZSB2b2NhYnVsYXJ5XG4gKiB0aGF0IHR1cm5zIGEgc3ludGFjdGljIHNoYXBlIGludG8gYSBwb2ludCBjb21lcyBmcm9tIHBsdWdpbnMg4oCUIHdpdGggbm9cbiAqIHBsdWdpbiBsb2FkZWQsIG5vIHBvaW50cyBhcmUgY29sbGVjdGVkLlxuICpcbiAqIERlZHVwZS9zY29wZSBkZWNpc2lvbjogcG9pbnRzIGFyZSBrZXllZCBieSAoa2luZCwgY2xhc3NOYW1lLCBsb2NhdGlvbixcbiAqIHNjb3BlKSBhbmQgZHVwbGljYXRlcyBtZXJnZSB0aGVpciBgdGFyZ2V0c2AuIEEgY2xhc3MgZGV0ZWN0ZWQgYm90aCBieVxuICogaGVyaXRhZ2UgKGEgcGx1Z2luLWxpc3RlZCBgaW1wbGVtZW50c2AgaW50ZXJmYWNlKSBhbmQgYnkgYSBkZWNvcmF0b3JcbiAqIHNpdGUgeWllbGRzIFNFUEFSQVRFIGVudHJpZXMg4oCUIHRoZSBjbGFzcy1kZWNsYXJhdGlvbiBwb2ludCBrZWVwcyBzY29wZVxuICogJ21vZHVsZScgKGF0dGFjaG1lbnQgdW5rbm93bikgd2hpbGUgZWFjaCByZWdpc3RyYXRpb24gc2l0ZSBjYXJyaWVzIGl0c1xuICogb3duIHNjb3BlLiBPbmUgcG9pbnQgc2VydmluZyBtdWx0aXBsZSBzY29wZXMgdmlhIG1lcmdlZCBzY29wZSBsaXN0cyB3YXNcbiAqIHJlamVjdGVkOiBjb25zdW1lcnMgKG1uZW1vZ3JhcGhpY2EgZGlhbW9uZHMpIGtleSBvZmYgYSBzaW5nbGUgc2NvcGUgcGVyXG4gKiBwb2ludCwgYW5kIHNlcGFyYXRlIGVudHJpZXMga2VlcCB0aGF0IGNvbnRyYWN0IHNpbXBsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnN0cnVtZW50YXRpb25Qb2ludCB7XG5cdC8qKiBLaW5kIG9mIGxpZmVjeWNsZSBjcm9zc3JvYWQgKi9cblx0a2luZDogSW5zdHJ1bWVudGF0aW9uS2luZDtcblx0LyoqIENsYXNzIHByb3ZpZGluZyB0aGUgaW5zdHJ1bWVudGF0aW9uIChlLmcuLCBcIkF1dGhHdWFyZFwiKSAqL1xuXHRjbGFzc05hbWU6IHN0cmluZztcblx0LyoqIExvY2F0aW9uIGluIHNvdXJjZTogZmlsZS50czpMaW5lOkNvbCAoY2xhc3MgZGVjbGFyYXRpb24gd2hlbiBkZWNsYXJlZCBpbi1wcm9qZWN0LCBlbHNlIHRoZSByZWdpc3RyYXRpb24gc2l0ZSkgKi9cblx0bG9jYXRpb246IHN0cmluZztcblx0LyoqIENvZGUgc25pcHBldDogc2lnbmF0dXJlIC8gZmlyc3QgbGluZSwgbGlrZSBFRFMgYGNvZGVgICovXG5cdGNvZGU6IHN0cmluZztcblx0LyoqIFdoZXJlIHRoZSBwb2ludCBhdHRhY2hlcyAqL1xuXHRzY29wZTogSW5zdHJ1bWVudGF0aW9uU2NvcGU7XG5cdC8qKiBDb250cm9sbGVyL3Byb3ZpZGVyIG5hbWVzIHRoZSBwb2ludCBhdHRhY2hlcyB0bzsgZW1wdHkgZm9yIGdsb2JhbCBwb2ludHMgKi9cblx0dGFyZ2V0czogc3RyaW5nW107XG59XG5cbi8qKlxuICogSlNPTiBvdXRwdXQgZm9yIGluc3RydW1lbnRhdGlvbi5qc29uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdHJ1bWVudGF0aW9uSnNvbiB7XG5cdC8qKiBTY2hlbWEgdmVyc2lvbjogMiBhZGRzIHRoZSBvcHRpb25hbCBjcmVhdGlvbkdyYXBoIGtleSAoUGhhc2UgMykgKi9cblx0dmVyc2lvbjogbnVtYmVyO1xuXHRnZW5lcmF0ZWRBdDogc3RyaW5nO1xuXHRwb2ludHM6IEluc3RydW1lbnRhdGlvblBvaW50W107XG5cdC8qKlxuXHQgKiBJbnNpZGUtb3V0IGNyZWF0aW9uIHdhbGsgKGluc3RydW1lbnRhdGlvbiB3YWxrZXIgcGxhbiwgUGhhc2UgMyk6IHdoaWNoXG5cdCAqIHNjb3BlcyBjcmVhdGUgbW5lbW9uaWNhIGluc3RhbmNlcyBhbmQgd2hvIGNhbGxzIHRoZW0sIHdhbGtlZCBvdXR3YXJkIHRvXG5cdCAqIHRoZSBzdGFydGVycy4gQWJzZW50IHdoZW4gdGhlIHdyaXRlciBpcyBjYWxsZWQgd2l0aG91dCBjcmVhdGlvbi1ncmFwaFxuXHQgKiBkYXRhIChkaXJlY3QgbGlicmFyeSB1c2UpOyBhbHdheXMgcHJlc2VudCBmcm9tIHRoZSBDTEkuXG5cdCAqL1xuXHRjcmVhdGlvbkdyYXBoPzogQ3JlYXRpb25HcmFwaDtcbn1cblxuLyoqXG4gKiBGbG93IGtpbmQgZm9yIHRyYWNraW5nIG5hdGl2ZSBpbnN0YW5jZSB1c2FnZSBwYXR0ZXJucyDigJQgV0hBVCBGTE9XUyBXSEVSRVxuICogaW4gcGxhaW4gc291cmNlIHNoYXBlcy4gRWFjaCBraW5kIG5hbWVzIG9uZSBzeW50YWN0aWMgcGF0dGVybiB0aGF0IG1vdmVzXG4gKiBhIHR5cGVkIHZhbHVlLCB3aXRoIHRoZSBzaGFwZSB0aGF0IHByb2R1Y2VzIGl0OlxuICpcbiAqICAgJ3Byb3BlcnR5UmVhZCcgICAgICByZWFkaW5nIGEgZmllbGQgb2ZmIHRoZSBpbnN0YW5jZSDigJRcbiAqICAgICAgICAgICAgICAgICAgICAgICBgdXNlci5uYW1lYCAoYWxzbyBgdXNlcj8ubmFtZWAg4oCUIG9wdGlvbmFsIGNoYWluaW5nXG4gKiAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkcyBhcyBhIHBsYWluIHByb3BlcnR5UmVhZClcbiAqICAgJ3Byb3BlcnR5V3JpdGUnICAgICBhc3NpZ25pbmcgYSBmaWVsZCDigJQgYHVzZXIubmFtZSA9ICd4J2BcbiAqICAgJ21ldGhvZENhbGwnICAgICAgICBjYWxsaW5nIGEgbWV0aG9kIG9uIGl0IOKAlCBgdXNlci52YWxpZGF0ZSgpYFxuICogICAnZWxlbWVudEFjY2VzcycgICAgIGJyYWNrZXQgcmVhZCDigJQgYHVzZXJbJ25hbWUnXWBcbiAqICAgJ2Rlc3RydWN0dXJlUmVhZCcgICBkZXN0cnVjdHVyaW5nIHB1bGxzIHRoZSBmaWVsZHMgYXBhcnQg4oCUXG4gKiAgICAgICAgICAgICAgICAgICAgICAgYGNvbnN0IHsgbmFtZSB9ID0gdXNlcmBcbiAqICAgJ3Bhc3NBc0FyZycgICAgICAgICB0aGUgdmFsdWUgY3Jvc3NlcyBpbnRvIGEgY2FsbCBhcyBhbiBhcmd1bWVudCDigJRcbiAqICAgICAgICAgICAgICAgICAgICAgICBgcHJvY2Vzc1VzZXIodXNlcilgIChjb250ZXh0IG5hbWVzIGNhbGxlZSArIHNsb3QpXG4gKiAgICdyZXR1cm4nICAgICAgICAgICAgdGhlIHZhbHVlIGxlYXZlcyB0aGUgZnVuY3Rpb24gYXMgaXRzIHJlc3VsdCDigJRcbiAqICAgICAgICAgICAgICAgICAgICAgICBgcmV0dXJuIHVzZXJgXG4gKiAgICdzcHJlYWQnICAgICAgICAgICAgdGhlIGZpZWxkcyBzY2F0dGVyIGludG8gYSBsaXRlcmFsIOKAlCBgKHsgLi4udXNlciB9KWBcbiAqICAgJ3JlYXNzaWdubWVudCcgICAgICB0aGUgYmluZGluZyBpcyByZS1wb2ludGVkIOKAlCBgdXNlciA9IG90aGVyYFxuICogICAnaW5zdGFudGlhdGlvbicgICAgIGEgY29uc3RydWN0aW9uLXNoYXBlZCBjYWxsIOKAlCBgbmV3IFVzZXIoKWAgKGFsc29cbiAqICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRlZCBmb3IgY2hhaW4gdGlwcyBhbmQgY2FsbC9hcHBseS9mb3JrL21lcmdlKVxuICpcbiAqICdhcnJheUVsZW1lbnQnIGFuZCAnY29uZGl0aW9uYWxBY2Nlc3MnIGFyZSByZXNlcnZlZCBtZW1iZXJzIG9mIHRoZVxuICogdW5pb24g4oCUIGRlY2xhcmVkLCBub3QgeWV0IGVtaXR0ZWQgYnkgdGhlIGFuYWx5emVyLlxuICovXG5leHBvcnQgdHlwZSBGbG93S2luZCA9XG5cdHwgJ3Byb3BlcnR5UmVhZCdcblx0fCAncHJvcGVydHlXcml0ZSdcblx0fCAnbWV0aG9kQ2FsbCdcblx0fCAnZGVzdHJ1Y3R1cmVSZWFkJ1xuXHR8ICdwYXNzQXNBcmcnXG5cdHwgJ3JldHVybidcblx0fCAnc3ByZWFkJ1xuXHR8ICdhcnJheUVsZW1lbnQnXG5cdHwgJ2NvbmRpdGlvbmFsQWNjZXNzJ1xuXHR8ICdlbGVtZW50QWNjZXNzJ1xuXHR8ICdyZWFzc2lnbm1lbnQnXG5cdHwgJ2luc3RhbnRpYXRpb24nO1xuXG4vKipcbiAqIEZsb3cgaW5mbyBmb3IgbmF0aXZlIGluc3RhbmNlIHVzYWdlIHRyYWNraW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0luZm8ge1xuXHQvKiogTG9jYXRpb24gaW4gc291cmNlOiBmaWxlLnRzOkxpbmU6Q29sICovXG5cdGxvY2F0aW9uOiBzdHJpbmc7XG5cdC8qKiBLaW5kIG9mIGZsb3cgKi9cblx0a2luZDogRmxvd0tpbmQ7XG5cdC8qKiBDb2RlIHNuaXBwZXQgKi9cblx0Y29kZTogc3RyaW5nO1xuXHQvKiogUHJvcGVydHkgbmFtZSBpZiBhcHBsaWNhYmxlICovXG5cdHByb3BlcnR5TmFtZT86IHN0cmluZztcblx0LyoqIFJlc29sdmVkIHRhcmdldCB0eXBlIGlmIGtub3duICovXG5cdHRhcmdldFR5cGU/OiBzdHJpbmc7XG5cdC8qKiBDb250ZXh0IChmdW5jdGlvbiBuYW1lLCBwYXJhbSBwb3NpdGlvbiwgZXRjLikgKi9cblx0Y29udGV4dD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBKU09OIG91dHB1dCBmb3IgZmxvdy5qc29uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0pzb24ge1xuXHR2ZXJzaW9uOiBzdHJpbmc7XG5cdGdlbmVyYXRlZEF0OiBzdHJpbmc7XG5cdGZsb3c6IFJlY29yZDxzdHJpbmcsIEZsb3dJbmZvW10+O1xufVxuXG4vKipcbiAqIFdoYXQgYSBtb2R1bGUtbGV2ZWwgYmluZGluZyBpcy4gVmFyaWFibGVzIGFyZSBjbGFzc2lmaWVkIGFzICdjb25zdCdcbiAqIHJlZ2FyZGxlc3Mgb2YgbGV0L3ZhciDigJQgbXV0YWJpbGl0eSAocmVhc3NpZ25tZW50IHRyYWNraW5nKSBpcyB0aGVcbiAqIGxvY2FsLXNjb3BlIHdhbGtlcidzIGNvbmNlcm4gKFBoYXNlIDIpLCBub3QgdGhlIG1vZHVsZSBncmFwaCdzLlxuICovXG5leHBvcnQgdHlwZSBNb2R1bGVCaW5kaW5nS2luZCA9XG5cdHwgJ2Z1bmN0aW9uJ1xuXHR8ICdjbGFzcydcblx0fCAnY29uc3QnXG5cdHwgJ3R5cGUnXG5cdHwgJ3Vua25vd24nO1xuXG4vKipcbiAqIEhvdyBhIGJpbmRpbmcgZW50ZXJzIGEgbW9kdWxlXG4gKi9cbmV4cG9ydCB0eXBlIE1vZHVsZUltcG9ydEtpbmQgPVxuXHR8ICduYW1lZCdcblx0fCAnZGVmYXVsdCdcblx0fCAnbmFtZXNwYWNlJ1xuXHR8ICdyZXF1aXJlJztcblxuLyoqXG4gKiBBIGdlbmVyaWMgbW9kdWxlLWxldmVsIGJpbmRpbmcgKGV4cG9ydCwgaW1wb3J0LCBvciByZS1leHBvcnQpLlxuICpcbiAqIGBuYW1lYCBpcyBhbHdheXMgdGhlIG5hbWUgdGhpcyBtb2R1bGUgcHJlc2VudHM6IHRoZSBsb2NhbCBpZGVudGlmaWVyIGZvclxuICogaW1wb3J0cywgdGhlIGV4cG9ydGVkIG5hbWUgZm9yIGV4cG9ydHMuIGBpbXBvcnRBbGlhc2AgY2FycmllcyB0aGUgb3JpZ2luYWxcbiAqIG5hbWUgaW4gdGhlIHNvdXJjZSBtb2R1bGUgd2hlbiBpdCBkaWZmZXJzIChgaW1wb3J0IHsgWCBhcyBZIH1gIOKGkiBuYW1lICdZJyxcbiAqIGltcG9ydEFsaWFzICdYJzsgYGV4cG9ydCB7IFggYXMgWSB9IGZyb20g4oCmYCDihpIgbmFtZSAnWScsIGltcG9ydEFsaWFzICdYJykuXG4gKiBGb3IgZGVmYXVsdCBpbXBvcnRzIG5hbWUgaXMgdGhlIGxvY2FsIGlkZW50aWZpZXIgYW5kIHRoZSBzb3VyY2UgbG9va3VwIGtleVxuICogaXMgJ2RlZmF1bHQnIChpbXBsaWVkIGJ5IGltcG9ydEtpbmQpOyBmb3IgbmFtZXNwYWNlIGltcG9ydHMvZXhwb3J0cyBuYW1lIGlzXG4gKiB0aGUgbmFtZXNwYWNlIGFsaWFzICgnKicgZm9yIGJhcmUgYGV4cG9ydCAqIGZyb20g4oCmYCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kdWxlQmluZGluZyB7XG5cdC8qKiBOYW1lIGFzIHByZXNlbnRlZCBpbiB0aGlzIG1vZHVsZSAobG9jYWwgbmFtZSBmb3IgaW1wb3J0cywgZXhwb3J0ZWQgbmFtZSBmb3IgZXhwb3J0cykgKi9cblx0bmFtZTogc3RyaW5nO1xuXHQvKiogV2hhdCB0aGUgYmluZGluZyBpczsgYmFja2ZpbGxlZCBmcm9tIHRoZSBvcmlnaW4gbW9kdWxlIHdoZW4gcmVzb2x2YWJsZSAqL1xuXHRraW5kOiBNb2R1bGVCaW5kaW5nS2luZDtcblx0LyoqXG5cdCAqIFJlc29sdmVkIGFic29sdXRlIGZpbGUgcGF0aCBvZiB0aGUgc291cmNlIG1vZHVsZSAodGhlIG1vZHVsZSBpdHNlbGYgZm9yXG5cdCAqIGxvY2FsIGRlY2xhcmF0aW9uczsgdGhlIHJhdyBzcGVjaWZpZXIgd2hlbiByZXNvbHV0aW9uIGZhaWxzKVxuXHQgKi9cblx0c291cmNlTW9kdWxlOiBzdHJpbmc7XG5cdC8qKiBIb3cgdGhlIGJpbmRpbmcgZW50ZXJzIHRoZSBtb2R1bGUgKGFic2VudCBvbiBwbGFpbiBsb2NhbCBleHBvcnRzKSAqL1xuXHRpbXBvcnRLaW5kPzogTW9kdWxlSW1wb3J0S2luZDtcblx0LyoqIE9yaWdpbmFsIG5hbWUgaW4gdGhlIHNvdXJjZSBtb2R1bGUgd2hlbiBhbGlhc2VkICovXG5cdGltcG9ydEFsaWFzPzogc3RyaW5nO1xuXHQvKiogVHJ1ZSBmb3IgYGV4cG9ydCB7IFggfSBmcm9tICcuL3knYCAvIGBleHBvcnQgKiBmcm9tICcuL3knYCAoYmFycmVscykgKi9cblx0aXNSZUV4cG9ydDogYm9vbGVhbjtcblx0LyoqXG5cdCAqIFRydWUgd2hlbiB0aGUgc3BlY2lmaWVyIHJlc29sdmVkIGludG8gbm9kZV9tb2R1bGVzXG5cdCAqICh0cy5yZXNvbHZlTW9kdWxlTmFtZSdzIGlzRXh0ZXJuYWxMaWJyYXJ5SW1wb3J0KS4gRXh0ZXJuYWwgYmluZGluZ3MgYXJlXG5cdCAqIHJlY29yZGVkIGZvciByZWZlcmVuY2UgYnV0IG5ldmVyIGVudGVyIGBkZXBlbmRlbmNpZXNgIGFuZCBhcmUgbmV2ZXIgd2Fsa2VkLlxuXHQgKiBOb2RlLmpzIGJ1aWx0aW5zIGFyZSBub3QgcmVjb3JkZWQgYXMgYmluZGluZ3MgYXQgYWxsIOKAlCBzZWVcblx0ICogTW9kdWxlSW5mby5idWlsdGluU3BlY2lmaWVycy5cblx0ICovXG5cdGV4dGVybmFsPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQZXItbW9kdWxlIHJlY29yZCBvZiB0aGUgY3Jvc3MtZmlsZSBncmFwaCAobW9kdWxlcy5qc29uKVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZHVsZUluZm8ge1xuXHQvKiogQWJzb2x1dGUgZmlsZSBwYXRoIChtYXAga2V5KSAqL1xuXHRmaWxlUGF0aDogc3RyaW5nO1xuXHQvKiogTW5lbW9uaWNhIHR5cGUgZnVsbFBhdGhzIGRlZmluZWQgaW4gdGhpcyBtb2R1bGUgKi9cblx0ZGVmaW5lZFR5cGVzOiBzdHJpbmdbXTtcblx0LyoqIEV2ZXJ5dGhpbmcgdGhpcyBtb2R1bGUgZXhwb3J0cyAobG9jYWwgZGVjbGFyYXRpb25zIGFuZCByZS1leHBvcnRzKSAqL1xuXHRleHBvcnRlZEJpbmRpbmdzOiBNb2R1bGVCaW5kaW5nW107XG5cdC8qKiBFdmVyeXRoaW5nIHRoaXMgbW9kdWxlIGltcG9ydHMgKHJlLWV4cG9ydHMgYXBwZWFyIGhlcmUgdG9vLCBtYXJrZWQgaXNSZUV4cG9ydCkgKi9cblx0aW1wb3J0ZWRCaW5kaW5nczogTW9kdWxlQmluZGluZ1tdO1xuXHQvKiogQWJzb2x1dGUgcGF0aHMgb2YgYW5hbHl6ZWQgcHJvamVjdCBtb2R1bGVzIHRoaXMgbW9kdWxlIGltcG9ydHMgZnJvbSAqL1xuXHRkZXBlbmRlbmNpZXM6IHN0cmluZ1tdO1xuXHQvKiogSW1wb3J0IHNwZWNpZmllcnMgdGhhdCBtb2R1bGUgcmVzb2x1dGlvbiBjb3VsZCBub3QgcmVzb2x2ZSAobm9kZSBidWlsdGlucyBleGNsdWRlZCDigJQgc2VlIGJ1aWx0aW5TcGVjaWZpZXJzKSAqL1xuXHR1bnJlc29sdmVkU3BlY2lmaWVyczogc3RyaW5nW107XG5cdC8qKlxuXHQgKiBOb2RlLmpzIGJ1aWx0aW4gc3BlY2lmaWVycyB0aGlzIG1vZHVsZSBpbXBvcnRzICgncGF0aCcsICdub2RlOmZzJywg4oCmKSxcblx0ICogbWF0Y2hlZCBhZ2FpbnN0IG5vZGU6bW9kdWxlJ3MgYnVpbHRpbk1vZHVsZXMgaW4gYm90aCBiYXJlIGFuZFxuXHQgKiBgbm9kZTpgLXByZWZpeGVkIGZvcm1zLiBSZWNvcmRlZCBmb3IgaG9uZXN0eSBvbmx5OiBidWlsdGlucyBwcm9kdWNlIG5vXG5cdCAqIGJpbmRpbmdzLCBuZXZlciBlbnRlciBgZGVwZW5kZW5jaWVzYC9gdW5yZXNvbHZlZFNwZWNpZmllcnNgLCBhbmQgbmV2ZXJcblx0ICogcHJvZHVjZSBlZGdlcy5cblx0ICovXG5cdGJ1aWx0aW5TcGVjaWZpZXJzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBBIGNyb3NzLW1vZHVsZSB1c2FnZSBvZiBhIG1uZW1vbmljYSB0eXBlOiB1c2FnZU1vZHVsZSBpbXBvcnRzIGEgYmluZGluZ1xuICogd2hvc2Ugb3JpZ2luIG1vZHVsZSBkZWZpbmVzIHRoZSB0eXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyb3NzTW9kdWxlVXNhZ2Uge1xuXHQvKiogTWF0Y2hlZCBtbmVtb25pY2EgdHlwZSBmdWxsUGF0aCAob3IgdGhlIGltcG9ydGVkIG5hbWUgd2hlbiB1bm1hdGNoZWQpICovXG5cdHR5cGVQYXRoOiBzdHJpbmc7XG5cdC8qKiBBYnNvbHV0ZSBwYXRoIG9mIHRoZSBtb2R1bGUgd2hlcmUgdGhlIHR5cGUgaXMgZGVmaW5lZCAocmUtZXhwb3J0IGNoYWlucyBjaGFzZWQgdG8gdGhlIG9yaWdpbikgKi9cblx0ZGVmaW5pdGlvbk1vZHVsZTogc3RyaW5nO1xuXHQvKiogQWJzb2x1dGUgcGF0aCBvZiB0aGUgaW1wb3J0aW5nIG1vZHVsZSAqL1xuXHR1c2FnZU1vZHVsZTogc3RyaW5nO1xuXHQvKiogSW1wb3J0IHNpdGU6IGZpbGUudHM6TGluZTpDb2wgKi9cblx0dXNhZ2VMb2NhdGlvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBmdWxsIG1vZHVsZSBncmFwaFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZHVsZUdyYXBoIHtcblx0LyoqIEtleWVkIGJ5IGFic29sdXRlIGZpbGUgcGF0aCAqL1xuXHRtb2R1bGVzOiBNYXA8c3RyaW5nLCBNb2R1bGVJbmZvPjtcblx0ZWRnZXM6IENyb3NzTW9kdWxlVXNhZ2VbXTtcblx0LyoqXG5cdCAqIENpcmN1bGFyIGltcG9ydCBjaGFpbnMgKGVhY2ggYW4gYXJyYXkgb2YgYWJzb2x1dGUgcGF0aHMpLiBSZWNvcmRlZCwgbm90XG5cdCAqIGFuIGVycm9yIOKAlCBtbmVtb25pY2Egc3RyaWN0Q2hhaW46ZmFsc2UgcGVybWl0cyBub24tbGluZWFyIGNvbnN0cnVjdGlvblxuXHQgKi9cblx0Y3ljbGVzOiBzdHJpbmdbXVtdO1xufVxuXG4vKipcbiAqIEpTT04gb3V0cHV0IGZvciBtb2R1bGVzLmpzb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2R1bGVzSnNvbiB7XG5cdHZlcnNpb246IHN0cmluZztcblx0Z2VuZXJhdGVkQXQ6IHN0cmluZztcblx0bW9kdWxlczogUmVjb3JkPHN0cmluZywgTW9kdWxlSW5mbz47XG5cdGVkZ2VzOiBDcm9zc01vZHVsZVVzYWdlW107XG5cdGN5Y2xlczogc3RyaW5nW11bXTtcbn1cblxuLyoqXG4gKiBXaGF0IGEgdHJhY2tlZCBzY29wZSBpcy4gRGVjaXNpb24gNSAocmVzb2x2ZWQgMjAyNi0wOS0wMyk6IGZ1bmN0aW9uLFxuICogbWV0aG9kLCBhbmQgYXJyb3cgc2NvcGVzIE9OTFkg4oCUIG5vIGJsb2NrIHNjb3Blcy4gJ21vZHVsZScgaXMgdGhlIHN5bnRoZXRpY1xuICogcGVyLWZpbGUgcm9vdCBzY29wZSBzbyBtb2R1bGUtbGV2ZWwgaW5zdGFuY2UgY3JlYXRpb25zIGFyZSBsYWJlbGVkLCBub3RcbiAqIGRyb3BwZWQgKHdhbGtlciBwbGFuOiBcInJlY29yZGVkIGFzIGEgcm9vdGVkIGluc3RhbmNlXCIpLlxuICovXG5leHBvcnQgdHlwZSBTY29wZUtpbmQgPVxuXHR8ICdtb2R1bGUnXG5cdHwgJ2Z1bmN0aW9uJ1xuXHR8ICdtZXRob2QnXG5cdHwgJ2Fycm93JztcblxuLyoqXG4gKiBPbmUgdHJhY2tlZCBzY29wZSAoc2NvcGVzLmpzb24pXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NvcGVJbmZvIHtcblx0LyoqIFVuaXF1ZSBpZDogbW9kdWxlIHNjb3BlIGlzIHRoZSBmaWxlIHBhdGg7IGZ1bmN0aW9uIHNjb3BlcyBhcmUgZmlsZTpsaW5lOmNvbCBvZiB0aGUgc2NvcGUgbm9kZSAqL1xuXHRzY29wZUlkOiBzdHJpbmc7XG5cdC8qKiBEZWNpc2lvbiA4IGxhYmVsaW5nOiBmdW5jdGlvbi9tZXRob2QgbmFtZSAoJ0NsYXNzLm1ldGhvZCcgZm9yIG1ldGhvZHMpLCBmaWxlOmxpbmUgZm9yIGFub255bW91cyBob2xkZXJzICovXG5cdG5hbWU6IHN0cmluZztcblx0a2luZDogU2NvcGVLaW5kO1xuXHQvKiogTmVhcmVzdCBlbmNsb3Npbmcgc2NvcGUgKHVuZGVmaW5lZCBvbiBtb2R1bGUgc2NvcGVzKSAqL1xuXHRwYXJlbnRTY29wZUlkPzogc3RyaW5nO1xuXHQvKiogQWJzb2x1dGUgZmlsZSBwYXRoICovXG5cdGZpbGVQYXRoOiBzdHJpbmc7XG5cdC8qKiBTY29wZSBzdGFydDogZmlsZS50czpMaW5lOkNvbCAobW9kdWxlIHNjb3BlOiBmaWxlOjE6MSkgKi9cblx0bG9jYXRpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBPbmUgdHJhY2tlZCB2YXJpYWJsZSAoc2NvcGVzLmpzb24pXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NvcGVWYXJpYWJsZSB7XG5cdG5hbWU6IHN0cmluZztcblx0LyoqIE93bmluZyBzY29wZSAqL1xuXHRzY29wZUlkOiBzdHJpbmc7XG5cdC8qKiBNbmVtb25pY2EgdHlwZSBmdWxsUGF0aCB3aGVuIGtub3duIChuZXcgWCgpIG9uIGEga25vd24gdHlwZSwgbmV3IGluc3QuU3ViKCkgY2hhaW5pbmcsIG9yIGEga25vd24gYW5ub3RhdGlvbikgKi9cblx0dHlwZVBhdGg/OiBzdHJpbmc7XG5cdC8qKiBDaGVhcCB0ZXh0dWFsIHR5cGU6IGFubm90YXRpb24gdGV4dCBvciB0aW55IGluaXRpYWxpemVyIGNsYXNzaWZpY2F0aW9uICovXG5cdGluZmVycmVkVHlwZT86IHN0cmluZztcblx0LyoqIERlY2xhcmF0aW9uIHNpdGU6IGZpbGUudHM6TGluZTpDb2wgKi9cblx0ZGVjbGFyYXRpb246IHN0cmluZztcblx0aXNQYXJhbWV0ZXI6IGJvb2xlYW47XG5cdC8qKiBjb25zdCA9IGZhbHNlOyBsZXQvdmFyIGFuZCBwYXJhbWV0ZXJzID0gdHJ1ZSAocGFyYW1ldGVycyBhcmUgcmVhc3NpZ25hYmxlKSAqL1xuXHRpc011dGFibGU6IGJvb2xlYW47XG5cdC8qKlxuXHQgKiBSZWFzc2lnbm1lbnQgc2l0ZXMgKGZpbGUudHM6TGluZTpDb2wpIG9mIHRoaXMgYmluZGluZyDigJQgZmxvdy10ZXJtaW5hdGlvblxuXHQgKiBwb2ludHMgKGRlY2lzaW9uIDYpOiB0aGUgUGhhc2UgMyB3YWxrZXIgc3RvcHMgZm9sbG93aW5nIHRoZSBiaW5kaW5nIHRoZXJlXG5cdCAqL1xuXHRyZWFzc2lnbm1lbnRzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBUaGUgZnVsbCBsb2NhbC1zY29wZSBhbmFseXNpc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNjb3BlQW5hbHlzaXMge1xuXHQvKiogS2V5ZWQgYnkgc2NvcGVJZCAqL1xuXHRzY29wZXM6IE1hcDxzdHJpbmcsIFNjb3BlSW5mbz47XG5cdC8qKiBLZXllZCBieSBgJHtzY29wZUlkfSMke25hbWV9YCAqL1xuXHR2YXJpYWJsZXM6IE1hcDxzdHJpbmcsIFNjb3BlVmFyaWFibGU+O1xufVxuXG4vKipcbiAqIEpTT04gb3V0cHV0IGZvciBzY29wZXMuanNvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNjb3Blc0pzb24ge1xuXHR2ZXJzaW9uOiBzdHJpbmc7XG5cdGdlbmVyYXRlZEF0OiBzdHJpbmc7XG5cdHNjb3BlczogUmVjb3JkPHN0cmluZywgU2NvcGVJbmZvPjtcblx0dmFyaWFibGVzOiBTY29wZVZhcmlhYmxlW107XG59XG5cbi8qKlxuICogT25lIG5vZGUgb2YgdGhlIGNyZWF0aW9uIGdyYXBoIChpbnN0cnVtZW50YXRpb24gd2Fsa2VyIHBsYW4sIFBoYXNlIDMpOlxuICogYSBzY29wZSB0aGF0IGNyZWF0ZXMgbW5lbW9uaWNhIGluc3RhbmNlcywgb3Igb25lIHNpdHRpbmcgb24gYSBjYWxsIHBhdGhcbiAqIHRvIGEgY3JlYXRvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGlvbkdyYXBoTm9kZSB7XG5cdC8qKiBMb2NhbFNjb3BlV2Fsa2VyIHNjb3BlSWQgKG1vZHVsZSBzY29wZSA9IGZpbGUgcGF0aDsgZnVuY3Rpb24gc2NvcGVzID0gZmlsZTpsaW5lOmNvbCkgKi9cblx0c2NvcGVJZDogc3RyaW5nO1xuXHQvKiogRGVjaXNpb24gOCBsYWJlbDogZnVuY3Rpb24vbWV0aG9kIG5hbWUgKCdDbGFzcy5tZXRob2QnKSwgZmlsZTpsaW5lIGZvciBhbm9ueW1vdXMgaG9sZGVycyAqL1xuXHRuYW1lOiBzdHJpbmc7XG5cdGtpbmQ6IFNjb3BlS2luZDtcblx0LyoqIEFic29sdXRlIGZpbGUgcGF0aCAqL1xuXHRmaWxlUGF0aDogc3RyaW5nO1xuXHQvKiogU2NvcGUgc3RhcnQ6IGZpbGUudHM6TGluZTpDb2wgKi9cblx0bG9jYXRpb246IHN0cmluZztcblx0LyoqIFRydWUgd2hlbiB0aGUgd2FsayBmb3VuZCBubyBjYWxsZXJzIOKAlCBhbiBhcHBsaWNhdGlvbiBlbnRyeSBwb2ludCAqL1xuXHRzdGFydGVyOiBib29sZWFuO1xufVxuXG4vKipcbiAqIE9uZSBlZGdlIG9mIHRoZSBjcmVhdGlvbiBncmFwaDogdGhlIGNhbGxlciBzY29wZSBpbnZva2VzIG9yIHJlZmVyZW5jZXMgdGhlXG4gKiBjYWxsZWUgc2NvcGUuIERpcmVjdGlvbiBpcyBpbnNpZGUtb3V0OiBjYWxsZXIg4oaSIGNhbGxlZSwgd2hlcmUgdGhlIGNhbGxlZSBpc1xuICogY2xvc2VyIHRvIHRoZSBjcmVhdGlvbiBzaXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0aW9uR3JhcGhFZGdlIHtcblx0LyoqIENhbGxpbmcgc2NvcGUncyBzY29wZUlkICovXG5cdGNhbGxlcjogc3RyaW5nO1xuXHQvKiogQ2FsbGVkIChob2xkZXIpIHNjb3BlJ3Mgc2NvcGVJZCAqL1xuXHRjYWxsZWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBbiBpbnN0YW50aWF0aW9uIGFuY2hvcjogb25lIG1uZW1vbmljYSBjcmVhdGlvbiBzaXRlIHBpbm5lZCB0byBpdHMgaG9sZGVyXG4gKiBzY29wZS5cbiAqXG4gKiBgdmFyaWFibGVgL2B0ZXJtaW5hdGVkQXRgIGFyZSBhIGRvY3VtZW50ZWQgaGV1cmlzdGljOiB0aGUgdmFyaWFibGUgZGVjbGFyZWRcbiAqIGluIHRoZSBob2xkZXIgc2NvcGUgb24gdGhlIFNBTUUgbGluZSBhcyB0aGUgY3JlYXRpb24sIHdob3NlIHR5cGVQYXRoICh3aGVuXG4gKiBrbm93bikgbWF0Y2hlcyB0aGUgY3JlYXRlZCB0eXBlLiBgdGVybWluYXRlZEF0YCBpcyB0aGF0IHZhcmlhYmxlJ3MgZmlyc3RcbiAqIHJlYXNzaWdubWVudCBzaXRlIOKAlCB0aGUgZGVjaXNpb24gNiBmbG93LXRlcm1pbmF0aW9uIHBvaW50IHdoZXJlIHRoZSB3YWxrZXJcbiAqIHN0b3BzIGZvbGxvd2luZyB0aGUgYmluZGluZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGlvbkFuY2hvciB7XG5cdC8qKiBDcmVhdGlvbiBzaXRlOiBmaWxlLnRzOkxpbmU6Q29sICh0aGUgdXNhZ2VzLmpzb24gbG9jYXRpb24pICovXG5cdGxvY2F0aW9uOiBzdHJpbmc7XG5cdC8qKiBTY29wZSBob2xkaW5nIHRoZSBjcmVhdGlvbiAoc2NvcGVzLmpzb24gc2NvcGVJZCkgKi9cblx0aG9sZGVyU2NvcGVJZDogc3RyaW5nO1xuXHQvKiogTW5lbW9uaWNhIHR5cGUgZnVsbFBhdGggYmVpbmcgY3JlYXRlZCAqL1xuXHR0eXBlUGF0aDogc3RyaW5nO1xuXHQvKiogQ29uc3RydWN0b3IgZXhwcmVzc2lvbiB0ZXh0ICgnVGhpbmcnLCAndXNlci5BZG1pbkVudGl0eScsIGEgbG9va3VwIGFsaWFzIG5hbWUpICovXG5cdGNvbnN0cnVjdG9yVGV4dD86IHN0cmluZztcblx0LyoqXG5cdCAqIFRydWUgd2hlbiB0aGUgaG9sZGVyIGlzIHRoZSBtb2R1bGUgc2NvcGUg4oCUIGEgcm9vdGVkIGluc3RhbmNlIChwbGFuOlxuXHQgKiBsZWdpdGltYXRlIHJvb3Qgb3IgZGV2ZWxvcGVyIGVycm9yOyBsYWJlbGVkLCBub3QgcG9saWNlZClcblx0ICovXG5cdHJvb3RlZD86IGJvb2xlYW47XG5cdC8qKiBWYXJpYWJsZSB0aGUgZnJlc2ggaW5zdGFuY2Ugd2FzIGJvdW5kIHRvIChzYW1lLWxpbmUgaGV1cmlzdGljKSAqL1xuXHR2YXJpYWJsZT86IHN0cmluZztcblx0LyoqIEZpcnN0IHJlYXNzaWdubWVudCBzaXRlIG9mIHRoYXQgdmFyaWFibGU6IGZpbGUudHM6TGluZTpDb2wgKi9cblx0dGVybWluYXRlZEF0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBjcmVhdGlvbiBncmFwaDogZXZlcnl0aGluZyB0aGF0IGxlYWRzIHRvIG1uZW1vbmljYSBpbnN0YW5jZXMgYmVpbmdcbiAqIGNyZWF0ZWQuIEVtaXR0ZWQgYXMgdGhlIGBjcmVhdGlvbkdyYXBoYCBrZXkgb2YgaW5zdHJ1bWVudGF0aW9uLmpzb24gdjIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRpb25HcmFwaCB7XG5cdG5vZGVzOiBDcmVhdGlvbkdyYXBoTm9kZVtdO1xuXHRlZGdlczogQ3JlYXRpb25HcmFwaEVkZ2VbXTtcblx0YW5jaG9yczogQ3JlYXRpb25BbmNob3JbXTtcbn1cblxuLyoqXG4gKiBKU09OIG91dHB1dCBmb3IgaGllcmFyY2h5Lmpzb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIaWVyYXJjaHlKc29uIHtcblx0dmVyc2lvbjogc3RyaW5nO1xuXHRnZW5lcmF0ZWRBdDogc3RyaW5nO1xuXHRyb290czogSGllcmFyY2h5Tm9kZVtdO1xufVxuXG4vKipcbiAqIE9uZSBlbnRyeSBvZiB0aGUgY29sbGVjdGlvbnMuanNvbiBtYW5pZmVzdC4gVGhlIGRlZmF1bHQgY29sbGVjdGlvbiBpc1xuICogZW1pdHRlZCBmaXJzdCB3aGVuZXZlciBkZWZhdWx0LWNvbGxlY3Rpb24gdHlwZXMgZXhpc3Q6IGl0IGhhcyBubyBjYWxsXG4gKiBzaXRlLCBzbyBgaWRgIGFuZCBgbG9jYXRpb25gIHN0YXkgbnVsbCAodW5wcmVmaXhlZCBmdWxsUGF0aHMgQVJFIGl0c1xuICogaWRlbnRpdHkpIGFuZCBpdHMgcmVnaXN0cnkgaW50ZXJmYWNlIGlzIHRoZSBnbG9iYWwgYFR5cGVSZWdpc3RyeWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdGlvbk1hbmlmZXN0RW50cnkge1xuXHQvKiogTWludGVkIGlkIHVzZWQgaW4gYGNvbGxlY3Rpb25JZDo6YCBmdWxsUGF0aCBwcmVmaXhlczsgbnVsbCBmb3IgdGhlIGRlZmF1bHQgY29sbGVjdGlvbiAqL1xuXHRpZDogc3RyaW5nIHwgbnVsbDtcblx0LyoqIFZhcmlhYmxlIGhvbGRpbmcgdGhlIGNyZWF0ZVR5cGVzQ29sbGVjdGlvbigpIHJlc3VsdCAoJ2RlZmF1bHRUeXBlcycgZm9yIHRoZSBkZWZhdWx0IGNvbGxlY3Rpb24pICovXG5cdG5hbWU6IHN0cmluZztcblx0LyoqIE9wdGlvbi1CIHJlZ2lzdHJ5IGludGVyZmFjZSBuYW1lOyBhYnNlbnQgd2hlbiB0aGUgY29sbGVjdGlvbiBkZWNsYXJlcyBub25lICovXG5cdHJlZ2lzdHJ5SW50ZXJmYWNlPzogc3RyaW5nO1xuXHQvKiogY3JlYXRlVHlwZXNDb2xsZWN0aW9uKCkgY2FsbCBzaXRlIChmaWxlOmxpbmU6Y29sKTsgbnVsbCBmb3IgdGhlIGRlZmF1bHQgY29sbGVjdGlvbiAqL1xuXHRsb2NhdGlvbjogc3RyaW5nIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBKU09OIG91dHB1dCBmb3IgY29sbGVjdGlvbnMuanNvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3Rpb25zSnNvbiB7XG5cdHZlcnNpb246IHN0cmluZztcblx0Z2VuZXJhdGVkQXQ6IHN0cmluZztcblx0Y29sbGVjdGlvbnM6IENvbGxlY3Rpb25NYW5pZmVzdEVudHJ5W107XG59XG5cbi8qKlxuICogU3RydWN0dXJlZCBoaWVyYXJjaHkgbm9kZSBmb3IgbWFjaGluZSBjb25zdW1wdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIaWVyYXJjaHlOb2RlIHtcblx0LyoqIFR5cGUgbmFtZSAoZS5nLiwgXCJBZG1pblR5cGVcIikgKi9cblx0bmFtZTogc3RyaW5nO1xuXHQvKiogRnVsbCBkb3R0ZWQgcGF0aCAoZS5nLiwgXCJVc2VyVHlwZS5BZG1pblR5cGVcIikgKi9cblx0ZnVsbFBhdGg6IHN0cmluZztcblx0LyoqIExvY2F0aW9uIGluIHNvdXJjZTogZmlsZS50czpMaW5lOkNvbCAqL1xuXHRsb2NhdGlvbjogc3RyaW5nO1xuXHQvKiogQ2hpbGQgdHlwZXMgaW4gdGhlIFRyaWUgKi9cblx0Y2hpbGRyZW46IEhpZXJhcmNoeU5vZGVbXTtcbn1cblxuLyoqXG4gKiBBIGZhdGFsIHJlc29sdXRpb24gZmFpbHVyZTogc2FtZS1uYW1lc3BhY2UgZHVwbGljYXRlIG1uZW1vbmljYVxuICogZGVmaW5pdGlvbnMsIG9yIGEgbW5lbW9uaWNhLWdyYXBoIHR5cGUgcmVmZXJlbmNlIHRoYXQgc3RheXMgYW1iaWd1b3VzXG4gKiBhZnRlciBwYXRoLWF3YXJlIHJlc29sdXRpb24gKG9yIHJlc29sdmVzIHRvIG5vdGhpbmcpLiBUaGUgQ0xJIHByaW50c1xuICogZXZlcnkgbG9jYXRpb24gYW5kIHdyaXRlcyBubyAudGFjdGljYSBvdXRwdXQgYXQgYWxsLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdXRpb25FcnJvciB7XG5cdC8qKiBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgZmFpbHVyZSAqL1xuXHRtZXNzYWdlOiBzdHJpbmc7XG5cdC8qKiBldmVyeSBpbnZvbHZlZCBzb3VyY2UgbG9jYXRpb24sIGBmaWxlOmxpbmU6Y29sdW1uYCAqL1xuXHRsb2NhdGlvbnM6IHN0cmluZ1tdO1xufVxuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFR5cGUgZGVmaW5pdGlvbnMgZm9yIFRhY3RpY2FcbiAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIFRhY3RpY2FDb25maWcge1xuXHQvKiogT3V0cHV0IGRpcmVjdG9yeSBmb3IgZ2VuZXJhdGVkIHR5cGVzIChkZWZhdWx0OiAudGFjdGljYSkgKi9cblx0b3V0cHV0RGlyPzogc3RyaW5nO1xuXHQvKiogRmlsZXMgdG8gaW5jbHVkZSAoZ2xvYiBwYXR0ZXJucykgKi9cblx0aW5jbHVkZT86IHN0cmluZ1tdO1xuXHQvKiogRmlsZXMgdG8gZXhjbHVkZSAoZ2xvYiBwYXR0ZXJucykgKi9cblx0ZXhjbHVkZT86IHN0cmluZ1tdO1xuXHQvKiogRW5hYmxlIHZlcmJvc2UgbG9nZ2luZyAqL1xuXHR2ZXJib3NlPzogYm9vbGVhbjtcblx0LyoqIEdlbmVyYXRlIGdsb2JhbCBhdWdtZW50YXRpb24gaW5zdGVhZCBvZiBtb2R1bGUgYXVnbWVudGF0aW9uIChkZWZhdWx0OiB0cnVlKSAqL1xuXHRnbG9iYWxBdWdtZW50YXRpb24/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb3BlcnR5SW5mbyB7XG5cdG5hbWU6IHN0cmluZztcblx0dHlwZTogc3RyaW5nO1xuXHRvcHRpb25hbDogYm9vbGVhbjtcblx0LyoqIFRydWUgaWYgdGhpcyBpcyBhIGdldHRlciBwcm9wZXJ0eSAocmVhZG9ubHkpICovXG5cdHJlYWRvbmx5PzogYm9vbGVhbjtcbn1cblxuLyoqIENvbnN0cnVjdG9yIHBhcmFtZXRlciBpbmZvIGZvciBUeXBlUmVnaXN0cnkgc2lnbmF0dXJlcyAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25zdHJ1Y3RvclBhcmFtSW5mbyB7XG5cdC8qKiBQYXJhbWV0ZXIgbmFtZSAoZS5nLiwgXCJ1c2FnZXNcIiwgXCJkYXRhXCIsIFwiY29uZmlnXCIpICovXG5cdG5hbWU6IHN0cmluZztcblx0LyoqIFRoZSB0eXBlIHN0cmluZyAtIGNhbiBiZSBhIHNpbXBsZSB0eXBlIG9yIGV4cGFuZGVkIG9iamVjdCBsaXRlcmFsICovXG5cdHR5cGU6IHN0cmluZztcblx0b3B0aW9uYWw6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZU5vZGUge1xuXHQvKiogVHlwZSBuYW1lIChlLmcuLCBcIlNlY29uZFR5cGVcIikgKi9cblx0bmFtZTogc3RyaW5nO1xuXHQvKiogRnVsbCBwYXRoIChlLmcuLCBcIkZpcnN0VHlwZS5TZWNvbmRUeXBlXCIpICovXG5cdGZ1bGxQYXRoOiBzdHJpbmc7XG5cdC8qKiBQcm9wZXJ0aWVzIGRlZmluZWQgaW4gdGhpcyB0eXBlJ3MgY29uc3RydWN0b3IgKi9cblx0cHJvcGVydGllczogTWFwPHN0cmluZywgUHJvcGVydHlJbmZvPjtcblx0LyoqIENvbnN0cnVjdG9yIHBhcmFtZXRlcnMgKGZvciBUeXBlUmVnaXN0cnkgY29uc3RydWN0b3Igc2lnbmF0dXJlKSAqL1xuXHRjb25zdHJ1Y3RvclBhcmFtcz86IENvbnN0cnVjdG9yUGFyYW1JbmZvW107XG5cdC8qKlxuXHQgKiBUcnVlIHdoZW4gdGhlIGNvbnN0cnVjdCBoYW5kbGVyIGlzIGFuIGFzeW5jIGZ1bmN0aW9uL2Fycm93IChkZXRlY3RlZFxuXHQgKiBzeW50YWN0aWNhbGx5IGJ5IHRoZSBhc3luYyBtb2RpZmllcikuIEVtaXR0ZWQgY29uc3RydWN0b3Igc2hhcGVzIHRoZW5cblx0ICogcmVzb2x2ZSB0byBQcm9taXNlPEluc3RhbmNlVHlwZT4uIEFzeW5jIENMQVNTRVMgYXJlIG5ldmVyIGZsYWdnZWQg4oCUXG5cdCAqIHRoZXkgYXJlIHR5cGVkIGJ5IHRoZSB1c2VyIGluIHVzZXJsYW5kIChkb2N1bWVudGVkIGluIEFHRU5UUy5tZCkuXG5cdCAqL1xuXHRpc0FzeW5jPzogYm9vbGVhbjtcblx0LyoqIFBhcmVudCB0eXBlIG5vZGUgKi9cblx0cGFyZW50PzogVHlwZU5vZGU7XG5cdC8qKiBDaGlsZCB0eXBlcyAqL1xuXHRjaGlsZHJlbjogTWFwPHN0cmluZywgVHlwZU5vZGU+O1xuXHQvKiogU291cmNlIGZpbGUgcGF0aCAqL1xuXHRzb3VyY2VGaWxlOiBzdHJpbmc7XG5cdC8qKiBMaW5lIG51bWJlciBpbiBzb3VyY2UgKi9cblx0bGluZTogbnVtYmVyO1xuXHQvKiogQ29sdW1uIG51bWJlciBpbiBzb3VyY2UgKi9cblx0Y29sdW1uOiBudW1iZXI7XG5cdC8qKiBDb25zdHJ1Y3RvciBmdW5jdGlvbiBuYW1lIG9yIGNsYXNzIG5hbWUgKi9cblx0Y29uc3RydWN0b3JOYW1lPzogc3RyaW5nO1xuXHQvKiogQ29sbGVjdGlvbiBpZGVudGlmaWVyIGlmIHRoZSB0eXBlIGJlbG9uZ3MgdG8gYSBjdXN0b20gY29sbGVjdGlvbiAodW5kZWZpbmVkID0gZGVmYXVsdC9nbG9iYWwgcmVnaXN0cnkpICovXG5cdGNvbGxlY3Rpb25JZD86IHN0cmluZztcblx0LyoqIFJlZ2lzdHJ5IGludGVyZmFjZSBuYW1lIGZvciBjdXN0b20gY29sbGVjdGlvbnMgdXNpbmcgT3B0aW9uIEIgKHVzZXItcHJvdmlkZWQgcmVnaXN0cnkgaW50ZXJmYWNlKSAqL1xuXHRyZWdpc3RyeUludGVyZmFjZU5hbWU/OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBTb3VyY2UgZmlsZSBvZiB0aGUgY3JlYXRlVHlwZXNDb2xsZWN0aW9uKCkgY2FsbCDigJQgdGhlIG1vZHVsZSB0aGVcblx0ICogT3B0aW9uIEIgcmVnaXN0cnkgYXVnbWVudGF0aW9uIG11c3QgdGFyZ2V0ICh0aGUgaW50ZXJmYWNlIGlzXG5cdCAqIGNvbmZpcm1lZCBkZWNsYXJlZCB0aGVyZSlcblx0ICovXG5cdGNvbGxlY3Rpb25Tb3VyY2VGaWxlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVHcmFwaCB7XG5cdC8qKiBSb290IHR5cGVzLCBrZXllZCBieSBmdWxsIHBhdGggKGN1c3RvbS1jb2xsZWN0aW9uIHJvb3RzIGNhcnJ5IHRoZSBgY29sbGVjdGlvbklkOjpgIHByZWZpeCkgKi9cblx0cm9vdHM6IE1hcDxzdHJpbmcsIFR5cGVOb2RlPjtcblx0LyoqIEFsbCB0eXBlcyBieSBmdWxsIHBhdGggKi9cblx0YWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVOb2RlPjtcblx0LyoqIEFkZCBhIHJvb3QgdHlwZSAqL1xuXHRhZGRSb290KG5vZGU6IFR5cGVOb2RlKTogdm9pZDtcblx0LyoqIEZpbmQgYSB0eXBlIGJ5IGZ1bGwgcGF0aCAqL1xuXHRmaW5kVHlwZShmdWxsUGF0aDogc3RyaW5nKTogVHlwZU5vZGUgfCB1bmRlZmluZWQ7XG5cdC8qKiBHZXQgYWxsIHR5cGVzIGFzIGFycmF5ICovXG5cdGdldEFsbFR5cGVzKCk6IFR5cGVOb2RlW107XG5cdC8qKiBDbGVhciB0aGUgZ3JhcGggKi9cblx0Y2xlYXIoKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbmFseXplUmVzdWx0IHtcblx0LyoqIFR5cGVzIGZvdW5kIGluIHRoZSBhbmFseXNpcyAqL1xuXHR0eXBlczogVHlwZU5vZGVbXTtcblx0LyoqIEVycm9ycyBlbmNvdW50ZXJlZCAqL1xuXHRlcnJvcnM6IEFuYWx5emVFcnJvcltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFuYWx5emVFcnJvciB7XG5cdG1lc3NhZ2U6IHN0cmluZztcblx0ZmlsZTogc3RyaW5nO1xuXHRsaW5lOiBudW1iZXI7XG5cdGNvbHVtbjogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlZFR5cGVzIHtcblx0LyoqIENvbnRlbnQgb2YgdGhlIC5kLnRzIGZpbGUgKi9cblx0Y29udGVudDogc3RyaW5nO1xuXHQvKiogVHlwZXMgdGhhdCB3ZXJlIGdlbmVyYXRlZCAqL1xuXHR0eXBlczogc3RyaW5nW107XG59XG5cbi8qKlxuICogRGVmaW5pdGlvbiBpbmZvIGZvciBjb2RlIG5hdmlnYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWZpbml0aW9uSW5mbyB7XG5cdC8qKiBUeXBlIG5hbWUgKGUuZy4sIFwiQWRtaW5UeXBlXCIpICovXG5cdG5hbWU6IHN0cmluZztcblx0LyoqIExvY2F0aW9uIGluIHNvdXJjZTogZmlsZS50czpMaW5lOkNvbCAqL1xuXHRsb2NhdGlvbjogc3RyaW5nO1xuXHQvKiogSG93IHR5cGUgd2FzIGNyZWF0ZWQ6ICdkZWZpbmUnIG9yICdkZWNvcmF0ZScgKi9cblx0a2luZDogJ2RlZmluZScgfCAnZGVjb3JhdGUnO1xuXHQvKiogUGFyZW50IHR5cGUgZnVsbCBwYXRoLCBudWxsIGlmIHJvb3QgKi9cblx0cGFyZW50OiBzdHJpbmcgfCBudWxsO1xuXHQvKiogc3RyaWN0Q2hhaW4gY29uZmlnIG9wdGlvbiAqL1xuXHRzdHJpY3RDaGFpbjogYm9vbGVhbjtcblx0LyoqIGJsb2NrRXJyb3JzIGNvbmZpZyBvcHRpb24gKi9cblx0YmxvY2tFcnJvcnM6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVXNhZ2UgaW5mbyBmb3IgY29kZSBuYXZpZ2F0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNhZ2VJbmZvIHtcblx0LyoqIExvY2F0aW9uIGluIHNvdXJjZTogZmlsZS50czpMaW5lOkNvbCAqL1xuXHRsb2NhdGlvbjogc3RyaW5nO1xuXHQvKiogS2luZCBvZiB1c2FnZTogaW5zdGFudGlhdGlvbiwgdHlwZUFubm90YXRpb24sIHByb3BlcnR5QWNjZXNzLCBsb29rdXAsIHJlZmVyZW5jZSAqL1xuXHRraW5kOiAnaW5zdGFudGlhdGlvbicgfCAndHlwZUFubm90YXRpb24nIHwgJ3Byb3BlcnR5QWNjZXNzJyB8ICdsb29rdXAnIHwgJ3JlZmVyZW5jZSc7XG5cdC8qKiBDb2RlIHNuaXBwZXQgKi9cblx0Y29kZTogc3RyaW5nO1xuXHQvKipcblx0ICogU2NvcGUgaG9sZGluZyB0aGlzIHVzYWdlIChMb2NhbFNjb3BlV2Fsa2VyIHNjb3BlSWQ6IG1vZHVsZSBzY29wZSBpcyB0aGVcblx0ICogZmlsZSBwYXRoLCBmdW5jdGlvbiBzY29wZXMgYXJlIGZpbGU6bGluZTpjb2wpLiBBZGRpdGl2ZTsgYWJzZW50IHdoZW4gdGhlXG5cdCAqIHVzYWdlIHNpdHMgb3V0c2lkZSB0cmFja2VkIGZpbGVzLlxuXHQgKi9cblx0aG9sZGVyU2NvcGVJZD86IHN0cmluZztcblx0LyoqXG5cdCAqIENvbnN0cnVjdG9yIGV4cHJlc3Npb24gdGV4dCBhdCBhbiBpbnN0YW50aWF0aW9uIHNpdGUgKCdUaGluZycsXG5cdCAqICd1c2VyLkFkbWluRW50aXR5JywgJ1QyJyBmb3IgYSBsb29rdXAgYWxpYXMpLiBBZGRpdGl2ZTsgc2V0IG9ubHkgb25cblx0ICoga2luZCAnaW5zdGFudGlhdGlvbicuIEZlZWRzIENyZWF0aW9uQW5jaG9yLmNvbnN0cnVjdG9yVGV4dCAoUGhhc2UgMykuXG5cdCAqL1xuXHRjb25zdHJ1Y3RvclRleHQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSlNPTiBvdXRwdXQgZm9yIGRlZmluaXRpb25zLmpzb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWZpbml0aW9uc0pzb24ge1xuXHR2ZXJzaW9uOiBzdHJpbmc7XG5cdGdlbmVyYXRlZEF0OiBzdHJpbmc7XG5cdGRlZmluaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBEZWZpbml0aW9uSW5mbz47XG59XG5cbi8qKlxuICogSlNPTiBvdXRwdXQgZm9yIHVzYWdlcy5qc29uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNhZ2VzSnNvbiB7XG5cdHZlcnNpb246IHN0cmluZztcblx0Z2VuZXJhdGVkQXQ6IHN0cmluZztcblx0dXNhZ2VzOiBSZWNvcmQ8c3RyaW5nLCBVc2FnZUluZm9bXT47XG59XG5cbi8qKlxuICogRURTIChFeGVjdXRpb24gRGF0YSBTdG9yYWdlKSBraW5kIGZvciB0cmFja2luZyBleGVjdXRpb24gZmxvdyBwYXR0ZXJuc1xuICovXG5leHBvcnQgdHlwZSBFRFNLaW5kID1cblx0fCAnd3JhcCdcblx0fCAnY29udGV4dENvbnN1bWUnXG5cdHwgJ2hvb2tBdHRhY2gnO1xuXG4vKipcbiAqIEVEUyBpbmZvIGZvciBleGVjdXRpb24gZGF0YSBmbG93IHRyYWNraW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRURTSW5mbyB7XG5cdC8qKiBMb2NhdGlvbiBpbiBzb3VyY2U6IGZpbGUudHM6TGluZTpDb2wgKi9cblx0bG9jYXRpb246IHN0cmluZztcblx0LyoqIEtpbmQgb2YgRURTIHVzYWdlICovXG5cdGtpbmQ6IEVEU0tpbmQ7XG5cdC8qKiBDb2RlIHNuaXBwZXQgKi9cblx0Y29kZTogc3RyaW5nO1xuXHQvKiogUmVzb2x2ZWQgdGFyZ2V0IHR5cGUgaWYgZGV0ZWN0YWJsZSAqL1xuXHR0YXJnZXRUeXBlPzogc3RyaW5nO1xuXHQvKipcblx0ICogRW5jbG9zaW5nIG1uZW1vbmljYSB0eXBlIHBhdGggKGRlZmluZS9sYXp5IGhhbmRsZXIgb3IgZGVjb3JhdGVkIGNsYXNzKTtcblx0ICogZm9yIHdyYXAgc2l0ZXMgb3V0c2lkZSBhbnkgaGFuZGxlciwgYXR0cmlidXRlZCB0aHJvdWdoIHRoZSBpbnN0YW5jZS9jb250ZXh0XG5cdCAqIGFyZ3VtZW50ICh0cmFja2VkIGFzc2lnbm1lbnQgb3IgcGFyYW1ldGVyIGFubm90YXRpb24pLCB0aGVuIGluaGVyaXRlZCBkb3duXG5cdCAqIHRoZSB3cmFwIGdlbmVyYXRpb24gY2hhaW4gKGB2aWFgKVxuXHQgKi9cblx0c2NvcGU/OiBzdHJpbmc7XG5cdC8qKiBMb2NhdGlvbiBvZiB0aGUgZW5jbG9zaW5nIHdyYXAgc2l0ZSB3aG9zZSBydW50aW1lIHdyYXBwaW5nIGNhdXNlZCB0aGlzIGVudHJ5ICovXG5cdHZpYT86IHN0cmluZztcblx0LyoqIE1uZW1vbmljYSB0eXBlIGZ1bGxQYXRocyBpbnN0YW50aWF0ZWQgaW5zaWRlIHRoZSB3cmFwcGVkIGJvZHkg4oCUIGd1YXJhbnRlZWQgcGF0aCBoaXRzICovXG5cdGNyZWF0ZXNUeXBlcz86IHN0cmluZ1tdO1xuXHQvKiogTGFiZWwgc3RyaW5nIGxpdGVyYWwgcGFzc2VkIHRvIHdyYXAoZm4sIOKApiwgJ2xhYmVsJykgd2hlbiBzdGF0aWNhbGx5IHZpc2libGUgKi9cblx0bGFiZWw/OiBzdHJpbmc7XG5cdC8qKiBzY29wZUlkIChzY29wZXMuanNvbikgb2YgdGhlIHdyYXBwZWQgY2FsbGJhY2sncyBvd24gc2NvcGUg4oCUIGpvaW5zIHRvIHRoZSBjcmVhdGlvbiBncmFwaCAqL1xuXHRjYWxsYmFja1Njb3BlSWQ/OiBzdHJpbmc7XG5cdC8qKiBJZGVudGlmaWVyIHBhc3NlZCBhcyB0aGUgaW5zdGFuY2UvY29udGV4dCBhcmd1bWVudCAoJ3VzZXInKSwgd2hlbiBpdCBpcyBvbmUgKi9cblx0aW5zdGFuY2VBcmc/OiBzdHJpbmc7XG5cdC8qKiBzY29wZUlkIG9mIHRoZSBzY29wZSBob2xkaW5nIHRoZSB3cmFwIGNhbGwgc2l0ZSDigJQgam9pbnMgdG8gdGhlIGNyZWF0aW9uIGdyYXBoICovXG5cdHNjb3BlSWQ/OiBzdHJpbmc7XG5cdC8qKiBNbmVtb25pY2EgZnVsbFBhdGggb2YgdGhlIGluc3RhbmNlIGFyZ3VtZW50LCByZXNvbHZlZCB0aHJvdWdoIHNjb3BlIHZhcmlhYmxlcyAqL1xuXHR3cmFwc1R5cGVQYXRoPzogc3RyaW5nO1xuXHQvKiogV3JhcC1mYW1pbHkgZnVuY3Rpb24gbmFtZSAoJ3dyYXAnIHwgJ3dyYXBDb25zdHJ1Y3RvckFyZycgfCDigKYpIOKAlCBqb2lucyB0aGVcblx0ICogIGNhbGwgc2l0ZSB0byBkaXZlJ3MgZW5naW5lIGtub3QgaW4gZ3JhcGggY29uc3VtZXJzICovXG5cdGZuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEpTT04gb3V0cHV0IGZvciBlZHMuanNvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVEU0pzb24ge1xuXHR2ZXJzaW9uOiBzdHJpbmc7XG5cdGdlbmVyYXRlZEF0OiBzdHJpbmc7XG5cdGVkczogUmVjb3JkPHN0cmluZywgRURTSW5mb1tdPjtcbn1cblxuLyoqXG4gKiBJbnN0cnVtZW50YXRpb24ga2luZCBmb3IgZnJhbWV3b3JrIGxpZmVjeWNsZSBjcm9zc3JvYWRzXG4gKi9cbmV4cG9ydCB0eXBlIEluc3RydW1lbnRhdGlvbktpbmQgPVxuXHR8ICdpbnRlcmNlcHRvcidcblx0fCAnZ3VhcmQnXG5cdHwgJ3BpcGUnXG5cdHwgJ2ZpbHRlcidcblx0fCAnbWlkZGxld2FyZSc7XG5cbi8qKlxuICogSW5zdHJ1bWVudGF0aW9uIHNjb3BlOiB3aGVyZSB0aGUgcG9pbnQgYXR0YWNoZXMuXG4gKiAnZ2xvYmFsJyBmb3IgcHJvdmlkZXItdG9rZW4gcmVnaXN0cmF0aW9ucywgJ21vZHVsZScgZm9yIG1pZGRsZXdhcmUgd2lyZWRcbiAqIHZpYSBjb25zdW1lci5hcHBseSgpIEFORCBmb3IgYmFyZSBoZXJpdGFnZSBkZWNsYXJhdGlvbnMgd2hvc2UgYXR0YWNobWVudFxuICogaXMgc3RhdGljYWxseSB1bmtub3duLCBgY29udHJvbGxlcjpOYW1lYCAvIGBtZXRob2Q6Q2xhc3MubWV0aG9kYCBmb3JcbiAqIGRlY29yYXRvci1zY29wZWQgYXR0YWNobWVudHMuXG4gKi9cbmV4cG9ydCB0eXBlIEluc3RydW1lbnRhdGlvblNjb3BlID1cblx0fCAnZ2xvYmFsJ1xuXHR8ICdtb2R1bGUnXG5cdHwgYGNvbnRyb2xsZXI6JHtzdHJpbmd9YFxuXHR8IGBtZXRob2Q6JHtzdHJpbmd9YDtcblxuLyoqXG4gKiBJbnN0cnVtZW50YXRpb24gcG9pbnQ6IGEgZnJhbWV3b3JrIGxpZmVjeWNsZSBjcm9zc3JvYWQgKGludGVyY2VwdG9yLFxuICogZ3VhcmQsIHBpcGUsIGZpbHRlciwgbWlkZGxld2FyZSkgZGV0ZWN0ZWQgc3ludGFjdGljYWxseS4gVGhlIHZvY2FidWxhcnlcbiAqIHRoYXQgdHVybnMgYSBzeW50YWN0aWMgc2hhcGUgaW50byBhIHBvaW50IGNvbWVzIGZyb20gcGx1Z2lucyDigJQgd2l0aCBub1xuICogcGx1Z2luIGxvYWRlZCwgbm8gcG9pbnRzIGFyZSBjb2xsZWN0ZWQuXG4gKlxuICogRGVkdXBlL3Njb3BlIGRlY2lzaW9uOiBwb2ludHMgYXJlIGtleWVkIGJ5IChraW5kLCBjbGFzc05hbWUsIGxvY2F0aW9uLFxuICogc2NvcGUpIGFuZCBkdXBsaWNhdGVzIG1lcmdlIHRoZWlyIGB0YXJnZXRzYC4gQSBjbGFzcyBkZXRlY3RlZCBib3RoIGJ5XG4gKiBoZXJpdGFnZSAoYSBwbHVnaW4tbGlzdGVkIGBpbXBsZW1lbnRzYCBpbnRlcmZhY2UpIGFuZCBieSBhIGRlY29yYXRvclxuICogc2l0ZSB5aWVsZHMgU0VQQVJBVEUgZW50cmllcyDigJQgdGhlIGNsYXNzLWRlY2xhcmF0aW9uIHBvaW50IGtlZXBzIHNjb3BlXG4gKiAnbW9kdWxlJyAoYXR0YWNobWVudCB1bmtub3duKSB3aGlsZSBlYWNoIHJlZ2lzdHJhdGlvbiBzaXRlIGNhcnJpZXMgaXRzXG4gKiBvd24gc2NvcGUuIE9uZSBwb2ludCBzZXJ2aW5nIG11bHRpcGxlIHNjb3BlcyB2aWEgbWVyZ2VkIHNjb3BlIGxpc3RzIHdhc1xuICogcmVqZWN0ZWQ6IGNvbnN1bWVycyAobW5lbW9ncmFwaGljYSBkaWFtb25kcykga2V5IG9mZiBhIHNpbmdsZSBzY29wZSBwZXJcbiAqIHBvaW50LCBhbmQgc2VwYXJhdGUgZW50cmllcyBrZWVwIHRoYXQgY29udHJhY3Qgc2ltcGxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluc3RydW1lbnRhdGlvblBvaW50IHtcblx0LyoqIEtpbmQgb2YgbGlmZWN5Y2xlIGNyb3Nzcm9hZCAqL1xuXHRraW5kOiBJbnN0cnVtZW50YXRpb25LaW5kO1xuXHQvKiogQ2xhc3MgcHJvdmlkaW5nIHRoZSBpbnN0cnVtZW50YXRpb24gKGUuZy4sIFwiQXV0aEd1YXJkXCIpICovXG5cdGNsYXNzTmFtZTogc3RyaW5nO1xuXHQvKiogTG9jYXRpb24gaW4gc291cmNlOiBmaWxlLnRzOkxpbmU6Q29sIChjbGFzcyBkZWNsYXJhdGlvbiB3aGVuIGRlY2xhcmVkIGluLXByb2plY3QsIGVsc2UgdGhlIHJlZ2lzdHJhdGlvbiBzaXRlKSAqL1xuXHRsb2NhdGlvbjogc3RyaW5nO1xuXHQvKiogQ29kZSBzbmlwcGV0OiBzaWduYXR1cmUgLyBmaXJzdCBsaW5lLCBsaWtlIEVEUyBgY29kZWAgKi9cblx0Y29kZTogc3RyaW5nO1xuXHQvKiogV2hlcmUgdGhlIHBvaW50IGF0dGFjaGVzICovXG5cdHNjb3BlOiBJbnN0cnVtZW50YXRpb25TY29wZTtcblx0LyoqIENvbnRyb2xsZXIvcHJvdmlkZXIgbmFtZXMgdGhlIHBvaW50IGF0dGFjaGVzIHRvOyBlbXB0eSBmb3IgZ2xvYmFsIHBvaW50cyAqL1xuXHR0YXJnZXRzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBKU09OIG91dHB1dCBmb3IgaW5zdHJ1bWVudGF0aW9uLmpzb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnN0cnVtZW50YXRpb25Kc29uIHtcblx0LyoqIFNjaGVtYSB2ZXJzaW9uOiAyIGFkZHMgdGhlIG9wdGlvbmFsIGNyZWF0aW9uR3JhcGgga2V5IChQaGFzZSAzKSAqL1xuXHR2ZXJzaW9uOiBudW1iZXI7XG5cdGdlbmVyYXRlZEF0OiBzdHJpbmc7XG5cdHBvaW50czogSW5zdHJ1bWVudGF0aW9uUG9pbnRbXTtcblx0LyoqXG5cdCAqIEluc2lkZS1vdXQgY3JlYXRpb24gd2FsayAoaW5zdHJ1bWVudGF0aW9uIHdhbGtlciBwbGFuLCBQaGFzZSAzKTogd2hpY2hcblx0ICogc2NvcGVzIGNyZWF0ZSBtbmVtb25pY2EgaW5zdGFuY2VzIGFuZCB3aG8gY2FsbHMgdGhlbSwgd2Fsa2VkIG91dHdhcmQgdG9cblx0ICogdGhlIHN0YXJ0ZXJzLiBBYnNlbnQgd2hlbiB0aGUgd3JpdGVyIGlzIGNhbGxlZCB3aXRob3V0IGNyZWF0aW9uLWdyYXBoXG5cdCAqIGRhdGEgKGRpcmVjdCBsaWJyYXJ5IHVzZSk7IGFsd2F5cyBwcmVzZW50IGZyb20gdGhlIENMSS5cblx0ICovXG5cdGNyZWF0aW9uR3JhcGg/OiBDcmVhdGlvbkdyYXBoO1xufVxuXG4vKipcbiAqIEZsb3cga2luZCBmb3IgdHJhY2tpbmcgbmF0aXZlIGluc3RhbmNlIHVzYWdlIHBhdHRlcm5zIOKAlCBXSEFUIEZMT1dTIFdIRVJFXG4gKiBpbiBwbGFpbiBzb3VyY2Ugc2hhcGVzLiBFYWNoIGtpbmQgbmFtZXMgb25lIHN5bnRhY3RpYyBwYXR0ZXJuIHRoYXQgbW92ZXNcbiAqIGEgdHlwZWQgdmFsdWUsIHdpdGggdGhlIHNoYXBlIHRoYXQgcHJvZHVjZXMgaXQ6XG4gKlxuICogICAncHJvcGVydHlSZWFkJyAgICAgIHJlYWRpbmcgYSBmaWVsZCBvZmYgdGhlIGluc3RhbmNlIOKAlFxuICogICAgICAgICAgICAgICAgICAgICAgIGB1c2VyLm5hbWVgIChhbHNvIGB1c2VyPy5uYW1lYCDigJQgb3B0aW9uYWwgY2hhaW5pbmdcbiAqICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzIGFzIGEgcGxhaW4gcHJvcGVydHlSZWFkKVxuICogICAncHJvcGVydHlXcml0ZScgICAgIGFzc2lnbmluZyBhIGZpZWxkIOKAlCBgdXNlci5uYW1lID0gJ3gnYFxuICogICAnbWV0aG9kQ2FsbCcgICAgICAgIGNhbGxpbmcgYSBtZXRob2Qgb24gaXQg4oCUIGB1c2VyLnZhbGlkYXRlKClgXG4gKiAgICdlbGVtZW50QWNjZXNzJyAgICAgYnJhY2tldCByZWFkIOKAlCBgdXNlclsnbmFtZSddYFxuICogICAnZGVzdHJ1Y3R1cmVSZWFkJyAgIGRlc3RydWN0dXJpbmcgcHVsbHMgdGhlIGZpZWxkcyBhcGFydCDigJRcbiAqICAgICAgICAgICAgICAgICAgICAgICBgY29uc3QgeyBuYW1lIH0gPSB1c2VyYFxuICogICAncGFzc0FzQXJnJyAgICAgICAgIHRoZSB2YWx1ZSBjcm9zc2VzIGludG8gYSBjYWxsIGFzIGFuIGFyZ3VtZW50IOKAlFxuICogICAgICAgICAgICAgICAgICAgICAgIGBwcm9jZXNzVXNlcih1c2VyKWAgKGNvbnRleHQgbmFtZXMgY2FsbGVlICsgc2xvdClcbiAqICAgJ3JldHVybicgICAgICAgICAgICB0aGUgdmFsdWUgbGVhdmVzIHRoZSBmdW5jdGlvbiBhcyBpdHMgcmVzdWx0IOKAlFxuICogICAgICAgICAgICAgICAgICAgICAgIGByZXR1cm4gdXNlcmBcbiAqICAgJ3NwcmVhZCcgICAgICAgICAgICB0aGUgZmllbGRzIHNjYXR0ZXIgaW50byBhIGxpdGVyYWwg4oCUIGAoeyAuLi51c2VyIH0pYFxuICogICAncmVhc3NpZ25tZW50JyAgICAgIHRoZSBiaW5kaW5nIGlzIHJlLXBvaW50ZWQg4oCUIGB1c2VyID0gb3RoZXJgXG4gKiAgICdpbnN0YW50aWF0aW9uJyAgICAgYSBjb25zdHJ1Y3Rpb24tc2hhcGVkIGNhbGwg4oCUIGBuZXcgVXNlcigpYCAoYWxzb1xuICogICAgICAgICAgICAgICAgICAgICAgIHJlY29yZGVkIGZvciBjaGFpbiB0aXBzIGFuZCBjYWxsL2FwcGx5L2ZvcmsvbWVyZ2UpXG4gKlxuICogJ2FycmF5RWxlbWVudCcgYW5kICdjb25kaXRpb25hbEFjY2VzcycgYXJlIHJlc2VydmVkIG1lbWJlcnMgb2YgdGhlXG4gKiB1bmlvbiDigJQgZGVjbGFyZWQsIG5vdCB5ZXQgZW1pdHRlZCBieSB0aGUgYW5hbHl6ZXIuXG4gKi9cbmV4cG9ydCB0eXBlIEZsb3dLaW5kID1cblx0fCAncHJvcGVydHlSZWFkJ1xuXHR8ICdwcm9wZXJ0eVdyaXRlJ1xuXHR8ICdtZXRob2RDYWxsJ1xuXHR8ICdkZXN0cnVjdHVyZVJlYWQnXG5cdHwgJ3Bhc3NBc0FyZydcblx0fCAncmV0dXJuJ1xuXHR8ICdzcHJlYWQnXG5cdHwgJ2FycmF5RWxlbWVudCdcblx0fCAnY29uZGl0aW9uYWxBY2Nlc3MnXG5cdHwgJ2VsZW1lbnRBY2Nlc3MnXG5cdHwgJ3JlYXNzaWdubWVudCdcblx0fCAnaW5zdGFudGlhdGlvbic7XG5cbi8qKlxuICogRmxvdyBpbmZvIGZvciBuYXRpdmUgaW5zdGFuY2UgdXNhZ2UgdHJhY2tpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93SW5mbyB7XG5cdC8qKiBMb2NhdGlvbiBpbiBzb3VyY2U6IGZpbGUudHM6TGluZTpDb2wgKi9cblx0bG9jYXRpb246IHN0cmluZztcblx0LyoqIEtpbmQgb2YgZmxvdyAqL1xuXHRraW5kOiBGbG93S2luZDtcblx0LyoqIENvZGUgc25pcHBldCAqL1xuXHRjb2RlOiBzdHJpbmc7XG5cdC8qKiBQcm9wZXJ0eSBuYW1lIGlmIGFwcGxpY2FibGUgKi9cblx0cHJvcGVydHlOYW1lPzogc3RyaW5nO1xuXHQvKiogUmVzb2x2ZWQgdGFyZ2V0IHR5cGUgaWYga25vd24gKi9cblx0dGFyZ2V0VHlwZT86IHN0cmluZztcblx0LyoqIENvbnRleHQgKGZ1bmN0aW9uIG5hbWUsIHBhcmFtIHBvc2l0aW9uLCBldGMuKSAqL1xuXHRjb250ZXh0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEpTT04gb3V0cHV0IGZvciBmbG93Lmpzb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93SnNvbiB7XG5cdHZlcnNpb246IHN0cmluZztcblx0Z2VuZXJhdGVkQXQ6IHN0cmluZztcblx0ZmxvdzogUmVjb3JkPHN0cmluZywgRmxvd0luZm9bXT47XG59XG5cbi8qKlxuICogV2hhdCBhIG1vZHVsZS1sZXZlbCBiaW5kaW5nIGlzLiBWYXJpYWJsZXMgYXJlIGNsYXNzaWZpZWQgYXMgJ2NvbnN0J1xuICogcmVnYXJkbGVzcyBvZiBsZXQvdmFyIOKAlCBtdXRhYmlsaXR5IChyZWFzc2lnbm1lbnQgdHJhY2tpbmcpIGlzIHRoZVxuICogbG9jYWwtc2NvcGUgd2Fsa2VyJ3MgY29uY2VybiAoUGhhc2UgMiksIG5vdCB0aGUgbW9kdWxlIGdyYXBoJ3MuXG4gKi9cbmV4cG9ydCB0eXBlIE1vZHVsZUJpbmRpbmdLaW5kID1cblx0fCAnZnVuY3Rpb24nXG5cdHwgJ2NsYXNzJ1xuXHR8ICdjb25zdCdcblx0fCAndHlwZSdcblx0fCAndW5rbm93bic7XG5cbi8qKlxuICogSG93IGEgYmluZGluZyBlbnRlcnMgYSBtb2R1bGVcbiAqL1xuZXhwb3J0IHR5cGUgTW9kdWxlSW1wb3J0S2luZCA9XG5cdHwgJ25hbWVkJ1xuXHR8ICdkZWZhdWx0J1xuXHR8ICduYW1lc3BhY2UnXG5cdHwgJ3JlcXVpcmUnO1xuXG4vKipcbiAqIEEgZ2VuZXJpYyBtb2R1bGUtbGV2ZWwgYmluZGluZyAoZXhwb3J0LCBpbXBvcnQsIG9yIHJlLWV4cG9ydCkuXG4gKlxuICogYG5hbWVgIGlzIGFsd2F5cyB0aGUgbmFtZSB0aGlzIG1vZHVsZSBwcmVzZW50czogdGhlIGxvY2FsIGlkZW50aWZpZXIgZm9yXG4gKiBpbXBvcnRzLCB0aGUgZXhwb3J0ZWQgbmFtZSBmb3IgZXhwb3J0cy4gYGltcG9ydEFsaWFzYCBjYXJyaWVzIHRoZSBvcmlnaW5hbFxuICogbmFtZSBpbiB0aGUgc291cmNlIG1vZHVsZSB3aGVuIGl0IGRpZmZlcnMgKGBpbXBvcnQgeyBYIGFzIFkgfWAg4oaSIG5hbWUgJ1knLFxuICogaW1wb3J0QWxpYXMgJ1gnOyBgZXhwb3J0IHsgWCBhcyBZIH0gZnJvbSDigKZgIOKGkiBuYW1lICdZJywgaW1wb3J0QWxpYXMgJ1gnKS5cbiAqIEZvciBkZWZhdWx0IGltcG9ydHMgbmFtZSBpcyB0aGUgbG9jYWwgaWRlbnRpZmllciBhbmQgdGhlIHNvdXJjZSBsb29rdXAga2V5XG4gKiBpcyAnZGVmYXVsdCcgKGltcGxpZWQgYnkgaW1wb3J0S2luZCk7IGZvciBuYW1lc3BhY2UgaW1wb3J0cy9leHBvcnRzIG5hbWUgaXNcbiAqIHRoZSBuYW1lc3BhY2UgYWxpYXMgKCcqJyBmb3IgYmFyZSBgZXhwb3J0ICogZnJvbSDigKZgKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2R1bGVCaW5kaW5nIHtcblx0LyoqIE5hbWUgYXMgcHJlc2VudGVkIGluIHRoaXMgbW9kdWxlIChsb2NhbCBuYW1lIGZvciBpbXBvcnRzLCBleHBvcnRlZCBuYW1lIGZvciBleHBvcnRzKSAqL1xuXHRuYW1lOiBzdHJpbmc7XG5cdC8qKiBXaGF0IHRoZSBiaW5kaW5nIGlzOyBiYWNrZmlsbGVkIGZyb20gdGhlIG9yaWdpbiBtb2R1bGUgd2hlbiByZXNvbHZhYmxlICovXG5cdGtpbmQ6IE1vZHVsZUJpbmRpbmdLaW5kO1xuXHQvKipcblx0ICogUmVzb2x2ZWQgYWJzb2x1dGUgZmlsZSBwYXRoIG9mIHRoZSBzb3VyY2UgbW9kdWxlICh0aGUgbW9kdWxlIGl0c2VsZiBmb3Jcblx0ICogbG9jYWwgZGVjbGFyYXRpb25zOyB0aGUgcmF3IHNwZWNpZmllciB3aGVuIHJlc29sdXRpb24gZmFpbHMpXG5cdCAqL1xuXHRzb3VyY2VNb2R1bGU6IHN0cmluZztcblx0LyoqIEhvdyB0aGUgYmluZGluZyBlbnRlcnMgdGhlIG1vZHVsZSAoYWJzZW50IG9uIHBsYWluIGxvY2FsIGV4cG9ydHMpICovXG5cdGltcG9ydEtpbmQ/OiBNb2R1bGVJbXBvcnRLaW5kO1xuXHQvKiogT3JpZ2luYWwgbmFtZSBpbiB0aGUgc291cmNlIG1vZHVsZSB3aGVuIGFsaWFzZWQgKi9cblx0aW1wb3J0QWxpYXM/OiBzdHJpbmc7XG5cdC8qKiBUcnVlIGZvciBgZXhwb3J0IHsgWCB9IGZyb20gJy4veSdgIC8gYGV4cG9ydCAqIGZyb20gJy4veSdgIChiYXJyZWxzKSAqL1xuXHRpc1JlRXhwb3J0OiBib29sZWFuO1xuXHQvKipcblx0ICogVHJ1ZSB3aGVuIHRoZSBzcGVjaWZpZXIgcmVzb2x2ZWQgaW50byBub2RlX21vZHVsZXNcblx0ICogKHRzLnJlc29sdmVNb2R1bGVOYW1lJ3MgaXNFeHRlcm5hbExpYnJhcnlJbXBvcnQpLiBFeHRlcm5hbCBiaW5kaW5ncyBhcmVcblx0ICogcmVjb3JkZWQgZm9yIHJlZmVyZW5jZSBidXQgbmV2ZXIgZW50ZXIgYGRlcGVuZGVuY2llc2AgYW5kIGFyZSBuZXZlciB3YWxrZWQuXG5cdCAqIE5vZGUuanMgYnVpbHRpbnMgYXJlIG5vdCByZWNvcmRlZCBhcyBiaW5kaW5ncyBhdCBhbGwg4oCUIHNlZVxuXHQgKiBNb2R1bGVJbmZvLmJ1aWx0aW5TcGVjaWZpZXJzLlxuXHQgKi9cblx0ZXh0ZXJuYWw/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBlci1tb2R1bGUgcmVjb3JkIG9mIHRoZSBjcm9zcy1maWxlIGdyYXBoIChtb2R1bGVzLmpzb24pXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kdWxlSW5mbyB7XG5cdC8qKiBBYnNvbHV0ZSBmaWxlIHBhdGggKG1hcCBrZXkpICovXG5cdGZpbGVQYXRoOiBzdHJpbmc7XG5cdC8qKiBNbmVtb25pY2EgdHlwZSBmdWxsUGF0aHMgZGVmaW5lZCBpbiB0aGlzIG1vZHVsZSAqL1xuXHRkZWZpbmVkVHlwZXM6IHN0cmluZ1tdO1xuXHQvKiogRXZlcnl0aGluZyB0aGlzIG1vZHVsZSBleHBvcnRzIChsb2NhbCBkZWNsYXJhdGlvbnMgYW5kIHJlLWV4cG9ydHMpICovXG5cdGV4cG9ydGVkQmluZGluZ3M6IE1vZHVsZUJpbmRpbmdbXTtcblx0LyoqIEV2ZXJ5dGhpbmcgdGhpcyBtb2R1bGUgaW1wb3J0cyAocmUtZXhwb3J0cyBhcHBlYXIgaGVyZSB0b28sIG1hcmtlZCBpc1JlRXhwb3J0KSAqL1xuXHRpbXBvcnRlZEJpbmRpbmdzOiBNb2R1bGVCaW5kaW5nW107XG5cdC8qKiBBYnNvbHV0ZSBwYXRocyBvZiBhbmFseXplZCBwcm9qZWN0IG1vZHVsZXMgdGhpcyBtb2R1bGUgaW1wb3J0cyBmcm9tICovXG5cdGRlcGVuZGVuY2llczogc3RyaW5nW107XG5cdC8qKiBJbXBvcnQgc3BlY2lmaWVycyB0aGF0IG1vZHVsZSByZXNvbHV0aW9uIGNvdWxkIG5vdCByZXNvbHZlIChub2RlIGJ1aWx0aW5zIGV4Y2x1ZGVkIOKAlCBzZWUgYnVpbHRpblNwZWNpZmllcnMpICovXG5cdHVucmVzb2x2ZWRTcGVjaWZpZXJzOiBzdHJpbmdbXTtcblx0LyoqXG5cdCAqIE5vZGUuanMgYnVpbHRpbiBzcGVjaWZpZXJzIHRoaXMgbW9kdWxlIGltcG9ydHMgKCdwYXRoJywgJ25vZGU6ZnMnLCDigKYpLFxuXHQgKiBtYXRjaGVkIGFnYWluc3Qgbm9kZTptb2R1bGUncyBidWlsdGluTW9kdWxlcyBpbiBib3RoIGJhcmUgYW5kXG5cdCAqIGBub2RlOmAtcHJlZml4ZWQgZm9ybXMuIFJlY29yZGVkIGZvciBob25lc3R5IG9ubHk6IGJ1aWx0aW5zIHByb2R1Y2Ugbm9cblx0ICogYmluZGluZ3MsIG5ldmVyIGVudGVyIGBkZXBlbmRlbmNpZXNgL2B1bnJlc29sdmVkU3BlY2lmaWVyc2AsIGFuZCBuZXZlclxuXHQgKiBwcm9kdWNlIGVkZ2VzLlxuXHQgKi9cblx0YnVpbHRpblNwZWNpZmllcnM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEEgY3Jvc3MtbW9kdWxlIHVzYWdlIG9mIGEgbW5lbW9uaWNhIHR5cGU6IHVzYWdlTW9kdWxlIGltcG9ydHMgYSBiaW5kaW5nXG4gKiB3aG9zZSBvcmlnaW4gbW9kdWxlIGRlZmluZXMgdGhlIHR5cGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3Jvc3NNb2R1bGVVc2FnZSB7XG5cdC8qKiBNYXRjaGVkIG1uZW1vbmljYSB0eXBlIGZ1bGxQYXRoIChvciB0aGUgaW1wb3J0ZWQgbmFtZSB3aGVuIHVubWF0Y2hlZCkgKi9cblx0dHlwZVBhdGg6IHN0cmluZztcblx0LyoqIEFic29sdXRlIHBhdGggb2YgdGhlIG1vZHVsZSB3aGVyZSB0aGUgdHlwZSBpcyBkZWZpbmVkIChyZS1leHBvcnQgY2hhaW5zIGNoYXNlZCB0byB0aGUgb3JpZ2luKSAqL1xuXHRkZWZpbml0aW9uTW9kdWxlOiBzdHJpbmc7XG5cdC8qKiBBYnNvbHV0ZSBwYXRoIG9mIHRoZSBpbXBvcnRpbmcgbW9kdWxlICovXG5cdHVzYWdlTW9kdWxlOiBzdHJpbmc7XG5cdC8qKiBJbXBvcnQgc2l0ZTogZmlsZS50czpMaW5lOkNvbCAqL1xuXHR1c2FnZUxvY2F0aW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGZ1bGwgbW9kdWxlIGdyYXBoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kdWxlR3JhcGgge1xuXHQvKiogS2V5ZWQgYnkgYWJzb2x1dGUgZmlsZSBwYXRoICovXG5cdG1vZHVsZXM6IE1hcDxzdHJpbmcsIE1vZHVsZUluZm8+O1xuXHRlZGdlczogQ3Jvc3NNb2R1bGVVc2FnZVtdO1xuXHQvKipcblx0ICogQ2lyY3VsYXIgaW1wb3J0IGNoYWlucyAoZWFjaCBhbiBhcnJheSBvZiBhYnNvbHV0ZSBwYXRocykuIFJlY29yZGVkLCBub3Rcblx0ICogYW4gZXJyb3Ig4oCUIG1uZW1vbmljYSBzdHJpY3RDaGFpbjpmYWxzZSBwZXJtaXRzIG5vbi1saW5lYXIgY29uc3RydWN0aW9uXG5cdCAqL1xuXHRjeWNsZXM6IHN0cmluZ1tdW107XG59XG5cbi8qKlxuICogSlNPTiBvdXRwdXQgZm9yIG1vZHVsZXMuanNvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZHVsZXNKc29uIHtcblx0dmVyc2lvbjogc3RyaW5nO1xuXHRnZW5lcmF0ZWRBdDogc3RyaW5nO1xuXHRtb2R1bGVzOiBSZWNvcmQ8c3RyaW5nLCBNb2R1bGVJbmZvPjtcblx0ZWRnZXM6IENyb3NzTW9kdWxlVXNhZ2VbXTtcblx0Y3ljbGVzOiBzdHJpbmdbXVtdO1xufVxuXG4vKipcbiAqIFdoYXQgYSB0cmFja2VkIHNjb3BlIGlzLiBEZWNpc2lvbiA1IChyZXNvbHZlZCAyMDI2LTA5LTAzKTogZnVuY3Rpb24sXG4gKiBtZXRob2QsIGFuZCBhcnJvdyBzY29wZXMgT05MWSDigJQgbm8gYmxvY2sgc2NvcGVzLiAnbW9kdWxlJyBpcyB0aGUgc3ludGhldGljXG4gKiBwZXItZmlsZSByb290IHNjb3BlIHNvIG1vZHVsZS1sZXZlbCBpbnN0YW5jZSBjcmVhdGlvbnMgYXJlIGxhYmVsZWQsIG5vdFxuICogZHJvcHBlZCAod2Fsa2VyIHBsYW46IFwicmVjb3JkZWQgYXMgYSByb290ZWQgaW5zdGFuY2VcIikuXG4gKi9cbmV4cG9ydCB0eXBlIFNjb3BlS2luZCA9XG5cdHwgJ21vZHVsZSdcblx0fCAnZnVuY3Rpb24nXG5cdHwgJ21ldGhvZCdcblx0fCAnYXJyb3cnO1xuXG4vKipcbiAqIE9uZSB0cmFja2VkIHNjb3BlIChzY29wZXMuanNvbilcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY29wZUluZm8ge1xuXHQvKiogVW5pcXVlIGlkOiBtb2R1bGUgc2NvcGUgaXMgdGhlIGZpbGUgcGF0aDsgZnVuY3Rpb24gc2NvcGVzIGFyZSBmaWxlOmxpbmU6Y29sIG9mIHRoZSBzY29wZSBub2RlICovXG5cdHNjb3BlSWQ6IHN0cmluZztcblx0LyoqIERlY2lzaW9uIDggbGFiZWxpbmc6IGZ1bmN0aW9uL21ldGhvZCBuYW1lICgnQ2xhc3MubWV0aG9kJyBmb3IgbWV0aG9kcyksIGZpbGU6bGluZSBmb3IgYW5vbnltb3VzIGhvbGRlcnMgKi9cblx0bmFtZTogc3RyaW5nO1xuXHRraW5kOiBTY29wZUtpbmQ7XG5cdC8qKiBOZWFyZXN0IGVuY2xvc2luZyBzY29wZSAodW5kZWZpbmVkIG9uIG1vZHVsZSBzY29wZXMpICovXG5cdHBhcmVudFNjb3BlSWQ/OiBzdHJpbmc7XG5cdC8qKiBBYnNvbHV0ZSBmaWxlIHBhdGggKi9cblx0ZmlsZVBhdGg6IHN0cmluZztcblx0LyoqIFNjb3BlIHN0YXJ0OiBmaWxlLnRzOkxpbmU6Q29sIChtb2R1bGUgc2NvcGU6IGZpbGU6MToxKSAqL1xuXHRsb2NhdGlvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9uZSB0cmFja2VkIHZhcmlhYmxlIChzY29wZXMuanNvbilcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY29wZVZhcmlhYmxlIHtcblx0bmFtZTogc3RyaW5nO1xuXHQvKiogT3duaW5nIHNjb3BlICovXG5cdHNjb3BlSWQ6IHN0cmluZztcblx0LyoqIE1uZW1vbmljYSB0eXBlIGZ1bGxQYXRoIHdoZW4ga25vd24gKG5ldyBYKCkgb24gYSBrbm93biB0eXBlLCBuZXcgaW5zdC5TdWIoKSBjaGFpbmluZywgb3IgYSBrbm93biBhbm5vdGF0aW9uKSAqL1xuXHR0eXBlUGF0aD86IHN0cmluZztcblx0LyoqIENoZWFwIHRleHR1YWwgdHlwZTogYW5ub3RhdGlvbiB0ZXh0IG9yIHRpbnkgaW5pdGlhbGl6ZXIgY2xhc3NpZmljYXRpb24gKi9cblx0aW5mZXJyZWRUeXBlPzogc3RyaW5nO1xuXHQvKiogRGVjbGFyYXRpb24gc2l0ZTogZmlsZS50czpMaW5lOkNvbCAqL1xuXHRkZWNsYXJhdGlvbjogc3RyaW5nO1xuXHRpc1BhcmFtZXRlcjogYm9vbGVhbjtcblx0LyoqIGNvbnN0ID0gZmFsc2U7IGxldC92YXIgYW5kIHBhcmFtZXRlcnMgPSB0cnVlIChwYXJhbWV0ZXJzIGFyZSByZWFzc2lnbmFibGUpICovXG5cdGlzTXV0YWJsZTogYm9vbGVhbjtcblx0LyoqXG5cdCAqIFJlYXNzaWdubWVudCBzaXRlcyAoZmlsZS50czpMaW5lOkNvbCkgb2YgdGhpcyBiaW5kaW5nIOKAlCBmbG93LXRlcm1pbmF0aW9uXG5cdCAqIHBvaW50cyAoZGVjaXNpb24gNik6IHRoZSBQaGFzZSAzIHdhbGtlciBzdG9wcyBmb2xsb3dpbmcgdGhlIGJpbmRpbmcgdGhlcmVcblx0ICovXG5cdHJlYXNzaWdubWVudHM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSBmdWxsIGxvY2FsLXNjb3BlIGFuYWx5c2lzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NvcGVBbmFseXNpcyB7XG5cdC8qKiBLZXllZCBieSBzY29wZUlkICovXG5cdHNjb3BlczogTWFwPHN0cmluZywgU2NvcGVJbmZvPjtcblx0LyoqIEtleWVkIGJ5IGAke3Njb3BlSWR9IyR7bmFtZX1gICovXG5cdHZhcmlhYmxlczogTWFwPHN0cmluZywgU2NvcGVWYXJpYWJsZT47XG59XG5cbi8qKlxuICogSlNPTiBvdXRwdXQgZm9yIHNjb3Blcy5qc29uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NvcGVzSnNvbiB7XG5cdHZlcnNpb246IHN0cmluZztcblx0Z2VuZXJhdGVkQXQ6IHN0cmluZztcblx0c2NvcGVzOiBSZWNvcmQ8c3RyaW5nLCBTY29wZUluZm8+O1xuXHR2YXJpYWJsZXM6IFNjb3BlVmFyaWFibGVbXTtcbn1cblxuLyoqXG4gKiBPbmUgbm9kZSBvZiB0aGUgY3JlYXRpb24gZ3JhcGggKGluc3RydW1lbnRhdGlvbiB3YWxrZXIgcGxhbiwgUGhhc2UgMyk6XG4gKiBhIHNjb3BlIHRoYXQgY3JlYXRlcyBtbmVtb25pY2EgaW5zdGFuY2VzLCBvciBvbmUgc2l0dGluZyBvbiBhIGNhbGwgcGF0aFxuICogdG8gYSBjcmVhdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0aW9uR3JhcGhOb2RlIHtcblx0LyoqIExvY2FsU2NvcGVXYWxrZXIgc2NvcGVJZCAobW9kdWxlIHNjb3BlID0gZmlsZSBwYXRoOyBmdW5jdGlvbiBzY29wZXMgPSBmaWxlOmxpbmU6Y29sKSAqL1xuXHRzY29wZUlkOiBzdHJpbmc7XG5cdC8qKiBEZWNpc2lvbiA4IGxhYmVsOiBmdW5jdGlvbi9tZXRob2QgbmFtZSAoJ0NsYXNzLm1ldGhvZCcpLCBmaWxlOmxpbmUgZm9yIGFub255bW91cyBob2xkZXJzICovXG5cdG5hbWU6IHN0cmluZztcblx0a2luZDogU2NvcGVLaW5kO1xuXHQvKiogQWJzb2x1dGUgZmlsZSBwYXRoICovXG5cdGZpbGVQYXRoOiBzdHJpbmc7XG5cdC8qKiBTY29wZSBzdGFydDogZmlsZS50czpMaW5lOkNvbCAqL1xuXHRsb2NhdGlvbjogc3RyaW5nO1xuXHQvKiogVHJ1ZSB3aGVuIHRoZSB3YWxrIGZvdW5kIG5vIGNhbGxlcnMg4oCUIGFuIGFwcGxpY2F0aW9uIGVudHJ5IHBvaW50ICovXG5cdHN0YXJ0ZXI6IGJvb2xlYW47XG59XG5cbi8qKlxuICogT25lIGVkZ2Ugb2YgdGhlIGNyZWF0aW9uIGdyYXBoOiB0aGUgY2FsbGVyIHNjb3BlIGludm9rZXMgb3IgcmVmZXJlbmNlcyB0aGVcbiAqIGNhbGxlZSBzY29wZS4gRGlyZWN0aW9uIGlzIGluc2lkZS1vdXQ6IGNhbGxlciDihpIgY2FsbGVlLCB3aGVyZSB0aGUgY2FsbGVlIGlzXG4gKiBjbG9zZXIgdG8gdGhlIGNyZWF0aW9uIHNpdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRpb25HcmFwaEVkZ2Uge1xuXHQvKiogQ2FsbGluZyBzY29wZSdzIHNjb3BlSWQgKi9cblx0Y2FsbGVyOiBzdHJpbmc7XG5cdC8qKiBDYWxsZWQgKGhvbGRlcikgc2NvcGUncyBzY29wZUlkICovXG5cdGNhbGxlZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIGluc3RhbnRpYXRpb24gYW5jaG9yOiBvbmUgbW5lbW9uaWNhIGNyZWF0aW9uIHNpdGUgcGlubmVkIHRvIGl0cyBob2xkZXJcbiAqIHNjb3BlLlxuICpcbiAqIGB2YXJpYWJsZWAvYHRlcm1pbmF0ZWRBdGAgYXJlIGEgZG9jdW1lbnRlZCBoZXVyaXN0aWM6IHRoZSB2YXJpYWJsZSBkZWNsYXJlZFxuICogaW4gdGhlIGhvbGRlciBzY29wZSBvbiB0aGUgU0FNRSBsaW5lIGFzIHRoZSBjcmVhdGlvbiwgd2hvc2UgdHlwZVBhdGggKHdoZW5cbiAqIGtub3duKSBtYXRjaGVzIHRoZSBjcmVhdGVkIHR5cGUuIGB0ZXJtaW5hdGVkQXRgIGlzIHRoYXQgdmFyaWFibGUncyBmaXJzdFxuICogcmVhc3NpZ25tZW50IHNpdGUg4oCUIHRoZSBkZWNpc2lvbiA2IGZsb3ctdGVybWluYXRpb24gcG9pbnQgd2hlcmUgdGhlIHdhbGtlclxuICogc3RvcHMgZm9sbG93aW5nIHRoZSBiaW5kaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0aW9uQW5jaG9yIHtcblx0LyoqIENyZWF0aW9uIHNpdGU6IGZpbGUudHM6TGluZTpDb2wgKHRoZSB1c2FnZXMuanNvbiBsb2NhdGlvbikgKi9cblx0bG9jYXRpb246IHN0cmluZztcblx0LyoqIFNjb3BlIGhvbGRpbmcgdGhlIGNyZWF0aW9uIChzY29wZXMuanNvbiBzY29wZUlkKSAqL1xuXHRob2xkZXJTY29wZUlkOiBzdHJpbmc7XG5cdC8qKiBNbmVtb25pY2EgdHlwZSBmdWxsUGF0aCBiZWluZyBjcmVhdGVkICovXG5cdHR5cGVQYXRoOiBzdHJpbmc7XG5cdC8qKiBDb25zdHJ1Y3RvciBleHByZXNzaW9uIHRleHQgKCdUaGluZycsICd1c2VyLkFkbWluRW50aXR5JywgYSBsb29rdXAgYWxpYXMgbmFtZSkgKi9cblx0Y29uc3RydWN0b3JUZXh0Pzogc3RyaW5nO1xuXHQvKipcblx0ICogVHJ1ZSB3aGVuIHRoZSBob2xkZXIgaXMgdGhlIG1vZHVsZSBzY29wZSDigJQgYSByb290ZWQgaW5zdGFuY2UgKHBsYW46XG5cdCAqIGxlZ2l0aW1hdGUgcm9vdCBvciBkZXZlbG9wZXIgZXJyb3I7IGxhYmVsZWQsIG5vdCBwb2xpY2VkKVxuXHQgKi9cblx0cm9vdGVkPzogYm9vbGVhbjtcblx0LyoqIFZhcmlhYmxlIHRoZSBmcmVzaCBpbnN0YW5jZSB3YXMgYm91bmQgdG8gKHNhbWUtbGluZSBoZXVyaXN0aWMpICovXG5cdHZhcmlhYmxlPzogc3RyaW5nO1xuXHQvKiogRmlyc3QgcmVhc3NpZ25tZW50IHNpdGUgb2YgdGhhdCB2YXJpYWJsZTogZmlsZS50czpMaW5lOkNvbCAqL1xuXHR0ZXJtaW5hdGVkQXQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGNyZWF0aW9uIGdyYXBoOiBldmVyeXRoaW5nIHRoYXQgbGVhZHMgdG8gbW5lbW9uaWNhIGluc3RhbmNlcyBiZWluZ1xuICogY3JlYXRlZC4gRW1pdHRlZCBhcyB0aGUgYGNyZWF0aW9uR3JhcGhgIGtleSBvZiBpbnN0cnVtZW50YXRpb24uanNvbiB2Mi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGlvbkdyYXBoIHtcblx0bm9kZXM6IENyZWF0aW9uR3JhcGhOb2RlW107XG5cdGVkZ2VzOiBDcmVhdGlvbkdyYXBoRWRnZVtdO1xuXHRhbmNob3JzOiBDcmVhdGlvbkFuY2hvcltdO1xufVxuXG4vKipcbiAqIEpTT04gb3V0cHV0IGZvciBoaWVyYXJjaHkuanNvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhpZXJhcmNoeUpzb24ge1xuXHR2ZXJzaW9uOiBzdHJpbmc7XG5cdGdlbmVyYXRlZEF0OiBzdHJpbmc7XG5cdHJvb3RzOiBIaWVyYXJjaHlOb2RlW107XG59XG5cbi8qKlxuICogT25lIGVudHJ5IG9mIHRoZSBjb2xsZWN0aW9ucy5qc29uIG1hbmlmZXN0LiBUaGUgZGVmYXVsdCBjb2xsZWN0aW9uIGlzXG4gKiBlbWl0dGVkIGZpcnN0IHdoZW5ldmVyIGRlZmF1bHQtY29sbGVjdGlvbiB0eXBlcyBleGlzdDogaXQgaGFzIG5vIGNhbGxcbiAqIHNpdGUsIHNvIGBpZGAgYW5kIGBsb2NhdGlvbmAgc3RheSBudWxsICh1bnByZWZpeGVkIGZ1bGxQYXRocyBBUkUgaXRzXG4gKiBpZGVudGl0eSkgYW5kIGl0cyByZWdpc3RyeSBpbnRlcmZhY2UgaXMgdGhlIGdsb2JhbCBgVHlwZVJlZ2lzdHJ5YC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2xsZWN0aW9uTWFuaWZlc3RFbnRyeSB7XG5cdC8qKiBNaW50ZWQgaWQgdXNlZCBpbiBgY29sbGVjdGlvbklkOjpgIGZ1bGxQYXRoIHByZWZpeGVzOyBudWxsIGZvciB0aGUgZGVmYXVsdCBjb2xsZWN0aW9uICovXG5cdGlkOiBzdHJpbmcgfCBudWxsO1xuXHQvKiogVmFyaWFibGUgaG9sZGluZyB0aGUgY3JlYXRlVHlwZXNDb2xsZWN0aW9uKCkgcmVzdWx0ICgnZGVmYXVsdFR5cGVzJyBmb3IgdGhlIGRlZmF1bHQgY29sbGVjdGlvbikgKi9cblx0bmFtZTogc3RyaW5nO1xuXHQvKiogT3B0aW9uLUIgcmVnaXN0cnkgaW50ZXJmYWNlIG5hbWU7IGFic2VudCB3aGVuIHRoZSBjb2xsZWN0aW9uIGRlY2xhcmVzIG5vbmUgKi9cblx0cmVnaXN0cnlJbnRlcmZhY2U/OiBzdHJpbmc7XG5cdC8qKiBjcmVhdGVUeXBlc0NvbGxlY3Rpb24oKSBjYWxsIHNpdGUgKGZpbGU6bGluZTpjb2wpOyBudWxsIGZvciB0aGUgZGVmYXVsdCBjb2xsZWN0aW9uICovXG5cdGxvY2F0aW9uOiBzdHJpbmcgfCBudWxsO1xufVxuXG4vKipcbiAqIEpTT04gb3V0cHV0IGZvciBjb2xsZWN0aW9ucy5qc29uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdGlvbnNKc29uIHtcblx0dmVyc2lvbjogc3RyaW5nO1xuXHRnZW5lcmF0ZWRBdDogc3RyaW5nO1xuXHRjb2xsZWN0aW9uczogQ29sbGVjdGlvbk1hbmlmZXN0RW50cnlbXTtcbn1cblxuLyoqXG4gKiBTdHJ1Y3R1cmVkIGhpZXJhcmNoeSBub2RlIGZvciBtYWNoaW5lIGNvbnN1bXB0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhpZXJhcmNoeU5vZGUge1xuXHQvKiogVHlwZSBuYW1lIChlLmcuLCBcIkFkbWluVHlwZVwiKSAqL1xuXHRuYW1lOiBzdHJpbmc7XG5cdC8qKiBGdWxsIGRvdHRlZCBwYXRoIChlLmcuLCBcIlVzZXJUeXBlLkFkbWluVHlwZVwiKSAqL1xuXHRmdWxsUGF0aDogc3RyaW5nO1xuXHQvKiogTG9jYXRpb24gaW4gc291cmNlOiBmaWxlLnRzOkxpbmU6Q29sICovXG5cdGxvY2F0aW9uOiBzdHJpbmc7XG5cdC8qKiBDaGlsZCB0eXBlcyBpbiB0aGUgVHJpZSAqL1xuXHRjaGlsZHJlbjogSGllcmFyY2h5Tm9kZVtdO1xufVxuXG4vKipcbiAqIEEgZmF0YWwgcmVzb2x1dGlvbiBmYWlsdXJlOiBzYW1lLW5hbWVzcGFjZSBkdXBsaWNhdGUgbW5lbW9uaWNhXG4gKiBkZWZpbml0aW9ucywgb3IgYSBtbmVtb25pY2EtZ3JhcGggdHlwZSByZWZlcmVuY2UgdGhhdCBzdGF5cyBhbWJpZ3VvdXNcbiAqIGFmdGVyIHBhdGgtYXdhcmUgcmVzb2x1dGlvbiAob3IgcmVzb2x2ZXMgdG8gbm90aGluZykuIFRoZSBDTEkgcHJpbnRzXG4gKiBldmVyeSBsb2NhdGlvbiBhbmQgd3JpdGVzIG5vIC50YWN0aWNhIG91dHB1dCBhdCBhbGwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x1dGlvbkVycm9yIHtcblx0LyoqIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSBmYWlsdXJlICovXG5cdG1lc3NhZ2U6IHN0cmluZztcblx0LyoqIGV2ZXJ5IGludm9sdmVkIHNvdXJjZSBsb2NhdGlvbiwgYGZpbGU6bGluZTpjb2x1bW5gICovXG5cdGxvY2F0aW9uczogc3RyaW5nW107XG59XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mnemonica/tactica",
3
- "version": "0.4.2",
3
+ "version": "0.4.4",
4
4
  "description": "Type definition generator for Mnemonica — statically analyzes define() calls and emits .tactica/ types, registry, and metadata",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
@@ -11,6 +11,7 @@
11
11
  "lib/",
12
12
  "docs/",
13
13
  "README.md",
14
+ "SKILL.md",
14
15
  "LICENSE"
15
16
  ],
16
17
  "scripts": {
@@ -45,7 +46,7 @@
45
46
  "homepage": "https://github.com/mythographica/tactica#readme",
46
47
  "license": "MIT",
47
48
  "peerDependencies": {
48
- "mnemonica": "^1.3.3"
49
+ "mnemonica": "^1.3.5"
49
50
  },
50
51
  "devDependencies": {
51
52
  "@istanbuljs/nyc-config-typescript": "^1.0.2",
@@ -64,12 +65,17 @@
64
65
  "nyc": "^18.0.0",
65
66
  "ts-node": "^10.9.2",
66
67
  "typeomatica": "^0.3.63",
67
- "typescript": "^6.0.3"
68
+ "typescript": "^6.0.3",
69
+ "mnemonica": "^1.3.5"
68
70
  },
69
71
  "dependencies": {
70
72
  "@types/chokidar": "^2.1.7",
71
73
  "chokidar": "^3.6.0",
72
- "mnemonica": "^1.3.3",
73
74
  "typescript": "^6.0.3"
75
+ },
76
+ "peerDependenciesMeta": {
77
+ "mnemonica": {
78
+ "optional": true
79
+ }
74
80
  }
75
81
  }