UNPKG

@glimmer/syntax

Version:
311 lines (262 loc) 28.3 kB
import { SourceSlice } from '../../source/slice'; export class RefSerializer { arg(ref) { return { type: 'Arg', loc: ref.loc.serialize(), name: ref.name.serialize() }; } free(ref) { return { type: 'Free', loc: ref.loc.serialize(), resolution: ref.resolution.serialize(), name: ref.name }; } local(ref) { return { type: 'Local', loc: ref.loc.serialize(), name: ref.name }; } self(ref) { return { type: 'This', loc: ref.loc.serialize() }; } } const REF = new RefSerializer(); export class ExprSerializer { literal(literal) { return { type: 'Literal', loc: literal.loc.serialize(), value: literal.value }; } path(path) { return { type: 'Path', loc: path.loc.serialize(), ref: visit.ref(path.ref), tail: path.tail.map(t => t.serialize()) }; } call(call) { return { type: 'Call', loc: call.loc.serialize(), callee: visit.expr(call.callee), args: ARGS.args(call.args) }; } deprecatedCall(call) { return { type: 'DeprecatedCall', loc: call.loc.serialize(), callee: REF.free(call.callee) }; } interpolate(interpolate) { return { type: 'Interpolate', loc: interpolate.loc.serialize(), parts: interpolate.parts.map(p => visit.expr(p)) }; } } const EXPR = new ExprSerializer(); class ArgsSerializer { args(args) { return { loc: args.loc.serialize(), positional: this.positional(args.positional), named: this.named(args.named) }; } positional(positional) { return { loc: positional.loc.serialize(), exprs: positional.exprs.map(p => visit.expr(p)) }; } named(named) { return { loc: named.loc.serialize(), entries: named.entries.map(e => this.entry(e)) }; } entry(entry) { return [entry.name.serialize(), visit.expr(entry.value)]; } } const ARGS = new ArgsSerializer(); export class ContentSerializer { append(node) { return { type: 'Append', loc: node.loc.serialize(), value: visit.expr(node.value), trusting: node.trusting }; } glimmerComment(node) { return { type: 'GlimmerComment', loc: node.loc.serialize(), text: node.text.serialize() }; } htmlComment(node) { return { type: 'HtmlComment', loc: node.loc.serialize(), text: node.text.serialize() }; } htmlText(node) { return { type: 'HtmlText', loc: node.loc.serialize(), chars: node.chars }; } invokeBlock(node) { let args = ARGS.args(node.args); let callee = visit.expr(node.callee); return { type: 'InvokeBlock', loc: node.loc.serialize(), args, callee, blocks: INTERNAL.namedBlocks(node.blocks) }; } invokeComponent(node) { return { type: 'InvokeComponent', loc: node.loc.serialize(), callee: visit.expr(node.callee), blocks: INTERNAL.namedBlocks(node.blocks), attrs: node.attrs.map(a => visit.attr(a)), componentArgs: node.componentArgs.map(a => ATTRS.arg(a)), modifiers: node.modifiers.map(m => ATTRS.modifier(m)) }; } simpleElement(node) { return { type: 'SimpleElement', loc: node.loc.serialize(), tag: node.tag.serialize(), body: node.body.map(b => visit.content(b)), attrs: node.attrs.map(a => visit.attr(a)), componentArgs: node.componentArgs.map(a => ATTRS.arg(a)), modifiers: node.modifiers.map(m => ATTRS.modifier(m)) }; } } const CONTENT = new ContentSerializer(); class AttrBlockSerializer { modifier(node) { return { loc: node.loc.serialize(), callee: visit.expr(node.callee), args: ARGS.args(node.args) }; } arg(node) { return this.anyAttr(node); } anyAttr(node) { return { loc: node.loc.serialize(), name: node.name.serialize(), value: visit.expr(node.value), trusting: node.trusting }; } } const ATTRS = new AttrBlockSerializer(); class InternalSerializer { block(node) { return { loc: node.loc.serialize(), body: node.body.map(b => visit.content(b)), table: node.scope.locals }; } namedBlock(node) { return { name: node.name.serialize(), block: INTERNAL.block(node.block) }; } namedBlocks(node) { return { blocks: node.blocks.map(b => INTERNAL.namedBlock(b)), loc: node.loc.serialize() }; } } const INTERNAL = new InternalSerializer(); const visit = { expr(expr) { switch (expr.type) { case 'Literal': return EXPR.literal(expr); case 'Path': return EXPR.path(expr); case 'Call': return EXPR.call(expr); case 'DeprecatedCall': return EXPR.deprecatedCall(expr); case 'Interpolate': return EXPR.interpolate(expr); } }, attr(node) { if (node.type === 'SplatAttr') { return new SourceSlice({ loc: node.loc, chars: '...attributes' }).serialize(); } else { return ATTRS.anyAttr(node); } }, ref(ref) { switch (ref.type) { case 'Arg': return REF.arg(ref); case 'Free': return REF.free(ref); case 'Local': return REF.local(ref); case 'This': return REF.self(ref); } }, content(node) { switch (node.type) { case 'AppendContent': return CONTENT.append(node); case 'GlimmerComment': return CONTENT.glimmerComment(node); case 'HtmlComment': return CONTENT.htmlComment(node); case 'HtmlText': return CONTENT.htmlText(node); case 'InvokeBlock': return CONTENT.invokeBlock(node); case 'InvokeComponent': return CONTENT.invokeComponent(node); case 'SimpleElement': return CONTENT.simpleElement(node); } } }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3N5bnRheC9saWIvdjItYS9zZXJpYWxpemUvc2VyaWFsaXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLFNBQVMsV0FBVCxRQUE0QixvQkFBNUI7QUFrQ0EsT0FBTSxNQUFPLGFBQVAsQ0FBb0I7QUFDeEIsRUFBQSxHQUFHLENBQUMsR0FBRCxFQUF3QjtBQUN6QixXQUFPO0FBQ0wsTUFBQSxJQUFJLEVBQUUsS0FERDtBQUVMLE1BQUEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFKLENBQVEsU0FBUixFQUZBO0FBR0wsTUFBQSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUosQ0FBUyxTQUFUO0FBSEQsS0FBUDtBQUtEOztBQUVELEVBQUEsSUFBSSxDQUFDLEdBQUQsRUFBNEI7QUFDOUIsV0FBTztBQUNMLE1BQUEsSUFBSSxFQUFFLE1BREQ7QUFFTCxNQUFBLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBSixDQUFRLFNBQVIsRUFGQTtBQUdMLE1BQUEsVUFBVSxFQUFFLEdBQUcsQ0FBQyxVQUFKLENBQWUsU0FBZixFQUhQO0FBSUwsTUFBQSxJQUFJLEVBQUUsR0FBRyxDQUFDO0FBSkwsS0FBUDtBQU1EOztBQUVELEVBQUEsS0FBSyxDQUFDLEdBQUQsRUFBNkI7QUFDaEMsV0FBTztBQUNMLE1BQUEsSUFBSSxFQUFFLE9BREQ7QUFFTCxNQUFBLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBSixDQUFRLFNBQVIsRUFGQTtBQUdMLE1BQUEsSUFBSSxFQUFFLEdBQUcsQ0FBQztBQUhMLEtBQVA7QUFLRDs7QUFFRCxFQUFBLElBQUksQ0FBQyxHQUFELEVBQXlCO0FBQzNCLFdBQU87QUFDTCxNQUFBLElBQUksRUFBRSxNQUREO0FBRUwsTUFBQSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUosQ0FBUSxTQUFSO0FBRkEsS0FBUDtBQUlEOztBQS9CdUI7QUFrQzFCLE1BQU0sR0FBRyxHQUFHLElBQUksYUFBSixFQUFaO0FBRUEsT0FBTSxNQUFPLGNBQVAsQ0FBcUI7QUFDekIsRUFBQSxPQUFPLENBQUMsT0FBRCxFQUFpQztBQUN0QyxXQUFPO0FBQ0wsTUFBQSxJQUFJLEVBQUUsU0FERDtBQUVMLE1BQUEsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFSLENBQVksU0FBWixFQUZBO0FBR0wsTUFBQSxLQUFLLEVBQUUsT0FBTyxDQUFDO0FBSFYsS0FBUDtBQUtEOztBQUVELEVBQUEsSUFBSSxDQUFDLElBQUQsRUFBMkI7QUFDN0IsV0FBTztBQUNMLE1BQUEsSUFBSSxFQUFFLE1BREQ7QUFFTCxNQUFBLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBTCxDQUFTLFNBQVQsRUFGQTtBQUdMLE1BQUEsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFOLENBQVUsSUFBSSxDQUFDLEdBQWYsQ0FIQTtBQUlMLE1BQUEsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFMLENBQVUsR0FBVixDQUFlLENBQUQsSUFBTyxDQUFDLENBQUMsU0FBRixFQUFyQjtBQUpELEtBQVA7QUFNRDs7QUFFRCxFQUFBLElBQUksQ0FBQyxJQUFELEVBQTJCO0FBQzdCLFdBQU87QUFDTCxNQUFBLElBQUksRUFBRSxNQUREO0FBRUwsTUFBQSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUwsQ0FBUyxTQUFULEVBRkE7QUFHTCxNQUFBLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBTixDQUFXLElBQUksQ0FBQyxNQUFoQixDQUhIO0FBSUwsTUFBQSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUwsQ0FBVSxJQUFJLENBQUMsSUFBZjtBQUpELEtBQVA7QUFNRDs7QUFFRCxFQUFBLGNBQWMsQ0FBQyxJQUFELEVBQXFDO0FBQ2pELFdBQU87QUFDTCxNQUFBLElBQUksRUFBRSxnQkFERDtBQUVMLE1BQUEsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFMLENBQVMsU0FBVCxFQUZBO0FBR0wsTUFBQSxNQUFNLEVBQUUsR0FBRyxDQUFDLElBQUosQ0FBUyxJQUFJLENBQUMsTUFBZDtBQUhILEtBQVA7QUFLRDs7QUFFRCxFQUFBLFdBQVcsQ0FBQyxXQUFELEVBQXlDO0FBQ2xELFdBQU87QUFDTCxNQUFBLElBQUksRUFBRSxhQUREO0FBRUwsTUFBQSxHQUFHLEVBQUUsV0FBVyxDQUFDLEdBQVosQ0FBZ0IsU0FBaEIsRUFGQTtBQUdMLE1BQUEsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFaLENBQWtCLEdBQWxCLENBQXVCLENBQUQsSUFBTyxLQUFLLENBQUMsSUFBTixDQUFXLENBQVgsQ0FBN0I7QUFIRixLQUFQO0FBS0Q7O0FBekN3QjtBQTRDM0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxjQUFKLEVBQWI7O0FBRUEsTUFBTSxjQUFOLENBQW9CO0FBQ2xCLEVBQUEsSUFBSSxDQUFDLElBQUQsRUFBaUI7QUFDbkIsV0FBTztBQUNMLE1BQUEsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFMLENBQVMsU0FBVCxFQURBO0FBRUwsTUFBQSxVQUFVLEVBQUUsS0FBSyxVQUFMLENBQWdCLElBQUksQ0FBQyxVQUFyQixDQUZQO0FBR0wsTUFBQSxLQUFLLEVBQUUsS0FBSyxLQUFMLENBQVcsSUFBSSxDQUFDLEtBQWhCO0FBSEYsS0FBUDtBQUtEOztBQUVELEVBQUEsVUFBVSxDQUFDLFVBQUQsRUFBc0M7QUFDOUMsV0FBTztBQUNMLE1BQUEsR0FBRyxFQUFFLFVBQVUsQ0FBQyxHQUFYLENBQWUsU0FBZixFQURBO0FBRUwsTUFBQSxLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQVgsQ0FBaUIsR0FBakIsQ0FBc0IsQ0FBRCxJQUFPLEtBQUssQ0FBQyxJQUFOLENBQVcsQ0FBWCxDQUE1QjtBQUZGLEtBQVA7QUFJRDs7QUFFRCxFQUFBLEtBQUssQ0FBQyxLQUFELEVBQTRCO0FBQy9CLFdBQU87QUFDTCxNQUFBLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBTixDQUFVLFNBQVYsRUFEQTtBQUVMLE1BQUEsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFOLENBQWMsR0FBZCxDQUFtQixDQUFELElBQU8sS0FBSyxLQUFMLENBQVcsQ0FBWCxDQUF6QjtBQUZKLEtBQVA7QUFJRDs7QUFFRCxFQUFBLEtBQUssQ0FBQyxLQUFELEVBQTJCO0FBQzlCLFdBQU8sQ0FBQyxLQUFLLENBQUMsSUFBTixDQUFXLFNBQVgsRUFBRCxFQUF5QixLQUFLLENBQUMsSUFBTixDQUFXLEtBQUssQ0FBQyxLQUFqQixDQUF6QixDQUFQO0FBQ0Q7O0FBekJpQjs7QUE0QnBCLE1BQU0sSUFBSSxHQUFHLElBQUksY0FBSixFQUFiO0FBRUEsT0FBTSxNQUFPLGlCQUFQLENBQXdCO0FBQzVCLEVBQUEsTUFBTSxDQUFDLElBQUQsRUFBMEI7QUFDOUIsV0FBTztBQUNMLE1BQUEsSUFBSSxFQUFFLFFBREQ7QUFFTCxNQUFBLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBTCxDQUFTLFNBQVQsRUFGQTtBQUdMLE1BQUEsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFOLENBQVcsSUFBSSxDQUFDLEtBQWhCLENBSEY7QUFJTCxNQUFBLFFBQVEsRUFBRSxJQUFJLENBQUM7QUFKVixLQUFQO0FBTUQ7O0FBRUQsRUFBQSxjQUFjLENBQUMsSUFBRCxFQUEyQjtBQUN2QyxXQUFPO0FBQ0wsTUFBQSxJQUFJLEVBQUUsZ0JBREQ7QUFFTCxNQUFBLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBTCxDQUFTLFNBQVQsRUFGQTtBQUdMLE1BQUEsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFMLENBQVUsU0FBVjtBQUhELEtBQVA7QUFLRDs7QUFFRCxFQUFBLFdBQVcsQ0FBQyxJQUFELEVBQXdCO0FBQ2pDLFdBQU87QUFDTCxNQUFBLElBQUksRUFBRSxhQUREO0FBRUwsTUFBQSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUwsQ0FBUyxTQUFULEVBRkE7QUFHTCxNQUFBLElBQUksRUFBRSxJQUFJLENBQUMsSUFBTCxDQUFVLFNBQVY7QUFIRCxLQUFQO0FBS0Q7O0FBRUQsRUFBQSxRQUFRLENBQUMsSUFBRCxFQUFxQjtBQUMzQixXQUFPO0FBQ0wsTUFBQSxJQUFJLEVBQUUsVUFERDtBQUVMLE1BQUEsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFMLENBQVMsU0FBVCxFQUZBO0FBR0wsTUFBQSxLQUFLLEVBQUUsSUFBSSxDQUFDO0FBSFAsS0FBUDtBQUtEOztBQUVELEVBQUEsV0FBVyxDQUFDLElBQUQsRUFBd0I7QUFDakMsUUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUwsQ0FBVSxJQUFJLENBQUMsSUFBZixDQUFYO0FBQ0EsUUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQU4sQ0FBVyxJQUFJLENBQUMsTUFBaEIsQ0FBYjtBQUVBLFdBQU87QUFDTCxNQUFBLElBQUksRUFBRSxhQUREO0FBRUwsTUFBQSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUwsQ0FBUyxTQUFULEVBRkE7QUFHTCxNQUFBLElBSEs7QUFJTCxNQUFBLE1BSks7QUFLTCxNQUFBLE1BQU0sRUFBRSxRQUFRLENBQUMsV0FBVCxDQUFxQixJQUFJLENBQUMsTUFBMUI7QUFMSCxLQUFQO0FBT0Q7O0FBRUQsRUFBQSxlQUFlLENBQUMsSUFBRCxFQUE0QjtBQUN6QyxXQUFPO0FBQ0wsTUFBQSxJQUFJLEVBQUUsaUJBREQ7QUFFTCxNQUFBLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBTCxDQUFTLFNBQVQsRUFGQTtBQUdMLE1BQUEsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFOLENBQVcsSUFBSSxDQUFDLE1BQWhCLENBSEg7QUFJTCxNQUFBLE1BQU0sRUFBRSxRQUFRLENBQUMsV0FBVCxDQUFxQixJQUFJLENBQUMsTUFBMUIsQ0FKSDtBQUtMLE1BQUEsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFMLENBQVcsR0FBWCxDQUFnQixDQUFELElBQU8sS0FBSyxDQUFDLElBQU4sQ0FBVyxDQUFYLENBQXRCLENBTEY7QUFNTCxNQUFBLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBTCxDQUFtQixHQUFuQixDQUF3QixDQUFELElBQU8sS0FBSyxDQUFDLEdBQU4sQ0FBVSxDQUFWLENBQTlCLENBTlY7QUFPTCxNQUFBLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBTCxDQUFlLEdBQWYsQ0FBb0IsQ0FBRCxJQUFPLEtBQUssQ0FBQyxRQUFOLENBQWUsQ0FBZixDQUExQjtBQVBOLEtBQVA7QUFTRDs7QUFFRCxFQUFBLGFBQWEsQ0FBQyxJQUFELEVBQTBCO0FBQ3JDLFdBQU87QUFDTCxNQUFBLElBQUksRUFBRSxlQUREO0FBRUwsTUFBQSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUwsQ0FBUyxTQUFULEVBRkE7QUFHTCxNQUFBLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBTCxDQUFTLFNBQVQsRUFIQTtBQUlMLE1BQUEsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFMLENBQVUsR0FBVixDQUFlLENBQUQsSUFBTyxLQUFLLENBQUMsT0FBTixDQUFjLENBQWQsQ0FBckIsQ0FKRDtBQUtMLE1BQUEsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFMLENBQVcsR0FBWCxDQUFnQixDQUFELElBQU8sS0FBSyxDQUFDLElBQU4sQ0FBVyxDQUFYLENBQXRCLENBTEY7QUFNTCxNQUFBLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBTCxDQUFtQixHQUFuQixDQUF3QixDQUFELElBQU8sS0FBSyxDQUFDLEdBQU4sQ0FBVSxDQUFWLENBQTlCLENBTlY7QUFPTCxNQUFBLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBTCxDQUFlLEdBQWYsQ0FBb0IsQ0FBRCxJQUFPLEtBQUssQ0FBQyxRQUFOLENBQWUsQ0FBZixDQUExQjtBQVBOLEtBQVA7QUFTRDs7QUFyRTJCO0FBd0U5QixNQUFNLE9BQU8sR0FBRyxJQUFJLGlCQUFKLEVBQWhCOztBQUVBLE1BQU0sbUJBQU4sQ0FBeUI7QUFDdkIsRUFBQSxRQUFRLENBQUMsSUFBRCxFQUE0QjtBQUNsQyxXQUFPO0FBQ0wsTUFBQSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUwsQ0FBUyxTQUFULEVBREE7QUFFTCxNQUFBLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBTixDQUFXLElBQUksQ0FBQyxNQUFoQixDQUZIO0FBR0wsTUFBQSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUwsQ0FBVSxJQUFJLENBQUMsSUFBZjtBQUhELEtBQVA7QUFLRDs7QUFFRCxFQUFBLEdBQUcsQ0FBQyxJQUFELEVBQXlCO0FBQzFCLFdBQU8sS0FBSyxPQUFMLENBQWEsSUFBYixDQUFQO0FBQ0Q7O0FBRUQsRUFBQSxPQUFPLENBQUMsSUFBRCxFQUEwQztBQUMvQyxXQUFPO0FBQ0wsTUFBQSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUwsQ0FBUyxTQUFULEVBREE7QUFFTCxNQUFBLElBQUksRUFBRSxJQUFJLENBQUMsSUFBTCxDQUFVLFNBQVYsRUFGRDtBQUdMLE1BQUEsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFOLENBQVcsSUFBSSxDQUFDLEtBQWhCLENBSEY7QUFJTCxNQUFBLFFBQVEsRUFBRSxJQUFJLENBQUM7QUFKVixLQUFQO0FBTUQ7O0FBcEJzQjs7QUF1QnpCLE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQUosRUFBZDs7QUFFQSxNQUFNLGtCQUFOLENBQXdCO0FBQ3RCLEVBQUEsS0FBSyxDQUFDLElBQUQsRUFBa0I7QUFDckIsV0FBTztBQUNMLE1BQUEsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFMLENBQVMsU0FBVCxFQURBO0FBRUwsTUFBQSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUwsQ0FBVSxHQUFWLENBQWUsQ0FBRCxJQUFPLEtBQUssQ0FBQyxPQUFOLENBQWMsQ0FBZCxDQUFyQixDQUZEO0FBR0wsTUFBQSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUwsQ0FBVztBQUhiLEtBQVA7QUFLRDs7QUFFRCxFQUFBLFVBQVUsQ0FBQyxJQUFELEVBQXVCO0FBQy9CLFdBQU87QUFDTCxNQUFBLElBQUksRUFBRSxJQUFJLENBQUMsSUFBTCxDQUFVLFNBQVYsRUFERDtBQUVMLE1BQUEsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFULENBQWUsSUFBSSxDQUFDLEtBQXBCO0FBRkYsS0FBUDtBQUlEOztBQUVELEVBQUEsV0FBVyxDQUFDLElBQUQsRUFBd0I7QUFDakMsV0FBTztBQUNMLE1BQUEsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFMLENBQVksR0FBWixDQUFpQixDQUFELElBQU8sUUFBUSxDQUFDLFVBQVQsQ0FBb0IsQ0FBcEIsQ0FBdkIsQ0FESDtBQUVMLE1BQUEsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFMLENBQVMsU0FBVDtBQUZBLEtBQVA7QUFJRDs7QUFyQnFCOztBQXdCeEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxrQkFBSixFQUFqQjtBQUVBLE1BQU0sS0FBSyxHQUFHO0FBQ1osRUFBQSxJQUFJLENBQUMsSUFBRCxFQUEyQjtBQUM3QixZQUFRLElBQUksQ0FBQyxJQUFiO0FBQ0UsV0FBSyxTQUFMO0FBQ0UsZUFBTyxJQUFJLENBQUMsT0FBTCxDQUFhLElBQWIsQ0FBUDs7QUFDRixXQUFLLE1BQUw7QUFDRSxlQUFPLElBQUksQ0FBQyxJQUFMLENBQVUsSUFBVixDQUFQOztBQUNGLFdBQUssTUFBTDtBQUNFLGVBQU8sSUFBSSxDQUFDLElBQUwsQ0FBVSxJQUFWLENBQVA7O0FBQ0YsV0FBSyxnQkFBTDtBQUNFLGVBQU8sSUFBSSxDQUFDLGNBQUwsQ0FBb0IsSUFBcEIsQ0FBUDs7QUFDRixXQUFLLGFBQUw7QUFDRSxlQUFPLElBQUksQ0FBQyxXQUFMLENBQWlCLElBQWpCLENBQVA7QUFWSjtBQVlELEdBZFc7O0FBZ0JaLEVBQUEsSUFBSSxDQUFDLElBQUQsRUFBNEI7QUFDOUIsUUFBSSxJQUFJLENBQUMsSUFBTCxLQUFjLFdBQWxCLEVBQStCO0FBQzdCLGFBQU8sSUFBSSxXQUFKLENBQWdCO0FBQUUsUUFBQSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQVo7QUFBaUIsUUFBQSxLQUFLLEVBQUU7QUFBeEIsT0FBaEIsRUFBMkQsU0FBM0QsRUFBUDtBQUNELEtBRkQsTUFFTztBQUNMLGFBQU8sS0FBSyxDQUFDLE9BQU4sQ0FBYyxJQUFkLENBQVA7QUFDRDtBQUNGLEdBdEJXOztBQXdCWixFQUFBLEdBQUcsQ0FBQyxHQUFELEVBQTZCO0FBQzlCLFlBQVEsR0FBRyxDQUFDLElBQVo7QUFDRSxXQUFLLEtBQUw7QUFDRSxlQUFPLEdBQUcsQ0FBQyxHQUFKLENBQVEsR0FBUixDQUFQOztBQUNGLFdBQUssTUFBTDtBQUNFLGVBQU8sR0FBRyxDQUFDLElBQUosQ0FBUyxHQUFULENBQVA7O0FBQ0YsV0FBSyxPQUFMO0FBQ0UsZUFBTyxHQUFHLENBQUMsS0FBSixDQUFVLEdBQVYsQ0FBUDs7QUFDRixXQUFLLE1BQUw7QUFDRSxlQUFPLEdBQUcsQ0FBQyxJQUFKLENBQVMsR0FBVCxDQUFQO0FBUko7QUFVRCxHQW5DVzs7QUFxQ1osRUFBQSxPQUFPLENBQUMsSUFBRCxFQUF3QjtBQUM3QixZQUFRLElBQUksQ0FBQyxJQUFiO0FBQ0UsV0FBSyxlQUFMO0FBQ0UsZUFBTyxPQUFPLENBQUMsTUFBUixDQUFlLElBQWYsQ0FBUDs7QUFDRixXQUFLLGdCQUFMO0FBQ0UsZUFBTyxPQUFPLENBQUMsY0FBUixDQUF1QixJQUF2QixDQUFQOztBQUNGLFdBQUssYUFBTDtBQUNFLGVBQU8sT0FBTyxDQUFDLFdBQVIsQ0FBb0IsSUFBcEIsQ0FBUDs7QUFDRixXQUFLLFVBQUw7QUFDRSxlQUFPLE9BQU8sQ0FBQyxRQUFSLENBQWlCLElBQWpCLENBQVA7O0FBQ0YsV0FBSyxhQUFMO0FBQ0UsZUFBTyxPQUFPLENBQUMsV0FBUixDQUFvQixJQUFwQixDQUFQOztBQUNGLFdBQUssaUJBQUw7QUFDRSxlQUFPLE9BQU8sQ0FBQyxlQUFSLENBQXdCLElBQXhCLENBQVA7O0FBQ0YsV0FBSyxlQUFMO0FBQ0UsZUFBTyxPQUFPLENBQUMsYUFBUixDQUFzQixJQUF0QixDQUFQO0FBZEo7QUFnQkQ7O0FBdERXLENBQWQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcmVzZW50QXJyYXkgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcblxuaW1wb3J0IHsgU291cmNlU2xpY2UgfSBmcm9tICcuLi8uLi9zb3VyY2Uvc2xpY2UnO1xuaW1wb3J0ICogYXMgQVNUdjIgZnJvbSAnLi4vYXBpJztcbmltcG9ydCB0eXBlIHtcbiAgU2VyaWFsaXplZEFwcGVuZENvbnRlbnQsXG4gIFNlcmlhbGl6ZWRBcmdSZWZlcmVuY2UsXG4gIFNlcmlhbGl6ZWRBcmdzLFxuICBTZXJpYWxpemVkQXR0ck9yQXJnLFxuICBTZXJpYWxpemVkQmxvY2ssXG4gIFNlcmlhbGl6ZWRDYWxsRXhwcmVzc2lvbixcbiAgU2VyaWFsaXplZENvbnRlbnROb2RlLFxuICBTZXJpYWxpemVkRGVwcmVjYXRlZENhbGxFeHByZXNzaW9uLFxuICBTZXJpYWxpemVkRWxlbWVudE1vZGlmaWVyLFxuICBTZXJpYWxpemVkRXhwcmVzc2lvbk5vZGUsXG4gIFNlcmlhbGl6ZWRGcmVlVmFyUmVmZXJlbmNlLFxuICBTZXJpYWxpemVkR2xpbW1lckNvbW1lbnQsXG4gIFNlcmlhbGl6ZWRIdG1sQ29tbWVudCxcbiAgU2VyaWFsaXplZEh0bWxPclNwbGF0QXR0cixcbiAgU2VyaWFsaXplZEh0bWxUZXh0LFxuICBTZXJpYWxpemVkSW50ZXJwb2xhdGVFeHByZXNzaW9uLFxuICBTZXJpYWxpemVkSW52b2tlQmxvY2ssXG4gIFNlcmlhbGl6ZWRJbnZva2VDb21wb25lbnQsXG4gIFNlcmlhbGl6ZWRMaXRlcmFsRXhwcmVzc2lvbixcbiAgU2VyaWFsaXplZExvY2FsVmFyUmVmZXJlbmNlLFxuICBTZXJpYWxpemVkTmFtZWQsXG4gIFNlcmlhbGl6ZWROYW1lZEFyZ3VtZW50LFxuICBTZXJpYWxpemVkTmFtZWRCbG9jayxcbiAgU2VyaWFsaXplZE5hbWVkQmxvY2tzLFxuICBTZXJpYWxpemVkUGF0aEV4cHJlc3Npb24sXG4gIFNlcmlhbGl6ZWRQb3NpdGlvbmFsLFxuICBTZXJpYWxpemVkU2ltcGxlRWxlbWVudCxcbiAgU2VyaWFsaXplZFRoaXNSZWZlcmVuY2UsXG4gIFNlcmlhbGl6ZWRWYXJpYWJsZVJlZmVyZW5jZSxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBSZWZTZXJpYWxpemVyIHtcbiAgYXJnKHJlZjogQVNUdjIuQXJnUmVmZXJlbmNlKTogU2VyaWFsaXplZEFyZ1JlZmVyZW5jZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdBcmcnLFxuICAgICAgbG9jOiByZWYubG9jLnNlcmlhbGl6ZSgpLFxuICAgICAgbmFtZTogcmVmLm5hbWUuc2VyaWFsaXplKCksXG4gICAgfTtcbiAgfVxuXG4gIGZyZWUocmVmOiBBU1R2Mi5GcmVlVmFyUmVmZXJlbmNlKTogU2VyaWFsaXplZEZyZWVWYXJSZWZlcmVuY2Uge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnRnJlZScsXG4gICAgICBsb2M6IHJlZi5sb2Muc2VyaWFsaXplKCksXG4gICAgICByZXNvbHV0aW9uOiByZWYucmVzb2x1dGlvbi5zZXJpYWxpemUoKSxcbiAgICAgIG5hbWU6IHJlZi5uYW1lLFxuICAgIH07XG4gIH1cblxuICBsb2NhbChyZWY6IEFTVHYyLkxvY2FsVmFyUmVmZXJlbmNlKTogU2VyaWFsaXplZExvY2FsVmFyUmVmZXJlbmNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ0xvY2FsJyxcbiAgICAgIGxvYzogcmVmLmxvYy5zZXJpYWxpemUoKSxcbiAgICAgIG5hbWU6IHJlZi5uYW1lLFxuICAgIH07XG4gIH1cblxuICBzZWxmKHJlZjogQVNUdjIuVGhpc1JlZmVyZW5jZSk6IFNlcmlhbGl6ZWRUaGlzUmVmZXJlbmNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1RoaXMnLFxuICAgICAgbG9jOiByZWYubG9jLnNlcmlhbGl6ZSgpLFxuICAgIH07XG4gIH1cbn1cblxuY29uc3QgUkVGID0gbmV3IFJlZlNlcmlhbGl6ZXIoKTtcblxuZXhwb3J0IGNsYXNzIEV4cHJTZXJpYWxpemVyIHtcbiAgbGl0ZXJhbChsaXRlcmFsOiBBU1R2Mi5MaXRlcmFsRXhwcmVzc2lvbik6IFNlcmlhbGl6ZWRMaXRlcmFsRXhwcmVzc2lvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdMaXRlcmFsJyxcbiAgICAgIGxvYzogbGl0ZXJhbC5sb2Muc2VyaWFsaXplKCksXG4gICAgICB2YWx1ZTogbGl0ZXJhbC52YWx1ZSxcbiAgICB9O1xuICB9XG5cbiAgcGF0aChwYXRoOiBBU1R2Mi5QYXRoRXhwcmVzc2lvbik6IFNlcmlhbGl6ZWRQYXRoRXhwcmVzc2lvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdQYXRoJyxcbiAgICAgIGxvYzogcGF0aC5sb2Muc2VyaWFsaXplKCksXG4gICAgICByZWY6IHZpc2l0LnJlZihwYXRoLnJlZiksXG4gICAgICB0YWlsOiBwYXRoLnRhaWwubWFwKCh0KSA9PiB0LnNlcmlhbGl6ZSgpKSxcbiAgICB9O1xuICB9XG5cbiAgY2FsbChjYWxsOiBBU1R2Mi5DYWxsRXhwcmVzc2lvbik6IFNlcmlhbGl6ZWRDYWxsRXhwcmVzc2lvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdDYWxsJyxcbiAgICAgIGxvYzogY2FsbC5sb2Muc2VyaWFsaXplKCksXG4gICAgICBjYWxsZWU6IHZpc2l0LmV4cHIoY2FsbC5jYWxsZWUpLFxuICAgICAgYXJnczogQVJHUy5hcmdzKGNhbGwuYXJncyksXG4gICAgfTtcbiAgfVxuXG4gIGRlcHJlY2F0ZWRDYWxsKGNhbGw6IEFTVHYyLkRlcHJlY2F0ZWRDYWxsRXhwcmVzc2lvbik6IFNlcmlhbGl6ZWREZXByZWNhdGVkQ2FsbEV4cHJlc3Npb24ge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnRGVwcmVjYXRlZENhbGwnLFxuICAgICAgbG9jOiBjYWxsLmxvYy5zZXJpYWxpemUoKSxcbiAgICAgIGNhbGxlZTogUkVGLmZyZWUoY2FsbC5jYWxsZWUpLFxuICAgIH07XG4gIH1cblxuICBpbnRlcnBvbGF0ZShpbnRlcnBvbGF0ZTogQVNUdjIuSW50ZXJwb2xhdGVFeHByZXNzaW9uKTogU2VyaWFsaXplZEludGVycG9sYXRlRXhwcmVzc2lvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdJbnRlcnBvbGF0ZScsXG4gICAgICBsb2M6IGludGVycG9sYXRlLmxvYy5zZXJpYWxpemUoKSxcbiAgICAgIHBhcnRzOiBpbnRlcnBvbGF0ZS5wYXJ0cy5tYXAoKHApID0+IHZpc2l0LmV4cHIocCkpIGFzIFByZXNlbnRBcnJheTxTZXJpYWxpemVkRXhwcmVzc2lvbk5vZGU+LFxuICAgIH07XG4gIH1cbn1cblxuY29uc3QgRVhQUiA9IG5ldyBFeHByU2VyaWFsaXplcigpO1xuXG5jbGFzcyBBcmdzU2VyaWFsaXplciB7XG4gIGFyZ3MoYXJnczogQVNUdjIuQXJncyk6IFNlcmlhbGl6ZWRBcmdzIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9jOiBhcmdzLmxvYy5zZXJpYWxpemUoKSxcbiAgICAgIHBvc2l0aW9uYWw6IHRoaXMucG9zaXRpb25hbChhcmdzLnBvc2l0aW9uYWwpLFxuICAgICAgbmFtZWQ6IHRoaXMubmFtZWQoYXJncy5uYW1lZCksXG4gICAgfTtcbiAgfVxuXG4gIHBvc2l0aW9uYWwocG9zaXRpb25hbDogQVNUdjIuUG9zaXRpb25hbEFyZ3VtZW50cyk6IFNlcmlhbGl6ZWRQb3NpdGlvbmFsIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9jOiBwb3NpdGlvbmFsLmxvYy5zZXJpYWxpemUoKSxcbiAgICAgIGV4cHJzOiBwb3NpdGlvbmFsLmV4cHJzLm1hcCgocCkgPT4gdmlzaXQuZXhwcihwKSksXG4gICAgfTtcbiAgfVxuXG4gIG5hbWVkKG5hbWVkOiBBU1R2Mi5OYW1lZEFyZ3VtZW50cyk6IFNlcmlhbGl6ZWROYW1lZCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvYzogbmFtZWQubG9jLnNlcmlhbGl6ZSgpLFxuICAgICAgZW50cmllczogbmFtZWQuZW50cmllcy5tYXAoKGUpID0+IHRoaXMuZW50cnkoZSkpLFxuICAgIH07XG4gIH1cblxuICBlbnRyeShlbnRyeTogQVNUdjIuTmFtZWRBcmd1bWVudCk6IFNlcmlhbGl6ZWROYW1lZEFyZ3VtZW50IHtcbiAgICByZXR1cm4gW2VudHJ5Lm5hbWUuc2VyaWFsaXplKCksIHZpc2l0LmV4cHIoZW50cnkudmFsdWUpXTtcbiAgfVxufVxuXG5jb25zdCBBUkdTID0gbmV3IEFyZ3NTZXJpYWxpemVyKCk7XG5cbmV4cG9ydCBjbGFzcyBDb250ZW50U2VyaWFsaXplciB7XG4gIGFwcGVuZChub2RlOiBBU1R2Mi5BcHBlbmRDb250ZW50KTogU2VyaWFsaXplZEFwcGVuZENvbnRlbnQge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnQXBwZW5kJyxcbiAgICAgIGxvYzogbm9kZS5sb2Muc2VyaWFsaXplKCksXG4gICAgICB2YWx1ZTogdmlzaXQuZXhwcihub2RlLnZhbHVlKSxcbiAgICAgIHRydXN0aW5nOiBub2RlLnRydXN0aW5nLFxuICAgIH07XG4gIH1cblxuICBnbGltbWVyQ29tbWVudChub2RlOiBBU1R2Mi5HbGltbWVyQ29tbWVudCk6IFNlcmlhbGl6ZWRHbGltbWVyQ29tbWVudCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdHbGltbWVyQ29tbWVudCcsXG4gICAgICBsb2M6IG5vZGUubG9jLnNlcmlhbGl6ZSgpLFxuICAgICAgdGV4dDogbm9kZS50ZXh0LnNlcmlhbGl6ZSgpLFxuICAgIH07XG4gIH1cblxuICBodG1sQ29tbWVudChub2RlOiBBU1R2Mi5IdG1sQ29tbWVudCk6IFNlcmlhbGl6ZWRIdG1sQ29tbWVudCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdIdG1sQ29tbWVudCcsXG4gICAgICBsb2M6IG5vZGUubG9jLnNlcmlhbGl6ZSgpLFxuICAgICAgdGV4dDogbm9kZS50ZXh0LnNlcmlhbGl6ZSgpLFxuICAgIH07XG4gIH1cblxuICBodG1sVGV4dChub2RlOiBBU1R2Mi5IdG1sVGV4dCk6IFNlcmlhbGl6ZWRIdG1sVGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdIdG1sVGV4dCcsXG4gICAgICBsb2M6IG5vZGUubG9jLnNlcmlhbGl6ZSgpLFxuICAgICAgY2hhcnM6IG5vZGUuY2hhcnMsXG4gICAgfTtcbiAgfVxuXG4gIGludm9rZUJsb2NrKG5vZGU6IEFTVHYyLkludm9rZUJsb2NrKTogU2VyaWFsaXplZEludm9rZUJsb2NrIHtcbiAgICBsZXQgYXJncyA9IEFSR1MuYXJncyhub2RlLmFyZ3MpO1xuICAgIGxldCBjYWxsZWUgPSB2aXNpdC5leHByKG5vZGUuY2FsbGVlKTtcblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnSW52b2tlQmxvY2snLFxuICAgICAgbG9jOiBub2RlLmxvYy5zZXJpYWxpemUoKSxcbiAgICAgIGFyZ3MsXG4gICAgICBjYWxsZWUsXG4gICAgICBibG9ja3M6IElOVEVSTkFMLm5hbWVkQmxvY2tzKG5vZGUuYmxvY2tzKSxcbiAgICB9O1xuICB9XG5cbiAgaW52b2tlQ29tcG9uZW50KG5vZGU6IEFTVHYyLkludm9rZUNvbXBvbmVudCk6IFNlcmlhbGl6ZWRJbnZva2VDb21wb25lbnQge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnSW52b2tlQ29tcG9uZW50JyxcbiAgICAgIGxvYzogbm9kZS5sb2Muc2VyaWFsaXplKCksXG4gICAgICBjYWxsZWU6IHZpc2l0LmV4cHIobm9kZS5jYWxsZWUpLFxuICAgICAgYmxvY2tzOiBJTlRFUk5BTC5uYW1lZEJsb2Nrcyhub2RlLmJsb2NrcyksXG4gICAgICBhdHRyczogbm9kZS5hdHRycy5tYXAoKGEpID0+IHZpc2l0LmF0dHIoYSkpLFxuICAgICAgY29tcG9uZW50QXJnczogbm9kZS5jb21wb25lbnRBcmdzLm1hcCgoYSkgPT4gQVRUUlMuYXJnKGEpKSxcbiAgICAgIG1vZGlmaWVyczogbm9kZS5tb2RpZmllcnMubWFwKChtKSA9PiBBVFRSUy5tb2RpZmllcihtKSksXG4gICAgfTtcbiAgfVxuXG4gIHNpbXBsZUVsZW1lbnQobm9kZTogQVNUdjIuU2ltcGxlRWxlbWVudCk6IFNlcmlhbGl6ZWRTaW1wbGVFbGVtZW50IHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1NpbXBsZUVsZW1lbnQnLFxuICAgICAgbG9jOiBub2RlLmxvYy5zZXJpYWxpemUoKSxcbiAgICAgIHRhZzogbm9kZS50YWcuc2VyaWFsaXplKCksXG4gICAgICBib2R5OiBub2RlLmJvZHkubWFwKChiKSA9PiB2aXNpdC5jb250ZW50KGIpKSxcbiAgICAgIGF0dHJzOiBub2RlLmF0dHJzLm1hcCgoYSkgPT4gdmlzaXQuYXR0cihhKSksXG4gICAgICBjb21wb25lbnRBcmdzOiBub2RlLmNvbXBvbmVudEFyZ3MubWFwKChhKSA9PiBBVFRSUy5hcmcoYSkpLFxuICAgICAgbW9kaWZpZXJzOiBub2RlLm1vZGlmaWVycy5tYXAoKG0pID0+IEFUVFJTLm1vZGlmaWVyKG0pKSxcbiAgICB9O1xuICB9XG59XG5cbmNvbnN0IENPTlRFTlQgPSBuZXcgQ29udGVudFNlcmlhbGl6ZXIoKTtcblxuY2xhc3MgQXR0ckJsb2NrU2VyaWFsaXplciB7XG4gIG1vZGlmaWVyKG5vZGU6IEFTVHYyLkVsZW1lbnRNb2RpZmllcik6IFNlcmlhbGl6ZWRFbGVtZW50TW9kaWZpZXIge1xuICAgIHJldHVybiB7XG4gICAgICBsb2M6IG5vZGUubG9jLnNlcmlhbGl6ZSgpLFxuICAgICAgY2FsbGVlOiB2aXNpdC5leHByKG5vZGUuY2FsbGVlKSxcbiAgICAgIGFyZ3M6IEFSR1MuYXJncyhub2RlLmFyZ3MpLFxuICAgIH07XG4gIH1cblxuICBhcmcobm9kZTogQVNUdjIuQ29tcG9uZW50QXJnKTogU2VyaWFsaXplZEF0dHJPckFyZyB7XG4gICAgcmV0dXJuIHRoaXMuYW55QXR0cihub2RlKTtcbiAgfVxuXG4gIGFueUF0dHIobm9kZTogQVNUdjIuQ29tcG9uZW50QXJnIHwgQVNUdjIuSHRtbEF0dHIpOiBTZXJpYWxpemVkQXR0ck9yQXJnIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9jOiBub2RlLmxvYy5zZXJpYWxpemUoKSxcbiAgICAgIG5hbWU6IG5vZGUubmFtZS5zZXJpYWxpemUoKSxcbiAgICAgIHZhbHVlOiB2aXNpdC5leHByKG5vZGUudmFsdWUpLFxuICAgICAgdHJ1c3Rpbmc6IG5vZGUudHJ1c3RpbmcsXG4gICAgfTtcbiAgfVxufVxuXG5jb25zdCBBVFRSUyA9IG5ldyBBdHRyQmxvY2tTZXJpYWxpemVyKCk7XG5cbmNsYXNzIEludGVybmFsU2VyaWFsaXplciB7XG4gIGJsb2NrKG5vZGU6IEFTVHYyLkJsb2NrKTogU2VyaWFsaXplZEJsb2NrIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9jOiBub2RlLmxvYy5zZXJpYWxpemUoKSxcbiAgICAgIGJvZHk6IG5vZGUuYm9keS5tYXAoKGIpID0+IHZpc2l0LmNvbnRlbnQoYikpLFxuICAgICAgdGFibGU6IG5vZGUuc2NvcGUubG9jYWxzLFxuICAgIH07XG4gIH1cblxuICBuYW1lZEJsb2NrKG5vZGU6IEFTVHYyLk5hbWVkQmxvY2spOiBTZXJpYWxpemVkTmFtZWRCbG9jayB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IG5vZGUubmFtZS5zZXJpYWxpemUoKSxcbiAgICAgIGJsb2NrOiBJTlRFUk5BTC5ibG9jayhub2RlLmJsb2NrKSxcbiAgICB9O1xuICB9XG5cbiAgbmFtZWRCbG9ja3Mobm9kZTogQVNUdjIuTmFtZWRCbG9ja3MpOiBTZXJpYWxpemVkTmFtZWRCbG9ja3Mge1xuICAgIHJldHVybiB7XG4gICAgICBibG9ja3M6IG5vZGUuYmxvY2tzLm1hcCgoYikgPT4gSU5URVJOQUwubmFtZWRCbG9jayhiKSksXG4gICAgICBsb2M6IG5vZGUubG9jLnNlcmlhbGl6ZSgpLFxuICAgIH07XG4gIH1cbn1cblxuY29uc3QgSU5URVJOQUwgPSBuZXcgSW50ZXJuYWxTZXJpYWxpemVyKCk7XG5cbmNvbnN0IHZpc2l0ID0ge1xuICBleHByKGV4cHI6IEFTVHYyLkV4cHJlc3Npb25Ob2RlKTogU2VyaWFsaXplZEV4cHJlc3Npb25Ob2RlIHtcbiAgICBzd2l0Y2ggKGV4cHIudHlwZSkge1xuICAgICAgY2FzZSAnTGl0ZXJhbCc6XG4gICAgICAgIHJldHVybiBFWFBSLmxpdGVyYWwoZXhwcik7XG4gICAgICBjYXNlICdQYXRoJzpcbiAgICAgICAgcmV0dXJuIEVYUFIucGF0aChleHByKTtcbiAgICAgIGNhc2UgJ0NhbGwnOlxuICAgICAgICByZXR1cm4gRVhQUi5jYWxsKGV4cHIpO1xuICAgICAgY2FzZSAnRGVwcmVjYXRlZENhbGwnOlxuICAgICAgICByZXR1cm4gRVhQUi5kZXByZWNhdGVkQ2FsbChleHByKTtcbiAgICAgIGNhc2UgJ0ludGVycG9sYXRlJzpcbiAgICAgICAgcmV0dXJuIEVYUFIuaW50ZXJwb2xhdGUoZXhwcik7XG4gICAgfVxuICB9LFxuXG4gIGF0dHIobm9kZTogQVNUdjIuSHRtbE9yU3BsYXRBdHRyKTogU2VyaWFsaXplZEh0bWxPclNwbGF0QXR0ciB7XG4gICAgaWYgKG5vZGUudHlwZSA9PT0gJ1NwbGF0QXR0cicpIHtcbiAgICAgIHJldHVybiBuZXcgU291cmNlU2xpY2UoeyBsb2M6IG5vZGUubG9jLCBjaGFyczogJy4uLmF0dHJpYnV0ZXMnIH0pLnNlcmlhbGl6ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gQVRUUlMuYW55QXR0cihub2RlKTtcbiAgICB9XG4gIH0sXG5cbiAgcmVmKHJlZjogQVNUdjIuVmFyaWFibGVSZWZlcmVuY2UpOiBTZXJpYWxpemVkVmFyaWFibGVSZWZlcmVuY2Uge1xuICAgIHN3aXRjaCAocmVmLnR5cGUpIHtcbiAgICAgIGNhc2UgJ0FyZyc6XG4gICAgICAgIHJldHVybiBSRUYuYXJnKHJlZik7XG4gICAgICBjYXNlICdGcmVlJzpcbiAgICAgICAgcmV0dXJuIFJFRi5mcmVlKHJlZik7XG4gICAgICBjYXNlICdMb2NhbCc6XG4gICAgICAgIHJldHVybiBSRUYubG9jYWwocmVmKTtcbiAgICAgIGNhc2UgJ1RoaXMnOlxuICAgICAgICByZXR1cm4gUkVGLnNlbGYocmVmKTtcbiAgICB9XG4gIH0sXG5cbiAgY29udGVudChub2RlOiBBU1R2Mi5Db250ZW50Tm9kZSk6IFNlcmlhbGl6ZWRDb250ZW50Tm9kZSB7XG4gICAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICAgIGNhc2UgJ0FwcGVuZENvbnRlbnQnOlxuICAgICAgICByZXR1cm4gQ09OVEVOVC5hcHBlbmQobm9kZSk7XG4gICAgICBjYXNlICdHbGltbWVyQ29tbWVudCc6XG4gICAgICAgIHJldHVybiBDT05URU5ULmdsaW1tZXJDb21tZW50KG5vZGUpO1xuICAgICAgY2FzZSAnSHRtbENvbW1lbnQnOlxuICAgICAgICByZXR1cm4gQ09OVEVOVC5odG1sQ29tbWVudChub2RlKTtcbiAgICAgIGNhc2UgJ0h0bWxUZXh0JzpcbiAgICAgICAgcmV0dXJuIENPTlRFTlQuaHRtbFRleHQobm9kZSk7XG4gICAgICBjYXNlICdJbnZva2VCbG9jayc6XG4gICAgICAgIHJldHVybiBDT05URU5ULmludm9rZUJsb2NrKG5vZGUpO1xuICAgICAgY2FzZSAnSW52b2tlQ29tcG9uZW50JzpcbiAgICAgICAgcmV0dXJuIENPTlRFTlQuaW52b2tlQ29tcG9uZW50KG5vZGUpO1xuICAgICAgY2FzZSAnU2ltcGxlRWxlbWVudCc6XG4gICAgICAgIHJldHVybiBDT05URU5ULnNpbXBsZUVsZW1lbnQobm9kZSk7XG4gICAgfVxuICB9LFxufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=