"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Parser = void 0; var _util = require("@glimmer/util"); var _simpleHtmlTokenizer = require("simple-html-tokenizer"); function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var Parser = /*#__PURE__*/function () { function Parser(source, entityParser, mode) { if (entityParser === void 0) { entityParser = new _simpleHtmlTokenizer.EntityParser(_simpleHtmlTokenizer.HTML5NamedCharRefs); } if (mode === void 0) { mode = 'precompile'; } this.elementStack = []; this.currentAttribute = null; this.currentNode = null; this.source = source; this.lines = source.source.split(/(?:\r\n?|\n)/g); this.tokenizer = new _simpleHtmlTokenizer.EventedTokenizer(this, entityParser, mode); } var _proto = Parser.prototype; _proto.offset = function offset() { var _this$tokenizer = this.tokenizer, line = _this$tokenizer.line, column = _this$tokenizer.column; return this.source.offsetFor(line, column); }; _proto.pos = function pos(_ref) { var line = _ref.line, column = _ref.column; return this.source.offsetFor(line, column); }; _proto.finish = function finish(node) { return (0, _util.assign)({}, node, { loc: node.loc.until(this.offset()) }); // node.loc = node.loc.withEnd(end); }; _proto.acceptTemplate = function acceptTemplate(node) { return this[node.type](node); }; _proto.acceptNode = function acceptNode(node) { return this[node.type](node); }; _proto.currentElement = function currentElement() { return this.elementStack[this.elementStack.length - 1]; }; _proto.sourceForNode = function sourceForNode(node, endNode) { var firstLine = node.loc.start.line - 1; var currentLine = firstLine - 1; var firstColumn = node.loc.start.column; var string = []; var line; var lastLine; var lastColumn; if (endNode) { lastLine = endNode.loc.end.line - 1; lastColumn = endNode.loc.end.column; } else { lastLine = node.loc.end.line - 1; lastColumn = node.loc.end.column; } while (currentLine < lastLine) { currentLine++; line = this.lines[currentLine]; if (currentLine === firstLine) { if (firstLine === lastLine) { string.push(line.slice(firstColumn, lastColumn)); } else { string.push(line.slice(firstColumn)); } } else if (currentLine === lastLine) { string.push(line.slice(0, lastColumn)); } else { string.push(line); } } return string.join('\n'); }; _createClass(Parser, [{ key: "currentAttr", get: function get() { return this.currentAttribute; } }, { key: "currentTag", get: function get() { var node = this.currentNode; false && (0, _util.assert)(node && (node.type === 'StartTag' || node.type === 'EndTag'), 'expected tag'); return node; } }, { key: "currentStartTag", get: function get() { var node = this.currentNode; false && (0, _util.assert)(node && node.type === 'StartTag', 'expected start tag'); return node; } }, { key: "currentEndTag", get: function get() { var node = this.currentNode; false && (0, _util.assert)(node && node.type === 'EndTag', 'expected end tag'); return node; } }, { key: "currentComment", get: function get() { var node = this.currentNode; false && (0, _util.assert)(node && node.type === 'CommentStatement', 'expected a comment'); return node; } }, { key: "currentData", get: function get() { var node = this.currentNode; false && (0, _util.assert)(node && node.type === 'TextNode', 'expected a text node'); return node; } }]); return Parser; }(); exports.Parser = Parser; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3N5bnRheC9saWIvcGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDQTs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBc0NBLElBQU0sTUFBTixHQUFBLGFBQUEsWUFBQTtBQWVFLFdBQUEsTUFBQSxDQUFBLE1BQUEsRUFBQSxZQUFBLEVBQUEsSUFBQSxFQUcrQztBQUFBLFFBRDdDLFlBQzZDLEtBQUEsS0FBQSxDQUFBLEVBQUE7QUFEN0MsTUFBQSxZQUM2QyxHQUQ5QixJQUFBLGlDQUFBLENBRmpCLHVDQUVpQixDQUFmO0FBQzZDOztBQUFBLFFBQTdDLElBQTZDLEtBQUEsS0FBQSxDQUFBLEVBQUE7QUFBN0MsTUFBQSxJQUE2QyxHQUgvQyxZQUdFO0FBQTZDOztBQWpCckMsU0FBQSxZQUFBLEdBQUEsRUFBQTtBQUdILFNBQUEsZ0JBQUEsR0FBQSxJQUFBO0FBQ0EsU0FBQSxXQUFBLEdBQUEsSUFBQTtBQWVMLFNBQUEsTUFBQSxHQUFBLE1BQUE7QUFDQSxTQUFBLEtBQUEsR0FBYSxNQUFNLENBQU4sTUFBQSxDQUFBLEtBQUEsQ0FBYixlQUFhLENBQWI7QUFDQSxTQUFBLFNBQUEsR0FBaUIsSUFBQSxxQ0FBQSxDQUFBLElBQUEsRUFBQSxZQUFBLEVBQWpCLElBQWlCLENBQWpCO0FBQ0Q7O0FBdkJILE1BQUEsTUFBQSxHQUFBLE1BQUEsQ0FBQSxTQUFBOztBQUFBLEVBQUEsTUFBQSxDQUFBLE1BQUEsR0F5QkUsU0FBQSxNQUFBLEdBQU07QUFBQSxRQUFBLGVBQUEsR0FDbUIsS0FEbkIsU0FBQTtBQUFBLFFBQ0EsSUFEQSxHQUFBLGVBQUEsQ0FBQSxJQUFBO0FBQUEsUUFDUSxNQURSLEdBQUEsZUFBQSxDQUFBLE1BQUE7QUFFSixXQUFPLEtBQUEsTUFBQSxDQUFBLFNBQUEsQ0FBQSxJQUFBLEVBQVAsTUFBTyxDQUFQO0FBM0JKLEdBQUE7O0FBQUEsRUFBQSxNQUFBLENBQUEsR0FB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V0FBQTtBQURnQixlQUVoQixrQkFBTyxJQUFJLElBQUksSUFBSSxDQUFKLElBQUEsS0FBVCxrQkFBTixFQUZnQixvQkFFaEIsQ0FGZ0I7QUFHaEIsYUFBQSxJQUFBO0FBQ0Q7QUEzR0gsR0FBQSxFQUFBO0FBQUEsSUFBQSxHQUFBLEVBQUEsYUFBQTtBQUFBLElBQUEsR0FBQSxFQUFBLFNBQUEsR0FBQSxHQTZHaUI7QUFDYixVQUFJLElBQUksR0FBRyxLQUFYLFdBQUE7QUFEYSxlQUViLGtCQUFPLElBQUksSUFBSSxJQUFJLENBQUosSUFBQSxLQUFULFVBQU4sRUFGYSxzQkFFYixDQUZhO0FBR2IsYUFBQSxJQUFBO0FBQ0Q7QUFqSEgsR0FBQSxDQUFBLENBQUE7O0FBQUEsU0FBQSxNQUFBO0FBQUEsQ0FBQSxFQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBhc3NlcnQsIGFzc2lnbiwgZXhwZWN0IH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQge1xuICBFbnRpdHlQYXJzZXIsXG4gIEV2ZW50ZWRUb2tlbml6ZXIsXG4gIEhUTUw1TmFtZWRDaGFyUmVmcyBhcyBuYW1lZENoYXJSZWZzLFxufSBmcm9tICdzaW1wbGUtaHRtbC10b2tlbml6ZXInO1xuXG5pbXBvcnQgeyBTb3VyY2VQb3NpdGlvbiB9IGZyb20gJy4vc291cmNlL2xvY2F0aW9uJztcbmltcG9ydCB7IFNvdXJjZSB9IGZyb20gJy4vc291cmNlL3NvdXJjZSc7XG5pbXBvcnQgeyBTb3VyY2VPZmZzZXQsIFNvdXJjZVNwYW4gfSBmcm9tICcuL3NvdXJjZS9zcGFuJztcbmltcG9ydCAqIGFzIEFTVHYxIGZyb20gJy4vdjEvYXBpJztcbmltcG9ydCAqIGFzIEhCUyBmcm9tICcuL3YxL2hhbmRsZWJhcnMtYXN0JztcblxuZXhwb3J0IHR5cGUgUGFyc2VyTm9kZUJ1aWxkZXI8TiBleHRlbmRzIHsgbG9jOiBTb3VyY2VTcGFuIH0+ID0gT21pdDxOLCAnbG9jJz4gJiB7XG4gIGxvYzogU291cmNlT2Zmc2V0O1xufTtcblxuZXhwb3J0IHR5cGUgRWxlbWVudCA9IEFTVHYxLlRlbXBsYXRlIHwgQVNUdjEuQmxvY2sgfCBBU1R2MS5FbGVtZW50Tm9kZTtcblxuZXhwb3J0IGludGVyZmFjZSBUYWc8VCBleHRlbmRzICdTdGFydFRhZycgfCAnRW5kVGFnJz4ge1xuICByZWFkb25seSB0eXBlOiBUO1xuICBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGF0dHJpYnV0ZXM6IEFTVHYxLkF0dHJOb2RlW107XG4gIHJlYWRvbmx5IG1vZGlmaWVyczogQVNUdjEuRWxlbWVudE1vZGlmaWVyU3RhdGVtZW50W107XG4gIHJlYWRvbmx5IGNvbW1lbnRzOiBBU1R2MS5NdXN0YWNoZUNvbW1lbnRTdGF0ZW1lbnRbXTtcbiAgc2VsZkNsb3Npbmc6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGxvYzogU291cmNlU3Bhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdHRyaWJ1dGUge1xuICBuYW1lOiBzdHJpbmc7XG4gIGN1cnJlbnRQYXJ0OiBBU1R2MS5UZXh0Tm9kZSB8IG51bGw7XG4gIHBhcnRzOiAoQVNUdjEuTXVzdGFjaGVTdGF0ZW1lbnQgfCBBU1R2MS5UZXh0Tm9kZSlbXTtcbiAgaXNRdW90ZWQ6IGJvb2xlYW47XG4gIGlzRHluYW1pYzogYm9vbGVhbjtcbiAgc3RhcnQ6IFNvdXJjZU9mZnNldDtcbiAgdmFsdWVTcGFuOiBTb3VyY2VTcGFuO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUGFyc2VyIHtcbiAgcHJvdGVjdGVkIGVsZW1lbnRTdGFjazogRWxlbWVudFtdID0gW107XG4gIHByaXZhdGUgbGluZXM6IHN0cmluZ1tdO1xuICByZWFkb25seSBzb3VyY2U6IFNvdXJjZTtcbiAgcHVibGljIGN1cnJlbnRBdHRyaWJ1dGU6IE9wdGlvbjxBdHRyaWJ1dGU+ID0gbnVsbDtcbiAgcHVibGljIGN1cnJlbnROb2RlOiBPcHRpb248XG4gICAgUmVhZG9ubHk8XG4gICAgICB8IFBhcnNlck5vZGVCdWlsZGVyPEFTVHYxLkNvbW1lbnRTdGF0ZW1lbnQ+XG4gICAgICB8IEFTVHYxLlRleHROb2RlXG4gICAgICB8IFBhcnNlck5vZGVCdWlsZGVyPFRhZzwnU3RhcnRUYWcnPj5cbiAgICAgIHwgUGFyc2VyTm9kZUJ1aWxkZXI8VGFnPCdFbmRUYWcnPj5cbiAgICA+XG4gID4gPSBudWxsO1xuICBwdWJsaWMgdG9rZW5pemVyOiBFdmVudGVkVG9rZW5pemVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNvdXJjZTogU291cmNlLFxuICAgIGVudGl0eVBhcnNlciA9IG5ldyBFbnRpdHlQYXJzZXIobmFtZWRDaGFyUmVmcyksXG4gICAgbW9kZTogJ3ByZWNvbXBpbGUnIHwgJ2NvZGVtb2QnID0gJ3ByZWNvbXBpbGUnXG4gICkge1xuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgIHRoaXMubGluZXMgPSBzb3VyY2Uuc291cmNlLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgdGhpcy50b2tlbml6ZXIgPSBuZXcgRXZlbnRlZFRva2VuaXplcih0aGlzLCBlbnRpdHlQYXJzZXIsIG1vZGUpO1xuICB9XG5cbiAgb2Zmc2V0KCk6IFNvdXJjZU9mZnNldCB7XG4gICAgbGV0IHsgbGluZSwgY29sdW1uIH0gPSB0aGlzLnRva2VuaXplcjtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2Uub2Zmc2V0Rm9yKGxpbmUsIGNvbHVtbik7XG4gIH1cblxuICBwb3MoeyBsaW5lLCBjb2x1bW4gfTogU291cmNlUG9zaXRpb24pOiBTb3VyY2VPZmZzZXQge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZS5vZmZzZXRGb3IobGluZSwgY29sdW1uKTtcbiAgfVxuXG4gIGZpbmlzaDxUIGV4dGVuZHMgeyBsb2M6IFNvdXJjZVNwYW4gfT4obm9kZTogUGFyc2VyTm9kZUJ1aWxkZXI8VD4pOiBUIHtcbiAgICByZXR1cm4gKGFzc2lnbih7fSwgbm9kZSwge1xuICAgICAgbG9jOiBub2RlLmxvYy51bnRpbCh0aGlzLm9mZnNldCgpKSxcbiAgICB9IGFzIGNvbnN0KSBhcyB1bmtub3duKSBhcyBUO1xuXG4gICAgLy8gbm9kZS5sb2MgPSBub2RlLmxvYy53aXRoRW5kKGVuZCk7XG4gIH1cblxuICBhYnN0cmFjdCBQcm9ncmFtKG5vZGU6IEhCUy5Qcm9ncmFtKTogSEJTLk91dHB1dDwnUHJvZ3JhbSc+O1xuICBhYnN0cmFjdCBNdXN0YWNoZVN0YXRlbWVudChub2RlOiBIQlMuTXVzdGFjaGVTdGF0ZW1lbnQpOiBIQlMuT3V0cHV0PCdNdXN0YWNoZVN0YXRlbWVudCc+O1xuICBhYnN0cmFjdCBEZWNvcmF0b3Iobm9kZTogSEJTLkRlY29yYXRvcik6IEhCUy5PdXRwdXQ8J0RlY29yYXRvcic+O1xuICBhYnN0cmFjdCBCbG9ja1N0YXRlbWVudChub2RlOiBIQlMuQmxvY2tTdGF0ZW1lbnQpOiBIQlMuT3V0cHV0PCdCbG9ja1N0YXRlbWVudCc+O1xuICBhYnN0cmFjdCBEZWNvcmF0b3JCbG9jayhub2RlOiBIQlMuRGVjb3JhdG9yQmxvY2spOiBIQlMuT3V0cHV0PCdEZWNvcmF0b3JCbG9jayc+O1xuICBhYnN0cmFjdCBQYXJ0aWFsU3RhdGVtZW50KG5vZGU6IEhCUy5QYXJ0aWFsU3RhdGVtZW50KTogSEJTLk91dHB1dDwnUGFydGlhbFN0YXRlbWVudCc+O1xuICBhYnN0cmFjdCBQYXJ0aWFsQmxvY2tTdGF0ZW1lbnQoXG4gICAgbm9kZTogSEJTLlBhcnRpYWxCbG9ja1N0YXRlbWVudFxuICApOiBIQlMuT3V0cHV0PCdQYXJ0aWFsQmxvY2tTdGF0ZW1lbnQnPjtcbiAgYWJzdHJhY3QgQ29udGVudFN0YXRlbWVudChub2RlOiBIQlMuQ29udGVudFN0YXRlbWVudCk6IEhCUy5PdXRwdXQ8J0NvbnRlbnRTdGF0ZW1lbnQnPjtcbiAgYWJzdHJhY3QgQ29tbWVudFN0YXRlbWVudChub2RlOiBIQlMuQ29tbWVudFN0YXRlbWVudCk6IEhCUy5PdXRwdXQ8J0NvbW1lbnRTdGF0ZW1lbnQnPjtcbiAgYWJzdHJhY3QgU3ViRXhwcmVzc2lvbihub2RlOiBIQlMuU3ViRXhwcmVzc2lvbik6IEhCUy5PdXRwdXQ8J1N1YkV4cHJlc3Npb24nPjtcbiAgYWJzdHJhY3QgUGF0aEV4cHJlc3Npb24obm9kZTogSEJTLlBhdGhFeHByZXNzaW9uKTogSEJTLk91dHB1dDwnUGF0aEV4cHJlc3Npb24nPjtcbiAgYWJzdHJhY3QgU3RyaW5nTGl0ZXJhbChub2RlOiBIQlMuU3RyaW5nTGl0ZXJhbCk6IEhCUy5PdXRwdXQ8J1N0cmluZ0xpdGVyYWwnPjtcbiAgYWJzdHJhY3QgQm9vbGVhbkxpdGVyYWwobm9kZTogSEJTLkJvb2xlYW5MaXRlcmFsKTogSEJTLk91dHB1dDwnQm9vbGVhbkxpdGVyYWwnPjtcbiAgYWJzdHJhY3QgTnVtYmVyTGl0ZXJhbChub2RlOiBIQlMuTnVtYmVyTGl0ZXJhbCk6IEhCUy5PdXRwdXQ8J051bWJlckxpdGVyYWwnPjtcbiAgYWJzdHJhY3QgVW5kZWZpbmVkTGl0ZXJhbChub2RlOiBIQlMuVW5kZWZpbmVkTGl0ZXJhbCk6IEhCUy5PdXRwdXQ8J1VuZGVmaW5lZExpdGVyYWwnPjtcbiAgYWJzdHJhY3QgTnVsbExpdGVyYWwobm9kZTogSEJTLk51bGxMaXRlcmFsKTogSEJTLk91dHB1dDwnTnVsbExpdGVyYWwnPjtcblxuICBhYnN0cmFjdCByZXNldCgpOiB2b2lkO1xuICBhYnN0cmFjdCBmaW5pc2hEYXRhKCk6IHZvaWQ7XG4gIGFic3RyYWN0IHRhZ09wZW4oKTogdm9pZDtcbiAgYWJzdHJhY3QgYmVnaW5EYXRhKCk6IHZvaWQ7XG4gIGFic3RyYWN0IGFwcGVuZFRvRGF0YShjaGFyOiBzdHJpbmcpOiB2b2lkO1xuICBhYnN0cmFjdCBiZWdpblN0YXJ0VGFnKCk6IHZvaWQ7XG4gIGFic3RyYWN0IGFwcGVuZFRvVGFnTmFtZShjaGFyOiBzdHJpbmcpOiB2b2lkO1xuICBhYnN0cmFjdCBiZWdpbkF0dHJpYnV0ZSgpOiB2b2lkO1xuICBhYnN0cmFjdCBhcHBlbmRUb0F0dHJpYnV0ZU5hbWUoY2hhcjogc3RyaW5nKTogdm9pZDtcbiAgYWJzdHJhY3QgYmVnaW5BdHRyaWJ1dGVWYWx1ZShxdW90ZWQ6IGJvb2xlYW4pOiB2b2lkO1xuICBhYnN0cmFjdCBhcHBlbmRUb0F0dHJpYnV0ZVZhbHVlKGNoYXI6IHN0cmluZyk6IHZvaWQ7XG4gIGFic3RyYWN0IGZpbmlzaEF0dHJpYnV0ZVZhbHVlKCk6IHZvaWQ7XG4gIGFic3RyYWN0IG1hcmtUYWdBc1NlbGZDbG9zaW5nKCk6IHZvaWQ7XG4gIGFic3RyYWN0IGJlZ2luRW5kVGFnKCk6IHZvaWQ7XG4gIGFic3RyYWN0IGZpbmlzaFRhZygpOiB2b2lkO1xuICBhYnN0cmFjdCBiZWdpbkNvbW1lbnQoKTogdm9pZDtcbiAgYWJzdHJhY3QgYXBwZW5kVG9Db21tZW50RGF0YShjaGFyOiBzdHJpbmcpOiB2b2lkO1xuICBhYnN0cmFjdCBmaW5pc2hDb21tZW50KCk6IHZvaWQ7XG4gIGFic3RyYWN0IHJlcG9ydFN5bnRheEVycm9yKGVycm9yOiBzdHJpbmcpOiB2b2lkO1xuXG4gIGdldCBjdXJyZW50QXR0cigpOiBBdHRyaWJ1dGUge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5jdXJyZW50QXR0cmlidXRlLCAnZXhwZWN0ZWQgYXR0cmlidXRlJyk7XG4gIH1cblxuICBnZXQgY3VycmVudFRhZygpOiBQYXJzZXJOb2RlQnVpbGRlcjxUYWc8J1N0YXJ0VGFnJyB8ICdFbmRUYWcnPj4ge1xuICAgIGxldCBub2RlID0gdGhpcy5jdXJyZW50Tm9kZTtcbiAgICBhc3NlcnQobm9kZSAmJiAobm9kZS50eXBlID09PSAnU3RhcnRUYWcnIHx8IG5vZGUudHlwZSA9PT0gJ0VuZFRhZycpLCAnZXhwZWN0ZWQgdGFnJyk7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICBnZXQgY3VycmVudFN0YXJ0VGFnKCk6IFBhcnNlck5vZGVCdWlsZGVyPFRhZzwnU3RhcnRUYWcnPj4ge1xuICAgIGxldCBub2RlID0gdGhpcy5jdXJyZW50Tm9kZTtcbiAgICBhc3NlcnQobm9kZSAmJiBub2RlLnR5cGUgPT09ICdTdGFydFRhZycsICdleHBlY3RlZCBzdGFydCB0YWcnKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIGdldCBjdXJyZW50RW5kVGFnKCk6IFBhcnNlck5vZGVCdWlsZGVyPFRhZzwnRW5kVGFnJz4+IHtcbiAgICBsZXQgbm9kZSA9IHRoaXMuY3VycmVudE5vZGU7XG4gICAgYXNzZXJ0KG5vZGUgJiYgbm9kZS50eXBlID09PSAnRW5kVGFnJywgJ2V4cGVjdGVkIGVuZCB0YWcnKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIGdldCBjdXJyZW50Q29tbWVudCgpOiBQYXJzZXJOb2RlQnVpbGRlcjxBU1R2MS5Db21tZW50U3RhdGVtZW50PiB7XG4gICAgbGV0IG5vZGUgPSB0aGlzLmN1cnJlbnROb2RlO1xuICAgIGFzc2VydChub2RlICYmIG5vZGUudHlwZSA9PT0gJ0NvbW1lbnRTdGF0ZW1lbnQnLCAnZXhwZWN0ZWQgYSBjb21tZW50Jyk7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICBnZXQgY3VycmVudERhdGEoKTogQVNUdjEuVGV4dE5vZGUge1xuICAgIGxldCBub2RlID0gdGhpcy5jdXJyZW50Tm9kZTtcbiAgICBhc3NlcnQobm9kZSAmJiBub2RlLnR5cGUgPT09ICdUZXh0Tm9kZScsICdleHBlY3RlZCBhIHRleHQgbm9kZScpO1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgYWNjZXB0VGVtcGxhdGUobm9kZTogSEJTLlByb2dyYW0pOiBBU1R2MS5UZW1wbGF0ZSB7XG4gICAgcmV0dXJuIHRoaXNbbm9kZS50eXBlIGFzICdQcm9ncmFtJ10obm9kZSkgYXMgQVNUdjEuVGVtcGxhdGU7XG4gIH1cblxuICBhY2NlcHROb2RlKG5vZGU6IEhCUy5Qcm9ncmFtKTogQVNUdjEuQmxvY2sgfCBBU1R2MS5UZW1wbGF0ZTtcbiAgYWNjZXB0Tm9kZTxVIGV4dGVuZHMgSEJTLk5vZGUgfCBBU1R2MS5Ob2RlPihub2RlOiBIQlMuTm9kZSk6IFU7XG4gIGFjY2VwdE5vZGU8VCBleHRlbmRzIEhCUy5Ob2RlVHlwZT4obm9kZTogSEJTLk5vZGU8VD4pOiBIQlMuT3V0cHV0PFQ+IHtcbiAgICByZXR1cm4gKHRoaXNbbm9kZS50eXBlIGFzIFRdIGFzIChub2RlOiBIQlMuTm9kZTxUPikgPT4gSEJTLk91dHB1dDxUPikobm9kZSk7XG4gIH1cblxuICBjdXJyZW50RWxlbWVudCgpOiBFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50U3RhY2tbdGhpcy5lbGVtZW50U3RhY2subGVuZ3RoIC0gMV07XG4gIH1cblxuICBzb3VyY2VGb3JOb2RlKG5vZGU6IEhCUy5Ob2RlLCBlbmROb2RlPzogeyBsb2M6IEhCUy5Tb3VyY2VMb2NhdGlvbiB9KTogc3RyaW5nIHtcbiAgICBsZXQgZmlyc3RMaW5lID0gbm9kZS5sb2Muc3RhcnQubGluZSAtIDE7XG4gICAgbGV0IGN1cnJlbnRMaW5lID0gZmlyc3RMaW5lIC0gMTtcbiAgICBsZXQgZmlyc3RDb2x1bW4gPSBub2RlLmxvYy5zdGFydC5jb2x1bW47XG4gICAgbGV0IHN0cmluZyA9IFtdO1xuICAgIGxldCBsaW5lO1xuXG4gICAgbGV0IGxhc3RMaW5lOiBudW1iZXI7XG4gICAgbGV0IGxhc3RDb2x1bW46IG51bWJlcjtcblxuICAgIGlmIChlbmROb2RlKSB7XG4gICAgICBsYXN0TGluZSA9IGVuZE5vZGUubG9jLmVuZC5saW5lIC0gMTtcbiAgICAgIGxhc3RDb2x1bW4gPSBlbmROb2RlLmxvYy5lbmQuY29sdW1uO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXN0TGluZSA9IG5vZGUubG9jLmVuZC5saW5lIC0gMTtcbiAgICAgIGxhc3RDb2x1bW4gPSBub2RlLmxvYy5lbmQuY29sdW1uO1xuICAgIH1cblxuICAgIHdoaWxlIChjdXJyZW50TGluZSA8IGxhc3RMaW5lKSB7XG4gICAgICBjdXJyZW50TGluZSsrO1xuICAgICAgbGluZSA9IHRoaXMubGluZXNbY3VycmVudExpbmVdO1xuXG4gICAgICBpZiAoY3VycmVudExpbmUgPT09IGZpcnN0TGluZSkge1xuICAgICAgICBpZiAoZmlyc3RMaW5lID09PSBsYXN0TGluZSkge1xuICAgICAgICAgIHN0cmluZy5wdXNoKGxpbmUuc2xpY2UoZmlyc3RDb2x1bW4sIGxhc3RDb2x1bW4pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHJpbmcucHVzaChsaW5lLnNsaWNlKGZpcnN0Q29sdW1uKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudExpbmUgPT09IGxhc3RMaW5lKSB7XG4gICAgICAgIHN0cmluZy5wdXNoKGxpbmUuc2xpY2UoMCwgbGFzdENvbHVtbikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyaW5nLnB1c2gobGluZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmluZy5qb2luKCdcXG4nKTtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==