@glimmer/compiler
Version:
164 lines (144 loc) • 20.9 kB
JavaScript
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
import { dict, assertNever } from '@glimmer/util';
var WireFormatDebugger = function () {
function WireFormatDebugger(program, _parameters) {
_classCallCheck(this, WireFormatDebugger);
this.program = program;
}
WireFormatDebugger.prototype.format = function format() {
var out = [];
for (var _iterator = this.program.statements, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
var _ref;
if (_isArray) {
if (_i >= _iterator.length) break;
_ref = _iterator[_i++];
} else {
_i = _iterator.next();
if (_i.done) break;
_ref = _i.value;
}
var statement = _ref;
out.push(this.formatOpcode(statement));
}
return out;
};
WireFormatDebugger.prototype.formatOpcode = function formatOpcode(opcode) {
if (Array.isArray(opcode)) {
switch (opcode[0]) {
case 1 /* Append */:
return ['append', this.formatOpcode(opcode[1]), opcode[2]];
case 5 /* Block */:
return ['block', this.formatOpcode(opcode[1]), this.formatParams(opcode[2]), this.formatHash(opcode[3]), this.formatBlocks(opcode[4])];
case 9 /* OpenElement */:
return ['open-element', opcode[1], opcode[2]];
case 11 /* CloseElement */:
return ['close-element'];
case 10 /* FlushElement */:
return ['flush-element'];
case 12 /* StaticAttr */:
return ['static-attr', opcode[1], opcode[2], opcode[3]];
case 13 /* DynamicAttr */:
return ['dynamic-attr', opcode[1], this.formatOpcode(opcode[2]), opcode[3]];
case 14 /* ComponentAttr */:
return ['component-attr', opcode[1], this.formatOpcode(opcode[2]), opcode[3]];
case 15 /* AttrSplat */:
return ['attr-splat'];
case 16 /* Yield */:
return ['yield', opcode[1], this.formatParams(opcode[2])];
case 17 /* Partial */:
return ['partial', this.formatOpcode(opcode[1]), opcode[2]];
case 18 /* DynamicArg */:
return ['dynamic-arg', opcode[1], this.formatOpcode(opcode[2])];
case 19 /* StaticArg */:
return ['static-arg', opcode[1], this.formatOpcode(opcode[2])];
case 20 /* TrustingDynamicAttr */:
return ['trusting-dynamic-attr', opcode[1], this.formatOpcode(opcode[2]), opcode[3]];
case 21 /* TrustingComponentAttr */:
return ['trusting-component-attr', opcode[1], this.formatOpcode(opcode[2]), opcode[3]];
case 22 /* Debugger */:
return ['debugger', opcode[1]];
case 2 /* Comment */:
return ['comment', opcode[1]];
case 3 /* Modifier */:
return ['modifier', this.formatOpcode(opcode[1]), this.formatParams(opcode[4]), this.formatHash(opcode[5])];
case 7 /* Component */:
return ['component', opcode[1], this.formatAttrs(opcode[2]), this.formatHash(opcode[3]), this.formatBlocks(opcode[4])];
// case Op.DynamicComponent:
// return [
// 'dynamic-component',
// this.formatOpcode(opcode[1]),
// this.formatAttrs(opcode[2]),
// this.formatHash(opcode[3]),
// this.formatBlocks(opcode[4]),
// ];
case 24 /* GetSymbol */:
return ['get-symbol', this.program.symbols[opcode[1]], opcode[1]];
case 25 /* GetFree */:
return ['get-free', this.program.upvars[opcode[1]]];
case 26 /* GetContextualFree */:
return ['get-contextual-free', this.program.upvars[opcode[1]], opcode[2]];
case 27 /* GetPath */:
return ['get-path', this.formatOpcode(opcode[1]), opcode[2]];
case 28 /* HasBlock */:
return ['has-block', opcode[1]];
case 29 /* HasBlockParams */:
return ['has-block-params', opcode[1]];
case 30 /* Undefined */:
return ['undefined'];
case 31 /* Call */:
return ['call', this.formatOpcode(opcode[3]), this.formatParams(opcode[4]), this.formatHash(opcode[5])];
case 32 /* Concat */:
return ['concat', this.formatParams(opcode[1])];
default:
{
var opName = opcode[0];
throw assertNever(opName, 'unexpected ' + opName);
}
}
} else {
return opcode;
}
};
WireFormatDebugger.prototype.formatAttrs = function formatAttrs(opcodes) {
var _this = this;
if (opcodes === null) return null;
return opcodes.map(function (o) {
return _this.formatOpcode(o);
});
};
WireFormatDebugger.prototype.formatParams = function formatParams(opcodes) {
var _this2 = this;
if (opcodes === null) return null;
return opcodes.map(function (o) {
return _this2.formatOpcode(o);
});
};
WireFormatDebugger.prototype.formatHash = function formatHash(hash) {
var _this3 = this;
if (hash === null) return null;
return hash[0].reduce(function (accum, key, index) {
accum[key] = _this3.formatOpcode(hash[1][index]);
return accum;
}, dict());
};
WireFormatDebugger.prototype.formatBlocks = function formatBlocks(blocks) {
var _this4 = this;
if (blocks === null) return null;
return blocks[0].reduce(function (accum, key, index) {
accum[key] = _this4.formatBlock(blocks[1][index]);
return accum;
}, dict());
};
WireFormatDebugger.prototype.formatBlock = function formatBlock(block) {
var _this5 = this;
return {
parameters: block.parameters,
statements: block.statements.map(function (s) {
return _this5.formatOpcode(s);
})
};
};
return WireFormatDebugger;
}();
export default WireFormatDebugger;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi93aXJlLWZvcm1hdC1kZWJ1Zy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU9BLFNBQUEsSUFBQSxFQUFBLFdBQUEsUUFBQSxlQUFBOztJQUVjLGtCO0FBQ1osZ0NBQUEsT0FBQSxFQUFBLFdBQUEsRUFBNEU7QUFBQTs7QUFBeEQsYUFBQSxPQUFBLEdBQUEsT0FBQTtBQUE0RDs7aUNBRWhGLE0scUJBQU07QUFDSixZQUFJLE1BQUosRUFBQTtBQUVBLDZCQUFzQixLQUFBLE9BQUEsQ0FBdEIsVUFBQSxrSEFBK0M7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBLGdCQUEvQyxTQUErQzs7QUFDN0MsZ0JBQUEsSUFBQSxDQUFTLEtBQUEsWUFBQSxDQUFULFNBQVMsQ0FBVDtBQUNEO0FBRUQsZUFBQSxHQUFBO0FBQ0QsSzs7aUNBRUQsWSx5QkFBQSxNLEVBQXNDO0FBQ3BDLFlBQUksTUFBQSxPQUFBLENBQUosTUFBSSxDQUFKLEVBQTJCO0FBQ3pCLG9CQUFRLE9BQVIsQ0FBUSxDQUFSO0FBQ0UscUJBQUEsQ0FBQSxDQUFBLFlBQUE7QUFDRSwyQkFBTyxDQUFBLFFBQUEsRUFBVyxLQUFBLFlBQUEsQ0FBa0IsT0FBN0IsQ0FBNkIsQ0FBbEIsQ0FBWCxFQUF5QyxPQUFoRCxDQUFnRCxDQUF6QyxDQUFQO0FBRUYscUJBQUEsQ0FBQSxDQUFBLFdBQUE7QUFDRSwyQkFBTyxDQUFBLE9BQUEsRUFFTCxLQUFBLFlBQUEsQ0FBa0IsT0FGYixDQUVhLENBQWxCLENBRkssRUFHTCxLQUFBLFlBQUEsQ0FBa0IsT0FIYixDQUdhLENBQWxCLENBSEssRUFJTCxLQUFBLFVBQUEsQ0FBZ0IsT0FKWCxDQUlXLENBQWhCLENBSkssRUFLTCxLQUFBLFlBQUEsQ0FBa0IsT0FMcEIsQ0FLb0IsQ0FBbEIsQ0FMSyxDQUFQO0FBUUYscUJBQUEsQ0FBQSxDQUFB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LEtBQStCLENBQWxCLENBQWI7QUFDQSxtQkFBQSxLQUFBO0FBRkssU0FBQSxFQUFQLE1BQU8sQ0FBUDtBQUlELEs7O2lDQUVPLFkseUJBQUEsTSxFQUEyQztBQUFBOztBQUNqRCxZQUFJLFdBQUosSUFBQSxFQUFxQixPQUFBLElBQUE7QUFFckIsZUFBTyxPQUFBLENBQUEsRUFBQSxNQUFBLENBQWlCLFVBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxLQUFBLEVBQXNCO0FBQzVDLGtCQUFBLEdBQUEsSUFBYSxPQUFBLFdBQUEsQ0FBaUIsT0FBQSxDQUFBLEVBQTlCLEtBQThCLENBQWpCLENBQWI7QUFDQSxtQkFBQSxLQUFBO0FBRkssU0FBQSxFQUFQLE1BQU8sQ0FBUDtBQUlELEs7O2lDQUVPLFcsd0JBQUEsSyxFQUF3QztBQUFBOztBQUM5QyxlQUFPO0FBQ0wsd0JBQVksTUFEUCxVQUFBO0FBRUwsd0JBQVksTUFBQSxVQUFBLENBQUEsR0FBQSxDQUFxQjtBQUFBLHVCQUFLLE9BQUEsWUFBQSxDQUExQixDQUEwQixDQUFMO0FBQUEsYUFBckI7QUFGUCxTQUFQO0FBSUQsSzs7Ozs7ZUE5S1csa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBXaXJlRm9ybWF0LFxuICBTZXhwT3Bjb2RlcyBhcyBPcCxcbiAgT3B0aW9uLFxuICBTZXJpYWxpemVkSW5saW5lQmxvY2ssXG4gIFNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrLFxufSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGRpY3QsIGFzc2VydE5ldmVyIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdpcmVGb3JtYXREZWJ1Z2dlciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcHJvZ3JhbTogU2VyaWFsaXplZFRlbXBsYXRlQmxvY2ssIF9wYXJhbWV0ZXJzPzogbnVtYmVyW10pIHt9XG5cbiAgZm9ybWF0KCk6IHVua25vd24ge1xuICAgIGxldCBvdXQgPSBbXTtcblxuICAgIGZvciAobGV0IHN0YXRlbWVudCBvZiB0aGlzLnByb2dyYW0uc3RhdGVtZW50cykge1xuICAgICAgb3V0LnB1c2godGhpcy5mb3JtYXRPcGNvZGUoc3RhdGVtZW50KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGZvcm1hdE9wY29kZShvcGNvZGU6IFdpcmVGb3JtYXQuU3ludGF4KTogdW5rbm93biB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3Bjb2RlKSkge1xuICAgICAgc3dpdGNoIChvcGNvZGVbMF0pIHtcbiAgICAgICAgY2FzZSBPcC5BcHBlbmQ6XG4gICAgICAgICAgcmV0dXJuIFsnYXBwZW5kJywgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzFdKSwgb3Bjb2RlWzJdXTtcblxuICAgICAgICBjYXNlIE9wLkJsb2NrOlxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnYmxvY2snLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzFdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0UGFyYW1zKG9wY29kZVsyXSksXG4gICAgICAgICAgICB0aGlzLmZvcm1hdEhhc2gob3Bjb2RlWzNdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0QmxvY2tzKG9wY29kZVs0XSksXG4gICAgICAgICAgXTtcblxuICAgICAgICBjYXNlIE9wLk9wZW5FbGVtZW50OlxuICAgICAgICAgIHJldHVybiBbJ29wZW4tZWxlbWVudCcsIG9wY29kZVsxXSwgb3Bjb2RlWzJdXTtcblxuICAgICAgICBjYXNlIE9wLkNsb3NlRWxlbWVudDpcbiAgICAgICAgICByZXR1cm4gWydjbG9zZS1lbGVtZW50J107XG5cbiAgICAgICAgY2FzZSBPcC5GbHVzaEVsZW1lbnQ6XG4gICAgICAgICAgcmV0dXJuIFsnZmx1c2gtZWxlbWVudCddO1xuXG4gICAgICAgIGNhc2UgT3AuU3RhdGljQXR0cjpcbiAgICAgICAgICByZXR1cm4gWydzdGF0aWMtYXR0cicsIG9wY29kZVsxXSwgb3Bjb2RlWzJdLCBvcGNvZGVbM11dO1xuXG4gICAgICAgIGNhc2UgT3AuRHluYW1pY0F0dHI6XG4gICAgICAgICAgcmV0dXJuIFsnZHluYW1pYy1hdHRyJywgb3Bjb2RlWzFdLCB0aGlzLmZvcm1hdE9wY29kZShvcGNvZGVbMl0pLCBvcGNvZGVbM11dO1xuXG4gICAgICAgIGNhc2UgT3AuQ29tcG9uZW50QXR0cjpcbiAgICAgICAgICByZXR1cm4gWydjb21wb25lbnQtYXR0cicsIG9wY29kZVsxXSwgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzJdKSwgb3Bjb2RlWzNdXTtcblxuICAgICAgICBjYXNlIE9wLkF0dHJTcGxhdDpcbiAgICAgICAgICByZXR1cm4gWydhdHRyLXNwbGF0J107XG5cbiAgICAgICAgY2FzZSBPcC5ZaWVsZDpcbiAgICAgICAgICByZXR1cm4gWyd5aWVsZCcsIG9wY29kZVsxXSwgdGhpcy5mb3JtYXRQYXJhbXMob3Bjb2RlWzJdKV07XG5cbiAgICAgICAgY2FzZSBPcC5QYXJ0aWFsOlxuICAgICAgICAgIHJldHVybiBbJ3BhcnRpYWwnLCB0aGlzLmZvcm1hdE9wY29kZShvcGNvZGVbMV0pLCBvcGNvZGVbMl1dO1xuXG4gICAgICAgIGNhc2UgT3AuRHluYW1pY0FyZzpcbiAgICAgICAgICByZXR1cm4gWydkeW5hbWljLWFyZycsIG9wY29kZVsxXSwgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzJdKV07XG5cbiAgICAgICAgY2FzZSBPcC5TdGF0aWNBcmc6XG4gICAgICAgICAgcmV0dXJuIFsnc3RhdGljLWFyZycsIG9wY29kZVsxXSwgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzJdKV07XG5cbiAgICAgICAgY2FzZSBPcC5UcnVzdGluZ0R5bmFtaWNBdHRyOlxuICAgICAgICAgIHJldHVybiBbJ3RydXN0aW5nLWR5bmFtaWMtYXR0cicsIG9wY29kZVsxXSwgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzJdKSwgb3Bjb2RlWzNdXTtcblxuICAgICAgICBjYXNlIE9wLlRydXN0aW5nQ29tcG9uZW50QXR0cjpcbiAgICAgICAgICByZXR1cm4gWyd0cnVzdGluZy1jb21wb25lbnQtYXR0cicsIG9wY29kZVsxXSwgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzJdKSwgb3Bjb2RlWzNdXTtcblxuICAgICAgICBjYXNlIE9wLkRlYnVnZ2VyOlxuICAgICAgICAgIHJldHVybiBbJ2RlYnVnZ2VyJywgb3Bjb2RlWzFdXTtcblxuICAgICAgICBjYXNlIE9wLkNvbW1lbnQ6XG4gICAgICAgICAgcmV0dXJuIFsnY29tbWVudCcsIG9wY29kZVsxXV07XG5cbiAgICAgICAgY2FzZSBPcC5Nb2RpZmllcjpcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ21vZGlmaWVyJyxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVsxXSksXG4gICAgICAgICAgICB0aGlzLmZvcm1hdFBhcmFtcyhvcGNvZGVbNF0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRIYXNoKG9wY29kZVs1XSksXG4gICAgICAgICAgXTtcblxuICAgICAgICBjYXNlIE9wLkNvbXBvbmVudDpcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ2NvbXBvbmVudCcsXG4gICAgICAgICAgICBvcGNvZGVbMV0sXG4gICAgICAgICAgICB0aGlzLmZvcm1hdEF0dHJzKG9wY29kZVsyXSksXG4gICAgICAgICAgICB0aGlzLmZvcm1hdEhhc2gob3Bjb2RlWzNdKSxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0QmxvY2tzKG9wY29kZVs0XSksXG4gICAgICAgICAgXTtcblxuICAgICAgICAvLyBjYXNlIE9wLkR5bmFtaWNDb21wb25lbnQ6XG4gICAgICAgIC8vICAgcmV0dXJuIFtcbiAgICAgICAgLy8gICAgICdkeW5hbWljLWNvbXBvbmVudCcsXG4gICAgICAgIC8vICAgICB0aGlzLmZvcm1hdE9wY29kZShvcGNvZGVbMV0pLFxuICAgICAgICAvLyAgICAgdGhpcy5mb3JtYXRBdHRycyhvcGNvZGVbMl0pLFxuICAgICAgICAvLyAgICAgdGhpcy5mb3JtYXRIYXNoKG9wY29kZVszXSksXG4gICAgICAgIC8vICAgICB0aGlzLmZvcm1hdEJsb2NrcyhvcGNvZGVbNF0pLFxuICAgICAgICAvLyAgIF07XG5cbiAgICAgICAgY2FzZSBPcC5HZXRTeW1ib2w6XG4gICAgICAgICAgcmV0dXJuIFsnZ2V0LXN5bWJvbCcsIHRoaXMucHJvZ3JhbS5zeW1ib2xzW29wY29kZVsxXV0sIG9wY29kZVsxXV07XG5cbiAgICAgICAgY2FzZSBPcC5HZXRGcmVlOlxuICAgICAgICAgIHJldHVybiBbJ2dldC1mcmVlJywgdGhpcy5wcm9ncmFtLnVwdmFyc1tvcGNvZGVbMV1dXTtcblxuICAgICAgICBjYXNlIE9wLkdldENvbnRleHR1YWxGcmVlOlxuICAgICAgICAgIHJldHVybiBbJ2dldC1jb250ZXh0dWFsLWZyZWUnLCB0aGlzLnByb2dyYW0udXB2YXJzW29wY29kZVsxXV0sIG9wY29kZVsyXV07XG5cbiAgICAgICAgY2FzZSBPcC5HZXRQYXRoOlxuICAgICAgICAgIHJldHVybiBbJ2dldC1wYXRoJywgdGhpcy5mb3JtYXRPcGNvZGUob3Bjb2RlWzFdKSwgb3Bjb2RlWzJdXTtcblxuICAgICAgICBjYXNlIE9wLkhhc0Jsb2NrOlxuICAgICAgICAgIHJldHVybiBbJ2hhcy1ibG9jaycsIG9wY29kZVsxXV07XG5cbiAgICAgICAgY2FzZSBPcC5IYXNCbG9ja1BhcmFtczpcbiAgICAgICAgICByZXR1cm4gWydoYXMtYmxvY2stcGFyYW1zJywgb3Bjb2RlWzFdXTtcblxuICAgICAgICBjYXNlIE9wLlVuZGVmaW5lZDpcbiAgICAgICAgICByZXR1cm4gWyd1bmRlZmluZWQnXTtcblxuICAgICAgICBjYXNlIE9wLkNhbGw6XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICdjYWxsJyxcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0T3Bjb2RlKG9wY29kZVszXSksXG4gICAgICAgICAgICB0aGlzLmZvcm1hdFBhcmFtcyhvcGNvZGVbNF0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtYXRIYXNoKG9wY29kZVs1XSksXG4gICAgICAgICAgXTtcblxuICAgICAgICBjYXNlIE9wLkNvbmNhdDpcbiAgICAgICAgICByZXR1cm4gWydjb25jYXQnLCB0aGlzLmZvcm1hdFBhcmFtcyhvcGNvZGVbMV0gYXMgV2lyZUZvcm1hdC5Db3JlLlBhcmFtcyldO1xuXG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBsZXQgb3BOYW1lID0gb3Bjb2RlWzBdO1xuICAgICAgICAgIHRocm93IGFzc2VydE5ldmVyKG9wTmFtZSwgYHVuZXhwZWN0ZWQgJHtvcE5hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9wY29kZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdEF0dHJzKG9wY29kZXM6IE9wdGlvbjxXaXJlRm9ybWF0LkF0dHJpYnV0ZVtdPik6IE9wdGlvbjx1bmtub3duW10+IHtcbiAgICBpZiAob3Bjb2RlcyA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIG9wY29kZXMubWFwKG8gPT4gdGhpcy5mb3JtYXRPcGNvZGUobykpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRQYXJhbXMob3Bjb2RlczogT3B0aW9uPFdpcmVGb3JtYXQuRXhwcmVzc2lvbltdPik6IE9wdGlvbjx1bmtub3duW10+IHtcbiAgICBpZiAob3Bjb2RlcyA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIG9wY29kZXMubWFwKG8gPT4gdGhpcy5mb3JtYXRPcGNvZGUobykpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRIYXNoKGhhc2g6IFdpcmVGb3JtYXQuQ29yZS5IYXNoKTogT3B0aW9uPG9iamVjdD4ge1xuICAgIGlmIChoYXNoID09PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiBoYXNoWzBdLnJlZHVjZSgoYWNjdW0sIGtleSwgaW5kZXgpID0+IHtcbiAgICAgIGFjY3VtW2tleV0gPSB0aGlzLmZvcm1hdE9wY29kZShoYXNoWzFdW2luZGV4XSk7XG4gICAgICByZXR1cm4gYWNjdW07XG4gICAgfSwgZGljdCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0QmxvY2tzKGJsb2NrczogV2lyZUZvcm1hdC5Db3JlLkJsb2Nrcyk6IE9wdGlvbjxvYmplY3Q+IHtcbiAgICBpZiAoYmxvY2tzID09PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiBibG9ja3NbMF0ucmVkdWNlKChhY2N1bSwga2V5LCBpbmRleCkgPT4ge1xuICAgICAgYWNjdW1ba2V5XSA9IHRoaXMuZm9ybWF0QmxvY2soYmxvY2tzWzFdW2luZGV4XSk7XG4gICAgICByZXR1cm4gYWNjdW07XG4gICAgfSwgZGljdCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0QmxvY2soYmxvY2s6IFNlcmlhbGl6ZWRJbmxpbmVCbG9jayk6IG9iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcmFtZXRlcnM6IGJsb2NrLnBhcmFtZXRlcnMsXG4gICAgICBzdGF0ZW1lbnRzOiBibG9jay5zdGF0ZW1lbnRzLm1hcChzID0+IHRoaXMuZm9ybWF0T3Bjb2RlKHMpKSxcbiAgICB9O1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9