UNPKG

@glimmer/runtime

Version:

Minimal runtime needed to render Glimmer templates

143 lines (109 loc) 17.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.APPEND_OPCODES = exports.AppendOpcodes = void 0; var _reference = require("@glimmer/reference"); var _util = require("@glimmer/util"); var _vm = require("@glimmer/vm"); var _scope = require("./scope"); var _symbols = require("./symbols"); var _elementBuilder = require("./vm/element-builder"); var AppendOpcodes = /*#__PURE__*/function () { function AppendOpcodes() { this.evaluateOpcode = (0, _util.fillNulls)(104 /* Size */ ).slice(); } var _proto = AppendOpcodes.prototype; _proto.add = function add(name, evaluate, kind) { if (kind === void 0) { kind = 'syscall'; } this.evaluateOpcode[name] = { syscall: kind !== 'machine', evaluate: evaluate }; }; _proto.debugBefore = function debugBefore(vm, opcode) { var params = undefined; var opName = undefined; if (false /* LOCAL_SHOULD_LOG */ ) { var pos = vm[_symbols.INNER_VM].fetchRegister(_vm.$pc) - opcode.size; var _ref = []; opName = _ref[0]; params = _ref[1]; // console.log(`${typePos(vm['pc'])}.`); _util.LOCAL_LOGGER.log(pos + ". "); var debugParams = []; for (var prop in params) { debugParams.push(prop, '=', params[prop]); } _util.LOCAL_LOGGER.log.apply(_util.LOCAL_LOGGER, debugParams); } var sp; if (false /* LOCAL_DEBUG */ ) { sp = vm.fetchValue(_vm.$sp); } return { sp: sp, pc: vm.fetchValue(_vm.$pc), name: opName, params: params, type: opcode.type, isMachine: opcode.isMachine, size: opcode.size, state: undefined }; }; _proto.debugAfter = function debugAfter(vm, pre) { var sp = pre.sp, type = pre.type, isMachine = pre.isMachine, pc = pre.pc; if (false /* LOCAL_DEBUG */ ) { var meta = type; var actualChange = vm.fetchValue(_vm.$sp) - sp; if (meta && meta.check && typeof meta.stackChange === 'number' && meta.stackChange !== actualChange) { throw new Error("Error in " + pre.name + ":\n\n" + pc + ". " + "\n\nStack changed by " + actualChange + ", expected " + meta.stackChange); } if (false /* LOCAL_SHOULD_LOG */ ) { _util.LOCAL_LOGGER.log('%c -> pc: %d, ra: %d, fp: %d, sp: %d, s0: %O, s1: %O, t0: %O, t1: %O, v0: %O', 'color: orange', vm[_symbols.INNER_VM].registers[_vm.$pc], vm[_symbols.INNER_VM].registers[_vm.$ra], vm[_symbols.INNER_VM].registers[_vm.$fp], vm[_symbols.INNER_VM].registers[_vm.$sp], vm['s0'], vm['s1'], vm['t0'], vm['t1'], vm['v0']); _util.LOCAL_LOGGER.log('%c -> eval stack', 'color: red', vm.stack.toArray()); _util.LOCAL_LOGGER.log('%c -> block stack', 'color: magenta', vm.elements().debugBlocks()); _util.LOCAL_LOGGER.log('%c -> destructor stack', 'color: violet', vm[_symbols.DESTROYABLE_STACK].toArray()); if (vm[_symbols.STACKS].scope.current === null) { _util.LOCAL_LOGGER.log('%c -> scope', 'color: green', 'null'); } else { _util.LOCAL_LOGGER.log('%c -> scope', 'color: green', vm.scope().slots.map(function (s) { return (0, _scope.isScopeReference)(s) ? (0, _reference.valueForRef)(s) : s; })); } _util.LOCAL_LOGGER.log('%c -> elements', 'color: blue', vm.elements()[_elementBuilder.CURSOR_STACK].current.element); _util.LOCAL_LOGGER.log('%c -> constructing', 'color: aqua', vm.elements()['constructing']); } } }; _proto.evaluate = function evaluate(vm, opcode, type) { var operation = this.evaluateOpcode[type]; if (operation.syscall) { false && (0, _util.assert)(!opcode.isMachine, "BUG: Mismatch between operation.syscall (" + operation.syscall + ") and opcode.isMachine (" + opcode.isMachine + ") for " + opcode.type); operation.evaluate(vm, opcode); } else { false && (0, _util.assert)(opcode.isMachine, "BUG: Mismatch between operation.syscall (" + operation.syscall + ") and opcode.isMachine (" + opcode.isMachine + ") for " + opcode.type); operation.evaluate(vm[_symbols.INNER_VM], opcode); } }; return AppendOpcodes; }(); exports.AppendOpcodes = AppendOpcodes; var APPEND_OPCODES = new AppendOpcodes(); exports.APPEND_OPCODES = APPEND_OPCODES; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3J1bnRpbWUvbGliL29wY29kZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUdBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBOztBQWlDQSxJQUFNLGFBQU4sR0FBQSxhQUFBLFlBQUE7QUFBQSxXQUFBLGFBQUEsR0FBQTtBQUNVLFNBQUEsY0FBQSxHQUE2QixxQkFBUztBQUFBO0FBQVQsTUFBN0IsS0FBNkIsRUFBN0I7QUFpSVQ7O0FBbElELE1BQUEsTUFBQSxHQUFBLGFBQUEsQ0FBQSxTQUFBOztBQUFBLEVBQUEsTUFBQSxDQUFBLEdBQUEsR0FLRSxTQUFBLEdBQUEsQ0FBQSxJQUFBLEVBQUEsUUFBQSxFQUFBLElBQUEsRUFBb0Y7QUFBQSxRQUFoQixJQUFnQixLQUFBLEtBQUEsQ0FBQSxFQUFBO0FBQWhCLE1BQUEsSUFBZ0IsR0FBakYsU0FBaUU7QUFBZ0I7O0FBQ2xGLFNBQUEsY0FBQSxDQUFBLElBQUEsSUFBc0M7QUFDcEMsTUFBQSxPQUFPLEVBQUUsSUFBSSxLQUR1QixTQUFBO0FBRXBDLE1BQUEsUUFBQSxFQUFBO0FBRm9DLEtBQXRDO0FBTkosR0FBQTs7QUFBQSxFQUFBLE1BQUEsQ0FBQSxXQUFBLEdBWUUsU0FBQSxXQUFBLENBQUEsRUFBQSxFQUFBLE1BQUEsRUFBcUM7QUFDbkMsUUFBSSxNQUFNLEdBQVYsU0FBQTtBQUNBLFFBQUksTUFBTSxHQUFWLFNBQUE7O0FBRUEsUUFBQTtBQUFBO0FBQUEsTUFBc0I7QUFDcEIsWUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFGLGlCQUFFLENBQUYsQ0FBQSxhQUFBLENBQUEsT0FBQSxJQUFrQyxNQUFNLENBQWxELElBQUE7QUFEb0IsWUFBQSxJQUFBLEdBQUEsRUFBQTtBQUdwQixRQUFBLE1BSG9CLEdBQUEsSUFBQSxDQUFBLENBQUEsQ0FHcEI7QUFBQSxRQUFBLE1BSG9CLEdBQUEsSUFBQSxDQUFBLENBQUEsQ0FHcEIsQ0FI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REYsU0FBTixFQUFNLDhDQUV3QyxTQUFTLENBRmpELE9BQUEsR0FBQSwwQkFBQSxHQUVvRixNQUFNLENBRjFGLFNBQUEsR0FBQSxRQUFBLEdBRTZHLE1BQU0sQ0FIcEgsSUFDTCxDQURLO0FBS0wsTUFBQSxTQUFTLENBQVQsUUFBQSxDQUFtQixFQUFFLENBQXJCLGlCQUFxQixDQUFyQixFQUFBLE1BQUE7QUFDRDtBQWhJTCxHQUFBOztBQUFBLFNBQUEsYUFBQTtBQUFBLENBQUEsRUFBQTs7O0FBb0lPLElBQU0sY0FBYyxHQUFHLElBQXZCLGFBQXVCLEVBQXZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVidWcsIGxvZ09wY29kZSwgb3Bjb2RlTWV0YWRhdGEsIHJlY29yZFN0YWNrU2l6ZSB9IGZyb20gJ0BnbGltbWVyL2RlYnVnJztcbmltcG9ydCB7IERpY3QsIE1heWJlLCBPcCwgT3B0aW9uLCBSdW50aW1lT3AgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcbmltcG9ydCB7IExPQ0FMX0RFQlVHLCBMT0NBTF9TSE9VTERfTE9HIH0gZnJvbSAnQGdsaW1tZXIvbG9jYWwtZGVidWctZmxhZ3MnO1xuaW1wb3J0IHsgdmFsdWVGb3JSZWYgfSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuaW1wb3J0IHsgYXNzZXJ0LCBmaWxsTnVsbHMsIExPQ0FMX0xPR0dFUiB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgJGZwLCAkcGMsICRyYSwgJHNwIH0gZnJvbSAnQGdsaW1tZXIvdm0nO1xuaW1wb3J0IHsgaXNTY29wZVJlZmVyZW5jZSB9IGZyb20gJy4vc2NvcGUnO1xuaW1wb3J0IHsgQ09OU1RBTlRTLCBERVNUUk9ZQUJMRV9TVEFDSywgSU5ORVJfVk0sIFNUQUNLUyB9IGZyb20gJy4vc3ltYm9scyc7XG5pbXBvcnQgeyBMb3dMZXZlbFZNLCBWTSB9IGZyb20gJy4vdm0nO1xuaW1wb3J0IHsgSW50ZXJuYWxWTSB9IGZyb20gJy4vdm0vYXBwZW5kJztcbmltcG9ydCB7IENVUlNPUl9TVEFDSyB9IGZyb20gJy4vdm0vZWxlbWVudC1idWlsZGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBPcGNvZGVKU09OIHtcbiAgdHlwZTogbnVtYmVyIHwgc3RyaW5nO1xuICBndWlkPzogT3B0aW9uPG51bWJlcj47XG4gIGRlb3B0ZWQ/OiBib29sZWFuO1xuICBhcmdzPzogc3RyaW5nW107XG4gIGRldGFpbHM/OiBEaWN0PE9wdGlvbjxzdHJpbmc+PjtcbiAgY2hpbGRyZW4/OiBPcGNvZGVKU09OW107XG59XG5cbmV4cG9ydCB0eXBlIE9wZXJhbmQxID0gbnVtYmVyO1xuZXhwb3J0IHR5cGUgT3BlcmFuZDIgPSBudW1iZXI7XG5leHBvcnQgdHlwZSBPcGVyYW5kMyA9IG51bWJlcjtcblxuZXhwb3J0IHR5cGUgU3lzY2FsbCA9ICh2bTogSW50ZXJuYWxWTSwgb3Bjb2RlOiBSdW50aW1lT3ApID0+IHZvaWQ7XG5leHBvcnQgdHlwZSBNYWNoaW5lT3Bjb2RlID0gKHZtOiBMb3dMZXZlbFZNLCBvcGNvZGU6IFJ1bnRpbWVPcCkgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgRXZhbHVhdGUgPVxuICB8IHsgc3lzY2FsbDogdHJ1ZTsgZXZhbHVhdGU6IFN5c2NhbGwgfVxuICB8IHsgc3lzY2FsbDogZmFsc2U7IGV2YWx1YXRlOiBNYWNoaW5lT3Bjb2RlIH07XG5cbmV4cG9ydCB0eXBlIERlYnVnU3RhdGUgPSB7XG4gIHBjOiBudW1iZXI7XG4gIHNwOiBudW1iZXI7XG4gIHR5cGU6IG51bWJlcjtcbiAgaXNNYWNoaW5lOiAwIHwgMTtcbiAgc2l6ZTogbnVtYmVyO1xuICBwYXJhbXM/OiBNYXliZTxEaWN0PjtcbiAgbmFtZT86IHN0cmluZztcbiAgc3RhdGU6IHVua25vd247XG59O1xuXG5leHBvcnQgY2xhc3MgQXBwZW5kT3Bjb2RlcyB7XG4gIHByaXZhdGUgZXZhbHVhdGVPcGNvZGU6IEV2YWx1YXRlW10gPSBmaWxsTnVsbHM8RXZhbHVhdGU+KE9wLlNpemUpLnNsaWNlKCk7XG5cbiAgYWRkPE5hbWUgZXh0ZW5kcyBPcD4obmFtZTogTmFtZSwgZXZhbHVhdGU6IFN5c2NhbGwpOiB2b2lkO1xuICBhZGQ8TmFtZSBleHRlbmRzIE9wPihuYW1lOiBOYW1lLCBldmFsdWF0ZTogTWFjaGluZU9wY29kZSwga2luZDogJ21hY2hpbmUnKTogdm9pZDtcbiAgYWRkPE5hbWUgZXh0ZW5kcyBPcD4obmFtZTogTmFtZSwgZXZhbHVhdGU6IFN5c2NhbGwgfCBNYWNoaW5lT3Bjb2RlLCBraW5kID0gJ3N5c2NhbGwnKTogdm9pZCB7XG4gICAgdGhpcy5ldmFsdWF0ZU9wY29kZVtuYW1lIGFzIG51bWJlcl0gPSB7XG4gICAgICBzeXNjYWxsOiBraW5kICE9PSAnbWFjaGluZScsXG4gICAgICBldmFsdWF0ZSxcbiAgICB9IGFzIEV2YWx1YXRlO1xuICB9XG5cbiAgZGVidWdCZWZvcmUodm06IFZNLCBvcGNvZGU6IFJ1bnRpbWVPcCk6IERlYnVnU3RhdGUge1xuICAgIGxldCBwYXJhbXM6IE1heWJlPERpY3Q+ID0gdW5kZWZpbmVkO1xuICAgIGxldCBvcE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGlmIChMT0NBTF9TSE9VTERfTE9HKSB7XG4gICAgICBsZXQgcG9zID0gdm1bSU5ORVJfVk1dLmZldGNoUmVnaXN0ZXIoJHBjKSAtIG9wY29kZS5zaXplO1xuXG4gICAgICBbb3BOYW1lLCBwYXJhbXNdID0gZGVidWcodm1bQ09OU1RBTlRTXSwgb3Bjb2RlLCBvcGNvZGUuaXNNYWNoaW5lKSE7XG5cbiAgICAgIC8vIGNvbnNvbGUubG9nKGAke3R5cGVQb3Modm1bJ3BjJ10pfS5gKTtcbiAgICAgIExPQ0FMX0xPR0dFUi5sb2coYCR7cG9zfS4gJHtsb2dPcGNvZGUob3BOYW1lLCBwYXJhbXMpfWApO1xuXG4gICAgICBsZXQgZGVidWdQYXJhbXMgPSBbXTtcbiAgICAgIGZvciAobGV0IHByb3AgaW4gcGFyYW1zKSB7XG4gICAgICAgIGRlYnVnUGFyYW1zLnB1c2gocHJvcCwgJz0nLCBwYXJhbXNbcHJvcF0pO1xuICAgICAgfVxuXG4gICAgICBMT0NBTF9MT0dHRVIubG9nKC4uLmRlYnVnUGFyYW1zKTtcbiAgICB9XG5cbiAgICBsZXQgc3A6IG51bWJlcjtcblxuICAgIGlmIChMT0NBTF9ERUJVRykge1xuICAgICAgc3AgPSB2bS5mZXRjaFZhbHVlKCRzcCk7XG4gICAgfVxuXG4gICAgcmVjb3JkU3RhY2tTaXplKHZtLmZldGNoVmFsdWUoJHNwKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNwOiBzcCEsXG4gICAgICBwYzogdm0uZmV0Y2hWYWx1ZSgkcGMpLFxuICAgICAgbmFtZTogb3BOYW1lLFxuICAgICAgcGFyYW1zLFxuICAgICAgdHlwZTogb3Bjb2RlLnR5cGUsXG4gICAgICBpc01hY2hpbmU6IG9wY29kZS5pc01hY2hpbmUsXG4gICAgICBzaXplOiBvcGNvZGUuc2l6ZSxcbiAgICAgIHN0YXRlOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIGRlYnVnQWZ0ZXIodm06IFZNLCBwcmU6IERlYnVnU3RhdGUpIHtcbiAgICBsZXQgeyBzcCwgdHlwZSwgaXNNYWNoaW5lLCBwYyB9ID0gcHJlO1xuXG4gICAgaWYgKExPQ0FMX0RFQlVHKSB7XG4gICAgICBsZXQgbWV0YSA9IG9wY29kZU1ldGFkYXRhKHR5cGUsIGlzTWFjaGluZSk7XG4gICAgICBsZXQgYWN0dWFsQ2hhbmdlID0gdm0uZmV0Y2hWYWx1ZSgkc3ApIC0gc3AhO1xuICAgICAgaWYgKFxuICAgICAgICBtZXRhICYmXG4gICAgICAgIG1ldGEuY2hlY2sgJiZcbiAgICAgICAgdHlwZW9mIG1ldGEuc3RhY2tDaGFuZ2UhID09PSAnbnVtYmVyJyAmJlxuICAgICAgICBtZXRhLnN0YWNrQ2hhbmdlISAhPT0gYWN0dWFsQ2hhbmdlXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFcnJvciBpbiAke3ByZS5uYW1lfTpcXG5cXG4ke3BjfS4gJHtsb2dPcGNvZGUoXG4gICAgICAgICAgICBwcmUubmFtZSEsXG4gICAgICAgICAgICBwcmUucGFyYW1zIVxuICAgICAgICAgICl9XFxuXFxuU3RhY2sgY2hhbmdlZCBieSAke2FjdHVhbENoYW5nZX0sIGV4cGVjdGVkICR7bWV0YS5zdGFja0NoYW5nZSF9YFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoTE9DQUxfU0hPVUxEX0xPRykge1xuICAgICAgICBMT0NBTF9MT0dHRVIubG9nKFxuICAgICAgICAgICclYyAtPiBwYzogJWQsIHJhOiAlZCwgZnA6ICVkLCBzcDogJWQsIHMwOiAlTywgczE6ICVPLCB0MDogJU8sIHQxOiAlTywgdjA6ICVPJyxcbiAgICAgICAgICAnY29sb3I6IG9yYW5nZScsXG4gICAgICAgICAgdm1bSU5ORVJfVk1dLnJlZ2lzdGVyc1skcGNdLFxuICAgICAgICAgIHZtW0lOTkVSX1ZNXS5yZWdpc3RlcnNbJHJhXSxcbiAgICAgICAgICB2bVtJTk5FUl9WTV0ucmVnaXN0ZXJzWyRmcF0sXG4gICAgICAgICAgdm1bSU5ORVJfVk1dLnJlZ2lzdGVyc1skc3BdLFxuICAgICAgICAgIHZtWydzMCddLFxuICAgICAgICAgIHZtWydzMSddLFxuICAgICAgICAgIHZtWyd0MCddLFxuICAgICAgICAgIHZtWyd0MSddLFxuICAgICAgICAgIHZtWyd2MCddXG4gICAgICAgICk7XG4gICAgICAgIExPQ0FMX0xPR0dFUi5sb2coJyVjIC0+IGV2YWwgc3RhY2snLCAnY29sb3I6IHJlZCcsIHZtLnN0YWNrLnRvQXJyYXkoKSk7XG4gICAgICAgIExPQ0FMX0xPR0dFUi5sb2coJyVjIC0+IGJsb2NrIHN0YWNrJywgJ2NvbG9yOiBtYWdlbnRhJywgdm0uZWxlbWVudHMoKS5kZWJ1Z0Jsb2NrcygpKTtcbiAgICAgICAgTE9DQUxfTE9HR0VSLmxvZyhcbiAgICAgICAgICAnJWMgLT4gZGVzdHJ1Y3RvciBzdGFjaycsXG4gICAgICAgICAgJ2NvbG9yOiB2aW9sZXQnLFxuICAgICAgICAgIHZtW0RFU1RST1lBQkxFX1NUQUNLXS50b0FycmF5KClcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHZtW1NUQUNLU10uc2NvcGUuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICAgIExPQ0FMX0xPR0dFUi5sb2coJyVjIC0+IHNjb3BlJywgJ2NvbG9yOiBncmVlbicsICdudWxsJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgTE9DQUxfTE9HR0VSLmxvZyhcbiAgICAgICAgICAgICclYyAtPiBzY29wZScsXG4gICAgICAgICAgICAnY29sb3I6IGdyZWVuJyxcbiAgICAgICAgICAgIHZtLnNjb3BlKCkuc2xvdHMubWFwKChzKSA9PiAoaXNTY29wZVJlZmVyZW5jZShzKSA/IHZhbHVlRm9yUmVmKHMpIDogcykpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIExPQ0FMX0xPR0dFUi5sb2coXG4gICAgICAgICAgJyVjIC0+IGVsZW1lbnRzJyxcbiAgICAgICAgICAnY29sb3I6IGJsdWUnLFxuICAgICAgICAgIHZtLmVsZW1lbnRzKClbQ1VSU09SX1NUQUNLXS5jdXJyZW50IS5lbGVtZW50XG4gICAgICAgICk7XG5cbiAgICAgICAgTE9DQUxfTE9HR0VSLmxvZygnJWMgLT4gY29uc3RydWN0aW5nJywgJ2NvbG9yOiBhcXVhJywgdm0uZWxlbWVudHMoKVsnY29uc3RydWN0aW5nJ10pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBWTSwgb3Bjb2RlOiBSdW50aW1lT3AsIHR5cGU6IG51bWJlcikge1xuICAgIGxldCBvcGVyYXRpb24gPSB0aGlzLmV2YWx1YXRlT3Bjb2RlW3R5cGVdO1xuXG4gICAgaWYgKG9wZXJhdGlvbi5zeXNjYWxsKSB7XG4gICAgICBhc3NlcnQoXG4gICAgICAgICFvcGNvZGUuaXNNYWNoaW5lLFxuICAgICAgICBgQlVHOiBNaXNtYXRjaCBiZXR3ZWVuIG9wZXJhdGlvbi5zeXNjYWxsICgke29wZXJhdGlvbi5zeXNjYWxsfSkgYW5kIG9wY29kZS5pc01hY2hpbmUgKCR7b3Bjb2RlLmlzTWFjaGluZX0pIGZvciAke29wY29kZS50eXBlfWBcbiAgICAgICk7XG4gICAgICBvcGVyYXRpb24uZXZhbHVhdGUodm0sIG9wY29kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChcbiAgICAgICAgb3Bjb2RlLmlzTWFjaGluZSxcbiAgICAgICAgYEJVRzogTWlzbWF0Y2ggYmV0d2VlbiBvcGVyYXRpb24uc3lzY2FsbCAoJHtvcGVyYXRpb24uc3lzY2FsbH0pIGFuZCBvcGNvZGUuaXNNYWNoaW5lICgke29wY29kZS5pc01hY2hpbmV9KSBmb3IgJHtvcGNvZGUudHlwZX1gXG4gICAgICApO1xuICAgICAgb3BlcmF0aW9uLmV2YWx1YXRlKHZtW0lOTkVSX1ZNXSwgb3Bjb2RlKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IEFQUEVORF9PUENPREVTID0gbmV3IEFwcGVuZE9wY29kZXMoKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=