UNPKG

ember-legacy-class-transform

Version:
232 lines (230 loc) 22.5 kB
import * as AST from './types/nodes'; function buildMustache(path, params, hash, raw, loc) { if (!AST.isLiteral(path)) { path = buildPath(path); } return { type: "MustacheStatement", path: path, params: params || [], hash: hash || buildHash([]), escaped: !raw, loc: buildLoc(loc || null) }; } function buildBlock(path, params, hash, program, inverse, loc) { return { type: "BlockStatement", path: buildPath(path), params: params || [], hash: hash || buildHash([]), program: program || null, inverse: inverse || null, loc: buildLoc(loc || null) }; } function buildElementModifier(path, params, hash, loc) { return { type: "ElementModifierStatement", path: buildPath(path), params: params || [], hash: hash || buildHash([]), loc: buildLoc(loc || null) }; } function buildPartial(name, params, hash, indent, loc) { return { type: "PartialStatement", name: name, params: params || [], hash: hash || buildHash([]), indent: indent || '', strip: { open: false, close: false }, loc: buildLoc(loc || null) }; } function buildComment(value, loc) { return { type: "CommentStatement", value: value, loc: buildLoc(loc || null) }; } function buildMustacheComment(value, loc) { return { type: "MustacheCommentStatement", value: value, loc: buildLoc(loc || null) }; } function buildConcat(parts, loc) { return { type: "ConcatStatement", parts: parts || [], loc: buildLoc(loc || null) }; } function buildElement(tag, attributes, modifiers, children, comments, loc) { // this is used for backwards compat prior to `comments` being added to the AST if (!Array.isArray(comments)) { loc = comments; comments = []; } return { type: "ElementNode", tag: tag || "", attributes: attributes || [], blockParams: [], modifiers: modifiers || [], comments: comments || [], children: children || [], loc: buildLoc(loc || null) }; } function buildAttr(name, value, loc) { return { type: "AttrNode", name: name, value: value, loc: buildLoc(loc || null) }; } function buildText(chars, loc) { return { type: "TextNode", chars: chars || "", loc: buildLoc(loc || null) }; } // Expressions function buildSexpr(path, params, hash, loc) { return { type: "SubExpression", path: buildPath(path), params: params || [], hash: hash || buildHash([]), loc: buildLoc(loc || null) }; } function buildPath(original, loc) { if (typeof original !== 'string') return original; var parts = original.split('.'); var thisHead = false; if (parts[0] === 'this') { thisHead = true; parts = parts.slice(1); } return { type: "PathExpression", original: original, this: thisHead, parts: parts, data: false, loc: buildLoc(loc || null) }; } function buildLiteral(type, value, loc) { return { type: type, value: value, original: value, loc: buildLoc(loc || null) }; } // Miscellaneous function buildHash(pairs, loc) { return { type: "Hash", pairs: pairs || [], loc: buildLoc(loc || null) }; } function buildPair(key, value, loc) { return { type: "HashPair", key: key, value: value, loc: buildLoc(loc || null) }; } function buildProgram(body, blockParams, loc) { return { type: "Program", body: body || [], blockParams: blockParams || [], loc: buildLoc(loc || null) }; } function buildSource(source) { return source || null; } function buildPosition(line, column) { return { line: line, column: column }; } export var SYNTHETIC = { source: '(synthetic)', start: { line: 1, column: 0 }, end: { line: 1, column: 0 } }; function buildLoc() { for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } if (args.length === 1) { var loc = args[0]; if (loc && typeof loc === 'object') { return { source: buildSource(loc.source), start: buildPosition(loc.start.line, loc.start.column), end: buildPosition(loc.end.line, loc.end.column) }; } else { return SYNTHETIC; } } else { var startLine = args[0], startColumn = args[1], endLine = args[2], endColumn = args[3], source = args[4]; return { source: buildSource(source), start: buildPosition(startLine, startColumn), end: buildPosition(endLine, endColumn) }; } } export default { mustache: buildMustache, block: buildBlock, partial: buildPartial, comment: buildComment, mustacheComment: buildMustacheComment, element: buildElement, elementModifier: buildElementModifier, attr: buildAttr, text: buildText, sexpr: buildSexpr, path: buildPath, concat: buildConcat, hash: buildHash, pair: buildPair, literal: buildLiteral, program: buildProgram, loc: buildLoc, pos: buildPosition, string: literal('StringLiteral'), boolean: literal('BooleanLiteral'), number: literal('NumberLiteral'), undefined: function () { return buildLiteral('UndefinedLiteral', undefined); }, null: function () { return buildLiteral('NullLiteral', null); } }; function literal(type) { return function (value) { return buildLiteral(type, value); }; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9idWlsZGVycy5qcyJdLCJuYW1lcyI6WyJBU1QiLCJidWlsZE11c3RhY2hlIiwicGF0aCIsInBhcmFtcyIsImhhc2giLCJyYXciLCJsb2MiLCJpc0xpdGVyYWwiLCJidWlsZFBhdGgiLCJ0eXBlIiwiYnVpbGRIYXNoIiwiZXNjYXBlZCIsImJ1aWxkTG9jIiwiYnVpbGRCbG9jayIsInByb2dyYW0iLCJpbnZlcnNlIiwiYnVpbGRFbGVtZW50TW9kaWZpZXIiLCJidWlsZFBhcnRpYWwiLCJuYW1lIiwiaW5kZW50Iiwic3RyaXAiLCJvcGVuIiwiY2xvc2UiLCJidWlsZENvbW1lbnQiLCJ2YWx1ZSIsImJ1aWxkTXVzdGFjaGVDb21tZW50IiwiYnVpbGRDb25jYXQiLCJwYXJ0cyIsImJ1aWxkRWxlbWVudCIsInRhZyIsImF0dHJpYnV0ZXMiLCJtb2RpZmllcnMiLCJjaGlsZHJlbiIsImNvbW1lbnRzIiwiQXJyYXkiLCJpc0FycmF5IiwiYmxvY2tQYXJhbXMiLCJidWlsZEF0dHIiLCJidWlsZFRleHQiLCJjaGFycyIsImJ1aWxkU2V4cHIiLCJvcmlnaW5hbCIsInNwbGl0IiwidGhpc0hlYWQiLCJzbGljZSIsInRoaXMiLCJkYXRhIiwiYnVpbGRMaXRlcmFsIiwicGFpcnMiLCJidWlsZFBhaXIiLCJrZXkiLCJidWlsZFByb2dyYW0iLCJib2R5IiwiYnVpbGRTb3VyY2UiLCJzb3VyY2UiLCJidWlsZFBvc2l0aW9uIiwibGluZSIsImNvbHVtbiIsIlNZTlRIRVRJQyIsInN0YXJ0IiwiZW5kIiwiYXJncyIsImxlbmd0aCIsInN0YXJ0TGluZSIsInN0YXJ0Q29sdW1uIiwiZW5kTGluZSIsImVuZENvbHVtbiIsIm11c3RhY2hlIiwiYmxvY2siLCJwYXJ0aWFsIiwiY29tbWVudCIsIm11c3RhY2hlQ29tbWVudCIsImVsZW1lbnQiLCJlbGVtZW50TW9kaWZpZXIiLCJhdHRyIiwidGV4dCIsInNleHByIiwiY29uY2F0IiwicGFpciIsImxpdGVyYWwiLCJwb3MiLCJzdHJp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VUFBVWUsS0FBVixFQUFpQjtBQUNwQixlQUFPdUIsYUFBYXRDLElBQWIsRUFBbUJlLEtBQW5CLENBQVA7QUFDSCxLQUZEO0FBR0giLCJmaWxlIjoibGliL2J1aWxkZXJzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgQVNUIGZyb20gJy4vdHlwZXMvbm9kZXMnO1xuZnVuY3Rpb24gYnVpbGRNdXN0YWNoZShwYXRoLCBwYXJhbXMsIGhhc2gsIHJhdywgbG9jKSB7XG4gICAgaWYgKCFBU1QuaXNMaXRlcmFsKHBhdGgpKSB7XG4gICAgICAgIHBhdGggPSBidWlsZFBhdGgocGF0aCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiTXVzdGFjaGVTdGF0ZW1lbnRcIixcbiAgICAgICAgcGF0aCxcbiAgICAgICAgcGFyYW1zOiBwYXJhbXMgfHwgW10sXG4gICAgICAgIGhhc2g6IGhhc2ggfHwgYnVpbGRIYXNoKFtdKSxcbiAgICAgICAgZXNjYXBlZDogIXJhdyxcbiAgICAgICAgbG9jOiBidWlsZExvYyhsb2MgfHwgbnVsbClcbiAgICB9O1xufVxuZnVuY3Rpb24gYnVpbGRCbG9jayhwYXRoLCBwYXJhbXMsIGhhc2gsIHByb2dyYW0sIGludmVyc2UsIGxvYykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiQmxvY2tTdGF0ZW1lbnRcIixcbiAgICAgICAgcGF0aDogYnVpbGRQYXRoKHBhdGgpLFxuICAgICAgICBwYXJhbXM6IHBhcmFtcyB8fCBbXSxcbiAgICAgICAgaGFzaDogaGFzaCB8fCBidWlsZEhhc2goW10pLFxuICAgICAgICBwcm9ncmFtOiBwcm9ncmFtIHx8IG51bGwsXG4gICAgICAgIGludmVyc2U6IGludmVyc2UgfHwgbnVsbCxcbiAgICAgICAgbG9jOiBidWlsZExvYyhsb2MgfHwgbnVsbClcbiAgICB9O1xufVxuZnVuY3Rpb24gYnVpbGRFbGVtZW50TW9kaWZpZXIocGF0aCwgcGFyYW1zLCBoYXNoLCBsb2MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIkVsZW1lbnRNb2RpZmllclN0YXRlbWVudFwiLFxuICAgICAgICBwYXRoOiBidWlsZFBhdGgocGF0aCksXG4gICAgICAgIHBhcmFtczogcGFyYW1zIHx8IFtdLFxuICAgICAgICBoYXNoOiBoYXNoIHx8IGJ1aWxkSGFzaChbXSksXG4gICAgICAgIGxvYzogYnVpbGRMb2MobG9jIHx8IG51bGwpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJ1aWxkUGFydGlhbChuYW1lLCBwYXJhbXMsIGhhc2gsIGluZGVudCwgbG9jKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJQYXJ0aWFsU3RhdGVtZW50XCIsXG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIHBhcmFtczogcGFyYW1zIHx8IFtdLFxuICAgICAgICBoYXNoOiBoYXNoIHx8IGJ1aWxkSGFzaChbXSksXG4gICAgICAgIGluZGVudDogaW5kZW50IHx8ICcnLFxuICAgICAgICBzdHJpcDogeyBvcGVuOiBmYWxzZSwgY2xvc2U6IGZhbHNlIH0sXG4gICAgICAgIGxvYzogYnVpbGRMb2MobG9jIHx8IG51bGwpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJ1aWxkQ29tbWVudCh2YWx1ZSwgbG9jKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJDb21tZW50U3RhdGVtZW50XCIsXG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgbG9jOiBidWlsZExvYyhsb2MgfHwgbnVsbClcbiAgICB9O1xufVxuZnVuY3Rpb24gYnVpbGRNdXN0YWNoZUNvbW1lbnQodmFsdWUsIGxvYykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiTXVzdGFjaGVDb21tZW50U3RhdGVtZW50XCIsXG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgbG9jOiBidWlsZExvYyhsb2MgfHwgbnVsbClcbiAgICB9O1xufVxuZnVuY3Rpb24gYnVpbGRDb25jYXQocGFydHMsIGxvYykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiQ29uY2F0U3RhdGVtZW50XCIsXG4gICAgICAgIHBhcnRzOiBwYXJ0cyB8fCBbXSxcbiAgICAgICAgbG9jOiBidWlsZExvYyhsb2MgfHwgbnVsbClcbiAgICB9O1xufVxuZnVuY3Rpb24gYnVpbGRFbGVtZW50KHRhZywgYXR0cmlidXRlcywgbW9kaWZpZXJzLCBjaGlsZHJlbiwgY29tbWVudHMsIGxvYykge1xuICAgIC8vIHRoaXMgaXMgdXNlZCBmb3IgYmFja3dhcmRzIGNvbXBhdCBwcmlvciB0byBgY29tbWVudHNgIGJlaW5nIGFkZGVkIHRvIHRoZSBBU1RcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29tbWVudHMpKSB7XG4gICAgICAgIGxvYyA9IGNvbW1lbnRzO1xuICAgICAgICBjb21tZW50cyA9IFtdO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIkVsZW1lbnROb2RlXCIsXG4gICAgICAgIHRhZzogdGFnIHx8IFwiXCIsXG4gICAgICAgIGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXMgfHwgW10sXG4gICAgICAgIGJsb2NrUGFyYW1zOiBbXSxcbiAgICAgICAgbW9kaWZpZXJzOiBtb2RpZmllcnMgfHwgW10sXG4gICAgICAgIGNvbW1lbnRzOiBjb21tZW50cyB8fCBbXSxcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuIHx8IFtdLFxuICAgICAgICBsb2M6IGJ1aWxkTG9jKGxvYyB8fCBudWxsKVxuICAgIH07XG59XG5mdW5jdGlvbiBidWlsZEF0dHIobmFtZSwgdmFsdWUsIGxvYykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiQXR0ck5vZGVcIixcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBsb2M6IGJ1aWxkTG9jKGxvYyB8fCBudWxsKVxuICAgIH07XG59XG5mdW5jdGlvbiBidWlsZFRleHQoY2hhcnMsIGxvYykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiVGV4dE5vZGVcIixcbiAgICAgICAgY2hhcnM6IGNoYXJzIHx8IFwiXCIsXG4gICAgICAgIGxvYzogYnVpbGRMb2MobG9jIHx8IG51bGwpXG4gICAgfTtcbn1cbi8vIEV4cHJlc3Npb25zXG5mdW5jdGlvbiBidWlsZFNleHByKHBhdGgsIHBhcmFtcywgaGFzaCwgbG9jKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJTdWJFeHByZXNzaW9uXCIsXG4gICAgICAgIHBhdGg6IGJ1aWxkUGF0aChwYXRoKSxcbiAgICAgICAgcGFyYW1zOiBwYXJhbXMgfHwgW10sXG4gICAgICAgIGhhc2g6IGhhc2ggfHwgYnVpbGRIYXNoKFtdKSxcbiAgICAgICAgbG9jOiBidWlsZExvYyhsb2MgfHwgbnVsbClcbiAgICB9O1xufVxuZnVuY3Rpb24gYnVpbGRQYXRoKG9yaWdpbmFsLCBsb2MpIHtcbiAgICBpZiAodHlwZW9mIG9yaWdpbmFsICE9PSAnc3RyaW5nJykgcmV0dXJuIG9yaWdpbmFsO1xuICAgIGxldCBwYXJ0cyA9IG9yaWdpbmFsLnNwbGl0KCcuJyk7XG4gICAgbGV0IHRoaXNIZWFkID0gZmFsc2U7XG4gICAgaWYgKHBhcnRzWzBdID09PSAndGhpcycpIHtcbiAgICAgICAgdGhpc0hlYWQgPSB0cnVlO1xuICAgICAgICBwYXJ0cyA9IHBhcnRzLnNsaWNlKDEpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIlBhdGhFeHByZXNzaW9uXCIsXG4gICAgICAgIG9yaWdpbmFsLFxuICAgICAgICB0aGlzOiB0aGlzSGVhZCxcbiAgICAgICAgcGFydHMsXG4gICAgICAgIGRhdGE6IGZhbHNlLFxuICAgICAgICBsb2M6IGJ1aWxkTG9jKGxvYyB8fCBudWxsKVxuICAgIH07XG59XG5mdW5jdGlvbiBidWlsZExpdGVyYWwodHlwZSwgdmFsdWUsIGxvYykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBvcmlnaW5hbDogdmFsdWUsXG4gICAgICAgIGxvYzogYnVpbGRMb2MobG9jIHx8IG51bGwpXG4gICAgfTtcbn1cbi8vIE1pc2NlbGxhbmVvdXNcbmZ1bmN0aW9uIGJ1aWxkSGFzaChwYWlycywgbG9jKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJIYXNoXCIsXG4gICAgICAgIHBhaXJzOiBwYWlycyB8fCBbXSxcbiAgICAgICAgbG9jOiBidWlsZExvYyhsb2MgfHwgbnVsbClcbiAgICB9O1xufVxuZnVuY3Rpb24gYnVpbGRQYWlyKGtleSwgdmFsdWUsIGxvYykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiSGFzaFBhaXJcIixcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBsb2M6IGJ1aWxkTG9jKGxvYyB8fCBudWxsKVxuICAgIH07XG59XG5mdW5jdGlvbiBidWlsZFByb2dyYW0oYm9keSwgYmxvY2tQYXJhbXMsIGxvYykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiUHJvZ3JhbVwiLFxuICAgICAgICBib2R5OiBib2R5IHx8IFtdLFxuICAgICAgICBibG9ja1BhcmFtczogYmxvY2tQYXJhbXMgfHwgW10sXG4gICAgICAgIGxvYzogYnVpbGRMb2MobG9jIHx8IG51bGwpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGJ1aWxkU291cmNlKHNvdXJjZSkge1xuICAgIHJldHVybiBzb3VyY2UgfHwgbnVsbDtcbn1cbmZ1bmN0aW9uIGJ1aWxkUG9zaXRpb24obGluZSwgY29sdW1uKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbGluZSxcbiAgICAgICAgY29sdW1uXG4gICAgfTtcbn1cbmV4cG9ydCBjb25zdCBTWU5USEVUSUMgPSB7IHNvdXJjZTogJyhzeW50aGV0aWMpJywgc3RhcnQ6IHsgbGluZTogMSwgY29sdW1uOiAwIH0sIGVuZDogeyBsaW5lOiAxLCBjb2x1bW46IDAgfSB9O1xuZnVuY3Rpb24gYnVpbGRMb2MoLi4uYXJncykge1xuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBsZXQgbG9jID0gYXJnc1swXTtcbiAgICAgICAgaWYgKGxvYyAmJiB0eXBlb2YgbG9jID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzb3VyY2U6IGJ1aWxkU291cmNlKGxvYy5zb3VyY2UpLFxuICAgICAgICAgICAgICAgIHN0YXJ0OiBidWlsZFBvc2l0aW9uKGxvYy5zdGFydC5saW5lLCBsb2Muc3RhcnQuY29sdW1uKSxcbiAgICAgICAgICAgICAgICBlbmQ6IGJ1aWxkUG9zaXRpb24obG9jLmVuZC5saW5lLCBsb2MuZW5kLmNvbHVtbilcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gU1lOVEhFVElDO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IFtzdGFydExpbmUsIHN0YXJ0Q29sdW1uLCBlbmRMaW5lLCBlbmRDb2x1bW4sIHNvdXJjZV0gPSBhcmdzO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc291cmNlOiBidWlsZFNvdXJjZShzb3VyY2UpLFxuICAgICAgICAgICAgc3RhcnQ6IGJ1aWxkUG9zaXRpb24oc3RhcnRMaW5lLCBzdGFydENvbHVtbiksXG4gICAgICAgICAgICBlbmQ6IGJ1aWxkUG9zaXRpb24oZW5kTGluZSwgZW5kQ29sdW1uKVxuICAgICAgICB9O1xuICAgIH1cbn1cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBtdXN0YWNoZTogYnVpbGRNdXN0YWNoZSxcbiAgICBibG9jazogYnVpbGRCbG9jayxcbiAgICBwYXJ0aWFsOiBidWlsZFBhcnRpYWwsXG4gICAgY29tbWVudDogYnVpbGRDb21tZW50LFxuICAgIG11c3RhY2hlQ29tbWVudDogYnVpbGRNdXN0YWNoZUNvbW1lbnQsXG4gICAgZWxlbWVudDogYnVpbGRFbGVtZW50LFxuICAgIGVsZW1lbnRNb2RpZmllcjogYnVpbGRFbGVtZW50TW9kaWZpZXIsXG4gICAgYXR0cjogYnVpbGRBdHRyLFxuICAgIHRleHQ6IGJ1aWxkVGV4dCxcbiAgICBzZXhwcjogYnVpbGRTZXhwcixcbiAgICBwYXRoOiBidWlsZFBhdGgsXG4gICAgY29uY2F0OiBidWlsZENvbmNhdCxcbiAgICBoYXNoOiBidWlsZEhhc2gsXG4gICAgcGFpcjogYnVpbGRQYWlyLFxuICAgIGxpdGVyYWw6IGJ1aWxkTGl0ZXJhbCxcbiAgICBwcm9ncmFtOiBidWlsZFByb2dyYW0sXG4gICAgbG9jOiBidWlsZExvYyxcbiAgICBwb3M6IGJ1aWxkUG9zaXRpb24sXG4gICAgc3RyaW5nOiBsaXRlcmFsKCdTdHJpbmdMaXRlcmFsJyksXG4gICAgYm9vbGVhbjogbGl0ZXJhbCgnQm9vbGVhbkxpdGVyYWwnKSxcbiAgICBudW1iZXI6IGxpdGVyYWwoJ051bWJlckxpdGVyYWwnKSxcbiAgICB1bmRlZmluZWQoKSB7XG4gICAgICAgIHJldHVybiBidWlsZExpdGVyYWwoJ1VuZGVmaW5lZExpdGVyYWwnLCB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgbnVsbCgpIHtcbiAgICAgICAgcmV0dXJuIGJ1aWxkTGl0ZXJhbCgnTnVsbExpdGVyYWwnLCBudWxsKTtcbiAgICB9XG59O1xuZnVuY3Rpb24gbGl0ZXJhbCh0eXBlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYnVpbGRMaXRlcmFsKHR5cGUsIHZhbHVlKTtcbiAgICB9O1xufSJdfQ==