@glimmer/compiler
Version:
342 lines (276 loc) • 32.7 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _util = require("@glimmer/util");
var _utils = require("./utils");
class WireFormatDebugger {
constructor([_statements, symbols, _hasEval, upvars]) {
this.upvars = upvars;
this.symbols = symbols;
}
format(program) {
let out = [];
for (let statement of program[0]) {
out.push(this.formatOpcode(statement));
}
return out;
}
formatOpcode(opcode) {
if (Array.isArray(opcode)) {
switch (opcode[0]) {
case 1
/* Append */
:
return ['append', this.formatOpcode(opcode[1])];
case 2
/* TrustingAppend */
:
return ['trusting-append', this.formatOpcode(opcode[1])];
case 6
/* Block */
:
return ['block', this.formatOpcode(opcode[1]), this.formatParams(opcode[2]), this.formatHash(opcode[3]), this.formatBlocks(opcode[4])];
case 40
/* InElement */
:
return ['in-element', opcode[1], this.formatOpcode(opcode[2]), opcode[3] ? this.formatOpcode(opcode[3]) : undefined];
case 10
/* OpenElement */
:
return ['open-element', (0, _utils.inflateTagName)(opcode[1])];
case 11
/* OpenElementWithSplat */
:
return ['open-element-with-splat', (0, _utils.inflateTagName)(opcode[1])];
case 13
/* CloseElement */
:
return ['close-element'];
case 12
/* FlushElement */
:
return ['flush-element'];
case 14
/* StaticAttr */
:
return ['static-attr', (0, _utils.inflateAttrName)(opcode[1]), opcode[2], opcode[3]];
case 24
/* StaticComponentAttr */
:
return ['static-component-attr', (0, _utils.inflateAttrName)(opcode[1]), opcode[2], opcode[3]];
case 15
/* DynamicAttr */
:
return ['dynamic-attr', (0, _utils.inflateAttrName)(opcode[1]), this.formatOpcode(opcode[2]), opcode[3]];
case 16
/* ComponentAttr */
:
return ['component-attr', (0, _utils.inflateAttrName)(opcode[1]), this.formatOpcode(opcode[2]), opcode[3]];
case 17
/* AttrSplat */
:
return ['attr-splat'];
case 18
/* Yield */
:
return ['yield', opcode[1], this.formatParams(opcode[2])];
case 20
/* DynamicArg */
:
return ['dynamic-arg', opcode[1], this.formatOpcode(opcode[2])];
case 21
/* StaticArg */
:
return ['static-arg', opcode[1], this.formatOpcode(opcode[2])];
case 22
/* TrustingDynamicAttr */
:
return ['trusting-dynamic-attr', (0, _utils.inflateAttrName)(opcode[1]), this.formatOpcode(opcode[2]), opcode[3]];
case 23
/* TrustingComponentAttr */
:
return ['trusting-component-attr', (0, _utils.inflateAttrName)(opcode[1]), this.formatOpcode(opcode[2]), opcode[3]];
case 26
/* Debugger */
:
return ['debugger', opcode[1]];
case 3
/* Comment */
:
return ['comment', opcode[1]];
case 4
/* Modifier */
:
return ['modifier', this.formatOpcode(opcode[1]), this.formatParams(opcode[2]), this.formatHash(opcode[3])];
case 8
/* Component */
:
return ['component', this.formatOpcode(opcode[1]), this.formatElementParams(opcode[2]), this.formatHash(opcode[3]), this.formatBlocks(opcode[4])];
case 48
/* HasBlock */
:
return ['has-block', this.formatOpcode(opcode[1])];
case 49
/* HasBlockParams */
:
return ['has-block-params', this.formatOpcode(opcode[1])];
case 50
/* Curry */
:
return ['curry', this.formatOpcode(opcode[1]), this.formatCurryType(opcode[2]), this.formatParams(opcode[3]), this.formatHash(opcode[4])];
case 27
/* Undefined */
:
return ['undefined'];
case 28
/* Call */
:
return ['call', this.formatOpcode(opcode[1]), this.formatParams(opcode[2]), this.formatHash(opcode[3])];
case 29
/* Concat */
:
return ['concat', this.formatParams(opcode[1])];
case 31
/* GetStrictFree */
:
return ['get-strict-free', this.upvars[opcode[1]], opcode[2]];
case 34
/* GetFreeAsComponentOrHelperHeadOrThisFallback */
:
return ['GetFreeAsComponentOrHelperHeadOrThisFallback', this.upvars[opcode[1]], opcode[2]];
case 35
/* GetFreeAsComponentOrHelperHead */
:
return ['GetFreeAsComponentOrHelperHead', this.upvars[opcode[1]], opcode[2]];
case 36
/* GetFreeAsHelperHeadOrThisFallback */
:
return ['GetFreeAsHelperHeadOrThisFallback', this.upvars[opcode[1]], opcode[2]];
case 99
/* GetFreeAsDeprecatedHelperHeadOrThisFallback */
:
return ['GetFreeAsDeprecatedHelperHeadOrThisFallback', this.upvars[opcode[1]]];
case 37
/* GetFreeAsHelperHead */
:
return ['GetFreeAsHelperHead', this.upvars[opcode[1]], opcode[2]];
case 39
/* GetFreeAsComponentHead */
:
return ['GetFreeAsComponentHead', this.upvars[opcode[1]], opcode[2]];
case 38
/* GetFreeAsModifierHead */
:
return ['GetFreeAsModifierHead', this.upvars[opcode[1]], opcode[2]];
case 30
/* GetSymbol */
:
{
if (opcode[1] === 0) {
return ['get-symbol', 'this', opcode[2]];
} else {
return ['get-symbol', this.symbols[opcode[1] - 1], opcode[2]];
}
}
case 32
/* GetTemplateSymbol */
:
{
return ['get-template-symbol', opcode[1], opcode[2]];
}
case 41
/* If */
:
return ['if', this.formatOpcode(opcode[1]), this.formatBlock(opcode[2]), opcode[3] ? this.formatBlock(opcode[3]) : null];
case 52
/* IfInline */
:
return ['if-inline'];
case 51
/* Not */
:
return ['not'];
case 42
/* Each */
:
return ['each', this.formatOpcode(opcode[1]), opcode[2] ? this.formatOpcode(opcode[2]) : null, this.formatBlock(opcode[3]), opcode[4] ? this.formatBlock(opcode[4]) : null];
case 43
/* With */
:
return ['with', this.formatOpcode(opcode[1]), this.formatBlock(opcode[2]), opcode[3] ? this.formatBlock(opcode[3]) : null];
case 44
/* Let */
:
return ['let', this.formatParams(opcode[1]), this.formatBlock(opcode[2])];
case 54
/* Log */
:
return ['log', this.formatParams(opcode[1])];
case 45
/* WithDynamicVars */
:
return ['-with-dynamic-vars', this.formatHash(opcode[1]), this.formatBlock(opcode[2])];
case 53
/* GetDynamicVar */
:
return ['-get-dynamic-vars', this.formatOpcode(opcode[1])];
case 46
/* InvokeComponent */
:
return ['component', this.formatOpcode(opcode[1]), this.formatParams(opcode[2]), this.formatHash(opcode[3]), this.formatBlocks(opcode[4])];
}
} else {
return opcode;
}
}
formatCurryType(value) {
switch (value) {
case 0
/* Component */
:
return 'component';
case 1
/* Helper */
:
return 'helper';
case 2
/* Modifier */
:
return 'modifier';
default:
throw (0, _util.exhausted)(value);
}
}
formatElementParams(opcodes) {
if (opcodes === null) return null;
return opcodes.map(o => this.formatOpcode(o));
}
formatParams(opcodes) {
if (opcodes === null) return null;
return opcodes.map(o => this.formatOpcode(o));
}
formatHash(hash) {
if (hash === null) return null;
return hash[0].reduce((accum, key, index) => {
accum[key] = this.formatOpcode(hash[1][index]);
return accum;
}, (0, _util.dict)());
}
formatBlocks(blocks) {
if (blocks === null) return null;
return blocks[0].reduce((accum, key, index) => {
accum[key] = this.formatBlock(blocks[1][index]);
return accum;
}, (0, _util.dict)());
}
formatBlock(block) {
return {
statements: block[0].map(s => this.formatOpcode(s)),
parameters: block[1]
};
}
}
exports.default = WireFormatDebugger;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi93aXJlLWZvcm1hdC1kZWJ1Zy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBUUE7O0FBRUE7O0FBRWMsTUFBQSxrQkFBQSxDQUF5QjtBQUlyQyxFQUFBLFdBQUEsQ0FBWSxDQUFBLFdBQUEsRUFBQSxPQUFBLEVBQUEsUUFBQSxFQUFaLE1BQVksQ0FBWixFQUE2RTtBQUMzRSxTQUFBLE1BQUEsR0FBQSxNQUFBO0FBQ0EsU0FBQSxPQUFBLEdBQUEsT0FBQTtBQUNEOztBQUVELEVBQUEsTUFBTSxDQUFBLE9BQUEsRUFBaUM7QUFDckMsUUFBSSxHQUFHLEdBQVAsRUFBQTs7QUFFQSxTQUFLLElBQUwsU0FBQSxJQUFzQixPQUFPLENBQTdCLENBQTZCLENBQTdCLEVBQWtDO0FBQ2hDLE1BQUEsR0FBRyxDQUFILElBQUEsQ0FBUyxLQUFBLFlBQUEsQ0FBVCxTQUFTLENBQVQ7QUFDRDs7QUFFRCxXQUFBLEdBQUE7QUFDRDs7QUFFRCxFQUFBLFlBQVksQ0FBQSxNQUFBLEVBQTBCO0FBQ3BDLFFBQUksS0FBSyxDQUFMLE9BQUEsQ0FBSixNQUFJLENBQUosRUFBMkI7QUFDekIsY0FBUSxNQUFNLENBQWQsQ0FBYyxDQUFkO0FBQ0UsYUFBQTtBQUFBO0FBQUE7QUFDRSxpQkFBTyxDQUFBLFFBQUEsRUFBVyxLQUFBLFlBQUEsQ0FBa0IsTUFBTSxDQUExQyxDQUEwQyxDQUF4QixDQUFYLENBQVA7O0FBQ0YsYUFBQTtBQUFBO0FBQUE7QUFDRSxpQkFBTyxDQUFBLGlCQUFBLEVBQW9CLEtBQUEsWUFBQSxDQUFrQixNQUFNLENBQW5ELENBQW1ELENBQXhCLENBQXBCLENBQVA7O0FBRUYsYUFBQTtBQUFBO0FBQUE7QUFDRSxpQkFBTyxDQUFBLE9BQUEsRUFFTCxLQUFBLFlBQUEsQ0FBa0IsTUFBTSxDQUZuQixDQUVtQixDQUF4QixDQUZLLEVBR0wsS0FBQSxZQUFBLENBQWtCLE1BQU0sQ0FIbkIsQ0FHbUIsQ0FBeEIsQ0FISyxFQUlMLEtBQUEsVUFBQSxDQUFnQixNQUFNLENBSmpCLENBSWlCLENBQXRCLENBSkssRUFLTCxLQUFBLFlBQUEsQ0FBa0IsTUFBTSxDQUwxQixDQUswQixDQUF4QixDQUxLLENBQVA7O0FBUUYsYUFBQTtBQUFBO0FBQUE7QUFDRSxpQkFBTyxDQUFBLFlBQUEsRUFFTCxNQUFNLENBRkQsQ0FFQyxDQUZELEVBR0wsS0FBQSxZQUFBLENBQWtCLE1BQU0sQ0FIbkIsQ0FHbUIsQ0FBeEIsQ0FISyxFQUlMLE1BQU0sQ0FBTixDQUFNLENBQU4sR0FBWSxLQUFBLFlBQUEsQ0FBa0IsTUFBTSxDQUFwQyxDQUFvQyxDQUF4QixDQUFaLEdBSkYsU0FBTyxDQUFQOztBQU9GLGFBQUE7QUFBQTtBQUFBO0FBQ0UsaUJBQU8sQ0FBQSxjQUFBLEVBQWlCLDJCQUFlLE1BQU0sQ0FBN0MsQ0FBNkMsQ0FBckIsQ0FBakIsQ0FBUDs7QUFFRixhQUFBO0FBQUE7QUFBQTtBQUNFLGlCQUFPLENBQUEseUJBQUEsRUFBNEIsMkJBQWUsTUFBTSxDQUF4RCxDQUF3RCxDQUFyQixDQUE1QixDQUFQOztBQUVGLGFBQUE7QUFBQTtBQUFBO0FBQ0UsaUJBQU8sQ0FBUCxlQUFPLENBQVA7O0FBRUYsYUFBQTtBQUFBO0FBQUE7QUFDRSxpQkFBTyxDQUFQLGVBQU8sQ0FBUDs7QUFFRixhQUFBO0FBQUE7QUFBQTtBQUNFLGlCQUFPLENBQUEsYUFBQSxFQUFnQiw0QkFBZ0IsTUFBTSxDQUF0QyxDQUFzQyxDQUF0QixDQUFoQixFQUE0QyxNQUFNLENBQWxELENBQWtELENBQWxELEVBQXVELE1BQU0sQ0FBcEUsQ0FBb0UsQ0FBN0QsQ0FBUDs7QUFFRixhQUFBO0FBQUE7QUFBQTtBQUNFLGlCQUFPLENBQUEsdUJBQUEsRUFBMEIsNEJBQWdCLE1BQU0sQ0FBaEQsQ0FBZ0QsQ0FBdEIsQ0FBMUIsRUFBc0QsTUFBTSxDQUE1RCxDQUE0RCxDQUE1RCxFQUFpRSxNQUFNLENBQTlFLENBQThFLENBQXZFLENBQVA7O0FBRUYsYUFBQTtBQUFBO0FBQUE7QUFDRSxpQkFBTyxDQUFBLGNBQUEsRUFFTCw0QkFBZ0IsTUFBTSxDQUZqQixDQUVpQixDQUF0QixDQUZLLEVBR0wsS0FBQSxZQUFBLENBQWtCLE1BQU0sQ0FIbkIsQ0FHbUIsQ0FBeEIsQ0FISyxFQUlMLE1BQU0sQ0FKUixDQUlRLENBSkQsQ0FBUDs7QUFPRixhQUFBO0FBQUE7QUFBQTtBQUNFLGlCQUFPLENBQUEsZ0JBQUEsRUFFTCw0QkFBZ0IsTUFBTSxDQUZqQixDQUVpQixDQUF0QixDQUZLLEVBR0wsS0FBQSxZQUFBLENBQWtCLE1BQU0sQ0FIbkIsQ0FHbUIsQ0FBeEIsQ0FISyxFQUlMLE1BQU0sQ0FKUixDQUlRLENBSkQsQ0FBUDs7QUFPRixhQUFBO0FBQUE7QUFBQTtBQUNFLGlCQUFPLENBQVAsWUFBTyxDQUFQOztBQUVGLGFBQUE7QUFBQTtBQUFBO0FBQ0UsaUJBQU8sQ0FBQSxPQUFBLEVBQVUsTUFBTSxDQUFoQixDQUFnQixDQUFoQixFQUFxQixLQUFBLFlBQUEsQ0FBa0IsTUFBTSxDQUFwRCxDQUFvRCxDQUF4QixDQUFyQixDQUFQOztBQUVGLGFBQUE7QUFBQTtBQUFBO0FBQ0UsaUJBQU8sQ0FBQSxhQUFBLEVBQWdCLE1BQU0sQ0FBdEIsQ0FBc0IsQ0FBdEIsRUFBMkIsS0FBQSxZQUFBLENBQWtCLE1BQU0sQ0FBMUQsQ0FBMEQsQ0FBeEIsQ0FBM0IsQ0FBUDs7QUFFRixhQUFBO0FBQUE7QUFBQTtBQUNFLGlCQUFPLENBQUEsWUFBQSxFQUFlLE1BQU0sQ0FBckIsQ0FBcUIsQ0FBckIsRUFBMEIsS0FBQSxZQUFBLENBQWtCLE1BQU0sQ0FBekQsQ0FBeUQsQ0FBeEIsQ0FBMUIsQ0FBUDs7QUFFRixhQUFBO0FBQUE7QUFBQTtBQUNFLGlCQUFPLENBQUEsdUJBQUEsRUFFTCw0QkFBZ0IsTUFBTSxDQUZqQixDQUVpQixDQUF0QixDQUZLLEVBR0wsS0FBQSxZQUFBLENBQWtCLE1BQU0sQ0FIbkIsQ0FHbUIsQ0FBeEIsQ0FISyxFQUlMLE1BQU0sQ0FKUixDQUlRLENBSkQsQ0FBUDs7QUFPRixhQUFBO0FBQUE7QUFBQTtBQUNFLGlCQUFPLENBQUEseUJBQUEsRUFFTCw0QkFBZ0IsTUFBTSxDQUZqQixDQUVpQixDQUF0QixDQUZLLEVBR0wsS0FBQSxZQUFBLENBQWtCLE1BQU0sQ0FIbkIsQ0FHbUIsQ0FBeEIsQ0FISyxFQUlMLE1BQU0sQ0FKUixDQUlRLENBSkQsQ0FBUDs7QUFPRixhQUFBO0FBQUE7QUFBQTtBQUNFLGlCQUFPLENBQUEsVUFBQSxFQUFhLE1BQU0sQ0FBMUIsQ0FBMEIsQ0FBbkIsQ0FBUDs7QUFFRixhQUFBO0FBQUE7QUFBQTtBQUNFLGlCQUFPLENBQUEsU0FBQSxFQUFZLE1BQU0sQ0FBekIsQ0FBeUIsQ0FBbEIsQ0FBUDs7QUFFRixhQUFBO0FBQUE7QUFBQTtBQUNFLGlCQUFPLENBQUEsVUFBQSxFQUVMLEtBQUEsWUFBQSxDQUFrQixNQUFNLENBRm5CLENBRW1CLENBQXhCLENBRkssRUFHTCxLQUFBLFlBQUEsQ0FBa0IsTUFBTSxDQUhuQixDQUdtQixDQUF4QixDQUhLLEVBSUwsS0FBQSxVQUFBLENBQWdCLE1BQU0sQ0FKeEIsQ0FJd0IsQ0FBdEIsQ0FKSyxDQUFQOztBQU9GLGFBQUE7QUFBQTtBQUFBO0FBQ0UsaUJBQU8sQ0FBQSxXQUFBLEVBRUwsS0FBQSxZQUFBLENBQWtCLE1BQU0sQ0FGbkIsQ0FFbUIsQ0FBeEIsQ0FGSyxFQUdMLEtBQUEsbUJBQUEsQ0FBeUIsTUFBTSxDQUgxQixDQUcwQixDQUEvQixDQUhLLEVBSUwsS0FBQSxVQUFBLENBQWdCLE1BQU0sQ0FKakIsQ0FJaUIsQ0FBdEIsQ0FKSyxFQUtMLEtBQUEsWUFBQSxDQUFrQixNQUFNLENBTDFCLENBSzBCLENBQXhCLENBTEssQ0FBUDs7QUFRRixhQUFBO0FBQUE7QUFBQTtBQUNFLGlCQUFPLENBQUEsV0FBQSxFQUFjLEtBQUEsWUFBQSxDQUFrQixNQUFNLENBQTdDLENBQTZDLENBQXhCLENBQWQsQ0FBUDs7QUFFRixhQUFBO0FBQUE7QUFBQTtBQUNFLGlCQUFPLENBQUEsa0JBQUEsRUFBcUIsS0FBQSxZQUFBLENBQWtCLE1BQU0sQ0FBcEQsQ0FBb0QsQ0FBeEIsQ0FBckIsQ0FBUDs7QUFFRixhQUFBO0FBQUE7QUFBQTtBQUNFLGlCQUFPLENBQUEsT0FBQSxFQUVMLEtBQUEsWUFBQSxDQUFrQixNQUFNLENBRm5CLENBRW1CLENBQXhCLENBRkssRUFHTCxLQUFBLGVBQUEsQ0FBcUIsTUFBTSxDQUh0QixDQUdzQixDQUEzQixDQUhLLEVBSUwsS0FBQSxZQUFBLENBQWtCLE1BQU0sQ0FKbkIsQ0FJbUIsQ0FBeEIsQ0FKSyxFQUtMLEtBQUEsVUFBQSxDQUFnQixNQUFNLENBTHhCLENBS3dCLENBQXRCLENBTEssQ0FBUDs7QUFRRixhQUFBO0FBQUE7QUFBQTtBQUNFLGlCQUFPLENBQVAsV0FBTyxDQUFQOztBQUVGLGFBQUE7QUFBQTtBQUFBO0FBQ0UsaUJBQU8sQ0FBQSxNQUFBLEVBRUwsS0FBQSxZQUFBLENBQWtCLE1BQU0sQ0FGbkIsQ0FFbUIsQ0FBeEIsQ0FGSyxFQUdMLEtBQUEsWUFBQSxDQUFrQixNQUFNLENBSG5CLENBR21CLENBQXhCLENBSEssRUFJTCxLQUFBLFVBQUEsQ0FBZ0IsTUFBTSxDQUp4QixDQUl3QixDQUF0QixDQUpLLENBQVA7O0FBT0YsYUFBQTtBQUFBO0FBQUE7QUFDRSxpQkFBTyxDQUFBLFFBQUEsRUFBVyxLQUFBLFlBQUEsQ0FBa0IsTUFBTSxDQUExQyxDQUEwQyxDQUF4QixDQUFYLENBQVA7O0FBRUYsYUFBQTtBQUFBO0FBQUE7QUFDRSxpQkFBTyxDQUFBLGlCQUFBLEVBQW9CLEtBQUEsTUFBQSxDQUFZLE1BQU0sQ0FBdEMsQ0FBc0MsQ0FBbEIsQ0FBcEIsRUFBNEMsTUFBTSxDQUF6RCxDQUF5RCxDQUFsRCxDQUFQOztBQUVGLGFBQUE7QUFBQTtBQUFBO0FBQ0UsaUJBQU8sQ0FBQSw4Q0FBQSxFQUVMLEtBQUEsTUFBQSxDQUFZLE1BQU0sQ0FGYixDQUVhLENBQWxCLENBRkssRUFHTCxNQUFNLENBSFIsQ0FHUSxDQUhELENBQVA7O0FBTUYsYUFBQTtBQUFBO0FBQUE7QUFDRSxpQkFBTyxDQUFBLGdDQUFBLEVBQW1DLEtBQUEsTUFBQSxDQUFZLE1BQU0sQ0FBckQsQ0FBcUQsQ0FBbEIsQ0FBbkMsRUFBMkQsTUFBTSxDQUF4RSxDQUF3RSxDQUFqRSxDQUFQOztBQUVGLGFBQUE7QUFBQTtBQUFBO0FBQ0UsaUJBQU8sQ0FBQSxtQ0FBQSxFQUFzQyxLQUFBLE1BQUEsQ0FBWSxNQUFNLENBQXhELENBQXdELENBQWxCLENBQXRDLEVBQThELE1BQU0sQ0FBM0UsQ0FBMkUsQ0FBcEUsQ0FBUDs7QUFFRixhQUFBO0FBQUE7QUFBQTtBQUNFLGlCQUFPLENBQUEsNkNBQUEsRUFBZ0QsS0FBQSxNQUFBLENBQVksTUFBTSxDQUF6RSxDQUF5RSxDQUFsQixDQUFoRCxDQUFQOztBQUVGLGFBQUE7QUFBQTtBQUFBO0FBQ0UsaUJBQU8sQ0FBQSxxQkFBQSxFQUF3QixLQUFBLE1BQUEsQ0FBWSxNQUFNLENBQTFDLENBQTBDLENBQWxCLENBQXhCLEVBQWdELE1BQU0sQ0FBN0QsQ0FBNkQsQ0FBdEQsQ0FBUDs7QUFFRixhQUFBO0FBQUE7QUFBQTtBQUNFLGlCQUFPLENBQUEsd0JBQUEsRUFBMkIsS0FBQSxNQUFBLENBQVksTUFBTSxDQUE3QyxDQUE2QyxDQUFsQixDQUEzQixFQUFtRCxNQUFNLENBQWhFLENBQWdFLENBQXpELENBQVA7O0FBRUYsYUFBQTtBQUFBO0FBQUE7QUFDRSxpQkFBTyxDQUFBLHVCQUFBLEVBQTBCLEtBQUEsTUFBQSxDQUFZLE1BQU0sQ0FBNUMsQ0FBNEMsQ0FBbEIsQ0FBMUIsRUFBa0QsTUFBTSxDQUEvRCxDQUErRCxDQUF4RCxDQUFQOztBQUVGLGFBQUE7QUFBQTtBQUFBO0FBQW1CO0FBQ2pCLGdCQUFJLE1BQU0sQ0FBTixDQUFNLENBQU4sS0FBSixDQUFBLEVBQXFCO0FBQ25CLHFCQUFPLENBQUEsWUFBQSxFQUFBLE1BQUEsRUFBdUIsTUFBTSxDQUFwQyxDQUFvQyxDQUE3QixDQUFQO0FBREYsYUFBQSxNQUVPO0FBQ0wscUJBQU8sQ0FBQSxZQUFBLEVBQWUsS0FBQSxPQUFBLENBQWEsTUFBTSxDQUFOLENBQU0sQ0FBTixHQUE1QixDQUFlLENBQWYsRUFBNEMsTUFBTSxDQUF6RCxDQUF5RCxDQUFsRCxDQUFQO0FBQ0Q7QUFDRjs7QUFFRCxhQUFBO0FBQUE7QUFBQTtBQUEyQjtBQUN6QixtQkFBTyxDQUFBLHFCQUFBLEVBQXdCLE1BQU0sQ0FBOUIsQ0FBOEIsQ0FBOUIsRUFBbUMsTUFBTSxDQUFoRCxDQUFnRCxDQUF6QyxDQUFQO0FBQ0Q7O0FBRUQsYUFBQTtBQUFBO0FBQUE7QUFDRSxpQkFBTyxDQUFBLElBQUEsRUFFTCxLQUFBLFlBQUEsQ0FBa0IsTUFBTSxDQUZuQixDQUVtQixDQUF4QixDQUZLLEVBR0wsS0FBQSxXQUFBLENBQWlCLE1BQU0sQ0FIbEIsQ0FHa0IsQ0FBdkIsQ0FISyxFQUlMLE1BQU0sQ0FBTixDQUFNLENBQU4sR0FBWSxLQUFBLFdBQUEsQ0FBaUIsTUFBTSxDQUFuQyxDQUFtQyxDQUF2QixDQUFaLEdBSkYsSUFBTyxDQUFQOztBQU9GLGFBQUE7QUFBQTtBQUFBO0FBQ0UsaUJBQU8sQ0FBUCxXQUFPLENBQVA7O0FBRUYsYUFBQTtBQUFBO0FBQUE7QUFDRSxpQkFBTyxDQUFQLEtBQU8sQ0FBUDs7QUFFRixhQUFBO0FBQUE7QUFBQTtBQUNFLGlCQUFPLENBQUEsTUFBQSxFQUVMLEtBQUEsWUFBQSxDQUFrQixNQUFNLENBRm5CLENBRW1CLENBQXhCLENBRkssRUFHTCxNQUFNLENBQU4sQ0FBTSxDQUFOLEdBQVksS0FBQSxZQUFBLENBQWtCLE1BQU0sQ0FBcEMsQ0FBb0MsQ0FBeEIsQ0FBWixHQUhLLElBQUEsRUFJTCxLQUFBLFdBQUEsQ0FBaUIsTUFBTSxDQUpsQixDQUlrQixDQUF2QixDQUpLLEVBS0wsTUFBTSxDQUFOLENBQU0sQ0FBTixHQUFZLEtBQUEsV0FBQSxDQUFpQixNQUFNLENBQW5DLENBQW1DLENBQXZCLENBQVosR0FMRixJQUFPLENBQVA7O0FBUUYsYUFBQTtBQUFBO0FBQUE7QUFDRSxpQkFBTyxDQUFBLE1BQUEsRUFFTCxLQUFBLFlBQUEsQ0FBa0IsTUFBTSxDQUZuQixDQUVtQixDQUF4QixDQUZLLEVBR0wsS0FBQSxXQUFBLENBQWlCLE1BQU0sQ0FIbEIsQ0FHa0IsQ0FBdkIsQ0FISyxFQUlMLE1BQU0sQ0FBTixDQUFNLENBQU4sR0FBWSxLQUFBLFdBQUEsQ0FBaUIsTUFBTSxDQUFuQyxDQUFtQyxDQUF2QixDQUFaLEdBSkYsSUFBTyxDQUFQOztBQU9GLGFBQUE7QUFBQTtBQUFBO0FBQ0UsaUJBQU8sQ0FBQSxLQUFBLEVBQVEsS0FBQSxZQUFBLENBQWtCLE1BQU0sQ0FBaEMsQ0FBZ0MsQ0FBeEIsQ0FBUixFQUFzQyxLQUFBLFdBQUEsQ0FBaUIsTUFBTSxDQUFwRSxDQUFvRSxDQUF2QixDQUF0QyxDQUFQOztBQUVGLGFBQUE7QUFBQTtBQUFBO0FBQ0UsaUJBQU8sQ0FBQSxLQUFBLEVBQVEsS0FBQSxZQUFBLENBQWtCLE1BQU0sQ0FBdkMsQ0FBdUMsQ0FBeEIsQ0FBUixDQUFQOztBQUVGLGFBQUE7QUFBQTtBQUFBO0FBQ0UsaUJBQU8sQ0FBQSxvQkFBQSxFQUF1QixLQUFBLFVBQUEsQ0FBZ0IsTUFBTSxDQUE3QyxDQUE2QyxDQUF0QixDQUF2QixFQUFtRCxLQUFBLFdBQUEsQ0FBaUIsTUFBTSxDQUFqRixDQUFpRixDQUF2QixDQUFuRCxDQUFQOztBQUVGLGFBQUE7QUFBQTtBQUFBO0FBQ0UsaUJBQU8sQ0FBQSxtQkFBQSxFQUFzQixLQUFBLFlBQUEsQ0FBa0IsTUFBTSxDQUFyRCxDQUFxRCxDQUF4QixDQUF0QixDQUFQOztBQUVGLGFBQUE7QUFBQTtBQUFBO0FBQ0UsaUJBQU8sQ0FBQSxXQUFBLEVBRUwsS0FBQSxZQUFBLENBQWtCLE1BQU0sQ0FGbkIsQ0FFbUIsQ0FBeEIsQ0FGSyxFQUdMLEtBQUEsWUFBQSxDQUFrQixNQUFNLENBSG5CLENBR21CLENBQXhCLENBSEssRUFJTCxLQUFBLFVBQUEsQ0FBZ0IsTUFBTSxDQUpqQixDQUlpQixDQUF0QixDQUpLLEVBS0wsS0FBQSxZQUFBLENBQWtCLE1BQU0sQ0FMMUIsQ0FLMEIsQ0FBeEIsQ0FMSyxDQUFQO0FBN05KO0FBREYsS0FBQSxNQXNPTztBQUNMLGFBQUEsTUFBQTtBQUNEO0FBQ0Y7O0FBRU8sRUFBQSxlQUFlLENBQUEsS0FBQSxFQUFtQjtBQUN4QyxZQUFBLEtBQUE7QUFDRSxXQUFBO0FBQUE7QUFBQTtBQUNFLGVBQUEsV0FBQTs7QUFDRixXQUFBO0FBQUE7QUFBQTtBQUNFLGVBQUEsUUFBQTs7QUFDRixXQUFBO0FBQUE7QUFBQTtBQUNFLGVBQUEsVUFBQTs7QUFDRjtBQUNFLGNBQU0scUJBQU4sS0FBTSxDQUFOO0FBUko7QUFVRDs7QUFFTyxFQUFBLG1CQUFtQixDQUFBLE9BQUEsRUFBK0M7QUFDeEUsUUFBSSxPQUFPLEtBQVgsSUFBQSxFQUFzQixPQUFBLElBQUE7QUFDdEIsV0FBTyxPQUFPLENBQVAsR0FBQSxDQUFhLENBQUQsSUFBTyxLQUFBLFlBQUEsQ0FBMUIsQ0FBMEIsQ0FBbkIsQ0FBUDtBQUNEOztBQUVPLEVBQUEsWUFBWSxDQUFBLE9BQUEsRUFBeUM7QUFDM0QsUUFBSSxPQUFPLEtBQVgsSUFBQSxFQUFzQixPQUFBLElBQUE7QUFDdEIsV0FBTyxPQUFPLENBQVAsR0FBQSxDQUFhLENBQUQsSUFBTyxLQUFBLFlBQUEsQ0FBMUIsQ0FBMEIsQ0FBbkIsQ0FBUDtBQUNEOztBQUVPLEVBQUEsVUFBVSxDQUFBLElBQUEsRUFBMkI7QUFDM0MsUUFBSSxJQUFJLEtBQVIsSUFBQSxFQUFtQixPQUFBLElBQUE7QUFFbkIsV0FBTyxJQUFJLENBQUosQ0FBSSxDQUFKLENBQUEsTUFBQSxDQUFlLENBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxLQUFBLEtBQXNCO0FBQzFDLE1BQUEsS0FBSyxDQUFMLEdBQUssQ0FBTCxHQUFhLEtBQUEsWUFBQSxDQUFrQixJQUFJLENBQUosQ0FBSSxDQUFKLENBQS9CLEtBQStCLENBQWxCLENBQWI7QUFDQSxhQUFBLEtBQUE7QUFGSyxLQUFBLEVBQVAsaUJBQU8sQ0FBUDtBQUlEOztBQUVPLEVBQUEsWUFBWSxDQUFBLE1BQUEsRUFBK0I7QUFDakQsUUFBSSxNQUFNLEtBQVYsSUFBQSxFQUFxQixPQUFBLElBQUE7QUFFckIsV0FBTyxNQUFNLENBQU4sQ0FBTSxDQUFOLENBQUEsTUFBQSxDQUFpQixDQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEsS0FBQSxLQUFzQjtBQUM1QyxNQUFBLEtBQUssQ0FBTCxHQUFLLENBQUwsR0FBYSxLQUFBLFdBQUEsQ0FBaUIsTUFBTSxDQUFOLENBQU0sQ0FBTixDQUE5QixLQUE4QixDQUFqQixDQUFiO0FBQ0EsYUFBQSxLQUFBO0FBRkssS0FBQSxFQUFQLGlCQUFPLENBQVA7QUFJRDs7QUFFTyxFQUFBLFdBQVcsQ0FBQSxLQUFBLEVBQTZCO0FBQzlDLFdBQU87QUFDTCxNQUFBLFVBQVUsRUFBRSxLQUFLLENBQUwsQ0FBSyxDQUFMLENBQUEsR0FBQSxDQUFjLENBQUQsSUFBTyxLQUFBLFlBQUEsQ0FEM0IsQ0FDMkIsQ0FBcEIsQ0FEUDtBQUVMLE1BQUEsVUFBVSxFQUFFLEtBQUssQ0FBQSxDQUFBO0FBRlosS0FBUDtBQUlEOztBQTdTb0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDdXJyaWVkVHlwZSxcbiAgT3B0aW9uLFxuICBTZXJpYWxpemVkSW5saW5lQmxvY2ssXG4gIFNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrLFxuICBTZXhwT3Bjb2RlcyBhcyBPcCxcbiAgV2lyZUZvcm1hdCxcbn0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBkaWN0LCBleGhhdXN0ZWQgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcblxuaW1wb3J0IHsgaW5mbGF0ZUF0dHJOYW1lLCBpbmZsYXRlVGFnTmFtZSB9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaXJlRm9ybWF0RGVidWdnZXIge1xuICBwcml2YXRlIHVwdmFyczogc3RyaW5nW107XG4gIHByaXZhdGUgc3ltYm9sczogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IoW19zdGF0ZW1lbnRzLCBzeW1ib2xzLCBfaGFzRXZhbCwgdXB2YXJzXTogU2VyaWFsaXplZFRlbXBsYXRlQmxvY2spIHtcbiAgICB0aGlzLnVwdmFycyA9IHVwdmFycztcbiAgICB0aGlzLnN5bWJvbHMgPSBzeW1ib2xzO1xuICB9XG5cbiAgZm9ybWF0KHByb2dyYW06IFNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrKTogdW5rbm93biB7XG4gICAgbGV0IG91dCA9IFtdO1xuXG4gICAgZm9yIChsZXQgc3RhdGVtZW50IG9mIHByb2dyYW1bMF0pIHtcbiAgICAgIG91dC5wdXNoKHRoaXMuZm9ybWF0T3Bjb2RlKHN0YXRlbWVudCkpO1xuICAgIH1cblxuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBmb3JtYXRPcGNvZGUob3Bjb2RlOiBXaXJlRm9ybWF0LlN5bnRheCk6IHVua25vd24ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9wY29kZSkpIHtcbiAgICAgIHN3aXRjaCAob3Bjb2RlWzBdKSB7XG4gICAgICAgIGNhc2UgT3AuQXBwZW5kOlxuICAgICAgICAgIHJldHVybiBbJ2FwcGVuZCcsIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsxXSldO1xuICAgICAgICBjYXNlIE9wLlRydXN0aW5nQXBwZW5kOlxuICAgICAgICAgIHJldHVybiBbJ3RydXN0aW5nLWFwcGVuZCcsIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsxXSldO1xuXG4gICAgICAgIGNhc2UgT3AuQmxvY2s6XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICdibG9jaycsXG4gICAgICAgICAgICB0aGlzLmZvcm1hdE9wY29kZShvcGNvZGVbMV0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRQYXJhbXMob3Bjb2RlWzJdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0SGFzaChvcGNvZGVbM10pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRCbG9ja3Mob3Bjb2RlWzRdKSxcbiAgICAgICAgICBdO1xuXG4gICAgICAgIGNhc2UgT3AuSW5FbGVtZW50OlxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnaW4tZWxlbWVudCcsXG4gICAgICAgICAgICBvcGNvZGVbMV0sXG4gICAgICAgICAgICB0aGlzLmZvcm1hdE9wY29kZShvcGNvZGVbMl0pLFxuICAgICAgICAgICAgb3Bjb2RlWzNdID8gdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzNdKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBdO1xuXG4gICAgICAgIGNhc2UgT3AuT3BlbkVsZW1lbnQ6XG4gICAgICAgICAgcmV0dXJuIFsnb3Blbi1lbGVtZW50JywgaW5mbGF0ZVRhZ05hbWUob3Bjb2RlWzFdKV07XG5cbiAgICAgICAgY2FzZSBPcC5PcGVuRWxlbWVudFdpdGhTcGxhdDpcbiAgICAgICAgICByZXR1cm4gWydvcGVuLWVsZW1lbnQtd2l0aC1zcGxhdCcsIGluZmxhdGVUYWdOYW1lKG9wY29kZVsxXSldO1xuXG4gICAgICAgIGNhc2UgT3AuQ2xvc2VFbGVtZW50OlxuICAgICAgICAgIHJldHVybiBbJ2Nsb3NlLWVsZW1lbnQnXTtcblxuICAgICAgICBjYXNlIE9wLkZsdXNoRWxlbWVudDpcbiAgICAgICAgICByZXR1cm4gWydmbHVzaC1lbGVtZW50J107XG5cbiAgICAgICAgY2FzZSBPcC5TdGF0aWNBdHRyOlxuICAgICAgICAgIHJldHVybiBbJ3N0YXRpYy1hdHRyJywgaW5mbGF0ZUF0dHJOYW1lKG9wY29kZVsxXSksIG9wY29kZVsyXSwgb3Bjb2RlWzNdXTtcblxuICAgICAgICBjYXNlIE9wLlN0YXRpY0NvbXBvbmVudEF0dHI6XG4gICAgICAgICAgcmV0dXJuIFsnc3RhdGljLWNvbXBvbmVudC1hdHRyJywgaW5mbGF0ZUF0dHJOYW1lKG9wY29kZVsxXSksIG9wY29kZVsyXSwgb3Bjb2RlWzNdXTtcblxuICAgICAgICBjYXNlIE9wLkR5bmFtaWNBdHRyOlxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnZHluYW1pYy1hdHRyJyxcbiAgICAgICAgICAgIGluZmxhdGVBdHRyTmFtZShvcGNvZGVbMV0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzJdKSxcbiAgICAgICAgICAgIG9wY29kZVszXSxcbiAgICAgICAgICBdO1xuXG4gICAgICAgIGNhc2UgT3AuQ29tcG9uZW50QXR0cjpcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ2NvbXBvbmVudC1hdHRyJyxcbiAgICAgICAgICAgIGluZmxhdGVBdHRyTmFtZShvcGNvZGVbMV0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzJdKSxcbiAgICAgICAgICAgIG9wY29kZVszXSxcbiAgICAgICAgICBdO1xuXG4gICAgICAgIGNhc2UgT3AuQXR0clNwbGF0OlxuICAgICAgICAgIHJldHVybiBbJ2F0dHItc3BsYXQnXTtcblxuICAgICAgICBjYXNlIE9wLllpZWxkOlxuICAgICAgICAgIHJldHVybiBbJ3lpZWxkJywgb3Bjb2RlWzFdLCB0aGlzLmZvcm1hdFBhcmFtcyhvcGNvZGVbMl0pXTtcblxuICAgICAgICBjYXNlIE9wLkR5bmFtaWNBcmc6XG4gICAgICAgICAgcmV0dXJuIFsnZHluYW1pYy1hcmcnLCBvcGNvZGVbMV0sIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsyXSldO1xuXG4gICAgICAgIGNhc2UgT3AuU3RhdGljQXJnOlxuICAgICAgICAgIHJldHVybiBbJ3N0YXRpYy1hcmcnLCBvcGNvZGVbMV0sIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsyXSldO1xuXG4gICAgICAgIGNhc2UgT3AuVHJ1c3RpbmdEeW5hbWljQXR0cjpcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ3RydXN0aW5nLWR5bmFtaWMtYXR0cicsXG4gICAgICAgICAgICBpbmZsYXRlQXR0ck5hbWUob3Bjb2RlWzFdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsyXSksXG4gICAgICAgICAgICBvcGNvZGVbM10sXG4gICAgICAgICAgXTtcblxuICAgICAgICBjYXNlIE9wLlRydXN0aW5nQ29tcG9uZW50QXR0cjpcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ3RydXN0aW5nLWNvbXBvbmVudC1hdHRyJyxcbiAgICAgICAgICAgIGluZmxhdGVBdHRyTmFtZShvcGNvZGVbMV0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzJdKSxcbiAgICAgICAgICAgIG9wY29kZVszXSxcbiAgICAgICAgICBdO1xuXG4gICAgICAgIGNhc2UgT3AuRGVidWdnZXI6XG4gICAgICAgICAgcmV0dXJuIFsnZGVidWdnZXInLCBvcGNvZGVbMV1dO1xuXG4gICAgICAgIGNhc2UgT3AuQ29tbWVudDpcbiAgICAgICAgICByZXR1cm4gWydjb21tZW50Jywgb3Bjb2RlWzFdXTtcblxuICAgICAgICBjYXNlIE9wLk1vZGlmaWVyOlxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnbW9kaWZpZXInLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzFdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0UGFyYW1zKG9wY29kZVsyXSksXG4gICAgICAgICAgICB0aGlzLmZvcm1hdEhhc2gob3Bjb2RlWzNdKSxcbiAgICAgICAgICBdO1xuXG4gICAgICAgIGNhc2UgT3AuQ29tcG9uZW50OlxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnY29tcG9uZW50JyxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsxXSksXG4gICAgICAgICAgICB0aGlzLmZvcm1hdEVsZW1lbnRQYXJhbXMob3Bjb2RlWzJdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0SGFzaChvcGNvZGVbM10pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRCbG9ja3Mob3Bjb2RlWzRdKSxcbiAgICAgICAgICBdO1xuXG4gICAgICAgIGNhc2UgT3AuSGFzQmxvY2s6XG4gICAgICAgICAgcmV0dXJuIFsnaGFzLWJsb2NrJywgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzFdKV07XG5cbiAgICAgICAgY2FzZSBPcC5IYXNCbG9ja1BhcmFtczpcbiAgICAgICAgICByZXR1cm4gWydoYXMtYmxvY2stcGFyYW1zJywgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzFdKV07XG5cbiAgICAgICAgY2FzZSBPcC5DdXJyeTpcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ2N1cnJ5JyxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsxXSksXG4gICAgICAgICAgICB0aGlzLmZvcm1hdEN1cnJ5VHlwZShvcGNvZGVbMl0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRQYXJhbXMob3Bjb2RlWzNdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0SGFzaChvcGNvZGVbNF0pLFxuICAgICAgICAgIF07XG5cbiAgICAgICAgY2FzZSBPcC5VbmRlZmluZWQ6XG4gICAgICAgICAgcmV0dXJuIFsndW5kZWZpbmVkJ107XG5cbiAgICAgICAgY2FzZSBPcC5DYWxsOlxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnY2FsbCcsXG4gICAgICAgICAgICB0aGlzLmZvcm1hdE9wY29kZShvcGNvZGVbMV0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRQYXJhbXMob3Bjb2RlWzJdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0SGFzaChvcGNvZGVbM10pLFxuICAgICAgICAgIF07XG5cbiAgICAgICAgY2FzZSBPcC5Db25jYXQ6XG4gICAgICAgICAgcmV0dXJuIFsnY29uY2F0JywgdGhpcy5mb3JtYXRQYXJhbXMob3Bjb2RlWzFdIGFzIFdpcmVGb3JtYXQuQ29yZS5QYXJhbXMpXTtcblxuICAgICAgICBjYXNlIE9wLkdldFN0cmljdEZyZWU6XG4gICAgICAgICAgcmV0dXJuIFsnZ2V0LXN0cmljdC1mcmVlJywgdGhpcy51cHZhcnNbb3Bjb2RlWzFdXSwgb3Bjb2RlWzJdXTtcblxuICAgICAgICBjYXNlIE9wLkdldEZyZWVBc0NvbXBvbmVudE9ySGVscGVySGVhZE9yVGhpc0ZhbGxiYWNrOlxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnR2V0RnJlZUFzQ29tcG9uZW50T3JIZWxwZXJIZWFkT3JUaGlzRmFsbGJhY2snLFxuICAgICAgICAgICAgdGhpcy51cHZhcnNbb3Bjb2RlWzFdXSxcbiAgICAgICAgICAgIG9wY29kZVsyXSxcbiAgICAgICAgICBdO1xuXG4gICAgICAgIGNhc2UgT3AuR2V0RnJlZUFzQ29tcG9uZW50T3JIZWxwZXJIZWFkOlxuICAgICAgICAgIHJldHVybiBbJ0dldEZyZWVBc0NvbXBvbmVudE9ySGVscGVySGVhZCcsIHRoaXMudXB2YXJzW29wY29kZVsxXV0sIG9wY29kZVsyXV07XG5cbiAgICAgICAgY2FzZSBPcC5HZXRGcmVlQXNIZWxwZXJIZWFkT3JUaGlzRmFsbGJhY2s6XG4gICAgICAgICAgcmV0dXJuIFsnR2V0RnJlZUFzSGVscGVySGVhZE9yVGhpc0ZhbGxiYWNrJywgdGhpcy51cHZhcnNbb3Bjb2RlWzFdXSwgb3Bjb2RlWzJdXTtcblxuICAgICAgICBjYXNlIE9wLkdldEZyZWVBc0RlcHJlY2F0ZWRIZWxwZXJIZWFkT3JUaGlzRmFsbGJhY2s6XG4gICAgICAgICAgcmV0dXJuIFsnR2V0RnJlZUFzRGVwcmVjYXRlZEhlbHBlckhlYWRPclRoaXNGYWxsYmFjaycsIHRoaXMudXB2YXJzW29wY29kZVsxXV1dO1xuXG4gICAgICAgIGNhc2UgT3AuR2V0RnJlZUFzSGVscGVySGVhZDpcbiAgICAgICAgICByZXR1cm4gWydHZXRGcmVlQXNIZWxwZXJIZWFkJywgdGhpcy51cHZhcnNbb3Bjb2RlWzFdXSwgb3Bjb2RlWzJdXTtcblxuICAgICAgICBjYXNlIE9wLkdldEZyZWVBc0NvbXBvbmVudEhlYWQ6XG4gICAgICAgICAgcmV0dXJuIFsnR2V0RnJlZUFzQ29tcG9uZW50SGVhZCcsIHRoaXMudXB2YXJzW29wY29kZVsxXV0sIG9wY29kZVsyXV07XG5cbiAgICAgICAgY2FzZSBPcC5HZXRGcmVlQXNNb2RpZmllckhlYWQ6XG4gICAgICAgICAgcmV0dXJuIFsnR2V0RnJlZUFzTW9kaWZpZXJIZWFkJywgdGhpcy51cHZhcnNbb3Bjb2RlWzFdXSwgb3Bjb2RlWzJdXTtcblxuICAgICAgICBjYXNlIE9wLkdldFN5bWJvbDoge1xuICAgICAgICAgIGlmIChvcGNvZGVbMV0gPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBbJ2dldC1zeW1ib2wnLCAndGhpcycsIG9wY29kZVsyXV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbJ2dldC1zeW1ib2wnLCB0aGlzLnN5bWJvbHNbb3Bjb2RlWzFdIC0gMV0sIG9wY29kZVsyXV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBPcC5HZXRUZW1wbGF0ZVN5bWJvbDoge1xuICAgICAgICAgIHJldHVybiBbJ2dldC10ZW1wbGF0ZS1zeW1ib2wnLCBvcGNvZGVbMV0sIG9wY29kZVsyXV07XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIE9wLklmOlxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnaWYnLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzFdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0QmxvY2sob3Bjb2RlWzJdKSxcbiAgICAgICAgICAgIG9wY29kZVszXSA/IHRoaXMuZm9ybWF0QmxvY2sob3Bjb2RlWzNdKSA6IG51bGwsXG4gICAgICAgICAgXTtcblxuICAgICAgICBjYXNlIE9wLklmSW5saW5lOlxuICAgICAgICAgIHJldHVybiBbJ2lmLWlubGluZSddO1xuXG4gICAgICAgIGNhc2UgT3AuTm90OlxuICAgICAgICAgIHJldHVybiBbJ25vdCddO1xuXG4gICAgICAgIGNhc2UgT3AuRWFjaDpcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ2VhY2gnLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzFdKSxcbiAgICAgICAgICAgIG9wY29kZVsyXSA/IHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsyXSkgOiBudWxsLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRCbG9jayhvcGNvZGVbM10pLFxuICAgICAgICAgICAgb3Bjb2RlWzRdID8gdGhpcy5mb3JtYXRCbG9jayhvcGNvZGVbNF0pIDogbnVsbCxcbiAgICAgICAgICBdO1xuXG4gICAgICAgIGNhc2UgT3AuV2l0aDpcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ3dpdGgnLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzFdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0QmxvY2sob3Bjb2RlWzJdKSxcbiAgICAgICAgICAgIG9wY29kZVszXSA/IHRoaXMuZm9ybWF0QmxvY2sob3Bjb2RlWzNdKSA6IG51bGwsXG4gICAgICAgICAgXTtcblxuICAgICAgICBjYXNlIE9wLkxldDpcbiAgICAgICAgICByZXR1cm4gWydsZXQnLCB0aGlzLmZvcm1hdFBhcmFtcyhvcGNvZGVbMV0pLCB0aGlzLmZvcm1hdEJsb2NrKG9wY29kZVsyXSldO1xuXG4gICAgICAgIGNhc2UgT3AuTG9nOlxuICAgICAgICAgIHJldHVybiBbJ2xvZycsIHRoaXMuZm9ybWF0UGFyYW1zKG9wY29kZVsxXSldO1xuXG4gICAgICAgIGNhc2UgT3AuV2l0aER5bmFtaWNWYXJzOlxuICAgICAgICAgIHJldHVybiBbJy13aXRoLWR5bmFtaWMtdmFycycsIHRoaXMuZm9ybWF0SGFzaChvcGNvZGVbMV0pLCB0aGlzLmZvcm1hdEJsb2NrKG9wY29kZVsyXSldO1xuXG4gICAgICAgIGNhc2UgT3AuR2V0RHluYW1pY1ZhcjpcbiAgICAgICAgICByZXR1cm4gWyctZ2V0LWR5bmFtaWMtdmFycycsIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsxXSldO1xuXG4gICAgICAgIGNhc2UgT3AuSW52b2tlQ29tcG9uZW50OlxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnY29tcG9uZW50JyxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsxXSksXG4gICAgICAgICAgICB0aGlzLmZvcm1hdFBhcmFtcyhvcGNvZGVbMl0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRIYXNoKG9wY29kZVszXSksXG4gICAgICAgICAgICB0aGlzLmZvcm1hdEJsb2NrcyhvcGNvZGVbNF0pLFxuICAgICAgICAgIF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcGNvZGU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRDdXJyeVR5cGUodmFsdWU6IEN1cnJpZWRUeXBlKSB7XG4gICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgY2FzZSBDdXJyaWVkVHlwZS5Db21wb25lbnQ6XG4gICAgICAgIHJldHVybiAnY29tcG9uZW50JztcbiAgICAgIGNhc2UgQ3VycmllZFR5cGUuSGVscGVyOlxuICAgICAgICByZXR1cm4gJ2hlbHBlcic7XG4gICAgICBjYXNlIEN1cnJpZWRUeXBlLk1vZGlmaWVyOlxuICAgICAgICByZXR1cm4gJ21vZGlmaWVyJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IGV4aGF1c3RlZCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRFbGVtZW50UGFyYW1zKG9wY29kZXM6IE9wdGlvbjxXaXJlRm9ybWF0LkVsZW1lbnRQYXJhbWV0ZXJbXT4pOiBPcHRpb248dW5rbm93bltdPiB7XG4gICAgaWYgKG9wY29kZXMgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBvcGNvZGVzLm1hcCgobykgPT4gdGhpcy5mb3JtYXRPcGNvZGUobykpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRQYXJhbXMob3Bjb2RlczogT3B0aW9uPFdpcmVGb3JtYXQuRXhwcmVzc2lvbltdPik6IE9wdGlvbjx1bmtub3duW10+IHtcbiAgICBpZiAob3Bjb2RlcyA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIG9wY29kZXMubWFwKChvKSA9PiB0aGlzLmZvcm1hdE9wY29kZShvKSk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdEhhc2goaGFzaDogV2lyZUZvcm1hdC5Db3JlLkhhc2gpOiBPcHRpb248b2JqZWN0PiB7XG4gICAgaWYgKGhhc2ggPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIGhhc2hbMF0ucmVkdWNlKChhY2N1bSwga2V5LCBpbmRleCkgPT4ge1xuICAgICAgYWNjdW1ba2V5XSA9IHRoaXMuZm9ybWF0T3Bjb2RlKGhhc2hbMV1baW5kZXhdKTtcbiAgICAgIHJldHVybiBhY2N1bTtcbiAgICB9LCBkaWN0KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRCbG9ja3MoYmxvY2tzOiBXaXJlRm9ybWF0LkNvcmUuQmxvY2tzKTogT3B0aW9uPG9iamVjdD4ge1xuICAgIGlmIChibG9ja3MgPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIGJsb2Nrc1swXS5yZWR1Y2UoKGFjY3VtLCBrZXksIGluZGV4KSA9PiB7XG4gICAgICBhY2N1bVtrZXldID0gdGhpcy5mb3JtYXRCbG9jayhibG9ja3NbMV1baW5kZXhdKTtcbiAgICAgIHJldHVybiBhY2N1bTtcbiAgICB9LCBkaWN0KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRCbG9jayhibG9jazogU2VyaWFsaXplZElubGluZUJsb2NrKTogb2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdGVtZW50czogYmxvY2tbMF0ubWFwKChzKSA9PiB0aGlzLmZvcm1hdE9wY29kZShzKSksXG4gICAgICBwYXJhbWV0ZXJzOiBibG9ja1sxXSxcbiAgICB9O1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9