UNPKG

@glimmer/runtime

Version:

Minimal runtime needed to render Glimmer templates

952 lines (788 loc) 90.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DidUpdateLayoutOpcode = exports.UpdateComponentOpcode = exports.ComponentElementOperations = void 0; var _env = require("@glimmer/env"); var _reference = require("@glimmer/reference"); var _util = require("@glimmer/util"); var _vm2 = require("@glimmer/vm"); var _destroyable = require("@glimmer/destroyable"); var _manager = require("@glimmer/manager"); var _resolve = require("../../component/resolve"); var _interfaces = require("../../component/interfaces"); var _opcodes = require("../../opcodes"); var _classList = _interopRequireDefault(require("../../references/class-list")); var _symbols = require("../../symbols"); var _arguments = require("../../vm/arguments"); var _dom = require("./dom"); var _curriedValue = require("../../curried-value"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } _opcodes.APPEND_OPCODES.add(78 /* PushComponentDefinition */ , (vm, { op1: handle }) => { let definition = vm[_symbols.CONSTANTS].getValue(handle); false && (0, _util.assert)(!!definition, `Missing component for ${handle}`); let { manager, capabilities } = definition; let instance = { definition, manager, capabilities, state: null, handle: null, table: null, lookup: null }; vm.stack.push(instance); }); _opcodes.APPEND_OPCODES.add(80 /* ResolveDynamicComponent */ , (vm, { op1: _isStrict }) => { let stack = vm.stack; let component = (0, _reference.valueForRef)(stack.pop()); let constants = vm[_symbols.CONSTANTS]; let owner = vm.getOwner(); let isStrict = constants.getValue(_isStrict); vm.loadValue(_vm2.$t1, null); // Clear the temp register let definition; if (typeof component === 'string') { if (_env.DEBUG && isStrict) { throw new Error(`Attempted to resolve a dynamic component with a string definition, \`${component}\` in a strict mode template. In strict mode, using strings to resolve component definitions is prohibited. You can instead import the component definition and use it directly.`); } let resolvedDefinition = (0, _resolve.resolveComponent)(vm.runtime.resolver, constants, component, owner); definition = resolvedDefinition; } else if ((0, _curriedValue.isCurriedValue)(component)) { definition = component; } else { definition = constants.component(component, owner); } stack.push(definition); }); _opcodes.APPEND_OPCODES.add(81 /* ResolveCurriedComponent */ , vm => { let stack = vm.stack; let ref = stack.pop(); let value = (0, _reference.valueForRef)(ref); let constants = vm[_symbols.CONSTANTS]; let definition; if (_env.DEBUG && !(typeof value === 'function' || typeof value === 'object' && value !== null)) { throw new Error(`Expected a component definition, but received ${value}. You may have accidentally done <${ref.debugLabel}>, where "${ref.debugLabel}" was a string instead of a curried component definition. You must either use the component definition directly, or use the {{component}} helper to create a curried component definition when invoking dynamically.`); } if ((0, _curriedValue.isCurriedValue)(value)) { definition = value; } else { definition = constants.component(value, vm.getOwner(), true); if (_env.DEBUG && definition === null) { throw new Error(`Expected a dynamic component definition, but received an object or function that did not have a component manager associated with it. The dynamic invocation was \`<${ref.debugLabel}>\` or \`{{${ref.debugLabel}}}\`, and the incorrect definition is the value at the path \`${ref.debugLabel}\`, which was: ${(0, _util.debugToString)(value)}`); } } stack.push(definition); }); _opcodes.APPEND_OPCODES.add(79 /* PushDynamicComponentInstance */ , vm => { let { stack } = vm; let definition = stack.pop(); let capabilities, manager; if ((0, _curriedValue.isCurriedValue)(definition)) { manager = capabilities = null; } else { manager = definition.manager; capabilities = definition.capabilities; } stack.push({ definition, capabilities, manager, state: null, handle: null, table: null }); }); _opcodes.APPEND_OPCODES.add(82 /* PushArgs */ , (vm, { op1: _names, op2: _blockNames, op3: flags }) => { let stack = vm.stack; let names = vm[_symbols.CONSTANTS].getArray(_names); let positionalCount = flags >> 4; let atNames = flags & 0b1000; let blockNames = flags & 0b0111 ? vm[_symbols.CONSTANTS].getArray(_blockNames) : _util.EMPTY_STRING_ARRAY; vm[_symbols.ARGS].setup(stack, names, blockNames, positionalCount, !!atNames); stack.push(vm[_symbols.ARGS]); }); _opcodes.APPEND_OPCODES.add(83 /* PushEmptyArgs */ , vm => { let { stack } = vm; stack.push(vm[_symbols.ARGS].empty(stack)); }); _opcodes.APPEND_OPCODES.add(86 /* CaptureArgs */ , vm => { let stack = vm.stack; let args = stack.pop(); let capturedArgs = args.capture(); stack.push(capturedArgs); }); _opcodes.APPEND_OPCODES.add(85 /* PrepareArgs */ , (vm, { op1: _state }) => { let stack = vm.stack; let instance = vm.fetchValue(_state); let args = stack.pop(); let { definition } = instance; if ((0, _curriedValue.isCurriedType)(definition, 0 /* Component */ )) { false && (0, _util.assert)(!definition.manager, "If the component definition was curried, we don't yet have a manager"); let constants = vm[_symbols.CONSTANTS]; let { definition: resolvedDefinition, owner, resolved, positional, named } = (0, _curriedValue.resolveCurriedValue)(definition); if (resolved === true) { definition = resolvedDefinition; } else if (typeof resolvedDefinition === 'string') { let resolvedValue = vm.runtime.resolver.lookupComponent(resolvedDefinition, owner); definition = constants.resolvedComponent(resolvedValue, resolvedDefinition); } else { definition = constants.component(resolvedDefinition, owner); } if (named !== undefined) { args.named.merge((0, _util.assign)({}, ...named)); } if (positional !== undefined) { args.realloc(positional.length); args.positional.prepend(positional); } let { manager } = definition; false && (0, _util.assert)(instance.manager === null, 'component instance manager should not be populated yet'); false && (0, _util.assert)(instance.capabilities === null, 'component instance manager should not be populated yet'); instance.definition = definition; instance.manager = manager; instance.capabilities = definition.capabilities; // Save off the owner that this component was curried with. Later on, // we'll fetch the value of this register and set it as the owner on the // new root scope. vm.loadValue(_vm2.$t1, owner); } let { manager, state } = definition; let capabilities = instance.capabilities; if (!(0, _manager.managerHasCapability)(manager, capabilities, 4 /* PrepareArgs */ )) { stack.push(args); return; } let blocks = args.blocks.values; let blockNames = args.blocks.names; let preparedArgs = manager.prepareArgs(state, args); if (preparedArgs) { args.clear(); for (let i = 0; i < blocks.length; i++) { stack.push(blocks[i]); } let { positional, named } = preparedArgs; let positionalCount = positional.length; for (let i = 0; i < positionalCount; i++) { stack.push(positional[i]); } let names = Object.keys(named); for (let i = 0; i < names.length; i++) { stack.push(named[names[i]]); } args.setup(stack, names, blockNames, positionalCount, false); } stack.push(args); }); _opcodes.APPEND_OPCODES.add(87 /* CreateComponent */ , (vm, { op1: flags, op2: _state }) => { let instance = vm.fetchValue(_state); let { definition, manager, capabilities } = instance; if (!(0, _manager.managerHasCapability)(manager, capabilities, 512 /* CreateInstance */ )) { // TODO: Closure and Main components are always invoked dynamically, so this // opcode may run even if this capability is not enabled. In the future we // should handle this in a better way. return; } let dynamicScope = null; if ((0, _manager.managerHasCapability)(manager, capabilities, 64 /* DynamicScope */ )) { dynamicScope = vm.dynamicScope(); } let hasDefaultBlock = flags & 1; let args = null; if ((0, _manager.managerHasCapability)(manager, capabilities, 8 /* CreateArgs */ )) { args = vm.stack.peek(); } let self = null; if ((0, _manager.managerHasCapability)(manager, capabilities, 128 /* CreateCaller */ )) { self = vm.getSelf(); } let state = manager.create(vm.getOwner(), definition.state, args, vm.env, dynamicScope, self, !!hasDefaultBlock); // We want to reuse the `state` POJO here, because we know that the opcodes // only transition at exactly one place. instance.state = state; if ((0, _manager.managerHasCapability)(manager, capabilities, 256 /* UpdateHook */ )) { vm.updateWith(new UpdateComponentOpcode(state, manager, dynamicScope)); } }); _opcodes.APPEND_OPCODES.add(88 /* RegisterComponentDestructor */ , (vm, { op1: _state }) => { let { manager, state, capabilities } = vm.fetchValue(_state); let d = manager.getDestroyable(state); if (_env.DEBUG && !(0, _manager.managerHasCapability)(manager, capabilities, 2048 /* WillDestroy */ ) && d !== null && typeof 'willDestroy' in d) { throw new Error('BUG: Destructor has willDestroy, but the willDestroy capability was not enabled for this component. Pre-destruction hooks must be explicitly opted into'); } if (d) vm.associateDestroyable(d); }); _opcodes.APPEND_OPCODES.add(97 /* BeginComponentTransaction */ , (vm, { op1: _state }) => { var _a; let name; if (_env.DEBUG) { let { definition, manager } = vm.fetchValue(_state); name = (_a = definition.resolvedName) !== null && _a !== void 0 ? _a : manager.getDebugName(definition.state); } vm.beginCacheGroup(name); vm.elements().pushSimpleBlock(); }); _opcodes.APPEND_OPCODES.add(89 /* PutComponentOperations */ , vm => { vm.loadValue(_vm2.$t0, new ComponentElementOperations()); }); _opcodes.APPEND_OPCODES.add(53 /* ComponentAttr */ , (vm, { op1: _name, op2: _trusting, op3: _namespace }) => { let name = vm[_symbols.CONSTANTS].getValue(_name); let trusting = vm[_symbols.CONSTANTS].getValue(_trusting); let reference = vm.stack.pop(); let namespace = _namespace ? vm[_symbols.CONSTANTS].getValue(_namespace) : null; vm.fetchValue(_vm2.$t0).setAttribute(name, reference, trusting, namespace); }); _opcodes.APPEND_OPCODES.add(105 /* StaticComponentAttr */ , (vm, { op1: _name, op2: _value, op3: _namespace }) => { let name = vm[_symbols.CONSTANTS].getValue(_name); let value = vm[_symbols.CONSTANTS].getValue(_value); let namespace = _namespace ? vm[_symbols.CONSTANTS].getValue(_namespace) : null; vm.fetchValue(_vm2.$t0).setStaticAttribute(name, value, namespace); }); class ComponentElementOperations { constructor() { this.attributes = (0, _util.dict)(); this.classes = []; this.modifiers = []; } setAttribute(name, value, trusting, namespace) { let deferred = { value, namespace, trusting }; if (name === 'class') { this.classes.push(value); } this.attributes[name] = deferred; } setStaticAttribute(name, value, namespace) { let deferred = { value, namespace }; if (name === 'class') { this.classes.push(value); } this.attributes[name] = deferred; } addModifier(modifier) { this.modifiers.push(modifier); } flush(vm) { let type; let attributes = this.attributes; for (let name in this.attributes) { if (name === 'type') { type = attributes[name]; continue; } let attr = this.attributes[name]; if (name === 'class') { setDeferredAttr(vm, 'class', mergeClasses(this.classes), attr.namespace, attr.trusting); } else { setDeferredAttr(vm, name, attr.value, attr.namespace, attr.trusting); } } if (type !== undefined) { setDeferredAttr(vm, 'type', type.value, type.namespace, type.trusting); } return this.modifiers; } } exports.ComponentElementOperations = ComponentElementOperations; function mergeClasses(classes) { if (classes.length === 0) { return ''; } if (classes.length === 1) { return classes[0]; } if (allStringClasses(classes)) { return classes.join(' '); } return (0, _classList.default)(classes); } function allStringClasses(classes) { for (let i = 0; i < classes.length; i++) { if (typeof classes[i] !== 'string') { return false; } } return true; } function setDeferredAttr(vm, name, value, namespace, trusting = false) { if (typeof value === 'string') { vm.elements().setStaticAttribute(name, value, namespace); } else { let attribute = vm.elements().setDynamicAttribute(name, (0, _reference.valueForRef)(value), trusting, namespace); if (!(0, _reference.isConstRef)(value)) { vm.updateWith(new _dom.UpdateDynamicAttributeOpcode(value, attribute, vm.env)); } } } _opcodes.APPEND_OPCODES.add(99 /* DidCreateElement */ , (vm, { op1: _state }) => { let { definition, state } = vm.fetchValue(_state); let { manager } = definition; let operations = vm.fetchValue(_vm2.$t0); manager.didCreateElement(state, vm.elements().constructing, operations); }); _opcodes.APPEND_OPCODES.add(90 /* GetComponentSelf */ , (vm, { op1: _state, op2: _names }) => { var _a; let instance = vm.fetchValue(_state); let { definition, state } = instance; let { manager } = definition; let selfRef = manager.getSelf(state); if (vm.env.debugRenderTree !== undefined) { let instance = vm.fetchValue(_state); let { definition, manager } = instance; let args; if (vm.stack.peek() === vm[_symbols.ARGS]) { args = vm[_symbols.ARGS].capture(); } else { let names = vm[_symbols.CONSTANTS].getArray(_names); vm[_symbols.ARGS].setup(vm.stack, names, [], 0, true); args = vm[_symbols.ARGS].capture(); } let moduleName; let compilable = definition.compilable; if (compilable === null) { false && (0, _util.assert)((0, _manager.managerHasCapability)(manager, instance.capabilities, 1 /* DynamicLayout */ ), 'BUG: No template was found for this component, and the component did not have the dynamic layout capability'); compilable = manager.getDynamicLayout(state, vm.runtime.resolver); if (compilable !== null) { moduleName = compilable.moduleName; } else { moduleName = '__default__.hbs'; } } else { moduleName = compilable.moduleName; } // For tearing down the debugRenderTree vm.associateDestroyable(instance); if ((0, _interfaces.hasCustomDebugRenderTreeLifecycle)(manager)) { let nodes = manager.getDebugCustomRenderTree(instance.definition.state, instance.state, args, moduleName); nodes.forEach(node => { let { bucket } = node; vm.env.debugRenderTree.create(bucket, node); (0, _destroyable.registerDestructor)(instance, () => { var _a; (_a = vm.env.debugRenderTree) === null || _a === void 0 ? void 0 : _a.willDestroy(bucket); }); vm.updateWith(new DebugRenderTreeUpdateOpcode(bucket)); }); } else { let name = (_a = definition.resolvedName) !== null && _a !== void 0 ? _a : manager.getDebugName(definition.state); vm.env.debugRenderTree.create(instance, { type: 'component', name, args, template: moduleName, instance: (0, _reference.valueForRef)(selfRef) }); vm.associateDestroyable(instance); (0, _destroyable.registerDestructor)(instance, () => { var _a; (_a = vm.env.debugRenderTree) === null || _a === void 0 ? void 0 : _a.willDestroy(instance); }); vm.updateWith(new DebugRenderTreeUpdateOpcode(instance)); } } vm.stack.push(selfRef); }); _opcodes.APPEND_OPCODES.add(91 /* GetComponentTagName */ , (vm, { op1: _state }) => { let { definition, state } = vm.fetchValue(_state); let { manager } = definition; let tagName = manager.getTagName(state); // User provided value from JS, so we don't bother to encode vm.stack.push(tagName); }); // Dynamic Invocation Only _opcodes.APPEND_OPCODES.add(92 /* GetComponentLayout */ , (vm, { op1: _state }) => { let instance = vm.fetchValue(_state); let { manager, definition } = instance; let { stack } = vm; let { compilable } = definition; if (compilable === null) { let { capabilities } = instance; false && (0, _util.assert)((0, _manager.managerHasCapability)(manager, capabilities, 1 /* DynamicLayout */ ), 'BUG: No template was found for this component, and the component did not have the dynamic layout capability'); compilable = manager.getDynamicLayout(instance.state, vm.runtime.resolver); if (compilable === null) { if ((0, _manager.managerHasCapability)(manager, capabilities, 1024 /* Wrapped */ )) { compilable = (0, _util.unwrapTemplate)(vm[_symbols.CONSTANTS].defaultTemplate).asWrappedLayout(); } else { compilable = (0, _util.unwrapTemplate)(vm[_symbols.CONSTANTS].defaultTemplate).asLayout(); } } } let handle = compilable.compile(vm.context); stack.push(compilable.symbolTable); stack.push(handle); }); _opcodes.APPEND_OPCODES.add(75 /* Main */ , (vm, { op1: register }) => { let definition = vm.stack.pop(); let invocation = vm.stack.pop(); let { manager, capabilities } = definition; let state = { definition, manager, capabilities, state: null, handle: invocation.handle, table: invocation.symbolTable, lookup: null }; vm.loadValue(register, state); }); _opcodes.APPEND_OPCODES.add(95 /* PopulateLayout */ , (vm, { op1: _state }) => { let { stack } = vm; // In DEBUG handles could be ErrHandle objects let handle = stack.pop(); let table = stack.pop(); let state = vm.fetchValue(_state); state.handle = handle; state.table = table; }); _opcodes.APPEND_OPCODES.add(38 /* VirtualRootScope */ , (vm, { op1: _state }) => { let { table, manager, capabilities, state } = vm.fetchValue(_state); let owner; if ((0, _manager.managerHasCapability)(manager, capabilities, 4096 /* HasSubOwner */ )) { owner = manager.getOwner(state); vm.loadValue(_vm2.$t1, null); // Clear the temp register } else { // Check the temp register to see if an owner was resolved from currying owner = vm.fetchValue(_vm2.$t1); if (owner === null) { // If an owner wasn't found, default to using the current owner. This // will happen for normal dynamic component invocation, // e.g. <SomeClassicEmberComponent/> owner = vm.getOwner(); } else { // Else the owner was found, so clear the temp register. This will happen // if we are loading a curried component, e.g. <@someCurriedComponent/> vm.loadValue(_vm2.$t1, null); } } vm.pushRootScope(table.symbols.length + 1, owner); }); _opcodes.APPEND_OPCODES.add(94 /* SetupForEval */ , (vm, { op1: _state }) => { let state = vm.fetchValue(_state); if (state.table.hasEval) { let lookup = state.lookup = (0, _util.dict)(); vm.scope().bindEvalScope(lookup); } }); _opcodes.APPEND_OPCODES.add(17 /* SetNamedVariables */ , (vm, { op1: _state }) => { let state = vm.fetchValue(_state); let scope = vm.scope(); let args = vm.stack.peek(); let callerNames = args.named.atNames; for (let i = callerNames.length - 1; i >= 0; i--) { let atName = callerNames[i]; let symbol = state.table.symbols.indexOf(callerNames[i]); let value = args.named.get(atName, true); if (symbol !== -1) scope.bindSymbol(symbol + 1, value); if (state.lookup) state.lookup[atName] = value; } }); function bindBlock(symbolName, blockName, state, blocks, vm) { let symbol = state.table.symbols.indexOf(symbolName); let block = blocks.get(blockName); if (symbol !== -1) vm.scope().bindBlock(symbol + 1, block); if (state.lookup) state.lookup[symbolName] = block; } _opcodes.APPEND_OPCODES.add(18 /* SetBlocks */ , (vm, { op1: _state }) => { let state = vm.fetchValue(_state); let { blocks } = vm.stack.peek(); for (let i = 0; i < blocks.names.length; i++) { bindBlock(blocks.symbolNames[i], blocks.names[i], state, blocks, vm); } }); // Dynamic Invocation Only _opcodes.APPEND_OPCODES.add(96 /* InvokeComponentLayout */ , (vm, { op1: _state }) => { let state = vm.fetchValue(_state); vm.call(state.handle); }); _opcodes.APPEND_OPCODES.add(100 /* DidRenderLayout */ , (vm, { op1: _state }) => { let instance = vm.fetchValue(_state); let { manager, state, capabilities } = instance; let bounds = vm.elements().popBlock(); if (vm.env.debugRenderTree !== undefined) { if ((0, _interfaces.hasCustomDebugRenderTreeLifecycle)(manager)) { let nodes = manager.getDebugCustomRenderTree(instance.definition.state, state, _arguments.EMPTY_ARGS); nodes.reverse().forEach(node => { let { bucket } = node; vm.env.debugRenderTree.didRender(bucket, bounds); vm.updateWith(new DebugRenderTreeDidRenderOpcode(bucket, bounds)); }); } else { vm.env.debugRenderTree.didRender(instance, bounds); vm.updateWith(new DebugRenderTreeDidRenderOpcode(instance, bounds)); } } if ((0, _manager.managerHasCapability)(manager, capabilities, 512 /* CreateInstance */ )) { let mgr = manager; mgr.didRenderLayout(state, bounds); vm.env.didCreate(instance); vm.updateWith(new DidUpdateLayoutOpcode(instance, bounds)); } }); _opcodes.APPEND_OPCODES.add(98 /* CommitComponentTransaction */ , vm => { vm.commitCacheGroup(); }); class UpdateComponentOpcode { constructor(component, manager, dynamicScope) { this.component = component; this.manager = manager; this.dynamicScope = dynamicScope; } evaluate(_vm) { let { component, manager, dynamicScope } = this; manager.update(component, dynamicScope); } } exports.UpdateComponentOpcode = UpdateComponentOpcode; class DidUpdateLayoutOpcode { constructor(component, bounds) { this.component = component; this.bounds = bounds; } evaluate(vm) { let { component, bounds } = this; let { manager, state } = component; manager.didUpdateLayout(state, bounds); vm.env.didUpdate(component); } } exports.DidUpdateLayoutOpcode = DidUpdateLayoutOpcode; class DebugRenderTreeUpdateOpcode { constructor(bucket) { this.bucket = bucket; } evaluate(vm) { var _a; (_a = vm.env.debugRenderTree) === null || _a === void 0 ? void 0 : _a.update(this.bucket); } } class DebugRenderTreeDidRenderOpcode { constructor(bucket, bounds) { this.bucket = bucket; this.bounds = bounds; } evaluate(vm) { var _a; (_a = vm.env.debugRenderTree) === null || _a === void 0 ? void 0 : _a.didRender(this.bucket, this.bounds); } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3J1bnRpbWUvbGliL2NvbXBpbGVkL29wY29kZXMvY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFVQTs7QUE2QkE7O0FBQ0E7O0FBU0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBVUE7O0FBQ0E7Ozs7QUEwQ0Esd0JBQUEsR0FBQSxDQUFrQjtBQUFBO0FBQWxCLEVBQStDLENBQUEsRUFBQSxFQUFLO0FBQUUsRUFBQSxHQUFHLEVBQUU7QUFBUCxDQUFMLEtBQXdCO0FBQ3JFLE1BQUksVUFBVSxHQUFHLEVBQUUsQ0FBRixrQkFBRSxDQUFGLENBQUEsUUFBQSxDQUFqQixNQUFpQixDQUFqQjs7QUFEcUUsV0FFckUsa0JBQU8sQ0FBQyxDQUFGLFVBQU4sRUFBcUIseUJBQXlCLE1BRnVCLEVBRXJFLENBRnFFO0FBSXJFLE1BQUk7QUFBQSxJQUFBLE9BQUE7QUFBVyxJQUFBO0FBQVgsTUFBSixVQUFBO0FBRUEsTUFBSSxRQUFRLEdBQTZCO0FBQUEsSUFBQSxVQUFBO0FBQUEsSUFBQSxPQUFBO0FBQUEsSUFBQSxZQUFBO0FBSXZDLElBQUEsS0FBSyxFQUprQyxJQUFBO0FBS3ZDLElBQUEsTUFBTSxFQUxpQyxJQUFBO0FBTXZDLElBQUEsS0FBSyxFQU5rQyxJQUFBO0FBT3ZDLElBQUEsTUFBTSxFQUFFO0FBUCtCLEdBQXpDO0FBVUEsRUFBQSxFQUFFLENBQUYsS0FBQSxDQUFBLElBQUEsQ0FBQSxRQUFBO0FBaEJGLENBQUE7O0FBbUJBLHdCQUFBLEdBQUEsQ0FBa0I7QUFBQTtBQUFsQixFQUErQyxDQUFBLEVBQUEsRUFBSztBQUFFLEVBQUEsR0FBRyxFQUFFO0FBQVAsQ0FBTCxLQUEyQjtBQUN4RSxNQUFJLEtBQUssR0FBRyxFQUFFLENBQWQsS0FBQTtBQUNBLE1BQUksU0FBUyxHQUNYLDRCQUFrQixLQUFLLENBRHpC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