UNPKG

@glimmer/compiler

Version:
881 lines (748 loc) 69.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildStatements = buildStatements; exports.buildNormalizedStatements = buildNormalizedStatements; exports.buildStatement = buildStatement; exports.s = s; exports.c = c; exports.unicode = unicode; exports.buildAngleInvocation = buildAngleInvocation; exports.buildElementParams = buildElementParams; exports.extractNamespace = extractNamespace; exports.buildAttributeValue = buildAttributeValue; exports.buildExpression = buildExpression; exports.buildCallHead = buildCallHead; exports.buildGetPath = buildGetPath; exports.buildVar = buildVar; exports.expressionContextOp = expressionContextOp; exports.buildParams = buildParams; exports.buildConcat = buildConcat; exports.buildHash = buildHash; exports.buildBlocks = buildBlocks; exports.NEWLINE = exports.ProgramSymbols = void 0; var _util = require("@glimmer/util"); var _builderInterface = require("./builder-interface"); function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } it = o[Symbol.iterator](); return it.next.bind(it); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } 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 ProgramSymbols = /*#__PURE__*/function () { function ProgramSymbols() { this._freeVariables = []; this._symbols = ['this']; this.top = this; } var _proto = ProgramSymbols.prototype; _proto.toSymbols = function toSymbols() { return this._symbols.slice(1); }; _proto.toUpvars = function toUpvars() { return this._freeVariables; }; _proto.freeVar = function freeVar(name) { return addString(this._freeVariables, name); }; _proto.block = function block(name) { return this.symbol(name); }; _proto.arg = function arg(name) { return addString(this._symbols, name); }; _proto.local = function local(name) { throw new Error("No local " + name + " was found. Maybe you meant ^" + name + " for upvar, or !" + name + " for keyword?"); }; _proto["this"] = function _this() { return 0; }; _proto.hasLocal = function hasLocal(_name) { return false; } // any symbol ; _proto.symbol = function symbol(name) { return addString(this._symbols, name); }; _proto.child = function child(locals) { return new LocalSymbols(this, locals); }; return ProgramSymbols; }(); exports.ProgramSymbols = ProgramSymbols; var LocalSymbols = /*#__PURE__*/function () { function LocalSymbols(parent, locals) { this.parent = parent; this.locals = (0, _util.dict)(); for (var _iterator = _createForOfIteratorHelperLoose(locals), _step; !(_step = _iterator()).done;) { var local = _step.value; this.locals[local] = parent.top.symbol(local); } } var _proto2 = LocalSymbols.prototype; _proto2.freeVar = function freeVar(name) { return this.parent.freeVar(name); }; _proto2.arg = function arg(name) { return this.parent.arg(name); }; _proto2.block = function block(name) { return this.parent.block(name); }; _proto2.local = function local(name) { if (name in this.locals) { return this.locals[name]; } else { return this.parent.local(name); } }; _proto2["this"] = function _this() { return this.parent["this"](); }; _proto2.hasLocal = function hasLocal(name) { if (name in this.locals) { return true; } else { return this.parent.hasLocal(name); } }; _proto2.child = function child(locals) { return new LocalSymbols(this, locals); }; _createClass(LocalSymbols, [{ key: "paramSymbols", get: function get() { return (0, _util.values)(this.locals); } }, { key: "top", get: function get() { return this.parent.top; } }]); return LocalSymbols; }(); function addString(array, item) { var index = array.indexOf(item); if (index === -1) { index = array.length; array.push(item); return index; } else { return index; } } function unimpl(message) { return new Error("unimplemented " + message); } function buildStatements(statements, symbols) { var out = []; statements.forEach(function (s) { return out.push.apply(out, buildStatement((0, _builderInterface.normalizeStatement)(s), symbols)); }); return out; } function buildNormalizedStatements(statements, symbols) { var out = []; statements.forEach(function (s) { return out.push.apply(out, buildStatement(s, symbols)); }); return out; } function buildStatement(normalized, symbols) { if (symbols === void 0) { symbols = new ProgramSymbols(); } switch (normalized.kind) { case "AppendPath" /* AppendPath */ : { return [[normalized.trusted ? 2 /* TrustingAppend */ : 1 /* Append */ , buildGetPath(normalized.path, symbols)]]; } case "AppendExpr" /* AppendExpr */ : { return [[normalized.trusted ? 2 /* TrustingAppend */ : 1 /* Append */ , buildExpression(normalized.expr, normalized.trusted ? 'TrustedAppend' : 'Append', symbols)]]; } case "Call" /* Call */ : { var path = normalized.head, params = normalized.params, hash = normalized.hash, trusted = normalized.trusted; var builtParams = params ? buildParams(params, symbols) : null; var builtHash = hash ? buildHash(hash, symbols) : null; var builtExpr = buildCallHead(path, trusted ? 3 /* AmbiguousInvoke */ : 2 /* AmbiguousAppendInvoke */ , symbols); return [[trusted ? 2 /* TrustingAppend */ : 1 /* Append */ , [28 /* Call */ , builtExpr, builtParams, builtHash]]]; } case "Literal" /* Literal */ : { return [[1 /* Append */ , normalized.value]]; } case "Comment" /* Comment */ : { return [[3 /* Comment */ , normalized.value]]; } case "Block" /* Block */ : { var blocks = buildBlocks(normalized.blocks, normalized.blockParams, symbols); var _hash = buildHash(normalized.hash, symbols); var _params = buildParams(normalized.params, symbols); var _path = buildCallHead(normalized.head, 7 /* ResolveAsComponentHead */ , symbols); return [[6 /* Block */ , _path, _params, _hash, blocks]]; } case "Keyword" /* Keyword */ : { return [buildKeyword(normalized, symbols)]; } case "Element" /* Element */ : return buildElement(normalized, symbols); case "Modifier" /* Modifier */ : throw unimpl('modifier'); case "DynamicComponent" /* DynamicComponent */ : throw unimpl('dynamic component'); default: throw (0, _util.assertNever)(normalized); } } function s(arr) { for (var _len = arguments.length, interpolated = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { interpolated[_key - 1] = arguments[_key]; } var result = arr.reduce(function (result, string, i) { return result + ("" + string + (interpolated[i] ? String(interpolated[i]) : '')); }, ''); return [0 /* Literal */ , result]; } function c(arr) { for (var _len2 = arguments.length, interpolated = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { interpolated[_key2 - 1] = arguments[_key2]; } var result = arr.reduce(function (result, string, i) { return result + ("" + string + (interpolated[i] ? String(interpolated[i]) : '')); }, ''); return [1 /* Comment */ , result]; } function unicode(charCode) { return String.fromCharCode(parseInt(charCode, 16)); } var NEWLINE = '\n'; exports.NEWLINE = NEWLINE; function buildKeyword(normalized, symbols) { var name = normalized.name; var params = buildParams(normalized.params, symbols); var childSymbols = symbols.child(normalized.blockParams || []); var block = buildBlock(normalized.blocks["default"], childSymbols, childSymbols.paramSymbols); var inverse = normalized.blocks["else"] ? buildBlock(normalized.blocks["else"], symbols, []) : null; switch (name) { case 'with': return [43 /* With */ , params[0], block, inverse]; case 'if': return [41 /* If */ , params[0], block, inverse]; case 'each': var keyExpr = normalized.hash ? normalized.hash['key'] : null; var key = keyExpr ? buildExpression(keyExpr, 'Strict', symbols) : null; return [42 /* Each */ , params[0], key, block, inverse]; default: throw new Error('unimplemented keyword'); } } function buildElement(_ref, symbols) { var name = _ref.name, attrs = _ref.attrs, block = _ref.block; var out = [hasSplat(attrs) ? [11 /* OpenElementWithSplat */ , name] : [10 /* OpenElement */ , name]]; if (attrs) { var _buildElementParams = buildElementParams(attrs, symbols), params = _buildElementParams.params, args = _buildElementParams.args; out.push.apply(out, params); false && (0, _util.assert)(args === null, "Can't pass args to a simple element"); } out.push([12 /* FlushElement */ ]); if (Array.isArray(block)) { block.forEach(function (s) { return out.push.apply(out, buildStatement(s, symbols)); }); } else if (block === null) {// do nothing } else { throw (0, _util.assertNever)(block); } out.push([13 /* CloseElement */ ]); return out; } function hasSplat(attrs) { if (attrs === null) return false; return Object.keys(attrs).some(function (a) { return attrs[a] === "Splat"; } /* Splat */ ); } function buildAngleInvocation(_ref2, symbols) { var attrs = _ref2.attrs, block = _ref2.block, head = _ref2.head; var paramList = []; var args = null; var blockList = []; if (attrs) { var built = buildElementParams(attrs, symbols); paramList = built.params; args = built.args; } if (block) blockList = buildNormalizedStatements(block, symbols); return [8 /* Component */ , buildExpression(head, 7 /* ResolveAsComponentHead */ , symbols), (0, _util.isPresent)(paramList) ? paramList : null, args, [['default'], [[blockList, []]]]]; } function buildElementParams(attrs, symbols) { var params = []; var keys = []; var values = []; Object.keys(attrs).forEach(function (key) { var value = attrs[key]; if (value === "Splat" /* Splat */ ) { params.push([17 /* AttrSplat */ , symbols.block('&attrs')]); } else if (key[0] === '@') { keys.push(key); values.push(buildExpression(value, 'Strict', symbols)); } else { params.push.apply(params, buildAttributeValue(key, value, // TODO: extract namespace from key extractNamespace(key), symbols)); } }); return { params: params, args: (0, _util.isPresent)(keys) && (0, _util.isPresent)(values) ? [keys, values] : null }; } function extractNamespace(name) { if (name === 'xmlns') { return "http://www.w3.org/2000/xmlns/" /* XMLNS */ ; } var match = /^([^:]*):([^:]*)$/.exec(name); if (match === null) { return null; } var namespace = match[1]; switch (namespace) { case 'xlink': return "http://www.w3.org/1999/xlink" /* XLink */ ; case 'xml': return "http://www.w3.org/XML/1998/namespace" /* XML */ ; case 'xmlns': return "http://www.w3.org/2000/xmlns/" /* XMLNS */ ; } return null; } function buildAttributeValue(name, value, namespace, symbols) { switch (value.type) { case "Literal" /* Literal */ : { var val = value.value; if (val === false) { return []; } else if (val === true) { return [[14 /* StaticAttr */ , name, '', namespace !== null && namespace !== void 0 ? namespace : undefined]]; } else if (typeof val === 'string') { return [[14 /* StaticAttr */ , name, val, namespace !== null && namespace !== void 0 ? namespace : undefined]]; } else { throw new Error("Unexpected/unimplemented literal attribute " + JSON.stringify(val)); } } default: return [[15 /* DynamicAttr */ , name, buildExpression(value, 'AttrValue', symbols), namespace !== null && namespace !== void 0 ? namespace : undefined]]; } } function varContext(context, bare) { switch (context) { case 'Append': return bare ? 'AppendBare' : 'AppendInvoke'; case 'TrustedAppend': return bare ? 'TrustedAppendBare' : 'TrustedAppendInvoke'; case 'AttrValue': return bare ? 'AttrValueBare' : 'AttrValueInvoke'; default: return context; } } function buildExpression(expr, context, symbols) { switch (expr.type) { case "GetPath" /* GetPath */ : { return buildGetPath(expr, symbols); } case "GetVar" /* GetVar */ : { return buildVar(expr.variable, varContext(context, true), symbols); } case "Concat" /* Concat */ : { return [29 /* Concat */ , buildConcat(expr.params, symbols)]; } case "Call" /* Call */ : { var builtParams = buildParams(expr.params, symbols); var builtHash = buildHash(expr.hash, symbols); var builtExpr = buildCallHead(expr.head, context === 'Strict' ? 'SubExpression' : varContext(context, false), symbols); return [28 /* Call */ , builtExpr, builtParams, builtHash]; } case "HasBlock" /* HasBlock */ : { return [48 /* HasBlock */ , buildVar({ kind: _builderInterface.VariableKind.Block, name: expr.name, mode: 'loose' }, 0 /* Strict */ , symbols)]; } case "HasBlockParams" /* HasBlockParams */ : { return [49 /* HasBlockParams */ , buildVar({ kind: _builderInterface.VariableKind.Block, name: expr.name, mode: 'loose' }, 0 /* Strict */ , symbols)]; } case "Literal" /* Literal */ : { if (expr.value === undefined) { return [27 /* Undefined */ ]; } else { return expr.value; } } default: (0, _util.assertNever)(expr); } } function buildCallHead(callHead, context, symbols) { if (callHead.type === "GetVar" /* GetVar */ ) { return buildVar(callHead.variable, context, symbols); } else { return buildGetPath(callHead, symbols); } } function buildGetPath(head, symbols) { return buildVar(head.path.head, 0 /* Strict */ , symbols, head.path.tail); } function buildVar(head, context, symbols, path) { var op = 30 /* GetSymbol */ ; var sym; switch (head.kind) { case _builderInterface.VariableKind.Free: if (context === 'Strict') { op = 31 /* GetStrictFree */ ; } else if (context === 'AppendBare') { op = 34 /* GetFreeAsComponentOrHelperHeadOrThisFallback */ ; } else if (context === 'AppendInvoke') { op = 35 /* GetFreeAsComponentOrHelperHead */ ; } else if (context === 'TrustedAppendBare') { op = 36 /* GetFreeAsHelperHeadOrThisFallback */ ; } else if (context === 'TrustedAppendInvoke') { op = 37 /* GetFreeAsHelperHead */ ; } else if (context === 'AttrValueBare') { op = 36 /* GetFreeAsHelperHeadOrThisFallback */ ; } else if (context === 'AttrValueInvoke') { op = 37 /* GetFreeAsHelperHead */ ; } else if (context === 'SubExpression') { op = 37 /* GetFreeAsHelperHead */ ; } else { op = expressionContextOp(context); } sym = symbols.freeVar(head.name); break; default: op = 30 /* GetSymbol */ ; sym = getSymbolForVar(head.kind, symbols, head.name); } if (path === undefined || path.length === 0) { return [op, sym]; } else { return [op, sym, path]; } } function getSymbolForVar(kind, symbols, name) { switch (kind) { case _builderInterface.VariableKind.Arg: return symbols.arg(name); case _builderInterface.VariableKind.Block: return symbols.block(name); case _builderInterface.VariableKind.Local: return symbols.local(name); case _builderInterface.VariableKind.This: return symbols["this"](); default: return (0, _util.exhausted)(kind); } } function expressionContextOp(context) { switch (context) { case 0 /* Strict */ : return 31 /* GetStrictFree */ ; case 1 /* AmbiguousAppend */ : return 34 /* GetFreeAsComponentOrHelperHeadOrThisFallback */ ; case 2 /* AmbiguousAppendInvoke */ : return 35 /* GetFreeAsComponentOrHelperHead */ ; case 3 /* AmbiguousInvoke */ : return 36 /* GetFreeAsHelperHeadOrThisFallback */ ; case 5 /* ResolveAsCallHead */ : return 37 /* GetFreeAsHelperHead */ ; case 6 /* ResolveAsModifierHead */ : return 38 /* GetFreeAsModifierHead */ ; case 7 /* ResolveAsComponentHead */ : return 39 /* GetFreeAsComponentHead */ ; default: return (0, _util.exhausted)(context); } } function buildParams(exprs, symbols) { if (exprs === null || !(0, _util.isPresent)(exprs)) return null; return exprs.map(function (e) { return buildExpression(e, 'Strict', symbols); }); } function buildConcat(exprs, symbols) { return exprs.map(function (e) { return buildExpression(e, 'AttrValue', symbols); }); } function buildHash(exprs, symbols) { if (exprs === null) return null; var out = [[], []]; Object.keys(exprs).forEach(function (key) { out[0].push(key); out[1].push(buildExpression(exprs[key], 'Strict', symbols)); }); return out; } function buildBlocks(blocks, blockParams, parent) { var keys = []; var values = []; Object.keys(blocks).forEach(function (name) { keys.push(name); if (name === 'default') { var symbols = parent.child(blockParams || []); values.push(buildBlock(blocks[name], symbols, symbols.paramSymbols)); } else { values.push(buildBlock(blocks[name], parent, [])); } }); return [keys, values]; } function buildBlock(block, symbols, locals) { if (locals === void 0) { locals = []; } return [buildNormalizedStatements(block, symbols), locals]; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi9idWlsZGVyL2J1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVQTs7QUFHQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFzQ0EsSUFBTSxjQUFOLEdBQUEsYUFBQSxZQUFBO0FBQUEsV0FBQSxjQUFBLEdBQUE7QUFDRSxTQUFBLGNBQUEsR0FBQSxFQUFBO0FBQ0EsU0FBQSxRQUFBLEdBQXFCLENBQXJCLE1BQXFCLENBQXJCO0FBRUEsU0FBQSxHQUFBLEdBQUEsSUFBQTtBQTRDRDs7QUFoREQsTUFBQSxNQUFBLEdBQUEsY0FBQSxDQUFBLFNBQUE7O0FBQUEsRUFBQSxNQUFBLENBQUEsU0FBQSxHQU1FLFNBQUEsU0FBQSxHQUFTO0FBQ1AsV0FBTyxLQUFBLFFBQUEsQ0FBQSxLQUFBLENBQVAsQ0FBTyxDQUFQO0FBUEosR0FBQTs7QUFBQSxFQUFBLE1BQUEsQ0FBQSxRQUFBLEdBVUUsU0FBQSxRQUFBLEdBQVE7QUFDTixXQUFPLEtBQVAsY0FBQTtBQVhKLEdBQUE7O0FBQUEsRUFBQSxNQUFBLENBQUEsT0FBQSxHQWNFLFNBQUEsT0FBQSxDQUFBLElBQUEsRUFBb0I7QUFDbEIsV0FBTyxTQUFTLENBQUMsS0FBRCxjQUFBLEVBQWhCLElBQWdCLENBQWhCO0FBZkosR0FBQTs7QUFBQSxFQUFBLE1BQUEsQ0FBQSxLQUFBLEdBa0JFLFNBQUEsS0FBQSxDQUFBLElBQUEsRUFBa0I7QUFDaEIsV0FBTyxLQUFBLE1BQUEsQ0FBUCxJQUFPLENBQVA7QUFuQkosR0FBQTs7QUFBQSxFQUFBLE1BQUEsQ0FBQSxHQUFBLEdBc0JFLFNBQUEsR0FBQSxDQUFBLElBQUEsRUFBZ0I7QUFDZCxXQUFPLFNBQVMsQ0FBQyxLQUFELFFBQUEsRUFBaEIsSUFBZ0IsQ0FBaEI7QUF2QkosR0FBQTs7QUFBQSxFQUFBLE1BQUEsQ0FBQSxLQUFBLEdBMEJFLFNBQUEsS0FBQSxDQUFBLElBQUEsRUFBa0I7QUFDaEIsVUFBTSxJQUFBLEtBQUEsQ0FBQSxjQUFBLElBQUEsR0FBQSwrQkFBQSxHQUFBLElBQUEsR0FBQSxrQkFBQSxHQUFOLElBQU0sR0FBTixlQUFNLENBQU47QUEzQkosR0FBQTs7QUFBQSxFQUFBLE1BQUEsQ0FBQSxNQUFBLENBQUEsR0FnQ0UsU0FBQSxLQUFBLEdBQUk7QUFDRixXQUFBLENBQUE7QUFqQ0osR0FBQTs7QUFBQSxFQUFBLE1BQUEsQ0FBQSxRQUFBLEdBb0NFLFNBQUEsUUFBQSxDQUFBLEtBQUEsRUFBc0I7QUFDcEIsV0FBQSxLQUFBO0FBckNKLEdBQUEsQ0F3Q0U7QUF4Q0Y7O0FBQUEsRUFBQSxNQUFBLENBQUEsTUFBQSxHQXlDRSxTQUFBLE1BQUEsQ0FBQSxJQUFBLEVBQW1CO0FBQ2pCLFdBQU8sU0FBUyxDQUFDLEtBQUQsUUFBQSxFQUFoQixJQUFnQixDQUFoQjtBQTFDSixHQUFBOztBQUFBLEVBQUEsTUFBQSxDQUFBLEtBQUEsR0E2Q0UsU0FBQSxLQUFBLENBQUEsTUFBQSxFQUFzQjtBQUNwQixXQUFPLElBQUEsWUFBQSxDQUFBLElBQUEsRUFBUCxNQUFPLENBQVA7QUE5Q0osR0FBQTs7QUFBQSxTQUFBLGNBQUE7QUFBQSxDQUFBLEVBQUE7Ozs7SUFrREEsWTtBQUdFLFdBQUEsWUFBQSxDQUFBLE1BQUEsRUFBQSxNQUFBLEVBQXFEO0FBQWpDLFNBQUEsTUFBQSxHQUFBLE1BQUE7QUFGWixTQUFBLE1BQUEsR0FBQSxpQkFBQTs7QUFHTixTQUFBLElBQUEsU0FBQSxHQUFBLCtCQUFBLENBQUEsTUFBQSxDQUFBLEVBQUEsS0FBQSxFQUFBLENBQUEsQ0FBQSxLQUFBLEdBQUEsU0FBQSxFQUFBLEVBQUEsSUFBQSxHQUEwQjtBQUFBLFVBQTFCLEtBQTBCLEdBQUEsS0FBQSxDQUFBLEtBQUE7QUFDeEIsV0FBQSxNQUFBLENBQUEsS0FBQSxJQUFxQixNQUFNLENBQU4sR0FBQSxDQUFBLE1BQUEsQ0FBckIsS0FBcUIsQ0FBckI7QUFDRDtBQUNGOzs7O1VBVUQsTyxHQUFBLFNBQUEsT0FBQSxDQUFBLElBQUEsRUFBb0I7QUFDbEIsV0FBTyxLQUFBLE1BQUEsQ0FBQSxPQUFBLENBQVAsSUFBTyxDQUFQOzs7VUFHRixHLEdBQUEsU0FBQSxHQUFBLENBQUEsSUFBQSxFQUFnQjtBQUNkLFdBQU8sS0FBQSxNQUFBLENBQUEsR0FBQSxDQUFQLElBQU8sQ0FBUDs7O1VBR0YsSyxHQUFBLFNBQUEsS0FBQSxDQUFBLElBQUEsRUFBa0I7QUFDaEIsV0FBTyxLQUFBLE1BQUEsQ0FBQSxLQUFBLENBQVAsSUFBTyxDQUFQOzs7VUFHRixLLEdBQUEsU0FBQSxLQUFBLENBQUEsSUFBQSxFQUFrQjtBQUNoQixRQUFJLElBQUksSUFBSSxLQUFaLE1BQUEsRUFBeUI7QUFDdkIsYUFBTyxLQUFBLE1BQUEsQ0FBUCxJQUFPLENBQVA7QUFERixLQUFBLE1BRU87QUFDTCxhQUFPLEtBQUEsTUFBQSxDQUFBLEtBQUEsQ0FBUCxJQUFPLENBQVA7QUFDRDs7O29CQUdILFNBQUEsS0FBQSxHQUFJO0FBQ0YsV0FBTyxLQUFQLE1BQU8sQ0FBUCxNQUFPLEdBQVA7OztVQUdGLFEsR0FBQSxTQUFBLFFBQUEsQ0FBQSxJQUFBLEVBQXFCO0FBQ25CLFFBQUksSUFBSSxJQUFJLEtBQVosTUFBQSxFQUF5QjtBQUN2QixhQUFBLElBQUE7QUFERixLQUFBLE1BRU87QUFDTCxhQUFPLEtBQUEsTUFBQSxDQUFBLFFBQUEsQ0FBUCxJQUFPLENBQVA7QUFDRDs7O1VBR0gsSyxHQUFBLFNBQUEsS0FBQSxDQUFBLE1BQUEsRUFBc0I7QUFDcEIsV0FBTyxJQUFBLFlBQUEsQ0FBQSxJQUFBLEVBQVAsTUFBTyxDQUFQOzs7Ozt3QkF6Q2M7QUFDZCxhQUFPLGtCQUFPLEtBQWQsTUFBTyxDQUFQO0FBQ0Q7Ozt3QkFFTTtBQUNMLGFBQU8sS0FBQSxNQUFBLENBQVAsR0FBQTtBQUNEOzs7Ozs7QUF1Q0gsU0FBQSxTQUFBLENBQUEsS0FBQSxFQUFBLElBQUEsRUFBZ0Q7QUFDOUMsTUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFMLE9BQUEsQ0FBWixJQUFZLENBQVo7O0FBRUEsTUFBSSxLQUFLLEtBQUssQ0FBZCxDQUFBLEVBQWtCO0FBQ2hCLElBQUEsS0FBSyxHQUFHLEtBQUssQ0FBYixNQUFBO0FBQ0EsSUFBQSxLQUFLLENBQUwsSUFBQSxDQUFBLElBQUE7QUFDQSxXQUFBLEtBQUE7QUFIRixHQUFBLE1BSU87QUFDTCxXQUFBLEtBQUE7QUFDRDtBQUNGOztBQVFELFNBQUEsTUFBQSxDQUFBLE9BQUEsRUFBK0I7QUFDN0IsU0FBTyxJQUFBLEtBQUEsQ0FBQSxtQkFBUCxPQUFPLENBQVA7QUFDRDs7QUFFSyxTQUFBLGVBQUEsQ0FBQSxVQUFBLEVBQUEsT0FBQSxFQUVZO0FBRWhCLE1BQUksR0FBRyxHQUFQLEVBQUE7QUFFQSxFQUFBLFVBQVUsQ0FBVixPQUFBLENBQW9CLFVBQUQsQ0FBQyxFQUFEO0FBQUEsV0FBTyxHQUFHLENBQUgsSUFBQSxDQUFBLEtBQUEsQ0FBQSxHQUFBLEVBQVksY0FBYyxDQUFDLDBDQUFELENBQUMsQ0FBRCxFQUFwRCxPQUFvRCxDQUExQixDQUFQO0FBQW5CLEdBQUE7QUFFQSxTQUFBLEdBQUE7QUFDRDs7QUFFSyxTQUFBLHlCQUFBLENBQUEsVUFBQSxFQUFBLE9BQUEsRUFFWTtBQUVoQixNQUFJLEdBQUcsR0FBUCxFQUFBO0FBRUEsRUFBQSxVQUFVLENBQVYsT0FBQSxDQUFvQixVQUFELENBQUMsRUFBRDtBQUFBLFdBQU8sR0FBRyxDQUFILElBQUEsQ0FBQSxLQUFBLENBQUEsR0FBQSxFQUFZLGNBQWMsQ0FBQSxDQUFBLEVBQXBELE9BQW9ELENBQTFCLENBQVA7QUFBbkIsR0FBQTtBQUVBLFNBQUEsR0FBQTtBQUNEOztBQUVLLFNBQUEsY0FBQSxDQUFBLFVBQUEsRUFBQSxPQUFBLEVBRW1DO0FBQUEsTUFBdkMsT0FBdUMsS0FBQSxLQUFBLENBQUEsRUFBQTtBQUF2QyxJQUFBLE9BQXVDLEdBQXBCLElBRmYsY0FFZSxFQUFuQjtBQUF1Qzs7QUFFdkMsVUFBUSxVQUFVLENBQWxCLElBQUE7QUFDRSxTQUFBO0FBQUE7QUFBQTtBQUEwQjtBQUN4QixlQUFPLENBQ0wsQ0FDRSxVQUFVLENBQVYsT0FBQSxHQUFvQjtBQUFBO0FBQXBCLFVBQXdDO0FBQUE7QUFEMUMsVUFFRSxZQUFZLENBQUMsVUFBVSxDQUFYLElBQUEsRUFIaEIsT0FHZ0IsQ0FGZCxDQURLLENBQVA7QUFNRDs7QUFFRCxTQUFBO0FBQUE7QUFBQTtBQUEwQjtBQUN4QixlQUFPLENBQ0wsQ0FDRSxVQUFVLENBQVYsT0FBQSxHQUFvQjtBQUFBO0FBQXBCLFVBQXdDO0FBQUE7QUFEMUMsVUFFRSxlQUFlLENBQ2IsVUFBVSxDQURHLElBQUEsRUFFYixVQUFVLENBQVYsT0FBQSxHQUFBLGVBQUEsR0FGYSxRQUFBLEVBSG5CLE9BR21CLENBRmpCLENBREssQ0FBUDtBQVVEOztBQUVELFNBQUE7QUFBQTtBQUFBO0FBQW9CO0FBQUEsWUFDZCxJQURjLEdBQ2xCLFVBRGtCLENBQUEsSUFBQTtBQUFBLFlBQ2QsTUFEYyxHQUNsQixVQURrQixDQUFBLE1BQUE7QUFBQSxZQUNkLElBRGMsR0FDbEIsVUFEa0IsQ0FBQSxJQUFBO0FBQUEsWUFDYyxPQURkLEdBQ2xCLFVBRGtCLENBQUEsT0FBQTtBQUVsQixZQUFJLFdBQVcsR0FBbUMsTUFBTSxHQUNwRCxXQUFXLENBQUEsTUFBQSxFQUR5QyxPQUN6QyxDQUR5QyxHQUF4RCxJQUFBO0FBR0EsWUFBSSxTQUFTLEdBQXlCLElBQUksR0FBRyxTQUFTLENBQUEsSUFBQSxFQUFaLE9BQVksQ0FBWixHQUExQyxJQUFBO0FBQ0EsWUFBSSxTQUFTLEdBQTBCLGFBQWEsQ0FBQSxJQUFBLEVBRWxELE9BQU8sR0FDSjtBQUFBO0FBREksVUFFSjtBQUFBO0FBSitDLFVBQXBELE9BQW9ELENBQXBEO0FBUUEsZUFBTyxDQUNMLENBQUMsT0FBTyxHQUFFO0FBQUE7QUFBRixVQUFzQjtBQUFBO0FBQTlCLFVBQTBDLENBQUE7QUFBQTtBQUFBLFVBQUEsU0FBQSxFQUFBLFdBQUEsRUFENUMsU0FDNEMsQ0FBMUMsQ0FESyxDQUFQO0FBR0Q7O0FBRUQsU0FBQTtBQUFBO0FBQUE7QUFBdUI7QUFDckIsZUFBTyxDQUFDLENBQUE7QUFBQTtBQUFBLFVBQVksVUFBVSxDQUE5QixLQUFRLENBQUQsQ0FBUDtBQUNEOztBQUVELFNBQUE7QUFBQTtBQUFBO0FBQXVCO0FBQ3JCLGVBQU8sQ0FBQyxDQUFBO0FBQUE7QUFBQSxVQUFhLFVBQVUsQ0FBL0IsS0FBUSxDQUFELENBQVA7QUFDRDs7QUFFRCxTQUFBO0FBQUE7QUFBQTtBQUFxQjtBQUNuQixZQUFJLE1BQU0sR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFYLE1BQUEsRUFBb0IsVUFBVSxDQUE5QixXQUFBLEVBQXhCLE9BQXdCLENBQXhCOztBQUNBLFlBQUksS0FBSSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQVgsSUFBQSxFQUFwQixPQUFvQixDQUFwQjs7QUFDQSxZQUFJLE9BQU0sR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFYLE1BQUEsRUFBeEIsT0FBd0IsQ0FBeEI7O0FBQ0EsWUFBSSxLQUFJLEdBQUcsYUFBYSxDQUN0QixVQUFVLENBRFksSUFBQSxFQUNQO0FBQUE7QUFETyxVQUF4QixPQUF3QixDQUF4Qjs7QUFNQSxlQUFPLENBQUMsQ0FBQTtBQUFBO0FBQUEsVUFBQSxLQUFBLEVBQUEsT0FBQSxFQUFBLEtBQUEsRUFBUixNQUFRLENBQUQsQ0FBUDtBQUNEOztBQUVELFNBQUE7QUFBQTtBQUFBO0FBQXVCO0FBQ3JCLGVBQU8sQ0FBQyxZQUFZLENBQUEsVUFBQSxFQUFwQixPQUFvQixDQUFiLENBQVA7QUFDRDs7QUFFRCxTQUFBO0FBQUE7QUFBQTtBQUNFLGFBQU8sWUFBWSxDQUFBLFVBQUEsRUFBbkIsT0FBbUIsQ0FBbkI7O0FBRUYsU0FBQTtBQUFBO0FBQUE7QUFDRSxZQUFNLE1BQU0sQ0FBWixVQUFZLENBQVo7O0FBRUYsU0FBQTtBQUFBO0FBQUE7QUFDRSxZQUFNLE1BQU0sQ0FBWixtQkFBWSxDQUFaOztBQUVGO0FBQ0UsWUFBTSx1QkFBTixVQUFNLENBQU47QUE3RUo7QUErRUQ7O0FBRUssU0FBQSxDQUFBLENBQUEsR0FBQSxFQUVzQjtBQUFBLE9BQUEsSUFBQSxJQUFBLEdBQUEsU0FBQSxDQUFBLE1BQUEsRUFGdEIsWUFFc0IsR0FBQSxJQUFBLEtBQUEsQ0FBQSxJQUFBLEdBQUEsQ0FBQSxHQUFBLElBQUEsR0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEVBQUEsSUFBQSxHQUFBLENBQUEsRUFBQSxJQUFBLEdBQUEsSUFBQSxFQUFBLElBQUEsRUFBQSxFQUFBO0FBRnRCLElBQUEsWUFFc0IsQ0FBQSxJQUFBLEdBQUEsQ0FBQSxDQUZ0QixHQUVzQixTQUFBLENBQUEsSUFBQSxDQUZ0QjtBQUVzQjs7QUFFMUIsTUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFILE1BQUEsQ0FDWCxVQUFBLE1BQUEsRUFBQSxNQUFBLEVBQUEsQ0FBQSxFQUFBO0FBQUEsV0FBdUIsTUFBTSxJQUFBLEtBQUEsTUFBQSxJQUFlLFlBQVksQ0FBWixDQUFZLENBQVosR0FBa0IsTUFBTSxDQUFDLFlBQVksQ0FBckMsQ0FBcUMsQ0FBYixDQUF4QixHQURqQyxFQUNrQixDQUFBLENBQTdCO0FBRFcsR0FBQSxFQUFiLEVBQWEsQ0FBYjtBQUtBLFNBQU8sQ0FBQTtBQUFBO0FBQUEsSUFBUCxNQUFPLENBQVA7QUFDRDs7QUFFSyxTQUFBLENBQUEsQ0FBQSxHQUFBLEVBQWlFO0FBQUEsT0FBQSxJQUFBLEtBQUEsR0FBQSxTQUFBLENBQUEsTUFBQSxFQUFqRSxZQUFpRSxHQUFBLElBQUEsS0FBQSxDQUFBLEtBQUEsR0FBQSxDQUFBLEdBQUEsS0FBQSxHQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsRUFBQSxLQUFBLEdBQUEsQ0FBQSxFQUFBLEtBQUEsR0FBQSxLQUFBLEVBQUEsS0FBQSxFQUFBLEVBQUE7QUFBakUsSUFBQSxZQUFpRSxDQUFBLEtBQUEsR0FBQSxDQUFBLENBQWpFLEdBQWlFLFNBQUEsQ0FBQSxLQUFBLENBQWpFO0FBQWlFOztBQUNyRSxNQUFJLE1BQU0sR0FBRyxHQUFHLENBQUgsTUFBQSxDQUNYLFVBQUEsTUFBQSxFQUFBLE1BQUEsRUFBQSxDQUFBLEVBQUE7QUFBQSxXQUF1QixNQUFNLElBQUEsS0FBQSxNQUFBLElBQWUsWUFBWSxDQUFaLENBQVksQ0FBWixHQUFrQixNQUFNLENBQUMsWUFBWSxDQUFyQyxDQUFxQyxDQUFiLENBQXhCLEdBRGpDLEVBQ2tCLENBQUEsQ0FBN0I7QUFEVyxHQUFBLEVBQWIsRUFBYSxDQUFiO0FBS0EsU0FBTyxDQUFBO0FBQUE7QUFBQSxJQUFQLE1BQU8sQ0FBUDtBQUNEOztBQUVLLFNBQUEsT0FBQSxDQUFBLFFBQUEsRUFBa0M7QUFDdEMsU0FBTyxNQUFNLENBQU4sWUFBQSxDQUFvQixRQUFRLENBQUEsUUFBQSxFQUFuQyxFQUFtQyxDQUE1QixDQUFQO0FBQ0Q7O0FBRU0sSUFBTSxPQUFPLEdBQWIsSUFBQTs7O0FBRVAsU0FBQSxZQUFBLENBQUEsVUFBQSxFQUFBLE9BQUEsRUFFa0I7QUFBQSxNQUVWLElBRlUsR0FFaEIsVUFGZ0IsQ0FBQSxJQUFBO0FBR2hCLE1BQUksTUFBTSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQVgsTUFBQSxFQUF4QixPQUF3QixDQUF4QjtBQUNBLE1BQUksWUFBWSxHQUFHLE9BQU8sQ0FBUCxLQUFBLENBQWMsVUFBVSxDQUFWLFdBQUEsSUFBakMsRUFBbUIsQ0FBbkI7QUFFQSxNQUFJLEtBQUssR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFYLE1BQUMsQ0FBRCxTQUFDLENBQUQsRUFBQSxZQUFBLEVBQTBDLFlBQVksQ0FBNUUsWUFBc0IsQ0FBdEI7QUFDQSxNQUFJLE9BQU8sR0FBRyxVQUFVLENBQVYsTUFBQSxDQUFBLE1BQUEsSUFBeUIsVUFBVSxDQUFDLFVBQVUsQ0FBWCxNQUFDLENBQUQsTUFBQyxDQUFELEVBQUEsT0FBQSxFQUFuQyxFQUFtQyxDQUFuQyxHQUFkLElBQUE7O0FBRUEsVUFBQSxJQUFBO0FBQ0UsU0FBQSxNQUFBO0FBQ0UsYUFBTyxDQUFBO0FBQUE7QUFBQSxRQUFpQixNQUFQLENBQVYsQ0FBVSxDQUFWLEVBQUEsS0FBQSxFQUFQLE9BQU8sQ0FBUDs7QUFDRixTQUFBLElBQUE7QUFDRSxhQUFPLENBQUE7QUFBQTtBQUFBLFFBQWUsTUFBUCxDQUFSLENBQVEsQ0FBUixFQUFBLEtBQUEsRUFBUCxPQUFPLENBQVA7O0FBQ0YsU0FBQSxNQUFBO0FBQ0UsVUFBSSxPQUFPLEdBQUcsVUFBVSxDQUFWLElBQUEsR0FBa0IsVUFBVSxDQUFWLElBQUEsQ0FBbEIsS0FBa0IsQ0FBbEIsR0FBZCxJQUFBO0FBQ0EsVUFBSSxHQUFHLEdBQUcsT0FBTyxHQUFHLGVBQWUsQ0FBQSxPQUFBLEVBQUEsUUFBQSxFQUFsQixPQUFrQixDQUFsQixHQUFqQixJQUFBO0FBRUEsYUFBTyxDQUFBO0FBQUE7QUFBQSxRQUFpQixNQUFQLENBQVYsQ0FBVSxDQUFWLEVBQUEsR0FBQSxFQUFBLEtBQUEsRUFBUCxPQUFPLENBQVA7O0FBQ0Y7QUFDRSxZQUFNLElBQUEsS0FBQSxDQUFOLHVCQUFNLENBQU47QUFYSjtBQWFEOztBQUVELFNBQUEsWUFBQSxDQUFBLElBQUEsRUFBQSxPQUFBLEVBRWtCO0FBQUEsTUFEaEIsSUFDZ0IsR0FBQSxJQUFBLENBRGhCLElBQ2dCO0FBQUEsTUFEaEIsS0FDZ0IsR0FBQSxJQUFBLENBRGhCLEtBQ2dCO0FBQUEsTUFERCxLQUNDLEdBQUEsSUFBQSxDQURELEtBQ0M7QUFFaEIsTUFBSSxHQUFHLEdBQTJCLENBQ2hDLFFBQVEsQ0FBUixLQUFRLENBQVIsR0FBa0IsQ0FBQTtBQUFBO0FBQUEsSUFBbEIsSUFBa0IsQ0FBbEIsR0FBb0QsQ0FBQTtBQUFBO0FBQUEsSUFEdEQsSUFDc0QsQ0FEcEIsQ0FBbEM7O0FBR0EsTUFBQSxLQUFBLEVBQVc7QUFBQSxRQUFBLG1CQUFBLEdBQ2Msa0JBQWtCLENBQUEsS0FBQSxFQURoQyxPQUNnQyxDQURoQztBQUFBLFFBQ0wsTUFESyxHQUFBLG1CQUFBLENBQUEsTUFBQTtBQUFBLFFBQ0ssSUFETCxHQUFBLG1CQUFBLENBQUEsSUFBQTs7QUFFVCxJQUFBLEdBQUcsQ0FBSCxJQUFBLENBQUEsS0FBQSxDQUFBLEdBQUEsRUFBQSxNQUFBO0FBRlMsYUFHVCxrQkFBTyxJQUFJLEtBSEYsSUFHVCxFQUhTLHFDQUdULENBSFM7QUFJVjs7QUFDRCxFQUFBLEdBQUcsQ0FBSCxJQUFBLENBQVMsQ0FBQTtBQUFBO0FBQUEsR0FBVDs7QUFFQSxNQUFJLEtBQUssQ0FBTCxPQUFBLENBQUosS0FBSSxDQUFKLEVBQTBCO0FBQ3hCLElBQUEsS0FBSyxDQUFMLE9BQUEsQ0FBZSxVQUFELENBQUMsRUFBRDtBQUFBLGFBQU8sR0FBRyxDQUFILElBQUEsQ0FBQSxLQUFBLENBQUEsR0FBQSxFQUFZLGNBQWMsQ0FBQSxDQUFBLEVBQS9DLE9BQStDLENBQTFCLENBQVA7QUFBZCxLQUFBO0FBREYsR0FBQSxNQUVPLElBQUksS0FBSyxLQUFULElBQUEsRUFBb0IsQ0FDekI7QUFESyxHQUFBLE1BRUE7QUFDTCxVQUFNLHVCQUFOLEtBQU0sQ0FBTjtBQUNEOztBQUVELEVBQUEsR0FBRyxDQUFILElBQUEsQ0FBUyxDQUFBO0FBQUE7QUFBQSxHQUFUO0FBRUEsU0FBQSxHQUFBO0FBQ0Q7O0FBRUQsU0FBQSxRQUFBLENBQUEsS0FBQSxFQUFnRDtBQUM5QyxNQUFJLEtBQUssS0FBVCxJQUFBLEVBQW9CLE9BQUEsS0FBQTtBQUVwQixTQUFPLE1BQU0sQ0FBTixJQUFBLENBQUEsS0FBQSxFQUFBLElBQUEsQ0FBeUIsVUFBRCxDQUFDLEVBQUQ7QUFBQSxXQUFPLEtBQUssQ0FBTCxDQUFLLENBQUwsS0FBUCxPQUFBO0FBQUE7QUFBZTtBQUF2QyxHQUFQO0FBQ0Q7O0FBRUssU0FBQSxvQkFBQSxDQUFBLEtBQUEsRUFBQSxPQUFBLEVBRVk7QUFBQSxNQURoQixLQUNnQixHQUFBLEtBQUEsQ0FEaEIsS0FDZ0I7QUFBQSxNQURoQixLQUNnQixHQUFBLEtBQUEsQ0FEaEIsS0FDZ0I7QUFBQSxNQURBLElBQ0EsR0FBQSxLQUFBLENBREEsSUFDQTtBQUVoQixNQUFJLFNBQVMsR0FBYixFQUFBO0FBQ0EsTUFBSSxJQUFJLEdBQVIsSUFBQTtBQUNBLE1BQUksU0FBUyxHQUFiLEVBQUE7O0FBRUEsTUFBQSxLQUFBLEVBQVc7QUFDVCxRQUFJLEtBQUssR0FBRyxrQkFBa0IsQ0FBQSxLQUFBLEVBQTlCLE9BQThCLENBQTlCO0FBQ0EsSUFBQSxTQUFTLEdBQUcsS0FBSyxDQUFqQixNQUFBO0FBQ0EsSUFBQSxJQUFJLEdBQUcsS0FBSyxDQUFaLElBQUE7QUFDRDs7QUFFRCxNQUFBLEtBQUEsRUFBVyxTQUFTLEdBQUcseUJBQXlCLENBQUEsS0FBQSxFQUFyQyxPQUFxQyxDQUFyQztBQUVYLFNBQU8sQzs7QUFBQSxJQUVMLGVBQWUsQ0FBQSxJQUFBLEVBQUs7QUFBQTtBQUFMLElBRlYsT0FFVSxDQUZWLEVBR0wscUJBQUEsU0FBQSxJQUFBLFNBQUEsR0FISyxJQUFBLEVBQUEsSUFBQSxFQUtMLENBQUMsQ0FBRCxTQUFDLENBQUQsRUFBYyxDQUFDLENBQUEsU0FBQSxFQUxqQixFQUtpQixDQUFELENBQWQsQ0FMSyxDQUFQO0FBT0Q7O0FBRUssU0FBQSxrQkFBQSxDQUFBLEtBQUEsRUFBQSxPQUFBLEVBRVk7QUFFaEIsTUFBSSxNQUFNLEdBQVYsRUFBQTtBQUNBLE1BQUksSUFBSSxHQUFSLEVBQUE7QUFDQSxNQUFJLE1BQU0sR0FBVixFQUFBO0FBRUEsRUFBQSxNQUFNLENBQU4sSUFBQSxDQUFBLEtBQUEsRUFBQSxPQUFBLENBQTRCLFVBQUQsR0FBQyxFQUFPO0FBQ2pDLFFBQUksS0FBSyxHQUFHLEtBQUssQ0FBakIsR0FBaUIsQ0FBakI7O0FBRUEsUUFBSSxLQUFLLEtBQUE7QUFBQTtBQUFULE1BQThCO0FBQzVCLFFBQUEsTUFBTSxDQUFOLElBQUEsQ0FBWSxDQUFBO0FBQUE7QUFBQSxVQUFlLE9BQU8sQ0FBUCxLQUFBLENBQTNCLFFBQTJCLENBQWYsQ0FBWjtBQURGLE9BQUEsTUFFTyxJQUFJLEdBQUcsQ0FBSCxDQUFHLENBQUgsS0FBSixHQUFBLEVBQW9CO0FBQ3pCLE1BQUEsSUFBSSxDQUFKLElBQUEsQ0FBQSxHQUFBO0FBQ0EsTUFBQSxNQUFNLENBQU4sSUFBQSxDQUFZLGVBQWUsQ0FBQSxLQUFBLEVBQUEsUUFBQSxFQUEzQixPQUEyQixDQUEzQjtBQUZLLEtBQUEsTUFHQTtBQUNMLE1BQUEsTUFBTSxDQUFOLElBQUEsQ0FBQSxLQUFBLENBQUEsTUFBQSxFQUNLLG1CQUFtQixDQUFBLEdBQUEsRUFBQSxLQUFBLEVBR3BCO0FBQ0EsTUFBQSxnQkFBZ0IsQ0FKSSxHQUlKLENBSkksRUFEeEIsT0FDd0IsQ0FEeEI7QUFTRDtBQWxCSCxHQUFBO0FBcUJBLFNBQU87QUFBRSxJQUFBLE1BQUYsRUFBQSxNQUFBO0FBQVUsSUFBQSxJQUFJLEVBQUUscUJBQUEsSUFBQSxLQUFtQixxQkFBbkIsTUFBbUIsQ0FBbkIsR0FBdUMsQ0FBQSxJQUFBLEVBQXZDLE1BQXVDLENBQXZDLEdBQXdEO0FBQXhFLEdBQVA7QUFDRDs7QUFFSyxTQUFBLGdCQUFBLENBQUEsSUFBQSxFQUF1QztBQUMzQyxNQUFJLElBQUksS0FBUixPQUFBLEVBQXNCO0FBQ3BCLFdBQUE7QUFBQTtBQUFBO0FBQ0Q7O0FBRUQsTUFBSSxLQUFLLEdBQUcsb0JBQUEsSUFBQSxDQUFaLElBQVksQ0FBWjs7QUFFQSxNQUFJLEtBQUssS0FBVCxJQUFBLEVBQW9CO0FBQ2xCLFdBQUEsSUFBQTtBQUNEOztBQUVELE1BQUksU0FBUyxHQUFHLEtBQUssQ0FBckIsQ0FBcUIsQ0FBckI7O0FBRUEsVUFBQSxTQUFBO0FBQ0UsU0FBQSxPQUFBO0FBQ0UsYUFBQTtBQUFBO0FBQUE7O0FBQ0YsU0FBQSxLQUFBO0FBQ0UsYUFBQTtBQUFBO0FBQUE7O0FBQ0YsU0FBQSxPQUFBO0FBQ0UsYUFBQTtBQUFBO0FBQUE7QUFOSjs7QUFTQSxTQUFBLElBQUE7QUFDRDs7QUFFSyxTQUFBLG1CQUFBLENBQUEsSUFBQSxFQUFBLEtBQUEsRUFBQSxTQUFBLEVBQUEsT0FBQSxFQUlZO0FBRWhCLFVBQVEsS0FBSyxDQUFiLElBQUE7QUFDRSxTQUFBO0FBQUE7QUFBQTtBQUE2QjtBQUMzQixZQUFJLEdBQUcsR0FBRyxLQUFLLENBQWYsS0FBQTs7QUFFQSxZQUFJLEdBQUcsS0FBUCxLQUFBLEVBQW1CO0FBQ2pCLGlCQUFBLEVBQUE7QUFERixTQUFBLE1BRU8sSUFBSSxHQUFHLEtBQVAsSUFBQSxFQUFrQjtBQUN2QixpQkFBTyxDQUFDLENBQUE7QUFBQTtBQUFBLFlBQUEsSUFBQSxFQUFBLEVBQUEsRUFBMEIsU0FBUyxLQUFULElBQUEsSUFBQSxTQUFTLEtBQUEsS0FBVCxDQUFBLEdBQUEsU0FBQSxHQUFsQyxTQUFRLENBQUQsQ0FBUDtBQURLLFNBQUEsTUFFQSxJQUFJLE9BQUEsR0FBQSxLQUFKLFFBQUEsRUFBNkI7QUFDbEMsaUJBQU8sQ0FBQyxDQUFBO0FBQUE7QUFBQSxZQUFBLElBQUEsRUFBQSxHQUFBLEVBQTJCLFNBQVMsS0FBVCxJQUFBLElBQUEsU0FBUyxLQUFBLEtBQVQsQ0FBQSxHQUFBLFNBQUEsR0FBbkMsU0FBUSxDQUFELENBQVA7QUFESyxTQUFBLE1BRUE7QUFDTCxnQkFBTSxJQUFBLEtBQUEsQ0FBQSxnREFBd0QsSUFBSSxDQUFKLFNBQUEsQ0FBOUQsR0FBOEQsQ0FBeEQsQ0FBTjtBQUNEO0FBQ0Y7O0FBRUQ7QUFDRSxhQUFPLENBQ0wsQzs7QUFBQSxRQUFBLElBQUEsRUFHRSxlQUFlLENBQUEsS0FBQSxFQUFBLFdBQUEsRUFIakIsT0FHaUIsQ0FIakIsRUFJRSxTQUFTLEtBQVQsSUFBQSxJQUFBLFNBQVMsS0FBQSxLQUFULENBQUEsR0FBQSxTQUFBLEdBTEosU0FDRSxDQURLLENBQVA7QUFoQko7QUF5QkQ7O0FBVUQsU0FBQSxVQUFBLENBQUEsT0FBQSxFQUFBLElBQUEsRUFBMEQ7QUFDeEQsVUFBQSxPQUFBO0FBQ0UsU0FBQSxRQUFBO0FBQ0UsYUFBTyxJQUFJLEdBQUEsWUFBQSxHQUFYLGNBQUE7O0FBQ0YsU0FBQSxlQUFBO0FBQ0UsYUFBTyxJQUFJLEdBQUEsbUJBQUEsR0FBWCxxQkFBQTs7QUFDRixTQUFBLFdBQUE7QUFDRSxhQUFPLElBQUksR0FBQSxlQUFBLEdBQVgsaUJBQUE7O0FBQ0Y7QUFDRSxhQUFBLE9BQUE7QUFSSjtBQVVEOztBQUVLLFNBQUEsZUFBQSxDQUFBLElBQUEsRUFBQSxPQUFBLEVBQUEsT0FBQSxFQUdZO0FBRWhCLFVBQVEsSUFBSSxDQUFaLElBQUE7QUFDRSxTQUFBO0FBQUE7QUFBQTtBQUE2QjtBQUMzQixlQUFPLFlBQVksQ0FBQSxJQUFBLEVBQW5CLE9BQW1CLENBQW5CO0FBQ0Q7O0FBRUQsU0FBQTtBQUFBO0FBQUE7QUFBNEI7QUFDMUIsZUFBTyxRQUFRLENBQUMsSUFBSSxDQUFMLFFBQUEsRUFBZ0IsVUFBVSxDQUFBLE9BQUEsRUFBMUIsSUFBMEIsQ0FBMUIsRUFBZixPQUFlLENBQWY7QUFDRDs7QUFFRCxTQUFBO0FBQUE7QUFBQTtBQUE0QjtBQUMxQixlQUFPLENBQUE7QUFBQTtBQUFBLFVBQVksV0FBVyxDQUFDLElBQUksQ0FBTCxNQUFBLEVBQTlCLE9BQThCLENBQXZCLENBQVA7QUFDRDs7QUFFRCxTQUFBO0FBQUE7QUFBQTtBQUEwQjtBQUN4QixZQUFJLFdBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFMLE1BQUEsRUFBN0IsT0FBNkIsQ0FBN0I7QUFDQSxZQUFJLFNBQVMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFMLElBQUEsRUFBekIsT0FBeUIsQ0FBekI7QUFDQSxZQUFJLFNBQVMsR0FBRyxhQUFhLENBQzNCLElBQUksQ0FEdUIsSUFBQSxFQUUzQixPQUFPLEtBQVAsUUFBQSxHQUFBLGVBQUEsR0FBeUMsVUFBVSxDQUFBLE9BQUEsRUFGeEIsS0FFd0IsQ0FGeEIsRUFBN0IsT0FBNkIsQ0FBN0I7QUFNQSxlQUFPLENBQUE7QUFBQTtBQUFBLFVBQUEsU0FBQSxFQUFBLFdBQUEsRUFBUCxTQUFPLENBQVA7QUFDRDs7QUFFRCxTQUFBO0FBQUE7QUFBQTtBQUE4QjtBQUM1QixlQUFPLEM7O0FBQUEsVUFFTCxRQUFRLENBQ047QUFBRSxVQUFBLElBQUksRUFBRSwrQkFBUixLQUFBO0FBQTRCLFVBQUEsSUFBSSxFQUFFLElBQUksQ0FBdEMsSUFBQTtBQUE2QyxVQUFBLElBQUksRUFBRTtBQUFuRCxTQURNLEVBQ3NEO0FBQUE7QUFEdEQsVUFGVixPQUVVLENBRkgsQ0FBUDtBQVFEOztBQUVELFNBQUE7QUFBQTtBQUFBO0FBQW9DO0FBQ2xDLGVBQU8sQzs7QUFBQSxVQUVMLFFBQVEsQ0FDTjtBQUFFLFVBQUEsSUFBSSxFQUFFLCtCQUFSLEtBQUE7QUFBNEIsVUFBQSxJQUFJLEVBQUUsSUFBSSxDQUF0QyxJQUFBO0FBQTZDLFVBQUEsSUFBSSxFQUFFO0FBQW5ELFNBRE0sRUFDc0Q7QUFBQTtBQUR0RCxVQUZWLE9BRVUsQ0FGSCxDQUFQO0FBUUQ7O0FBRUQsU0FBQTtBQUFBO0FBQUE7QUFBNkI7QUFDM0IsWUFBSSxJQUFJLENBQUosS0FBQSxLQUFKLFNBQUEsRUFBOEI7QUFDNUIsaUJBQU8sQ0FBQTtBQUFBO0FBQUEsV0FBUDtBQURGLFNBQUEsTUFFTztBQUNMLGlCQUFPLElBQUksQ0FBWCxLQUFBO0FBQ0Q7QUFDRjs7QUFFRDtBQUNFLDZCQUFBLElBQUE7QUF4REo7QUEwREQ7O0FBRUssU0FBQSxhQUFBLENBQUEsUUFBQSxFQUFBLE9BQUEsRUFBQSxPQUFBLEVBR1k7QUFFaEIsTUFBSSxRQUFRLENBQVIsSUFBQSxLQUFhO0FBQUE7QUFBakIsSUFBNkM7QUFDM0MsYUFBTyxRQUFRLENBQUMsUUFBUSxDQUFULFFBQUEsRUFBQSxPQUFBLEVBQWYsT0FBZSxDQUFmO0FBREYsS0FBQSxNQUVPO0FBQ0wsV0FBTyxZQUFZLENBQUEsUUFBQSxFQUFuQixPQUFtQixDQUFuQjtBQUNEO0FBQ0Y7O0FBRUssU0FBQSxZQUFBLENBQUEsSUFBQSxFQUFBLE9BQUEsRUFBNkQ7QUFDakUsU0FBTyxRQUFRLENBQUMsSUFBSSxDQUFKLElBQUEsQ0FBRCxJQUFBLEVBQWU7QUFBQTtBQUFmLElBQUEsT0FBQSxFQUE0RCxJQUFJLENBQUosSUFBQSxDQUEzRSxJQUFlLENBQWY7QUFDRDs7QUF3QkssU0FBQSxRQUFBLENBQUEsSUFBQSxFQUFBLE9BQUEsRUFBQSxPQUFBLEVBQUEsSUFBQSxFQUl1QjtBQUUzQixNQUFJLEVBQUUsR0FBQTtBQUFBO0FBQU47QUFDQSxNQUFBLEdBQUE7O0FBQ0EsVUFBUSxJQUFJLENBQVosSUFBQTtBQUNFLFNBQUssK0JBQUwsSUFBQTtBQUNFLFVBQUksT0FBTyxLQUFYLFFBQUEsRUFBMEI7QUFDeEIsUUFBQSxFQUFFLEdBQUE7QUFBQTtBQUFGO0FBREYsT0FBQSxNQUVPLElBQUksT0FBTyxLQUFYLFlBQUEsRUFBOEI7QUFDbkMsUUFBQSxFQUFFLEdBQUE7QUFBQTtBQUFGO0FBREssT0FBQSxNQUVBLElBQUksT0FBTyxLQUFYLGNBQUEsRUFBZ0M7QUFDckMsUUFBQSxFQUFFLEdBQUE7QUFBQTtBQUFGO0FBREssT0FBQSxNQUVBLElBQUksT0FBTyxLQUFYLG1CQUFBLEVBQXFDO0FBQzFDLFFBQUEsRUFBRSxHQUFBO0FBQUE7QUFBRjtBQURLLE9BQUEsTUFFQSxJQUFJLE9BQU8sS0FBWCxxQkFBQSxFQUF1QztBQUM1QyxRQUFBLEVBQUUsR0FBQTtBQUFBO0FBQUY7QUFESyxPQUFBLE1BRUEsSUFBSSxPQUFPLEtBQVgsZUFBQSxFQUFpQztBQUN0QyxRQUFBLEVBQUUsR0FBQTtBQUFBO0FBQUY7QUFESyxPQUFBLE1BRUEsSUFBSSxPQUFPLEtBQVgsaUJBQUEsRUFBbUM7QUFDeEMsUUFBQSxFQUFFLEdBQUE7QUFBQTtBQUFGO0FBREssT0FBQSxNQUVBLElBQUksT0FBTyxLQUFYLGVBQUEsRUFBaUM7QUFDdEMsUUFBQSxFQUFFLEdBQUE7QUFBQTtBQUFGO0FBREssT0FBQSxNQUVBO0FBQ0wsUUFBQSxFQUFFLEdBQUcsbUJBQW1CLENBQXhCLE9BQXdCLENBQXhCO0FBQ0Q7O0FBQ0QsTUFBQSxHQUFHLEdBQUcsT0FBTyxDQUFQLE9BQUEsQ0FBZ0IsSUFBSSxDQUExQixJQUFNLENBQU47QUFDQTs7QUFDRjtBQUNFLE1BQUEsRUFBRSxHQUFBO0FBQUE7QUFBRjtBQUNBLE1BQUEsR0FBRyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUwsSUFBQSxFQUFBLE9BQUEsRUFBcUIsSUFBSSxDQUE5QyxJQUFxQixDQUFyQjtBQXpCSjs7QUE0QkEsTUFBSSxJQUFJLEtBQUosU0FBQSxJQUFzQixJQUFJLENBQUosTUFBQSxLQUExQixDQUFBLEVBQTZDO0FBQzNDLFdBQU8sQ0FBQSxFQUFBLEVBQVAsR0FBTyxDQUFQO0FBREYsR0FBQSxNQUVPO0FBQ0wsV0FBTyxDQUFBLEVBQUEsRUFBQSxHQUFBLEVBQVAsSUFBTyxDQUFQO0FBQ0Q7QUFDRjs7QUFFRCxTQUFBLGVBQUEsQ0FBQSxJQUFBLEVBQUEsT0FBQSxFQUFBLElBQUEsRUFHYztBQUVaLFVBQUEsSUFBQTtBQUNFLFNBQUssK0JBQUwsR0FBQTtBQUNFLGFBQU8sT0FBTyxDQUFQLEdBQUEsQ0FBUCxJQUFPLENBQVA7O0FBQ0YsU0FBSywrQkFBTCxLQUFBO0FBQ0UsYUFBTyxPQUFPLENBQVAsS0FBQSxDQUFQLElBQU8sQ0FBUDs7QUFDRixTQUFLLCtCQUFMLEtBQUE7QUFDRSxhQUFPLE9BQU8sQ0FBUCxLQUFBLENBQVAsSUFBTyxDQUFQOztBQUNGLFNBQUssK0JBQUwsSUFBQTtBQUNFLGFBQU8sT0FBUCxDQUFBLE1BQUEsQ0FBTyxFQUFQOztBQUNGO0FBQ0UsYUFBTyxxQkFBUCxJQUFPLENBQVA7QUFWSjtBQVlEOztBQUVLLFNBQUEsbUJBQUEsQ0FBQSxPQUFBLEVBQWdFO0FBQ3BFLFVBQUEsT0FBQTtBQUNFLFNBQUE7QUFBQTtBQUFBO0FBQ0UsYUFBQTtBQUFBO0FBQUE7O0FBQ0YsU0FBQTtBQUFBO0FBQUE7QUFDRSxhQUFBO0FBQUE7QUFBQTs7QUFDRixTQUFBO0FBQUE7QUFBQTtBQUNFLGFBQUE7QUFBQTtBQUFBOztBQUNGLFNBQUE7QUFBQTtBQUFBO0FBQ0UsYUFBQTtBQUFBO0FBQUE7O0FBQ0YsU0FBQTtBQUFBO0FBQUE7QUFDRSxhQUFBO0FBQUE7QUFBQTs7QUFDRixTQUFBO0FBQUE7QUFBQTtBQUNFLGFBQUE7QUFBQTtBQUFBOztBQUNGLFNBQUE7QUFBQTtBQUFBO0FBQ0UsYUFBQTtBQUFBO0FBQUE7O0FBQ0Y7QUFDRSxhQUFPLHFCQUFQLE9BQU8sQ0FBUDtBQWhCSjtBQWtCRDs7QUFFSyxTQUFBLFdBQUEsQ0FBQSxLQUFBLEVBQUEsT0FBQSxFQUVZO0FBRWhCLE1BQUksS0FBSyxLQUFMLElBQUEsSUFBa0IsQ0FBQyxxQkFBdkIsS0FBdUIsQ0FBdkIsRUFBeUMsT0FBQSxJQUFBO0FBRXpDLFNBQU8sS0FBSyxDQUFMLEdBQUEsQ0FBVyxVQUFELENBQUMsRUFBRDtBQUFBLFdBQU8sZUFBZSxDQUFBLENBQUEsRUFBQSxRQUFBLEVBQXZDLE9BQXVDLENBQXRCO0FBQWpCLEdBQU8sQ0FBUDtBQUNEOztBQUVLLFNBQUEsV0FBQSxDQUFBLEtBQUEsRUFBQSxPQUFBLEVBRVk7QUFFaEIsU0FBTyxLQUFLLENBQUwsR0FBQSxDQUFXLFVBQUQsQ0FBQyxFQUFEO0FBQUEsV0FBTyxlQUFlLENBQUEsQ0FBQSxFQUFBLFdBQUEsRUFBdkMsT0FBdUMsQ0FBdEI7QUFBakIsR0FBTyxDQUFQO0FBQ0Q7O0FBRUssU0FBQSxTQUFBLENBQUEsS0FBQSxFQUFBLE9BQUEsRUFBbUU7QUFDdkUsTUFBSSxLQUFLLEtBQVQsSUFBQSxFQUFvQixPQUFBLElBQUE7QUFFcEIsTUFBSSxHQUFHLEdBQXdDLENBQUEsRUFBQSxFQUEvQyxFQUErQyxDQUEvQztBQUVBLEVBQUEsTUFBTSxDQUFOLElBQUEsQ0FBQSxLQUFBLEVBQUEsT0FBQSxDQUE0QixVQUFELEdBQUMsRUFBTztBQUNqQyxJQUFBLEdBQUcsQ0FBSCxDQUFHLENBQUgsQ0FBQSxJQUFBLENBQUEsR0FBQTtBQUNBLElBQUEsR0FBRyxDQUFILENBQUcsQ0FBSCxDQUFBLElBQUEsQ0FBWSxlQUFlLENBQUMsS0FBSyxDQUFOLEdBQU0sQ0FBTixFQUFBLFFBQUEsRUFBM0IsT0FBMkIsQ0FBM0I7QUFGRixHQUFBO0FBS0EsU0FBQSxHQUFBO0FBQ0Q7O0FBRUssU0FBQSxXQUFBLENBQUEsTUFBQSxFQUFBLFdBQUEsRUFBQSxNQUFBLEVBR1c7QUFFZixNQUFJLElBQUksR0FBUixFQUFBO0FBQ0EsTUFBSSxNQUFNLEdBQVYsRUFBQTtBQUVBLEVBQUEsTUFBTSxDQUFOLElBQUEsQ0FBQSxNQUFBLEVBQUEsT0FBQSxDQUE2QixVQUFELElBQUMsRUFBUTtBQUNuQyxJQUFBLElBQUksQ0FBSixJQUFBLENBQUEsSUFBQTs7QUFFQSxRQUFJLElBQUksS0FBUixTQUFBLEVBQXdCO0FBQ3RCLFVBQUksT0FBTyxHQUFHLE1BQU0sQ0FBTixLQUFBLENBQWEsV0FBVyxJQUF0QyxFQUFjLENBQWQ7QUFFQSxNQUFBLE1BQU0sQ0FBTixJQUFBLENBQVksVUFBVSxDQUFDLE1BQU0sQ0FBUCxJQUFPLENBQVAsRUFBQSxPQUFBLEVBQXdCLE9BQU8sQ0FBckQsWUFBc0IsQ0FBdEI7QUFIRixLQUFBLE1BSU87QUFDTCxNQUFBLE1BQU0sQ0FBTixJQUFBLENBQVksVUFBVSxDQUFDLE1BQU0sQ0FBUCxJQUFPLENBQVAsRUFBQSxNQUFBLEVBQXRCLEVBQXNCLENBQXRCO0FBQ0Q7QUFUSCxHQUFBO0FBWUEsU0FBTyxDQUFBLElBQUEsRUFBUCxNQUFPLENBQVA7QUFDRDs7QUFFRCxTQUFBLFVBQUEsQ0FBQSxLQUFBLEVBQUEsT0FBQSxFQUFBLE1BQUEsRUFHdUI7QUFBQSxNQUFyQixNQUFxQixLQUFBLEtBQUEsQ0FBQSxFQUFBO0FBQXJCLElBQUEsTUFBcUIsR0FIdkIsRUFHRTtBQUFxQjs7QUFFckIsU0FBTyxDQUFDLHlCQUF5QixDQUFBLEtBQUEsRUFBMUIsT0FBMEIsQ0FBMUIsRUFBUCxNQUFPLENBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpY3QsXG4gIEV4cHJlc3Npb25zLFxuICBHZXRDb250ZXh0dWFsRnJlZU9wLFxuICBPcHRpb24sXG4gIFByZXNlbnRBcnJheSxcbiAgU2V4cE9wY29kZXMsXG4gIFZhcmlhYmxlUmVzb2x1dGlvbkNvbnRleHQsXG4gIFdpcmVGb3JtYXQsXG59IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgYXNzZXJ0LCBhc3NlcnROZXZlciwgZGljdCwgZXhoYXVzdGVkLCBleHBlY3QsIGlzUHJlc2VudCwgdmFsdWVzIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgeyBBdHRyTmFtZXNwYWNlLCBOYW1lc3BhY2UgfSBmcm9tICdAc2ltcGxlLWRvbS9pbnRlcmZhY2UnO1xuXG5pbXBvcnQge1xuICBCdWlsZGVyLFxuICBCdWlsZGVyQ29tbWVudCxcbiAgQnVpbGRlclN0YXRlbWVudCxcbiAgRXhwcmVzc2lvbktpbmQsXG4gIEhlYWRLaW5kLFxuICBOb3JtYWxpemVkQW5nbGVJbnZvY2F0aW9uLFxuICBOb3JtYWxpemVkQXR0cnMsXG4gIE5vcm1hbGl6ZWRCbG9jayxcbiAgTm9ybWFsaXplZEJsb2NrcyxcbiAgTm9ybWFsaXplZEVsZW1lbnQsXG4gIE5vcm1hbGl6ZWRFeHByZXNzaW9uLFxuICBOb3JtYWxpemVkSGFzaCxcbiAgTm9ybWFsaXplZEhlYWQsXG4gIE5vcm1hbGl6ZWRLZXl3b3JkU3RhdGVtZW50LFxuICBOb3JtYWxpemVkUGFyYW1zLFxuICBOb3JtYWxpemVkUGF0aCxcbiAgTm9ybWFsaXplZFN0YXRlbWVudCxcbiAgbm9ybWFsaXplU3RhdGVtZW50LFxuICBWYXJpYWJsZSxcbiAgVmFyaWFibGVLaW5kLFxufSBmcm9tICcuL2J1aWxkZXItaW50ZXJmYWNlJztcblxuaW1wb3J0IE9wID0gV2lyZUZvcm1hdC5TZXhwT3Bjb2RlcztcblxuaW50ZXJmYWNlIFN5bWJvbHMge1xuICB0b3A6IFByb2dyYW1TeW1ib2xzO1xuICBmcmVlVmFyKG5hbWU6IHN0cmluZyk6IG51bWJlcjtcbiAgYXJnKG5hbWU6IHN0cmluZyk6IG51bWJlcjtcbiAgYmxvY2sobmFtZTogc3RyaW5nKTogbnVtYmVyO1xuICBsb2NhbChuYW1lOiBzdHJpbmcpOiBudW1iZXI7XG4gIHRoaXMoKTogbnVtYmVyO1xuXG4gIGhhc0xvY2FsKG5hbWU6IHN0cmluZyk6IGJvb2xlYW47XG5cbiAgY2hpbGQocGFyYW1zOiBzdHJpbmdbXSk6IExvY2FsU3ltYm9scztcbn1cblxuZXhwb3J0IGNsYXNzIFByb2dyYW1TeW1ib2xzIGltcGxlbWVudHMgU3ltYm9scyB7XG4gIF9mcmVlVmFyaWFibGVzOiBzdHJpbmdbXSA9IFtdO1xuICBfc3ltYm9sczogc3RyaW5nW10gPSBbJ3RoaXMnXTtcblxuICB0b3AgPSB0aGlzO1xuXG4gIHRvU3ltYm9scygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3N5bWJvbHMuc2xpY2UoMSk7XG4gIH1cblxuICB0b1VwdmFycygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZyZWVWYXJpYWJsZXM7XG4gIH1cblxuICBmcmVlVmFyKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIGFkZFN0cmluZyh0aGlzLl9mcmVlVmFyaWFibGVzLCBuYW1lKTtcbiAgfVxuXG4gIGJsb2NrKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3ltYm9sKG5hbWUpO1xuICB9XG5cbiAgYXJnKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIGFkZFN0cmluZyh0aGlzLl9zeW1ib2xzLCBuYW1lKTtcbiAgfVxuXG4gIGxvY2FsKG5hbWU6IHN0cmluZyk6IG5ldmVyIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgTm8gbG9jYWwgJHtuYW1lfSB3YXMgZm91bmQuIE1heWJlIHlvdSBtZWFudCBeJHtuYW1lfSBmb3IgdXB2YXIsIG9yICEke25hbWV9IGZvciBrZXl3b3JkP2BcbiAgICApO1xuICB9XG5cbiAgdGhpcygpOiBudW1iZXIge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaGFzTG9jYWwoX25hbWU6IHN0cmluZyk6IGZhbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBhbnkgc3ltYm9sXG4gIHN5bWJvbChuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiBhZGRTdHJpbmcodGhpcy5fc3ltYm9scywgbmFtZSk7XG4gIH1cblxuICBjaGlsZChsb2NhbHM6IHN0cmluZ1tdKTogTG9jYWxTeW1ib2xzIHtcbiAgICByZXR1cm4gbmV3IExvY2FsU3ltYm9scyh0aGlzLCBsb2NhbHMpO1xuICB9XG59XG5cbmNsYXNzIExvY2FsU3ltYm9scyBpbXBsZW1lbnRzIFN5bWJvbHMge1xuICBwcml2YXRlIGxvY2FsczogRGljdDxudW1iZXI+ID0gZGljdCgpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGFyZW50OiBTeW1ib2xzLCBsb2NhbHM6IHN0cmluZ1tdKSB7XG4gICAgZm9yIChsZXQgbG9jYWwgb2YgbG9jYWxzKSB7XG4gICAgICB0aGlzLmxvY2Fsc1tsb2NhbF0gPSBwYXJlbnQudG9wLnN5bWJvbChsb2NhbCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHBhcmFtU3ltYm9scygpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHZhbHVlcyh0aGlzLmxvY2Fscyk7XG4gIH1cblxuICBnZXQgdG9wKCk6IFByb2dyYW1TeW1ib2xzIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQudG9wO1xuICB9XG5cbiAgZnJlZVZhcihuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhcmVudC5mcmVlVmFyKG5hbWUpO1xuICB9XG5cbiAgYXJnKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50LmFyZyhuYW1lKTtcbiAgfVxuXG4gIGJsb2NrKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50LmJsb2NrKG5hbWUpO1xuICB9XG5cbiAgbG9jYWwobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBpZiAobmFtZSBpbiB0aGlzLmxvY2Fscykge1xuICAgICAgcmV0dXJuIHRoaXMubG9jYWxzW25hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXJlbnQubG9jYWwobmFtZSk7XG4gICAgfVxuICB9XG5cbiAgdGhpcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhcmVudC50aGlzKCk7XG4gIH1cblxuICBoYXNMb2NhbChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAobmFtZSBpbiB0aGlzLmxvY2Fscykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcmVudC5oYXNMb2NhbChuYW1lKTtcbiAgICB9XG4gIH1cblxuICBjaGlsZChsb2NhbHM6IHN0cmluZ1tdKTogTG9jYWxTeW1ib2xzIHtcbiAgICByZXR1cm4gbmV3IExvY2FsU3ltYm9scyh0aGlzLCBsb2NhbHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFkZFN0cmluZyhhcnJheTogc3RyaW5nW10sIGl0ZW06IHN0cmluZyk6IG51bWJlciB7XG4gIGxldCBpbmRleCA9IGFycmF5LmluZGV4T2YoaXRlbSk7XG5cbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIGluZGV4ID0gYXJyYXkubGVuZ3RoO1xuICAgIGFycmF5LnB1c2goaXRlbSk7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkZXJHZXRGcmVlIHtcbiAgdHlwZTogJ0dldEZyZWUnO1xuICBoZWFkOiBzdHJpbmc7XG4gIHRhaWw6IHN0cmluZ1tdO1xufVxuXG5mdW5jdGlvbiB1bmltcGwobWVzc2FnZTogc3RyaW5nKTogRXJyb3Ige1xuICByZXR1cm4gbmV3IEVycm9yKGB1bmltcGxlbWVudGVkICR7bWVzc2FnZX1gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU3RhdGVtZW50cyhcbiAgc3RhdGVtZW50czogQnVpbGRlclN0YXRlbWVudFtdLFxuICBzeW1ib2xzOiBTeW1ib2xzXG4pOiBXaXJlRm9ybWF0LlN0YXRlbWVudFtdIHtcbiAgbGV0IG91dDogV2lyZUZvcm1hdC5TdGF0ZW1lbnRbXSA9IFtdO1xuXG4gIHN0YXRlbWVudHMuZm9yRWFjaCgocykgPT4gb3V0LnB1c2goLi4uYnVpbGRTdGF0ZW1lbnQobm9ybWFsaXplU3RhdGVtZW50KHMpLCBzeW1ib2xzKSkpO1xuXG4gIHJldHVybiBvdXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZE5vcm1hbGl6ZWRTdGF0ZW1lbnRzKFxuICBzdGF0ZW1lbnRzOiBOb3JtYWxpemVkU3RhdGVtZW50W10sXG4gIHN5bWJvbHM6IFN5bWJvbHNcbik6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10ge1xuICBsZXQgb3V0OiBXaXJlRm9ybWF0LlN0YXRlbWVudFtdID0gW107XG5cbiAgc3RhdGVtZW50cy5mb3JFYWNoKChzKSA9PiBvdXQucHVzaCguLi5idWlsZFN0YXRlbWVudChzLCBzeW1ib2xzKSkpO1xuXG4gIHJldHVybiBvdXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFN0YXRlbWVudChcbiAgbm9ybWFsaXplZDogTm9ybWFsaXplZFN0YXRlbWVudCxcbiAgc3ltYm9sczogU3ltYm9scyA9IG5ldyBQcm9ncmFtU3ltYm9scygpXG4pOiBXaXJlRm9ybWF0LlN0YXRlbWVudFtdIHtcbiAgc3dpdGNoIChub3JtYWxpemVkLmtpbmQpIHtcbiAgICBjYXNlIEhlYWRLaW5kLkFwcGVuZFBhdGg6IHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIFtcbiAgICAgICAgICBub3JtYWxpemVkLnRydXN0ZWQgPyBPcC5UcnVzdGluZ0FwcGVuZCA6IE9wLkFwcGVuZCxcbiAgICAgICAgICBidWlsZEdldFBhdGgobm9ybWFsaXplZC5wYXRoLCBzeW1ib2xzKSxcbiAgICAgICAgXSxcbiAgICAgIF07XG4gICAgfVxuXG4gICAgY2FzZSBIZWFkS2luZC5BcHBlbmRFeHByOiB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBbXG4gICAgICAgICAgbm9ybWFsaXplZC50cnVzdGVkID8gT3AuVHJ1c3RpbmdBcHBlbmQgOiBPcC5BcHBlbmQsXG4gICAgICAgICAgYnVpbGRFeHByZXNzaW9uKFxuICAgICAgICAgICAgbm9ybWFsaXplZC5leHByLFxuICAgICAgICAgICAgbm9ybWFsaXplZC50cnVzdGVkID8gJ1RydXN0ZWRBcHBlbmQnIDogJ0FwcGVuZCcsXG4gICAgICAgICAgICBzeW1ib2xzXG4gICAgICAgICAgKSxcbiAgICAgICAgXSxcbiAgICAgIF07XG4gICAgfVxuXG4gICAgY2FzZSBIZWFkS2luZC5DYWxsOiB7XG4gICAgICBsZXQgeyBoZWFkOiBwYXRoLCBwYXJhbXMsIGhhc2gsIHRydXN0ZWQgfSA9IG5vcm1hbGl6ZWQ7XG4gICAgICBsZXQgYnVpbHRQYXJhbXM6IE9wdGlvbjxXaXJlRm9ybWF0LkNvcmUuUGFyYW1zPiA9IHBhcmFtc1xuICAgICAgICA/IGJ1aWxkUGFyYW1zKHBhcmFtcywgc3ltYm9scylcbiAgICAgICAgOiBudWxsO1xuICAgICAgbGV0IGJ1aWx0SGFzaDogV2lyZUZvcm1hdC5Db3JlLkhhc2ggPSBoY