diff options
Diffstat (limited to 'ext/lib')
| -rw-r--r-- | ext/lib/dexie-export-import.js | 3457 | ||||
| -rw-r--r-- | ext/lib/dexie-export-import.js.map | 1 | ||||
| -rw-r--r-- | ext/lib/dexie.min.js | 2 | ||||
| -rw-r--r-- | ext/lib/dexie.min.js.map | 1 | ||||
| -rw-r--r-- | ext/lib/handlebars.min.js | 25 | ||||
| -rw-r--r-- | ext/lib/handlebars.min.js.map | 7 | ||||
| -rw-r--r-- | ext/lib/jszip.min.js | 13 | ||||
| -rw-r--r-- | ext/lib/parse5.js | 8557 | ||||
| -rw-r--r-- | ext/lib/ucs2length.js | 16 | ||||
| -rw-r--r-- | ext/lib/wanakana.min.js | 2 | ||||
| -rw-r--r-- | ext/lib/wanakana.min.js.map | 1 | 
11 files changed, 0 insertions, 12082 deletions
| diff --git a/ext/lib/dexie-export-import.js b/ext/lib/dexie-export-import.js deleted file mode 100644 index f915d1c1..00000000 --- a/ext/lib/dexie-export-import.js +++ /dev/null @@ -1,3457 +0,0 @@ -/* ==========================================================================  - *                           dexie-export-import.js - * ========================================================================== - * - * Dexie addon for exporting and importing databases to / from Blobs. - * - * By David Fahlander, david.fahlander@gmail.com, - * - * ========================================================================== - * - * Version 4.0.7, Wed Mar 29 2023 - * - * https://dexie.org - * - * Apache License Version 2.0, January 2004, http://www.apache.org/licenses/ - *  - */ - -(function (global, factory) { -    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('dexie')) : -    typeof define === 'function' && define.amd ? define(['exports', 'dexie'], factory) : -    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.DexieExportImport = {}, global.Dexie)); -})(this, (function (exports, Dexie) { 'use strict'; - -    function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } - -    var Dexie__default = /*#__PURE__*/_interopDefaultLegacy(Dexie); - -    /*! ***************************************************************************** -    Copyright (c) Microsoft Corporation. - -    Permission to use, copy, modify, and/or distribute this software for any -    purpose with or without fee is hereby granted. - -    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -    PERFORMANCE OF THIS SOFTWARE. -    ***************************************************************************** */ - -    function __awaiter(thisArg, _arguments, P, generator) { -        function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } -        return new (P || (P = Promise))(function (resolve, reject) { -            function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } -            function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } -            function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } -            step((generator = generator.apply(thisArg, _arguments || [])).next()); -        }); -    } - -    function __generator(thisArg, body) { -        var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; -        return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; -        function verb(n) { return function (v) { return step([n, v]); }; } -        function step(op) { -            if (f) throw new TypeError("Generator is already executing."); -            while (_) try { -                if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; -                if (y = 0, t) op = [op[0] & 2, t.value]; -                switch (op[0]) { -                    case 0: case 1: t = op; break; -                    case 4: _.label++; return { value: op[1], done: false }; -                    case 5: _.label++; y = op[1]; op = [0]; continue; -                    case 7: op = _.ops.pop(); _.trys.pop(); continue; -                    default: -                        if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } -                        if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } -                        if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } -                        if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } -                        if (t[2]) _.ops.pop(); -                        _.trys.pop(); continue; -                } -                op = body.call(thisArg, _); -            } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } -            if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; -        } -    } - -    function getSchemaString(table) { -        var primKeyAndIndexes = [table.schema.primKey].concat(table.schema.indexes); -        return primKeyAndIndexes.map(function (index) { return index.src; }).join(','); -    } -    function extractDbSchema(exportedDb) { -        var schema = {}; -        for (var _i = 0, _a = exportedDb.tables; _i < _a.length; _i++) { -            var table = _a[_i]; -            schema[table.name] = table.schema; -        } -        return schema; -    } -    function readBlobAsync(blob, type) { -        return new Promise(function (resolve, reject) { -            var reader = new FileReader(); -            reader.onabort = function (ev) { return reject(new Error("file read aborted")); }; -            reader.onerror = function (ev) { return reject(ev.target.error); }; -            reader.onload = function (ev) { return resolve(ev.target.result); }; -            if (type === 'binary') -                reader.readAsArrayBuffer(blob); -            else -                reader.readAsText(blob); -        }); -    } -    function readBlobSync(blob, type) { -        if (typeof FileReaderSync === 'undefined') { -            throw new Error('FileReaderSync missing. Reading blobs synchronously requires code to run from within a web worker. Use TSON.encapsulateAsync() to do it from the main thread.'); -        } -        var reader = new FileReaderSync(); // Requires worker environment -        var data = type === 'binary' ? -            reader.readAsArrayBuffer(blob) : -            reader.readAsText(blob); -        return data; -    } - -    var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; - -    function createCommonjsModule(fn, module) { -    	return module = { exports: {} }, fn(module, module.exports), module.exports; -    } - -    var typeson = createCommonjsModule(function (module, exports) { -    (function (global, factory) { -      module.exports = factory() ; -    }(commonjsGlobal, (function () { -      function _typeof(obj) { -        if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { -          _typeof = function (obj) { -            return typeof obj; -          }; -        } else { -          _typeof = function (obj) { -            return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; -          }; -        } - -        return _typeof(obj); -      } - -      function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { -        try { -          var info = gen[key](arg); -          var value = info.value; -        } catch (error) { -          reject(error); -          return; -        } - -        if (info.done) { -          resolve(value); -        } else { -          Promise.resolve(value).then(_next, _throw); -        } -      } - -      function _asyncToGenerator(fn) { -        return function () { -          var self = this, -              args = arguments; -          return new Promise(function (resolve, reject) { -            var gen = fn.apply(self, args); - -            function _next(value) { -              asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); -            } - -            function _throw(err) { -              asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); -            } - -            _next(undefined); -          }); -        }; -      } - -      function _classCallCheck(instance, Constructor) { -        if (!(instance instanceof Constructor)) { -          throw new TypeError("Cannot call a class as a function"); -        } -      } - -      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; -      } - -      function _defineProperty(obj, key, value) { -        if (key in obj) { -          Object.defineProperty(obj, key, { -            value: value, -            enumerable: true, -            configurable: true, -            writable: true -          }); -        } else { -          obj[key] = value; -        } - -        return obj; -      } - -      function ownKeys(object, enumerableOnly) { -        var keys = Object.keys(object); - -        if (Object.getOwnPropertySymbols) { -          var symbols = Object.getOwnPropertySymbols(object); -          if (enumerableOnly) symbols = symbols.filter(function (sym) { -            return Object.getOwnPropertyDescriptor(object, sym).enumerable; -          }); -          keys.push.apply(keys, symbols); -        } - -        return keys; -      } - -      function _objectSpread2(target) { -        for (var i = 1; i < arguments.length; i++) { -          var source = arguments[i] != null ? arguments[i] : {}; - -          if (i % 2) { -            ownKeys(Object(source), true).forEach(function (key) { -              _defineProperty(target, key, source[key]); -            }); -          } else if (Object.getOwnPropertyDescriptors) { -            Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); -          } else { -            ownKeys(Object(source)).forEach(function (key) { -              Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); -            }); -          } -        } - -        return target; -      } - -      function _slicedToArray(arr, i) { -        return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); -      } - -      function _toConsumableArray(arr) { -        return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); -      } - -      function _arrayWithoutHoles(arr) { -        if (Array.isArray(arr)) { -          for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; - -          return arr2; -        } -      } - -      function _arrayWithHoles(arr) { -        if (Array.isArray(arr)) return arr; -      } - -      function _iterableToArray(iter) { -        if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); -      } - -      function _iterableToArrayLimit(arr, i) { -        if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { -          return; -        } - -        var _arr = []; -        var _n = true; -        var _d = false; -        var _e = undefined; - -        try { -          for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { -            _arr.push(_s.value); - -            if (i && _arr.length === i) break; -          } -        } catch (err) { -          _d = true; -          _e = err; -        } finally { -          try { -            if (!_n && _i["return"] != null) _i["return"](); -          } finally { -            if (_d) throw _e; -          } -        } - -        return _arr; -      } - -      function _nonIterableSpread() { -        throw new TypeError("Invalid attempt to spread non-iterable instance"); -      } - -      function _nonIterableRest() { -        throw new TypeError("Invalid attempt to destructure non-iterable instance"); -      } - -      /** -       * We keep this function minimized so if using two instances of this -       *   library, where one is minimized and one is not, it will still work -       *   with `hasConstructorOf`. -       * With ES6 classes, we may be able to simply use `class TypesonPromise -       *   extends Promise` and add a string tag for detection. -       * @param {function} f -       */ -      // eslint-disable-next-line max-len -      // eslint-disable-next-line block-spacing, space-before-function-paren, space-before-blocks, space-infix-ops, semi, promise/avoid-new -      var TypesonPromise = function TypesonPromise(f) { -        _classCallCheck(this, TypesonPromise); - -        this.p = new Promise(f); -      }; // eslint-disable-next-line max-len -      // class TypesonPromise extends Promise {get[Symbol.toStringTag](){return 'TypesonPromise'};} // eslint-disable-line keyword-spacing, space-before-function-paren, space-before-blocks, block-spacing, semi - - -      TypesonPromise.__typeson__type__ = 'TypesonPromise'; // Note: core-js-bundle provides a `Symbol` polyfill - -      /* istanbul ignore else */ - -      if (typeof Symbol !== 'undefined') { -        // Ensure `isUserObject` will return `false` for `TypesonPromise` -        TypesonPromise.prototype[Symbol.toStringTag] = 'TypesonPromise'; -      } -      /** -       * -       * @param {function} [onFulfilled] -       * @param {function} [onRejected] -       * @returns {TypesonPromise} -       */ - - -      TypesonPromise.prototype.then = function (onFulfilled, onRejected) { -        var _this = this; - -        return new TypesonPromise(function (typesonResolve, typesonReject) { -          // eslint-disable-next-line promise/catch-or-return -          _this.p.then(function (res) { -            // eslint-disable-next-line promise/always-return -            typesonResolve(onFulfilled ? onFulfilled(res) : res); -          })["catch"](function (res) { -            return onRejected ? onRejected(res) : Promise.reject(res); -          }).then(typesonResolve, typesonReject); -        }); -      }; -      /** -       * -       * @param {function} onRejected -       * @returns {TypesonPromise} -       */ - - -      TypesonPromise.prototype["catch"] = function (onRejected) { -        return this.then(null, onRejected); -      }; -      /** -       * -       * @param {Any} v -       * @returns {TypesonPromise} -       */ - - -      TypesonPromise.resolve = function (v) { -        return new TypesonPromise(function (typesonResolve) { -          typesonResolve(v); -        }); -      }; -      /** -       * -       * @param {Any} v -       * @returns {TypesonPromise} -       */ - - -      TypesonPromise.reject = function (v) { -        return new TypesonPromise(function (typesonResolve, typesonReject) { -          typesonReject(v); -        }); -      }; - -      ['all', 'race'].forEach(function (meth) { -        /** -         * -         * @param {Promise[]} promArr -         * @returns {TypesonPromise} -         */ -        TypesonPromise[meth] = function (promArr) { -          return new TypesonPromise(function (typesonResolve, typesonReject) { -            // eslint-disable-next-line promise/catch-or-return -            Promise[meth](promArr.map(function (prom) { -              return prom && prom.constructor && prom.constructor.__typeson__type__ === 'TypesonPromise' ? prom.p : prom; -            })).then(typesonResolve, typesonReject); -          }); -        }; -      }); - -      var _ref = {}, -          toStr = _ref.toString, -          hasOwn = {}.hasOwnProperty, -          getProto = Object.getPrototypeOf, -          fnToString = hasOwn.toString; -      /** -       * Second argument not in use internally, but provided for utility. -       * @param {Any} v -       * @param {boolean} catchCheck -       * @returns {boolean} -       */ - -      function isThenable(v, catchCheck) { -        return isObject(v) && typeof v.then === 'function' && (!catchCheck || typeof v["catch"] === 'function'); -      } -      /** -       * -       * @param {Any} val -       * @returns {string} -       */ - - -      function toStringTag(val) { -        return toStr.call(val).slice(8, -1); -      } -      /** -       * This function is dependent on both constructors -       *   being identical so any minimization is expected of both. -       * @param {Any} a -       * @param {function} b -       * @returns {boolean} -       */ - - -      function hasConstructorOf(a, b) { -        if (!a || _typeof(a) !== 'object') { -          return false; -        } - -        var proto = getProto(a); - -        if (!proto) { -          return b === null; -        } - -        var Ctor = hasOwn.call(proto, 'constructor') && proto.constructor; - -        if (typeof Ctor !== 'function') { -          return b === null; -        } - -        if (b === Ctor) { -          return true; -        } - -        if (b !== null && fnToString.call(Ctor) === fnToString.call(b)) { -          return true; -        } - -        if (typeof b === 'function' && typeof Ctor.__typeson__type__ === 'string' && Ctor.__typeson__type__ === b.__typeson__type__) { -          return true; -        } - -        return false; -      } -      /** -       * -       * @param {Any} val -       * @returns {boolean} -       */ - - -      function isPlainObject(val) { -        // Mirrors jQuery's -        if (!val || toStringTag(val) !== 'Object') { -          return false; -        } - -        var proto = getProto(val); - -        if (!proto) { -          // `Object.create(null)` -          return true; -        } - -        return hasConstructorOf(val, Object); -      } -      /** -       * -       * @param {Any} val -       * @returns {boolean} -       */ - - -      function isUserObject(val) { -        if (!val || toStringTag(val) !== 'Object') { -          return false; -        } - -        var proto = getProto(val); - -        if (!proto) { -          // `Object.create(null)` -          return true; -        } - -        return hasConstructorOf(val, Object) || isUserObject(proto); -      } -      /** -       * -       * @param {Any} v -       * @returns {boolean} -       */ - - -      function isObject(v) { -        return v && _typeof(v) === 'object'; -      } -      /** -       * -       * @param {string} keyPathComponent -       * @returns {string} -       */ - - -      function escapeKeyPathComponent(keyPathComponent) { -        return keyPathComponent.replace(/~/g, '~0').replace(/\./g, '~1'); -      } -      /** -       * -       * @param {string} keyPathComponent -       * @returns {string} -       */ - - -      function unescapeKeyPathComponent(keyPathComponent) { -        return keyPathComponent.replace(/~1/g, '.').replace(/~0/g, '~'); -      } -      /** -       * @param {PlainObject|GenericArray} obj -       * @param {string} keyPath -       * @returns {Any} -       */ - - -      function getByKeyPath(obj, keyPath) { -        if (keyPath === '') { -          return obj; -        } - -        var period = keyPath.indexOf('.'); - -        if (period > -1) { -          var innerObj = obj[unescapeKeyPathComponent(keyPath.slice(0, period))]; -          return innerObj === undefined ? undefined : getByKeyPath(innerObj, keyPath.slice(period + 1)); -        } - -        return obj[unescapeKeyPathComponent(keyPath)]; -      } -      /** -       * -       * @param {PlainObject} obj -       * @param {string} keyPath -       * @param {Any} value -       * @returns {Any} -       */ - - -      function setAtKeyPath(obj, keyPath, value) { -        if (keyPath === '') { -          return value; -        } - -        var period = keyPath.indexOf('.'); - -        if (period > -1) { -          var innerObj = obj[unescapeKeyPathComponent(keyPath.slice(0, period))]; -          return setAtKeyPath(innerObj, keyPath.slice(period + 1), value); -        } - -        obj[unescapeKeyPathComponent(keyPath)] = value; -        return obj; -      } -      /** -       * -       * @param {external:JSON} value -       * @returns {"null"|"array"|"undefined"|"boolean"|"number"|"string"| -       *  "object"|"symbol"} -       */ - - -      function getJSONType(value) { -        return value === null ? 'null' : Array.isArray(value) ? 'array' : _typeof(value); -      } - -      var keys = Object.keys, -          isArray = Array.isArray, -          hasOwn$1 = {}.hasOwnProperty, -          internalStateObjPropsToIgnore = ['type', 'replaced', 'iterateIn', 'iterateUnsetNumeric']; -      /** -       * Handle plain object revivers first so reference setting can use -       * revived type (e.g., array instead of object); assumes revived -       * has same structure or will otherwise break subsequent references. -       * @param {PlainObjectType} a -       * @param {PlainObjectType} b -       * @returns {1|-1|boolean} -       */ - -      function nestedPathsFirst(a, b) { -        if (a.keypath === '') { -          return -1; -        } - -        var as = a.keypath.match(/\./g) || 0; -        var bs = b.keypath.match(/\./g) || 0; - -        if (as) { -          as = as.length; -        } - -        if (bs) { -          bs = bs.length; -        } - -        return as > bs ? -1 : as < bs ? 1 : a.keypath < b.keypath ? -1 : a.keypath > b.keypath; -      } -      /** -       * An instance of this class can be used to call `stringify()` and `parse()`. -       * Typeson resolves cyclic references by default. Can also be extended to -       * support custom types using the register() method. -       * -       * @class -       * @param {{cyclic: boolean}} [options] - if cyclic (default true), -       *   cyclic references will be handled gracefully. -       */ - - -      var Typeson = -      /*#__PURE__*/ -      function () { -        function Typeson(options) { -          _classCallCheck(this, Typeson); - -          this.options = options; // Replacers signature: replace (value). Returns falsy if not -          //   replacing. Otherwise ['Date', value.getTime()] - -          this.plainObjectReplacers = []; -          this.nonplainObjectReplacers = []; // Revivers: [{type => reviver}, {plain: boolean}]. -          //   Sample: [{'Date': value => new Date(value)}, {plain: false}] - -          this.revivers = {}; -          /** Types registered via `register()`. */ - -          this.types = {}; -        } -        /** -        * @typedef {null|boolean|number|string|GenericArray|PlainObject} JSON -        */ - -        /** -        * @callback JSONReplacer -        * @param {""|string} key -        * @param {JSON} value -        * @returns {number|string|boolean|null|PlainObject|undefined} -        * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#The%20replacer%20parameter -        */ - -        /** -         * Serialize given object to Typeson. -         * Initial arguments work identical to those of `JSON.stringify`. -         * The `replacer` argument has nothing to do with our replacers. -         * @param {Any} obj -         * @param {JSONReplacer|string[]} replacer -         * @param {number|string} space -         * @param {object} opts -         * @returns {string|Promise} Promise resolves to a string -         */ - - -        _createClass(Typeson, [{ -          key: "stringify", -          value: function stringify(obj, replacer, space, opts) { -            opts = _objectSpread2({}, this.options, {}, opts, { -              stringification: true -            }); -            var encapsulated = this.encapsulate(obj, null, opts); - -            if (isArray(encapsulated)) { -              return JSON.stringify(encapsulated[0], replacer, space); -            } - -            return encapsulated.then(function (res) { -              return JSON.stringify(res, replacer, space); -            }); -          } -          /** -           * Also sync but throws on non-sync result. -           * @param {Any} obj -           * @param {JSONReplacer|string[]} replacer -           * @param {number|string} space -           * @param {object} opts -           * @returns {string} -           */ - -        }, { -          key: "stringifySync", -          value: function stringifySync(obj, replacer, space, opts) { -            return this.stringify(obj, replacer, space, _objectSpread2({ -              throwOnBadSyncType: true -            }, opts, { -              sync: true -            })); -          } -          /** -           * -           * @param {Any} obj -           * @param {JSONReplacer|string[]} replacer -           * @param {number|string} space -           * @param {object} opts -           * @returns {Promise<string>} -           */ - -        }, { -          key: "stringifyAsync", -          value: function stringifyAsync(obj, replacer, space, opts) { -            return this.stringify(obj, replacer, space, _objectSpread2({ -              throwOnBadSyncType: true -            }, opts, { -              sync: false -            })); -          } -          /** -           * Parse Typeson back into an obejct. -           * Initial arguments works identical to those of `JSON.parse()`. -           * @param {string} text -           * @param {function} reviver This JSON reviver has nothing to do with -           *   our revivers. -           * @param {object} opts -           * @returns {external:JSON} -           */ - -        }, { -          key: "parse", -          value: function parse(text, reviver, opts) { -            opts = _objectSpread2({}, this.options, {}, opts, { -              parse: true -            }); -            return this.revive(JSON.parse(text, reviver), opts); -          } -          /** -          * Also sync but throws on non-sync result. -          * @param {string} text -          * @param {function} reviver This JSON reviver has nothing to do with -          *   our revivers. -          * @param {object} opts -          * @returns {external:JSON} -          */ - -        }, { -          key: "parseSync", -          value: function parseSync(text, reviver, opts) { -            return this.parse(text, reviver, _objectSpread2({ -              throwOnBadSyncType: true -            }, opts, { -              sync: true -            })); -          } -          /** -          * @param {string} text -          * @param {function} reviver This JSON reviver has nothing to do with -          *   our revivers. -          * @param {object} opts -          * @returns {Promise} Resolves to `external:JSON` -          */ - -        }, { -          key: "parseAsync", -          value: function parseAsync(text, reviver, opts) { -            return this.parse(text, reviver, _objectSpread2({ -              throwOnBadSyncType: true -            }, opts, { -              sync: false -            })); -          } -          /** -           * -           * @param {Any} obj -           * @param {object} stateObj -           * @param {object} [opts={}] -           * @returns {string[]|false} -           */ - -        }, { -          key: "specialTypeNames", -          value: function specialTypeNames(obj, stateObj) { -            var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; -            opts.returnTypeNames = true; -            return this.encapsulate(obj, stateObj, opts); -          } -          /** -           * -           * @param {Any} obj -           * @param {PlainObject} stateObj -           * @param {PlainObject} [opts={}] -           * @returns {Promise|GenericArray|PlainObject|string|false} -           */ - -        }, { -          key: "rootTypeName", -          value: function rootTypeName(obj, stateObj) { -            var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; -            opts.iterateNone = true; -            return this.encapsulate(obj, stateObj, opts); -          } -          /** -           * Encapsulate a complex object into a plain Object by replacing -           * registered types with plain objects representing the types data. -           * -           * This method is used internally by `Typeson.stringify()`. -           * @param {Any} obj - Object to encapsulate. -           * @param {PlainObject} stateObj -           * @param {PlainObject} opts -           * @returns {Promise|GenericArray|PlainObject|string|false} -           */ - -        }, { -          key: "encapsulate", -          value: function encapsulate(obj, stateObj, opts) { -            opts = _objectSpread2({ -              sync: true -            }, this.options, {}, opts); -            var _opts = opts, -                sync = _opts.sync; -            var that = this, -                types = {}, -                refObjs = [], -                // For checking cyclic references -            refKeys = [], -                // For checking cyclic references -            promisesDataRoot = []; // Clone the object deeply while at the same time replacing any -            //   special types or cyclic reference: - -            var cyclic = 'cyclic' in opts ? opts.cyclic : true; -            var _opts2 = opts, -                encapsulateObserver = _opts2.encapsulateObserver; - -            var ret = _encapsulate('', obj, cyclic, stateObj || {}, promisesDataRoot); -            /** -             * -             * @param {Any} ret -             * @returns {GenericArray|PlainObject|string|false} -             */ - - -            function finish(ret) { -              // Add `$types` to result only if we ever bumped into a -              //  special type (or special case where object has own `$types`) -              var typeNames = Object.values(types); - -              if (opts.iterateNone) { -                if (typeNames.length) { -                  return typeNames[0]; -                } - -                return Typeson.getJSONType(ret); -              } - -              if (typeNames.length) { -                if (opts.returnTypeNames) { -                  return _toConsumableArray(new Set(typeNames)); -                } // Special if array (or a primitive) was serialized -                //   because JSON would ignore custom `$types` prop on it - - -                if (!ret || !isPlainObject(ret) || // Also need to handle if this is an object with its -                //   own `$types` property (to avoid ambiguity) -                hasOwn$1.call(ret, '$types')) { -                  ret = { -                    $: ret, -                    $types: { -                      $: types -                    } -                  }; -                } else { -                  ret.$types = types; -                } // No special types - -              } else if (isObject(ret) && hasOwn$1.call(ret, '$types')) { -                ret = { -                  $: ret, -                  $types: true -                }; -              } - -              if (opts.returnTypeNames) { -                return false; -              } - -              return ret; -            } -            /** -             * -             * @param {Any} ret -             * @param {GenericArray} promisesData -             * @returns {Promise<Any>} -             */ - - -            function checkPromises(_x, _x2) { -              return _checkPromises.apply(this, arguments); -            } -            /** -             * -             * @param {object} stateObj -             * @param {object} ownKeysObj -             * @param {function} cb -             * @returns {undefined} -             */ - - -            function _checkPromises() { -              _checkPromises = _asyncToGenerator( -              /*#__PURE__*/ -              regeneratorRuntime.mark(function _callee2(ret, promisesData) { -                var promResults; -                return regeneratorRuntime.wrap(function _callee2$(_context2) { -                  while (1) { -                    switch (_context2.prev = _context2.next) { -                      case 0: -                        _context2.next = 2; -                        return Promise.all(promisesData.map(function (pd) { -                          return pd[1].p; -                        })); - -                      case 2: -                        promResults = _context2.sent; -                        _context2.next = 5; -                        return Promise.all(promResults.map( -                        /*#__PURE__*/ -                        function () { -                          var _ref = _asyncToGenerator( -                          /*#__PURE__*/ -                          regeneratorRuntime.mark(function _callee(promResult) { -                            var newPromisesData, _promisesData$splice, _promisesData$splice2, prData, _prData, keyPath, cyclic, stateObj, parentObj, key, detectedType, encaps, isTypesonPromise, encaps2; - -                            return regeneratorRuntime.wrap(function _callee$(_context) { -                              while (1) { -                                switch (_context.prev = _context.next) { -                                  case 0: -                                    newPromisesData = []; -                                    _promisesData$splice = promisesData.splice(0, 1), _promisesData$splice2 = _slicedToArray(_promisesData$splice, 1), prData = _promisesData$splice2[0]; -                                    _prData = _slicedToArray(prData, 7), keyPath = _prData[0], cyclic = _prData[2], stateObj = _prData[3], parentObj = _prData[4], key = _prData[5], detectedType = _prData[6]; -                                    encaps = _encapsulate(keyPath, promResult, cyclic, stateObj, newPromisesData, true, detectedType); -                                    isTypesonPromise = hasConstructorOf(encaps, TypesonPromise); // Handle case where an embedded custom type itself -                                    //   returns a `Typeson.Promise` - -                                    if (!(keyPath && isTypesonPromise)) { -                                      _context.next = 11; -                                      break; -                                    } - -                                    _context.next = 8; -                                    return encaps.p; - -                                  case 8: -                                    encaps2 = _context.sent; -                                    parentObj[key] = encaps2; -                                    return _context.abrupt("return", checkPromises(ret, newPromisesData)); - -                                  case 11: -                                    if (keyPath) { -                                      parentObj[key] = encaps; -                                    } else if (isTypesonPromise) { -                                      ret = encaps.p; -                                    } else { -                                      // If this is itself a `Typeson.Promise` (because the -                                      //   original value supplied was a `Promise` or -                                      //   because the supplied custom type value resolved -                                      //   to one), returning it below will be fine since -                                      //   a `Promise` is expected anyways given current -                                      //   config (and if not a `Promise`, it will be ready -                                      //   as the resolve value) -                                      ret = encaps; -                                    } - -                                    return _context.abrupt("return", checkPromises(ret, newPromisesData)); - -                                  case 13: -                                  case "end": -                                    return _context.stop(); -                                } -                              } -                            }, _callee); -                          })); - -                          return function (_x3) { -                            return _ref.apply(this, arguments); -                          }; -                        }())); - -                      case 5: -                        return _context2.abrupt("return", ret); - -                      case 6: -                      case "end": -                        return _context2.stop(); -                    } -                  } -                }, _callee2); -              })); -              return _checkPromises.apply(this, arguments); -            } - -            function _adaptBuiltinStateObjectProperties(stateObj, ownKeysObj, cb) { -              Object.assign(stateObj, ownKeysObj); -              var vals = internalStateObjPropsToIgnore.map(function (prop) { -                var tmp = stateObj[prop]; -                delete stateObj[prop]; -                return tmp; -              }); // eslint-disable-next-line callback-return - -              cb(); -              internalStateObjPropsToIgnore.forEach(function (prop, i) { -                stateObj[prop] = vals[i]; -              }); -            } -            /** -             * -             * @param {string} keypath -             * @param {Any} value -             * @param {boolean} cyclic -             * @param {PlainObject} stateObj -             * @param {boolean} promisesData -             * @param {boolean} resolvingTypesonPromise -             * @param {string} detectedType -             * @returns {Any} -             */ - - -            function _encapsulate(keypath, value, cyclic, stateObj, promisesData, resolvingTypesonPromise, detectedType) { -              var ret; -              var observerData = {}; - -              var $typeof = _typeof(value); - -              var runObserver = encapsulateObserver ? function (obj) { -                var type = detectedType || stateObj.type || Typeson.getJSONType(value); -                encapsulateObserver(Object.assign(obj || observerData, { -                  keypath: keypath, -                  value: value, -                  cyclic: cyclic, -                  stateObj: stateObj, -                  promisesData: promisesData, -                  resolvingTypesonPromise: resolvingTypesonPromise, -                  awaitingTypesonPromise: hasConstructorOf(value, TypesonPromise) -                }, { -                  type: type -                })); -              } : null; - -              if (['string', 'boolean', 'number', 'undefined'].includes($typeof)) { -                if (value === undefined || $typeof === 'number' && (isNaN(value) || value === -Infinity || value === Infinity)) { -                  if (stateObj.replaced) { -                    ret = value; -                  } else { -                    ret = replace(keypath, value, stateObj, promisesData, false, resolvingTypesonPromise, runObserver); -                  } - -                  if (ret !== value) { -                    observerData = { -                      replaced: ret -                    }; -                  } -                } else { -                  ret = value; -                } - -                if (runObserver) { -                  runObserver(); -                } - -                return ret; -              } - -              if (value === null) { -                if (runObserver) { -                  runObserver(); -                } - -                return value; -              } - -              if (cyclic && !stateObj.iterateIn && !stateObj.iterateUnsetNumeric && value && _typeof(value) === 'object') { -                // Options set to detect cyclic references and be able -                //   to rewrite them. -                var refIndex = refObjs.indexOf(value); - -                if (refIndex < 0) { -                  if (cyclic === true) { -                    refObjs.push(value); -                    refKeys.push(keypath); -                  } -                } else { -                  types[keypath] = '#'; - -                  if (runObserver) { -                    runObserver({ -                      cyclicKeypath: refKeys[refIndex] -                    }); -                  } - -                  return '#' + refKeys[refIndex]; -                } -              } - -              var isPlainObj = isPlainObject(value); -              var isArr = isArray(value); -              var replaced = // Running replace will cause infinite loop as will test -              //   positive again -              (isPlainObj || isArr) && (!that.plainObjectReplacers.length || stateObj.replaced) || stateObj.iterateIn ? // Optimization: if plain object and no plain-object -              //   replacers, don't try finding a replacer -              value : replace(keypath, value, stateObj, promisesData, isPlainObj || isArr, null, runObserver); -              var clone; - -              if (replaced !== value) { -                ret = replaced; -                observerData = { -                  replaced: replaced -                }; -              } else { -                // eslint-disable-next-line no-lonely-if -                if (keypath === '' && hasConstructorOf(value, TypesonPromise)) { -                  promisesData.push([keypath, value, cyclic, stateObj, undefined, undefined, stateObj.type]); -                  ret = value; -                } else if (isArr && stateObj.iterateIn !== 'object' || stateObj.iterateIn === 'array') { -                  clone = new Array(value.length); -                  observerData = { -                    clone: clone -                  }; -                } else if (!['function', 'symbol'].includes(_typeof(value)) && !('toJSON' in value) && !hasConstructorOf(value, TypesonPromise) && !hasConstructorOf(value, Promise) && !hasConstructorOf(value, ArrayBuffer) || isPlainObj || stateObj.iterateIn === 'object') { -                  clone = {}; - -                  if (stateObj.addLength) { -                    clone.length = value.length; -                  } - -                  observerData = { -                    clone: clone -                  }; -                } else { -                  ret = value; // Only clone vanilla objects and arrays -                } -              } - -              if (runObserver) { -                runObserver(); -              } - -              if (opts.iterateNone) { -                return clone || ret; -              } - -              if (!clone) { -                return ret; -              } // Iterate object or array - - -              if (stateObj.iterateIn) { -                var _loop = function _loop(key) { -                  var ownKeysObj = { -                    ownKeys: hasOwn$1.call(value, key) -                  }; - -                  _adaptBuiltinStateObjectProperties(stateObj, ownKeysObj, function () { -                    var kp = keypath + (keypath ? '.' : '') + escapeKeyPathComponent(key); - -                    var val = _encapsulate(kp, value[key], Boolean(cyclic), stateObj, promisesData, resolvingTypesonPromise); - -                    if (hasConstructorOf(val, TypesonPromise)) { -                      promisesData.push([kp, val, Boolean(cyclic), stateObj, clone, key, stateObj.type]); -                    } else if (val !== undefined) { -                      clone[key] = val; -                    } -                  }); -                }; - -                // eslint-disable-next-line guard-for-in -                for (var key in value) { -                  _loop(key); -                } - -                if (runObserver) { -                  runObserver({ -                    endIterateIn: true, -                    end: true -                  }); -                } -              } else { -                // Note: Non-indexes on arrays won't survive stringify so -                //  somewhat wasteful for arrays, but so too is iterating -                //  all numeric indexes on sparse arrays when not wanted -                //  or filtering own keys for positive integers -                keys(value).forEach(function (key) { -                  var kp = keypath + (keypath ? '.' : '') + escapeKeyPathComponent(key); -                  var ownKeysObj = { -                    ownKeys: true -                  }; - -                  _adaptBuiltinStateObjectProperties(stateObj, ownKeysObj, function () { -                    var val = _encapsulate(kp, value[key], Boolean(cyclic), stateObj, promisesData, resolvingTypesonPromise); - -                    if (hasConstructorOf(val, TypesonPromise)) { -                      promisesData.push([kp, val, Boolean(cyclic), stateObj, clone, key, stateObj.type]); -                    } else if (val !== undefined) { -                      clone[key] = val; -                    } -                  }); -                }); - -                if (runObserver) { -                  runObserver({ -                    endIterateOwn: true, -                    end: true -                  }); -                } -              } // Iterate array for non-own numeric properties (we can't -              //   replace the prior loop though as it iterates non-integer -              //   keys) - - -              if (stateObj.iterateUnsetNumeric) { -                var vl = value.length; - -                var _loop2 = function _loop2(i) { -                  if (!(i in value)) { -                    // No need to escape numeric -                    var kp = keypath + (keypath ? '.' : '') + i; -                    var ownKeysObj = { -                      ownKeys: false -                    }; - -                    _adaptBuiltinStateObjectProperties(stateObj, ownKeysObj, function () { -                      var val = _encapsulate(kp, undefined, Boolean(cyclic), stateObj, promisesData, resolvingTypesonPromise); - -                      if (hasConstructorOf(val, TypesonPromise)) { -                        promisesData.push([kp, val, Boolean(cyclic), stateObj, clone, i, stateObj.type]); -                      } else if (val !== undefined) { -                        clone[i] = val; -                      } -                    }); -                  } -                }; - -                for (var i = 0; i < vl; i++) { -                  _loop2(i); -                } - -                if (runObserver) { -                  runObserver({ -                    endIterateUnsetNumeric: true, -                    end: true -                  }); -                } -              } - -              return clone; -            } -            /** -             * -             * @param {string} keypath -             * @param {Any} value -             * @param {PlainObject} stateObj -             * @param {GenericArray} promisesData -             * @param {boolean} plainObject -             * @param {boolean} resolvingTypesonPromise -             * @param {function} [runObserver] -             * @returns {*} -             */ - - -            function replace(keypath, value, stateObj, promisesData, plainObject, resolvingTypesonPromise, runObserver) { -              // Encapsulate registered types -              var replacers = plainObject ? that.plainObjectReplacers : that.nonplainObjectReplacers; -              var i = replacers.length; - -              while (i--) { -                var replacer = replacers[i]; - -                if (replacer.test(value, stateObj)) { -                  var type = replacer.type; - -                  if (that.revivers[type]) { -                    // Record the type only if a corresponding reviver -                    //   exists. This is to support specs where only -                    //   replacement is done. -                    // For example, ensuring deep cloning of the object, -                    //   or replacing a type to its equivalent without -                    //   the need to revive it. -                    var existing = types[keypath]; // type can comprise an array of types (see test -                    //   "should support intermediate types") - -                    types[keypath] = existing ? [type].concat(existing) : type; -                  } - -                  Object.assign(stateObj, { -                    type: type, -                    replaced: true -                  }); - -                  if ((sync || !replacer.replaceAsync) && !replacer.replace) { -                    if (runObserver) { -                      runObserver({ -                        typeDetected: true -                      }); -                    } - -                    return _encapsulate(keypath, value, cyclic && 'readonly', stateObj, promisesData, resolvingTypesonPromise, type); -                  } - -                  if (runObserver) { -                    runObserver({ -                      replacing: true -                    }); -                  } // Now, also traverse the result in case it contains its -                  //   own types to replace - - -                  var replaceMethod = sync || !replacer.replaceAsync ? 'replace' : 'replaceAsync'; -                  return _encapsulate(keypath, replacer[replaceMethod](value, stateObj), cyclic && 'readonly', stateObj, promisesData, resolvingTypesonPromise, type); -                } -              } - -              return value; -            } - -            return promisesDataRoot.length ? sync && opts.throwOnBadSyncType ? function () { -              throw new TypeError('Sync method requested but async result obtained'); -            }() : Promise.resolve(checkPromises(ret, promisesDataRoot)).then(finish) : !sync && opts.throwOnBadSyncType ? function () { -              throw new TypeError('Async method requested but sync result obtained'); -            }() // If this is a synchronous request for stringification, yet -            //   a promise is the result, we don't want to resolve leading -            //   to an async result, so we return an array to avoid -            //   ambiguity -            : opts.stringification && sync ? [finish(ret)] : sync ? finish(ret) : Promise.resolve(finish(ret)); -          } -          /** -           * Also sync but throws on non-sync result. -           * @param {*} obj -           * @param {object} stateObj -           * @param {object} opts -           * @returns {*} -           */ - -        }, { -          key: "encapsulateSync", -          value: function encapsulateSync(obj, stateObj, opts) { -            return this.encapsulate(obj, stateObj, _objectSpread2({ -              throwOnBadSyncType: true -            }, opts, { -              sync: true -            })); -          } -          /** -           * @param {*} obj -           * @param {object} stateObj -           * @param {object} opts -           * @returns {*} -           */ - -        }, { -          key: "encapsulateAsync", -          value: function encapsulateAsync(obj, stateObj, opts) { -            return this.encapsulate(obj, stateObj, _objectSpread2({ -              throwOnBadSyncType: true -            }, opts, { -              sync: false -            })); -          } -          /** -           * Revive an encapsulated object. -           * This method is used internally by `Typeson.parse()`. -           * @param {object} obj - Object to revive. If it has `$types` member, the -           *   properties that are listed there will be replaced with its true type -           *   instead of just plain objects. -           * @param {object} opts -           * @throws TypeError If mismatch between sync/async type and result -           * @returns {Promise|*} If async, returns a Promise that resolves to `*` -           */ - -        }, { -          key: "revive", -          value: function revive(obj, opts) { -            var types = obj && obj.$types; // No type info added. Revival not needed. - -            if (!types) { -              return obj; -            } // Object happened to have own `$types` property but with -            //   no actual types, so we unescape and return that object - - -            if (types === true) { -              return obj.$; -            } - -            opts = _objectSpread2({ -              sync: true -            }, this.options, {}, opts); -            var _opts3 = opts, -                sync = _opts3.sync; -            var keyPathResolutions = []; -            var stateObj = {}; -            var ignore$Types = true; // Special when root object is not a trivial Object, it will -            //   be encapsulated in `$`. It will also be encapsulated in -            //   `$` if it has its own `$` property to avoid ambiguity - -            if (types.$ && isPlainObject(types.$)) { -              obj = obj.$; -              types = types.$; -              ignore$Types = false; -            } - -            var that = this; -            /** -             * @callback RevivalReducer -             * @param {Any} value -             * @param {string} type -             * @returns {Any} -             */ - -            /** -             * -             * @param {string} type -             * @param {Any} val -             * @returns {[type]} [description] -             */ - -            function executeReviver(type, val) { -              var _ref2 = that.revivers[type] || [], -                  _ref3 = _slicedToArray(_ref2, 1), -                  reviver = _ref3[0]; - -              if (!reviver) { -                throw new Error('Unregistered type: ' + type); -              } // Only `sync` expected here, as problematic async would -              //  be missing both `reviver` and `reviverAsync`, and -              //  encapsulation shouldn't have added types, so -              //  should have made an early exit - - -              if (sync && !('revive' in reviver)) { -                // Just return value as is -                return val; -              } - -              return reviver[sync && reviver.revive ? 'revive' : !sync && reviver.reviveAsync ? 'reviveAsync' : 'revive'](val, stateObj); -            } -            /** -             * -             * @returns {void|TypesonPromise<void>} -             */ - - -            function revivePlainObjects() { -              // const references = []; -              // const reviveTypes = []; -              var plainObjectTypes = []; -              Object.entries(types).forEach(function (_ref4) { -                var _ref5 = _slicedToArray(_ref4, 2), -                    keypath = _ref5[0], -                    type = _ref5[1]; - -                if (type === '#') { -                  /* -                  references.push({ -                      keypath, -                      reference: getByKeyPath(obj, keypath) -                  }); -                  */ -                  return; -                } - -                [].concat(type).forEach(function (type) { -                  var _ref6 = that.revivers[type] || [null, {}], -                      _ref7 = _slicedToArray(_ref6, 2), -                      plain = _ref7[1].plain; - -                  if (!plain) { -                    // reviveTypes.push({keypath, type}); -                    return; -                  } - -                  plainObjectTypes.push({ -                    keypath: keypath, -                    type: type -                  }); -                  delete types[keypath]; // Avoid repeating -                }); -              }); - -              if (!plainObjectTypes.length) { -                return undefined; -              } // console.log(plainObjectTypes.sort(nestedPathsFirst)); - -              /** -              * @typedef {PlainObject} PlainObjectType -              * @property {string} keypath -              * @property {string} type -              */ - - -              return plainObjectTypes.sort(nestedPathsFirst).reduce(function reducer(possibleTypesonPromise, _ref8) { -                var keypath = _ref8.keypath, -                    type = _ref8.type; - -                if (isThenable(possibleTypesonPromise)) { -                  return possibleTypesonPromise.then(function (val) { -                    return reducer(val, { -                      keypath: keypath, -                      type: type -                    }); -                  }); -                } // console.log('obj', JSON.stringify(keypath), obj); - - -                var val = getByKeyPath(obj, keypath); -                val = executeReviver(type, val); - -                if (hasConstructorOf(val, TypesonPromise)) { -                  return val.then(function (v) { -                    var newVal = setAtKeyPath(obj, keypath, v); - -                    if (newVal === v) { -                      obj = newVal; -                    } - -                    return undefined; -                  }); -                } - -                var newVal = setAtKeyPath(obj, keypath, val); - -                if (newVal === val) { -                  obj = newVal; -                } - -                return undefined; -              }, undefined // This argument must be explicit -              ); // references.forEach(({keypath, reference}) => {}); -              // reviveTypes.sort(nestedPathsFirst).forEach(() => {}); -            } - -            var revivalPromises = []; -            /** -             * -             * @param {string} keypath -             * @param {Any} value -             * @param {?(Array|object)} target -             * @param {Array|object} [clone] -             * @param {string} [key] -             * @returns {Any} -             */ - -            function _revive(keypath, value, target, clone, key) { -              if (ignore$Types && keypath === '$types') { -                return undefined; -              } - -              var type = types[keypath]; -              var isArr = isArray(value); - -              if (isArr || isPlainObject(value)) { -                var _clone = isArr ? new Array(value.length) : {}; // Iterate object or array - - -                keys(value).forEach(function (k) { -                  var val = _revive(keypath + (keypath ? '.' : '') + escapeKeyPathComponent(k), value[k], target || _clone, _clone, k); - -                  var set = function set(v) { -                    if (hasConstructorOf(v, Undefined)) { -                      _clone[k] = undefined; -                    } else if (v !== undefined) { -                      _clone[k] = v; -                    } - -                    return v; -                  }; - -                  if (hasConstructorOf(val, TypesonPromise)) { -                    revivalPromises.push(val.then(function (ret) { -                      return set(ret); -                    })); -                  } else { -                    set(val); -                  } -                }); -                value = _clone; // Try to resolve cyclic reference as soon as available - -                while (keyPathResolutions.length) { -                  var _keyPathResolutions$ = _slicedToArray(keyPathResolutions[0], 4), -                      _target = _keyPathResolutions$[0], -                      keyPath = _keyPathResolutions$[1], -                      _clone2 = _keyPathResolutions$[2], -                      k = _keyPathResolutions$[3]; - -                  var val = getByKeyPath(_target, keyPath); // Typeson.Undefined not expected here as not cyclic or -                  //   `undefined` - -                  if (val !== undefined) { -                    _clone2[k] = val; -                  } else { -                    break; -                  } - -                  keyPathResolutions.splice(0, 1); -                } -              } - -              if (!type) { -                return value; -              } - -              if (type === '#') { -                var _ret = getByKeyPath(target, value.slice(1)); - -                if (_ret === undefined) { -                  // Cyclic reference not yet available -                  keyPathResolutions.push([target, value.slice(1), clone, key]); -                } - -                return _ret; -              } // `type` can be an array here - - -              return [].concat(type).reduce(function reducer(val, typ) { -                if (hasConstructorOf(val, TypesonPromise)) { -                  return val.then(function (v) { -                    // TypesonPromise here too -                    return reducer(v, typ); -                  }); -                } - -                return executeReviver(typ, val); -              }, value); -            } -            /** -             * -             * @param {Any} retrn -             * @returns {undefined|Any} -             */ - - -            function checkUndefined(retrn) { -              return hasConstructorOf(retrn, Undefined) ? undefined : retrn; -            } - -            var possibleTypesonPromise = revivePlainObjects(); -            var ret; - -            if (hasConstructorOf(possibleTypesonPromise, TypesonPromise)) { -              ret = possibleTypesonPromise.then(function () { -                return obj; -              }); -            } else { -              ret = _revive('', obj, null); - -              if (revivalPromises.length) { -                // Ensure children resolved -                ret = TypesonPromise.resolve(ret).then(function (r) { -                  return TypesonPromise.all([// May be a TypesonPromise or not -                  r].concat(revivalPromises)); -                }).then(function (_ref9) { -                  var _ref10 = _slicedToArray(_ref9, 1), -                      r = _ref10[0]; - -                  return r; -                }); -              } -            } - -            return isThenable(ret) ? sync && opts.throwOnBadSyncType ? function () { -              throw new TypeError('Sync method requested but async result obtained'); -            }() : hasConstructorOf(ret, TypesonPromise) ? ret.p.then(checkUndefined) : ret : !sync && opts.throwOnBadSyncType ? function () { -              throw new TypeError('Async method requested but sync result obtained'); -            }() : sync ? checkUndefined(ret) : Promise.resolve(checkUndefined(ret)); -          } -          /** -           * Also sync but throws on non-sync result. -           * @param {Any} obj -           * @param {object} opts -           * @returns {Any} -           */ - -        }, { -          key: "reviveSync", -          value: function reviveSync(obj, opts) { -            return this.revive(obj, _objectSpread2({ -              throwOnBadSyncType: true -            }, opts, { -              sync: true -            })); -          } -          /** -          * @param {Any} obj -          * @param {object} opts -          * @returns {Promise} Resolves to `*` -          */ - -        }, { -          key: "reviveAsync", -          value: function reviveAsync(obj, opts) { -            return this.revive(obj, _objectSpread2({ -              throwOnBadSyncType: true -            }, opts, { -              sync: false -            })); -          } -          /** -           * Register types. -           * For examples on how to use this method, see -           *   {@link https://github.com/dfahlander/typeson-registry/tree/master/types}. -           * @param {object.<string,Function[]>[]} typeSpecSets - Types and -           *   their functions [test, encapsulate, revive]; -           * @param {object} opts -           * @returns {Typeson} -           */ - -        }, { -          key: "register", -          value: function register(typeSpecSets, opts) { -            opts = opts || {}; -            [].concat(typeSpecSets).forEach(function R(typeSpec) { -              var _this = this; - -              // Allow arrays of arrays of arrays... -              if (isArray(typeSpec)) { -                return typeSpec.map(function (typSpec) { -                  return R.call(_this, typSpec); -                }); -              } - -              typeSpec && keys(typeSpec).forEach(function (typeId) { -                if (typeId === '#') { -                  throw new TypeError('# cannot be used as a type name as it is reserved ' + 'for cyclic objects'); -                } else if (Typeson.JSON_TYPES.includes(typeId)) { -                  throw new TypeError('Plain JSON object types are reserved as type names'); -                } - -                var spec = typeSpec[typeId]; -                var replacers = spec && spec.testPlainObjects ? this.plainObjectReplacers : this.nonplainObjectReplacers; -                var existingReplacer = replacers.filter(function (r) { -                  return r.type === typeId; -                }); - -                if (existingReplacer.length) { -                  // Remove existing spec and replace with this one. -                  replacers.splice(replacers.indexOf(existingReplacer[0]), 1); -                  delete this.revivers[typeId]; -                  delete this.types[typeId]; -                } - -                if (typeof spec === 'function') { -                  // Support registering just a class without replacer/reviver -                  var Class = spec; -                  spec = { -                    test: function test(x) { -                      return x && x.constructor === Class; -                    }, -                    replace: function replace(x) { -                      return _objectSpread2({}, x); -                    }, -                    revive: function revive(x) { -                      return Object.assign(Object.create(Class.prototype), x); -                    } -                  }; -                } else if (isArray(spec)) { -                  var _spec = spec, -                      _spec2 = _slicedToArray(_spec, 3), -                      test = _spec2[0], -                      replace = _spec2[1], -                      revive = _spec2[2]; - -                  spec = { -                    test: test, -                    replace: replace, -                    revive: revive -                  }; -                } - -                if (!spec || !spec.test) { -                  return; -                } - -                var replacerObj = { -                  type: typeId, -                  test: spec.test.bind(spec) -                }; - -                if (spec.replace) { -                  replacerObj.replace = spec.replace.bind(spec); -                } - -                if (spec.replaceAsync) { -                  replacerObj.replaceAsync = spec.replaceAsync.bind(spec); -                } - -                var start = typeof opts.fallback === 'number' ? opts.fallback : opts.fallback ? 0 : Infinity; - -                if (spec.testPlainObjects) { -                  this.plainObjectReplacers.splice(start, 0, replacerObj); -                } else { -                  this.nonplainObjectReplacers.splice(start, 0, replacerObj); -                } // Todo: We might consider a testAsync type - - -                if (spec.revive || spec.reviveAsync) { -                  var reviverObj = {}; - -                  if (spec.revive) { -                    reviverObj.revive = spec.revive.bind(spec); -                  } - -                  if (spec.reviveAsync) { -                    reviverObj.reviveAsync = spec.reviveAsync.bind(spec); -                  } - -                  this.revivers[typeId] = [reviverObj, { -                    plain: spec.testPlainObjects -                  }]; -                } // Record to be retrieved via public types property. - - -                this.types[typeId] = spec; -              }, this); -            }, this); -            return this; -          } -        }]); - -        return Typeson; -      }(); -      /** -       * We keep this function minimized so if using two instances of this -       * library, where one is minimized and one is not, it will still work -       * with `hasConstructorOf`. -       * @class -       */ - - -      var Undefined = function Undefined() { -        _classCallCheck(this, Undefined); -      }; // eslint-disable-line space-before-blocks - - -      Undefined.__typeson__type__ = 'TypesonUndefined'; // The following provide classes meant to avoid clashes with other values -      // To insist `undefined` should be added - -      Typeson.Undefined = Undefined; // To support async encapsulation/stringification - -      Typeson.Promise = TypesonPromise; // Some fundamental type-checking utilities - -      Typeson.isThenable = isThenable; -      Typeson.toStringTag = toStringTag; -      Typeson.hasConstructorOf = hasConstructorOf; -      Typeson.isObject = isObject; -      Typeson.isPlainObject = isPlainObject; -      Typeson.isUserObject = isUserObject; -      Typeson.escapeKeyPathComponent = escapeKeyPathComponent; -      Typeson.unescapeKeyPathComponent = unescapeKeyPathComponent; -      Typeson.getByKeyPath = getByKeyPath; -      Typeson.getJSONType = getJSONType; -      Typeson.JSON_TYPES = ['null', 'boolean', 'number', 'string', 'array', 'object']; - -      return Typeson; - -    }))); -    }); - -    var structuredCloning = createCommonjsModule(function (module, exports) { -    !function(e,t){module.exports=t();}(commonjsGlobal,(function(){function _typeof$1(e){return (_typeof$1="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _classCallCheck$1(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties$1(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n);}}function _defineProperty$1(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ownKeys$1(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n);}return r}function _toConsumableArray$1(e){return function _arrayWithoutHoles$1(e){if(Array.isArray(e))return _arrayLikeToArray$1(e)}(e)||function _iterableToArray$1(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||function _unsupportedIterableToArray$1(e,t){if(!e)return;if("string"==typeof e)return _arrayLikeToArray$1(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return _arrayLikeToArray$1(e,t)}(e)||function _nonIterableSpread$1(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray$1(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function _typeof(e){return (_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(e){return typeof e}:function _typeof(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n);}}function _defineProperty(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n);}return r}function _objectSpread2(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ownKeys(Object(r),!0).forEach((function(t){_defineProperty(e,t,r[t]);})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ownKeys(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t));}));}return e}function _slicedToArray(e,t){return function _arrayWithHoles(e){if(Array.isArray(e))return e}(e)||function _iterableToArrayLimit(e,t){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(e)))return;var r=[],n=!0,i=!1,o=void 0;try{for(var a,c=e[Symbol.iterator]();!(n=(a=c.next()).done)&&(r.push(a.value),!t||r.length!==t);n=!0);}catch(e){i=!0,o=e;}finally{try{n||null==c.return||c.return();}finally{if(i)throw o}}return r}(e,t)||_unsupportedIterableToArray(e,t)||function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _toConsumableArray(e){return function _arrayWithoutHoles(e){if(Array.isArray(e))return _arrayLikeToArray(e)}(e)||function _iterableToArray(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||_unsupportedIterableToArray(e)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _unsupportedIterableToArray(e,t){if(e){if("string"==typeof e)return _arrayLikeToArray(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return "Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?_arrayLikeToArray(e,t):void 0}}function _arrayLikeToArray(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}var e=function TypesonPromise(e){_classCallCheck(this,TypesonPromise),this.p=new Promise(e);};e.__typeson__type__="TypesonPromise","undefined"!=typeof Symbol&&(e.prototype[Symbol.toStringTag]="TypesonPromise"),e.prototype.then=function(t,r){var n=this;return new e((function(e,i){n.p.then((function(r){e(t?t(r):r);})).catch((function(e){return r?r(e):Promise.reject(e)})).then(e,i);}))},e.prototype.catch=function(e){return this.then(null,e)},e.resolve=function(t){return new e((function(e){e(t);}))},e.reject=function(t){return new e((function(e,r){r(t);}))},["all","race"].forEach((function(t){e[t]=function(r){return new e((function(e,n){Promise[t](r.map((function(e){return e&&e.constructor&&"TypesonPromise"===e.constructor.__typeson__type__?e.p:e}))).then(e,n);}))};}));var t={}.toString,r={}.hasOwnProperty,n=Object.getPrototypeOf,i=r.toString;function isThenable(e,t){return isObject(e)&&"function"==typeof e.then&&(!t||"function"==typeof e.catch)}function toStringTag(e){return t.call(e).slice(8,-1)}function hasConstructorOf(e,t){if(!e||"object"!==_typeof(e))return !1;var o=n(e);if(!o)return null===t;var a=r.call(o,"constructor")&&o.constructor;return "function"!=typeof a?null===t:t===a||(null!==t&&i.call(a)===i.call(t)||"function"==typeof t&&"string"==typeof a.__typeson__type__&&a.__typeson__type__===t.__typeson__type__)}function isPlainObject(e){return !(!e||"Object"!==toStringTag(e))&&(!n(e)||hasConstructorOf(e,Object))}function isObject(e){return e&&"object"===_typeof(e)}function escapeKeyPathComponent(e){return e.replace(/~/g,"~0").replace(/\./g,"~1")}function unescapeKeyPathComponent(e){return e.replace(/~1/g,".").replace(/~0/g,"~")}function getByKeyPath(e,t){if(""===t)return e;var r=t.indexOf(".");if(r>-1){var n=e[unescapeKeyPathComponent(t.slice(0,r))];return void 0===n?void 0:getByKeyPath(n,t.slice(r+1))}return e[unescapeKeyPathComponent(t)]}function setAtKeyPath(e,t,r){if(""===t)return r;var n=t.indexOf(".");return n>-1?setAtKeyPath(e[unescapeKeyPathComponent(t.slice(0,n))],t.slice(n+1),r):(e[unescapeKeyPathComponent(t)]=r,e)}function _await(e,t,r){return r?t?t(e):e:(e&&e.then||(e=Promise.resolve(e)),t?e.then(t):e)}var o=Object.keys,a=Array.isArray,c={}.hasOwnProperty,u=["type","replaced","iterateIn","iterateUnsetNumeric"];function _async(e){return function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];try{return Promise.resolve(e.apply(this,t))}catch(e){return Promise.reject(e)}}}function nestedPathsFirst(e,t){if(""===e.keypath)return -1;var r=e.keypath.match(/\./g)||0,n=t.keypath.match(/\./g)||0;return r&&(r=r.length),n&&(n=n.length),r>n?-1:r<n?1:e.keypath<t.keypath?-1:e.keypath>t.keypath}var s=function(){function Typeson(e){_classCallCheck(this,Typeson),this.options=e,this.plainObjectReplacers=[],this.nonplainObjectReplacers=[],this.revivers={},this.types={};}return function _createClass(e,t,r){return t&&_defineProperties(e.prototype,t),r&&_defineProperties(e,r),e}(Typeson,[{key:"stringify",value:function stringify(e,t,r,n){n=_objectSpread2(_objectSpread2(_objectSpread2({},this.options),n),{},{stringification:!0});var i=this.encapsulate(e,null,n);return a(i)?JSON.stringify(i[0],t,r):i.then((function(e){return JSON.stringify(e,t,r)}))}},{key:"stringifySync",value:function stringifySync(e,t,r,n){return this.stringify(e,t,r,_objectSpread2(_objectSpread2({throwOnBadSyncType:!0},n),{},{sync:!0}))}},{key:"stringifyAsync",value:function stringifyAsync(e,t,r,n){return this.stringify(e,t,r,_objectSpread2(_objectSpread2({throwOnBadSyncType:!0},n),{},{sync:!1}))}},{key:"parse",value:function parse(e,t,r){return r=_objectSpread2(_objectSpread2(_objectSpread2({},this.options),r),{},{parse:!0}),this.revive(JSON.parse(e,t),r)}},{key:"parseSync",value:function parseSync(e,t,r){return this.parse(e,t,_objectSpread2(_objectSpread2({throwOnBadSyncType:!0},r),{},{sync:!0}))}},{key:"parseAsync",value:function parseAsync(e,t,r){return this.parse(e,t,_objectSpread2(_objectSpread2({throwOnBadSyncType:!0},r),{},{sync:!1}))}},{key:"specialTypeNames",value:function specialTypeNames(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return r.returnTypeNames=!0,this.encapsulate(e,t,r)}},{key:"rootTypeName",value:function rootTypeName(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return r.iterateNone=!0,this.encapsulate(e,t,r)}},{key:"encapsulate",value:function encapsulate(t,r,n){var i=_async((function(t,r){return _await(Promise.all(r.map((function(e){return e[1].p}))),(function(n){return _await(Promise.all(n.map(_async((function(n){var o=!1,a=[],c=_slicedToArray(r.splice(0,1),1),u=_slicedToArray(c[0],7),s=u[0],f=u[2],l=u[3],p=u[4],y=u[5],v=u[6],b=_encapsulate(s,n,f,l,a,!0,v),d=hasConstructorOf(b,e);return function _invoke(e,t){var r=e();return r&&r.then?r.then(t):t(r)}((function(){if(s&&d)return _await(b.p,(function(e){return p[y]=e,o=!0,i(t,a)}))}),(function(e){return o?e:(s?p[y]=b:t=d?b.p:b,i(t,a))}))})))),(function(){return t}))}))})),s=(n=_objectSpread2(_objectSpread2({sync:!0},this.options),n)).sync,f=this,l={},p=[],y=[],v=[],b=!("cyclic"in n)||n.cyclic,d=n.encapsulateObserver,h=_encapsulate("",t,b,r||{},v);function finish(e){var t=Object.values(l);if(n.iterateNone)return t.length?t[0]:Typeson.getJSONType(e);if(t.length){if(n.returnTypeNames)return _toConsumableArray(new Set(t));e&&isPlainObject(e)&&!c.call(e,"$types")?e.$types=l:e={$:e,$types:{$:l}};}else isObject(e)&&c.call(e,"$types")&&(e={$:e,$types:!0});return !n.returnTypeNames&&e}function _adaptBuiltinStateObjectProperties(e,t,r){Object.assign(e,t);var n=u.map((function(t){var r=e[t];return delete e[t],r}));r(),u.forEach((function(t,r){e[t]=n[r];}));}function _encapsulate(t,r,i,u,s,v,b){var h,g={},m=_typeof(r),O=d?function(n){var o=b||u.type||Typeson.getJSONType(r);d(Object.assign(n||g,{keypath:t,value:r,cyclic:i,stateObj:u,promisesData:s,resolvingTypesonPromise:v,awaitingTypesonPromise:hasConstructorOf(r,e)},{type:o}));}:null;if(["string","boolean","number","undefined"].includes(m))return void 0===r||Number.isNaN(r)||r===Number.NEGATIVE_INFINITY||r===Number.POSITIVE_INFINITY?(h=u.replaced?r:replace(t,r,u,s,!1,v,O))!==r&&(g={replaced:h}):h=r,O&&O(),h;if(null===r)return O&&O(),r;if(i&&!u.iterateIn&&!u.iterateUnsetNumeric&&r&&"object"===_typeof(r)){var _=p.indexOf(r);if(!(_<0))return l[t]="#",O&&O({cyclicKeypath:y[_]}),"#"+y[_];!0===i&&(p.push(r),y.push(t));}var j,S=isPlainObject(r),T=a(r),w=(S||T)&&(!f.plainObjectReplacers.length||u.replaced)||u.iterateIn?r:replace(t,r,u,s,S||T,null,O);if(w!==r?(h=w,g={replaced:w}):""===t&&hasConstructorOf(r,e)?(s.push([t,r,i,u,void 0,void 0,u.type]),h=r):T&&"object"!==u.iterateIn||"array"===u.iterateIn?(j=new Array(r.length),g={clone:j}):(["function","symbol"].includes(_typeof(r))||"toJSON"in r||hasConstructorOf(r,e)||hasConstructorOf(r,Promise)||hasConstructorOf(r,ArrayBuffer))&&!S&&"object"!==u.iterateIn?h=r:(j={},u.addLength&&(j.length=r.length),g={clone:j}),O&&O(),n.iterateNone)return j||h;if(!j)return h;if(u.iterateIn){var A=function _loop(n){var o={ownKeys:c.call(r,n)};_adaptBuiltinStateObjectProperties(u,o,(function(){var o=t+(t?".":"")+escapeKeyPathComponent(n),a=_encapsulate(o,r[n],Boolean(i),u,s,v);hasConstructorOf(a,e)?s.push([o,a,Boolean(i),u,j,n,u.type]):void 0!==a&&(j[n]=a);}));};for(var P in r)A(P);O&&O({endIterateIn:!0,end:!0});}else o(r).forEach((function(n){var o=t+(t?".":"")+escapeKeyPathComponent(n);_adaptBuiltinStateObjectProperties(u,{ownKeys:!0},(function(){var t=_encapsulate(o,r[n],Boolean(i),u,s,v);hasConstructorOf(t,e)?s.push([o,t,Boolean(i),u,j,n,u.type]):void 0!==t&&(j[n]=t);}));})),O&&O({endIterateOwn:!0,end:!0});if(u.iterateUnsetNumeric){for(var I=r.length,C=function _loop2(n){if(!(n in r)){var o=t+(t?".":"")+n;_adaptBuiltinStateObjectProperties(u,{ownKeys:!1},(function(){var t=_encapsulate(o,void 0,Boolean(i),u,s,v);hasConstructorOf(t,e)?s.push([o,t,Boolean(i),u,j,n,u.type]):void 0!==t&&(j[n]=t);}));}},N=0;N<I;N++)C(N);O&&O({endIterateUnsetNumeric:!0,end:!0});}return j}function replace(e,t,r,n,i,o,a){for(var c=i?f.plainObjectReplacers:f.nonplainObjectReplacers,u=c.length;u--;){var p=c[u];if(p.test(t,r)){var y=p.type;if(f.revivers[y]){var v=l[e];l[e]=v?[y].concat(v):y;}return Object.assign(r,{type:y,replaced:!0}),!s&&p.replaceAsync||p.replace?(a&&a({replacing:!0}),_encapsulate(e,p[s||!p.replaceAsync?"replace":"replaceAsync"](t,r),b&&"readonly",r,n,o,y)):(a&&a({typeDetected:!0}),_encapsulate(e,t,b&&"readonly",r,n,o,y))}}return t}return v.length?s&&n.throwOnBadSyncType?function(){throw new TypeError("Sync method requested but async result obtained")}():Promise.resolve(i(h,v)).then(finish):!s&&n.throwOnBadSyncType?function(){throw new TypeError("Async method requested but sync result obtained")}():n.stringification&&s?[finish(h)]:s?finish(h):Promise.resolve(finish(h))}},{key:"encapsulateSync",value:function encapsulateSync(e,t,r){return this.encapsulate(e,t,_objectSpread2(_objectSpread2({throwOnBadSyncType:!0},r),{},{sync:!0}))}},{key:"encapsulateAsync",value:function encapsulateAsync(e,t,r){return this.encapsulate(e,t,_objectSpread2(_objectSpread2({throwOnBadSyncType:!0},r),{},{sync:!1}))}},{key:"revive",value:function revive(t,r){var n=t&&t.$types;if(!n)return t;if(!0===n)return t.$;var i=(r=_objectSpread2(_objectSpread2({sync:!0},this.options),r)).sync,c=[],u={},s=!0;n.$&&isPlainObject(n.$)&&(t=t.$,n=n.$,s=!1);var l=this;function executeReviver(e,t){var r=_slicedToArray(l.revivers[e]||[],1)[0];if(!r)throw new Error("Unregistered type: "+e);return i&&!("revive"in r)?t:r[i&&r.revive?"revive":!i&&r.reviveAsync?"reviveAsync":"revive"](t,u)}var p=[];function checkUndefined(e){return hasConstructorOf(e,f)?void 0:e}var y,v=function revivePlainObjects(){var r=[];if(Object.entries(n).forEach((function(e){var t=_slicedToArray(e,2),i=t[0],o=t[1];"#"!==o&&[].concat(o).forEach((function(e){_slicedToArray(l.revivers[e]||[null,{}],2)[1].plain&&(r.push({keypath:i,type:e}),delete n[i]);}));})),r.length)return r.sort(nestedPathsFirst).reduce((function reducer(r,n){var i=n.keypath,o=n.type;if(isThenable(r))return r.then((function(e){return reducer(e,{keypath:i,type:o})}));var a=getByKeyPath(t,i);if(hasConstructorOf(a=executeReviver(o,a),e))return a.then((function(e){var r=setAtKeyPath(t,i,e);r===e&&(t=r);}));var c=setAtKeyPath(t,i,a);c===a&&(t=c);}),void 0)}();return hasConstructorOf(v,e)?y=v.then((function(){return t})):(y=function _revive(t,r,i,u,l){if(!s||"$types"!==t){var y=n[t],v=a(r);if(v||isPlainObject(r)){var b=v?new Array(r.length):{};for(o(r).forEach((function(n){var o=_revive(t+(t?".":"")+escapeKeyPathComponent(n),r[n],i||b,b,n),a=function set(e){return hasConstructorOf(e,f)?b[n]=void 0:void 0!==e&&(b[n]=e),e};hasConstructorOf(o,e)?p.push(o.then((function(e){return a(e)}))):a(o);})),r=b;c.length;){var d=_slicedToArray(c[0],4),h=d[0],g=d[1],m=d[2],O=d[3],_=getByKeyPath(h,g);if(void 0===_)break;m[O]=_,c.splice(0,1);}}if(!y)return r;if("#"===y){var j=getByKeyPath(i,r.slice(1));return void 0===j&&c.push([i,r.slice(1),u,l]),j}return [].concat(y).reduce((function reducer(t,r){return hasConstructorOf(t,e)?t.then((function(e){return reducer(e,r)})):executeReviver(r,t)}),r)}}("",t,null),p.length&&(y=e.resolve(y).then((function(t){return e.all([t].concat(p))})).then((function(e){return _slicedToArray(e,1)[0]})))),isThenable(y)?i&&r.throwOnBadSyncType?function(){throw new TypeError("Sync method requested but async result obtained")}():hasConstructorOf(y,e)?y.p.then(checkUndefined):y:!i&&r.throwOnBadSyncType?function(){throw new TypeError("Async method requested but sync result obtained")}():i?checkUndefined(y):Promise.resolve(checkUndefined(y))}},{key:"reviveSync",value:function reviveSync(e,t){return this.revive(e,_objectSpread2(_objectSpread2({throwOnBadSyncType:!0},t),{},{sync:!0}))}},{key:"reviveAsync",value:function reviveAsync(e,t){return this.revive(e,_objectSpread2(_objectSpread2({throwOnBadSyncType:!0},t),{},{sync:!1}))}},{key:"register",value:function register(e,t){return t=t||{},[].concat(e).forEach((function R(e){var r=this;if(a(e))return e.map((function(e){return R.call(r,e)}));e&&o(e).forEach((function(r){if("#"===r)throw new TypeError("# cannot be used as a type name as it is reserved for cyclic objects");if(Typeson.JSON_TYPES.includes(r))throw new TypeError("Plain JSON object types are reserved as type names");var n=e[r],i=n&&n.testPlainObjects?this.plainObjectReplacers:this.nonplainObjectReplacers,o=i.filter((function(e){return e.type===r}));if(o.length&&(i.splice(i.indexOf(o[0]),1),delete this.revivers[r],delete this.types[r]),"function"==typeof n){var c=n;n={test:function test(e){return e&&e.constructor===c},replace:function replace(e){return _objectSpread2({},e)},revive:function revive(e){return Object.assign(Object.create(c.prototype),e)}};}else if(a(n)){var u=_slicedToArray(n,3);n={test:u[0],replace:u[1],revive:u[2]};}if(n&&n.test){var s={type:r,test:n.test.bind(n)};n.replace&&(s.replace=n.replace.bind(n)),n.replaceAsync&&(s.replaceAsync=n.replaceAsync.bind(n));var f="number"==typeof t.fallback?t.fallback:t.fallback?0:Number.POSITIVE_INFINITY;if(n.testPlainObjects?this.plainObjectReplacers.splice(f,0,s):this.nonplainObjectReplacers.splice(f,0,s),n.revive||n.reviveAsync){var l={};n.revive&&(l.revive=n.revive.bind(n)),n.reviveAsync&&(l.reviveAsync=n.reviveAsync.bind(n)),this.revivers[r]=[l,{plain:n.testPlainObjects}];}this.types[r]=n;}}),this);}),this),this}}]),Typeson}(),f=function Undefined(){_classCallCheck(this,Undefined);};f.__typeson__type__="TypesonUndefined",s.Undefined=f,s.Promise=e,s.isThenable=isThenable,s.toStringTag=toStringTag,s.hasConstructorOf=hasConstructorOf,s.isObject=isObject,s.isPlainObject=isPlainObject,s.isUserObject=function isUserObject(e){if(!e||"Object"!==toStringTag(e))return !1;var t=n(e);return !t||(hasConstructorOf(e,Object)||isUserObject(t))},s.escapeKeyPathComponent=escapeKeyPathComponent,s.unescapeKeyPathComponent=unescapeKeyPathComponent,s.getByKeyPath=getByKeyPath,s.getJSONType=function getJSONType(e){return null===e?"null":Array.isArray(e)?"array":_typeof(e)},s.JSON_TYPES=["null","boolean","number","string","array","object"];for(var l={userObject:{test:function test(e,t){return s.isUserObject(e)},replace:function replace(e){return function _objectSpread2$1(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ownKeys$1(Object(r),!0).forEach((function(t){_defineProperty$1(e,t,r[t]);})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ownKeys$1(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t));}));}return e}({},e)},revive:function revive(e){return e}}},p=[{arrayNonindexKeys:{testPlainObjects:!0,test:function test(e,t){return !!Array.isArray(e)&&(Object.keys(e).some((function(e){return String(Number.parseInt(e))!==e}))&&(t.iterateIn="object",t.addLength=!0),!0)},replace:function replace(e,t){return t.iterateUnsetNumeric=!0,e},revive:function revive(e){if(Array.isArray(e))return e;var t=[];return Object.keys(e).forEach((function(r){var n=e[r];t[r]=n;})),t}}},{sparseUndefined:{test:function test(e,t){return void 0===e&&!1===t.ownKeys},replace:function replace(e){return 0},revive:function revive(e){}}}],y={undef:{test:function test(e,t){return void 0===e&&(t.ownKeys||!("ownKeys"in t))},replace:function replace(e){return 0},revive:function revive(e){return new s.Undefined}}},v={StringObject:{test:function test(e){return "String"===s.toStringTag(e)&&"object"===_typeof$1(e)},replace:function replace(e){return String(e)},revive:function revive(e){return new String(e)}},BooleanObject:{test:function test(e){return "Boolean"===s.toStringTag(e)&&"object"===_typeof$1(e)},replace:function replace(e){return Boolean(e)},revive:function revive(e){return new Boolean(e)}},NumberObject:{test:function test(e){return "Number"===s.toStringTag(e)&&"object"===_typeof$1(e)},replace:function replace(e){return Number(e)},revive:function revive(e){return new Number(e)}}},b=[{nan:{test:function test(e){return Number.isNaN(e)},replace:function replace(e){return "NaN"},revive:function revive(e){return Number.NaN}}},{infinity:{test:function test(e){return e===Number.POSITIVE_INFINITY},replace:function replace(e){return "Infinity"},revive:function revive(e){return Number.POSITIVE_INFINITY}}},{negativeInfinity:{test:function test(e){return e===Number.NEGATIVE_INFINITY},replace:function replace(e){return "-Infinity"},revive:function revive(e){return Number.NEGATIVE_INFINITY}}}],d={date:{test:function test(e){return "Date"===s.toStringTag(e)},replace:function replace(e){var t=e.getTime();return Number.isNaN(t)?"NaN":t},revive:function revive(e){return "NaN"===e?new Date(Number.NaN):new Date(e)}}},h={regexp:{test:function test(e){return "RegExp"===s.toStringTag(e)},replace:function replace(e){return {source:e.source,flags:(e.global?"g":"")+(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.sticky?"y":"")+(e.unicode?"u":"")}},revive:function revive(e){var t=e.source,r=e.flags;return new RegExp(t,r)}}},g={map:{test:function test(e){return "Map"===s.toStringTag(e)},replace:function replace(e){return _toConsumableArray$1(e.entries())},revive:function revive(e){return new Map(e)}}},m={set:{test:function test(e){return "Set"===s.toStringTag(e)},replace:function replace(e){return _toConsumableArray$1(e.values())},revive:function revive(e){return new Set(e)}}},O="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",_=new Uint8Array(256),j=0;j<O.length;j++)_[O.charCodeAt(j)]=j;var S=function encode(e,t,r){null==r&&(r=e.byteLength);for(var n=new Uint8Array(e,t||0,r),i=n.length,o="",a=0;a<i;a+=3)o+=O[n[a]>>2],o+=O[(3&n[a])<<4|n[a+1]>>4],o+=O[(15&n[a+1])<<2|n[a+2]>>6],o+=O[63&n[a+2]];return i%3==2?o=o.slice(0,-1)+"=":i%3==1&&(o=o.slice(0,-2)+"=="),o},T=function decode(e){var t,r,n,i,o=e.length,a=.75*e.length,c=0;"="===e[e.length-1]&&(a--,"="===e[e.length-2]&&a--);for(var u=new ArrayBuffer(a),s=new Uint8Array(u),f=0;f<o;f+=4)t=_[e.charCodeAt(f)],r=_[e.charCodeAt(f+1)],n=_[e.charCodeAt(f+2)],i=_[e.charCodeAt(f+3)],s[c++]=t<<2|r>>4,s[c++]=(15&r)<<4|n>>2,s[c++]=(3&n)<<6|63&i;return u},w={arraybuffer:{test:function test(e){return "ArrayBuffer"===s.toStringTag(e)},replace:function replace(e,t){t.buffers||(t.buffers=[]);var r=t.buffers.indexOf(e);return r>-1?{index:r}:(t.buffers.push(e),S(e))},revive:function revive(e,t){if(t.buffers||(t.buffers=[]),"object"===_typeof$1(e))return t.buffers[e.index];var r=T(e);return t.buffers.push(r),r}}},A="undefined"==typeof self?commonjsGlobal:self,P={};["Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array"].forEach((function(e){var t=e,r=A[t];r&&(P[e.toLowerCase()]={test:function test(e){return s.toStringTag(e)===t},replace:function replace(e,t){var r=e.buffer,n=e.byteOffset,i=e.length;t.buffers||(t.buffers=[]);var o=t.buffers.indexOf(r);return o>-1?{index:o,byteOffset:n,length:i}:(t.buffers.push(r),{encoded:S(r),byteOffset:n,length:i})},revive:function revive(e,t){t.buffers||(t.buffers=[]);var n,i=e.byteOffset,o=e.length,a=e.encoded,c=e.index;return "index"in e?n=t.buffers[c]:(n=T(a),t.buffers.push(n)),new r(n,i,o)}});}));var I={dataview:{test:function test(e){return "DataView"===s.toStringTag(e)},replace:function replace(e,t){var r=e.buffer,n=e.byteOffset,i=e.byteLength;t.buffers||(t.buffers=[]);var o=t.buffers.indexOf(r);return o>-1?{index:o,byteOffset:n,byteLength:i}:(t.buffers.push(r),{encoded:S(r),byteOffset:n,byteLength:i})},revive:function revive(e,t){t.buffers||(t.buffers=[]);var r,n=e.byteOffset,i=e.byteLength,o=e.encoded,a=e.index;return "index"in e?r=t.buffers[a]:(r=T(o),t.buffers.push(r)),new DataView(r,n,i)}}},C={IntlCollator:{test:function test(e){return s.hasConstructorOf(e,Intl.Collator)},replace:function replace(e){return e.resolvedOptions()},revive:function revive(e){return new Intl.Collator(e.locale,e)}},IntlDateTimeFormat:{test:function test(e){return s.hasConstructorOf(e,Intl.DateTimeFormat)},replace:function replace(e){return e.resolvedOptions()},revive:function revive(e){return new Intl.DateTimeFormat(e.locale,e)}},IntlNumberFormat:{test:function test(e){return s.hasConstructorOf(e,Intl.NumberFormat)},replace:function replace(e){return e.resolvedOptions()},revive:function revive(e){return new Intl.NumberFormat(e.locale,e)}}};function string2arraybuffer(e){for(var t=new Uint8Array(e.length),r=0;r<e.length;r++)t[r]=e.charCodeAt(r);return t.buffer}var N={file:{test:function test(e){return "File"===s.toStringTag(e)},replace:function replace(e){var t=new XMLHttpRequest;if(t.overrideMimeType("text/plain; charset=x-user-defined"),t.open("GET",URL.createObjectURL(e),!1),t.send(),200!==t.status&&0!==t.status)throw new Error("Bad File access: "+t.status);return {type:e.type,stringContents:t.responseText,name:e.name,lastModified:e.lastModified}},revive:function revive(e){var t=e.name,r=e.type,n=e.stringContents,i=e.lastModified;return new File([string2arraybuffer(n)],t,{type:r,lastModified:i})},replaceAsync:function replaceAsync(e){return new s.Promise((function(t,r){var n=new FileReader;n.addEventListener("load",(function(){t({type:e.type,stringContents:n.result,name:e.name,lastModified:e.lastModified});})),n.addEventListener("error",(function(){r(n.error);})),n.readAsBinaryString(e);}))}}},k={bigint:{test:function test(e){return "bigint"==typeof e},replace:function replace(e){return String(e)},revive:function revive(e){return BigInt(e)}}},E={bigintObject:{test:function test(e){return "object"===_typeof$1(e)&&s.hasConstructorOf(e,BigInt)},replace:function replace(e){return String(e)},revive:function revive(e){return new Object(BigInt(e))}}},B={cryptokey:{test:function test(e){return "CryptoKey"===s.toStringTag(e)&&e.extractable},replaceAsync:function replaceAsync(e){return new s.Promise((function(t,r){crypto.subtle.exportKey("jwk",e).catch((function(e){r(e);})).then((function(r){t({jwk:r,algorithm:e.algorithm,usages:e.usages});}));}))},revive:function revive(e){var t=e.jwk,r=e.algorithm,n=e.usages;return crypto.subtle.importKey("jwk",t,r,!0,n)}}};return [l,y,p,v,b,d,h,{imagedata:{test:function test(e){return "ImageData"===s.toStringTag(e)},replace:function replace(e){return {array:_toConsumableArray$1(e.data),width:e.width,height:e.height}},revive:function revive(e){return new ImageData(new Uint8ClampedArray(e.array),e.width,e.height)}}},{imagebitmap:{test:function test(e){return "ImageBitmap"===s.toStringTag(e)||e&&e.dataset&&"ImageBitmap"===e.dataset.toStringTag},replace:function replace(e){var t=document.createElement("canvas");return t.getContext("2d").drawImage(e,0,0),t.toDataURL()},revive:function revive(e){var t=document.createElement("canvas"),r=t.getContext("2d"),n=document.createElement("img");return n.addEventListener("load",(function(){r.drawImage(n,0,0);})),n.src=e,t},reviveAsync:function reviveAsync(e){var t=document.createElement("canvas"),r=t.getContext("2d"),n=document.createElement("img");return n.addEventListener("load",(function(){r.drawImage(n,0,0);})),n.src=e,createImageBitmap(t)}}},N,{file:N.file,filelist:{test:function test(e){return "FileList"===s.toStringTag(e)},replace:function replace(e){for(var t=[],r=0;r<e.length;r++)t[r]=e.item(r);return t},revive:function revive(e){return new(function(){function FileList(){_classCallCheck$1(this,FileList),this._files=arguments[0],this.length=this._files.length;}return function _createClass$1(e,t,r){return t&&_defineProperties$1(e.prototype,t),r&&_defineProperties$1(e,r),e}(FileList,[{key:"item",value:function item(e){return this._files[e]}},{key:Symbol.toStringTag,get:function get(){return "FileList"}}]),FileList}())(e)}}},{blob:{test:function test(e){return "Blob"===s.toStringTag(e)},replace:function replace(e){var t=new XMLHttpRequest;if(t.overrideMimeType("text/plain; charset=x-user-defined"),t.open("GET",URL.createObjectURL(e),!1),t.send(),200!==t.status&&0!==t.status)throw new Error("Bad Blob access: "+t.status);return {type:e.type,stringContents:t.responseText}},revive:function revive(e){var t=e.type,r=e.stringContents;return new Blob([string2arraybuffer(r)],{type:t})},replaceAsync:function replaceAsync(e){return new s.Promise((function(t,r){var n=new FileReader;n.addEventListener("load",(function(){t({type:e.type,stringContents:n.result});})),n.addEventListener("error",(function(){r(n.error);})),n.readAsBinaryString(e);}))}}}].concat("function"==typeof Map?g:[],"function"==typeof Set?m:[],"function"==typeof ArrayBuffer?w:[],"function"==typeof Uint8Array?P:[],"function"==typeof DataView?I:[],"undefined"!=typeof Intl?C:[],"undefined"!=typeof crypto?B:[],"undefined"!=typeof BigInt?[k,E]:[])})); - -    }); - -    /* -     * base64-arraybuffer -     * https://github.com/niklasvh/base64-arraybuffer -     * -     * Copyright (c) 2017 Brett Zamir, 2012 Niklas von Hertzen -     * Licensed under the MIT license. -     */ -    var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; // Use a lookup table to find the index. - -    var lookup = new Uint8Array(256); - -    for (var i = 0; i < chars.length; i++) { -      lookup[chars.codePointAt(i)] = i; -    } -    /** -     * @param {ArrayBuffer} arraybuffer -     * @param {Integer} byteOffset -     * @param {Integer} lngth -     * @returns {string} -     */ - - -    var encode = function encode(arraybuffer, byteOffset, lngth) { -      if (lngth === null || lngth === undefined) { -        lngth = arraybuffer.byteLength; // Needed for Safari -      } - -      var bytes = new Uint8Array(arraybuffer, byteOffset || 0, // Default needed for Safari -      lngth); -      var len = bytes.length; -      var base64 = ''; - -      for (var _i = 0; _i < len; _i += 3) { -        base64 += chars[bytes[_i] >> 2]; -        base64 += chars[(bytes[_i] & 3) << 4 | bytes[_i + 1] >> 4]; -        base64 += chars[(bytes[_i + 1] & 15) << 2 | bytes[_i + 2] >> 6]; -        base64 += chars[bytes[_i + 2] & 63]; -      } - -      if (len % 3 === 2) { -        base64 = base64.slice(0, -1) + '='; -      } else if (len % 3 === 1) { -        base64 = base64.slice(0, -2) + '=='; -      } - -      return base64; -    }; -    /** -     * @param {string} base64 -     * @returns {ArrayBuffer} -     */ - -    var decode = function decode(base64) { -      var len = base64.length; -      var bufferLength = base64.length * 0.75; -      var p = 0; -      var encoded1, encoded2, encoded3, encoded4; - -      if (base64[base64.length - 1] === '=') { -        bufferLength--; - -        if (base64[base64.length - 2] === '=') { -          bufferLength--; -        } -      } - -      var arraybuffer = new ArrayBuffer(bufferLength), -          bytes = new Uint8Array(arraybuffer); - -      for (var _i2 = 0; _i2 < len; _i2 += 4) { -        encoded1 = lookup[base64.codePointAt(_i2)]; -        encoded2 = lookup[base64.codePointAt(_i2 + 1)]; -        encoded3 = lookup[base64.codePointAt(_i2 + 2)]; -        encoded4 = lookup[base64.codePointAt(_i2 + 3)]; -        bytes[p++] = encoded1 << 2 | encoded2 >> 4; -        bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2; -        bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63; -      } - -      return arraybuffer; -    }; - -    /* eslint-env browser, node */ -    var _global = typeof self === 'undefined' ? global : self; -    var exportObj = {}; -    [ -        'Int8Array', -        'Uint8Array', -        'Uint8ClampedArray', -        'Int16Array', -        'Uint16Array', -        'Int32Array', -        'Uint32Array', -        'Float32Array', -        'Float64Array' -    ].forEach(function (typeName) { -        var arrType = typeName; -        var TypedArray = _global[arrType]; -        if (TypedArray) { -            exportObj[typeName.toLowerCase() + "2"] = { -                test: function (x) { return typeson.toStringTag(x) === arrType; }, -                replace: function (_a) { -                    var buffer = _a.buffer, byteOffset = _a.byteOffset, length = _a.length; -                    return { -                        buffer: buffer, -                        byteOffset: byteOffset, -                        length: length -                    }; -                }, -                revive: function (b64Obj) { -                    var buffer = b64Obj.buffer, byteOffset = b64Obj.byteOffset, length = b64Obj.length; -                    return new TypedArray(buffer, byteOffset, length); -                } -            }; -        } -    }); - -    var arrayBuffer = { -        arraybuffer: { -            test: function (x) { return typeson.toStringTag(x) === 'ArrayBuffer'; }, -            replace: function (b) { -                return encode(b, 0, b.byteLength); -            }, -            revive: function (b64) { -                var buffer = decode(b64); -                return buffer; -            } -        } -    }; -    // See also typed-arrays! - -    var TSON = new typeson().register(structuredCloning); -    var readBlobsSynchronously = 'FileReaderSync' in self; // true in workers only. -    var blobsToAwait = []; -    var blobsToAwaitPos = 0; -    // Need to patch encapsulateAsync as it does not work as of typeson 5.8.2 -    // Also, current version of typespn-registry-1.0.0-alpha.21 does not -    // encapsulate/revive Blobs correctly (fails one of the unit tests in -    // this library (test 'export-format')) -    TSON.register([ -        arrayBuffer, -        exportObj, { -            blob2: { -                test: function (x) { return typeson.toStringTag(x) === 'Blob'; }, -                replace: function (b) { -                    if (b.isClosed) { // On MDN, but not in https://w3c.github.io/FileAPI/#dfn-Blob -                        throw new Error('The Blob is closed'); -                    } -                    if (readBlobsSynchronously) { -                        var data = readBlobSync(b, 'binary'); -                        var base64 = encode(data, 0, data.byteLength); -                        return { -                            type: b.type, -                            data: base64 -                        }; -                    } -                    else { -                        blobsToAwait.push(b); // This will also make TSON.mustFinalize() return true. -                        var result = { -                            type: b.type, -                            data: { start: blobsToAwaitPos, end: blobsToAwaitPos + b.size } -                        }; -                        blobsToAwaitPos += b.size; -                        return result; -                    } -                }, -                finalize: function (b, ba) { -                    b.data = encode(ba, 0, ba.byteLength); -                }, -                revive: function (_a) { -                    var type = _a.type, data = _a.data; -                    return new Blob([decode(data)], { type: type }); -                } -            } -        } -    ]); -    TSON.mustFinalize = function () { return blobsToAwait.length > 0; }; -    TSON.finalize = function (items) { return __awaiter(void 0, void 0, void 0, function () { -        var allChunks, _i, items_1, item, types, arrayType, keyPath, typeName, typeSpec, b; -        return __generator(this, function (_a) { -            switch (_a.label) { -                case 0: return [4 /*yield*/, readBlobAsync(new Blob(blobsToAwait), 'binary')]; -                case 1: -                    allChunks = _a.sent(); -                    if (items) { -                        for (_i = 0, items_1 = items; _i < items_1.length; _i++) { -                            item = items_1[_i]; -                            // Manually go through all "blob" types in the result -                            // and lookup the data slice they point at. -                            if (item.$types) { -                                types = item.$types; -                                arrayType = types.$; -                                if (arrayType) -                                    types = types.$; -                                for (keyPath in types) { -                                    typeName = types[keyPath]; -                                    typeSpec = TSON.types[typeName]; -                                    if (typeSpec && typeSpec.finalize) { -                                        b = Dexie__default["default"].getByKeyPath(item, arrayType ? "$." + keyPath : keyPath); -                                        typeSpec.finalize(b, allChunks.slice(b.start, b.end)); -                                    } -                                } -                            } -                        } -                    } -                    // Free up memory -                    blobsToAwait = []; -                    return [2 /*return*/]; -            } -        }); -    }); }; - -    var DEFAULT_ROWS_PER_CHUNK = 2000; -    function exportDB(db, options) { -        return __awaiter(this, void 0, void 0, function () { -            function exportAll() { -                return __awaiter(this, void 0, void 0, function () { -                    var tablesRowCounts, emptyExportJson, posEndDataArray, firstJsonSlice, filter, _loop_1, _i, tables_1, tableName; -                    return __generator(this, function (_a) { -                        switch (_a.label) { -                            case 0: return [4 /*yield*/, Promise.all(db.tables.map(function (table) { return table.count(); }))]; -                            case 1: -                                tablesRowCounts = _a.sent(); -                                tablesRowCounts.forEach(function (rowCount, i) { return tables[i].rowCount = rowCount; }); -                                progress.totalRows = tablesRowCounts.reduce(function (p, c) { return p + c; }); -                                emptyExportJson = JSON.stringify(emptyExport, undefined, prettyJson ? 2 : undefined); -                                posEndDataArray = emptyExportJson.lastIndexOf(']'); -                                firstJsonSlice = emptyExportJson.substring(0, posEndDataArray); -                                slices.push(firstJsonSlice); -                                filter = options.filter; -                                _loop_1 = function (tableName) { -                                    var table, primKey, inbound, LIMIT, emptyTableExport, emptyTableExportJson, posEndRowsArray, lastKey, lastNumRows, mayHaveMoreRows, _loop_2, state_1; -                                    return __generator(this, function (_b) { -                                        switch (_b.label) { -                                            case 0: -                                                table = db.table(tableName); -                                                primKey = table.schema.primKey; -                                                inbound = !!primKey.keyPath; -                                                LIMIT = options.numRowsPerChunk || DEFAULT_ROWS_PER_CHUNK; -                                                emptyTableExport = inbound ? { -                                                    tableName: table.name, -                                                    inbound: true, -                                                    rows: [] -                                                } : { -                                                    tableName: table.name, -                                                    inbound: false, -                                                    rows: [] -                                                }; -                                                emptyTableExportJson = JSON.stringify(emptyTableExport, undefined, prettyJson ? 2 : undefined); -                                                if (prettyJson) { -                                                    // Increase indentation according to this: -                                                    // { -                                                    //   ... -                                                    //   data: [ -                                                    //     ... -                                                    //     data: [ -                                                    // 123456<---- here -                                                    //     ]  -                                                    //   ] -                                                    // } -                                                    emptyTableExportJson = emptyTableExportJson.split('\n').join('\n    '); -                                                } -                                                posEndRowsArray = emptyTableExportJson.lastIndexOf(']'); -                                                slices.push(emptyTableExportJson.substring(0, posEndRowsArray)); -                                                lastKey = null; -                                                lastNumRows = 0; -                                                mayHaveMoreRows = true; -                                                _loop_2 = function () { -                                                    var chunkedCollection, values, filteredValues, tsonValues, json, keys, keyvals, tsonTuples, json; -                                                    return __generator(this, function (_c) { -                                                        switch (_c.label) { -                                                            case 0: -                                                                if (progressCallback) { -                                                                    // Keep ongoing transaction private -                                                                    Dexie__default["default"].ignoreTransaction(function () { return progressCallback(progress); }); -                                                                } -                                                                chunkedCollection = lastKey == null ? -                                                                    table.limit(LIMIT) : -                                                                    table.where(':id').above(lastKey).limit(LIMIT); -                                                                return [4 /*yield*/, chunkedCollection.toArray()]; -                                                            case 1: -                                                                values = _c.sent(); -                                                                if (values.length === 0) -                                                                    return [2 /*return*/, "break"]; -                                                                if (lastKey != null && lastNumRows > 0) { -                                                                    // Not initial chunk. Must add a comma: -                                                                    slices.push(","); -                                                                    if (prettyJson) { -                                                                        slices.push("\n      "); -                                                                    } -                                                                } -                                                                mayHaveMoreRows = values.length === LIMIT; -                                                                if (!inbound) return [3 /*break*/, 4]; -                                                                filteredValues = filter ? -                                                                    values.filter(function (value) { return filter(tableName, value); }) : -                                                                    values; -                                                                tsonValues = filteredValues.map(function (value) { return TSON.encapsulate(value); }); -                                                                if (!TSON.mustFinalize()) return [3 /*break*/, 3]; -                                                                return [4 /*yield*/, Dexie__default["default"].waitFor(TSON.finalize(tsonValues))]; -                                                            case 2: -                                                                _c.sent(); -                                                                _c.label = 3; -                                                            case 3: -                                                                json = JSON.stringify(tsonValues, undefined, prettyJson ? 2 : undefined); -                                                                if (prettyJson) -                                                                    json = json.split('\n').join('\n      '); -                                                                // By generating a blob here, we give web platform the opportunity to store the contents -                                                                // on disk and release RAM. -                                                                slices.push(new Blob([json.substring(1, json.length - 1)])); -                                                                lastNumRows = filteredValues.length; -                                                                lastKey = values.length > 0 ? -                                                                    Dexie__default["default"].getByKeyPath(values[values.length - 1], primKey.keyPath) : -                                                                    null; -                                                                return [3 /*break*/, 8]; -                                                            case 4: return [4 /*yield*/, chunkedCollection.primaryKeys()]; -                                                            case 5: -                                                                keys = _c.sent(); -                                                                keyvals = keys.map(function (key, i) { return [key, values[i]]; }); -                                                                if (filter) -                                                                    keyvals = keyvals.filter(function (_a) { -                                                                        var key = _a[0], value = _a[1]; -                                                                        return filter(tableName, value, key); -                                                                    }); -                                                                tsonTuples = keyvals.map(function (tuple) { return TSON.encapsulate(tuple); }); -                                                                if (!TSON.mustFinalize()) return [3 /*break*/, 7]; -                                                                return [4 /*yield*/, Dexie__default["default"].waitFor(TSON.finalize(tsonTuples))]; -                                                            case 6: -                                                                _c.sent(); -                                                                _c.label = 7; -                                                            case 7: -                                                                json = JSON.stringify(tsonTuples, undefined, prettyJson ? 2 : undefined); -                                                                if (prettyJson) -                                                                    json = json.split('\n').join('\n      '); -                                                                // By generating a blob here, we give web platform the opportunity to store the contents -                                                                // on disk and release RAM. -                                                                slices.push(new Blob([json.substring(1, json.length - 1)])); -                                                                lastNumRows = keyvals.length; -                                                                lastKey = keys.length > 0 ? -                                                                    keys[keys.length - 1] : -                                                                    null; -                                                                _c.label = 8; -                                                            case 8: -                                                                progress.completedRows += values.length; -                                                                return [2 /*return*/]; -                                                        } -                                                    }); -                                                }; -                                                _b.label = 1; -                                            case 1: -                                                if (!mayHaveMoreRows) return [3 /*break*/, 3]; -                                                return [5 /*yield**/, _loop_2()]; -                                            case 2: -                                                state_1 = _b.sent(); -                                                if (state_1 === "break") -                                                    return [3 /*break*/, 3]; -                                                return [3 /*break*/, 1]; -                                            case 3: -                                                slices.push(emptyTableExportJson.substr(posEndRowsArray)); // "]}" -                                                progress.completedTables += 1; -                                                if (progress.completedTables < progress.totalTables) { -                                                    slices.push(","); -                                                } -                                                return [2 /*return*/]; -                                        } -                                    }); -                                }; -                                _i = 0, tables_1 = tables; -                                _a.label = 2; -                            case 2: -                                if (!(_i < tables_1.length)) return [3 /*break*/, 5]; -                                tableName = tables_1[_i].name; -                                return [5 /*yield**/, _loop_1(tableName)]; -                            case 3: -                                _a.sent(); -                                _a.label = 4; -                            case 4: -                                _i++; -                                return [3 /*break*/, 2]; -                            case 5: -                                slices.push(emptyExportJson.substr(posEndDataArray)); -                                progress.done = true; -                                if (progressCallback) { -                                    // Keep ongoing transaction private -                                    Dexie__default["default"].ignoreTransaction(function () { return progressCallback(progress); }); -                                } -                                return [2 /*return*/]; -                        } -                    }); -                }); -            } -            var slices, tables, prettyJson, emptyExport, progressCallback, progress; -            return __generator(this, function (_a) { -                switch (_a.label) { -                    case 0: -                        options = options || {}; -                        slices = []; -                        tables = db.tables.map(function (table) { return ({ -                            name: table.name, -                            schema: getSchemaString(table), -                            rowCount: 0 -                        }); }); -                        prettyJson = options.prettyJson; -                        emptyExport = { -                            formatName: "dexie", -                            formatVersion: 1, -                            data: { -                                databaseName: db.name, -                                databaseVersion: db.verno, -                                tables: tables, -                                data: [] -                            } -                        }; -                        progressCallback = options.progressCallback; -                        progress = { -                            done: false, -                            completedRows: 0, -                            completedTables: 0, -                            totalRows: NaN, -                            totalTables: db.tables.length -                        }; -                        _a.label = 1; -                    case 1: -                        _a.trys.push([1, , 6, 7]); -                        if (!options.noTransaction) return [3 /*break*/, 3]; -                        return [4 /*yield*/, exportAll()]; -                    case 2: -                        _a.sent(); -                        return [3 /*break*/, 5]; -                    case 3: return [4 /*yield*/, db.transaction('r', db.tables, exportAll)]; -                    case 4: -                        _a.sent(); -                        _a.label = 5; -                    case 5: return [3 /*break*/, 7]; -                    case 6: -                        TSON.finalize(); // Free up mem if error has occurred -                        return [7 /*endfinally*/]; -                    case 7: return [2 /*return*/, new Blob(slices, { type: "text/json" })]; -                } -            }); -        }); -    } - -    var VERSION = 1; - -    var fakeStream = {Stream: function(){}}; - -    var clarinet_1 = createCommonjsModule(function (module, exports) { -    (function (clarinet) { - -      // non node-js needs to set clarinet debug on root -      var env =(typeof process === 'object' && process.env) -        ? process.env -        : self; - -      clarinet.parser            = function (opt) { return new CParser(opt);}; -      clarinet.CParser           = CParser; -      clarinet.CStream           = CStream; -      clarinet.createStream      = createStream; -      clarinet.MAX_BUFFER_LENGTH = 10 * 1024 * 1024; -      clarinet.DEBUG             = (env.CDEBUG==='debug'); -      clarinet.INFO              = (env.CDEBUG==='debug' || env.CDEBUG==='info'); -      clarinet.EVENTS            = -        [ "value" -        , "string" -        , "key" -        , "openobject" -        , "closeobject" -        , "openarray" -        , "closearray" -        , "error" -        , "end" -        , "ready" -        ]; - -      var buffers     = { -            textNode: undefined, -            numberNode: "" -        } -        , streamWraps = clarinet.EVENTS.filter(function (ev) { -              return ev !== "error" && ev !== "end"; -            }) -        , S           = 0 -        , Stream -        ; - -      clarinet.STATE = -        { BEGIN                             : S++ -        , VALUE                             : S++ // general stuff -        , OPEN_OBJECT                       : S++ // { -        , CLOSE_OBJECT                      : S++ // } -        , OPEN_ARRAY                        : S++ // [ -        , CLOSE_ARRAY                       : S++ // ] -        , TEXT_ESCAPE                       : S++ // \ stuff -        , STRING                            : S++ // "" -        , BACKSLASH                         : S++ -        , END                               : S++ // No more stack -        , OPEN_KEY                          : S++ // , "a" -        , CLOSE_KEY                         : S++ // : -        , TRUE                              : S++ // r -        , TRUE2                             : S++ // u -        , TRUE3                             : S++ // e -        , FALSE                             : S++ // a -        , FALSE2                            : S++ // l -        , FALSE3                            : S++ // s -        , FALSE4                            : S++ // e -        , NULL                              : S++ // u -        , NULL2                             : S++ // l -        , NULL3                             : S++ // l -        , NUMBER_DECIMAL_POINT              : S++ // . -        , NUMBER_DIGIT                      : S++ // [0-9] -        }; - -      for (var s_ in clarinet.STATE) clarinet.STATE[clarinet.STATE[s_]] = s_; - -      // switcharoo -      S = clarinet.STATE; - -      const Char = { -        tab                 : 0x09,     // \t -        lineFeed            : 0x0A,     // \n -        carriageReturn      : 0x0D,     // \r -        space               : 0x20,     // " " - -        doubleQuote         : 0x22,     // " -        plus                : 0x2B,     // + -        comma               : 0x2C,     // , -        minus               : 0x2D,     // - -        period              : 0x2E,     // . - -        _0                  : 0x30,     // 0 -        _9                  : 0x39,     // 9 - -        colon               : 0x3A,     // : - -        E                   : 0x45,     // E - -        openBracket         : 0x5B,     // [ -        backslash           : 0x5C,     // \ -        closeBracket        : 0x5D,     // ] - -        a                   : 0x61,     // a -        b                   : 0x62,     // b -        e                   : 0x65,     // e  -        f                   : 0x66,     // f -        l                   : 0x6C,     // l -        n                   : 0x6E,     // n -        r                   : 0x72,     // r -        s                   : 0x73,     // s -        t                   : 0x74,     // t -        u                   : 0x75,     // u - -        openBrace           : 0x7B,     // { -        closeBrace          : 0x7D,     // } -      }; - -      if (!Object.create) { -        Object.create = function (o) { -          function f () { this["__proto__"] = o; } -          f.prototype = o; -          return new f; -        }; -      } - -      if (!Object.getPrototypeOf) { -        Object.getPrototypeOf = function (o) { -          return o["__proto__"]; -        }; -      } - -      if (!Object.keys) { -        Object.keys = function (o) { -          var a = []; -          for (var i in o) if (o.hasOwnProperty(i)) a.push(i); -          return a; -        }; -      } - -      function checkBufferLength (parser) { -        var maxAllowed = Math.max(clarinet.MAX_BUFFER_LENGTH, 10) -          , maxActual = 0 -          ; -        for (var buffer in buffers) { -          var len = parser[buffer] === undefined ? 0 : parser[buffer].length; -          if (len > maxAllowed) { -            switch (buffer) { -              case "text": -                closeText(parser); -              break; - -              default: -                error(parser, "Max buffer length exceeded: "+ buffer); -            } -          } -          maxActual = Math.max(maxActual, len); -        } -        parser.bufferCheckPosition = (clarinet.MAX_BUFFER_LENGTH - maxActual) -                                   + parser.position; -      } - -      function clearBuffers (parser) { -        for (var buffer in buffers) { -          parser[buffer] = buffers[buffer]; -        } -      } - -      var stringTokenPattern = /[\\"\n]/g; - -      function CParser (opt) { -        if (!(this instanceof CParser)) return new CParser (opt); - -        var parser = this; -        clearBuffers(parser); -        parser.bufferCheckPosition = clarinet.MAX_BUFFER_LENGTH; -        parser.q        = parser.c = parser.p = ""; -        parser.opt      = opt || {}; -        parser.closed   = parser.closedRoot = parser.sawRoot = false; -        parser.tag      = parser.error = null; -        parser.state    = S.BEGIN; -        parser.stack    = new Array(); -        // mostly just for error reporting -        parser.position = parser.column = 0; -        parser.line     = 1; -        parser.slashed  = false; -        parser.unicodeI = 0; -        parser.unicodeS = null; -        parser.depth    = 0; -        emit(parser, "onready"); -      } - -      CParser.prototype = -        { end    : function () { end(this); } -        , write  : write -        , resume : function () { this.error = null; return this; } -        , close  : function () { return this.write(null); } -        }; - -      try        { Stream = fakeStream.Stream; } -      catch (ex) { Stream = function () {}; } - -      function createStream (opt) { return new CStream(opt); } - -      function CStream (opt) { -        if (!(this instanceof CStream)) return new CStream(opt); - -        this._parser = new CParser(opt); -        this.writable = true; -        this.readable = true; - -        //var Buffer = this.Buffer || function Buffer () {}; // if we don't have Buffers, fake it so we can do `var instanceof Buffer` and not throw an error -        this.bytes_remaining = 0; // number of bytes remaining in multi byte utf8 char to read after split boundary -        this.bytes_in_sequence = 0; // bytes in multi byte utf8 char to read -        this.temp_buffs = { "2": new Buffer(2), "3": new Buffer(3), "4": new Buffer(4) }; // for rebuilding chars split before boundary is reached -        this.string = ''; - -        var me = this; -        Stream.apply(me); - -        this._parser.onend = function () { me.emit("end"); }; -        this._parser.onerror = function (er) { -          me.emit("error", er); -          me._parser.error = null; -        }; - -        streamWraps.forEach(function (ev) { -          Object.defineProperty(me, "on" + ev, -            { get          : function () { return me._parser["on" + ev]; } -            , set          : function (h) { -                if (!h) { -                  me.removeAllListeners(ev); -                  me._parser["on"+ev] = h; -                  return h; -                } -                me.on(ev, h); -              } -            , enumerable   : true -            , configurable : false -            }); -        }); -      } - -      CStream.prototype = Object.create(Stream.prototype, -        { constructor: { value: CStream } }); - -      CStream.prototype.write = function (data) { -        data = new Buffer(data); -        for (var i = 0; i < data.length; i++) { -          var n = data[i]; - -          // check for carry over of a multi byte char split between data chunks -          // & fill temp buffer it with start of this data chunk up to the boundary limit set in the last iteration -          if (this.bytes_remaining > 0) { -            for (var j = 0; j < this.bytes_remaining; j++) { -              this.temp_buffs[this.bytes_in_sequence][this.bytes_in_sequence - this.bytes_remaining + j] = data[j]; -            } -            this.string = this.temp_buffs[this.bytes_in_sequence].toString(); -            this.bytes_in_sequence = this.bytes_remaining = 0; - -            // move iterator forward by number of byte read during sequencing -            i = i + j - 1; - -            // pass data to parser and move forward to parse rest of data -            this._parser.write(this.string); -            this.emit("data", this.string); -            continue; -          } - -          // if no remainder bytes carried over, parse multi byte (>=128) chars one at a time -          if (this.bytes_remaining === 0 && n >= 128) { -            if ((n >= 194) && (n <= 223)) this.bytes_in_sequence = 2; -            if ((n >= 224) && (n <= 239)) this.bytes_in_sequence = 3; -            if ((n >= 240) && (n <= 244)) this.bytes_in_sequence = 4; -            if ((this.bytes_in_sequence + i) > data.length) { // if bytes needed to complete char fall outside data length, we have a boundary split - -              for (var k = 0; k <= (data.length - 1 - i); k++) { -                this.temp_buffs[this.bytes_in_sequence][k] = data[i + k]; // fill temp data of correct size with bytes available in this chunk -              } -              this.bytes_remaining = (i + this.bytes_in_sequence) - data.length; - -              // immediately return as we need another chunk to sequence the character -              return true; -            } else { -              this.string = data.slice(i, (i + this.bytes_in_sequence)).toString(); -              i = i + this.bytes_in_sequence - 1; - -              this._parser.write(this.string); -              this.emit("data", this.string); -              continue; -            } -          } - -          // is there a range of characters that are immediately parsable? -          for (var p = i; p < data.length; p++) { -            if (data[p] >= 128) break; -          } -          this.string = data.slice(i, p).toString(); -          this._parser.write(this.string); -          this.emit("data", this.string); -          i = p - 1; - -          // handle any remaining characters using multibyte logic -          continue; -        } -      }; - -      CStream.prototype.end = function (chunk) { -        if (chunk && chunk.length) this._parser.write(chunk.toString()); -        this._parser.end(); -        return true; -      }; - -      CStream.prototype.on = function (ev, handler) { -        var me = this; -        if (!me._parser["on"+ev] && streamWraps.indexOf(ev) !== -1) { -          me._parser["on"+ev] = function () { -            var args = arguments.length === 1 ? [arguments[0]] -                     : Array.apply(null, arguments); -            args.splice(0, 0, ev); -            me.emit.apply(me, args); -          }; -        } -        return Stream.prototype.on.call(me, ev, handler); -      }; - -      CStream.prototype.destroy = function () { -        clearBuffers(this._parser); -        this.emit("close"); -      }; - -      function emit(parser, event, data) { -        if(clarinet.INFO) console.log('-- emit', event, data); -        if (parser[event]) parser[event](data); -      } - -      function emitNode(parser, event, data) { -        closeValue(parser); -        emit(parser, event, data); -      } - -      function closeValue(parser, event) { -        parser.textNode = textopts(parser.opt, parser.textNode); -        if (parser.textNode !== undefined) { -          emit(parser, (event ? event : "onvalue"), parser.textNode); -        } -        parser.textNode = undefined; -      } - -      function closeNumber(parser) { -        if (parser.numberNode) -          emit(parser, "onvalue", parseFloat(parser.numberNode)); -        parser.numberNode = ""; -      } - -      function textopts (opt, text) { -        if (text === undefined) { -          return text; -        } -        if (opt.trim) text = text.trim(); -        if (opt.normalize) text = text.replace(/\s+/g, " "); -        return text; -      } - -      function error (parser, er) { -        closeValue(parser); -        er += "\nLine: "+parser.line+ -              "\nColumn: "+parser.column+ -              "\nChar: "+parser.c; -        er = new Error(er); -        parser.error = er; -        emit(parser, "onerror", er); -        return parser; -      } - -      function end(parser) { -        if (parser.state !== S.VALUE || parser.depth !== 0) -          error(parser, "Unexpected end"); - -        closeValue(parser); -        parser.c      = ""; -        parser.closed = true; -        emit(parser, "onend"); -        CParser.call(parser, parser.opt); -        return parser; -      } - -      function isWhitespace(c) { -        return c === Char.carriageReturn || c === Char.lineFeed || c === Char.space || c === Char.tab; -      } - -      function write (chunk) { -        var parser = this; -        if (this.error) throw this.error; -        if (parser.closed) return error(parser, -          "Cannot write after close. Assign an onready handler."); -        if (chunk === null) return end(parser); -        var i = 0, c = chunk.charCodeAt(0), p = parser.p; -        if (clarinet.DEBUG) console.log('write -> [' + chunk + ']'); -        while (c) { -          p = c; -          parser.c = c = chunk.charCodeAt(i++); -          // if chunk doesnt have next, like streaming char by char -          // this way we need to check if previous is really previous -          // if not we need to reset to what the parser says is the previous -          // from buffer -          if(p !== c ) parser.p = p; -          else p = parser.p; - -          if(!c) break; - -          if (clarinet.DEBUG) console.log(i,c,clarinet.STATE[parser.state]); -          parser.position ++; -          if (c === Char.lineFeed) { -            parser.line ++; -            parser.column = 0; -          } else parser.column ++; -          switch (parser.state) { - -            case S.BEGIN: -              if (c === Char.openBrace) parser.state = S.OPEN_OBJECT; -              else if (c === Char.openBracket) parser.state = S.OPEN_ARRAY; -              else if (!isWhitespace(c)) -                error(parser, "Non-whitespace before {[."); -            continue; - -            case S.OPEN_KEY: -            case S.OPEN_OBJECT: -              if (isWhitespace(c)) continue; -              if(parser.state === S.OPEN_KEY) parser.stack.push(S.CLOSE_KEY); -              else { -                if(c === Char.closeBrace) { -                  emit(parser, 'onopenobject'); -                  this.depth++; -                  emit(parser, 'oncloseobject'); -                  this.depth--; -                  parser.state = parser.stack.pop() || S.VALUE; -                  continue; -                } else  parser.stack.push(S.CLOSE_OBJECT); -              } -              if(c === Char.doubleQuote) parser.state = S.STRING; -              else error(parser, "Malformed object key should start with \""); -            continue; - -            case S.CLOSE_KEY: -            case S.CLOSE_OBJECT: -              if (isWhitespace(c)) continue; -              (parser.state === S.CLOSE_KEY) ? 'key' : 'object'; -              if(c === Char.colon) { -                if(parser.state === S.CLOSE_OBJECT) { -                  parser.stack.push(S.CLOSE_OBJECT); -                  closeValue(parser, 'onopenobject'); -                   this.depth++; -                } else closeValue(parser, 'onkey'); -                parser.state  = S.VALUE; -              } else if (c === Char.closeBrace) { -                emitNode(parser, 'oncloseobject'); -                this.depth--; -                parser.state = parser.stack.pop() || S.VALUE; -              } else if(c === Char.comma) { -                if(parser.state === S.CLOSE_OBJECT) -                  parser.stack.push(S.CLOSE_OBJECT); -                closeValue(parser); -                parser.state  = S.OPEN_KEY; -              } else error(parser, 'Bad object'); -            continue; - -            case S.OPEN_ARRAY: // after an array there always a value -            case S.VALUE: -              if (isWhitespace(c)) continue; -              if(parser.state===S.OPEN_ARRAY) { -                emit(parser, 'onopenarray'); -                this.depth++; -                parser.state = S.VALUE; -                if(c === Char.closeBracket) { -                  emit(parser, 'onclosearray'); -                  this.depth--; -                  parser.state = parser.stack.pop() || S.VALUE; -                  continue; -                } else { -                  parser.stack.push(S.CLOSE_ARRAY); -                } -              } -                   if(c === Char.doubleQuote) parser.state = S.STRING; -              else if(c === Char.openBrace) parser.state = S.OPEN_OBJECT; -              else if(c === Char.openBracket) parser.state = S.OPEN_ARRAY; -              else if(c === Char.t) parser.state = S.TRUE; -              else if(c === Char.f) parser.state = S.FALSE; -              else if(c === Char.n) parser.state = S.NULL; -              else if(c === Char.minus) { // keep and continue -                parser.numberNode += "-"; -              } else if(Char._0 <= c && c <= Char._9) { -                parser.numberNode += String.fromCharCode(c); -                parser.state = S.NUMBER_DIGIT; -              } else               error(parser, "Bad value"); -            continue; - -            case S.CLOSE_ARRAY: -              if(c === Char.comma) { -                parser.stack.push(S.CLOSE_ARRAY); -                closeValue(parser, 'onvalue'); -                parser.state  = S.VALUE; -              } else if (c === Char.closeBracket) { -                emitNode(parser, 'onclosearray'); -                this.depth--; -                parser.state = parser.stack.pop() || S.VALUE; -              } else if (isWhitespace(c)) -                  continue; -              else error(parser, 'Bad array'); -            continue; - -            case S.STRING: -              if (parser.textNode === undefined) { -                parser.textNode = ""; -              } - -              // thanks thejh, this is an about 50% performance improvement. -              var starti              = i-1 -                , slashed = parser.slashed -                , unicodeI = parser.unicodeI -                ; -              STRING_BIGLOOP: while (true) { -                if (clarinet.DEBUG) -                  console.log(i,c,clarinet.STATE[parser.state] -                             ,slashed); -                // zero means "no unicode active". 1-4 mean "parse some more". end after 4. -                while (unicodeI > 0) { -                  parser.unicodeS += String.fromCharCode(c); -                  c = chunk.charCodeAt(i++); -                  parser.position++; -                  if (unicodeI === 4) { -                    // TODO this might be slow? well, probably not used too often anyway -                    parser.textNode += String.fromCharCode(parseInt(parser.unicodeS, 16)); -                    unicodeI = 0; -                    starti = i-1; -                  } else { -                    unicodeI++; -                  } -                  // we can just break here: no stuff we skipped that still has to be sliced out or so -                  if (!c) break STRING_BIGLOOP; -                } -                if (c === Char.doubleQuote && !slashed) { -                  parser.state = parser.stack.pop() || S.VALUE; -                  parser.textNode += chunk.substring(starti, i-1); -                  parser.position += i - 1 - starti; -                  break; -                } -                if (c === Char.backslash && !slashed) { -                  slashed = true; -                  parser.textNode += chunk.substring(starti, i-1); -                  parser.position += i - 1 - starti; -                  c = chunk.charCodeAt(i++); -                  parser.position++; -                  if (!c) break; -                } -                if (slashed) { -                  slashed = false; -                       if (c === Char.n) { parser.textNode += '\n'; } -                  else if (c === Char.r) { parser.textNode += '\r'; } -                  else if (c === Char.t) { parser.textNode += '\t'; } -                  else if (c === Char.f) { parser.textNode += '\f'; } -                  else if (c === Char.b) { parser.textNode += '\b'; } -                  else if (c === Char.u) { -                    // \uxxxx. meh! -                    unicodeI = 1; -                    parser.unicodeS = ''; -                  } else { -                    parser.textNode += String.fromCharCode(c); -                  } -                  c = chunk.charCodeAt(i++); -                  parser.position++; -                  starti = i-1; -                  if (!c) break; -                  else continue; -                } - -                stringTokenPattern.lastIndex = i; -                var reResult = stringTokenPattern.exec(chunk); -                if (reResult === null) { -                  i = chunk.length+1; -                  parser.textNode += chunk.substring(starti, i-1); -                  parser.position += i - 1 - starti; -                  break; -                } -                i = reResult.index+1; -                c = chunk.charCodeAt(reResult.index); -                if (!c) { -                  parser.textNode += chunk.substring(starti, i-1); -                  parser.position += i - 1 - starti; -                  break; -                } -              } -              parser.slashed = slashed; -              parser.unicodeI = unicodeI; -            continue; - -            case S.TRUE: -              if (c === Char.r) parser.state = S.TRUE2; -              else error(parser, 'Invalid true started with t'+ c); -            continue; - -            case S.TRUE2: -              if (c === Char.u) parser.state = S.TRUE3; -              else error(parser, 'Invalid true started with tr'+ c); -            continue; - -            case S.TRUE3: -              if(c === Char.e) { -                emit(parser, "onvalue", true); -                parser.state = parser.stack.pop() || S.VALUE; -              } else error(parser, 'Invalid true started with tru'+ c); -            continue; - -            case S.FALSE: -              if (c === Char.a) parser.state = S.FALSE2; -              else error(parser, 'Invalid false started with f'+ c); -            continue; - -            case S.FALSE2: -              if (c === Char.l) parser.state = S.FALSE3; -              else error(parser, 'Invalid false started with fa'+ c); -            continue; - -            case S.FALSE3: -              if (c === Char.s) parser.state = S.FALSE4; -              else error(parser, 'Invalid false started with fal'+ c); -            continue; - -            case S.FALSE4: -              if (c === Char.e) { -                emit(parser, "onvalue", false); -                parser.state = parser.stack.pop() || S.VALUE; -              } else error(parser, 'Invalid false started with fals'+ c); -            continue; - -            case S.NULL: -              if (c === Char.u) parser.state = S.NULL2; -              else error(parser, 'Invalid null started with n'+ c); -            continue; - -            case S.NULL2: -              if (c === Char.l) parser.state = S.NULL3; -              else error(parser, 'Invalid null started with nu'+ c); -            continue; - -            case S.NULL3: -              if(c === Char.l) { -                emit(parser, "onvalue", null); -                parser.state = parser.stack.pop() || S.VALUE; -              } else error(parser, 'Invalid null started with nul'+ c); -            continue; - -            case S.NUMBER_DECIMAL_POINT: -              if(c === Char.period) { -                parser.numberNode += "."; -                parser.state       = S.NUMBER_DIGIT; -              } else error(parser, 'Leading zero not followed by .'); -            continue; - -            case S.NUMBER_DIGIT: -              if(Char._0 <= c && c <= Char._9) parser.numberNode += String.fromCharCode(c); -              else if (c === Char.period) { -                if(parser.numberNode.indexOf('.')!==-1) -                  error(parser, 'Invalid number has two dots'); -                parser.numberNode += "."; -              } else if (c === Char.e || c === Char.E) { -                if(parser.numberNode.indexOf('e')!==-1 || -                   parser.numberNode.indexOf('E')!==-1 ) -                   error(parser, 'Invalid number has two exponential'); -                parser.numberNode += "e"; -              } else if (c === Char.plus || c === Char.minus) { -                if(!(p === Char.e || p === Char.E)) -                  error(parser, 'Invalid symbol in number'); -                parser.numberNode += String.fromCharCode(c); -              } else { -                closeNumber(parser); -                i--; // go back one -                parser.state = parser.stack.pop() || S.VALUE; -              } -            continue; - -            default: -              error(parser, "Unknown state: " + parser.state); -          } -        } -        if (parser.position >= parser.bufferCheckPosition) -          checkBufferLength(parser); -        return parser; -      } - -    })(exports); -    }); - -    function JsonStream(blob) { -        var pos = 0; -        var parser = JsonParser(true); -        var rv = { -            pullAsync: function (numBytes) { -                return __awaiter(this, void 0, void 0, function () { -                    var slize, jsonPart, result; -                    return __generator(this, function (_a) { -                        switch (_a.label) { -                            case 0: -                                slize = blob.slice(pos, pos + numBytes); -                                pos += numBytes; -                                return [4 /*yield*/, readBlobAsync(slize, 'text')]; -                            case 1: -                                jsonPart = _a.sent(); -                                result = parser.write(jsonPart); -                                rv.result = result || {}; -                                return [2 /*return*/, result]; -                        } -                    }); -                }); -            }, -            pullSync: function (numBytes) { -                var slize = blob.slice(pos, pos + numBytes); -                pos += numBytes; -                var jsonPart = readBlobSync(slize, 'text'); -                var result = parser.write(jsonPart); -                rv.result = result || {}; -                return result; -            }, -            done: function () { -                return parser.done(); -            }, -            eof: function () { -                return pos >= blob.size; -            }, -            result: {} -        }; -        return rv; -    } -    function JsonParser(allowPartial) { -        var parser = clarinet_1.parser(); -        var level = 0; -        var result; -        var stack = []; -        var obj; -        var key; -        var done = false; -        var array = false; -        parser.onopenobject = function (newKey) { -            var newObj = {}; -            newObj.incomplete = true; -            if (!result) -                result = newObj; -            if (obj) { -                stack.push([key, obj, array]); -                if (allowPartial) { -                    if (array) { -                        obj.push(newObj); -                    } -                    else { -                        obj[key] = newObj; -                    } -                } -            } -            obj = newObj; -            key = newKey; -            array = false; -            ++level; -        }; -        parser.onkey = function (newKey) { return key = newKey; }; -        parser.onvalue = function (value) { return array ? obj.push(value) : obj[key] = value; }; -        parser.oncloseobject = function () { -            var _a; -            delete obj.incomplete; -            key = null; -            if (--level === 0) { -                done = true; -            } -            else { -                var completedObj = obj; -                _a = stack.pop(), key = _a[0], obj = _a[1], array = _a[2]; -                if (!allowPartial) { -                    if (array) { -                        obj.push(completedObj); -                    } -                    else { -                        obj[key] = completedObj; -                    } -                } -            } -        }; -        parser.onopenarray = function () { -            var newObj = []; -            newObj.incomplete = true; -            if (!result) -                result = newObj; -            if (obj) { -                stack.push([key, obj, array]); -                if (allowPartial) { -                    if (array) { -                        obj.push(newObj); -                    } -                    else { -                        obj[key] = newObj; -                    } -                } -            } -            obj = newObj; -            array = true; -            key = null; -            ++level; -        }; -        parser.onclosearray = function () { -            var _a; -            delete obj.incomplete; -            key = null; -            if (--level === 0) { -                done = true; -            } -            else { -                var completedObj = obj; -                _a = stack.pop(), key = _a[0], obj = _a[1], array = _a[2]; -                if (!allowPartial) { -                    if (array) { -                        obj.push(completedObj); -                    } -                    else { -                        obj[key] = completedObj; -                    } -                } -            } -        }; -        return { -            write: function (jsonPart) { -                parser.write(jsonPart); -                return result; -            }, -            done: function () { -                return done; -            } -        }; -    } - -    var DEFAULT_KILOBYTES_PER_CHUNK = 1024; -    function importDB(exportedData, options) { -        return __awaiter(this, void 0, void 0, function () { -            var CHUNK_SIZE, stream, dbExport, db; -            return __generator(this, function (_a) { -                switch (_a.label) { -                    case 0: -                        options = options || {}; // All booleans defaults to false. -                        CHUNK_SIZE = options.chunkSizeBytes || (DEFAULT_KILOBYTES_PER_CHUNK * 1024); -                        return [4 /*yield*/, loadUntilWeGotEnoughData(exportedData, CHUNK_SIZE)]; -                    case 1: -                        stream = _a.sent(); -                        dbExport = stream.result.data; -                        db = new Dexie__default["default"](dbExport.databaseName); -                        db.version(dbExport.databaseVersion).stores(extractDbSchema(dbExport)); -                        return [4 /*yield*/, importInto(db, stream, options)]; -                    case 2: -                        _a.sent(); -                        return [2 /*return*/, db]; -                } -            }); -        }); -    } -    function peakImportFile(exportedData) { -        return __awaiter(this, void 0, void 0, function () { -            var stream; -            return __generator(this, function (_a) { -                switch (_a.label) { -                    case 0: -                        stream = JsonStream(exportedData); -                        _a.label = 1; -                    case 1: -                        if (!!stream.eof()) return [3 /*break*/, 3]; -                        return [4 /*yield*/, stream.pullAsync(5 * 1024)]; -                    case 2: -                        _a.sent(); // 5 k is normally enough for the headers. If not, it will just do another go. -                        if (stream.result.data && stream.result.data.data) { -                            // @ts-ignore - TS won't allow us to delete a required property - but we are going to cast it. -                            delete stream.result.data.data; // Don't return half-baked data array. -                            return [3 /*break*/, 3]; -                        } -                        return [3 /*break*/, 1]; -                    case 3: return [2 /*return*/, stream.result]; -                } -            }); -        }); -    } -    function importInto(db, exportedData, options) { -        return __awaiter(this, void 0, void 0, function () { -            function importAll() { -                return __awaiter(this, void 0, void 0, function () { -                    var _loop_1, _i, _a, tableExport, state_1; -                    return __generator(this, function (_b) { -                        switch (_b.label) { -                            case 0: -                                _loop_1 = function (tableExport) { -                                    var tableName, table, tableSchemaStr, sourceRows, rows, i, obj, filter, filteredRows, _c, keys, values; -                                    return __generator(this, function (_d) { -                                        switch (_d.label) { -                                            case 0: -                                                if (!tableExport.rows) -                                                    return [2 /*return*/, "break"]; // Need to pull more! -                                                if (!tableExport.rows.incomplete && tableExport.rows.length === 0) -                                                    return [2 /*return*/, "continue"]; -                                                if (progressCallback) { -                                                    // Keep ongoing transaction private -                                                    Dexie__default["default"].ignoreTransaction(function () { return progressCallback(progress); }); -                                                } -                                                tableName = tableExport.tableName; -                                                table = db.table(tableName); -                                                tableSchemaStr = dbExport.tables.filter(function (t) { return t.name === tableName; })[0].schema; -                                                if (!table) { -                                                    if (!options.acceptMissingTables) -                                                        throw new Error("Exported table ".concat(tableExport.tableName, " is missing in installed database")); -                                                    else -                                                        return [2 /*return*/, "continue"]; -                                                } -                                                if (!options.acceptChangedPrimaryKey && -                                                    tableSchemaStr.split(',')[0] != table.schema.primKey.src) { -                                                    throw new Error("Primary key differs for table ".concat(tableExport.tableName, ". ")); -                                                } -                                                sourceRows = tableExport.rows; -                                                rows = []; -                                                for (i = 0; i < sourceRows.length; i++) { -                                                    obj = sourceRows[i]; -                                                    if (!obj.incomplete) { -                                                        rows.push(TSON.revive(obj)); -                                                    } -                                                    else { -                                                        break; -                                                    } -                                                } -                                                filter = options.filter; -                                                filteredRows = filter ? -                                                    tableExport.inbound ? -                                                        rows.filter(function (value) { return filter(tableName, value); }) : -                                                        rows.filter(function (_a) { -                                                            var key = _a[0], value = _a[1]; -                                                            return filter(tableName, value, key); -                                                        }) : -                                                    rows; -                                                _c = tableExport.inbound ? -                                                    [undefined, filteredRows] : -                                                    [filteredRows.map(function (row) { return row[0]; }), rows.map(function (row) { return row[1]; })], keys = _c[0], values = _c[1]; -                                                if (!options.overwriteValues) return [3 /*break*/, 2]; -                                                return [4 /*yield*/, table.bulkPut(values, keys)]; -                                            case 1: -                                                _d.sent(); -                                                return [3 /*break*/, 4]; -                                            case 2: return [4 /*yield*/, table.bulkAdd(values, keys)]; -                                            case 3: -                                                _d.sent(); -                                                _d.label = 4; -                                            case 4: -                                                progress.completedRows += rows.length; -                                                if (!rows.incomplete) { -                                                    progress.completedTables += 1; -                                                } -                                                sourceRows.splice(0, rows.length); // Free up RAM, keep existing array instance. -                                                return [2 /*return*/]; -                                        } -                                    }); -                                }; -                                _i = 0, _a = dbExport.data; -                                _b.label = 1; -                            case 1: -                                if (!(_i < _a.length)) return [3 /*break*/, 4]; -                                tableExport = _a[_i]; -                                return [5 /*yield**/, _loop_1(tableExport)]; -                            case 2: -                                state_1 = _b.sent(); -                                if (state_1 === "break") -                                    return [3 /*break*/, 4]; -                                _b.label = 3; -                            case 3: -                                _i++; -                                return [3 /*break*/, 1]; -                            case 4: -                                // Avoid unnescessary loops in "for (const tableExport of dbExport.data)"  -                                while (dbExport.data.length > 0 && dbExport.data[0].rows && !dbExport.data[0].rows.incomplete) { -                                    // We've already imported all rows from the first table. Delete its occurrence -                                    dbExport.data.splice(0, 1); -                                } -                                if (!(!jsonStream.done() && !jsonStream.eof())) return [3 /*break*/, 8]; -                                if (!readBlobsSynchronously) return [3 /*break*/, 5]; -                                // If we can pull from blob synchronically, we don't have to -                                // keep transaction alive using Dexie.waitFor(). -                                // This will only be possible in workers. -                                jsonStream.pullSync(CHUNK_SIZE); -                                return [3 /*break*/, 7]; -                            case 5: return [4 /*yield*/, Dexie__default["default"].waitFor(jsonStream.pullAsync(CHUNK_SIZE))]; -                            case 6: -                                _b.sent(); -                                _b.label = 7; -                            case 7: return [3 /*break*/, 9]; -                            case 8: return [3 /*break*/, 10]; -                            case 9: -                                return [3 /*break*/, 0]; -                            case 10: return [2 /*return*/]; -                        } -                    }); -                }); -            } -            var CHUNK_SIZE, jsonStream, dbExportFile, readBlobsSynchronously, dbExport, progressCallback, progress, _i, _a, table; -            return __generator(this, function (_b) { -                switch (_b.label) { -                    case 0: -                        options = options || {}; // All booleans defaults to false. -                        CHUNK_SIZE = options.chunkSizeBytes || (DEFAULT_KILOBYTES_PER_CHUNK * 1024); -                        return [4 /*yield*/, loadUntilWeGotEnoughData(exportedData, CHUNK_SIZE)]; -                    case 1: -                        jsonStream = _b.sent(); -                        dbExportFile = jsonStream.result; -                        readBlobsSynchronously = 'FileReaderSync' in self; -                        dbExport = dbExportFile.data; -                        if (!options.acceptNameDiff && db.name !== dbExport.databaseName) -                            throw new Error("Name differs. Current database name is ".concat(db.name, " but export is ").concat(dbExport.databaseName)); -                        if (!options.acceptVersionDiff && db.verno !== dbExport.databaseVersion) { -                            // Possible feature: Call upgraders in some isolated way if this happens... ? -                            throw new Error("Database version differs. Current database is in version ".concat(db.verno, " but export is ").concat(dbExport.databaseVersion)); -                        } -                        progressCallback = options.progressCallback; -                        progress = { -                            done: false, -                            completedRows: 0, -                            completedTables: 0, -                            totalRows: dbExport.tables.reduce(function (p, c) { return p + c.rowCount; }, 0), -                            totalTables: dbExport.tables.length -                        }; -                        if (progressCallback) { -                            // Keep ongoing transaction private -                            Dexie__default["default"].ignoreTransaction(function () { return progressCallback(progress); }); -                        } -                        if (!options.clearTablesBeforeImport) return [3 /*break*/, 5]; -                        _i = 0, _a = db.tables; -                        _b.label = 2; -                    case 2: -                        if (!(_i < _a.length)) return [3 /*break*/, 5]; -                        table = _a[_i]; -                        return [4 /*yield*/, table.clear()]; -                    case 3: -                        _b.sent(); -                        _b.label = 4; -                    case 4: -                        _i++; -                        return [3 /*break*/, 2]; -                    case 5: -                        if (!options.noTransaction) return [3 /*break*/, 7]; -                        return [4 /*yield*/, importAll()]; -                    case 6: -                        _b.sent(); -                        return [3 /*break*/, 9]; -                    case 7: return [4 /*yield*/, db.transaction('rw', db.tables, importAll)]; -                    case 8: -                        _b.sent(); -                        _b.label = 9; -                    case 9: -                        progress.done = true; -                        if (progressCallback) { -                            // Keep ongoing transaction private -                            Dexie__default["default"].ignoreTransaction(function () { return progressCallback(progress); }); -                        } -                        return [2 /*return*/]; -                } -            }); -        }); -    } -    function loadUntilWeGotEnoughData(exportedData, CHUNK_SIZE) { -        return __awaiter(this, void 0, void 0, function () { -            var stream, dbExportFile; -            return __generator(this, function (_a) { -                switch (_a.label) { -                    case 0: -                        stream = ('slice' in exportedData ? -                            JsonStream(exportedData) : -                            exportedData); -                        _a.label = 1; -                    case 1: -                        if (!!stream.eof()) return [3 /*break*/, 3]; -                        return [4 /*yield*/, stream.pullAsync(CHUNK_SIZE)]; -                    case 2: -                        _a.sent(); -                        if (stream.result.data && stream.result.data.data) -                            return [3 /*break*/, 3]; -                        return [3 /*break*/, 1]; -                    case 3: -                        dbExportFile = stream.result; -                        if (!dbExportFile || dbExportFile.formatName != "dexie") -                            throw new Error("Given file is not a dexie export"); -                        if (dbExportFile.formatVersion > VERSION) { -                            throw new Error("Format version ".concat(dbExportFile.formatVersion, " not supported")); -                        } -                        if (!dbExportFile.data) { -                            throw new Error("No data in export file"); -                        } -                        if (!dbExportFile.data.databaseName) { -                            throw new Error("Missing databaseName in export file"); -                        } -                        if (!dbExportFile.data.databaseVersion) { -                            throw new Error("Missing databaseVersion in export file"); -                        } -                        if (!dbExportFile.data.tables) { -                            throw new Error("Missing tables in export file"); -                        } -                        return [2 /*return*/, stream]; -                } -            }); -        }); -    } - -    // -    // Extend Dexie interface (runtime wise) -    // -    Dexie__default["default"].prototype.export = function (options) { -        return exportDB(this, options); -    }; -    Dexie__default["default"].prototype.import = function (blob, options) { -        return importInto(this, blob, options); -    }; -    Dexie__default["default"].import = function (blob, options) { return importDB(blob, options); }; -    var dexieExportImport = (function () { -        throw new Error("This addon extends Dexie.prototype globally and does not have be included in Dexie constructor's addons options."); -    }); - -    exports["default"] = dexieExportImport; -    exports.exportDB = exportDB; -    exports.importDB = importDB; -    exports.importInto = importInto; -    exports.peakImportFile = peakImportFile; - -    Object.defineProperty(exports, '__esModule', { value: true }); - -})); -//# sourceMappingURL=dexie-export-import.js.map diff --git a/ext/lib/dexie-export-import.js.map b/ext/lib/dexie-export-import.js.map deleted file mode 100644 index f3684f32..00000000 --- a/ext/lib/dexie-export-import.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"dexie-export-import.js","sources":["../../../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.es6.js","../src/helpers.ts","../../../node_modules/.pnpm/typeson@5.18.2_iz6lblx3cjm7v34nvvsjg2rl44/node_modules/typeson/dist/typeson.js","../../../node_modules/.pnpm/typeson-registry@1.0.0-alpha.39/node_modules/typeson-registry/node_modules/typeson/dist/typeson-esm.js","../../../node_modules/.pnpm/typeson-registry@1.0.0-alpha.39/node_modules/typeson-registry/node_modules/base64-arraybuffer-es6/dist/base64-arraybuffer-es.js","../../../node_modules/.pnpm/typeson-registry@1.0.0-alpha.39/node_modules/typeson-registry/types/user-object.js","../../../node_modules/.pnpm/typeson-registry@1.0.0-alpha.39/node_modules/typeson-registry/presets/array-nonindex-keys.js","../../../node_modules/.pnpm/typeson-registry@1.0.0-alpha.39/node_modules/typeson-registry/types/undef.js","../../../node_modules/.pnpm/typeson-registry@1.0.0-alpha.39/node_modules/typeson-registry/types/primitive-objects.js","../../../node_modules/.pnpm/typeson-registry@1.0.0-alpha.39/node_modules/typeson-registry/presets/special-numbers.js","../../../node_modules/.pnpm/typeson-registry@1.0.0-alpha.39/node_modules/typeson-registry/types/nan.js","../../../node_modules/.pnpm/typeson-registry@1.0.0-alpha.39/node_modules/typeson-registry/types/infinity.js","../../../node_modules/.pnpm/typeson-registry@1.0.0-alpha.39/node_modules/typeson-registry/types/negative-infinity.js","../../../node_modules/.pnpm/typeson-registry@1.0.0-alpha.39/node_modules/typeson-registry/types/date.js","../../../node_modules/.pnpm/typeson-registry@1.0.0-alpha.39/node_modules/typeson-registry/types/regexp.js","../../../node_modules/.pnpm/typeson-registry@1.0.0-alpha.39/node_modules/typeson-registry/types/map.js","../../../node_modules/.pnpm/typeson-registry@1.0.0-alpha.39/node_modules/typeson-registry/types/set.js","../../../node_modules/.pnpm/typeson-registry@1.0.0-alpha.39/node_modules/typeson-registry/types/arraybuffer.js","../../../node_modules/.pnpm/typeson-registry@1.0.0-alpha.39/node_modules/typeson-registry/types/typed-arrays.js","../../../node_modules/.pnpm/typeson-registry@1.0.0-alpha.39/node_modules/typeson-registry/types/dataview.js","../../../node_modules/.pnpm/typeson-registry@1.0.0-alpha.39/node_modules/typeson-registry/types/intl-types.js","../../../node_modules/.pnpm/typeson-registry@1.0.0-alpha.39/node_modules/typeson-registry/utils/stringArrayBuffer.js","../../../node_modules/.pnpm/typeson-registry@1.0.0-alpha.39/node_modules/typeson-registry/types/file.js","../../../node_modules/.pnpm/typeson-registry@1.0.0-alpha.39/node_modules/typeson-registry/types/bigint.js","../../../node_modules/.pnpm/typeson-registry@1.0.0-alpha.39/node_modules/typeson-registry/types/bigint-object.js","../../../node_modules/.pnpm/typeson-registry@1.0.0-alpha.39/node_modules/typeson-registry/types/cryptokey.js","../../../node_modules/.pnpm/typeson-registry@1.0.0-alpha.39/node_modules/typeson-registry/presets/structured-cloning.js","../../../node_modules/.pnpm/typeson-registry@1.0.0-alpha.39/node_modules/typeson-registry/types/imagedata.js","../../../node_modules/.pnpm/typeson-registry@1.0.0-alpha.39/node_modules/typeson-registry/types/imagebitmap.js","../../../node_modules/.pnpm/typeson-registry@1.0.0-alpha.39/node_modules/typeson-registry/types/filelist.js","../../../node_modules/.pnpm/typeson-registry@1.0.0-alpha.39/node_modules/typeson-registry/types/blob.js","../../../node_modules/.pnpm/base64-arraybuffer-es6@1.0.0/node_modules/base64-arraybuffer-es6/dist/base64-arraybuffer-es.js","../src/tson-typed-array.ts","../src/tson-arraybuffer.ts","../src/tson.ts","../src/export.ts","../src/json-structure.ts","../tools/build-configs/fake-stream.js","../../../node_modules/.pnpm/github.com+dfahlander+clarinet@d1dc89f7e67488b16ad98b2464d29a9b3bc6f5ef/node_modules/clarinet/clarinet.js","../src/json-stream.ts","../src/import.ts","../src/dexie-export-import.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","import Dexie from 'dexie';\nimport { DexieExportedDatabase } from './json-structure';\n\nexport function getSchemaString(table: Dexie.Table<any, any>) {\n  const primKeyAndIndexes = [table.schema.primKey].concat(table.schema.indexes);\n  return primKeyAndIndexes.map(index => index.src).join(',');\n}\n\nexport function extractDbSchema(exportedDb: DexieExportedDatabase) {\n  const schema: {\n    [tableName: string]: string;\n  } = {};\n  for (const table of exportedDb.tables) {\n    schema[table.name] = table.schema;\n  }\n  return schema;\n}\n\n\n// Missing FileReaderSync type in standard typescript libs:\ninterface FileReaderSync {\n  readAsArrayBuffer(blob: Blob): ArrayBuffer;\n  readAsBinaryString(blob: Blob): string;\n  readAsDataURL(blob: Blob): string;\n  readAsText(blob: Blob, encoding?: string): string;\n}\ndeclare var FileReaderSync: {\n  prototype: FileReaderSync;\n  new(): FileReaderSync;\n};\n// -----------------------------------------------\n\nexport interface TypeMapper {\n  binary: ArrayBuffer;\n  text: string;\n}\n\nexport function readBlobAsync<T extends keyof TypeMapper>(blob: Blob, type: T): Promise<TypeMapper[T]> {\n  return new Promise<TypeMapper[T]>((resolve, reject) => {\n    const reader = new FileReader();\n    reader.onabort = ev => reject(new Error(\"file read aborted\"));\n    reader.onerror = ev => reject((ev.target as any).error);\n    reader.onload = ev => resolve((ev.target as any).result);\n    if (type === 'binary')\n      reader.readAsArrayBuffer(blob);\n    else\n      reader.readAsText(blob);\n  });\n}\n\nexport function readBlobSync<T extends keyof TypeMapper>(blob: Blob, type: T): TypeMapper[T] {\n  if (typeof FileReaderSync === 'undefined') {\n    throw new Error('FileReaderSync missing. Reading blobs synchronously requires code to run from within a web worker. Use TSON.encapsulateAsync() to do it from the main thread.');\n  }\n  const reader = new FileReaderSync(); // Requires worker environment\n  const data = type === 'binary' ?\n    reader.readAsArrayBuffer(blob) :\n    reader.readAsText(blob);\n\n  return data as TypeMapper[T];\n}\n","(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = global || self, global.Typeson = factory());\n}(this, (function () { 'use strict';\n\n  function _typeof(obj) {\n    if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n      _typeof = function (obj) {\n        return typeof obj;\n      };\n    } else {\n      _typeof = function (obj) {\n        return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n      };\n    }\n\n    return _typeof(obj);\n  }\n\n  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n    try {\n      var info = gen[key](arg);\n      var value = info.value;\n    } catch (error) {\n      reject(error);\n      return;\n    }\n\n    if (info.done) {\n      resolve(value);\n    } else {\n      Promise.resolve(value).then(_next, _throw);\n    }\n  }\n\n  function _asyncToGenerator(fn) {\n    return function () {\n      var self = this,\n          args = arguments;\n      return new Promise(function (resolve, reject) {\n        var gen = fn.apply(self, args);\n\n        function _next(value) {\n          asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n        }\n\n        function _throw(err) {\n          asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n        }\n\n        _next(undefined);\n      });\n    };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    return Constructor;\n  }\n\n  function _defineProperty(obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  }\n\n  function ownKeys(object, enumerableOnly) {\n    var keys = Object.keys(object);\n\n    if (Object.getOwnPropertySymbols) {\n      var symbols = Object.getOwnPropertySymbols(object);\n      if (enumerableOnly) symbols = symbols.filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n      });\n      keys.push.apply(keys, symbols);\n    }\n\n    return keys;\n  }\n\n  function _objectSpread2(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i] != null ? arguments[i] : {};\n\n      if (i % 2) {\n        ownKeys(Object(source), true).forEach(function (key) {\n          _defineProperty(target, key, source[key]);\n        });\n      } else if (Object.getOwnPropertyDescriptors) {\n        Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n      } else {\n        ownKeys(Object(source)).forEach(function (key) {\n          Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n        });\n      }\n    }\n\n    return target;\n  }\n\n  function _slicedToArray(arr, i) {\n    return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n  }\n\n  function _toConsumableArray(arr) {\n    return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n  }\n\n  function _arrayWithoutHoles(arr) {\n    if (Array.isArray(arr)) {\n      for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n      return arr2;\n    }\n  }\n\n  function _arrayWithHoles(arr) {\n    if (Array.isArray(arr)) return arr;\n  }\n\n  function _iterableToArray(iter) {\n    if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n  }\n\n  function _iterableToArrayLimit(arr, i) {\n    if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n      return;\n    }\n\n    var _arr = [];\n    var _n = true;\n    var _d = false;\n    var _e = undefined;\n\n    try {\n      for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n        _arr.push(_s.value);\n\n        if (i && _arr.length === i) break;\n      }\n    } catch (err) {\n      _d = true;\n      _e = err;\n    } finally {\n      try {\n        if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n      } finally {\n        if (_d) throw _e;\n      }\n    }\n\n    return _arr;\n  }\n\n  function _nonIterableSpread() {\n    throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n  }\n\n  function _nonIterableRest() {\n    throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n  }\n\n  /**\n   * We keep this function minimized so if using two instances of this\n   *   library, where one is minimized and one is not, it will still work\n   *   with `hasConstructorOf`.\n   * With ES6 classes, we may be able to simply use `class TypesonPromise\n   *   extends Promise` and add a string tag for detection.\n   * @param {function} f\n   */\n  // eslint-disable-next-line max-len\n  // eslint-disable-next-line block-spacing, space-before-function-paren, space-before-blocks, space-infix-ops, semi, promise/avoid-new\n  var TypesonPromise = function TypesonPromise(f) {\n    _classCallCheck(this, TypesonPromise);\n\n    this.p = new Promise(f);\n  }; // eslint-disable-next-line max-len\n  // class TypesonPromise extends Promise {get[Symbol.toStringTag](){return 'TypesonPromise'};} // eslint-disable-line keyword-spacing, space-before-function-paren, space-before-blocks, block-spacing, semi\n\n\n  TypesonPromise.__typeson__type__ = 'TypesonPromise'; // Note: core-js-bundle provides a `Symbol` polyfill\n\n  /* istanbul ignore else */\n\n  if (typeof Symbol !== 'undefined') {\n    // Ensure `isUserObject` will return `false` for `TypesonPromise`\n    TypesonPromise.prototype[Symbol.toStringTag] = 'TypesonPromise';\n  }\n  /**\n   *\n   * @param {function} [onFulfilled]\n   * @param {function} [onRejected]\n   * @returns {TypesonPromise}\n   */\n\n\n  TypesonPromise.prototype.then = function (onFulfilled, onRejected) {\n    var _this = this;\n\n    return new TypesonPromise(function (typesonResolve, typesonReject) {\n      // eslint-disable-next-line promise/catch-or-return\n      _this.p.then(function (res) {\n        // eslint-disable-next-line promise/always-return\n        typesonResolve(onFulfilled ? onFulfilled(res) : res);\n      })[\"catch\"](function (res) {\n        return onRejected ? onRejected(res) : Promise.reject(res);\n      }).then(typesonResolve, typesonReject);\n    });\n  };\n  /**\n   *\n   * @param {function} onRejected\n   * @returns {TypesonPromise}\n   */\n\n\n  TypesonPromise.prototype[\"catch\"] = function (onRejected) {\n    return this.then(null, onRejected);\n  };\n  /**\n   *\n   * @param {Any} v\n   * @returns {TypesonPromise}\n   */\n\n\n  TypesonPromise.resolve = function (v) {\n    return new TypesonPromise(function (typesonResolve) {\n      typesonResolve(v);\n    });\n  };\n  /**\n   *\n   * @param {Any} v\n   * @returns {TypesonPromise}\n   */\n\n\n  TypesonPromise.reject = function (v) {\n    return new TypesonPromise(function (typesonResolve, typesonReject) {\n      typesonReject(v);\n    });\n  };\n\n  ['all', 'race'].forEach(function (meth) {\n    /**\n     *\n     * @param {Promise[]} promArr\n     * @returns {TypesonPromise}\n     */\n    TypesonPromise[meth] = function (promArr) {\n      return new TypesonPromise(function (typesonResolve, typesonReject) {\n        // eslint-disable-next-line promise/catch-or-return\n        Promise[meth](promArr.map(function (prom) {\n          return prom && prom.constructor && prom.constructor.__typeson__type__ === 'TypesonPromise' ? prom.p : prom;\n        })).then(typesonResolve, typesonReject);\n      });\n    };\n  });\n\n  var _ref = {},\n      toStr = _ref.toString,\n      hasOwn = {}.hasOwnProperty,\n      getProto = Object.getPrototypeOf,\n      fnToString = hasOwn.toString;\n  /**\n   * Second argument not in use internally, but provided for utility.\n   * @param {Any} v\n   * @param {boolean} catchCheck\n   * @returns {boolean}\n   */\n\n  function isThenable(v, catchCheck) {\n    return isObject(v) && typeof v.then === 'function' && (!catchCheck || typeof v[\"catch\"] === 'function');\n  }\n  /**\n   *\n   * @param {Any} val\n   * @returns {string}\n   */\n\n\n  function toStringTag(val) {\n    return toStr.call(val).slice(8, -1);\n  }\n  /**\n   * This function is dependent on both constructors\n   *   being identical so any minimization is expected of both.\n   * @param {Any} a\n   * @param {function} b\n   * @returns {boolean}\n   */\n\n\n  function hasConstructorOf(a, b) {\n    if (!a || _typeof(a) !== 'object') {\n      return false;\n    }\n\n    var proto = getProto(a);\n\n    if (!proto) {\n      return b === null;\n    }\n\n    var Ctor = hasOwn.call(proto, 'constructor') && proto.constructor;\n\n    if (typeof Ctor !== 'function') {\n      return b === null;\n    }\n\n    if (b === Ctor) {\n      return true;\n    }\n\n    if (b !== null && fnToString.call(Ctor) === fnToString.call(b)) {\n      return true;\n    }\n\n    if (typeof b === 'function' && typeof Ctor.__typeson__type__ === 'string' && Ctor.__typeson__type__ === b.__typeson__type__) {\n      return true;\n    }\n\n    return false;\n  }\n  /**\n   *\n   * @param {Any} val\n   * @returns {boolean}\n   */\n\n\n  function isPlainObject(val) {\n    // Mirrors jQuery's\n    if (!val || toStringTag(val) !== 'Object') {\n      return false;\n    }\n\n    var proto = getProto(val);\n\n    if (!proto) {\n      // `Object.create(null)`\n      return true;\n    }\n\n    return hasConstructorOf(val, Object);\n  }\n  /**\n   *\n   * @param {Any} val\n   * @returns {boolean}\n   */\n\n\n  function isUserObject(val) {\n    if (!val || toStringTag(val) !== 'Object') {\n      return false;\n    }\n\n    var proto = getProto(val);\n\n    if (!proto) {\n      // `Object.create(null)`\n      return true;\n    }\n\n    return hasConstructorOf(val, Object) || isUserObject(proto);\n  }\n  /**\n   *\n   * @param {Any} v\n   * @returns {boolean}\n   */\n\n\n  function isObject(v) {\n    return v && _typeof(v) === 'object';\n  }\n  /**\n   *\n   * @param {string} keyPathComponent\n   * @returns {string}\n   */\n\n\n  function escapeKeyPathComponent(keyPathComponent) {\n    return keyPathComponent.replace(/~/g, '~0').replace(/\\./g, '~1');\n  }\n  /**\n   *\n   * @param {string} keyPathComponent\n   * @returns {string}\n   */\n\n\n  function unescapeKeyPathComponent(keyPathComponent) {\n    return keyPathComponent.replace(/~1/g, '.').replace(/~0/g, '~');\n  }\n  /**\n   * @param {PlainObject|GenericArray} obj\n   * @param {string} keyPath\n   * @returns {Any}\n   */\n\n\n  function getByKeyPath(obj, keyPath) {\n    if (keyPath === '') {\n      return obj;\n    }\n\n    var period = keyPath.indexOf('.');\n\n    if (period > -1) {\n      var innerObj = obj[unescapeKeyPathComponent(keyPath.slice(0, period))];\n      return innerObj === undefined ? undefined : getByKeyPath(innerObj, keyPath.slice(period + 1));\n    }\n\n    return obj[unescapeKeyPathComponent(keyPath)];\n  }\n  /**\n   *\n   * @param {PlainObject} obj\n   * @param {string} keyPath\n   * @param {Any} value\n   * @returns {Any}\n   */\n\n\n  function setAtKeyPath(obj, keyPath, value) {\n    if (keyPath === '') {\n      return value;\n    }\n\n    var period = keyPath.indexOf('.');\n\n    if (period > -1) {\n      var innerObj = obj[unescapeKeyPathComponent(keyPath.slice(0, period))];\n      return setAtKeyPath(innerObj, keyPath.slice(period + 1), value);\n    }\n\n    obj[unescapeKeyPathComponent(keyPath)] = value;\n    return obj;\n  }\n  /**\n   *\n   * @param {external:JSON} value\n   * @returns {\"null\"|\"array\"|\"undefined\"|\"boolean\"|\"number\"|\"string\"|\n   *  \"object\"|\"symbol\"}\n   */\n\n\n  function getJSONType(value) {\n    return value === null ? 'null' : Array.isArray(value) ? 'array' : _typeof(value);\n  }\n\n  var keys = Object.keys,\n      isArray = Array.isArray,\n      hasOwn$1 = {}.hasOwnProperty,\n      internalStateObjPropsToIgnore = ['type', 'replaced', 'iterateIn', 'iterateUnsetNumeric'];\n  /**\n   * Handle plain object revivers first so reference setting can use\n   * revived type (e.g., array instead of object); assumes revived\n   * has same structure or will otherwise break subsequent references.\n   * @param {PlainObjectType} a\n   * @param {PlainObjectType} b\n   * @returns {1|-1|boolean}\n   */\n\n  function nestedPathsFirst(a, b) {\n    if (a.keypath === '') {\n      return -1;\n    }\n\n    var as = a.keypath.match(/\\./g) || 0;\n    var bs = b.keypath.match(/\\./g) || 0;\n\n    if (as) {\n      as = as.length;\n    }\n\n    if (bs) {\n      bs = bs.length;\n    }\n\n    return as > bs ? -1 : as < bs ? 1 : a.keypath < b.keypath ? -1 : a.keypath > b.keypath;\n  }\n  /**\n   * An instance of this class can be used to call `stringify()` and `parse()`.\n   * Typeson resolves cyclic references by default. Can also be extended to\n   * support custom types using the register() method.\n   *\n   * @class\n   * @param {{cyclic: boolean}} [options] - if cyclic (default true),\n   *   cyclic references will be handled gracefully.\n   */\n\n\n  var Typeson =\n  /*#__PURE__*/\n  function () {\n    function Typeson(options) {\n      _classCallCheck(this, Typeson);\n\n      this.options = options; // Replacers signature: replace (value). Returns falsy if not\n      //   replacing. Otherwise ['Date', value.getTime()]\n\n      this.plainObjectReplacers = [];\n      this.nonplainObjectReplacers = []; // Revivers: [{type => reviver}, {plain: boolean}].\n      //   Sample: [{'Date': value => new Date(value)}, {plain: false}]\n\n      this.revivers = {};\n      /** Types registered via `register()`. */\n\n      this.types = {};\n    }\n    /**\n    * @typedef {null|boolean|number|string|GenericArray|PlainObject} JSON\n    */\n\n    /**\n    * @callback JSONReplacer\n    * @param {\"\"|string} key\n    * @param {JSON} value\n    * @returns {number|string|boolean|null|PlainObject|undefined}\n    * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#The%20replacer%20parameter\n    */\n\n    /**\n     * Serialize given object to Typeson.\n     * Initial arguments work identical to those of `JSON.stringify`.\n     * The `replacer` argument has nothing to do with our replacers.\n     * @param {Any} obj\n     * @param {JSONReplacer|string[]} replacer\n     * @param {number|string} space\n     * @param {object} opts\n     * @returns {string|Promise} Promise resolves to a string\n     */\n\n\n    _createClass(Typeson, [{\n      key: \"stringify\",\n      value: function stringify(obj, replacer, space, opts) {\n        opts = _objectSpread2({}, this.options, {}, opts, {\n          stringification: true\n        });\n        var encapsulated = this.encapsulate(obj, null, opts);\n\n        if (isArray(encapsulated)) {\n          return JSON.stringify(encapsulated[0], replacer, space);\n        }\n\n        return encapsulated.then(function (res) {\n          return JSON.stringify(res, replacer, space);\n        });\n      }\n      /**\n       * Also sync but throws on non-sync result.\n       * @param {Any} obj\n       * @param {JSONReplacer|string[]} replacer\n       * @param {number|string} space\n       * @param {object} opts\n       * @returns {string}\n       */\n\n    }, {\n      key: \"stringifySync\",\n      value: function stringifySync(obj, replacer, space, opts) {\n        return this.stringify(obj, replacer, space, _objectSpread2({\n          throwOnBadSyncType: true\n        }, opts, {\n          sync: true\n        }));\n      }\n      /**\n       *\n       * @param {Any} obj\n       * @param {JSONReplacer|string[]} replacer\n       * @param {number|string} space\n       * @param {object} opts\n       * @returns {Promise<string>}\n       */\n\n    }, {\n      key: \"stringifyAsync\",\n      value: function stringifyAsync(obj, replacer, space, opts) {\n        return this.stringify(obj, replacer, space, _objectSpread2({\n          throwOnBadSyncType: true\n        }, opts, {\n          sync: false\n        }));\n      }\n      /**\n       * Parse Typeson back into an obejct.\n       * Initial arguments works identical to those of `JSON.parse()`.\n       * @param {string} text\n       * @param {function} reviver This JSON reviver has nothing to do with\n       *   our revivers.\n       * @param {object} opts\n       * @returns {external:JSON}\n       */\n\n    }, {\n      key: \"parse\",\n      value: function parse(text, reviver, opts) {\n        opts = _objectSpread2({}, this.options, {}, opts, {\n          parse: true\n        });\n        return this.revive(JSON.parse(text, reviver), opts);\n      }\n      /**\n      * Also sync but throws on non-sync result.\n      * @param {string} text\n      * @param {function} reviver This JSON reviver has nothing to do with\n      *   our revivers.\n      * @param {object} opts\n      * @returns {external:JSON}\n      */\n\n    }, {\n      key: \"parseSync\",\n      value: function parseSync(text, reviver, opts) {\n        return this.parse(text, reviver, _objectSpread2({\n          throwOnBadSyncType: true\n        }, opts, {\n          sync: true\n        }));\n      }\n      /**\n      * @param {string} text\n      * @param {function} reviver This JSON reviver has nothing to do with\n      *   our revivers.\n      * @param {object} opts\n      * @returns {Promise} Resolves to `external:JSON`\n      */\n\n    }, {\n      key: \"parseAsync\",\n      value: function parseAsync(text, reviver, opts) {\n        return this.parse(text, reviver, _objectSpread2({\n          throwOnBadSyncType: true\n        }, opts, {\n          sync: false\n        }));\n      }\n      /**\n       *\n       * @param {Any} obj\n       * @param {object} stateObj\n       * @param {object} [opts={}]\n       * @returns {string[]|false}\n       */\n\n    }, {\n      key: \"specialTypeNames\",\n      value: function specialTypeNames(obj, stateObj) {\n        var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n        opts.returnTypeNames = true;\n        return this.encapsulate(obj, stateObj, opts);\n      }\n      /**\n       *\n       * @param {Any} obj\n       * @param {PlainObject} stateObj\n       * @param {PlainObject} [opts={}]\n       * @returns {Promise|GenericArray|PlainObject|string|false}\n       */\n\n    }, {\n      key: \"rootTypeName\",\n      value: function rootTypeName(obj, stateObj) {\n        var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n        opts.iterateNone = true;\n        return this.encapsulate(obj, stateObj, opts);\n      }\n      /**\n       * Encapsulate a complex object into a plain Object by replacing\n       * registered types with plain objects representing the types data.\n       *\n       * This method is used internally by `Typeson.stringify()`.\n       * @param {Any} obj - Object to encapsulate.\n       * @param {PlainObject} stateObj\n       * @param {PlainObject} opts\n       * @returns {Promise|GenericArray|PlainObject|string|false}\n       */\n\n    }, {\n      key: \"encapsulate\",\n      value: function encapsulate(obj, stateObj, opts) {\n        opts = _objectSpread2({\n          sync: true\n        }, this.options, {}, opts);\n        var _opts = opts,\n            sync = _opts.sync;\n        var that = this,\n            types = {},\n            refObjs = [],\n            // For checking cyclic references\n        refKeys = [],\n            // For checking cyclic references\n        promisesDataRoot = []; // Clone the object deeply while at the same time replacing any\n        //   special types or cyclic reference:\n\n        var cyclic = 'cyclic' in opts ? opts.cyclic : true;\n        var _opts2 = opts,\n            encapsulateObserver = _opts2.encapsulateObserver;\n\n        var ret = _encapsulate('', obj, cyclic, stateObj || {}, promisesDataRoot);\n        /**\n         *\n         * @param {Any} ret\n         * @returns {GenericArray|PlainObject|string|false}\n         */\n\n\n        function finish(ret) {\n          // Add `$types` to result only if we ever bumped into a\n          //  special type (or special case where object has own `$types`)\n          var typeNames = Object.values(types);\n\n          if (opts.iterateNone) {\n            if (typeNames.length) {\n              return typeNames[0];\n            }\n\n            return Typeson.getJSONType(ret);\n          }\n\n          if (typeNames.length) {\n            if (opts.returnTypeNames) {\n              return _toConsumableArray(new Set(typeNames));\n            } // Special if array (or a primitive) was serialized\n            //   because JSON would ignore custom `$types` prop on it\n\n\n            if (!ret || !isPlainObject(ret) || // Also need to handle if this is an object with its\n            //   own `$types` property (to avoid ambiguity)\n            hasOwn$1.call(ret, '$types')) {\n              ret = {\n                $: ret,\n                $types: {\n                  $: types\n                }\n              };\n            } else {\n              ret.$types = types;\n            } // No special types\n\n          } else if (isObject(ret) && hasOwn$1.call(ret, '$types')) {\n            ret = {\n              $: ret,\n              $types: true\n            };\n          }\n\n          if (opts.returnTypeNames) {\n            return false;\n          }\n\n          return ret;\n        }\n        /**\n         *\n         * @param {Any} ret\n         * @param {GenericArray} promisesData\n         * @returns {Promise<Any>}\n         */\n\n\n        function checkPromises(_x, _x2) {\n          return _checkPromises.apply(this, arguments);\n        }\n        /**\n         *\n         * @param {object} stateObj\n         * @param {object} ownKeysObj\n         * @param {function} cb\n         * @returns {undefined}\n         */\n\n\n        function _checkPromises() {\n          _checkPromises = _asyncToGenerator(\n          /*#__PURE__*/\n          regeneratorRuntime.mark(function _callee2(ret, promisesData) {\n            var promResults;\n            return regeneratorRuntime.wrap(function _callee2$(_context2) {\n              while (1) {\n                switch (_context2.prev = _context2.next) {\n                  case 0:\n                    _context2.next = 2;\n                    return Promise.all(promisesData.map(function (pd) {\n                      return pd[1].p;\n                    }));\n\n                  case 2:\n                    promResults = _context2.sent;\n                    _context2.next = 5;\n                    return Promise.all(promResults.map(\n                    /*#__PURE__*/\n                    function () {\n                      var _ref = _asyncToGenerator(\n                      /*#__PURE__*/\n                      regeneratorRuntime.mark(function _callee(promResult) {\n                        var newPromisesData, _promisesData$splice, _promisesData$splice2, prData, _prData, keyPath, cyclic, stateObj, parentObj, key, detectedType, encaps, isTypesonPromise, encaps2;\n\n                        return regeneratorRuntime.wrap(function _callee$(_context) {\n                          while (1) {\n                            switch (_context.prev = _context.next) {\n                              case 0:\n                                newPromisesData = [];\n                                _promisesData$splice = promisesData.splice(0, 1), _promisesData$splice2 = _slicedToArray(_promisesData$splice, 1), prData = _promisesData$splice2[0];\n                                _prData = _slicedToArray(prData, 7), keyPath = _prData[0], cyclic = _prData[2], stateObj = _prData[3], parentObj = _prData[4], key = _prData[5], detectedType = _prData[6];\n                                encaps = _encapsulate(keyPath, promResult, cyclic, stateObj, newPromisesData, true, detectedType);\n                                isTypesonPromise = hasConstructorOf(encaps, TypesonPromise); // Handle case where an embedded custom type itself\n                                //   returns a `Typeson.Promise`\n\n                                if (!(keyPath && isTypesonPromise)) {\n                                  _context.next = 11;\n                                  break;\n                                }\n\n                                _context.next = 8;\n                                return encaps.p;\n\n                              case 8:\n                                encaps2 = _context.sent;\n                                parentObj[key] = encaps2;\n                                return _context.abrupt(\"return\", checkPromises(ret, newPromisesData));\n\n                              case 11:\n                                if (keyPath) {\n                                  parentObj[key] = encaps;\n                                } else if (isTypesonPromise) {\n                                  ret = encaps.p;\n                                } else {\n                                  // If this is itself a `Typeson.Promise` (because the\n                                  //   original value supplied was a `Promise` or\n                                  //   because the supplied custom type value resolved\n                                  //   to one), returning it below will be fine since\n                                  //   a `Promise` is expected anyways given current\n                                  //   config (and if not a `Promise`, it will be ready\n                                  //   as the resolve value)\n                                  ret = encaps;\n                                }\n\n                                return _context.abrupt(\"return\", checkPromises(ret, newPromisesData));\n\n                              case 13:\n                              case \"end\":\n                                return _context.stop();\n                            }\n                          }\n                        }, _callee);\n                      }));\n\n                      return function (_x3) {\n                        return _ref.apply(this, arguments);\n                      };\n                    }()));\n\n                  case 5:\n                    return _context2.abrupt(\"return\", ret);\n\n                  case 6:\n                  case \"end\":\n                    return _context2.stop();\n                }\n              }\n            }, _callee2);\n          }));\n          return _checkPromises.apply(this, arguments);\n        }\n\n        function _adaptBuiltinStateObjectProperties(stateObj, ownKeysObj, cb) {\n          Object.assign(stateObj, ownKeysObj);\n          var vals = internalStateObjPropsToIgnore.map(function (prop) {\n            var tmp = stateObj[prop];\n            delete stateObj[prop];\n            return tmp;\n          }); // eslint-disable-next-line callback-return\n\n          cb();\n          internalStateObjPropsToIgnore.forEach(function (prop, i) {\n            stateObj[prop] = vals[i];\n          });\n        }\n        /**\n         *\n         * @param {string} keypath\n         * @param {Any} value\n         * @param {boolean} cyclic\n         * @param {PlainObject} stateObj\n         * @param {boolean} promisesData\n         * @param {boolean} resolvingTypesonPromise\n         * @param {string} detectedType\n         * @returns {Any}\n         */\n\n\n        function _encapsulate(keypath, value, cyclic, stateObj, promisesData, resolvingTypesonPromise, detectedType) {\n          var ret;\n          var observerData = {};\n\n          var $typeof = _typeof(value);\n\n          var runObserver = encapsulateObserver ? function (obj) {\n            var type = detectedType || stateObj.type || Typeson.getJSONType(value);\n            encapsulateObserver(Object.assign(obj || observerData, {\n              keypath: keypath,\n              value: value,\n              cyclic: cyclic,\n              stateObj: stateObj,\n              promisesData: promisesData,\n              resolvingTypesonPromise: resolvingTypesonPromise,\n              awaitingTypesonPromise: hasConstructorOf(value, TypesonPromise)\n            }, {\n              type: type\n            }));\n          } : null;\n\n          if (['string', 'boolean', 'number', 'undefined'].includes($typeof)) {\n            if (value === undefined || $typeof === 'number' && (isNaN(value) || value === -Infinity || value === Infinity)) {\n              if (stateObj.replaced) {\n                ret = value;\n              } else {\n                ret = replace(keypath, value, stateObj, promisesData, false, resolvingTypesonPromise, runObserver);\n              }\n\n              if (ret !== value) {\n                observerData = {\n                  replaced: ret\n                };\n              }\n            } else {\n              ret = value;\n            }\n\n            if (runObserver) {\n              runObserver();\n            }\n\n            return ret;\n          }\n\n          if (value === null) {\n            if (runObserver) {\n              runObserver();\n            }\n\n            return value;\n          }\n\n          if (cyclic && !stateObj.iterateIn && !stateObj.iterateUnsetNumeric && value && _typeof(value) === 'object') {\n            // Options set to detect cyclic references and be able\n            //   to rewrite them.\n            var refIndex = refObjs.indexOf(value);\n\n            if (refIndex < 0) {\n              if (cyclic === true) {\n                refObjs.push(value);\n                refKeys.push(keypath);\n              }\n            } else {\n              types[keypath] = '#';\n\n              if (runObserver) {\n                runObserver({\n                  cyclicKeypath: refKeys[refIndex]\n                });\n              }\n\n              return '#' + refKeys[refIndex];\n            }\n          }\n\n          var isPlainObj = isPlainObject(value);\n          var isArr = isArray(value);\n          var replaced = // Running replace will cause infinite loop as will test\n          //   positive again\n          (isPlainObj || isArr) && (!that.plainObjectReplacers.length || stateObj.replaced) || stateObj.iterateIn ? // Optimization: if plain object and no plain-object\n          //   replacers, don't try finding a replacer\n          value : replace(keypath, value, stateObj, promisesData, isPlainObj || isArr, null, runObserver);\n          var clone;\n\n          if (replaced !== value) {\n            ret = replaced;\n            observerData = {\n              replaced: replaced\n            };\n          } else {\n            // eslint-disable-next-line no-lonely-if\n            if (keypath === '' && hasConstructorOf(value, TypesonPromise)) {\n              promisesData.push([keypath, value, cyclic, stateObj, undefined, undefined, stateObj.type]);\n              ret = value;\n            } else if (isArr && stateObj.iterateIn !== 'object' || stateObj.iterateIn === 'array') {\n              clone = new Array(value.length);\n              observerData = {\n                clone: clone\n              };\n            } else if (!['function', 'symbol'].includes(_typeof(value)) && !('toJSON' in value) && !hasConstructorOf(value, TypesonPromise) && !hasConstructorOf(value, Promise) && !hasConstructorOf(value, ArrayBuffer) || isPlainObj || stateObj.iterateIn === 'object') {\n              clone = {};\n\n              if (stateObj.addLength) {\n                clone.length = value.length;\n              }\n\n              observerData = {\n                clone: clone\n              };\n            } else {\n              ret = value; // Only clone vanilla objects and arrays\n            }\n          }\n\n          if (runObserver) {\n            runObserver();\n          }\n\n          if (opts.iterateNone) {\n            return clone || ret;\n          }\n\n          if (!clone) {\n            return ret;\n          } // Iterate object or array\n\n\n          if (stateObj.iterateIn) {\n            var _loop = function _loop(key) {\n              var ownKeysObj = {\n                ownKeys: hasOwn$1.call(value, key)\n              };\n\n              _adaptBuiltinStateObjectProperties(stateObj, ownKeysObj, function () {\n                var kp = keypath + (keypath ? '.' : '') + escapeKeyPathComponent(key);\n\n                var val = _encapsulate(kp, value[key], Boolean(cyclic), stateObj, promisesData, resolvingTypesonPromise);\n\n                if (hasConstructorOf(val, TypesonPromise)) {\n                  promisesData.push([kp, val, Boolean(cyclic), stateObj, clone, key, stateObj.type]);\n                } else if (val !== undefined) {\n                  clone[key] = val;\n                }\n              });\n            };\n\n            // eslint-disable-next-line guard-for-in\n            for (var key in value) {\n              _loop(key);\n            }\n\n            if (runObserver) {\n              runObserver({\n                endIterateIn: true,\n                end: true\n              });\n            }\n          } else {\n            // Note: Non-indexes on arrays won't survive stringify so\n            //  somewhat wasteful for arrays, but so too is iterating\n            //  all numeric indexes on sparse arrays when not wanted\n            //  or filtering own keys for positive integers\n            keys(value).forEach(function (key) {\n              var kp = keypath + (keypath ? '.' : '') + escapeKeyPathComponent(key);\n              var ownKeysObj = {\n                ownKeys: true\n              };\n\n              _adaptBuiltinStateObjectProperties(stateObj, ownKeysObj, function () {\n                var val = _encapsulate(kp, value[key], Boolean(cyclic), stateObj, promisesData, resolvingTypesonPromise);\n\n                if (hasConstructorOf(val, TypesonPromise)) {\n                  promisesData.push([kp, val, Boolean(cyclic), stateObj, clone, key, stateObj.type]);\n                } else if (val !== undefined) {\n                  clone[key] = val;\n                }\n              });\n            });\n\n            if (runObserver) {\n              runObserver({\n                endIterateOwn: true,\n                end: true\n              });\n            }\n          } // Iterate array for non-own numeric properties (we can't\n          //   replace the prior loop though as it iterates non-integer\n          //   keys)\n\n\n          if (stateObj.iterateUnsetNumeric) {\n            var vl = value.length;\n\n            var _loop2 = function _loop2(i) {\n              if (!(i in value)) {\n                // No need to escape numeric\n                var kp = keypath + (keypath ? '.' : '') + i;\n                var ownKeysObj = {\n                  ownKeys: false\n                };\n\n                _adaptBuiltinStateObjectProperties(stateObj, ownKeysObj, function () {\n                  var val = _encapsulate(kp, undefined, Boolean(cyclic), stateObj, promisesData, resolvingTypesonPromise);\n\n                  if (hasConstructorOf(val, TypesonPromise)) {\n                    promisesData.push([kp, val, Boolean(cyclic), stateObj, clone, i, stateObj.type]);\n                  } else if (val !== undefined) {\n                    clone[i] = val;\n                  }\n                });\n              }\n            };\n\n            for (var i = 0; i < vl; i++) {\n              _loop2(i);\n            }\n\n            if (runObserver) {\n              runObserver({\n                endIterateUnsetNumeric: true,\n                end: true\n              });\n            }\n          }\n\n          return clone;\n        }\n        /**\n         *\n         * @param {string} keypath\n         * @param {Any} value\n         * @param {PlainObject} stateObj\n         * @param {GenericArray} promisesData\n         * @param {boolean} plainObject\n         * @param {boolean} resolvingTypesonPromise\n         * @param {function} [runObserver]\n         * @returns {*}\n         */\n\n\n        function replace(keypath, value, stateObj, promisesData, plainObject, resolvingTypesonPromise, runObserver) {\n          // Encapsulate registered types\n          var replacers = plainObject ? that.plainObjectReplacers : that.nonplainObjectReplacers;\n          var i = replacers.length;\n\n          while (i--) {\n            var replacer = replacers[i];\n\n            if (replacer.test(value, stateObj)) {\n              var type = replacer.type;\n\n              if (that.revivers[type]) {\n                // Record the type only if a corresponding reviver\n                //   exists. This is to support specs where only\n                //   replacement is done.\n                // For example, ensuring deep cloning of the object,\n                //   or replacing a type to its equivalent without\n                //   the need to revive it.\n                var existing = types[keypath]; // type can comprise an array of types (see test\n                //   \"should support intermediate types\")\n\n                types[keypath] = existing ? [type].concat(existing) : type;\n              }\n\n              Object.assign(stateObj, {\n                type: type,\n                replaced: true\n              });\n\n              if ((sync || !replacer.replaceAsync) && !replacer.replace) {\n                if (runObserver) {\n                  runObserver({\n                    typeDetected: true\n                  });\n                }\n\n                return _encapsulate(keypath, value, cyclic && 'readonly', stateObj, promisesData, resolvingTypesonPromise, type);\n              }\n\n              if (runObserver) {\n                runObserver({\n                  replacing: true\n                });\n              } // Now, also traverse the result in case it contains its\n              //   own types to replace\n\n\n              var replaceMethod = sync || !replacer.replaceAsync ? 'replace' : 'replaceAsync';\n              return _encapsulate(keypath, replacer[replaceMethod](value, stateObj), cyclic && 'readonly', stateObj, promisesData, resolvingTypesonPromise, type);\n            }\n          }\n\n          return value;\n        }\n\n        return promisesDataRoot.length ? sync && opts.throwOnBadSyncType ? function () {\n          throw new TypeError('Sync method requested but async result obtained');\n        }() : Promise.resolve(checkPromises(ret, promisesDataRoot)).then(finish) : !sync && opts.throwOnBadSyncType ? function () {\n          throw new TypeError('Async method requested but sync result obtained');\n        }() // If this is a synchronous request for stringification, yet\n        //   a promise is the result, we don't want to resolve leading\n        //   to an async result, so we return an array to avoid\n        //   ambiguity\n        : opts.stringification && sync ? [finish(ret)] : sync ? finish(ret) : Promise.resolve(finish(ret));\n      }\n      /**\n       * Also sync but throws on non-sync result.\n       * @param {*} obj\n       * @param {object} stateObj\n       * @param {object} opts\n       * @returns {*}\n       */\n\n    }, {\n      key: \"encapsulateSync\",\n      value: function encapsulateSync(obj, stateObj, opts) {\n        return this.encapsulate(obj, stateObj, _objectSpread2({\n          throwOnBadSyncType: true\n        }, opts, {\n          sync: true\n        }));\n      }\n      /**\n       * @param {*} obj\n       * @param {object} stateObj\n       * @param {object} opts\n       * @returns {*}\n       */\n\n    }, {\n      key: \"encapsulateAsync\",\n      value: function encapsulateAsync(obj, stateObj, opts) {\n        return this.encapsulate(obj, stateObj, _objectSpread2({\n          throwOnBadSyncType: true\n        }, opts, {\n          sync: false\n        }));\n      }\n      /**\n       * Revive an encapsulated object.\n       * This method is used internally by `Typeson.parse()`.\n       * @param {object} obj - Object to revive. If it has `$types` member, the\n       *   properties that are listed there will be replaced with its true type\n       *   instead of just plain objects.\n       * @param {object} opts\n       * @throws TypeError If mismatch between sync/async type and result\n       * @returns {Promise|*} If async, returns a Promise that resolves to `*`\n       */\n\n    }, {\n      key: \"revive\",\n      value: function revive(obj, opts) {\n        var types = obj && obj.$types; // No type info added. Revival not needed.\n\n        if (!types) {\n          return obj;\n        } // Object happened to have own `$types` property but with\n        //   no actual types, so we unescape and return that object\n\n\n        if (types === true) {\n          return obj.$;\n        }\n\n        opts = _objectSpread2({\n          sync: true\n        }, this.options, {}, opts);\n        var _opts3 = opts,\n            sync = _opts3.sync;\n        var keyPathResolutions = [];\n        var stateObj = {};\n        var ignore$Types = true; // Special when root object is not a trivial Object, it will\n        //   be encapsulated in `$`. It will also be encapsulated in\n        //   `$` if it has its own `$` property to avoid ambiguity\n\n        if (types.$ && isPlainObject(types.$)) {\n          obj = obj.$;\n          types = types.$;\n          ignore$Types = false;\n        }\n\n        var that = this;\n        /**\n         * @callback RevivalReducer\n         * @param {Any} value\n         * @param {string} type\n         * @returns {Any}\n         */\n\n        /**\n         *\n         * @param {string} type\n         * @param {Any} val\n         * @returns {[type]} [description]\n         */\n\n        function executeReviver(type, val) {\n          var _ref2 = that.revivers[type] || [],\n              _ref3 = _slicedToArray(_ref2, 1),\n              reviver = _ref3[0];\n\n          if (!reviver) {\n            throw new Error('Unregistered type: ' + type);\n          } // Only `sync` expected here, as problematic async would\n          //  be missing both `reviver` and `reviverAsync`, and\n          //  encapsulation shouldn't have added types, so\n          //  should have made an early exit\n\n\n          if (sync && !('revive' in reviver)) {\n            // Just return value as is\n            return val;\n          }\n\n          return reviver[sync && reviver.revive ? 'revive' : !sync && reviver.reviveAsync ? 'reviveAsync' : 'revive'](val, stateObj);\n        }\n        /**\n         *\n         * @returns {void|TypesonPromise<void>}\n         */\n\n\n        function revivePlainObjects() {\n          // const references = [];\n          // const reviveTypes = [];\n          var plainObjectTypes = [];\n          Object.entries(types).forEach(function (_ref4) {\n            var _ref5 = _slicedToArray(_ref4, 2),\n                keypath = _ref5[0],\n                type = _ref5[1];\n\n            if (type === '#') {\n              /*\n              references.push({\n                  keypath,\n                  reference: getByKeyPath(obj, keypath)\n              });\n              */\n              return;\n            }\n\n            [].concat(type).forEach(function (type) {\n              var _ref6 = that.revivers[type] || [null, {}],\n                  _ref7 = _slicedToArray(_ref6, 2),\n                  plain = _ref7[1].plain;\n\n              if (!plain) {\n                // reviveTypes.push({keypath, type});\n                return;\n              }\n\n              plainObjectTypes.push({\n                keypath: keypath,\n                type: type\n              });\n              delete types[keypath]; // Avoid repeating\n            });\n          });\n\n          if (!plainObjectTypes.length) {\n            return undefined;\n          } // console.log(plainObjectTypes.sort(nestedPathsFirst));\n\n          /**\n          * @typedef {PlainObject} PlainObjectType\n          * @property {string} keypath\n          * @property {string} type\n          */\n\n\n          return plainObjectTypes.sort(nestedPathsFirst).reduce(function reducer(possibleTypesonPromise, _ref8) {\n            var keypath = _ref8.keypath,\n                type = _ref8.type;\n\n            if (isThenable(possibleTypesonPromise)) {\n              return possibleTypesonPromise.then(function (val) {\n                return reducer(val, {\n                  keypath: keypath,\n                  type: type\n                });\n              });\n            } // console.log('obj', JSON.stringify(keypath), obj);\n\n\n            var val = getByKeyPath(obj, keypath);\n            val = executeReviver(type, val);\n\n            if (hasConstructorOf(val, TypesonPromise)) {\n              return val.then(function (v) {\n                var newVal = setAtKeyPath(obj, keypath, v);\n\n                if (newVal === v) {\n                  obj = newVal;\n                }\n\n                return undefined;\n              });\n            }\n\n            var newVal = setAtKeyPath(obj, keypath, val);\n\n            if (newVal === val) {\n              obj = newVal;\n            }\n\n            return undefined;\n          }, undefined // This argument must be explicit\n          ); // references.forEach(({keypath, reference}) => {});\n          // reviveTypes.sort(nestedPathsFirst).forEach(() => {});\n        }\n\n        var revivalPromises = [];\n        /**\n         *\n         * @param {string} keypath\n         * @param {Any} value\n         * @param {?(Array|object)} target\n         * @param {Array|object} [clone]\n         * @param {string} [key]\n         * @returns {Any}\n         */\n\n        function _revive(keypath, value, target, clone, key) {\n          if (ignore$Types && keypath === '$types') {\n            return undefined;\n          }\n\n          var type = types[keypath];\n          var isArr = isArray(value);\n\n          if (isArr || isPlainObject(value)) {\n            var _clone = isArr ? new Array(value.length) : {}; // Iterate object or array\n\n\n            keys(value).forEach(function (k) {\n              var val = _revive(keypath + (keypath ? '.' : '') + escapeKeyPathComponent(k), value[k], target || _clone, _clone, k);\n\n              var set = function set(v) {\n                if (hasConstructorOf(v, Undefined)) {\n                  _clone[k] = undefined;\n                } else if (v !== undefined) {\n                  _clone[k] = v;\n                }\n\n                return v;\n              };\n\n              if (hasConstructorOf(val, TypesonPromise)) {\n                revivalPromises.push(val.then(function (ret) {\n                  return set(ret);\n                }));\n              } else {\n                set(val);\n              }\n            });\n            value = _clone; // Try to resolve cyclic reference as soon as available\n\n            while (keyPathResolutions.length) {\n              var _keyPathResolutions$ = _slicedToArray(keyPathResolutions[0], 4),\n                  _target = _keyPathResolutions$[0],\n                  keyPath = _keyPathResolutions$[1],\n                  _clone2 = _keyPathResolutions$[2],\n                  k = _keyPathResolutions$[3];\n\n              var val = getByKeyPath(_target, keyPath); // Typeson.Undefined not expected here as not cyclic or\n              //   `undefined`\n\n              if (val !== undefined) {\n                _clone2[k] = val;\n              } else {\n                break;\n              }\n\n              keyPathResolutions.splice(0, 1);\n            }\n          }\n\n          if (!type) {\n            return value;\n          }\n\n          if (type === '#') {\n            var _ret = getByKeyPath(target, value.slice(1));\n\n            if (_ret === undefined) {\n              // Cyclic reference not yet available\n              keyPathResolutions.push([target, value.slice(1), clone, key]);\n            }\n\n            return _ret;\n          } // `type` can be an array here\n\n\n          return [].concat(type).reduce(function reducer(val, typ) {\n            if (hasConstructorOf(val, TypesonPromise)) {\n              return val.then(function (v) {\n                // TypesonPromise here too\n                return reducer(v, typ);\n              });\n            }\n\n            return executeReviver(typ, val);\n          }, value);\n        }\n        /**\n         *\n         * @param {Any} retrn\n         * @returns {undefined|Any}\n         */\n\n\n        function checkUndefined(retrn) {\n          return hasConstructorOf(retrn, Undefined) ? undefined : retrn;\n        }\n\n        var possibleTypesonPromise = revivePlainObjects();\n        var ret;\n\n        if (hasConstructorOf(possibleTypesonPromise, TypesonPromise)) {\n          ret = possibleTypesonPromise.then(function () {\n            return obj;\n          });\n        } else {\n          ret = _revive('', obj, null);\n\n          if (revivalPromises.length) {\n            // Ensure children resolved\n            ret = TypesonPromise.resolve(ret).then(function (r) {\n              return TypesonPromise.all([// May be a TypesonPromise or not\n              r].concat(revivalPromises));\n            }).then(function (_ref9) {\n              var _ref10 = _slicedToArray(_ref9, 1),\n                  r = _ref10[0];\n\n              return r;\n            });\n          }\n        }\n\n        return isThenable(ret) ? sync && opts.throwOnBadSyncType ? function () {\n          throw new TypeError('Sync method requested but async result obtained');\n        }() : hasConstructorOf(ret, TypesonPromise) ? ret.p.then(checkUndefined) : ret : !sync && opts.throwOnBadSyncType ? function () {\n          throw new TypeError('Async method requested but sync result obtained');\n        }() : sync ? checkUndefined(ret) : Promise.resolve(checkUndefined(ret));\n      }\n      /**\n       * Also sync but throws on non-sync result.\n       * @param {Any} obj\n       * @param {object} opts\n       * @returns {Any}\n       */\n\n    }, {\n      key: \"reviveSync\",\n      value: function reviveSync(obj, opts) {\n        return this.revive(obj, _objectSpread2({\n          throwOnBadSyncType: true\n        }, opts, {\n          sync: true\n        }));\n      }\n      /**\n      * @param {Any} obj\n      * @param {object} opts\n      * @returns {Promise} Resolves to `*`\n      */\n\n    }, {\n      key: \"reviveAsync\",\n      value: function reviveAsync(obj, opts) {\n        return this.revive(obj, _objectSpread2({\n          throwOnBadSyncType: true\n        }, opts, {\n          sync: false\n        }));\n      }\n      /**\n       * Register types.\n       * For examples on how to use this method, see\n       *   {@link https://github.com/dfahlander/typeson-registry/tree/master/types}.\n       * @param {object.<string,Function[]>[]} typeSpecSets - Types and\n       *   their functions [test, encapsulate, revive];\n       * @param {object} opts\n       * @returns {Typeson}\n       */\n\n    }, {\n      key: \"register\",\n      value: function register(typeSpecSets, opts) {\n        opts = opts || {};\n        [].concat(typeSpecSets).forEach(function R(typeSpec) {\n          var _this = this;\n\n          // Allow arrays of arrays of arrays...\n          if (isArray(typeSpec)) {\n            return typeSpec.map(function (typSpec) {\n              return R.call(_this, typSpec);\n            });\n          }\n\n          typeSpec && keys(typeSpec).forEach(function (typeId) {\n            if (typeId === '#') {\n              throw new TypeError('# cannot be used as a type name as it is reserved ' + 'for cyclic objects');\n            } else if (Typeson.JSON_TYPES.includes(typeId)) {\n              throw new TypeError('Plain JSON object types are reserved as type names');\n            }\n\n            var spec = typeSpec[typeId];\n            var replacers = spec && spec.testPlainObjects ? this.plainObjectReplacers : this.nonplainObjectReplacers;\n            var existingReplacer = replacers.filter(function (r) {\n              return r.type === typeId;\n            });\n\n            if (existingReplacer.length) {\n              // Remove existing spec and replace with this one.\n              replacers.splice(replacers.indexOf(existingReplacer[0]), 1);\n              delete this.revivers[typeId];\n              delete this.types[typeId];\n            }\n\n            if (typeof spec === 'function') {\n              // Support registering just a class without replacer/reviver\n              var Class = spec;\n              spec = {\n                test: function test(x) {\n                  return x && x.constructor === Class;\n                },\n                replace: function replace(x) {\n                  return _objectSpread2({}, x);\n                },\n                revive: function revive(x) {\n                  return Object.assign(Object.create(Class.prototype), x);\n                }\n              };\n            } else if (isArray(spec)) {\n              var _spec = spec,\n                  _spec2 = _slicedToArray(_spec, 3),\n                  test = _spec2[0],\n                  replace = _spec2[1],\n                  revive = _spec2[2];\n\n              spec = {\n                test: test,\n                replace: replace,\n                revive: revive\n              };\n            }\n\n            if (!spec || !spec.test) {\n              return;\n            }\n\n            var replacerObj = {\n              type: typeId,\n              test: spec.test.bind(spec)\n            };\n\n            if (spec.replace) {\n              replacerObj.replace = spec.replace.bind(spec);\n            }\n\n            if (spec.replaceAsync) {\n              replacerObj.replaceAsync = spec.replaceAsync.bind(spec);\n            }\n\n            var start = typeof opts.fallback === 'number' ? opts.fallback : opts.fallback ? 0 : Infinity;\n\n            if (spec.testPlainObjects) {\n              this.plainObjectReplacers.splice(start, 0, replacerObj);\n            } else {\n              this.nonplainObjectReplacers.splice(start, 0, replacerObj);\n            } // Todo: We might consider a testAsync type\n\n\n            if (spec.revive || spec.reviveAsync) {\n              var reviverObj = {};\n\n              if (spec.revive) {\n                reviverObj.revive = spec.revive.bind(spec);\n              }\n\n              if (spec.reviveAsync) {\n                reviverObj.reviveAsync = spec.reviveAsync.bind(spec);\n              }\n\n              this.revivers[typeId] = [reviverObj, {\n                plain: spec.testPlainObjects\n              }];\n            } // Record to be retrieved via public types property.\n\n\n            this.types[typeId] = spec;\n          }, this);\n        }, this);\n        return this;\n      }\n    }]);\n\n    return Typeson;\n  }();\n  /**\n   * We keep this function minimized so if using two instances of this\n   * library, where one is minimized and one is not, it will still work\n   * with `hasConstructorOf`.\n   * @class\n   */\n\n\n  var Undefined = function Undefined() {\n    _classCallCheck(this, Undefined);\n  }; // eslint-disable-line space-before-blocks\n\n\n  Undefined.__typeson__type__ = 'TypesonUndefined'; // The following provide classes meant to avoid clashes with other values\n  // To insist `undefined` should be added\n\n  Typeson.Undefined = Undefined; // To support async encapsulation/stringification\n\n  Typeson.Promise = TypesonPromise; // Some fundamental type-checking utilities\n\n  Typeson.isThenable = isThenable;\n  Typeson.toStringTag = toStringTag;\n  Typeson.hasConstructorOf = hasConstructorOf;\n  Typeson.isObject = isObject;\n  Typeson.isPlainObject = isPlainObject;\n  Typeson.isUserObject = isUserObject;\n  Typeson.escapeKeyPathComponent = escapeKeyPathComponent;\n  Typeson.unescapeKeyPathComponent = unescapeKeyPathComponent;\n  Typeson.getByKeyPath = getByKeyPath;\n  Typeson.getJSONType = getJSONType;\n  Typeson.JSON_TYPES = ['null', 'boolean', 'number', 'string', 'array', 'object'];\n\n  return Typeson;\n\n})));\n","function _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    if (enumerableOnly) symbols = symbols.filter(function (sym) {\n      return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n    });\n    keys.push.apply(keys, symbols);\n  }\n\n  return keys;\n}\n\nfunction _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n\n    if (i % 2) {\n      ownKeys(Object(source), true).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n\n  return target;\n}\n\nfunction _slicedToArray(arr, i) {\n  return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _toConsumableArray(arr) {\n  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n  if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n  var _e = undefined;\n\n  try {\n    for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n\n      if (i && _arr.length === i) break;\n    }\n  } catch (err) {\n    _d = true;\n    _e = err;\n  } finally {\n    try {\n      if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n    } finally {\n      if (_d) throw _e;\n    }\n  }\n\n  return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n  return arr2;\n}\n\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\n/**\n* @callback TypesonFulfilled\n* @returns {Promise<any>|any}\n*/\n\n/**\n* @callback TypesonRejected\n* @returns {Promise<any>|any}\n*/\n\n/**\n * @callback TypesonResolve\n * @param {any} value\n * @returns {Promise<any>}\n */\n\n/**\n * @callback TypesonReject\n * @param {Error|any} error\n * @returns {Promise<any>}\n */\n\n/**\n * @callback TypesonResolveReject\n * @param {TypesonResolve} typesonResolve\n * @param {TypesonReject} typesonReject\n * @returns {Promise<any>}\n */\n\n/* eslint-disable block-spacing, space-before-function-paren,\n  space-before-blocks, space-infix-ops, semi, promise/avoid-new,\n  jsdoc/require-jsdoc */\n\n/**\n * We keep this function minimized so if using two instances of this\n *   library, where one is minimized and one is not, it will still work\n *   with `hasConstructorOf`.\n * With ES6 classes, we may be able to simply use `class TypesonPromise\n *   extends Promise` and add a string tag for detection.\n * @param {TypesonResolveReject} f\n */\nvar TypesonPromise = function TypesonPromise(f) {\n  _classCallCheck(this, TypesonPromise);\n\n  this.p = new Promise(f);\n};\n/* eslint-enable block-spacing, space-before-function-paren,\n  space-before-blocks, space-infix-ops, semi, promise/avoid-new,\n  jsdoc/require-jsdoc */\n// eslint-disable-next-line max-len\n// class TypesonPromise extends Promise {get[Symbol.toStringTag](){return 'TypesonPromise'};} // eslint-disable-line keyword-spacing, space-before-function-paren, space-before-blocks, block-spacing, semi\n\n\nTypesonPromise.__typeson__type__ = 'TypesonPromise'; // Note: core-js-bundle provides a `Symbol` polyfill\n\n/* istanbul ignore else */\n\nif (typeof Symbol !== 'undefined') {\n  // Ensure `isUserObject` will return `false` for `TypesonPromise`\n  TypesonPromise.prototype[Symbol.toStringTag] = 'TypesonPromise';\n}\n/**\n *\n * @param {TypesonFulfilled} [onFulfilled]\n * @param {TypesonRejected} [onRejected]\n * @returns {TypesonPromise}\n */\n\n\nTypesonPromise.prototype.then = function (onFulfilled, onRejected) {\n  var _this = this;\n\n  return new TypesonPromise(function (typesonResolve, typesonReject) {\n    // eslint-disable-next-line promise/catch-or-return\n    _this.p.then(function (res) {\n      // eslint-disable-next-line promise/always-return\n      typesonResolve(onFulfilled ? onFulfilled(res) : res);\n    })[\"catch\"](function (res) {\n      return onRejected ? onRejected(res) : Promise.reject(res);\n    }).then(typesonResolve, typesonReject);\n  });\n};\n/**\n *\n * @param {TypesonRejected} onRejected\n * @returns {TypesonPromise}\n */\n\n\nTypesonPromise.prototype[\"catch\"] = function (onRejected) {\n  return this.then(null, onRejected);\n};\n/**\n *\n * @param {any} v\n * @returns {TypesonPromise}\n */\n\n\nTypesonPromise.resolve = function (v) {\n  return new TypesonPromise(function (typesonResolve) {\n    typesonResolve(v);\n  });\n};\n/**\n *\n * @param {any} v\n * @returns {TypesonPromise}\n */\n\n\nTypesonPromise.reject = function (v) {\n  return new TypesonPromise(function (typesonResolve, typesonReject) {\n    typesonReject(v);\n  });\n};\n\n['all', 'race'].forEach(function (meth) {\n  /**\n   *\n   * @param {Promise<any>[]} promArr\n   * @returns {TypesonPromise}\n   */\n  TypesonPromise[meth] = function (promArr) {\n    return new TypesonPromise(function (typesonResolve, typesonReject) {\n      // eslint-disable-next-line promise/catch-or-return\n      Promise[meth](promArr.map(function (prom) {\n        return prom && prom.constructor && prom.constructor.__typeson__type__ === 'TypesonPromise' ? prom.p : prom;\n      })).then(typesonResolve, typesonReject);\n    });\n  };\n});\n\nvar _ref = {},\n    toStr = _ref.toString,\n    hasOwn$1 = {}.hasOwnProperty,\n    getProto = Object.getPrototypeOf,\n    fnToString = hasOwn$1.toString;\n/**\n * Second argument not in use internally, but provided for utility.\n * @param {any} v\n * @param {boolean} catchCheck\n * @returns {boolean}\n */\n\nfunction isThenable(v, catchCheck) {\n  return isObject(v) && typeof v.then === 'function' && (!catchCheck || typeof v[\"catch\"] === 'function');\n}\n/**\n *\n * @param {any} val\n * @returns {string}\n */\n\n\nfunction toStringTag(val) {\n  return toStr.call(val).slice(8, -1);\n}\n/**\n * This function is dependent on both constructors\n *   being identical so any minimization is expected of both.\n * @param {any} a\n * @param {GenericFunction} b\n * @returns {boolean}\n */\n\n\nfunction hasConstructorOf(a, b) {\n  if (!a || _typeof(a) !== 'object') {\n    return false;\n  }\n\n  var proto = getProto(a);\n\n  if (!proto) {\n    return b === null;\n  }\n\n  var Ctor = hasOwn$1.call(proto, 'constructor') && proto.constructor;\n\n  if (typeof Ctor !== 'function') {\n    return b === null;\n  }\n\n  if (b === Ctor) {\n    return true;\n  }\n\n  if (b !== null && fnToString.call(Ctor) === fnToString.call(b)) {\n    return true;\n  }\n\n  if (typeof b === 'function' && typeof Ctor.__typeson__type__ === 'string' && Ctor.__typeson__type__ === b.__typeson__type__) {\n    return true;\n  }\n\n  return false;\n}\n/**\n *\n * @param {any} val\n * @returns {boolean}\n */\n\n\nfunction isPlainObject(val) {\n  // Mirrors jQuery's\n  if (!val || toStringTag(val) !== 'Object') {\n    return false;\n  }\n\n  var proto = getProto(val);\n\n  if (!proto) {\n    // `Object.create(null)`\n    return true;\n  }\n\n  return hasConstructorOf(val, Object);\n}\n/**\n *\n * @param {any} val\n * @returns {boolean}\n */\n\n\nfunction isUserObject(val) {\n  if (!val || toStringTag(val) !== 'Object') {\n    return false;\n  }\n\n  var proto = getProto(val);\n\n  if (!proto) {\n    // `Object.create(null)`\n    return true;\n  }\n\n  return hasConstructorOf(val, Object) || isUserObject(proto);\n}\n/**\n *\n * @param {any} v\n * @returns {boolean}\n */\n\n\nfunction isObject(v) {\n  return v && _typeof(v) === 'object';\n}\n/**\n *\n * @param {string} keyPathComponent\n * @returns {string}\n */\n\n\nfunction escapeKeyPathComponent(keyPathComponent) {\n  return keyPathComponent.replace(/~/g, '~0').replace(/\\./g, '~1');\n}\n/**\n *\n * @param {string} keyPathComponent\n * @returns {string}\n */\n\n\nfunction unescapeKeyPathComponent(keyPathComponent) {\n  return keyPathComponent.replace(/~1/g, '.').replace(/~0/g, '~');\n}\n/**\n * @param {PlainObject|GenericArray} obj\n * @param {string} keyPath\n * @returns {any}\n */\n\n\nfunction getByKeyPath(obj, keyPath) {\n  if (keyPath === '') {\n    return obj;\n  }\n\n  var period = keyPath.indexOf('.');\n\n  if (period > -1) {\n    var innerObj = obj[unescapeKeyPathComponent(keyPath.slice(0, period))];\n    return innerObj === undefined ? undefined : getByKeyPath(innerObj, keyPath.slice(period + 1));\n  }\n\n  return obj[unescapeKeyPathComponent(keyPath)];\n}\n/**\n *\n * @param {PlainObject} obj\n * @param {string} keyPath\n * @param {any} value\n * @returns {any}\n */\n\n\nfunction setAtKeyPath(obj, keyPath, value) {\n  if (keyPath === '') {\n    return value;\n  }\n\n  var period = keyPath.indexOf('.');\n\n  if (period > -1) {\n    var innerObj = obj[unescapeKeyPathComponent(keyPath.slice(0, period))];\n    return setAtKeyPath(innerObj, keyPath.slice(period + 1), value);\n  }\n\n  obj[unescapeKeyPathComponent(keyPath)] = value;\n  return obj;\n}\n/**\n *\n * @param {external:JSON} value\n * @returns {\"null\"|\"array\"|\"undefined\"|\"boolean\"|\"number\"|\"string\"|\n *  \"object\"|\"symbol\"}\n */\n\n\nfunction getJSONType(value) {\n  return value === null ? 'null' : Array.isArray(value) ? 'array' : _typeof(value);\n}\n\nfunction _await(value, then, direct) {\n  if (direct) {\n    return then ? then(value) : value;\n  }\n\n  if (!value || !value.then) {\n    value = Promise.resolve(value);\n  }\n\n  return then ? value.then(then) : value;\n}\n\nvar keys = Object.keys,\n    isArray = Array.isArray,\n    hasOwn = {}.hasOwnProperty,\n    internalStateObjPropsToIgnore = ['type', 'replaced', 'iterateIn', 'iterateUnsetNumeric'];\n/**\n * Handle plain object revivers first so reference setting can use\n * revived type (e.g., array instead of object); assumes revived\n * has same structure or will otherwise break subsequent references.\n * @param {PlainObjectType} a\n * @param {PlainObjectType} b\n * @returns {1|-1|boolean}\n */\n\nfunction _async(f) {\n  return function () {\n    for (var args = [], i = 0; i < arguments.length; i++) {\n      args[i] = arguments[i];\n    }\n\n    try {\n      return Promise.resolve(f.apply(this, args));\n    } catch (e) {\n      return Promise.reject(e);\n    }\n  };\n}\n/**\n * @callback Tester\n * @param {any} value\n * @param {StateObject} stateobj\n * @returns {boolean}\n */\n\n/**\n* @callback Replacer\n* @param {any} value\n* @param {StateObject} stateObj\n* @returns {any} Should be JSON-stringifiable\n*/\n\n/**\n* @callback Reviver\n* @param {JSON} value\n* @param {StateObject} stateObj\n* @returns {any}\n*/\n\n/**\n* @typedef {PlainObject} TypesonOptions\n* @property {boolean} stringification Auto-set by `stringify`\n*/\n\n/**\n * An instance of this class can be used to call `stringify()` and `parse()`.\n * Typeson resolves cyclic references by default. Can also be extended to\n * support custom types using the register() method.\n *\n * @class\n * @param {{cyclic: boolean}} [options] - if cyclic (default true),\n *   cyclic references will be handled gracefully.\n */\n\n\nfunction _invoke(body, then) {\n  var result = body();\n\n  if (result && result.then) {\n    return result.then(then);\n  }\n\n  return then(result);\n}\n\nfunction nestedPathsFirst(a, b) {\n  if (a.keypath === '') {\n    return -1;\n  }\n\n  var as = a.keypath.match(/\\./g) || 0;\n  var bs = b.keypath.match(/\\./g) || 0;\n\n  if (as) {\n    as = as.length;\n  }\n\n  if (bs) {\n    bs = bs.length;\n  }\n\n  return as > bs ? -1 : as < bs ? 1 : a.keypath < b.keypath ? -1 : a.keypath > b.keypath;\n}\n\nvar Typeson = /*#__PURE__*/function () {\n  /**\n   * @param {TypesonOptions} options\n   */\n  function Typeson(options) {\n    _classCallCheck(this, Typeson);\n\n    this.options = options; // Replacers signature: replace (value). Returns falsy if not\n    //   replacing. Otherwise ['Date', value.getTime()]\n\n    this.plainObjectReplacers = [];\n    this.nonplainObjectReplacers = []; // Revivers: [{type => reviver}, {plain: boolean}].\n    //   Sample: [{'Date': value => new Date(value)}, {plain: false}]\n\n    this.revivers = {};\n    /** Types registered via `register()`. */\n\n    this.types = {};\n  }\n  /**\n  * @typedef {null|boolean|number|string|GenericArray|PlainObject} JSON\n  */\n\n  /**\n  * @callback JSONReplacer\n  * @param {\"\"|string} key\n  * @param {JSON} value\n  * @returns {number|string|boolean|null|PlainObject|undefined}\n  * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#The%20replacer%20parameter\n  */\n\n  /**\n   * Serialize given object to Typeson.\n   * Initial arguments work identical to those of `JSON.stringify`.\n   * The `replacer` argument has nothing to do with our replacers.\n   * @param {any} obj\n   * @param {JSONReplacer|string[]} replacer\n   * @param {number|string} space\n   * @param {TypesonOptions} opts\n   * @returns {string|Promise<string>} Promise resolves to a string\n   */\n\n\n  _createClass(Typeson, [{\n    key: \"stringify\",\n    value: function stringify(obj, replacer, space, opts) {\n      opts = _objectSpread2(_objectSpread2(_objectSpread2({}, this.options), opts), {}, {\n        stringification: true\n      });\n      var encapsulated = this.encapsulate(obj, null, opts);\n\n      if (isArray(encapsulated)) {\n        return JSON.stringify(encapsulated[0], replacer, space);\n      }\n\n      return encapsulated.then(function (res) {\n        return JSON.stringify(res, replacer, space);\n      });\n    }\n    /**\n     * Also sync but throws on non-sync result.\n     * @param {any} obj\n     * @param {JSONReplacer|string[]} replacer\n     * @param {number|string} space\n     * @param {TypesonOptions} opts\n     * @returns {string}\n     */\n\n  }, {\n    key: \"stringifySync\",\n    value: function stringifySync(obj, replacer, space, opts) {\n      return this.stringify(obj, replacer, space, _objectSpread2(_objectSpread2({\n        throwOnBadSyncType: true\n      }, opts), {}, {\n        sync: true\n      }));\n    }\n    /**\n     *\n     * @param {any} obj\n     * @param {JSONReplacer|string[]} replacer\n     * @param {number|string} space\n     * @param {TypesonOptions} opts\n     * @returns {Promise<string>}\n     */\n\n  }, {\n    key: \"stringifyAsync\",\n    value: function stringifyAsync(obj, replacer, space, opts) {\n      return this.stringify(obj, replacer, space, _objectSpread2(_objectSpread2({\n        throwOnBadSyncType: true\n      }, opts), {}, {\n        sync: false\n      }));\n    }\n    /**\n    * @callback JSONReviver\n    * @param {string} key\n    * @param {JSON} value\n    * @returns {JSON}\n    */\n\n    /**\n     * Parse Typeson back into an obejct.\n     * Initial arguments works identical to those of `JSON.parse()`.\n     * @param {string} text\n     * @param {JSONReviver} reviver This JSON reviver has nothing to do with\n     *   our revivers.\n     * @param {TypesonOptions} opts\n     * @returns {external:JSON}\n     */\n\n  }, {\n    key: \"parse\",\n    value: function parse(text, reviver, opts) {\n      opts = _objectSpread2(_objectSpread2(_objectSpread2({}, this.options), opts), {}, {\n        parse: true\n      });\n      return this.revive(JSON.parse(text, reviver), opts);\n    }\n    /**\n    * Also sync but throws on non-sync result.\n    * @param {string} text\n    * @param {JSONReviver} reviver This JSON reviver has nothing to do with\n    *   our revivers.\n    * @param {TypesonOptions} opts\n    * @returns {external:JSON}\n    */\n\n  }, {\n    key: \"parseSync\",\n    value: function parseSync(text, reviver, opts) {\n      return this.parse(text, reviver, _objectSpread2(_objectSpread2({\n        throwOnBadSyncType: true\n      }, opts), {}, {\n        sync: true\n      }));\n    }\n    /**\n    * @param {string} text\n    * @param {JSONReviver} reviver This JSON reviver has nothing to do with\n    *   our revivers.\n    * @param {TypesonOptions} opts\n    * @returns {Promise<external:JSON>} Resolves to `external:JSON`\n    */\n\n  }, {\n    key: \"parseAsync\",\n    value: function parseAsync(text, reviver, opts) {\n      return this.parse(text, reviver, _objectSpread2(_objectSpread2({\n        throwOnBadSyncType: true\n      }, opts), {}, {\n        sync: false\n      }));\n    }\n    /**\n    * @typedef {} StateObject\n    */\n\n    /**\n     *\n     * @param {any} obj\n     * @param {StateObject} stateObj\n     * @param {TypesonOptions} [opts={}]\n     * @returns {string[]|false}\n     */\n\n  }, {\n    key: \"specialTypeNames\",\n    value: function specialTypeNames(obj, stateObj) {\n      var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      opts.returnTypeNames = true;\n      return this.encapsulate(obj, stateObj, opts);\n    }\n    /**\n     *\n     * @param {any} obj\n     * @param {PlainObject} stateObj\n     * @param {PlainObject} [opts={}]\n     * @returns {Promise<any>|GenericArray|PlainObject|string|false}\n     */\n\n  }, {\n    key: \"rootTypeName\",\n    value: function rootTypeName(obj, stateObj) {\n      var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      opts.iterateNone = true;\n      return this.encapsulate(obj, stateObj, opts);\n    }\n    /**\n     * Encapsulate a complex object into a plain Object by replacing\n     * registered types with plain objects representing the types data.\n     *\n     * This method is used internally by `Typeson.stringify()`.\n     * @param {any} obj - Object to encapsulate.\n     * @param {PlainObject} stateObj\n     * @param {PlainObject} opts\n     * @returns {Promise<any>|GenericArray|PlainObject|string|false}\n     */\n\n  }, {\n    key: \"encapsulate\",\n    value: function encapsulate(obj, stateObj, opts) {\n      /**\n       *\n       * @param {any} ret\n       * @param {GenericArray} promisesData\n       * @returns {Promise<any>}\n       */\n      var checkPromises = _async(function (ret, promisesData) {\n        return _await(Promise.all(promisesData.map(function (pd) {\n          return pd[1].p;\n        })), function (promResults) {\n          return _await(Promise.all(promResults.map(_async(function (promResult) {\n            var _exit = false;\n            var newPromisesData = [];\n\n            var _promisesData$splice = promisesData.splice(0, 1),\n                _promisesData$splice2 = _slicedToArray(_promisesData$splice, 1),\n                prData = _promisesData$splice2[0];\n\n            var _prData = _slicedToArray(prData, 7),\n                keyPath = _prData[0],\n                cyclic = _prData[2],\n                stateObj = _prData[3],\n                parentObj = _prData[4],\n                key = _prData[5],\n                detectedType = _prData[6];\n\n            var encaps = _encapsulate(keyPath, promResult, cyclic, stateObj, newPromisesData, true, detectedType);\n\n            var isTypesonPromise = hasConstructorOf(encaps, TypesonPromise); // Handle case where an embedded custom type itself\n            //   returns a `Typeson.Promise`\n\n            return _invoke(function () {\n              if (keyPath && isTypesonPromise) {\n                return _await(encaps.p, function (encaps2) {\n                  parentObj[key] = encaps2;\n                  _exit = true;\n                  return checkPromises(ret, newPromisesData);\n                });\n              }\n            }, function (_result) {\n              if (_exit) return _result;\n\n              if (keyPath) {\n                parentObj[key] = encaps;\n              } else if (isTypesonPromise) {\n                ret = encaps.p;\n              } else {\n                // If this is itself a `Typeson.Promise` (because the\n                //   original value supplied was a `Promise` or\n                //   because the supplied custom type value resolved\n                //   to one), returning it below will be fine since\n                //   a `Promise` is expected anyways given current\n                //   config (and if not a `Promise`, it will be ready\n                //   as the resolve value)\n                ret = encaps;\n              }\n\n              return checkPromises(ret, newPromisesData);\n            });\n          }))), function () {\n            return ret;\n          });\n        });\n      });\n      /**\n      * @typedef {PlainObject} OwnKeysObject\n      * @property {boolean} ownKeys\n      */\n\n      /**\n      * @callback BuiltinStateObjectPropertiesCallback\n      * @returns {void}\n      */\n\n      /**\n       *\n       * @param {StateObject} stateObj\n       * @param {OwnKeysObject} ownKeysObj\n       * @param {BuiltinStateObjectPropertiesCallback} cb\n       * @returns {undefined}\n       */\n\n\n      opts = _objectSpread2(_objectSpread2({\n        sync: true\n      }, this.options), opts);\n      var _opts = opts,\n          sync = _opts.sync;\n      var that = this,\n          types = {},\n          refObjs = [],\n          // For checking cyclic references\n      refKeys = [],\n          // For checking cyclic references\n      promisesDataRoot = []; // Clone the object deeply while at the same time replacing any\n      //   special types or cyclic reference:\n\n      var cyclic = 'cyclic' in opts ? opts.cyclic : true;\n      var _opts2 = opts,\n          encapsulateObserver = _opts2.encapsulateObserver;\n\n      var ret = _encapsulate('', obj, cyclic, stateObj || {}, promisesDataRoot);\n      /**\n       *\n       * @param {any} ret\n       * @returns {GenericArray|PlainObject|string|false}\n       */\n\n\n      function finish(ret) {\n        // Add `$types` to result only if we ever bumped into a\n        //  special type (or special case where object has own `$types`)\n        var typeNames = Object.values(types);\n\n        if (opts.iterateNone) {\n          if (typeNames.length) {\n            return typeNames[0];\n          }\n\n          return Typeson.getJSONType(ret);\n        }\n\n        if (typeNames.length) {\n          if (opts.returnTypeNames) {\n            return _toConsumableArray(new Set(typeNames));\n          } // Special if array (or a primitive) was serialized\n          //   because JSON would ignore custom `$types` prop on it\n\n\n          if (!ret || !isPlainObject(ret) || // Also need to handle if this is an object with its\n          //   own `$types` property (to avoid ambiguity)\n          hasOwn.call(ret, '$types')) {\n            ret = {\n              $: ret,\n              $types: {\n                $: types\n              }\n            };\n          } else {\n            ret.$types = types;\n          } // No special types\n\n        } else if (isObject(ret) && hasOwn.call(ret, '$types')) {\n          ret = {\n            $: ret,\n            $types: true\n          };\n        }\n\n        if (opts.returnTypeNames) {\n          return false;\n        }\n\n        return ret;\n      }\n\n      function _adaptBuiltinStateObjectProperties(stateObj, ownKeysObj, cb) {\n        Object.assign(stateObj, ownKeysObj);\n        var vals = internalStateObjPropsToIgnore.map(function (prop) {\n          var tmp = stateObj[prop];\n          delete stateObj[prop];\n          return tmp;\n        }); // eslint-disable-next-line node/callback-return\n\n        cb();\n        internalStateObjPropsToIgnore.forEach(function (prop, i) {\n          stateObj[prop] = vals[i];\n        });\n      }\n      /**\n       *\n       * @param {string} keypath\n       * @param {any} value\n       * @param {boolean} cyclic\n       * @param {PlainObject} stateObj\n       * @param {boolean} promisesData\n       * @param {boolean} resolvingTypesonPromise\n       * @param {string} detectedType\n       * @returns {any}\n       */\n\n\n      function _encapsulate(keypath, value, cyclic, stateObj, promisesData, resolvingTypesonPromise, detectedType) {\n        var ret;\n        var observerData = {};\n\n        var $typeof = _typeof(value);\n\n        var runObserver = encapsulateObserver ? function (obj) {\n          var type = detectedType || stateObj.type || Typeson.getJSONType(value);\n          encapsulateObserver(Object.assign(obj || observerData, {\n            keypath: keypath,\n            value: value,\n            cyclic: cyclic,\n            stateObj: stateObj,\n            promisesData: promisesData,\n            resolvingTypesonPromise: resolvingTypesonPromise,\n            awaitingTypesonPromise: hasConstructorOf(value, TypesonPromise)\n          }, {\n            type: type\n          }));\n        } : null;\n\n        if (['string', 'boolean', 'number', 'undefined'].includes($typeof)) {\n          if (value === undefined || Number.isNaN(value) || value === Number.NEGATIVE_INFINITY || value === Number.POSITIVE_INFINITY) {\n            ret = stateObj.replaced ? value : replace(keypath, value, stateObj, promisesData, false, resolvingTypesonPromise, runObserver);\n\n            if (ret !== value) {\n              observerData = {\n                replaced: ret\n              };\n            }\n          } else {\n            ret = value;\n          }\n\n          if (runObserver) {\n            runObserver();\n          }\n\n          return ret;\n        }\n\n        if (value === null) {\n          if (runObserver) {\n            runObserver();\n          }\n\n          return value;\n        }\n\n        if (cyclic && !stateObj.iterateIn && !stateObj.iterateUnsetNumeric && value && _typeof(value) === 'object') {\n          // Options set to detect cyclic references and be able\n          //   to rewrite them.\n          var refIndex = refObjs.indexOf(value);\n\n          if (refIndex < 0) {\n            if (cyclic === true) {\n              refObjs.push(value);\n              refKeys.push(keypath);\n            }\n          } else {\n            types[keypath] = '#';\n\n            if (runObserver) {\n              runObserver({\n                cyclicKeypath: refKeys[refIndex]\n              });\n            }\n\n            return '#' + refKeys[refIndex];\n          }\n        }\n\n        var isPlainObj = isPlainObject(value);\n        var isArr = isArray(value);\n        var replaced = // Running replace will cause infinite loop as will test\n        //   positive again\n        (isPlainObj || isArr) && (!that.plainObjectReplacers.length || stateObj.replaced) || stateObj.iterateIn ? // Optimization: if plain object and no plain-object\n        //   replacers, don't try finding a replacer\n        value : replace(keypath, value, stateObj, promisesData, isPlainObj || isArr, null, runObserver);\n        var clone;\n\n        if (replaced !== value) {\n          ret = replaced;\n          observerData = {\n            replaced: replaced\n          };\n        } else {\n          // eslint-disable-next-line no-lonely-if\n          if (keypath === '' && hasConstructorOf(value, TypesonPromise)) {\n            promisesData.push([keypath, value, cyclic, stateObj, undefined, undefined, stateObj.type]);\n            ret = value;\n          } else if (isArr && stateObj.iterateIn !== 'object' || stateObj.iterateIn === 'array') {\n            // eslint-disable-next-line unicorn/no-new-array -- Sparse\n            clone = new Array(value.length);\n            observerData = {\n              clone: clone\n            };\n          } else if (!['function', 'symbol'].includes(_typeof(value)) && !('toJSON' in value) && !hasConstructorOf(value, TypesonPromise) && !hasConstructorOf(value, Promise) && !hasConstructorOf(value, ArrayBuffer) || isPlainObj || stateObj.iterateIn === 'object') {\n            clone = {};\n\n            if (stateObj.addLength) {\n              clone.length = value.length;\n            }\n\n            observerData = {\n              clone: clone\n            };\n          } else {\n            ret = value; // Only clone vanilla objects and arrays\n          }\n        }\n\n        if (runObserver) {\n          runObserver();\n        }\n\n        if (opts.iterateNone) {\n          return clone || ret;\n        }\n\n        if (!clone) {\n          return ret;\n        } // Iterate object or array\n\n\n        if (stateObj.iterateIn) {\n          var _loop = function _loop(key) {\n            var ownKeysObj = {\n              ownKeys: hasOwn.call(value, key)\n            };\n\n            _adaptBuiltinStateObjectProperties(stateObj, ownKeysObj, function () {\n              var kp = keypath + (keypath ? '.' : '') + escapeKeyPathComponent(key);\n\n              var val = _encapsulate(kp, value[key], Boolean(cyclic), stateObj, promisesData, resolvingTypesonPromise);\n\n              if (hasConstructorOf(val, TypesonPromise)) {\n                promisesData.push([kp, val, Boolean(cyclic), stateObj, clone, key, stateObj.type]);\n              } else if (val !== undefined) {\n                clone[key] = val;\n              }\n            });\n          };\n\n          // eslint-disable-next-line guard-for-in\n          for (var key in value) {\n            _loop(key);\n          }\n\n          if (runObserver) {\n            runObserver({\n              endIterateIn: true,\n              end: true\n            });\n          }\n        } else {\n          // Note: Non-indexes on arrays won't survive stringify so\n          //  somewhat wasteful for arrays, but so too is iterating\n          //  all numeric indexes on sparse arrays when not wanted\n          //  or filtering own keys for positive integers\n          keys(value).forEach(function (key) {\n            var kp = keypath + (keypath ? '.' : '') + escapeKeyPathComponent(key);\n            var ownKeysObj = {\n              ownKeys: true\n            };\n\n            _adaptBuiltinStateObjectProperties(stateObj, ownKeysObj, function () {\n              var val = _encapsulate(kp, value[key], Boolean(cyclic), stateObj, promisesData, resolvingTypesonPromise);\n\n              if (hasConstructorOf(val, TypesonPromise)) {\n                promisesData.push([kp, val, Boolean(cyclic), stateObj, clone, key, stateObj.type]);\n              } else if (val !== undefined) {\n                clone[key] = val;\n              }\n            });\n          });\n\n          if (runObserver) {\n            runObserver({\n              endIterateOwn: true,\n              end: true\n            });\n          }\n        } // Iterate array for non-own numeric properties (we can't\n        //   replace the prior loop though as it iterates non-integer\n        //   keys)\n\n\n        if (stateObj.iterateUnsetNumeric) {\n          var vl = value.length;\n\n          var _loop2 = function _loop2(i) {\n            if (!(i in value)) {\n              // No need to escape numeric\n              var kp = keypath + (keypath ? '.' : '') + i;\n              var ownKeysObj = {\n                ownKeys: false\n              };\n\n              _adaptBuiltinStateObjectProperties(stateObj, ownKeysObj, function () {\n                var val = _encapsulate(kp, undefined, Boolean(cyclic), stateObj, promisesData, resolvingTypesonPromise);\n\n                if (hasConstructorOf(val, TypesonPromise)) {\n                  promisesData.push([kp, val, Boolean(cyclic), stateObj, clone, i, stateObj.type]);\n                } else if (val !== undefined) {\n                  clone[i] = val;\n                }\n              });\n            }\n          };\n\n          for (var i = 0; i < vl; i++) {\n            _loop2(i);\n          }\n\n          if (runObserver) {\n            runObserver({\n              endIterateUnsetNumeric: true,\n              end: true\n            });\n          }\n        }\n\n        return clone;\n      }\n      /**\n      * @typedef {PlainObject} KeyPathEvent\n      * @property {string} cyclicKeypath\n      */\n\n      /**\n      * @typedef {PlainObject} EndIterateInEvent\n      * @property {boolean} endIterateIn\n      * @property {boolean} end\n      */\n\n      /**\n      * @typedef {PlainObject} EndIterateUnsetNumericEvent\n      * @property {boolean} endIterateUnsetNumeric\n      * @property {boolean} end\n      */\n\n      /**\n      * @typedef {PlainObject} TypeDetectedEvent\n      * @property {boolean} typeDetected\n      */\n\n      /**\n      * @typedef {PlainObject} ReplacingEvent\n      * @property {boolean} replacing\n      */\n\n      /**\n      * @callback Observer\n      * @param {KeyPathEvent|EndIterateInEvent|EndIterateUnsetNumericEvent|\n      * TypeDetectedEvent|ReplacingEvent} [event]\n      * @returns {void}\n      */\n\n      /**\n       *\n       * @param {string} keypath\n       * @param {any} value\n       * @param {PlainObject} stateObj\n       * @param {GenericArray} promisesData\n       * @param {boolean} plainObject\n       * @param {boolean} resolvingTypesonPromise\n       * @param {Observer} [runObserver]\n       * @returns {any}\n       */\n\n\n      function replace(keypath, value, stateObj, promisesData, plainObject, resolvingTypesonPromise, runObserver) {\n        // Encapsulate registered types\n        var replacers = plainObject ? that.plainObjectReplacers : that.nonplainObjectReplacers;\n        var i = replacers.length;\n\n        while (i--) {\n          var replacer = replacers[i];\n\n          if (replacer.test(value, stateObj)) {\n            var type = replacer.type;\n\n            if (that.revivers[type]) {\n              // Record the type only if a corresponding reviver\n              //   exists. This is to support specs where only\n              //   replacement is done.\n              // For example, ensuring deep cloning of the object,\n              //   or replacing a type to its equivalent without\n              //   the need to revive it.\n              var existing = types[keypath]; // type can comprise an array of types (see test\n              //   \"should support intermediate types\")\n\n              types[keypath] = existing ? [type].concat(existing) : type;\n            }\n\n            Object.assign(stateObj, {\n              type: type,\n              replaced: true\n            });\n\n            if ((sync || !replacer.replaceAsync) && !replacer.replace) {\n              if (runObserver) {\n                runObserver({\n                  typeDetected: true\n                });\n              }\n\n              return _encapsulate(keypath, value, cyclic && 'readonly', stateObj, promisesData, resolvingTypesonPromise, type);\n            }\n\n            if (runObserver) {\n              runObserver({\n                replacing: true\n              });\n            } // Now, also traverse the result in case it contains its\n            //   own types to replace\n\n\n            var replaceMethod = sync || !replacer.replaceAsync ? 'replace' : 'replaceAsync';\n            return _encapsulate(keypath, replacer[replaceMethod](value, stateObj), cyclic && 'readonly', stateObj, promisesData, resolvingTypesonPromise, type);\n          }\n        }\n\n        return value;\n      }\n\n      return promisesDataRoot.length ? sync && opts.throwOnBadSyncType ? function () {\n        throw new TypeError('Sync method requested but async result obtained');\n      }() : Promise.resolve(checkPromises(ret, promisesDataRoot)).then(finish) : !sync && opts.throwOnBadSyncType ? function () {\n        throw new TypeError('Async method requested but sync result obtained');\n      }() // If this is a synchronous request for stringification, yet\n      //   a promise is the result, we don't want to resolve leading\n      //   to an async result, so we return an array to avoid\n      //   ambiguity\n      : opts.stringification && sync ? [finish(ret)] : sync ? finish(ret) : Promise.resolve(finish(ret));\n    }\n    /**\n     * Also sync but throws on non-sync result.\n     * @param {any} obj\n     * @param {StateObject} stateObj\n     * @param {TypesonOptions} opts\n     * @returns {any}\n     */\n\n  }, {\n    key: \"encapsulateSync\",\n    value: function encapsulateSync(obj, stateObj, opts) {\n      return this.encapsulate(obj, stateObj, _objectSpread2(_objectSpread2({\n        throwOnBadSyncType: true\n      }, opts), {}, {\n        sync: true\n      }));\n    }\n    /**\n     * @param {any} obj\n     * @param {StateObject} stateObj\n     * @param {TypesonOptions} opts\n     * @returns {any}\n     */\n\n  }, {\n    key: \"encapsulateAsync\",\n    value: function encapsulateAsync(obj, stateObj, opts) {\n      return this.encapsulate(obj, stateObj, _objectSpread2(_objectSpread2({\n        throwOnBadSyncType: true\n      }, opts), {}, {\n        sync: false\n      }));\n    }\n    /**\n     * Revive an encapsulated object.\n     * This method is used internally by `Typeson.parse()`.\n     * @param {PlainObject} obj - Object to revive. If it has `$types` member,\n     *   the properties that are listed there will be replaced with its true\n     *   type instead of just plain objects.\n     * @param {TypesonOptions} opts\n     * @throws TypeError If mismatch between sync/async type and result\n     * @returns {Promise<any>|any} If async, returns a Promise that resolves\n     * to `any`.\n     */\n\n  }, {\n    key: \"revive\",\n    value: function revive(obj, opts) {\n      var types = obj && obj.$types; // No type info added. Revival not needed.\n\n      if (!types) {\n        return obj;\n      } // Object happened to have own `$types` property but with\n      //   no actual types, so we unescape and return that object\n\n\n      if (types === true) {\n        return obj.$;\n      }\n\n      opts = _objectSpread2(_objectSpread2({\n        sync: true\n      }, this.options), opts);\n      var _opts3 = opts,\n          sync = _opts3.sync;\n      var keyPathResolutions = [];\n      var stateObj = {};\n      var ignore$Types = true; // Special when root object is not a trivial Object, it will\n      //   be encapsulated in `$`. It will also be encapsulated in\n      //   `$` if it has its own `$` property to avoid ambiguity\n\n      if (types.$ && isPlainObject(types.$)) {\n        obj = obj.$;\n        types = types.$;\n        ignore$Types = false;\n      }\n\n      var that = this;\n      /**\n       * @callback RevivalReducer\n       * @param {any} value\n       * @param {string} type\n       * @returns {any}\n       */\n\n      /**\n       *\n       * @param {string} type\n       * @param {any} val\n       * @throws {Error}\n       * @returns {any}\n       */\n\n      function executeReviver(type, val) {\n        var _ref = that.revivers[type] || [],\n            _ref2 = _slicedToArray(_ref, 1),\n            reviver = _ref2[0];\n\n        if (!reviver) {\n          throw new Error('Unregistered type: ' + type);\n        } // Only `sync` expected here, as problematic async would\n        //  be missing both `reviver` and `reviverAsync`, and\n        //  encapsulation shouldn't have added types, so\n        //  should have made an early exit\n\n\n        if (sync && !('revive' in reviver)) {\n          // Just return value as is\n          return val;\n        }\n\n        return reviver[sync && reviver.revive ? 'revive' : !sync && reviver.reviveAsync ? 'reviveAsync' : 'revive'](val, stateObj);\n      }\n      /**\n       *\n       * @returns {void|TypesonPromise<void>}\n       */\n\n\n      function revivePlainObjects() {\n        // const references = [];\n        // const reviveTypes = [];\n        var plainObjectTypes = [];\n        Object.entries(types).forEach(function (_ref3) {\n          var _ref4 = _slicedToArray(_ref3, 2),\n              keypath = _ref4[0],\n              type = _ref4[1];\n\n          if (type === '#') {\n            /*\n            references.push({\n                keypath,\n                reference: getByKeyPath(obj, keypath)\n            });\n            */\n            return;\n          }\n\n          [].concat(type).forEach(function (type) {\n            var _ref5 = that.revivers[type] || [null, {}],\n                _ref6 = _slicedToArray(_ref5, 2),\n                plain = _ref6[1].plain;\n\n            if (!plain) {\n              // reviveTypes.push({keypath, type});\n              return;\n            }\n\n            plainObjectTypes.push({\n              keypath: keypath,\n              type: type\n            });\n            delete types[keypath]; // Avoid repeating\n          });\n        });\n\n        if (!plainObjectTypes.length) {\n          return undefined;\n        } // console.log(plainObjectTypes.sort(nestedPathsFirst));\n\n        /**\n        * @typedef {PlainObject} PlainObjectType\n        * @property {string} keypath\n        * @property {string} type\n        */\n\n\n        return plainObjectTypes.sort(nestedPathsFirst).reduce(function reducer(possibleTypesonPromise, _ref7) {\n          var keypath = _ref7.keypath,\n              type = _ref7.type;\n\n          if (isThenable(possibleTypesonPromise)) {\n            return possibleTypesonPromise.then(function (val) {\n              return reducer(val, {\n                keypath: keypath,\n                type: type\n              });\n            });\n          } // console.log('obj', JSON.stringify(keypath), obj);\n\n\n          var val = getByKeyPath(obj, keypath);\n          val = executeReviver(type, val);\n\n          if (hasConstructorOf(val, TypesonPromise)) {\n            return val.then(function (v) {\n              var newVal = setAtKeyPath(obj, keypath, v);\n\n              if (newVal === v) {\n                obj = newVal;\n              }\n\n              return undefined;\n            });\n          }\n\n          var newVal = setAtKeyPath(obj, keypath, val);\n\n          if (newVal === val) {\n            obj = newVal;\n          }\n\n          return undefined;\n        }, undefined // This argument must be explicit\n        ); // references.forEach(({keypath, reference}) => {});\n        // reviveTypes.sort(nestedPathsFirst).forEach(() => {});\n      }\n\n      var revivalPromises = [];\n      /**\n       *\n       * @param {string} keypath\n       * @param {any} value\n       * @param {?(GenericArray|PlainObject)} target\n       * @param {GenericArray|PlainObject} [clone]\n       * @param {string} [key]\n       * @returns {any}\n       */\n\n      function _revive(keypath, value, target, clone, key) {\n        if (ignore$Types && keypath === '$types') {\n          return undefined;\n        }\n\n        var type = types[keypath];\n        var isArr = isArray(value);\n\n        if (isArr || isPlainObject(value)) {\n          // eslint-disable-next-line unicorn/no-new-array -- Sparse\n          var _clone = isArr ? new Array(value.length) : {}; // Iterate object or array\n\n\n          keys(value).forEach(function (k) {\n            var val = _revive(keypath + (keypath ? '.' : '') + escapeKeyPathComponent(k), value[k], target || _clone, _clone, k);\n\n            var set = function set(v) {\n              if (hasConstructorOf(v, Undefined)) {\n                _clone[k] = undefined;\n              } else if (v !== undefined) {\n                _clone[k] = v;\n              }\n\n              return v;\n            };\n\n            if (hasConstructorOf(val, TypesonPromise)) {\n              revivalPromises.push(val.then(function (ret) {\n                return set(ret);\n              }));\n            } else {\n              set(val);\n            }\n          });\n          value = _clone; // Try to resolve cyclic reference as soon as available\n\n          while (keyPathResolutions.length) {\n            var _keyPathResolutions$ = _slicedToArray(keyPathResolutions[0], 4),\n                _target = _keyPathResolutions$[0],\n                keyPath = _keyPathResolutions$[1],\n                _clone2 = _keyPathResolutions$[2],\n                k = _keyPathResolutions$[3];\n\n            var val = getByKeyPath(_target, keyPath); // Typeson.Undefined not expected here as not cyclic or\n            //   `undefined`\n\n            if (val !== undefined) {\n              _clone2[k] = val;\n            } else {\n              break;\n            }\n\n            keyPathResolutions.splice(0, 1);\n          }\n        }\n\n        if (!type) {\n          return value;\n        }\n\n        if (type === '#') {\n          var _ret = getByKeyPath(target, value.slice(1));\n\n          if (_ret === undefined) {\n            // Cyclic reference not yet available\n            keyPathResolutions.push([target, value.slice(1), clone, key]);\n          }\n\n          return _ret;\n        } // `type` can be an array here\n\n\n        return [].concat(type).reduce(function reducer(val, typ) {\n          if (hasConstructorOf(val, TypesonPromise)) {\n            return val.then(function (v) {\n              // TypesonPromise here too\n              return reducer(v, typ);\n            });\n          }\n\n          return executeReviver(typ, val);\n        }, value);\n      }\n      /**\n       *\n       * @param {any} retrn\n       * @returns {undefined|any}\n       */\n\n\n      function checkUndefined(retrn) {\n        return hasConstructorOf(retrn, Undefined) ? undefined : retrn;\n      }\n\n      var possibleTypesonPromise = revivePlainObjects();\n      var ret;\n\n      if (hasConstructorOf(possibleTypesonPromise, TypesonPromise)) {\n        ret = possibleTypesonPromise.then(function () {\n          return obj;\n        });\n      } else {\n        ret = _revive('', obj, null);\n\n        if (revivalPromises.length) {\n          // Ensure children resolved\n          ret = TypesonPromise.resolve(ret).then(function (r) {\n            return TypesonPromise.all([// May be a TypesonPromise or not\n            r].concat(revivalPromises));\n          }).then(function (_ref8) {\n            var _ref9 = _slicedToArray(_ref8, 1),\n                r = _ref9[0];\n\n            return r;\n          });\n        }\n      }\n\n      return isThenable(ret) ? sync && opts.throwOnBadSyncType ? function () {\n        throw new TypeError('Sync method requested but async result obtained');\n      }() : hasConstructorOf(ret, TypesonPromise) ? ret.p.then(checkUndefined) : ret : !sync && opts.throwOnBadSyncType ? function () {\n        throw new TypeError('Async method requested but sync result obtained');\n      }() : sync ? checkUndefined(ret) : Promise.resolve(checkUndefined(ret));\n    }\n    /**\n     * Also sync but throws on non-sync result.\n     * @param {any} obj\n     * @param {TypesonOptions} opts\n     * @returns {any}\n     */\n\n  }, {\n    key: \"reviveSync\",\n    value: function reviveSync(obj, opts) {\n      return this.revive(obj, _objectSpread2(_objectSpread2({\n        throwOnBadSyncType: true\n      }, opts), {}, {\n        sync: true\n      }));\n    }\n    /**\n    * @param {any} obj\n    * @param {TypesonOptions} opts\n    * @returns {Promise<any>}\n    */\n\n  }, {\n    key: \"reviveAsync\",\n    value: function reviveAsync(obj, opts) {\n      return this.revive(obj, _objectSpread2(_objectSpread2({\n        throwOnBadSyncType: true\n      }, opts), {}, {\n        sync: false\n      }));\n    }\n    /**\n    * @typedef {Tester|Replacer|Reviver} Spec\n    */\n\n    /**\n     * Register types.\n     * For examples on how to use this method, see\n     *   {@link https://github.com/dfahlander/typeson-registry/tree/master/types}.\n     * @param {object<string,Spec[]>[]} typeSpecSets -\n     * Types and their functions [test, encapsulate, revive];\n     * @param {TypesonOptions} opts\n     * @returns {Typeson}\n     */\n\n  }, {\n    key: \"register\",\n    value: function register(typeSpecSets, opts) {\n      opts = opts || {};\n      [].concat(typeSpecSets).forEach(function R(typeSpec) {\n        var _this = this;\n\n        // Allow arrays of arrays of arrays...\n        if (isArray(typeSpec)) {\n          return typeSpec.map(function (typSpec) {\n            return R.call(_this, typSpec);\n          });\n        }\n\n        typeSpec && keys(typeSpec).forEach(function (typeId) {\n          if (typeId === '#') {\n            throw new TypeError('# cannot be used as a type name as it is reserved ' + 'for cyclic objects');\n          } else if (Typeson.JSON_TYPES.includes(typeId)) {\n            throw new TypeError('Plain JSON object types are reserved as type names');\n          }\n\n          var spec = typeSpec[typeId];\n          var replacers = spec && spec.testPlainObjects ? this.plainObjectReplacers : this.nonplainObjectReplacers;\n          var existingReplacer = replacers.filter(function (r) {\n            return r.type === typeId;\n          });\n\n          if (existingReplacer.length) {\n            // Remove existing spec and replace with this one.\n            replacers.splice(replacers.indexOf(existingReplacer[0]), 1);\n            delete this.revivers[typeId];\n            delete this.types[typeId];\n          }\n\n          if (typeof spec === 'function') {\n            // Support registering just a class without replacer/reviver\n            var Class = spec;\n            spec = {\n              test: function test(x) {\n                return x && x.constructor === Class;\n              },\n              replace: function replace(x) {\n                return _objectSpread2({}, x);\n              },\n              revive: function revive(x) {\n                return Object.assign(Object.create(Class.prototype), x);\n              }\n            };\n          } else if (isArray(spec)) {\n            var _spec = spec,\n                _spec2 = _slicedToArray(_spec, 3),\n                test = _spec2[0],\n                replace = _spec2[1],\n                revive = _spec2[2];\n\n            spec = {\n              test: test,\n              replace: replace,\n              revive: revive\n            };\n          }\n\n          if (!spec || !spec.test) {\n            return;\n          }\n\n          var replacerObj = {\n            type: typeId,\n            test: spec.test.bind(spec)\n          };\n\n          if (spec.replace) {\n            replacerObj.replace = spec.replace.bind(spec);\n          }\n\n          if (spec.replaceAsync) {\n            replacerObj.replaceAsync = spec.replaceAsync.bind(spec);\n          }\n\n          var start = typeof opts.fallback === 'number' ? opts.fallback : opts.fallback ? 0 : Number.POSITIVE_INFINITY;\n\n          if (spec.testPlainObjects) {\n            this.plainObjectReplacers.splice(start, 0, replacerObj);\n          } else {\n            this.nonplainObjectReplacers.splice(start, 0, replacerObj);\n          } // Todo: We might consider a testAsync type\n\n\n          if (spec.revive || spec.reviveAsync) {\n            var reviverObj = {};\n\n            if (spec.revive) {\n              reviverObj.revive = spec.revive.bind(spec);\n            }\n\n            if (spec.reviveAsync) {\n              reviverObj.reviveAsync = spec.reviveAsync.bind(spec);\n            }\n\n            this.revivers[typeId] = [reviverObj, {\n              plain: spec.testPlainObjects\n            }];\n          } // Record to be retrieved via public types property.\n\n\n          this.types[typeId] = spec;\n        }, this);\n      }, this);\n      return this;\n    }\n  }]);\n\n  return Typeson;\n}();\n/**\n * We keep this function minimized so if using two instances of this\n * library, where one is minimized and one is not, it will still work\n * with `hasConstructorOf`.\n * @class\n */\n\n\nvar Undefined = function Undefined() {\n  _classCallCheck(this, Undefined);\n}; // eslint-disable-line space-before-blocks\n\n\nUndefined.__typeson__type__ = 'TypesonUndefined'; // The following provide classes meant to avoid clashes with other values\n// To insist `undefined` should be added\n\nTypeson.Undefined = Undefined; // To support async encapsulation/stringification\n\nTypeson.Promise = TypesonPromise; // Some fundamental type-checking utilities\n\nTypeson.isThenable = isThenable;\nTypeson.toStringTag = toStringTag;\nTypeson.hasConstructorOf = hasConstructorOf;\nTypeson.isObject = isObject;\nTypeson.isPlainObject = isPlainObject;\nTypeson.isUserObject = isUserObject;\nTypeson.escapeKeyPathComponent = escapeKeyPathComponent;\nTypeson.unescapeKeyPathComponent = unescapeKeyPathComponent;\nTypeson.getByKeyPath = getByKeyPath;\nTypeson.getJSONType = getJSONType;\nTypeson.JSON_TYPES = ['null', 'boolean', 'number', 'string', 'array', 'object'];\n\nexport default Typeson;\n","/*\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2017 Brett Zamir, 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; // Use a lookup table to find the index.\n\nvar lookup = new Uint8Array(256);\n\nfor (var i = 0; i < chars.length; i++) {\n  lookup[chars.charCodeAt(i)] = i;\n}\n/**\n * @param {ArrayBuffer} arraybuffer\n * @param {Integer} byteOffset\n * @param {Integer} lngth\n * @returns {string}\n */\n\n\nvar encode = function encode(arraybuffer, byteOffset, lngth) {\n  if (lngth === null || lngth === undefined) {\n    lngth = arraybuffer.byteLength; // Needed for Safari\n  }\n\n  var bytes = new Uint8Array(arraybuffer, byteOffset || 0, // Default needed for Safari\n  lngth);\n  var len = bytes.length;\n  var base64 = '';\n\n  for (var _i = 0; _i < len; _i += 3) {\n    base64 += chars[bytes[_i] >> 2];\n    base64 += chars[(bytes[_i] & 3) << 4 | bytes[_i + 1] >> 4];\n    base64 += chars[(bytes[_i + 1] & 15) << 2 | bytes[_i + 2] >> 6];\n    base64 += chars[bytes[_i + 2] & 63];\n  }\n\n  if (len % 3 === 2) {\n    base64 = base64.slice(0, -1) + '=';\n  } else if (len % 3 === 1) {\n    base64 = base64.slice(0, -2) + '==';\n  }\n\n  return base64;\n};\n/**\n * @param {string} base64\n * @returns {ArrayBuffer}\n */\n\nvar decode = function decode(base64) {\n  var len = base64.length;\n  var bufferLength = base64.length * 0.75;\n  var p = 0;\n  var encoded1, encoded2, encoded3, encoded4;\n\n  if (base64[base64.length - 1] === '=') {\n    bufferLength--;\n\n    if (base64[base64.length - 2] === '=') {\n      bufferLength--;\n    }\n  }\n\n  var arraybuffer = new ArrayBuffer(bufferLength),\n      bytes = new Uint8Array(arraybuffer);\n\n  for (var _i2 = 0; _i2 < len; _i2 += 4) {\n    encoded1 = lookup[base64.charCodeAt(_i2)];\n    encoded2 = lookup[base64.charCodeAt(_i2 + 1)];\n    encoded3 = lookup[base64.charCodeAt(_i2 + 2)];\n    encoded4 = lookup[base64.charCodeAt(_i2 + 3)];\n    bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n    bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n    bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n  }\n\n  return arraybuffer;\n};\n\nexport { decode, encode };\n","import Typeson from 'typeson';\n\nconst userObject = {\n    userObject: {\n        test (x, stateObj) { return Typeson.isUserObject(x); },\n        replace (n) { return {...n}; },\n        revive (s) { return s; }\n    }\n};\n\nexport default userObject;\n","const arrayNonindexKeys = [\n    {\n        arrayNonindexKeys: {\n            testPlainObjects: true,\n            test (x, stateObj) {\n                if (Array.isArray(x)) {\n                    if (\n                        // By avoiding serializing arrays into objects which\n                        //  have only positive-integer keys, we reduce\n                        //  size and improve revival performance; arrays with\n                        //  non-index keys will be larger however\n                        Object.keys(x).some((k) => {\n                            //  No need to check for `isNaN` or\n                            //   `isNaN(Number.parseInt())` as `NaN` will be\n                            //   treated as a string.\n                            //  No need to do check as\n                            //   `Number.parseInt(Number())` since scientific\n                            //   notation will be pre-resolved if a number\n                            //   was given, and it will otherwise be a string\n                            return String(Number.parseInt(k)) !== k;\n                        })\n                    ) {\n                        stateObj.iterateIn = 'object';\n                        stateObj.addLength = true;\n                    }\n                    return true;\n                }\n                return false;\n            },\n            replace (a, stateObj) {\n                // Catch sparse undefined\n                stateObj.iterateUnsetNumeric = true;\n                return a;\n            },\n            revive (o) {\n                if (Array.isArray(o)) {\n                    return o;\n                }\n                const arr = [];\n                // No map here as may be a sparse array (including\n                //   with `length` set)\n                // Todo: Reenable when Node `engines` >= 7\n                // Object.entries(o).forEach(([key, val]) => {\n                Object.keys(o).forEach((key) => {\n                    const val = o[key];\n                    arr[key] = val;\n                });\n                return arr;\n            }\n        }\n    },\n    {\n        sparseUndefined: {\n            test (x, stateObj) {\n                return typeof x === 'undefined' && stateObj.ownKeys === false;\n            },\n            replace (n) { return 0; },\n            revive (s) { return undefined; } // Will avoid adding anything\n        }\n    }\n];\n\nexport default arrayNonindexKeys;\n","// This does not preserve `undefined` in sparse arrays; see the `undefined`\n//  or `sparse-undefined` preset\nimport Typeson from 'typeson';\n\nconst undef = {\n    undef: {\n        test (x, stateObj) {\n            return typeof x === 'undefined' &&\n                (stateObj.ownKeys || !('ownKeys' in stateObj));\n        },\n        replace (n) { return 0; },\n        revive (s) {\n            // Will add `undefined` (returning `undefined` would instead\n            //   avoid explicitly setting)\n            return new Typeson.Undefined();\n        }\n    }\n};\n\nexport default undef;\n","// This module is for objectified primitives (such as `new Number(3)` or\n//      `new String(\"foo\")`)\n/* eslint-disable no-new-wrappers, unicorn/new-for-builtins */\nimport Typeson from 'typeson';\n\nconst primitiveObjects = {\n    // String Object (not primitive string which need no type spec)\n    StringObject: {\n        test (x) {\n            return Typeson.toStringTag(x) === 'String' && typeof x === 'object';\n        },\n        replace (s) { return String(s); }, // convert to primitive string\n        revive (s) { return new String(s); } // Revive to an objectified string\n    },\n    // Boolean Object (not primitive boolean which need no type spec)\n    BooleanObject: {\n        test (x) {\n            return Typeson.toStringTag(x) === 'Boolean' &&\n                typeof x === 'object';\n        },\n        replace (b) { return Boolean(b); }, // convert to primitive boolean\n        revive (b) {\n            // Revive to an objectified Boolean\n            return new Boolean(b);\n        }\n    },\n    // Number Object (not primitive number which need no type spec)\n    NumberObject: {\n        test (x) {\n            return Typeson.toStringTag(x) === 'Number' && typeof x === 'object';\n        },\n        replace (n) { return Number(n); }, // convert to primitive number\n        revive (n) { return new Number(n); } // Revive to an objectified number\n    }\n};\n/* eslint-enable no-new-wrappers, unicorn/new-for-builtins */\n\nexport default primitiveObjects;\n","import nan from '../types/nan.js';\nimport infinity from '../types/infinity.js';\nimport NegativeInfinity from '../types/negative-infinity.js';\n\nconst specialNumbers = [\n    nan,\n    infinity,\n    NegativeInfinity\n];\n\nexport default specialNumbers;\n","const nan = {\n    nan: {\n        test (x) { return Number.isNaN(x); },\n        replace (n) { return 'NaN'; },\n        revive (s) { return Number.NaN; }\n    }\n};\n\nexport default nan;\n","const infinity = {\n    infinity: {\n        test (x) { return x === Number.POSITIVE_INFINITY; },\n        replace (n) { return 'Infinity'; },\n        revive (s) { return Number.POSITIVE_INFINITY; }\n    }\n};\n\nexport default infinity;\n","const negativeInfinity = {\n    negativeInfinity: {\n        test (x) { return x === Number.NEGATIVE_INFINITY; },\n        replace (n) { return '-Infinity'; },\n        revive (s) { return Number.NEGATIVE_INFINITY; }\n    }\n};\n\nexport default negativeInfinity;\n","import Typeson from 'typeson';\n\nconst date = {\n    date: {\n        test (x) { return Typeson.toStringTag(x) === 'Date'; },\n        replace (dt) {\n            const time = dt.getTime();\n            if (Number.isNaN(time)) {\n                return 'NaN';\n            }\n            return time;\n        },\n        revive (time) {\n            if (time === 'NaN') {\n                return new Date(Number.NaN);\n            }\n            return new Date(time);\n        }\n    }\n};\n\nexport default date;\n","import Typeson from 'typeson';\n\nconst regexp = {\n    regexp: {\n        test (x) { return Typeson.toStringTag(x) === 'RegExp'; },\n        replace (rexp) {\n            return {\n                source: rexp.source,\n                flags: (rexp.global ? 'g' : '') +\n                    (rexp.ignoreCase ? 'i' : '') +\n                    (rexp.multiline ? 'm' : '') +\n                    (rexp.sticky ? 'y' : '') +\n                    (rexp.unicode ? 'u' : '')\n            };\n        },\n        revive ({source, flags}) { return new RegExp(source, flags); }\n    }\n};\n\nexport default regexp;\n","import Typeson from 'typeson';\n\nconst map = {\n    map: {\n        test (x) { return Typeson.toStringTag(x) === 'Map'; },\n        replace (mp) { return [...mp.entries()]; },\n        revive (entries) { return new Map(entries); }\n    }\n};\n\nexport default map;\n","import Typeson from 'typeson';\n\nconst set = {\n    set: {\n        test (x) { return Typeson.toStringTag(x) === 'Set'; },\n        replace (st) {\n            return [...st.values()];\n        },\n        revive (values) { return new Set(values); }\n    }\n};\n\nexport default set;\n","import Typeson from 'typeson';\nimport {encode, decode} from 'base64-arraybuffer-es6';\n\nconst arraybuffer = {\n    arraybuffer: {\n        test (x) { return Typeson.toStringTag(x) === 'ArrayBuffer'; },\n        replace (b, stateObj) {\n            if (!stateObj.buffers) {\n                stateObj.buffers = [];\n            }\n            const index = stateObj.buffers.indexOf(b);\n            if (index > -1) {\n                return {index};\n            }\n            stateObj.buffers.push(b);\n            return encode(b);\n        },\n        revive (b64, stateObj) {\n            if (!stateObj.buffers) {\n                stateObj.buffers = [];\n            }\n            if (typeof b64 === 'object') {\n                return stateObj.buffers[b64.index];\n            }\n            const buffer = decode(b64);\n            stateObj.buffers.push(buffer);\n            return buffer;\n        }\n    }\n};\n\nexport default arraybuffer;\n\n// See also typed-arrays!\n","/* eslint-env browser, node */\nimport Typeson from 'typeson';\nimport {encode, decode} from 'base64-arraybuffer-es6';\n\n/* istanbul ignore next */\nconst _global = typeof self === 'undefined' ? global : self;\n\nconst typedArrays = {};\n[\n    'Int8Array',\n    'Uint8Array',\n    'Uint8ClampedArray',\n    'Int16Array',\n    'Uint16Array',\n    'Int32Array',\n    'Uint32Array',\n    'Float32Array',\n    'Float64Array'\n].forEach(function (typeName) {\n    const arrType = typeName;\n    const TypedArray = _global[arrType];\n    /* istanbul ignore if */\n    if (!TypedArray) {\n        return;\n    }\n    typedArrays[typeName.toLowerCase()] = {\n        test (x) { return Typeson.toStringTag(x) === arrType; },\n        replace ({buffer, byteOffset, length: l}, stateObj) {\n            if (!stateObj.buffers) {\n                stateObj.buffers = [];\n            }\n            const index = stateObj.buffers.indexOf(buffer);\n            if (index > -1) {\n                return {index, byteOffset, length: l};\n            }\n            stateObj.buffers.push(buffer);\n            return {\n                encoded: encode(buffer),\n                byteOffset,\n                length: l\n            };\n        },\n        revive (b64Obj, stateObj) {\n            if (!stateObj.buffers) {\n                stateObj.buffers = [];\n            }\n            const {byteOffset, length: len, encoded, index} = b64Obj;\n            let buffer;\n            if ('index' in b64Obj) {\n                buffer = stateObj.buffers[index];\n            } else {\n                buffer = decode(encoded);\n                stateObj.buffers.push(buffer);\n            }\n            return new TypedArray(buffer, byteOffset, len);\n        }\n    };\n});\n\nexport default typedArrays;\n","import Typeson from 'typeson';\nimport {encode, decode} from 'base64-arraybuffer-es6';\n\nconst dataview = {\n    dataview: {\n        test (x) { return Typeson.toStringTag(x) === 'DataView'; },\n        replace ({buffer, byteOffset, byteLength}, stateObj) {\n            if (!stateObj.buffers) {\n                stateObj.buffers = [];\n            }\n            const index = stateObj.buffers.indexOf(buffer);\n            if (index > -1) {\n                return {index, byteOffset, byteLength};\n            }\n            stateObj.buffers.push(buffer);\n            return {\n                encoded: encode(buffer),\n                byteOffset,\n                byteLength\n            };\n        },\n        revive (b64Obj, stateObj) {\n            if (!stateObj.buffers) {\n                stateObj.buffers = [];\n            }\n            const {byteOffset, byteLength, encoded, index} = b64Obj;\n            let buffer;\n            if ('index' in b64Obj) {\n                buffer = stateObj.buffers[index];\n            } else {\n                buffer = decode(encoded);\n                stateObj.buffers.push(buffer);\n            }\n            return new DataView(buffer, byteOffset, byteLength);\n        }\n    }\n};\n\nexport default dataview;\n","import Typeson from 'typeson';\n\nconst IntlCollator = {\n    test (x) { return Typeson.hasConstructorOf(x, Intl.Collator); },\n    replace (c) { return c.resolvedOptions(); },\n    revive (options) { return new Intl.Collator(options.locale, options); }\n};\n\nconst IntlDateTimeFormat = {\n    test (x) { return Typeson.hasConstructorOf(x, Intl.DateTimeFormat); },\n    replace (dtf) { return dtf.resolvedOptions(); },\n    revive (options) {\n        return new Intl.DateTimeFormat(options.locale, options);\n    }\n};\n\nconst IntlNumberFormat = {\n    test (x) { return Typeson.hasConstructorOf(x, Intl.NumberFormat); },\n    replace (nf) { return nf.resolvedOptions(); },\n    revive (options) { return new Intl.NumberFormat(options.locale, options); }\n};\n\nconst intlTypes = {\n    IntlCollator,\n    IntlDateTimeFormat,\n    IntlNumberFormat\n};\n\nexport default intlTypes;\n","/**\n * Not currently in use internally, but provided for parity.\n * @param {ArrayBuffer} buf\n * @returns {Uint8Array}\n */\nfunction arraybuffer2string (buf) {\n    return new Uint8Array(buf).reduce(\n        (s, byte) => s + String.fromCharCode(byte), ''\n    );\n}\n\n/**\n *\n * @param {string} str\n * @returns {ArrayBuffer}\n */\nfunction string2arraybuffer (str) {\n    /*\n    // UTF-8 approaches\n    const utf8 = unescape(encodeURIComponent(str));\n    const arr = new Uint8Array(utf8.length);\n    for (let i = 0; i < utf8.length; i++) {\n        arr[i] = utf8.charCodeAt(i);\n    }\n    return arr.buffer;\n\n    const utf8 = [];\n    for (let i = 0; i < str.length; i++) {\n        let charcode = str.charCodeAt(i);\n        if (charcode < 0x80) utf8.push(charcode);\n        else if (charcode < 0x800) {\n            utf8.push(0xc0 | (charcode >> 6),\n                0x80 | (charcode & 0x3f));\n        } else if (charcode < 0xd800 || charcode >= 0xe000) {\n            utf8.push(0xe0 | (charcode >> 12),\n                0x80 | ((charcode >> 6) & 0x3f),\n                0x80 | (charcode & 0x3f));\n        // surrogate pair\n        } else {\n            i++;\n            // UTF-16 encodes 0x10000-0x10FFFF by\n            // subtracting 0x10000 and splitting the\n            // 20 bits of 0x0-0xFFFFF into two halves\n            charcode = 0x10000 + (((charcode & 0x3ff) << 10) |\n                (str.charCodeAt(i) & 0x3ff));\n            utf8.push(0xf0 | (charcode >> 18),\n                0x80 | ((charcode >> 12) & 0x3f),\n                0x80 | ((charcode >> 6) & 0x3f),\n                0x80 | (charcode & 0x3f));\n        }\n    }\n    return utf8;\n    */\n    /*\n    // Working UTF-16 options (equivalents)\n    const buf = new ArrayBuffer(str.length * 2); // 2 bytes for each char\n    const bufView = new Uint16Array(buf);\n    for (let i = 0, strLen = str.length; i < strLen; i++) {\n        bufView[i] = str.charCodeAt(i);\n    }\n    return buf;\n    */\n\n    const array = new Uint8Array(str.length);\n    for (let i = 0; i < str.length; i++) {\n        array[i] = str.charCodeAt(i); // & 0xff;\n    }\n    return array.buffer;\n}\nexport {arraybuffer2string, string2arraybuffer};\n","/* globals XMLHttpRequest, File, FileReader */\nimport Typeson from 'typeson';\nimport {string2arraybuffer} from '../utils/stringArrayBuffer.js';\n\nconst file = {\n    file: {\n        test (x) { return Typeson.toStringTag(x) === 'File'; },\n        replace (f) { // Sync\n            const req = new XMLHttpRequest();\n            req.overrideMimeType('text/plain; charset=x-user-defined');\n            req.open('GET', URL.createObjectURL(f), false); // Sync\n            req.send();\n\n            // Seems not feasible to accurately simulate\n            /* istanbul ignore next */\n            if (req.status !== 200 && req.status !== 0) {\n                throw new Error('Bad File access: ' + req.status);\n            }\n            return {\n                type: f.type,\n                stringContents: req.responseText,\n                name: f.name,\n                lastModified: f.lastModified\n            };\n        },\n        revive ({name, type, stringContents, lastModified}) {\n            return new File([string2arraybuffer(stringContents)], name, {\n                type,\n                lastModified\n            });\n        },\n        replaceAsync (f) {\n            return new Typeson.Promise(function (resolve, reject) {\n                /*\n                if (f.isClosed) { // On MDN, but not in https://w3c.github.io/FileAPI/#dfn-Blob\n                    reject(new Error('The File is closed'));\n                    return;\n                }\n                */\n                const reader = new FileReader();\n                reader.addEventListener('load', function () {\n                    resolve({\n                        type: f.type,\n                        stringContents: reader.result,\n                        name: f.name,\n                        lastModified: f.lastModified\n                    });\n                });\n                // Seems not feasible to accurately simulate\n                /* istanbul ignore next */\n                reader.addEventListener('error', function () {\n                    reject(reader.error);\n                });\n                reader.readAsBinaryString(f);\n            });\n        }\n    }\n};\n\nexport default file;\n","/* globals BigInt */\n\nconst bigint = {\n    bigint: {\n        test (x) {\n            return typeof x === 'bigint';\n        },\n        replace (n) { return String(n); },\n        revive (s) { return BigInt(s); }\n    }\n};\n\nexport default bigint;\n","/* globals BigInt */\nimport Typeson from 'typeson';\n\nconst bigintObject = {\n    bigintObject: {\n        test (x) {\n            return typeof x === 'object' && Typeson.hasConstructorOf(x, BigInt);\n        },\n        replace (n) { return String(n); },\n        revive (s) {\n            // Filed this to avoid error: https://github.com/eslint/eslint/issues/11810\n            // eslint-disable-next-line no-new-object\n            return new Object(BigInt(s));\n        }\n    }\n};\n\nexport default bigintObject;\n","/* globals crypto */\nimport Typeson from 'typeson';\n\nconst cryptokey = {\n    cryptokey: {\n        test (x) {\n            return Typeson.toStringTag(x) === 'CryptoKey' && x.extractable;\n        },\n        replaceAsync (key) {\n            return new Typeson.Promise((resolve, reject) => {\n                // eslint-disable-next-line promise/catch-or-return\n                crypto.subtle.exportKey('jwk', key).catch(\n                    /* eslint-disable promise/prefer-await-to-callbacks */\n                    // istanbul ignore next\n                    (err) => {\n                        /* eslint-enable promise/prefer-await-to-callbacks */\n                        // eslint-disable-next-line max-len\n                        // istanbul ignore next -- Our format should be valid and our key extractable\n                        reject(err);\n                    }\n                // eslint-disable-next-line max-len\n                // eslint-disable-next-line promise/always-return, promise/prefer-await-to-then\n                ).then((jwk) => {\n                    resolve({\n                        jwk,\n                        algorithm: key.algorithm,\n                        usages: key.usages\n                    });\n                });\n            });\n        },\n        revive ({jwk, algorithm, usages}) {\n            return crypto.subtle.importKey('jwk', jwk, algorithm, true, usages);\n        }\n    }\n};\n\nexport default cryptokey;\n","/* This preset includes types for the Structured Cloning Algorithm. */\n\nimport userObject from '../types/user-object.js';\nimport arrayNonindexKeys from './array-nonindex-keys.js';\nimport undef from '../types/undef.js';\nimport primitiveObjects from '../types/primitive-objects.js';\nimport specialNumbers from './special-numbers.js';\nimport date from '../types/date.js';\nimport regexp from '../types/regexp.js';\nimport map from '../types/map.js';\nimport set from '../types/set.js';\nimport arraybuffer from '../types/arraybuffer.js';\nimport typedArrays from '../types/typed-arrays.js';\nimport dataview from '../types/dataview.js';\nimport intlTypes from '../types/intl-types.js';\n\nimport imagedata from '../types/imagedata.js';\nimport imagebitmap from '../types/imagebitmap.js'; // Async return\nimport file from '../types/file.js';\nimport filelist from '../types/filelist.js';\nimport blob from '../types/blob.js';\nimport bigint from '../types/bigint.js';\nimport bigintObject from '../types/bigint-object.js';\n\nimport cryptokey from '../types/cryptokey.js';\n\nconst expObj = [\n    // Todo: Might also register synchronous `ImageBitmap` and\n    //    `Blob`/`File`/`FileList`?\n    // ES5\n    userObject, // Processed last (non-builtin)\n\n    undef,\n    arrayNonindexKeys, primitiveObjects, specialNumbers,\n    date, regexp,\n\n    // Non-built-ins\n    imagedata,\n    imagebitmap, // Async return\n    file,\n    filelist,\n    blob\n].concat(\n    // ES2015 (ES6)\n    /* istanbul ignore next */\n    typeof Map === 'function' ? map : [],\n    /* istanbul ignore next */\n    typeof Set === 'function' ? set : [],\n    /* istanbul ignore next */\n    typeof ArrayBuffer === 'function' ? arraybuffer : [],\n    /* istanbul ignore next */\n    typeof Uint8Array === 'function' ? typedArrays : [],\n    /* istanbul ignore next */\n    typeof DataView === 'function' ? dataview : [],\n    /* istanbul ignore next */\n    typeof Intl !== 'undefined' ? intlTypes : [],\n    /* istanbul ignore next */\n    typeof crypto !== 'undefined' ? cryptokey : [],\n    /* istanbul ignore next */\n    typeof BigInt !== 'undefined' ? [bigint, bigintObject] : []\n);\nexport default expObj;\n","/* globals ImageData */\n// `ImageData` is browser / DOM specific (though `node-canvas` has it\n//   available on `Canvas`).\n\nimport Typeson from 'typeson';\n\nconst imagedata = {\n    imagedata: {\n        test (x) { return Typeson.toStringTag(x) === 'ImageData'; },\n        replace (d) {\n            return {\n                // Ensure `length` gets preserved for revival\n                array: [...d.data],\n                width: d.width,\n                height: d.height\n            };\n        },\n        revive (o) {\n            return new ImageData(\n                new Uint8ClampedArray(o.array), o.width, o.height\n            );\n        }\n    }\n};\n\nexport default imagedata;\n","/* globals createImageBitmap */\n// `ImageBitmap` is browser / DOM specific. It also can only work\n//  same-domain (or CORS)\n\nimport Typeson from 'typeson';\n\nconst imagebitmap = {\n    imagebitmap: {\n        test (x) {\n            return Typeson.toStringTag(x) === 'ImageBitmap' ||\n                // In Node, our polyfill sets the dataset on a canvas\n                //  element as JSDom no longer allows overriding toStringTag\n                (x && x.dataset && x.dataset.toStringTag === 'ImageBitmap');\n        },\n        replace (bm) {\n            const canvas = document.createElement('canvas');\n            const ctx = canvas.getContext('2d');\n            ctx.drawImage(bm, 0, 0);\n            // Although `width` and `height` are part of `ImageBitMap`,\n            //   these will be auto-created for us when reviving with the\n            //   data URL (and they are not settable even if they weren't)\n            // return {\n            //   width: bm.width, height: bm.height, dataURL: canvas.toDataURL()\n            // };\n            return canvas.toDataURL();\n        },\n        revive (o) {\n            /*\n            var req = new XMLHttpRequest();\n            req.open('GET', o, false); // Sync\n            if (req.status !== 200 && req.status !== 0) {\n              throw new Error('Bad ImageBitmap access: ' + req.status);\n            }\n            req.send();\n            return req.responseText;\n            */\n            const canvas = document.createElement('canvas');\n            const ctx = canvas.getContext('2d');\n            const img = document.createElement('img');\n            // The onload is needed by some browsers per http://stackoverflow.com/a/4776378/271577\n            img.addEventListener('load', function () {\n                ctx.drawImage(img, 0, 0);\n            });\n            img.src = o;\n            // Works in contexts allowing an `ImageBitmap` (We might use\n            //   `OffscreenCanvas.transferToBitmap` when supported)\n            return canvas;\n        },\n        reviveAsync (o) {\n            const canvas = document.createElement('canvas');\n            const ctx = canvas.getContext('2d');\n            const img = document.createElement('img');\n            // The onload is needed by some browsers per http://stackoverflow.com/a/4776378/271577\n            img.addEventListener('load', function () {\n                ctx.drawImage(img, 0, 0);\n            });\n            img.src = o; // o.dataURL;\n            return createImageBitmap(canvas); // Returns a promise\n        }\n    }\n};\n\nexport default imagebitmap;\n","import Typeson from 'typeson';\nimport file from './file.js';\n\nconst filelist = {\n    file: file.file,\n    filelist: {\n        test (x) { return Typeson.toStringTag(x) === 'FileList'; },\n        replace (fl) {\n            const arr = [];\n            for (let i = 0; i < fl.length; i++) {\n                arr[i] = fl.item(i);\n            }\n            return arr;\n        },\n        revive (o) {\n            /**\n             * `FileList` polyfill.\n             */\n            class FileList {\n                /**\n                 * Set private properties and length.\n                 */\n                constructor () {\n                    // eslint-disable-next-line prefer-rest-params\n                    this._files = arguments[0];\n                    this.length = this._files.length;\n                }\n                /**\n                 * @param {Integer} index\n                 * @returns {File}\n                 */\n                item (index) {\n                    return this._files[index];\n                }\n                /* eslint-disable class-methods-use-this */\n                /**\n                 * @returns {\"FileList\"}\n                 */\n                get [Symbol.toStringTag] () {\n                    /* eslint-enable class-methods-use-this */\n                    return 'FileList';\n                }\n            }\n            return new FileList(o);\n        }\n    }\n};\n\nexport default filelist;\n","/* globals XMLHttpRequest, Blob, FileReader */\nimport Typeson from 'typeson';\nimport {string2arraybuffer} from '../utils/stringArrayBuffer.js';\n\nconst blob = {\n    blob: {\n        test (x) { return Typeson.toStringTag(x) === 'Blob'; },\n        replace (b) { // Sync\n            const req = new XMLHttpRequest();\n            req.overrideMimeType('text/plain; charset=x-user-defined');\n            req.open('GET', URL.createObjectURL(b), false); // Sync\n            req.send();\n\n            // Seems not feasible to accurately simulate\n            /* istanbul ignore next */\n            if (req.status !== 200 && req.status !== 0) {\n                throw new Error('Bad Blob access: ' + req.status);\n            }\n            return {\n                type: b.type,\n                stringContents: req.responseText\n            };\n        },\n        revive ({type, stringContents}) {\n            return new Blob([string2arraybuffer(stringContents)], {type});\n        },\n        replaceAsync (b) {\n            return new Typeson.Promise((resolve, reject) => {\n                /*\n                if (b.isClosed) { // On MDN, but not in https://w3c.github.io/FileAPI/#dfn-Blob\n                    reject(new Error('The Blob is closed'));\n                    return;\n                }\n                */\n                const reader = new FileReader();\n                reader.addEventListener('load', () => {\n                    resolve({\n                        type: b.type,\n                        stringContents: reader.result\n                    });\n                });\n                // Seems not feasible to accurately simulate\n                /* istanbul ignore next */\n                reader.addEventListener('error', () => {\n                    reject(reader.error);\n                });\n                reader.readAsBinaryString(b);\n            });\n        }\n    }\n};\n\nexport default blob;\n","/*\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2017 Brett Zamir, 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; // Use a lookup table to find the index.\n\nvar lookup = new Uint8Array(256);\n\nfor (var i = 0; i < chars.length; i++) {\n  lookup[chars.codePointAt(i)] = i;\n}\n/**\n * @param {ArrayBuffer} arraybuffer\n * @param {Integer} byteOffset\n * @param {Integer} lngth\n * @returns {string}\n */\n\n\nvar encode = function encode(arraybuffer, byteOffset, lngth) {\n  if (lngth === null || lngth === undefined) {\n    lngth = arraybuffer.byteLength; // Needed for Safari\n  }\n\n  var bytes = new Uint8Array(arraybuffer, byteOffset || 0, // Default needed for Safari\n  lngth);\n  var len = bytes.length;\n  var base64 = '';\n\n  for (var _i = 0; _i < len; _i += 3) {\n    base64 += chars[bytes[_i] >> 2];\n    base64 += chars[(bytes[_i] & 3) << 4 | bytes[_i + 1] >> 4];\n    base64 += chars[(bytes[_i + 1] & 15) << 2 | bytes[_i + 2] >> 6];\n    base64 += chars[bytes[_i + 2] & 63];\n  }\n\n  if (len % 3 === 2) {\n    base64 = base64.slice(0, -1) + '=';\n  } else if (len % 3 === 1) {\n    base64 = base64.slice(0, -2) + '==';\n  }\n\n  return base64;\n};\n/**\n * @param {string} base64\n * @returns {ArrayBuffer}\n */\n\nvar decode = function decode(base64) {\n  var len = base64.length;\n  var bufferLength = base64.length * 0.75;\n  var p = 0;\n  var encoded1, encoded2, encoded3, encoded4;\n\n  if (base64[base64.length - 1] === '=') {\n    bufferLength--;\n\n    if (base64[base64.length - 2] === '=') {\n      bufferLength--;\n    }\n  }\n\n  var arraybuffer = new ArrayBuffer(bufferLength),\n      bytes = new Uint8Array(arraybuffer);\n\n  for (var _i2 = 0; _i2 < len; _i2 += 4) {\n    encoded1 = lookup[base64.codePointAt(_i2)];\n    encoded2 = lookup[base64.codePointAt(_i2 + 1)];\n    encoded3 = lookup[base64.codePointAt(_i2 + 2)];\n    encoded4 = lookup[base64.codePointAt(_i2 + 3)];\n    bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n    bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n    bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n  }\n\n  return arraybuffer;\n};\n\nexport { decode, encode };\n","declare var global;\n\n/* eslint-env browser, node */\nimport Typeson from 'typeson';\nimport {encode, decode} from 'base64-arraybuffer-es6';\n\nconst _global = typeof self === 'undefined' ? global : self;\n\nconst exportObj = {};\n[\n    'Int8Array',\n    'Uint8Array',\n    'Uint8ClampedArray',\n    'Int16Array',\n    'Uint16Array',\n    'Int32Array',\n    'Uint32Array',\n    'Float32Array',\n    'Float64Array'\n].forEach(function (typeName) {\n    const arrType = typeName;\n    const TypedArray = _global[arrType];\n    if (TypedArray) {\n        exportObj[typeName.toLowerCase()+\"2\"] = {\n            test (x) { return Typeson.toStringTag(x) === arrType; },\n            replace ({buffer, byteOffset, length}) {\n                return {\n                    buffer,\n                    byteOffset,\n                    length\n                };\n            },\n            revive (b64Obj) {\n                const {buffer, byteOffset, length} = b64Obj;\n                return new TypedArray(buffer, byteOffset, length);\n            }\n        };\n    }\n});\n\nexport default exportObj;\n","import Typeson from 'typeson';\nimport {encode, decode} from 'base64-arraybuffer-es6';\n\nexport default {\n    arraybuffer: {\n        test (x) { return Typeson.toStringTag(x) === 'ArrayBuffer'; },\n        replace (b) {\n            return encode(b, 0, b.byteLength);\n        },\n        revive (b64) {\n            const buffer = decode(b64);\n            return buffer;\n        }\n    }\n};\n\n// See also typed-arrays!\n","import Typeson from 'typeson';\nimport StructuredCloning from 'typeson-registry/dist/presets/structured-cloning';\nimport { encode as encodeB64, decode as decodeB64 } from 'base64-arraybuffer-es6';\nimport Dexie from 'dexie';\nimport { readBlobSync, readBlobAsync } from './helpers';\nimport typedArray from './tson-typed-array';\nimport arrayBuffer from './tson-arraybuffer';\n\nexport const TSON = new Typeson().register(StructuredCloning);\n\nconst readBlobsSynchronously = 'FileReaderSync' in self; // true in workers only.\n\nlet blobsToAwait: any[] = [];\nlet blobsToAwaitPos = 0;\n\n// Need to patch encapsulateAsync as it does not work as of typeson 5.8.2\n// Also, current version of typespn-registry-1.0.0-alpha.21 does not\n// encapsulate/revive Blobs correctly (fails one of the unit tests in\n// this library (test 'export-format'))\nTSON.register([\n  arrayBuffer,\n  typedArray, {\n    blob2: {\n      test(x) { return Typeson.toStringTag(x) === 'Blob'; },\n      replace(b) {\n          if (b.isClosed) { // On MDN, but not in https://w3c.github.io/FileAPI/#dfn-Blob\n            throw new Error('The Blob is closed');\n          }\n          if (readBlobsSynchronously) {\n            const data = readBlobSync(b, 'binary');\n            const base64 = encodeB64(data, 0, data.byteLength);\n            return {\n              type: b.type,\n              data: base64\n            }\n          } else {\n            blobsToAwait.push(b); // This will also make TSON.mustFinalize() return true.\n            const result = {\n              type: b.type,\n              data: {start: blobsToAwaitPos, end: blobsToAwaitPos + b.size}\n            }\n            blobsToAwaitPos += b.size;\n            return result;\n          }\n      },\n      finalize(b, ba: ArrayBuffer) {\n        b.data = encodeB64(ba, 0, ba.byteLength);\n      },\n      revive ({type, data}) {\n        return new Blob([decodeB64(data)], {type});\n      }\n    }\n  }\n]);\n\nTSON.mustFinalize = ()=>blobsToAwait.length > 0;\n\nTSON.finalize = async (items?: any[]) => {\n  const allChunks = await readBlobAsync(new Blob(blobsToAwait), 'binary');\n  if (items) {\n    for (const item of items) {\n      // Manually go through all \"blob\" types in the result\n      // and lookup the data slice they point at.\n      if (item.$types) {\n        let types = item.$types;\n        const arrayType = types.$;\n        if (arrayType) types = types.$;\n        for (let keyPath in types) {\n          const typeName = types[keyPath];\n          const typeSpec = TSON.types[typeName];\n          if (typeSpec && typeSpec.finalize) {\n            const b = Dexie.getByKeyPath(item, arrayType ? \"$.\" + keyPath : keyPath);\n            typeSpec.finalize(b, allChunks.slice(b.start, b.end));\n          }\n        }\n      }\n    }\n  }\n  // Free up memory\n  blobsToAwait = [];\n}\n","\nimport Dexie from 'dexie';\nimport { getSchemaString, extractDbSchema } from './helpers';\nimport { DexieExportedTable, DexieExportJsonStructure } from './json-structure';\nimport { TSON } from './tson';\n\nexport interface ExportOptions {\n  noTransaction?: boolean;\n  numRowsPerChunk?: number;\n  prettyJson?: boolean;\n  filter?: (table: string, value: any, key?: any) => boolean;\n  progressCallback?: (progress: ExportProgress) => boolean;\n}\n\nexport interface ExportProgress {\n  totalTables: number;\n  completedTables: number;\n  totalRows: number | undefined;\n  completedRows: number;\n  done: boolean;\n}\n\nconst DEFAULT_ROWS_PER_CHUNK = 2000;\n\nexport async function exportDB(db: Dexie, options?: ExportOptions): Promise<Blob> {\n  options = options || {};\n  const slices: (string | Blob)[] = [];\n  const tables = db.tables.map(table => ({\n    name: table.name,\n    schema: getSchemaString(table),\n    rowCount: 0\n  }));\n  const {prettyJson} = options!;\n  const emptyExport: DexieExportJsonStructure = {\n    formatName: \"dexie\",\n    formatVersion: 1,\n    data: {\n      databaseName: db.name,\n      databaseVersion: db.verno,\n      tables: tables,\n      data: []\n    }\n  };\n  \n  const {progressCallback} = options!;\n  const progress: ExportProgress = {\n    done: false,\n    completedRows: 0,\n    completedTables: 0,\n    totalRows: NaN,\n    totalTables: db.tables.length\n  };\n\n  try {\n    if (options!.noTransaction) {\n      await exportAll();\n    } else {\n      await db.transaction('r', db.tables, exportAll);\n    }\n  } finally {\n    TSON.finalize(); // Free up mem if error has occurred\n  }\n\n  return new Blob(slices,{type: \"text/json\"});\n\n  async function exportAll() {\n    // Count rows:\n    const tablesRowCounts = await Promise.all(db.tables.map(table => table.count()));\n    tablesRowCounts.forEach((rowCount, i) => tables[i].rowCount = rowCount);\n    progress.totalRows = tablesRowCounts.reduce((p,c)=>p+c);\n\n    // Write first JSON slice\n    const emptyExportJson = JSON.stringify(emptyExport, undefined, prettyJson ? 2 : undefined);\n    const posEndDataArray = emptyExportJson.lastIndexOf(']');\n    const firstJsonSlice = emptyExportJson.substring(0, posEndDataArray);\n    slices.push(firstJsonSlice);\n\n    const filter = options!.filter;\n\n    for (const {name: tableName} of tables) {\n      const table = db.table(tableName);\n      const {primKey} = table.schema;\n      const inbound = !!primKey.keyPath;\n      const LIMIT = options!.numRowsPerChunk || DEFAULT_ROWS_PER_CHUNK;\n      const emptyTableExport: DexieExportedTable = inbound ? {\n        tableName: table.name,\n        inbound: true,\n        rows: []\n      } : {\n        tableName: table.name,\n        inbound: false,\n        rows: []\n      };\n      let emptyTableExportJson = JSON.stringify(emptyTableExport, undefined, prettyJson ? 2 : undefined);\n      if (prettyJson) {\n        // Increase indentation according to this:\n        // {\n        //   ...\n        //   data: [\n        //     ...\n        //     data: [\n        // 123456<---- here\n        //     ] \n        //   ]\n        // }\n        emptyTableExportJson = emptyTableExportJson.split('\\n').join('\\n    ');\n      }\n      const posEndRowsArray = emptyTableExportJson.lastIndexOf(']');\n      slices.push(emptyTableExportJson.substring(0, posEndRowsArray));\n      let lastKey: any = null;\n      let lastNumRows = 0;\n      let mayHaveMoreRows = true;\n      while (mayHaveMoreRows) {\n        if (progressCallback) {\n          // Keep ongoing transaction private\n          Dexie.ignoreTransaction(()=>progressCallback(progress));\n        }\n        const chunkedCollection = lastKey == null ?\n          table.limit(LIMIT) :\n          table.where(':id').above(lastKey).limit(LIMIT);\n\n        const values = await chunkedCollection.toArray();\n\n        if (values.length === 0) break;\n\n        if (lastKey != null && lastNumRows > 0) {\n          // Not initial chunk. Must add a comma:\n          slices.push(\",\");\n          if (prettyJson) {\n            slices.push(\"\\n      \");\n          }\n        }\n\n        mayHaveMoreRows = values.length === LIMIT;\n        \n        if (inbound) {\n          const filteredValues = filter ?\n            values.filter(value => filter(tableName, value)) :\n            values;\n\n          const tsonValues = filteredValues.map(value => TSON.encapsulate(value));\n          if (TSON.mustFinalize()) {\n            await Dexie.waitFor(TSON.finalize(tsonValues));\n          }\n\n          let json = JSON.stringify(tsonValues, undefined, prettyJson ? 2 : undefined);\n          if (prettyJson) json = json.split('\\n').join('\\n      ');\n\n          // By generating a blob here, we give web platform the opportunity to store the contents\n          // on disk and release RAM.\n          slices.push(new Blob([json.substring(1, json.length - 1)]));\n          lastNumRows = filteredValues.length;\n          lastKey = values.length > 0 ?\n            Dexie.getByKeyPath(values[values.length -1], primKey.keyPath as string) :\n            null;\n        } else {\n          const keys = await chunkedCollection.primaryKeys();\n          let keyvals = keys.map((key, i) => [key, values[i]]);\n          if (filter) keyvals = keyvals.filter(([key, value]) => filter(tableName, value, key));\n\n          const tsonTuples = keyvals.map(tuple => TSON.encapsulate(tuple));\n          if (TSON.mustFinalize()) {\n            await Dexie.waitFor(TSON.finalize(tsonTuples));\n          }\n\n          let json = JSON.stringify(tsonTuples, undefined, prettyJson ? 2 : undefined);\n          if (prettyJson) json = json.split('\\n').join('\\n      ');\n\n          // By generating a blob here, we give web platform the opportunity to store the contents\n          // on disk and release RAM.\n          slices.push(new Blob([json.substring(1, json.length - 1)]));\n          lastNumRows = keyvals.length;\n          lastKey = keys.length > 0 ?\n            keys[keys.length - 1] :\n            null;\n        }\n        progress.completedRows += values.length;\n      }\n      slices.push(emptyTableExportJson.substr(posEndRowsArray)); // \"]}\"\n      progress.completedTables += 1;\n      if (progress.completedTables < progress.totalTables) {\n        slices.push(\",\");\n      }\n    }\n    slices.push(emptyExportJson.substr(posEndDataArray));\n    progress.done = true;\n    if (progressCallback) {\n      // Keep ongoing transaction private\n      Dexie.ignoreTransaction(()=>progressCallback(progress));\n    }\n  }\n}\n","export const VERSION = 1;\n\n/** Same as DexieExportJsonStructure but without the data.data array */\nexport interface DexieExportJsonMeta {\n  formatName: 'dexie';\n  formatVersion: typeof VERSION;\n  data: {\n    databaseName: string;\n    databaseVersion: number;\n    tables: Array<{\n      name: string;\n      schema: string;\n      rowCount: number;\n    }>;\n  }\n}\n\nexport interface DexieExportJsonStructure extends DexieExportJsonMeta {\n  formatName: 'dexie';\n  formatVersion: typeof VERSION;\n  data: {\n    databaseName: string;\n    databaseVersion: number;\n    tables: Array<{\n      name: string;\n      schema: string;\n      rowCount: number;\n    }>;\n    data: Array<{\n      tableName: string;\n      inbound: boolean;\n      rows: any[];\n    }>;\n  }\n}\n\nexport type DexieExportedDatabase = DexieExportJsonStructure[\"data\"];\nexport type DexieExportedTable = DexieExportedDatabase[\"data\"][number];\n","module.exports = {Stream: function(){}};\n\n",";(function (clarinet) {\n  \"use strict\";\n\n  // non node-js needs to set clarinet debug on root\n  var env =(typeof process === 'object' && process.env)\n    ? process.env\n    : self;\n\n  clarinet.parser            = function (opt) { return new CParser(opt);};\n  clarinet.CParser           = CParser;\n  clarinet.CStream           = CStream;\n  clarinet.createStream      = createStream;\n  clarinet.MAX_BUFFER_LENGTH = 10 * 1024 * 1024;\n  clarinet.DEBUG             = (env.CDEBUG==='debug');\n  clarinet.INFO              = (env.CDEBUG==='debug' || env.CDEBUG==='info');\n  clarinet.EVENTS            =\n    [ \"value\"\n    , \"string\"\n    , \"key\"\n    , \"openobject\"\n    , \"closeobject\"\n    , \"openarray\"\n    , \"closearray\"\n    , \"error\"\n    , \"end\"\n    , \"ready\"\n    ];\n\n  var buffers     = {\n        textNode: undefined,\n        numberNode: \"\"\n    }\n    , streamWraps = clarinet.EVENTS.filter(function (ev) {\n          return ev !== \"error\" && ev !== \"end\";\n        })\n    , S           = 0\n    , Stream\n    ;\n\n  clarinet.STATE =\n    { BEGIN                             : S++\n    , VALUE                             : S++ // general stuff\n    , OPEN_OBJECT                       : S++ // {\n    , CLOSE_OBJECT                      : S++ // }\n    , OPEN_ARRAY                        : S++ // [\n    , CLOSE_ARRAY                       : S++ // ]\n    , TEXT_ESCAPE                       : S++ // \\ stuff\n    , STRING                            : S++ // \"\"\n    , BACKSLASH                         : S++\n    , END                               : S++ // No more stack\n    , OPEN_KEY                          : S++ // , \"a\"\n    , CLOSE_KEY                         : S++ // :\n    , TRUE                              : S++ // r\n    , TRUE2                             : S++ // u\n    , TRUE3                             : S++ // e\n    , FALSE                             : S++ // a\n    , FALSE2                            : S++ // l\n    , FALSE3                            : S++ // s\n    , FALSE4                            : S++ // e\n    , NULL                              : S++ // u\n    , NULL2                             : S++ // l\n    , NULL3                             : S++ // l\n    , NUMBER_DECIMAL_POINT              : S++ // .\n    , NUMBER_DIGIT                      : S++ // [0-9]\n    };\n\n  for (var s_ in clarinet.STATE) clarinet.STATE[clarinet.STATE[s_]] = s_;\n\n  // switcharoo\n  S = clarinet.STATE;\n\n  const Char = {\n    tab                 : 0x09,     // \\t\n    lineFeed            : 0x0A,     // \\n\n    carriageReturn      : 0x0D,     // \\r\n    space               : 0x20,     // \" \"\n\n    doubleQuote         : 0x22,     // \"\n    plus                : 0x2B,     // +\n    comma               : 0x2C,     // ,\n    minus               : 0x2D,     // -\n    period              : 0x2E,     // .\n\n    _0                  : 0x30,     // 0\n    _9                  : 0x39,     // 9\n\n    colon               : 0x3A,     // :\n\n    E                   : 0x45,     // E\n\n    openBracket         : 0x5B,     // [\n    backslash           : 0x5C,     // \\\n    closeBracket        : 0x5D,     // ]\n\n    a                   : 0x61,     // a\n    b                   : 0x62,     // b\n    e                   : 0x65,     // e \n    f                   : 0x66,     // f\n    l                   : 0x6C,     // l\n    n                   : 0x6E,     // n\n    r                   : 0x72,     // r\n    s                   : 0x73,     // s\n    t                   : 0x74,     // t\n    u                   : 0x75,     // u\n\n    openBrace           : 0x7B,     // {\n    closeBrace          : 0x7D,     // }\n  }\n\n  if (!Object.create) {\n    Object.create = function (o) {\n      function f () { this[\"__proto__\"] = o; }\n      f.prototype = o;\n      return new f;\n    };\n  }\n\n  if (!Object.getPrototypeOf) {\n    Object.getPrototypeOf = function (o) {\n      return o[\"__proto__\"];\n    };\n  }\n\n  if (!Object.keys) {\n    Object.keys = function (o) {\n      var a = [];\n      for (var i in o) if (o.hasOwnProperty(i)) a.push(i);\n      return a;\n    };\n  }\n\n  function checkBufferLength (parser) {\n    var maxAllowed = Math.max(clarinet.MAX_BUFFER_LENGTH, 10)\n      , maxActual = 0\n      ;\n    for (var buffer in buffers) {\n      var len = parser[buffer] === undefined ? 0 : parser[buffer].length;\n      if (len > maxAllowed) {\n        switch (buffer) {\n          case \"text\":\n            closeText(parser);\n          break;\n\n          default:\n            error(parser, \"Max buffer length exceeded: \"+ buffer);\n        }\n      }\n      maxActual = Math.max(maxActual, len);\n    }\n    parser.bufferCheckPosition = (clarinet.MAX_BUFFER_LENGTH - maxActual)\n                               + parser.position;\n  }\n\n  function clearBuffers (parser) {\n    for (var buffer in buffers) {\n      parser[buffer] = buffers[buffer];\n    }\n  }\n\n  var stringTokenPattern = /[\\\\\"\\n]/g;\n\n  function CParser (opt) {\n    if (!(this instanceof CParser)) return new CParser (opt);\n\n    var parser = this;\n    clearBuffers(parser);\n    parser.bufferCheckPosition = clarinet.MAX_BUFFER_LENGTH;\n    parser.q        = parser.c = parser.p = \"\";\n    parser.opt      = opt || {};\n    parser.closed   = parser.closedRoot = parser.sawRoot = false;\n    parser.tag      = parser.error = null;\n    parser.state    = S.BEGIN;\n    parser.stack    = new Array();\n    // mostly just for error reporting\n    parser.position = parser.column = 0;\n    parser.line     = 1;\n    parser.slashed  = false;\n    parser.unicodeI = 0;\n    parser.unicodeS = null;\n    parser.depth    = 0;\n    emit(parser, \"onready\");\n  }\n\n  CParser.prototype =\n    { end    : function () { end(this); }\n    , write  : write\n    , resume : function () { this.error = null; return this; }\n    , close  : function () { return this.write(null); }\n    };\n\n  try        { Stream = require(\"stream\").Stream; }\n  catch (ex) { Stream = function () {}; }\n\n  function createStream (opt) { return new CStream(opt); }\n\n  function CStream (opt) {\n    if (!(this instanceof CStream)) return new CStream(opt);\n\n    this._parser = new CParser(opt);\n    this.writable = true;\n    this.readable = true;\n\n    //var Buffer = this.Buffer || function Buffer () {}; // if we don't have Buffers, fake it so we can do `var instanceof Buffer` and not throw an error\n    this.bytes_remaining = 0; // number of bytes remaining in multi byte utf8 char to read after split boundary\n    this.bytes_in_sequence = 0; // bytes in multi byte utf8 char to read\n    this.temp_buffs = { \"2\": new Buffer(2), \"3\": new Buffer(3), \"4\": new Buffer(4) }; // for rebuilding chars split before boundary is reached\n    this.string = '';\n\n    var me = this;\n    Stream.apply(me);\n\n    this._parser.onend = function () { me.emit(\"end\"); };\n    this._parser.onerror = function (er) {\n      me.emit(\"error\", er);\n      me._parser.error = null;\n    };\n\n    streamWraps.forEach(function (ev) {\n      Object.defineProperty(me, \"on\" + ev,\n        { get          : function () { return me._parser[\"on\" + ev]; }\n        , set          : function (h) {\n            if (!h) {\n              me.removeAllListeners(ev);\n              me._parser[\"on\"+ev] = h;\n              return h;\n            }\n            me.on(ev, h);\n          }\n        , enumerable   : true\n        , configurable : false\n        });\n    });\n  }\n\n  CStream.prototype = Object.create(Stream.prototype,\n    { constructor: { value: CStream } });\n\n  CStream.prototype.write = function (data) {\n    data = new Buffer(data);\n    for (var i = 0; i < data.length; i++) {\n      var n = data[i];\n\n      // check for carry over of a multi byte char split between data chunks\n      // & fill temp buffer it with start of this data chunk up to the boundary limit set in the last iteration\n      if (this.bytes_remaining > 0) {\n        for (var j = 0; j < this.bytes_remaining; j++) {\n          this.temp_buffs[this.bytes_in_sequence][this.bytes_in_sequence - this.bytes_remaining + j] = data[j];\n        }\n        this.string = this.temp_buffs[this.bytes_in_sequence].toString();\n        this.bytes_in_sequence = this.bytes_remaining = 0;\n\n        // move iterator forward by number of byte read during sequencing\n        i = i + j - 1;\n\n        // pass data to parser and move forward to parse rest of data\n        this._parser.write(this.string);\n        this.emit(\"data\", this.string);\n        continue;\n      }\n\n      // if no remainder bytes carried over, parse multi byte (>=128) chars one at a time\n      if (this.bytes_remaining === 0 && n >= 128) {\n        if ((n >= 194) && (n <= 223)) this.bytes_in_sequence = 2;\n        if ((n >= 224) && (n <= 239)) this.bytes_in_sequence = 3;\n        if ((n >= 240) && (n <= 244)) this.bytes_in_sequence = 4;\n        if ((this.bytes_in_sequence + i) > data.length) { // if bytes needed to complete char fall outside data length, we have a boundary split\n\n          for (var k = 0; k <= (data.length - 1 - i); k++) {\n            this.temp_buffs[this.bytes_in_sequence][k] = data[i + k]; // fill temp data of correct size with bytes available in this chunk\n          }\n          this.bytes_remaining = (i + this.bytes_in_sequence) - data.length;\n\n          // immediately return as we need another chunk to sequence the character\n          return true;\n        } else {\n          this.string = data.slice(i, (i + this.bytes_in_sequence)).toString();\n          i = i + this.bytes_in_sequence - 1;\n\n          this._parser.write(this.string);\n          this.emit(\"data\", this.string);\n          continue;\n        }\n      }\n\n      // is there a range of characters that are immediately parsable?\n      for (var p = i; p < data.length; p++) {\n        if (data[p] >= 128) break;\n      }\n      this.string = data.slice(i, p).toString();\n      this._parser.write(this.string);\n      this.emit(\"data\", this.string);\n      i = p - 1;\n\n      // handle any remaining characters using multibyte logic\n      continue;\n    }\n  };\n\n  CStream.prototype.end = function (chunk) {\n    if (chunk && chunk.length) this._parser.write(chunk.toString());\n    this._parser.end();\n    return true;\n  };\n\n  CStream.prototype.on = function (ev, handler) {\n    var me = this;\n    if (!me._parser[\"on\"+ev] && streamWraps.indexOf(ev) !== -1) {\n      me._parser[\"on\"+ev] = function () {\n        var args = arguments.length === 1 ? [arguments[0]]\n                 : Array.apply(null, arguments);\n        args.splice(0, 0, ev);\n        me.emit.apply(me, args);\n      };\n    }\n    return Stream.prototype.on.call(me, ev, handler);\n  };\n\n  CStream.prototype.destroy = function () {\n    clearBuffers(this._parser);\n    this.emit(\"close\");\n  };\n\n  function emit(parser, event, data) {\n    if(clarinet.INFO) console.log('-- emit', event, data);\n    if (parser[event]) parser[event](data);\n  }\n\n  function emitNode(parser, event, data) {\n    closeValue(parser);\n    emit(parser, event, data);\n  }\n\n  function closeValue(parser, event) {\n    parser.textNode = textopts(parser.opt, parser.textNode);\n    if (parser.textNode !== undefined) {\n      emit(parser, (event ? event : \"onvalue\"), parser.textNode);\n    }\n    parser.textNode = undefined;\n  }\n\n  function closeNumber(parser) {\n    if (parser.numberNode)\n      emit(parser, \"onvalue\", parseFloat(parser.numberNode));\n    parser.numberNode = \"\";\n  }\n\n  function textopts (opt, text) {\n    if (text === undefined) {\n      return text;\n    }\n    if (opt.trim) text = text.trim();\n    if (opt.normalize) text = text.replace(/\\s+/g, \" \");\n    return text;\n  }\n\n  function error (parser, er) {\n    closeValue(parser);\n    er += \"\\nLine: \"+parser.line+\n          \"\\nColumn: \"+parser.column+\n          \"\\nChar: \"+parser.c;\n    er = new Error(er);\n    parser.error = er;\n    emit(parser, \"onerror\", er);\n    return parser;\n  }\n\n  function end(parser) {\n    if (parser.state !== S.VALUE || parser.depth !== 0)\n      error(parser, \"Unexpected end\");\n\n    closeValue(parser);\n    parser.c      = \"\";\n    parser.closed = true;\n    emit(parser, \"onend\");\n    CParser.call(parser, parser.opt);\n    return parser;\n  }\n\n  function isWhitespace(c) {\n    return c === Char.carriageReturn || c === Char.lineFeed || c === Char.space || c === Char.tab;\n  }\n\n  function write (chunk) {\n    var parser = this;\n    if (this.error) throw this.error;\n    if (parser.closed) return error(parser,\n      \"Cannot write after close. Assign an onready handler.\");\n    if (chunk === null) return end(parser);\n    var i = 0, c = chunk.charCodeAt(0), p = parser.p;\n    if (clarinet.DEBUG) console.log('write -> [' + chunk + ']');\n    while (c) {\n      p = c;\n      parser.c = c = chunk.charCodeAt(i++);\n      // if chunk doesnt have next, like streaming char by char\n      // this way we need to check if previous is really previous\n      // if not we need to reset to what the parser says is the previous\n      // from buffer\n      if(p !== c ) parser.p = p;\n      else p = parser.p;\n\n      if(!c) break;\n\n      if (clarinet.DEBUG) console.log(i,c,clarinet.STATE[parser.state]);\n      parser.position ++;\n      if (c === Char.lineFeed) {\n        parser.line ++;\n        parser.column = 0;\n      } else parser.column ++;\n      switch (parser.state) {\n\n        case S.BEGIN:\n          if (c === Char.openBrace) parser.state = S.OPEN_OBJECT;\n          else if (c === Char.openBracket) parser.state = S.OPEN_ARRAY;\n          else if (!isWhitespace(c))\n            error(parser, \"Non-whitespace before {[.\");\n        continue;\n\n        case S.OPEN_KEY:\n        case S.OPEN_OBJECT:\n          if (isWhitespace(c)) continue;\n          if(parser.state === S.OPEN_KEY) parser.stack.push(S.CLOSE_KEY);\n          else {\n            if(c === Char.closeBrace) {\n              emit(parser, 'onopenobject');\n              this.depth++;\n              emit(parser, 'oncloseobject');\n              this.depth--;\n              parser.state = parser.stack.pop() || S.VALUE;\n              continue;\n            } else  parser.stack.push(S.CLOSE_OBJECT);\n          }\n          if(c === Char.doubleQuote) parser.state = S.STRING;\n          else error(parser, \"Malformed object key should start with \\\"\");\n        continue;\n\n        case S.CLOSE_KEY:\n        case S.CLOSE_OBJECT:\n          if (isWhitespace(c)) continue;\n          var event = (parser.state === S.CLOSE_KEY) ? 'key' : 'object';\n          if(c === Char.colon) {\n            if(parser.state === S.CLOSE_OBJECT) {\n              parser.stack.push(S.CLOSE_OBJECT);\n              closeValue(parser, 'onopenobject');\n               this.depth++;\n            } else closeValue(parser, 'onkey');\n            parser.state  = S.VALUE;\n          } else if (c === Char.closeBrace) {\n            emitNode(parser, 'oncloseobject');\n            this.depth--;\n            parser.state = parser.stack.pop() || S.VALUE;\n          } else if(c === Char.comma) {\n            if(parser.state === S.CLOSE_OBJECT)\n              parser.stack.push(S.CLOSE_OBJECT);\n            closeValue(parser);\n            parser.state  = S.OPEN_KEY;\n          } else error(parser, 'Bad object');\n        continue;\n\n        case S.OPEN_ARRAY: // after an array there always a value\n        case S.VALUE:\n          if (isWhitespace(c)) continue;\n          if(parser.state===S.OPEN_ARRAY) {\n            emit(parser, 'onopenarray');\n            this.depth++;\n            parser.state = S.VALUE;\n            if(c === Char.closeBracket) {\n              emit(parser, 'onclosearray');\n              this.depth--;\n              parser.state = parser.stack.pop() || S.VALUE;\n              continue;\n            } else {\n              parser.stack.push(S.CLOSE_ARRAY);\n            }\n          }\n               if(c === Char.doubleQuote) parser.state = S.STRING;\n          else if(c === Char.openBrace) parser.state = S.OPEN_OBJECT;\n          else if(c === Char.openBracket) parser.state = S.OPEN_ARRAY;\n          else if(c === Char.t) parser.state = S.TRUE;\n          else if(c === Char.f) parser.state = S.FALSE;\n          else if(c === Char.n) parser.state = S.NULL;\n          else if(c === Char.minus) { // keep and continue\n            parser.numberNode += \"-\";\n          } else if(Char._0 <= c && c <= Char._9) {\n            parser.numberNode += String.fromCharCode(c);\n            parser.state = S.NUMBER_DIGIT;\n          } else               error(parser, \"Bad value\");\n        continue;\n\n        case S.CLOSE_ARRAY:\n          if(c === Char.comma) {\n            parser.stack.push(S.CLOSE_ARRAY);\n            closeValue(parser, 'onvalue');\n            parser.state  = S.VALUE;\n          } else if (c === Char.closeBracket) {\n            emitNode(parser, 'onclosearray');\n            this.depth--;\n            parser.state = parser.stack.pop() || S.VALUE;\n          } else if (isWhitespace(c))\n              continue;\n          else error(parser, 'Bad array');\n        continue;\n\n        case S.STRING:\n          if (parser.textNode === undefined) {\n            parser.textNode = \"\";\n          }\n\n          // thanks thejh, this is an about 50% performance improvement.\n          var starti              = i-1\n            , slashed = parser.slashed\n            , unicodeI = parser.unicodeI\n            ;\n          STRING_BIGLOOP: while (true) {\n            if (clarinet.DEBUG)\n              console.log(i,c,clarinet.STATE[parser.state]\n                         ,slashed);\n            // zero means \"no unicode active\". 1-4 mean \"parse some more\". end after 4.\n            while (unicodeI > 0) {\n              parser.unicodeS += String.fromCharCode(c);\n              c = chunk.charCodeAt(i++);\n              parser.position++;\n              if (unicodeI === 4) {\n                // TODO this might be slow? well, probably not used too often anyway\n                parser.textNode += String.fromCharCode(parseInt(parser.unicodeS, 16));\n                unicodeI = 0;\n                starti = i-1;\n              } else {\n                unicodeI++;\n              }\n              // we can just break here: no stuff we skipped that still has to be sliced out or so\n              if (!c) break STRING_BIGLOOP;\n            }\n            if (c === Char.doubleQuote && !slashed) {\n              parser.state = parser.stack.pop() || S.VALUE;\n              parser.textNode += chunk.substring(starti, i-1);\n              parser.position += i - 1 - starti;\n              break;\n            }\n            if (c === Char.backslash && !slashed) {\n              slashed = true;\n              parser.textNode += chunk.substring(starti, i-1);\n              parser.position += i - 1 - starti;\n              c = chunk.charCodeAt(i++);\n              parser.position++;\n              if (!c) break;\n            }\n            if (slashed) {\n              slashed = false;\n                   if (c === Char.n) { parser.textNode += '\\n'; }\n              else if (c === Char.r) { parser.textNode += '\\r'; }\n              else if (c === Char.t) { parser.textNode += '\\t'; }\n              else if (c === Char.f) { parser.textNode += '\\f'; }\n              else if (c === Char.b) { parser.textNode += '\\b'; }\n              else if (c === Char.u) {\n                // \\uxxxx. meh!\n                unicodeI = 1;\n                parser.unicodeS = '';\n              } else {\n                parser.textNode += String.fromCharCode(c);\n              }\n              c = chunk.charCodeAt(i++);\n              parser.position++;\n              starti = i-1;\n              if (!c) break;\n              else continue;\n            }\n\n            stringTokenPattern.lastIndex = i;\n            var reResult = stringTokenPattern.exec(chunk);\n            if (reResult === null) {\n              i = chunk.length+1;\n              parser.textNode += chunk.substring(starti, i-1);\n              parser.position += i - 1 - starti;\n              break;\n            }\n            i = reResult.index+1;\n            c = chunk.charCodeAt(reResult.index);\n            if (!c) {\n              parser.textNode += chunk.substring(starti, i-1);\n              parser.position += i - 1 - starti;\n              break;\n            }\n          }\n          parser.slashed = slashed;\n          parser.unicodeI = unicodeI;\n        continue;\n\n        case S.TRUE:\n          if (c === Char.r) parser.state = S.TRUE2;\n          else error(parser, 'Invalid true started with t'+ c);\n        continue;\n\n        case S.TRUE2:\n          if (c === Char.u) parser.state = S.TRUE3;\n          else error(parser, 'Invalid true started with tr'+ c);\n        continue;\n\n        case S.TRUE3:\n          if(c === Char.e) {\n            emit(parser, \"onvalue\", true);\n            parser.state = parser.stack.pop() || S.VALUE;\n          } else error(parser, 'Invalid true started with tru'+ c);\n        continue;\n\n        case S.FALSE:\n          if (c === Char.a) parser.state = S.FALSE2;\n          else error(parser, 'Invalid false started with f'+ c);\n        continue;\n\n        case S.FALSE2:\n          if (c === Char.l) parser.state = S.FALSE3;\n          else error(parser, 'Invalid false started with fa'+ c);\n        continue;\n\n        case S.FALSE3:\n          if (c === Char.s) parser.state = S.FALSE4;\n          else error(parser, 'Invalid false started with fal'+ c);\n        continue;\n\n        case S.FALSE4:\n          if (c === Char.e) {\n            emit(parser, \"onvalue\", false);\n            parser.state = parser.stack.pop() || S.VALUE;\n          } else error(parser, 'Invalid false started with fals'+ c);\n        continue;\n\n        case S.NULL:\n          if (c === Char.u) parser.state = S.NULL2;\n          else error(parser, 'Invalid null started with n'+ c);\n        continue;\n\n        case S.NULL2:\n          if (c === Char.l) parser.state = S.NULL3;\n          else error(parser, 'Invalid null started with nu'+ c);\n        continue;\n\n        case S.NULL3:\n          if(c === Char.l) {\n            emit(parser, \"onvalue\", null);\n            parser.state = parser.stack.pop() || S.VALUE;\n          } else error(parser, 'Invalid null started with nul'+ c);\n        continue;\n\n        case S.NUMBER_DECIMAL_POINT:\n          if(c === Char.period) {\n            parser.numberNode += \".\";\n            parser.state       = S.NUMBER_DIGIT;\n          } else error(parser, 'Leading zero not followed by .');\n        continue;\n\n        case S.NUMBER_DIGIT:\n          if(Char._0 <= c && c <= Char._9) parser.numberNode += String.fromCharCode(c);\n          else if (c === Char.period) {\n            if(parser.numberNode.indexOf('.')!==-1)\n              error(parser, 'Invalid number has two dots');\n            parser.numberNode += \".\";\n          } else if (c === Char.e || c === Char.E) {\n            if(parser.numberNode.indexOf('e')!==-1 ||\n               parser.numberNode.indexOf('E')!==-1 )\n               error(parser, 'Invalid number has two exponential');\n            parser.numberNode += \"e\";\n          } else if (c === Char.plus || c === Char.minus) {\n            if(!(p === Char.e || p === Char.E))\n              error(parser, 'Invalid symbol in number');\n            parser.numberNode += String.fromCharCode(c);\n          } else {\n            closeNumber(parser);\n            i--; // go back one\n            parser.state = parser.stack.pop() || S.VALUE;\n          }\n        continue;\n\n        default:\n          error(parser, \"Unknown state: \" + parser.state);\n      }\n    }\n    if (parser.position >= parser.bufferCheckPosition)\n      checkBufferLength(parser);\n    return parser;\n  }\n\n})(typeof exports === \"undefined\" ? clarinet = {} : exports);\n","import clarinet from 'clarinet';\nimport { readBlobAsync, readBlobSync } from './helpers';\n\nexport interface JsonStream<T> {\n  pullAsync(numBytes: number): Promise<Partial<T>>;\n  pullSync(numBytes: number): Partial<T>;\n  done(): boolean;\n  eof(): boolean;\n  result: Partial<T>;\n}\n\nexport function JsonStream<T>(blob: Blob):  JsonStream<T> {\n  let pos = 0;\n  const parser = JsonParser(true);\n\n  const rv = {\n    async pullAsync(numBytes: number): Promise<Partial<T>> {\n      const slize = blob.slice(pos, pos + numBytes);\n      pos += numBytes;\n      const jsonPart = await readBlobAsync(slize, 'text');\n      const result = parser.write(jsonPart);\n      rv.result = result || {};\n      return result;\n    },\n    pullSync(numBytes: number): Partial<T> {\n      const slize = blob.slice(pos, pos + numBytes);\n      pos += numBytes;\n      const jsonPart = readBlobSync(slize, 'text');\n      const result = parser.write(jsonPart);\n      rv.result = result || {};\n      return result;\n    },\n    done() {\n      return parser.done();\n    },\n    eof() {\n      return pos >= blob.size;\n    },\n    result: {}\n  }\n\n  return rv;\n}\n\n\nexport function JsonParser (allowPartial: boolean) {\n  const parser = (clarinet as any).parser();\n  let level = 0;\n  let result: any;\n  const stack: any[][] = [];\n  let obj: any;\n  let key: string | null;\n  let done = false;\n  let array = false;\n\n  parser.onopenobject = newKey => {\n    const newObj = {};\n    (newObj as any).incomplete = true;\n    if (!result) result = newObj;\n    if (obj) {\n      stack.push([key,obj,array])\n      if (allowPartial) {\n        if (array) {\n          obj.push(newObj);\n        } else {\n          obj[key!] = newObj;\n        }\n      }\n    }\n    obj = newObj;\n    key = newKey;\n    array = false;\n    ++level;\n  }\n  parser.onkey = newKey => key = newKey;\n  parser.onvalue = value => array ? obj.push(value) : obj[key!] = value;\n  parser.oncloseobject = ()=>{\n    delete obj.incomplete;\n    key = null;\n    if (--level === 0) {\n      done = true;\n    } else {\n      const completedObj = obj;\n      [key, obj, array] = stack.pop()!;\n      if (!allowPartial) {\n        if (array) {\n          obj.push(completedObj);\n        } else {\n          obj[key!] = completedObj;\n        }\n      }\n    }\n  }\n  parser.onopenarray = () => {\n    const newObj = [];\n    (newObj as any).incomplete = true;\n    if (!result) result = newObj;\n    if (obj) {\n      stack.push([key,obj,array])\n      if (allowPartial) {\n        if (array) {\n          obj.push(newObj);\n        } else {\n          obj[key!] = newObj;\n        }\n      }\n    }\n    obj = newObj;\n    array = true;\n    key = null;\n    ++level;\n  }\n  parser.onclosearray = () => {\n    delete obj.incomplete;\n    key = null;\n    if (--level === 0) {\n      done = true;\n    } else {\n      const completedObj = obj;\n      [key, obj, array] = stack.pop()!;\n      if (!allowPartial) {\n        if (array) {\n          obj.push(completedObj);\n        } else {\n          obj[key!] = completedObj;\n        }\n      }\n    }\n  }\n\n  return {\n    write(jsonPart: string) {\n      parser.write(jsonPart);\n      return result;\n    },\n    done() {\n      return done;\n    }\n  }\n}\n","import Dexie from 'dexie';\nimport { extractDbSchema } from './helpers';\nimport { DexieExportJsonMeta, DexieExportJsonStructure, VERSION } from './json-structure';\nimport { TSON } from './tson';\nimport { JsonStream } from './json-stream';\n\nexport interface StaticImportOptions {\n  noTransaction?: boolean;\n  chunkSizeBytes?: number; // Default: DEFAULT_KILOBYTES_PER_CHUNK ( 1MB )\n  filter?: (table: string, value: any, key?: any) => boolean;\n  progressCallback?: (progress: ImportProgress) => boolean;\n}\n\nexport interface ImportOptions extends StaticImportOptions {\n  acceptMissingTables?: boolean;\n  acceptVersionDiff?: boolean;\n  acceptNameDiff?: boolean;\n  acceptChangedPrimaryKey?: boolean;\n  overwriteValues?: boolean;\n  clearTablesBeforeImport?: boolean;\n  noTransaction?: boolean;\n  chunkSizeBytes?: number; // Default: DEFAULT_KILOBYTES_PER_CHUNK ( 1MB )\n  filter?: (table: string, value: any, key?: any) => boolean;\n  progressCallback?: (progress: ImportProgress) => boolean;\n}\n\nconst DEFAULT_KILOBYTES_PER_CHUNK = 1024;\n\nexport interface ImportProgress {\n  totalTables: number;\n  completedTables: number;\n  totalRows: number | undefined;\n  completedRows: number;\n  done: boolean;\n}\n\nexport async function importDB(exportedData: Blob | JsonStream<DexieExportJsonStructure>, options?: StaticImportOptions): Promise<Dexie> {\n  options = options || {}; // All booleans defaults to false.\n  const CHUNK_SIZE = options!.chunkSizeBytes || (DEFAULT_KILOBYTES_PER_CHUNK * 1024);\n  const stream = await loadUntilWeGotEnoughData(exportedData, CHUNK_SIZE);\n  const dbExport = stream.result.data!;\n  const db = new Dexie(dbExport.databaseName);\n  db.version(dbExport.databaseVersion).stores(extractDbSchema(dbExport));\n  await importInto(db, stream, options);\n  return db;\n}\n\nexport async function peakImportFile(exportedData: Blob): Promise<DexieExportJsonMeta> {\n  const stream = JsonStream<DexieExportJsonStructure>(exportedData);\n  while (!stream.eof()) {\n    await stream.pullAsync(5 * 1024); // 5 k is normally enough for the headers. If not, it will just do another go.\n    if (stream.result.data && stream.result.data!.data) {\n      // @ts-ignore - TS won't allow us to delete a required property - but we are going to cast it.\n      delete stream.result.data.data; // Don't return half-baked data array.\n      break;\n    }\n  }\n  return stream.result as DexieExportJsonMeta;\n}\n\nexport async function importInto(db: Dexie, exportedData: Blob | JsonStream<DexieExportJsonStructure>, options?: ImportOptions): Promise<void> {\n  options = options || {}; // All booleans defaults to false.\n  const CHUNK_SIZE = options!.chunkSizeBytes || (DEFAULT_KILOBYTES_PER_CHUNK * 1024);\n  const jsonStream = await loadUntilWeGotEnoughData(exportedData, CHUNK_SIZE);\n  let dbExportFile = jsonStream.result;\n  const readBlobsSynchronously = 'FileReaderSync' in self; // true in workers only.\n\n  const dbExport = dbExportFile.data!;\n\n  if (!options!.acceptNameDiff && db.name !== dbExport.databaseName)\n    throw new Error(`Name differs. Current database name is ${db.name} but export is ${dbExport.databaseName}`);\n  if (!options!.acceptVersionDiff && db.verno !== dbExport.databaseVersion) {\n    // Possible feature: Call upgraders in some isolated way if this happens... ?\n    throw new Error(`Database version differs. Current database is in version ${db.verno} but export is ${dbExport.databaseVersion}`);\n  }\n  \n  const { progressCallback } = options;\n  const progress: ImportProgress = {\n    done: false,\n    completedRows: 0,\n    completedTables: 0,\n    totalRows: dbExport.tables.reduce((p, c) => p + c.rowCount, 0),\n    totalTables: dbExport.tables.length\n  };\n  if (progressCallback) {\n    // Keep ongoing transaction private\n    Dexie.ignoreTransaction(()=>progressCallback(progress));\n  }\n\n  if (options!.clearTablesBeforeImport) {\n    for (const table of db.tables) {\n      await table.clear();\n    }\n  }\n\n  if (options.noTransaction) {\n    await importAll();\n  } else {\n    await db.transaction('rw', db.tables, importAll);\n  }  \n\n  async function importAll () {\n    do {\n      for (const tableExport of dbExport.data) {\n        if (!tableExport.rows) break; // Need to pull more!\n        if (!(tableExport.rows as any).incomplete && tableExport.rows.length === 0)\n          continue;\n\n        if (progressCallback) {\n          // Keep ongoing transaction private\n          Dexie.ignoreTransaction(()=>progressCallback(progress));\n        }\n        const tableName = tableExport.tableName;\n        const table = db.table(tableName);\n        const tableSchemaStr = dbExport.tables.filter(t => t.name === tableName)[0].schema;\n        if (!table) {\n          if (!options!.acceptMissingTables)\n            throw new Error(`Exported table ${tableExport.tableName} is missing in installed database`);\n          else\n            continue;\n        }\n        if (!options!.acceptChangedPrimaryKey &&\n          tableSchemaStr.split(',')[0] != table.schema.primKey.src) {\n          throw new Error(`Primary key differs for table ${tableExport.tableName}. `);\n        }\n\n        const sourceRows = tableExport.rows\n        \n        // Our rows may be partial, so we need to ensure each one is completed before using it\n        const rows: any[] = [];\n        for(let i = 0; i < sourceRows.length; i++) {\n          const obj = sourceRows[i];\n          if (!obj.incomplete) {\n            rows.push(TSON.revive(obj));\n          } else {\n            break;\n          }\n        }\n\n        const filter = options!.filter;\n        const filteredRows = filter ?\n          tableExport.inbound ?\n            rows.filter(value => filter(tableName, value)) :\n            rows.filter(([key, value]) => filter(tableName, value, key)) :\n          rows;\n        const [keys, values] = tableExport.inbound ?\n          [undefined, filteredRows] :\n          [filteredRows.map(row=>row[0]), rows.map(row=>row[1])];\n\n        if (options!.overwriteValues)\n          await table.bulkPut(values, keys);\n        else\n          await table.bulkAdd(values, keys);\n          \n        progress.completedRows += rows.length;\n        if (!(rows as any).incomplete) {\n          progress.completedTables += 1;\n        }\n        sourceRows.splice(0, rows.length); // Free up RAM, keep existing array instance.\n      }\n\n      // Avoid unnescessary loops in \"for (const tableExport of dbExport.data)\" \n      while (dbExport.data.length > 0 && dbExport.data[0].rows && !(dbExport.data[0].rows as any).incomplete) {\n        // We've already imported all rows from the first table. Delete its occurrence\n        dbExport.data.splice(0, 1); \n      }\n      if (!jsonStream.done() && !jsonStream.eof()) {\n        // Pull some more (keeping transaction alive)\n        if (readBlobsSynchronously) {\n          // If we can pull from blob synchronically, we don't have to\n          // keep transaction alive using Dexie.waitFor().\n          // This will only be possible in workers.\n          jsonStream.pullSync(CHUNK_SIZE);\n        } else {\n          await Dexie.waitFor(jsonStream.pullAsync(CHUNK_SIZE));\n        }\n      } else break;\n    } while (true)\n  }\n  progress.done = true;\n  if (progressCallback) {\n    // Keep ongoing transaction private\n    Dexie.ignoreTransaction(()=>progressCallback(progress));\n  }\n}\n\nasync function loadUntilWeGotEnoughData(exportedData: Blob | JsonStream<DexieExportJsonStructure>, CHUNK_SIZE: number): Promise<JsonStream<DexieExportJsonStructure>> {\n  const stream = ('slice' in exportedData ?\n    JsonStream<DexieExportJsonStructure>(exportedData) :\n    exportedData);\n\n  while (!stream.eof()) {\n    await stream.pullAsync(CHUNK_SIZE);\n\n    if (stream.result.data && stream.result.data!.data)\n      break;\n  }\n  const dbExportFile = stream.result;\n  if (!dbExportFile || dbExportFile.formatName != \"dexie\")\n    throw new Error(`Given file is not a dexie export`);\n  if (dbExportFile.formatVersion! > VERSION) {\n    throw new Error(`Format version ${dbExportFile.formatVersion} not supported`);\n  }\n  if (!dbExportFile.data!) {\n    throw new Error(`No data in export file`);\n  }\n  if (!dbExportFile.data!.databaseName) {\n    throw new Error(`Missing databaseName in export file`);\n  }\n  if (!dbExportFile.data!.databaseVersion) {\n    throw new Error(`Missing databaseVersion in export file`);\n  }\n  if (!dbExportFile.data!.tables) {\n    throw new Error(`Missing tables in export file`);\n  }\n  return stream;  \n}\n","import Dexie from 'dexie';\nimport { ExportOptions, exportDB } from './export';\nimport { importDB, peakImportFile, ImportOptions, importInto, StaticImportOptions } from './import';\nimport { DexieExportJsonMeta } from './json-structure';\n\nexport { exportDB, ExportOptions};\nexport { importDB, importInto, peakImportFile, ImportOptions, DexieExportJsonMeta};\n\n//\n// Extend Dexie interface (typescript-wise)\n//\ndeclare module 'dexie' {\n  // Extend methods on db\n  interface Dexie {\n    export(options?: ExportOptions): Promise<Blob>;\n    import(blob: Blob, options?: ImportOptions): Promise<void>;\n  }\n  interface DexieConstructor {\n    import(blob: Blob, options?: StaticImportOptions): Promise<Dexie>;\n  }\n}\n\n//\n// Extend Dexie interface (runtime wise)\n//\n\nDexie.prototype.export = function (this: Dexie, options?: ExportOptions) {\n  return exportDB(this, options);\n};\nDexie.prototype.import = function (this: Dexie, blob: Blob, options?: ImportOptions) {\n  return importInto(this, blob, options);\n};\nDexie.import = (blob: Blob, options?: StaticImportOptions) => importDB(blob, options);\n\nexport default ()=>{\n  throw new Error(\"This addon extends Dexie.prototype globally and does not have be included in Dexie constructor's addons options.\")\n};\n"],"names":["this","_typeof","obj","Symbol","iterator","constructor","prototype","_classCallCheck","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_defineProperty","value","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","push","apply","_objectSpread2","arguments","source","forEach","getOwnPropertyDescriptors","defineProperties","_slicedToArray","arr","_arrayWithHoles","Array","isArray","_iterableToArrayLimit","_arr","_n","_d","_e","undefined","_s","_i","next","done","err","_unsupportedIterableToArray","_nonIterableRest","_toConsumableArray","_arrayWithoutHoles","_arrayLikeToArray","_iterableToArray","iter","from","_nonIterableSpread","o","minLen","n","toString","call","slice","name","test","len","arr2","TypesonPromise","f","p","Promise","__typeson__type__","toStringTag","then","onFulfilled","onRejected","_this","typesonResolve","typesonReject","res","reject","resolve","v","meth","promArr","map","prom","toStr","hasOwn$1","hasOwnProperty","getProto","getPrototypeOf","fnToString","isThenable","catchCheck","isObject","val","hasConstructorOf","a","b","proto","Ctor","isPlainObject","escapeKeyPathComponent","keyPathComponent","replace","unescapeKeyPathComponent","getByKeyPath","keyPath","period","indexOf","innerObj","setAtKeyPath","_await","direct","hasOwn","internalStateObjPropsToIgnore","_async","args","e","nestedPathsFirst","keypath","as","match","bs","Typeson","options","plainObjectReplacers","nonplainObjectReplacers","revivers","types","_createClass","protoProps","staticProps","stringify","replacer","space","opts","stringification","encapsulated","encapsulate","JSON","stringifySync","throwOnBadSyncType","sync","stringifyAsync","parse","text","reviver","revive","parseSync","parseAsync","specialTypeNames","stateObj","returnTypeNames","rootTypeName","iterateNone","checkPromises","ret","promisesData","all","pd","promResults","promResult","_exit","newPromisesData","_promisesData$splice2","splice","_prData","cyclic","parentObj","detectedType","encaps","_encapsulate","isTypesonPromise","_invoke","body","result","encaps2","_result","that","refObjs","refKeys","promisesDataRoot","encapsulateObserver","finish","typeNames","values","getJSONType","Set","$types","$","_adaptBuiltinStateObjectProperties","ownKeysObj","cb","assign","vals","prop","tmp","resolvingTypesonPromise","observerData","$typeof","runObserver","type","awaitingTypesonPromise","includes","Number","isNaN","NEGATIVE_INFINITY","POSITIVE_INFINITY","replaced","iterateIn","iterateUnsetNumeric","refIndex","cyclicKeypath","clone","isPlainObj","isArr","ArrayBuffer","addLength","_loop","kp","Boolean","endIterateIn","end","endIterateOwn","vl","_loop2","endIterateUnsetNumeric","plainObject","replacers","existing","concat","replaceAsync","replacing","typeDetected","encapsulateSync","encapsulateAsync","keyPathResolutions","ignore$Types","executeReviver","Error","reviveAsync","revivalPromises","checkUndefined","retrn","Undefined","possibleTypesonPromise","revivePlainObjects","plainObjectTypes","entries","_ref3","_ref4","plain","sort","reduce","reducer","_ref7","newVal","_revive","_clone","k","set","_keyPathResolutions$","_target","_clone2","_ret","typ","r","_ref8","reviveSync","register","typeSpecSets","R","typeSpec","typSpec","typeId","JSON_TYPES","spec","testPlainObjects","existingReplacer","Class","x","create","_spec2","replacerObj","bind","start","fallback","reviverObj","isUserObject","userObject","s","arrayNonindexKeys","some","String","parseInt","sparseUndefined","undef","primitiveObjects","StringObject","BooleanObject","NumberObject","specialNumbers","nan","NaN","infinity","negativeInfinity","date","dt","time","getTime","Date","regexp","rexp","flags","global","ignoreCase","multiline","sticky","unicode","RegExp","mp","Map","st","chars","lookup","Uint8Array","charCodeAt","encode","arraybuffer","byteOffset","lngth","byteLength","bytes","base64","decode","encoded1","encoded2","encoded3","encoded4","bufferLength","_i2","buffers","index","b64","buffer","_global","self","typedArrays","typeName","arrType","TypedArray","toLowerCase","l","encoded","b64Obj","dataview","DataView","intlTypes","IntlCollator","Intl","Collator","c","resolvedOptions","locale","IntlDateTimeFormat","DateTimeFormat","dtf","IntlNumberFormat","NumberFormat","nf","string2arraybuffer","str","array","file","req","XMLHttpRequest","overrideMimeType","open","URL","createObjectURL","send","status","stringContents","responseText","lastModified","File","reader","FileReader","addEventListener","error","readAsBinaryString","bigint","BigInt","bigintObject","cryptokey","extractable","crypto","subtle","exportKey","jwk","algorithm","usages","importKey","imagedata","d","data","width","height","ImageData","Uint8ClampedArray","imagebitmap","dataset","bm","canvas","document","createElement","getContext","drawImage","toDataURL","ctx","img","src","createImageBitmap","filelist","fl","item","_files","blob","Blob","StructuredCloning","typedArray","encodeB64","decodeB64","Dexie","require$$0","clarinet"],"mappings":"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"}
\ No newline at end of file diff --git a/ext/lib/dexie.min.js b/ext/lib/dexie.min.js deleted file mode 100644 index 9a028fba..00000000 --- a/ext/lib/dexie.min.js +++ /dev/null @@ -1,2 +0,0 @@ -(function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Dexie=t()})(this,function(){"use strict";var g=function(){return(g=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}).apply(this,arguments)};function i(e,t,n){if(n||2===arguments.length)for(var r,i=0,o=t.length;i<o;i++)!r&&i in t||((r=r||Array.prototype.slice.call(t,0,i))[i]=t[i]);return e.concat(r||Array.prototype.slice.call(t))}var h="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,x=Object.keys,b=Array.isArray;function u(t,n){return"object"!=typeof n||x(n).forEach(function(e){t[e]=n[e]}),t}"undefined"==typeof Promise||h.Promise||(h.Promise=Promise);var s=Object.getPrototypeOf,n={}.hasOwnProperty;function m(e,t){return n.call(e,t)}function r(t,n){"function"==typeof n&&(n=n(s(t))),("undefined"==typeof Reflect?x:Reflect.ownKeys)(n).forEach(function(e){c(t,e,n[e])})}var a=Object.defineProperty;function c(e,t,n,r){a(e,t,u(n&&m(n,"get")&&"function"==typeof n.get?{get:n.get,set:n.set,configurable:!0}:{value:n,configurable:!0,writable:!0},r))}function o(t){return{from:function(e){return t.prototype=Object.create(e.prototype),c(t.prototype,"constructor",t),{extend:r.bind(null,t.prototype)}}}}var l=Object.getOwnPropertyDescriptor;function f(e,t){return l(e,t)||(e=s(e))&&f(e,t)}var d=[].slice;function y(e,t,n){return d.call(e,t,n)}function p(e,t){return t(e)}function v(e){if(!e)throw new Error("Assertion Failed")}function _(e){h.setImmediate?setImmediate(e):setTimeout(e,0)}function w(e,r){return e.reduce(function(e,t,n){n=r(t,n);return n&&(e[n[0]]=n[1]),e},{})}function k(e,t){if(m(e,t))return e[t];if(!t)return e;if("string"!=typeof t){for(var n=[],r=0,i=t.length;r<i;++r){var o=k(e,t[r]);n.push(o)}return n}var a=t.indexOf(".");if(-1!==a){var u=e[t.substr(0,a)];return void 0===u?void 0:k(u,t.substr(a+1))}}function E(e,t,n){if(e&&void 0!==t&&!("isFrozen"in Object&&Object.isFrozen(e)))if("string"!=typeof t&&"length"in t){v("string"!=typeof n&&"length"in n);for(var r=0,i=t.length;r<i;++r)E(e,t[r],n[r])}else{var o,a,u=t.indexOf(".");-1!==u?(o=t.substr(0,u),""===(a=t.substr(u+1))?void 0===n?b(e)&&!isNaN(parseInt(o))?e.splice(o,1):delete e[o]:e[o]=n:E(u=!(u=e[o])||!m(e,o)?e[o]={}:u,a,n)):void 0===n?b(e)&&!isNaN(parseInt(t))?e.splice(t,1):delete e[t]:e[t]=n}}function P(e){var t,n={};for(t in e)m(e,t)&&(n[t]=e[t]);return n}var t=[].concat;function K(e){return t.apply([],e)}var e="Boolean,String,Date,RegExp,Blob,File,FileList,FileSystemFileHandle,ArrayBuffer,DataView,Uint8ClampedArray,ImageBitmap,ImageData,Map,Set,CryptoKey".split(",").concat(K([8,16,32,64].map(function(t){return["Int","Uint","Float"].map(function(e){return e+t+"Array"})}))).filter(function(e){return h[e]}),O=e.map(function(e){return h[e]});w(e,function(e){return[e,!0]});var S=null;function A(e){S="undefined"!=typeof WeakMap&&new WeakMap;e=function e(t){if(!t||"object"!=typeof t)return t;var n=S&&S.get(t);if(n)return n;if(b(t)){n=[],S&&S.set(t,n);for(var r=0,i=t.length;r<i;++r)n.push(e(t[r]))}else if(0<=O.indexOf(t.constructor))n=t;else{var o,a=s(t);for(o in n=a===Object.prototype?{}:Object.create(a),S&&S.set(t,n),t)m(t,o)&&(n[o]=e(t[o]))}return n}(e);return S=null,e}var C={}.toString;function j(e){return C.call(e).slice(8,-1)}var D="undefined"!=typeof Symbol?Symbol.iterator:"@@iterator",I="symbol"==typeof D?function(e){var t;return null!=e&&(t=e[D])&&t.apply(e)}:function(){return null},B={};function T(e){var t,n,r,i;if(1===arguments.length){if(b(e))return e.slice();if(this===B&&"string"==typeof e)return[e];if(i=I(e)){for(n=[];!(r=i.next()).done;)n.push(r.value);return n}if(null==e)return[e];if("number"!=typeof(t=e.length))return[e];for(n=new Array(t);t--;)n[t]=e[t];return n}for(t=arguments.length,n=new Array(t);t--;)n[t]=arguments[t];return n}var R="undefined"!=typeof Symbol?function(e){return"AsyncFunction"===e[Symbol.toStringTag]}:function(){return!1},F="undefined"!=typeof location&&/^(http|https):\/\/(localhost|127\.0\.0\.1)/.test(location.href);function M(e,t){F=e,N=t}var N=function(){return!0},q=!new Error("").stack;function U(){if(q)try{throw new Error}catch(e){return e}return new Error}function L(e,t){var n=e.stack;return n?(t=t||0,0===n.indexOf(e.name)&&(t+=(e.name+e.message).split("\n").length),n.split("\n").slice(t).filter(N).map(function(e){return"\n"+e}).join("")):""}var V=["Unknown","Constraint","Data","TransactionInactive","ReadOnly","Version","NotFound","InvalidState","InvalidAccess","Abort","Timeout","QuotaExceeded","Syntax","DataClone"],e=["Modify","Bulk","OpenFailed","VersionChange","Schema","Upgrade","InvalidTable","MissingAPI","NoSuchDatabase","InvalidArgument","SubTransaction","Unsupported","Internal","DatabaseClosed","PrematureCommit","ForeignAwait"].concat(V),W={VersionChanged:"Database version changed by other database connection",DatabaseClosed:"Database has been closed",Abort:"Transaction aborted",TransactionInactive:"Transaction has already completed or failed",MissingAPI:"IndexedDB API missing. Please visit https://tinyurl.com/y2uuvskb"};function z(e,t){this._e=U(),this.name=e,this.message=t}function Y(e,t){return e+". Errors: "+Object.keys(t).map(function(e){return t[e].toString()}).filter(function(e,t,n){return n.indexOf(e)===t}).join("\n")}function G(e,t,n,r){this._e=U(),this.failures=t,this.failedKeys=r,this.successCount=n,this.message=Y(e,t)}function H(e,t){this._e=U(),this.name="BulkError",this.failures=Object.keys(t).map(function(e){return t[e]}),this.failuresByPos=t,this.message=Y(e,t)}o(z).from(Error).extend({stack:{get:function(){return this._stack||(this._stack=this.name+": "+this.message+L(this._e,2))}},toString:function(){return this.name+": "+this.message}}),o(G).from(z),o(H).from(z);var Q=e.reduce(function(e,t){return e[t]=t+"Error",e},{}),X=z,J=e.reduce(function(e,n){var r=n+"Error";function t(e,t){this._e=U(),this.name=r,e?"string"==typeof e?(this.message=e+(t?"\n "+t:""),this.inner=t||null):"object"==typeof e&&(this.message=e.name+" "+e.message,this.inner=e):(this.message=W[n]||r,this.inner=null)}return o(t).from(X),e[n]=t,e},{});J.Syntax=SyntaxError,J.Type=TypeError,J.Range=RangeError;var $=V.reduce(function(e,t){return e[t+"Error"]=J[t],e},{});V=e.reduce(function(e,t){return-1===["Syntax","Type","Range"].indexOf(t)&&(e[t+"Error"]=J[t]),e},{});function Z(){}function ee(e){return e}function te(t,n){return null==t||t===ee?n:function(e){return n(t(e))}}function ne(e,t){return function(){e.apply(this,arguments),t.apply(this,arguments)}}function re(i,o){return i===Z?o:function(){var e=i.apply(this,arguments);void 0!==e&&(arguments[0]=e);var t=this.onsuccess,n=this.onerror;this.onsuccess=null,this.onerror=null;var r=o.apply(this,arguments);return t&&(this.onsuccess=this.onsuccess?ne(t,this.onsuccess):t),n&&(this.onerror=this.onerror?ne(n,this.onerror):n),void 0!==r?r:e}}function ie(n,r){return n===Z?r:function(){n.apply(this,arguments);var e=this.onsuccess,t=this.onerror;this.onsuccess=this.onerror=null,r.apply(this,arguments),e&&(this.onsuccess=this.onsuccess?ne(e,this.onsuccess):e),t&&(this.onerror=this.onerror?ne(t,this.onerror):t)}}function oe(i,o){return i===Z?o:function(e){var t=i.apply(this,arguments);u(e,t);var n=this.onsuccess,r=this.onerror;this.onsuccess=null,this.onerror=null;e=o.apply(this,arguments);return n&&(this.onsuccess=this.onsuccess?ne(n,this.onsuccess):n),r&&(this.onerror=this.onerror?ne(r,this.onerror):r),void 0===t?void 0===e?void 0:e:u(t,e)}}function ae(e,t){return e===Z?t:function(){return!1!==t.apply(this,arguments)&&e.apply(this,arguments)}}function ue(i,o){return i===Z?o:function(){var e=i.apply(this,arguments);if(e&&"function"==typeof e.then){for(var t=this,n=arguments.length,r=new Array(n);n--;)r[n]=arguments[n];return e.then(function(){return o.apply(t,r)})}return o.apply(this,arguments)}}V.ModifyError=G,V.DexieError=z,V.BulkError=H;var se={},ce=100,le=100,e="undefined"==typeof Promise?[]:function(){var e=Promise.resolve();if("undefined"==typeof crypto||!crypto.subtle)return[e,s(e),e];var t=crypto.subtle.digest("SHA-512",new Uint8Array([0]));return[t,s(t),e]}(),fe=e[0],he=e[1],de=e[2],pe=he&&he.then,ye=fe&&fe.constructor,ve=!!de,me=!1,ge=de?function(){de.then(Ne)}:h.setImmediate?setImmediate.bind(null,Ne):h.MutationObserver?function(){var e=document.createElement("div");new MutationObserver(function(){Ne(),e=null}).observe(e,{attributes:!0}),e.setAttribute("i","1")}:function(){setTimeout(Ne,0)},be=function(e,t){Se.push([e,t]),we&&(ge(),we=!1)},_e=!0,we=!0,xe=[],ke=[],Ee=null,Pe=ee,Ke={id:"global",global:!0,ref:0,unhandleds:[],onunhandled:ct,pgp:!1,env:{},finalize:function(){this.unhandleds.forEach(function(e){try{ct(e[0],e[1])}catch(e){}})}},Oe=Ke,Se=[],Ae=0,Ce=[];function je(e){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");this._listeners=[],this.onuncatched=Z,this._lib=!1;var t=this._PSD=Oe;if(F&&(this._stackHolder=U(),this._prev=null,this._numPrev=0),"function"!=typeof e){if(e!==se)throw new TypeError("Not a function");return this._state=arguments[1],this._value=arguments[2],void(!1===this._state&&Be(this,this._value))}this._state=null,this._value=null,++t.ref,function t(r,e){try{e(function(n){if(null===r._state){if(n===r)throw new TypeError("A promise cannot be resolved with itself.");var e=r._lib&&qe();n&&"function"==typeof n.then?t(r,function(e,t){n instanceof je?n._then(e,t):n.then(e,t)}):(r._state=!0,r._value=n,Te(r)),e&&Ue()}},Be.bind(null,r))}catch(e){Be(r,e)}}(this,e)}var De={get:function(){var u=Oe,t=Qe;function e(n,r){var i=this,o=!u.global&&(u!==Oe||t!==Qe),a=o&&!Ze(),e=new je(function(e,t){Re(i,new Ie(at(n,u,o,a),at(r,u,o,a),e,t,u))});return F&&Me(e,this),e}return e.prototype=se,e},set:function(e){c(this,"then",e&&e.prototype===se?De:{get:function(){return e},set:De.set})}};function Ie(e,t,n,r,i){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof t?t:null,this.resolve=n,this.reject=r,this.psd=i}function Be(t,n){var e,r;ke.push(n),null===t._state&&(e=t._lib&&qe(),n=Pe(n),t._state=!1,t._value=n,F&&null!==n&&"object"==typeof n&&!n._promise&&function(e,t,n){try{e.apply(null,n)}catch(e){t&&t(e)}}(function(){var e=f(n,"stack");n._promise=t,c(n,"stack",{get:function(){return me?e&&(e.get?e.get.apply(n):e.value):t.stack}})}),r=t,xe.some(function(e){return e._value===r._value})||xe.push(r),Te(t),e&&Ue())}function Te(e){var t=e._listeners;e._listeners=[];for(var n=0,r=t.length;n<r;++n)Re(e,t[n]);var i=e._PSD;--i.ref||i.finalize(),0===Ae&&(++Ae,be(function(){0==--Ae&&Le()},[]))}function Re(e,t){if(null!==e._state){var n=e._state?t.onFulfilled:t.onRejected;if(null===n)return(e._state?t.resolve:t.reject)(e._value);++t.psd.ref,++Ae,be(Fe,[n,e,t])}else e._listeners.push(t)}function Fe(e,t,n){try{var r,i=(Ee=t)._value;t._state?r=e(i):(ke.length&&(ke=[]),r=e(i),-1===ke.indexOf(i)&&function(e){var t=xe.length;for(;t;)if(xe[--t]._value===e._value)return xe.splice(t,1)}(t)),n.resolve(r)}catch(e){n.reject(e)}finally{Ee=null,0==--Ae&&Le(),--n.psd.ref||n.psd.finalize()}}function Me(e,t){var n=t?t._numPrev+1:0;n<ce&&(e._prev=t,e._numPrev=n)}function Ne(){qe()&&Ue()}function qe(){var e=_e;return we=_e=!1,e}function Ue(){var e,t,n;do{for(;0<Se.length;)for(e=Se,Se=[],n=e.length,t=0;t<n;++t){var r=e[t];r[0].apply(null,r[1])}}while(0<Se.length);we=_e=!0}function Le(){var e=xe;xe=[],e.forEach(function(e){e._PSD.onunhandled.call(null,e._value,e)});for(var t=Ce.slice(0),n=t.length;n;)t[--n]()}function Ve(e){return new je(se,!1,e)}function We(n,r){var i=Oe;return function(){var e=qe(),t=Oe;try{return nt(i,!0),n.apply(this,arguments)}catch(e){r&&r(e)}finally{nt(t,!1),e&&Ue()}}}r(je.prototype,{then:De,_then:function(e,t){Re(this,new Ie(null,null,e,t,Oe))},catch:function(e){if(1===arguments.length)return this.then(null,e);var t=e,n=arguments[1];return"function"==typeof t?this.then(null,function(e){return(e instanceof t?n:Ve)(e)}):this.then(null,function(e){return(e&&e.name===t?n:Ve)(e)})},finally:function(t){return this.then(function(e){return t(),e},function(e){return t(),Ve(e)})},stack:{get:function(){if(this._stack)return this._stack;try{me=!0;var e=function e(t,n,r){if(n.length===r)return n;var i="";{var o,a,u;!1===t._state&&(null!=(o=t._value)?(a=o.name||"Error",u=o.message||o,i=L(o,0)):(a=o,u=""),n.push(a+(u?": "+u:"")+i))}F&&((i=L(t._stackHolder,2))&&-1===n.indexOf(i)&&n.push(i),t._prev&&e(t._prev,n,r));return n}(this,[],20).join("\nFrom previous: ");return null!==this._state&&(this._stack=e),e}finally{me=!1}}},timeout:function(r,i){var o=this;return r<1/0?new je(function(e,t){var n=setTimeout(function(){return t(new J.Timeout(i))},r);o.then(e,t).finally(clearTimeout.bind(null,n))}):this}}),"undefined"!=typeof Symbol&&Symbol.toStringTag&&c(je.prototype,Symbol.toStringTag,"Dexie.Promise"),Ke.env=rt(),r(je,{all:function(){var o=T.apply(null,arguments).map(et);return new je(function(n,r){0===o.length&&n([]);var i=o.length;o.forEach(function(e,t){return je.resolve(e).then(function(e){o[t]=e,--i||n(o)},r)})})},resolve:function(n){if(n instanceof je)return n;if(n&&"function"==typeof n.then)return new je(function(e,t){n.then(e,t)});var e=new je(se,!0,n);return Me(e,Ee),e},reject:Ve,race:function(){var e=T.apply(null,arguments).map(et);return new je(function(t,n){e.map(function(e){return je.resolve(e).then(t,n)})})},PSD:{get:function(){return Oe},set:function(e){return Oe=e}},totalEchoes:{get:function(){return Qe}},newPSD:Je,usePSD:it,scheduler:{get:function(){return be},set:function(e){be=e}},rejectionMapper:{get:function(){return Pe},set:function(e){Pe=e}},follow:function(i,n){return new je(function(e,t){return Je(function(n,r){var e=Oe;e.unhandleds=[],e.onunhandled=r,e.finalize=ne(function(){var t,e=this;t=function(){0===e.unhandleds.length?n():r(e.unhandleds[0])},Ce.push(function e(){t(),Ce.splice(Ce.indexOf(e),1)}),++Ae,be(function(){0==--Ae&&Le()},[])},e.finalize),i()},n,e,t)})}}),ye&&(ye.allSettled&&c(je,"allSettled",function(){var e=T.apply(null,arguments).map(et);return new je(function(n){0===e.length&&n([]);var r=e.length,i=new Array(r);e.forEach(function(e,t){return je.resolve(e).then(function(e){return i[t]={status:"fulfilled",value:e}},function(e){return i[t]={status:"rejected",reason:e}}).then(function(){return--r||n(i)})})})}),ye.any&&"undefined"!=typeof AggregateError&&c(je,"any",function(){var e=T.apply(null,arguments).map(et);return new je(function(n,r){0===e.length&&r(new AggregateError([]));var i=e.length,o=new Array(i);e.forEach(function(e,t){return je.resolve(e).then(function(e){return n(e)},function(e){o[t]=e,--i||r(new AggregateError(o))})})})}));var ze={awaits:0,echoes:0,id:0},Ye=0,Ge=[],He=0,Qe=0,Xe=0;function Je(e,t,n,r){var i=Oe,o=Object.create(i);o.parent=i,o.ref=0,o.global=!1,o.id=++Xe;var a=Ke.env;o.env=ve?{Promise:je,PromiseProp:{value:je,configurable:!0,writable:!0},all:je.all,race:je.race,allSettled:je.allSettled,any:je.any,resolve:je.resolve,reject:je.reject,nthen:ut(a.nthen,o),gthen:ut(a.gthen,o)}:{},t&&u(o,t),++i.ref,o.finalize=function(){--this.parent.ref||this.parent.finalize()};r=it(o,e,n,r);return 0===o.ref&&o.finalize(),r}function $e(){return ze.id||(ze.id=++Ye),++ze.awaits,ze.echoes+=le,ze.id}function Ze(){return!!ze.awaits&&(0==--ze.awaits&&(ze.id=0),ze.echoes=ze.awaits*le,!0)}function et(e){return ze.echoes&&e&&e.constructor===ye?($e(),e.then(function(e){return Ze(),e},function(e){return Ze(),lt(e)})):e}function tt(){var e=Ge[Ge.length-1];Ge.pop(),nt(e,!1)}function nt(e,t){var n,r=Oe;(t?!ze.echoes||He++&&e===Oe:!He||--He&&e===Oe)||ot(t?function(e){++Qe,ze.echoes&&0!=--ze.echoes||(ze.echoes=ze.id=0),Ge.push(Oe),nt(e,!0)}.bind(null,e):tt),e!==Oe&&(Oe=e,r===Ke&&(Ke.env=rt()),ve&&(n=Ke.env.Promise,t=e.env,he.then=t.nthen,n.prototype.then=t.gthen,(r.global||e.global)&&(Object.defineProperty(h,"Promise",t.PromiseProp),n.all=t.all,n.race=t.race,n.resolve=t.resolve,n.reject=t.reject,t.allSettled&&(n.allSettled=t.allSettled),t.any&&(n.any=t.any))))}function rt(){var e=h.Promise;return ve?{Promise:e,PromiseProp:Object.getOwnPropertyDescriptor(h,"Promise"),all:e.all,race:e.race,allSettled:e.allSettled,any:e.any,resolve:e.resolve,reject:e.reject,nthen:he.then,gthen:e.prototype.then}:{}}function it(e,t,n,r,i){var o=Oe;try{return nt(e,!0),t(n,r,i)}finally{nt(o,!1)}}function ot(e){pe.call(fe,e)}function at(t,n,r,i){return"function"!=typeof t?t:function(){var e=Oe;r&&$e(),nt(n,!0);try{return t.apply(this,arguments)}finally{nt(e,!1),i&&ot(Ze)}}}function ut(n,r){return function(e,t){return n.call(this,at(e,r),at(t,r))}}-1===(""+pe).indexOf("[native code]")&&($e=Ze=Z);var st="unhandledrejection";function ct(e,t){var n;try{n=t.onuncatched(e)}catch(e){}if(!1!==n)try{var r,i={promise:t,reason:e};if(h.document&&document.createEvent?((r=document.createEvent("Event")).initEvent(st,!0,!0),u(r,i)):h.CustomEvent&&u(r=new CustomEvent(st,{detail:i}),i),r&&h.dispatchEvent&&(dispatchEvent(r),!h.PromiseRejectionEvent&&h.onunhandledrejection))try{h.onunhandledrejection(r)}catch(e){}F&&r&&!r.defaultPrevented&&console.warn("Unhandled rejection: "+(e.stack||e))}catch(e){}}var lt=je.reject;function ft(e){return!/(dexie\.js|dexie\.min\.js)/.test(e)}var ht=String.fromCharCode(65535),dt="Invalid key provided. Keys must be of type string, number, Date or Array<string | number | Date>.",pt="String expected.",yt=[],vt="undefined"!=typeof navigator&&/(MSIE|Trident|Edge)/.test(navigator.userAgent),mt=vt,gt=vt,bt="__dbnames",_t="readonly",wt="readwrite";function xt(e,t){return e?t?function(){return e.apply(this,arguments)&&t.apply(this,arguments)}:e:t}var kt={type:3,lower:-1/0,lowerOpen:!1,upper:[[]],upperOpen:!1};function Et(t){return"string"!=typeof t||/\./.test(t)?function(e){return e}:function(e){return void 0===e[t]&&t in e&&delete(e=A(e))[t],e}}var Pt=(Kt.prototype._trans=function(e,r,t){var n=this._tx||Oe.trans,i=this.name;function o(e,t,n){if(!n.schema[i])throw new J.NotFound("Table "+i+" not part of transaction");return r(n.idbtrans,n)}var a=qe();try{return n&&n.db===this.db?n===Oe.trans?n._promise(e,o,t):Je(function(){return n._promise(e,o,t)},{trans:n,transless:Oe.transless||Oe}):function t(n,r,i,o){if(n.idbdb&&(n._state.openComplete||Oe.letThrough||n._vip)){var a=n._createTransaction(r,i,n._dbSchema);try{a.create(),n._state.PR1398_maxLoop=3}catch(e){return e.name===Q.InvalidState&&n.isOpen()&&0<--n._state.PR1398_maxLoop?(console.warn("Dexie: Need to reopen db"),n._close(),n.open().then(function(){return t(n,r,i,o)})):lt(e)}return a._promise(r,function(e,t){return Je(function(){return Oe.trans=a,o(e,t,a)})}).then(function(e){return a._completion.then(function(){return e})})}if(n._state.openComplete)return lt(new J.DatabaseClosed(n._state.dbOpenError));if(!n._state.isBeingOpened){if(!n._options.autoOpen)return lt(new J.DatabaseClosed);n.open().catch(Z)}return n._state.dbReadyPromise.then(function(){return t(n,r,i,o)})}(this.db,e,[this.name],o)}finally{a&&Ue()}},Kt.prototype.get=function(t,e){var n=this;return t&&t.constructor===Object?this.where(t).first(e):this._trans("readonly",function(e){return n.core.get({trans:e,key:t}).then(function(e){return n.hook.reading.fire(e)})}).then(e)},Kt.prototype.where=function(o){if("string"==typeof o)return new this.db.WhereClause(this,o);if(b(o))return new this.db.WhereClause(this,"["+o.join("+")+"]");var n=x(o);if(1===n.length)return this.where(n[0]).equals(o[n[0]]);var e=this.schema.indexes.concat(this.schema.primKey).filter(function(t){return t.compound&&n.every(function(e){return 0<=t.keyPath.indexOf(e)})&&t.keyPath.every(function(e){return 0<=n.indexOf(e)})})[0];if(e&&this.db._maxKey!==ht)return this.where(e.name).equals(e.keyPath.map(function(e){return o[e]}));!e&&F&&console.warn("The query "+JSON.stringify(o)+" on "+this.name+" would benefit of a compound index ["+n.join("+")+"]");var a=this.schema.idxByName,r=this.db._deps.indexedDB;function u(e,t){try{return 0===r.cmp(e,t)}catch(e){return!1}}var t=n.reduce(function(e,t){var n=e[0],r=e[1],e=a[t],i=o[t];return[n||e,n||!e?xt(r,e&&e.multi?function(e){e=k(e,t);return b(e)&&e.some(function(e){return u(i,e)})}:function(e){return u(i,k(e,t))}):r]},[null,null]),i=t[0],t=t[1];return i?this.where(i.name).equals(o[i.keyPath]).filter(t):e?this.filter(t):this.where(n).equals("")},Kt.prototype.filter=function(e){return this.toCollection().and(e)},Kt.prototype.count=function(e){return this.toCollection().count(e)},Kt.prototype.offset=function(e){return this.toCollection().offset(e)},Kt.prototype.limit=function(e){return this.toCollection().limit(e)},Kt.prototype.each=function(e){return this.toCollection().each(e)},Kt.prototype.toArray=function(e){return this.toCollection().toArray(e)},Kt.prototype.toCollection=function(){return new this.db.Collection(new this.db.WhereClause(this))},Kt.prototype.orderBy=function(e){return new this.db.Collection(new this.db.WhereClause(this,b(e)?"["+e.join("+")+"]":e))},Kt.prototype.reverse=function(){return this.toCollection().reverse()},Kt.prototype.mapToClass=function(r){this.schema.mappedClass=r;function e(e){if(!e)return e;var t,n=Object.create(r.prototype);for(t in e)if(m(e,t))try{n[t]=e[t]}catch(e){}return n}return this.schema.readHook&&this.hook.reading.unsubscribe(this.schema.readHook),this.schema.readHook=e,this.hook("reading",e),r},Kt.prototype.defineClass=function(){return this.mapToClass(function(e){u(this,e)})},Kt.prototype.add=function(t,n){var r=this,e=this.schema.primKey,i=e.auto,o=e.keyPath,a=t;return o&&i&&(a=Et(o)(t)),this._trans("readwrite",function(e){return r.core.mutate({trans:e,type:"add",keys:null!=n?[n]:null,values:[a]})}).then(function(e){return e.numFailures?je.reject(e.failures[0]):e.lastResult}).then(function(e){if(o)try{E(t,o,e)}catch(e){}return e})},Kt.prototype.update=function(t,n){if("object"!=typeof t||b(t))return this.where(":id").equals(t).modify(n);var e=k(t,this.schema.primKey.keyPath);if(void 0===e)return lt(new J.InvalidArgument("Given object does not contain its primary key"));try{"function"!=typeof n?x(n).forEach(function(e){E(t,e,n[e])}):n(t,{value:t,primKey:e})}catch(e){}return this.where(":id").equals(e).modify(n)},Kt.prototype.put=function(t,n){var r=this,e=this.schema.primKey,i=e.auto,o=e.keyPath,a=t;return o&&i&&(a=Et(o)(t)),this._trans("readwrite",function(e){return r.core.mutate({trans:e,type:"put",values:[a],keys:null!=n?[n]:null})}).then(function(e){return e.numFailures?je.reject(e.failures[0]):e.lastResult}).then(function(e){if(o)try{E(t,o,e)}catch(e){}return e})},Kt.prototype.delete=function(t){var n=this;return this._trans("readwrite",function(e){return n.core.mutate({trans:e,type:"delete",keys:[t]})}).then(function(e){return e.numFailures?je.reject(e.failures[0]):void 0})},Kt.prototype.clear=function(){var t=this;return this._trans("readwrite",function(e){return t.core.mutate({trans:e,type:"deleteRange",range:kt})}).then(function(e){return e.numFailures?je.reject(e.failures[0]):void 0})},Kt.prototype.bulkGet=function(t){var n=this;return this._trans("readonly",function(e){return n.core.getMany({keys:t,trans:e}).then(function(e){return e.map(function(e){return n.hook.reading.fire(e)})})})},Kt.prototype.bulkAdd=function(r,e,t){var o=this,a=Array.isArray(e)?e:void 0,u=(t=t||(a?void 0:e))?t.allKeys:void 0;return this._trans("readwrite",function(e){var t=o.schema.primKey,n=t.auto,t=t.keyPath;if(t&&a)throw new J.InvalidArgument("bulkAdd(): keys argument invalid on tables with inbound keys");if(a&&a.length!==r.length)throw new J.InvalidArgument("Arguments objects and keys must have the same length");var i=r.length,t=t&&n?r.map(Et(t)):r;return o.core.mutate({trans:e,type:"add",keys:a,values:t,wantResults:u}).then(function(e){var t=e.numFailures,n=e.results,r=e.lastResult,e=e.failures;if(0===t)return u?n:r;throw new H(o.name+".bulkAdd(): "+t+" of "+i+" operations failed",e)})})},Kt.prototype.bulkPut=function(r,e,t){var o=this,a=Array.isArray(e)?e:void 0,u=(t=t||(a?void 0:e))?t.allKeys:void 0;return this._trans("readwrite",function(e){var t=o.schema.primKey,n=t.auto,t=t.keyPath;if(t&&a)throw new J.InvalidArgument("bulkPut(): keys argument invalid on tables with inbound keys");if(a&&a.length!==r.length)throw new J.InvalidArgument("Arguments objects and keys must have the same length");var i=r.length,t=t&&n?r.map(Et(t)):r;return o.core.mutate({trans:e,type:"put",keys:a,values:t,wantResults:u}).then(function(e){var t=e.numFailures,n=e.results,r=e.lastResult,e=e.failures;if(0===t)return u?n:r;throw new H(o.name+".bulkPut(): "+t+" of "+i+" operations failed",e)})})},Kt.prototype.bulkDelete=function(t){var r=this,i=t.length;return this._trans("readwrite",function(e){return r.core.mutate({trans:e,type:"delete",keys:t})}).then(function(e){var t=e.numFailures,n=e.lastResult,e=e.failures;if(0===t)return n;throw new H(r.name+".bulkDelete(): "+t+" of "+i+" operations failed",e)})},Kt);function Kt(){}function Ot(i){function t(e,t){if(t){for(var n=arguments.length,r=new Array(n-1);--n;)r[n-1]=arguments[n];return a[e].subscribe.apply(null,r),i}if("string"==typeof e)return a[e]}var a={};t.addEventType=u;for(var e=1,n=arguments.length;e<n;++e)u(arguments[e]);return t;function u(e,n,r){if("object"!=typeof e){var i;n=n||ae;var o={subscribers:[],fire:r=r||Z,subscribe:function(e){-1===o.subscribers.indexOf(e)&&(o.subscribers.push(e),o.fire=n(o.fire,e))},unsubscribe:function(t){o.subscribers=o.subscribers.filter(function(e){return e!==t}),o.fire=o.subscribers.reduce(n,r)}};return a[e]=t[e]=o}x(i=e).forEach(function(e){var t=i[e];if(b(t))u(e,i[e][0],i[e][1]);else{if("asap"!==t)throw new J.InvalidArgument("Invalid event config");var n=u(e,ee,function(){for(var e=arguments.length,t=new Array(e);e--;)t[e]=arguments[e];n.subscribers.forEach(function(e){_(function(){e.apply(null,t)})})})}})}}function St(e,t){return o(t).from({prototype:e}),t}function At(e,t){return!(e.filter||e.algorithm||e.or)&&(t?e.justLimit:!e.replayFilter)}function Ct(e,t){e.filter=xt(e.filter,t)}function jt(e,t,n){var r=e.replayFilter;e.replayFilter=r?function(){return xt(r(),t())}:t,e.justLimit=n&&!r}function Dt(e,t){if(e.isPrimKey)return t.primaryKey;var n=t.getIndexByKeyPath(e.index);if(!n)throw new J.Schema("KeyPath "+e.index+" on object store "+t.name+" is not indexed");return n}function It(e,t,n){var r=Dt(e,t.schema);return t.openCursor({trans:n,values:!e.keysOnly,reverse:"prev"===e.dir,unique:!!e.unique,query:{index:r,range:e.range}})}function Bt(e,o,t,n){var a=e.replayFilter?xt(e.filter,e.replayFilter()):e.filter;if(e.or){var u={},r=function(e,t,n){var r,i;a&&!a(t,n,function(e){return t.stop(e)},function(e){return t.fail(e)})||("[object ArrayBuffer]"===(i=""+(r=t.primaryKey))&&(i=""+new Uint8Array(r)),m(u,i)||(u[i]=!0,o(e,t,n)))};return Promise.all([e.or._iterate(r,t),Tt(It(e,n,t),e.algorithm,r,!e.keysOnly&&e.valueMapper)])}return Tt(It(e,n,t),xt(e.algorithm,a),o,!e.keysOnly&&e.valueMapper)}function Tt(e,r,i,o){var a=We(o?function(e,t,n){return i(o(e),t,n)}:i);return e.then(function(n){if(n)return n.start(function(){var t=function(){return n.continue()};r&&!r(n,function(e){return t=e},function(e){n.stop(e),t=Z},function(e){n.fail(e),t=Z})||a(n.value,n,function(e){return t=e}),t()})})}function Rt(e,t){try{var n=Ft(e),r=Ft(t);if(n!==r)return"Array"===n?1:"Array"===r?-1:"binary"===n?1:"binary"===r?-1:"string"===n?1:"string"===r?-1:"Date"===n?1:"Date"!==r?NaN:-1;switch(n){case"number":case"Date":case"string":return t<e?1:e<t?-1:0;case"binary":return function(e,t){for(var n=e.length,r=t.length,i=n<r?n:r,o=0;o<i;++o)if(e[o]!==t[o])return e[o]<t[o]?-1:1;return n===r?0:n<r?-1:1}(Mt(e),Mt(t));case"Array":return function(e,t){for(var n=e.length,r=t.length,i=n<r?n:r,o=0;o<i;++o){var a=Rt(e[o],t[o]);if(0!==a)return a}return n===r?0:n<r?-1:1}(e,t)}}catch(e){}return NaN}function Ft(e){var t=typeof e;if("object"!=t)return t;if(ArrayBuffer.isView(e))return"binary";e=j(e);return"ArrayBuffer"===e?"binary":e}function Mt(e){return e instanceof Uint8Array?e:ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(e)}var Nt=(qt.prototype._read=function(e,t){var n=this._ctx;return n.error?n.table._trans(null,lt.bind(null,n.error)):n.table._trans("readonly",e).then(t)},qt.prototype._write=function(e){var t=this._ctx;return t.error?t.table._trans(null,lt.bind(null,t.error)):t.table._trans("readwrite",e,"locked")},qt.prototype._addAlgorithm=function(e){var t=this._ctx;t.algorithm=xt(t.algorithm,e)},qt.prototype._iterate=function(e,t){return Bt(this._ctx,e,t,this._ctx.table.core)},qt.prototype.clone=function(e){var t=Object.create(this.constructor.prototype),n=Object.create(this._ctx);return e&&u(n,e),t._ctx=n,t},qt.prototype.raw=function(){return this._ctx.valueMapper=null,this},qt.prototype.each=function(t){var n=this._ctx;return this._read(function(e){return Bt(n,t,e,n.table.core)})},qt.prototype.count=function(e){var i=this;return this._read(function(e){var t=i._ctx,n=t.table.core;if(At(t,!0))return n.count({trans:e,query:{index:Dt(t,n.schema),range:t.range}}).then(function(e){return Math.min(e,t.limit)});var r=0;return Bt(t,function(){return++r,!1},e,n).then(function(){return r})}).then(e)},qt.prototype.sortBy=function(e,t){var n=e.split(".").reverse(),r=n[0],i=n.length-1;function o(e,t){return t?o(e[n[t]],t-1):e[r]}var a="next"===this._ctx.dir?1:-1;function u(e,t){e=o(e,i),t=o(t,i);return e<t?-a:t<e?a:0}return this.toArray(function(e){return e.sort(u)}).then(t)},qt.prototype.toArray=function(e){var o=this;return this._read(function(e){var t=o._ctx;if("next"===t.dir&&At(t,!0)&&0<t.limit){var n=t.valueMapper,r=Dt(t,t.table.core.schema);return t.table.core.query({trans:e,limit:t.limit,values:!0,query:{index:r,range:t.range}}).then(function(e){e=e.result;return n?e.map(n):e})}var i=[];return Bt(t,function(e){return i.push(e)},e,t.table.core).then(function(){return i})},e)},qt.prototype.offset=function(t){var e=this._ctx;return t<=0||(e.offset+=t,At(e)?jt(e,function(){var n=t;return function(e,t){return 0===n||(1===n?--n:t(function(){e.advance(n),n=0}),!1)}}):jt(e,function(){var e=t;return function(){return--e<0}})),this},qt.prototype.limit=function(e){return this._ctx.limit=Math.min(this._ctx.limit,e),jt(this._ctx,function(){var r=e;return function(e,t,n){return--r<=0&&t(n),0<=r}},!0),this},qt.prototype.until=function(r,i){return Ct(this._ctx,function(e,t,n){return!r(e.value)||(t(n),i)}),this},qt.prototype.first=function(e){return this.limit(1).toArray(function(e){return e[0]}).then(e)},qt.prototype.last=function(e){return this.reverse().first(e)},qt.prototype.filter=function(t){var e;return Ct(this._ctx,function(e){return t(e.value)}),(e=this._ctx).isMatch=xt(e.isMatch,t),this},qt.prototype.and=function(e){return this.filter(e)},qt.prototype.or=function(e){return new this.db.WhereClause(this._ctx.table,e,this)},qt.prototype.reverse=function(){return this._ctx.dir="prev"===this._ctx.dir?"next":"prev",this._ondirectionchange&&this._ondirectionchange(this._ctx.dir),this},qt.prototype.desc=function(){return this.reverse()},qt.prototype.eachKey=function(n){var e=this._ctx;return e.keysOnly=!e.isMatch,this.each(function(e,t){n(t.key,t)})},qt.prototype.eachUniqueKey=function(e){return this._ctx.unique="unique",this.eachKey(e)},qt.prototype.eachPrimaryKey=function(n){var e=this._ctx;return e.keysOnly=!e.isMatch,this.each(function(e,t){n(t.primaryKey,t)})},qt.prototype.keys=function(e){var t=this._ctx;t.keysOnly=!t.isMatch;var n=[];return this.each(function(e,t){n.push(t.key)}).then(function(){return n}).then(e)},qt.prototype.primaryKeys=function(e){var n=this._ctx;if("next"===n.dir&&At(n,!0)&&0<n.limit)return this._read(function(e){var t=Dt(n,n.table.core.schema);return n.table.core.query({trans:e,values:!1,limit:n.limit,query:{index:t,range:n.range}})}).then(function(e){return e.result}).then(e);n.keysOnly=!n.isMatch;var r=[];return this.each(function(e,t){r.push(t.primaryKey)}).then(function(){return r}).then(e)},qt.prototype.uniqueKeys=function(e){return this._ctx.unique="unique",this.keys(e)},qt.prototype.firstKey=function(e){return this.limit(1).keys(function(e){return e[0]}).then(e)},qt.prototype.lastKey=function(e){return this.reverse().firstKey(e)},qt.prototype.distinct=function(){var e=this._ctx,e=e.index&&e.table.schema.idxByName[e.index];if(!e||!e.multi)return this;var n={};return Ct(this._ctx,function(e){var t=e.primaryKey.toString(),e=m(n,t);return n[t]=!0,!e}),this},qt.prototype.modify=function(_){var n=this,w=this._ctx;return this._write(function(d){var o,a,p;p="function"==typeof _?_:(o=x(_),a=o.length,function(e){for(var t=!1,n=0;n<a;++n){var r=o[n],i=_[r];k(e,r)!==i&&(E(e,r,i),t=!0)}return t});function y(e,t){var n=t.failures,t=t.numFailures;s+=e-t;for(var r=0,i=x(n);r<i.length;r++){var o=i[r];u.push(n[o])}}var v=w.table.core,e=v.schema.primaryKey,m=e.outbound,g=e.extractKey,b=n.db._options.modifyChunkSize||200,u=[],s=0,t=[];return n.clone().primaryKeys().then(function(f){function h(c){var l=Math.min(b,f.length-c);return v.getMany({trans:d,keys:f.slice(c,c+l),cache:"immutable"}).then(function(e){for(var n=[],t=[],r=m?[]:null,i=[],o=0;o<l;++o){var a=e[o],u={value:A(a),primKey:f[c+o]};!1!==p.call(u,u.value,u)&&(null==u.value?i.push(f[c+o]):m||0===Rt(g(a),g(u.value))?(t.push(u.value),m&&r.push(f[c+o])):(i.push(f[c+o]),n.push(u.value)))}var s=At(w)&&w.limit===1/0&&("function"!=typeof _||_===Ut)&&{index:w.index,range:w.range};return Promise.resolve(0<n.length&&v.mutate({trans:d,type:"add",values:n}).then(function(e){for(var t in e.failures)i.splice(parseInt(t),1);y(n.length,e)})).then(function(){return(0<t.length||s&&"object"==typeof _)&&v.mutate({trans:d,type:"put",keys:r,values:t,criteria:s,changeSpec:"function"!=typeof _&&_}).then(function(e){return y(t.length,e)})}).then(function(){return(0<i.length||s&&_===Ut)&&v.mutate({trans:d,type:"delete",keys:i,criteria:s}).then(function(e){return y(i.length,e)})}).then(function(){return f.length>c+l&&h(c+b)})})}return h(0).then(function(){if(0<u.length)throw new G("Error modifying one or more objects",u,s,t);return f.length})})})},qt.prototype.delete=function(){var i=this._ctx,n=i.range;return At(i)&&(i.isPrimKey&&!gt||3===n.type)?this._write(function(e){var t=i.table.core.schema.primaryKey,r=n;return i.table.core.count({trans:e,query:{index:t,range:r}}).then(function(n){return i.table.core.mutate({trans:e,type:"deleteRange",range:r}).then(function(e){var t=e.failures;e.lastResult,e.results;e=e.numFailures;if(e)throw new G("Could not delete some values",Object.keys(t).map(function(e){return t[e]}),n-e);return n-e})})}):this.modify(Ut)},qt);function qt(){}var Ut=function(e,t){return t.value=null};function Lt(e,t){return e<t?-1:e===t?0:1}function Vt(e,t){return t<e?-1:e===t?0:1}function Wt(e,t,n){e=e instanceof Qt?new e.Collection(e):e;return e._ctx.error=new(n||TypeError)(t),e}function zt(e){return new e.Collection(e,function(){return Ht("")}).limit(0)}function Yt(e,s,n,r){var i,c,l,f,h,d,p,y=n.length;if(!n.every(function(e){return"string"==typeof e}))return Wt(e,pt);function t(e){i="next"===e?function(e){return e.toUpperCase()}:function(e){return e.toLowerCase()},c="next"===e?function(e){return e.toLowerCase()}:function(e){return e.toUpperCase()},l="next"===e?Lt:Vt;var t=n.map(function(e){return{lower:c(e),upper:i(e)}}).sort(function(e,t){return l(e.lower,t.lower)});f=t.map(function(e){return e.upper}),h=t.map(function(e){return e.lower}),p="next"===(d=e)?"":r}t("next");e=new e.Collection(e,function(){return Gt(f[0],h[y-1]+r)});e._ondirectionchange=function(e){t(e)};var v=0;return e._addAlgorithm(function(e,t,n){var r=e.key;if("string"!=typeof r)return!1;var i=c(r);if(s(i,h,v))return!0;for(var o=null,a=v;a<y;++a){var u=function(e,t,n,r,i,o){for(var a=Math.min(e.length,r.length),u=-1,s=0;s<a;++s){var c=t[s];if(c!==r[s])return i(e[s],n[s])<0?e.substr(0,s)+n[s]+n.substr(s+1):i(e[s],r[s])<0?e.substr(0,s)+r[s]+n.substr(s+1):0<=u?e.substr(0,u)+t[u]+n.substr(u+1):null;i(e[s],c)<0&&(u=s)}return a<r.length&&"next"===o?e+n.substr(e.length):a<e.length&&"prev"===o?e.substr(0,n.length):u<0?null:e.substr(0,u)+r[u]+n.substr(u+1)}(r,i,f[a],h[a],l,d);null===u&&null===o?v=a+1:(null===o||0<l(o,u))&&(o=u)}return t(null!==o?function(){e.continue(o+p)}:n),!1}),e}function Gt(e,t,n,r){return{type:2,lower:e,upper:t,lowerOpen:n,upperOpen:r}}function Ht(e){return{type:1,lower:e,upper:e}}var Qt=(Object.defineProperty(Xt.prototype,"Collection",{get:function(){return this._ctx.table.db.Collection},enumerable:!1,configurable:!0}),Xt.prototype.between=function(e,t,n,r){n=!1!==n,r=!0===r;try{return 0<this._cmp(e,t)||0===this._cmp(e,t)&&(n||r)&&(!n||!r)?zt(this):new this.Collection(this,function(){return Gt(e,t,!n,!r)})}catch(e){return Wt(this,dt)}},Xt.prototype.equals=function(e){return null==e?Wt(this,dt):new this.Collection(this,function(){return Ht(e)})},Xt.prototype.above=function(e){return null==e?Wt(this,dt):new this.Collection(this,function(){return Gt(e,void 0,!0)})},Xt.prototype.aboveOrEqual=function(e){return null==e?Wt(this,dt):new this.Collection(this,function(){return Gt(e,void 0,!1)})},Xt.prototype.below=function(e){return null==e?Wt(this,dt):new this.Collection(this,function(){return Gt(void 0,e,!1,!0)})},Xt.prototype.belowOrEqual=function(e){return null==e?Wt(this,dt):new this.Collection(this,function(){return Gt(void 0,e)})},Xt.prototype.startsWith=function(e){return"string"!=typeof e?Wt(this,pt):this.between(e,e+ht,!0,!0)},Xt.prototype.startsWithIgnoreCase=function(e){return""===e?this.startsWith(e):Yt(this,function(e,t){return 0===e.indexOf(t[0])},[e],ht)},Xt.prototype.equalsIgnoreCase=function(e){return Yt(this,function(e,t){return e===t[0]},[e],"")},Xt.prototype.anyOfIgnoreCase=function(){var e=T.apply(B,arguments);return 0===e.length?zt(this):Yt(this,function(e,t){return-1!==t.indexOf(e)},e,"")},Xt.prototype.startsWithAnyOfIgnoreCase=function(){var e=T.apply(B,arguments);return 0===e.length?zt(this):Yt(this,function(t,e){return e.some(function(e){return 0===t.indexOf(e)})},e,ht)},Xt.prototype.anyOf=function(){var t=this,i=T.apply(B,arguments),o=this._cmp;try{i.sort(o)}catch(e){return Wt(this,dt)}if(0===i.length)return zt(this);var e=new this.Collection(this,function(){return Gt(i[0],i[i.length-1])});e._ondirectionchange=function(e){o="next"===e?t._ascending:t._descending,i.sort(o)};var a=0;return e._addAlgorithm(function(e,t,n){for(var r=e.key;0<o(r,i[a]);)if(++a===i.length)return t(n),!1;return 0===o(r,i[a])||(t(function(){e.continue(i[a])}),!1)}),e},Xt.prototype.notEqual=function(e){return this.inAnyRange([[-1/0,e],[e,this.db._maxKey]],{includeLowers:!1,includeUppers:!1})},Xt.prototype.noneOf=function(){var e=T.apply(B,arguments);if(0===e.length)return new this.Collection(this);try{e.sort(this._ascending)}catch(e){return Wt(this,dt)}var t=e.reduce(function(e,t){return e?e.concat([[e[e.length-1][1],t]]):[[-1/0,t]]},null);return t.push([e[e.length-1],this.db._maxKey]),this.inAnyRange(t,{includeLowers:!1,includeUppers:!1})},Xt.prototype.inAnyRange=function(e,t){var o=this,a=this._cmp,u=this._ascending,n=this._descending,s=this._min,c=this._max;if(0===e.length)return zt(this);if(!e.every(function(e){return void 0!==e[0]&&void 0!==e[1]&&u(e[0],e[1])<=0}))return Wt(this,"First argument to inAnyRange() must be an Array of two-value Arrays [lower,upper] where upper must not be lower than lower",J.InvalidArgument);var r=!t||!1!==t.includeLowers,i=t&&!0===t.includeUppers;var l,f=u;function h(e,t){return f(e[0],t[0])}try{(l=e.reduce(function(e,t){for(var n=0,r=e.length;n<r;++n){var i=e[n];if(a(t[0],i[1])<0&&0<a(t[1],i[0])){i[0]=s(i[0],t[0]),i[1]=c(i[1],t[1]);break}}return n===r&&e.push(t),e},[])).sort(h)}catch(e){return Wt(this,dt)}var d=0,p=i?function(e){return 0<u(e,l[d][1])}:function(e){return 0<=u(e,l[d][1])},y=r?function(e){return 0<n(e,l[d][0])}:function(e){return 0<=n(e,l[d][0])};var v=p,e=new this.Collection(this,function(){return Gt(l[0][0],l[l.length-1][1],!r,!i)});return e._ondirectionchange=function(e){f="next"===e?(v=p,u):(v=y,n),l.sort(h)},e._addAlgorithm(function(e,t,n){for(var r,i=e.key;v(i);)if(++d===l.length)return t(n),!1;return!p(r=i)&&!y(r)||(0===o._cmp(i,l[d][1])||0===o._cmp(i,l[d][0])||t(function(){f===u?e.continue(l[d][0]):e.continue(l[d][1])}),!1)}),e},Xt.prototype.startsWithAnyOf=function(){var e=T.apply(B,arguments);return e.every(function(e){return"string"==typeof e})?0===e.length?zt(this):this.inAnyRange(e.map(function(e){return[e,e+ht]})):Wt(this,"startsWithAnyOf() only works with strings")},Xt);function Xt(){}function Jt(t){return We(function(e){return $t(e),t(e.target.error),!1})}function $t(e){e.stopPropagation&&e.stopPropagation(),e.preventDefault&&e.preventDefault()}var Zt="storagemutated",en="x-storagemutated-1",tn=Ot(null,Zt),nn=(rn.prototype._lock=function(){return v(!Oe.global),++this._reculock,1!==this._reculock||Oe.global||(Oe.lockOwnerFor=this),this},rn.prototype._unlock=function(){if(v(!Oe.global),0==--this._reculock)for(Oe.global||(Oe.lockOwnerFor=null);0<this._blockedFuncs.length&&!this._locked();){var e=this._blockedFuncs.shift();try{it(e[1],e[0])}catch(e){}}return this},rn.prototype._locked=function(){return this._reculock&&Oe.lockOwnerFor!==this},rn.prototype.create=function(t){var n=this;if(!this.mode)return this;var e=this.db.idbdb,r=this.db._state.dbOpenError;if(v(!this.idbtrans),!t&&!e)switch(r&&r.name){case"DatabaseClosedError":throw new J.DatabaseClosed(r);case"MissingAPIError":throw new J.MissingAPI(r.message,r);default:throw new J.OpenFailed(r)}if(!this.active)throw new J.TransactionInactive;return v(null===this._completion._state),(t=this.idbtrans=t||(this.db.core||e).transaction(this.storeNames,this.mode,{durability:this.chromeTransactionDurability})).onerror=We(function(e){$t(e),n._reject(t.error)}),t.onabort=We(function(e){$t(e),n.active&&n._reject(new J.Abort(t.error)),n.active=!1,n.on("abort").fire(e)}),t.oncomplete=We(function(){n.active=!1,n._resolve(),"mutatedParts"in t&&tn.storagemutated.fire(t.mutatedParts)}),this},rn.prototype._promise=function(n,r,i){var o=this;if("readwrite"===n&&"readwrite"!==this.mode)return lt(new J.ReadOnly("Transaction is readonly"));if(!this.active)return lt(new J.TransactionInactive);if(this._locked())return new je(function(e,t){o._blockedFuncs.push([function(){o._promise(n,r,i).then(e,t)},Oe])});if(i)return Je(function(){var e=new je(function(e,t){o._lock();var n=r(e,t,o);n&&n.then&&n.then(e,t)});return e.finally(function(){return o._unlock()}),e._lib=!0,e});var e=new je(function(e,t){var n=r(e,t,o);n&&n.then&&n.then(e,t)});return e._lib=!0,e},rn.prototype._root=function(){return this.parent?this.parent._root():this},rn.prototype.waitFor=function(e){var t,r=this._root(),i=je.resolve(e);r._waitingFor?r._waitingFor=r._waitingFor.then(function(){return i}):(r._waitingFor=i,r._waitingQueue=[],t=r.idbtrans.objectStore(r.storeNames[0]),function e(){for(++r._spinCount;r._waitingQueue.length;)r._waitingQueue.shift()();r._waitingFor&&(t.get(-1/0).onsuccess=e)}());var o=r._waitingFor;return new je(function(t,n){i.then(function(e){return r._waitingQueue.push(We(t.bind(null,e)))},function(e){return r._waitingQueue.push(We(n.bind(null,e)))}).finally(function(){r._waitingFor===o&&(r._waitingFor=null)})})},rn.prototype.abort=function(){this.active&&(this.active=!1,this.idbtrans&&this.idbtrans.abort(),this._reject(new J.Abort))},rn.prototype.table=function(e){var t=this._memoizedTables||(this._memoizedTables={});if(m(t,e))return t[e];var n=this.schema[e];if(!n)throw new J.NotFound("Table "+e+" not part of transaction");n=new this.db.Table(e,n,this);return n.core=this.db.core.table(e),t[e]=n},rn);function rn(){}function on(e,t,n,r,i,o,a){return{name:e,keyPath:t,unique:n,multi:r,auto:i,compound:o,src:(n&&!a?"&":"")+(r?"*":"")+(i?"++":"")+an(t)}}function an(e){return"string"==typeof e?e:e?"["+[].join.call(e,"+")+"]":""}function un(e,t,n){return{name:e,primKey:t,indexes:n,mappedClass:null,idxByName:w(n,function(e){return[e.name,e]})}}var sn=function(e){try{return e.only([[]]),sn=function(){return[[]]},[[]]}catch(e){return sn=function(){return ht},ht}};function cn(t){return null==t?function(){}:"string"==typeof t?1===(n=t).split(".").length?function(e){return e[n]}:function(e){return k(e,n)}:function(e){return k(e,t)};var n}function ln(e){return[].slice.call(e)}var fn=0;function hn(e){return null==e?":id":"string"==typeof e?e:"["+e.join("+")+"]"}function dn(e,i,t){function w(e){if(3===e.type)return null;if(4===e.type)throw new Error("Cannot convert never type to IDBKeyRange");var t=e.lower,n=e.upper,r=e.lowerOpen,e=e.upperOpen;return void 0===t?void 0===n?null:i.upperBound(n,!!e):void 0===n?i.lowerBound(t,!!r):i.bound(t,n,!!r,!!e)}function n(e){var h,_=e.name;return{name:_,schema:e,mutate:function(e){var y=e.trans,v=e.type,m=e.keys,g=e.values,b=e.range;return new Promise(function(t,e){t=We(t);var n=y.objectStore(_),r=null==n.keyPath,i="put"===v||"add"===v;if(!i&&"delete"!==v&&"deleteRange"!==v)throw new Error("Invalid operation type: "+v);var o,a=(m||g||{length:1}).length;if(m&&g&&m.length!==g.length)throw new Error("Given keys array must have same length as given values array.");if(0===a)return t({numFailures:0,failures:{},results:[],lastResult:void 0});function u(e){++l,$t(e)}var s=[],c=[],l=0;if("deleteRange"===v){if(4===b.type)return t({numFailures:l,failures:c,results:[],lastResult:void 0});3===b.type?s.push(o=n.clear()):s.push(o=n.delete(w(b)))}else{var r=i?r?[g,m]:[g,null]:[m,null],f=r[0],h=r[1];if(i)for(var d=0;d<a;++d)s.push(o=h&&void 0!==h[d]?n[v](f[d],h[d]):n[v](f[d])),o.onerror=u;else for(d=0;d<a;++d)s.push(o=n[v](f[d])),o.onerror=u}function p(e){e=e.target.result,s.forEach(function(e,t){return null!=e.error&&(c[t]=e.error)}),t({numFailures:l,failures:c,results:"delete"===v?m:s.map(function(e){return e.result}),lastResult:e})}o.onerror=function(e){u(e),p(e)},o.onsuccess=p})},getMany:function(e){var f=e.trans,h=e.keys;return new Promise(function(t,e){t=We(t);for(var n,r=f.objectStore(_),i=h.length,o=new Array(i),a=0,u=0,s=function(e){e=e.target;o[e._pos]=e.result,++u===a&&t(o)},c=Jt(e),l=0;l<i;++l)null!=h[l]&&((n=r.get(h[l]))._pos=l,n.onsuccess=s,n.onerror=c,++a);0===a&&t(o)})},get:function(e){var r=e.trans,i=e.key;return new Promise(function(t,e){t=We(t);var n=r.objectStore(_).get(i);n.onsuccess=function(e){return t(e.target.result)},n.onerror=Jt(e)})},query:(h=s,function(f){return new Promise(function(n,e){n=We(n);var r,i,o,t=f.trans,a=f.values,u=f.limit,s=f.query,c=u===1/0?void 0:u,l=s.index,s=s.range,t=t.objectStore(_),l=l.isPrimaryKey?t:t.index(l.name),s=w(s);if(0===u)return n({result:[]});h?((c=a?l.getAll(s,c):l.getAllKeys(s,c)).onsuccess=function(e){return n({result:e.target.result})},c.onerror=Jt(e)):(r=0,i=!a&&"openKeyCursor"in l?l.openKeyCursor(s):l.openCursor(s),o=[],i.onsuccess=function(e){var t=i.result;return t?(o.push(a?t.value:t.primaryKey),++r===u?n({result:o}):void t.continue()):n({result:o})},i.onerror=Jt(e))})}),openCursor:function(e){var c=e.trans,o=e.values,a=e.query,u=e.reverse,l=e.unique;return new Promise(function(t,n){t=We(t);var e=a.index,r=a.range,i=c.objectStore(_),i=e.isPrimaryKey?i:i.index(e.name),e=u?l?"prevunique":"prev":l?"nextunique":"next",s=!o&&"openKeyCursor"in i?i.openKeyCursor(w(r),e):i.openCursor(w(r),e);s.onerror=Jt(n),s.onsuccess=We(function(e){var r,i,o,a,u=s.result;u?(u.___id=++fn,u.done=!1,r=u.continue.bind(u),i=(i=u.continuePrimaryKey)&&i.bind(u),o=u.advance.bind(u),a=function(){throw new Error("Cursor not stopped")},u.trans=c,u.stop=u.continue=u.continuePrimaryKey=u.advance=function(){throw new Error("Cursor not started")},u.fail=We(n),u.next=function(){var e=this,t=1;return this.start(function(){return t--?e.continue():e.stop()}).then(function(){return e})},u.start=function(e){function t(){if(s.result)try{e()}catch(e){u.fail(e)}else u.done=!0,u.start=function(){throw new Error("Cursor behind last entry")},u.stop()}var n=new Promise(function(t,e){t=We(t),s.onerror=Jt(e),u.fail=e,u.stop=function(e){u.stop=u.continue=u.continuePrimaryKey=u.advance=a,t(e)}});return s.onsuccess=We(function(e){s.onsuccess=t,t()}),u.continue=r,u.continuePrimaryKey=i,u.advance=o,t(),n},t(u)):t(null)},n)})},count:function(e){var t=e.query,i=e.trans,o=t.index,a=t.range;return new Promise(function(t,e){var n=i.objectStore(_),r=o.isPrimaryKey?n:n.index(o.name),n=w(a),r=n?r.count(n):r.count();r.onsuccess=We(function(e){return t(e.target.result)}),r.onerror=Jt(e)})}}}var r,o,a,u=(o=t,a=ln((r=e).objectStoreNames),{schema:{name:r.name,tables:a.map(function(e){return o.objectStore(e)}).map(function(t){var e=t.keyPath,n=t.autoIncrement,r=b(e),i={},n={name:t.name,primaryKey:{name:null,isPrimaryKey:!0,outbound:null==e,compound:r,keyPath:e,autoIncrement:n,unique:!0,extractKey:cn(e)},indexes:ln(t.indexNames).map(function(e){return t.index(e)}).map(function(e){var t=e.name,n=e.unique,r=e.multiEntry,e=e.keyPath,r={name:t,compound:b(e),keyPath:e,unique:n,multiEntry:r,extractKey:cn(e)};return i[hn(e)]=r}),getIndexByKeyPath:function(e){return i[hn(e)]}};return i[":id"]=n.primaryKey,null!=e&&(i[hn(e)]=n.primaryKey),n})},hasGetAll:0<a.length&&"getAll"in o.objectStore(a[0])&&!("undefined"!=typeof navigator&&/Safari/.test(navigator.userAgent)&&!/(Chrome\/|Edge\/)/.test(navigator.userAgent)&&[].concat(navigator.userAgent.match(/Safari\/(\d*)/))[1]<604)}),t=u.schema,s=u.hasGetAll,u=t.tables.map(n),c={};return u.forEach(function(e){return c[e.name]=e}),{stack:"dbcore",transaction:e.transaction.bind(e),table:function(e){if(!c[e])throw new Error("Table '"+e+"' not found");return c[e]},MIN_KEY:-1/0,MAX_KEY:sn(i),schema:t}}function pn(e,t,n,r){var i=n.IDBKeyRange;return n.indexedDB,{dbcore:(r=dn(t,i,r),e.dbcore.reduce(function(e,t){t=t.create;return g(g({},e),t(e))},r))}}function yn(e,t){var n=e._novip,e=t.db,t=pn(n._middlewares,e,n._deps,t);n.core=t.dbcore,n.tables.forEach(function(e){var t=e.name;n.core.schema.tables.some(function(e){return e.name===t})&&(e.core=n.core.table(t),n[t]instanceof n.Table&&(n[t].core=e.core))})}function vn(e,t,n,i){var o=e._novip;n.forEach(function(n){var r=i[n];t.forEach(function(e){var t=f(e,n);(!t||"value"in t&&void 0===t.value)&&(e===o.Transaction.prototype||e instanceof o.Transaction?c(e,n,{get:function(){return this.table(n)},set:function(e){a(this,n,{value:e,writable:!0,configurable:!0,enumerable:!0})}}):e[n]=new o.Table(n,r))})})}function mn(e,t){var n=e._novip;t.forEach(function(e){for(var t in e)e[t]instanceof n.Table&&delete e[t]})}function gn(e,t){return e._cfg.version-t._cfg.version}function bn(n,r,i,e){var o=n._dbSchema,a=n._createTransaction("readwrite",n._storeNames,o);a.create(i),a._completion.catch(e);var u=a._reject.bind(a),p=Oe.transless||Oe;Je(function(){var e,s,c,l,f,t,h,d;Oe.trans=a,Oe.transless=p,0===r?(x(o).forEach(function(e){wn(i,e,o[e].primKey,o[e].indexes)}),yn(n,i),je.follow(function(){return n.on.populate.fire(a)}).catch(u)):(s=r,c=a,l=i,f=(e=n)._novip,t=[],e=f._versions,h=f._dbSchema=kn(0,f.idbdb,l),d=!1,e.filter(function(e){return e._cfg.version>=s}).forEach(function(u){t.push(function(){var t=h,e=u._cfg.dbschema;En(f,t,l),En(f,e,l),h=f._dbSchema=e;var n=_n(t,e);n.add.forEach(function(e){wn(l,e[0],e[1].primKey,e[1].indexes)}),n.change.forEach(function(e){if(e.recreate)throw new J.Upgrade("Not yet support for changing primary key");var t=l.objectStore(e.name);e.add.forEach(function(e){return xn(t,e)}),e.change.forEach(function(e){t.deleteIndex(e.name),xn(t,e)}),e.del.forEach(function(e){return t.deleteIndex(e)})});var r=u._cfg.contentUpgrade;if(r&&u._cfg.version>s){yn(f,l),c._memoizedTables={},d=!0;var i=P(e);n.del.forEach(function(e){i[e]=t[e]}),mn(f,[f.Transaction.prototype]),vn(f,[f.Transaction.prototype],x(i),i),c.schema=i;var o,a=R(r);a&&$e();n=je.follow(function(){var e;(o=r(c))&&a&&(e=Ze.bind(null,null),o.then(e,e))});return o&&"function"==typeof o.then?je.resolve(o):n.then(function(){return o})}}),t.push(function(e){var t,n,r;d&&mt||(t=u._cfg.dbschema,n=t,r=e,[].slice.call(r.db.objectStoreNames).forEach(function(e){return null==n[e]&&r.db.deleteObjectStore(e)})),mn(f,[f.Transaction.prototype]),vn(f,[f.Transaction.prototype],f._storeNames,f._dbSchema),c.schema=f._dbSchema})}),function e(){return t.length?je.resolve(t.shift()(c.idbtrans)).then(e):je.resolve()}().then(function(){var t,n;n=l,x(t=h).forEach(function(e){n.db.objectStoreNames.contains(e)||wn(n,e,t[e].primKey,t[e].indexes)})}).catch(u))})}function _n(e,t){var n,r={del:[],add:[],change:[]};for(n in e)t[n]||r.del.push(n);for(n in t){var i=e[n],o=t[n];if(i){var a={name:n,def:o,recreate:!1,del:[],add:[],change:[]};if(""+(i.primKey.keyPath||"")!=""+(o.primKey.keyPath||"")||i.primKey.auto!==o.primKey.auto&&!vt)a.recreate=!0,r.change.push(a);else{var u=i.idxByName,s=o.idxByName,c=void 0;for(c in u)s[c]||a.del.push(c);for(c in s){var l=u[c],f=s[c];l?l.src!==f.src&&a.change.push(f):a.add.push(f)}(0<a.del.length||0<a.add.length||0<a.change.length)&&r.change.push(a)}}else r.add.push([n,o])}return r}function wn(e,t,n,r){var i=e.db.createObjectStore(t,n.keyPath?{keyPath:n.keyPath,autoIncrement:n.auto}:{autoIncrement:n.auto});return r.forEach(function(e){return xn(i,e)}),i}function xn(e,t){e.createIndex(t.name,t.keyPath,{unique:t.unique,multiEntry:t.multi})}function kn(e,t,u){var s={};return y(t.objectStoreNames,0).forEach(function(e){for(var t=u.objectStore(e),n=on(an(a=t.keyPath),a||"",!1,!1,!!t.autoIncrement,a&&"string"!=typeof a,!0),r=[],i=0;i<t.indexNames.length;++i){var o=t.index(t.indexNames[i]),a=o.keyPath,o=on(o.name,a,!!o.unique,!!o.multiEntry,!1,a&&"string"!=typeof a,!1);r.push(o)}s[e]=un(e,n,r)}),s}function En(e,t,n){for(var r=e._novip,i=n.db.objectStoreNames,o=0;o<i.length;++o){var a=i[o],u=n.objectStore(a);r._hasGetAll="getAll"in u;for(var s=0;s<u.indexNames.length;++s){var c=u.indexNames[s],l=u.index(c).keyPath,f="string"==typeof l?l:"["+y(l).join("+")+"]";!t[a]||(l=t[a].idxByName[f])&&(l.name=c,delete t[a].idxByName[f],t[a].idxByName[c]=l)}}"undefined"!=typeof navigator&&/Safari/.test(navigator.userAgent)&&!/(Chrome\/|Edge\/)/.test(navigator.userAgent)&&h.WorkerGlobalScope&&h instanceof h.WorkerGlobalScope&&[].concat(navigator.userAgent.match(/Safari\/(\d*)/))[1]<604&&(r._hasGetAll=!1)}var Pn=(Kn.prototype._parseStoresSpec=function(r,i){x(r).forEach(function(e){if(null!==r[e]){var t=r[e].split(",").map(function(e,t){var n=(e=e.trim()).replace(/([&*]|\+\+)/g,""),r=/^\[/.test(n)?n.match(/^\[(.*)\]$/)[1].split("+"):n;return on(n,r||null,/\&/.test(e),/\*/.test(e),/\+\+/.test(e),b(r),0===t)}),n=t.shift();if(n.multi)throw new J.Schema("Primary key cannot be multi-valued");t.forEach(function(e){if(e.auto)throw new J.Schema("Only primary key can be marked as autoIncrement (++)");if(!e.keyPath)throw new J.Schema("Index must have a name and cannot be an empty string")}),i[e]=un(e,n,t)}})},Kn.prototype.stores=function(e){var t=this.db;this._cfg.storesSource=this._cfg.storesSource?u(this._cfg.storesSource,e):e;var e=t._versions,n={},r={};return e.forEach(function(e){u(n,e._cfg.storesSource),r=e._cfg.dbschema={},e._parseStoresSpec(n,r)}),t._dbSchema=r,mn(t,[t._allTables,t,t.Transaction.prototype]),vn(t,[t._allTables,t,t.Transaction.prototype,this._cfg.tables],x(r),r),t._storeNames=x(r),this},Kn.prototype.upgrade=function(e){return this._cfg.contentUpgrade=ue(this._cfg.contentUpgrade||Z,e),this},Kn);function Kn(){}function On(e,t){var n=e._dbNamesDB;return n||(n=e._dbNamesDB=new Gn(bt,{addons:[],indexedDB:e,IDBKeyRange:t})).version(1).stores({dbnames:"name"}),n.table("dbnames")}function Sn(e){return e&&"function"==typeof e.databases}function An(e){return Je(function(){return Oe.letThrough=!0,e()})}function Cn(f){var h=f._state,r=f._deps.indexedDB;if(h.isBeingOpened||f.idbdb)return h.dbReadyPromise.then(function(){return h.dbOpenError?lt(h.dbOpenError):f});F&&(h.openCanceller._stackHolder=U()),h.isBeingOpened=!0,h.dbOpenError=null,h.openComplete=!1;var t=h.openCanceller;function e(){if(h.openCanceller!==t)throw new J.DatabaseClosed("db.open() was cancelled")}var n,i=h.dbReadyResolve,d=null,p=!1;return je.race([t,("undefined"==typeof navigator?je.resolve():!navigator.userAgentData&&/Safari\//.test(navigator.userAgent)&&!/Chrom(e|ium)\//.test(navigator.userAgent)&&indexedDB.databases?new Promise(function(e){function t(){return indexedDB.databases().finally(e)}n=setInterval(t,100),t()}).finally(function(){return clearInterval(n)}):Promise.resolve()).then(function(){return new je(function(s,n){if(e(),!r)throw new J.MissingAPI;var c=f.name,l=h.autoSchema?r.open(c):r.open(c,Math.round(10*f.verno));if(!l)throw new J.MissingAPI;l.onerror=Jt(n),l.onblocked=We(f._fireOnBlocked),l.onupgradeneeded=We(function(e){var t;d=l.transaction,h.autoSchema&&!f._options.allowEmptyDB?(l.onerror=$t,d.abort(),l.result.close(),(t=r.deleteDatabase(c)).onsuccess=t.onerror=We(function(){n(new J.NoSuchDatabase("Database "+c+" doesnt exist"))})):(d.onerror=Jt(n),e=e.oldVersion>Math.pow(2,62)?0:e.oldVersion,p=e<1,f._novip.idbdb=l.result,bn(f,e/10,d,n))},n),l.onsuccess=We(function(){d=null;var e,t,n,r,i,o=f._novip.idbdb=l.result,a=y(o.objectStoreNames);if(0<a.length)try{var u=o.transaction(1===(r=a).length?r[0]:r,"readonly");h.autoSchema?(t=o,n=u,(e=(e=f)._novip).verno=t.version/10,n=e._dbSchema=kn(0,t,n),e._storeNames=y(t.objectStoreNames,0),vn(e,[e._allTables],x(n),n)):(En(f,f._dbSchema,u),((i=_n(kn(0,(i=f).idbdb,u),i._dbSchema)).add.length||i.change.some(function(e){return e.add.length||e.change.length}))&&console.warn("Dexie SchemaDiff: Schema was extended without increasing the number passed to db.version(). Some queries may fail.")),yn(f,u)}catch(e){}yt.push(f),o.onversionchange=We(function(e){h.vcFired=!0,f.on("versionchange").fire(e)}),o.onclose=We(function(e){f.on("close").fire(e)}),p&&(i=f._deps,u=c,o=i.indexedDB,i=i.IDBKeyRange,Sn(o)||u===bt||On(o,i).put({name:u}).catch(Z)),s()},n)})})]).then(function(){return e(),h.onReadyBeingFired=[],je.resolve(An(function(){return f.on.ready.fire(f.vip)})).then(function e(){if(0<h.onReadyBeingFired.length){var t=h.onReadyBeingFired.reduce(ue,Z);return h.onReadyBeingFired=[],je.resolve(An(function(){return t(f.vip)})).then(e)}})}).finally(function(){h.onReadyBeingFired=null,h.isBeingOpened=!1}).then(function(){return f}).catch(function(e){h.dbOpenError=e;try{d&&d.abort()}catch(e){}return t===h.openCanceller&&f._close(),lt(e)}).finally(function(){h.openComplete=!0,i()})}function jn(t){function e(e){return t.next(e)}var r=n(e),i=n(function(e){return t.throw(e)});function n(n){return function(e){var t=n(e),e=t.value;return t.done?e:e&&"function"==typeof e.then?e.then(r,i):b(e)?Promise.all(e).then(r,i):r(e)}}return n(e)()}function Dn(e,t,n){for(var r=b(e)?e.slice():[e],i=0;i<n;++i)r.push(t);return r}var In={stack:"dbcore",name:"VirtualIndexMiddleware",level:1,create:function(f){return g(g({},f),{table:function(e){var a=f.table(e),t=a.schema,u={},s=[];function c(e,t,n){var r=hn(e),i=u[r]=u[r]||[],o=null==e?0:"string"==typeof e?1:e.length,r=0<t,r=g(g({},n),{isVirtual:r,keyTail:t,keyLength:o,extractKey:cn(e),unique:!r&&n.unique});return i.push(r),r.isPrimaryKey||s.push(r),1<o&&c(2===o?e[0]:e.slice(0,o-1),t+1,n),i.sort(function(e,t){return e.keyTail-t.keyTail}),r}e=c(t.primaryKey.keyPath,0,t.primaryKey);u[":id"]=[e];for(var n=0,r=t.indexes;n<r.length;n++){var i=r[n];c(i.keyPath,0,i)}function l(e){var t,n=e.query.index;return n.isVirtual?g(g({},e),{query:{index:n,range:(t=e.query.range,n=n.keyTail,{type:1===t.type?2:t.type,lower:Dn(t.lower,t.lowerOpen?f.MAX_KEY:f.MIN_KEY,n),lowerOpen:!0,upper:Dn(t.upper,t.upperOpen?f.MIN_KEY:f.MAX_KEY,n),upperOpen:!0})}}):e}return g(g({},a),{schema:g(g({},t),{primaryKey:e,indexes:s,getIndexByKeyPath:function(e){return(e=u[hn(e)])&&e[0]}}),count:function(e){return a.count(l(e))},query:function(e){return a.query(l(e))},openCursor:function(t){var e=t.query.index,r=e.keyTail,n=e.isVirtual,i=e.keyLength;return n?a.openCursor(l(t)).then(function(e){return e&&o(e)}):a.openCursor(t);function o(n){return Object.create(n,{continue:{value:function(e){null!=e?n.continue(Dn(e,t.reverse?f.MAX_KEY:f.MIN_KEY,r)):t.unique?n.continue(n.key.slice(0,i).concat(t.reverse?f.MIN_KEY:f.MAX_KEY,r)):n.continue()}},continuePrimaryKey:{value:function(e,t){n.continuePrimaryKey(Dn(e,f.MAX_KEY,r),t)}},primaryKey:{get:function(){return n.primaryKey}},key:{get:function(){var e=n.key;return 1===i?e[0]:e.slice(0,i)}},value:{get:function(){return n.value}}})}}})}})}};function Bn(i,o,a,u){return a=a||{},u=u||"",x(i).forEach(function(e){var t,n,r;m(o,e)?(t=i[e],n=o[e],"object"==typeof t&&"object"==typeof n&&t&&n?(r=j(t))!==j(n)?a[u+e]=o[e]:"Object"===r?Bn(t,n,a,u+e+"."):t!==n&&(a[u+e]=o[e]):t!==n&&(a[u+e]=o[e])):a[u+e]=void 0}),x(o).forEach(function(e){m(i,e)||(a[u+e]=o[e])}),a}var Tn={stack:"dbcore",name:"HooksMiddleware",level:2,create:function(e){return g(g({},e),{table:function(r){var y=e.table(r),v=y.schema.primaryKey;return g(g({},y),{mutate:function(e){var t=Oe.trans,n=t.table(r).hook,h=n.deleting,d=n.creating,p=n.updating;switch(e.type){case"add":if(d.fire===Z)break;return t._promise("readwrite",function(){return a(e)},!0);case"put":if(d.fire===Z&&p.fire===Z)break;return t._promise("readwrite",function(){return a(e)},!0);case"delete":if(h.fire===Z)break;return t._promise("readwrite",function(){return a(e)},!0);case"deleteRange":if(h.fire===Z)break;return t._promise("readwrite",function(){return function n(r,i,o){return y.query({trans:r,values:!1,query:{index:v,range:i},limit:o}).then(function(e){var t=e.result;return a({type:"delete",keys:t,trans:r}).then(function(e){return 0<e.numFailures?Promise.reject(e.failures[0]):t.length<o?{failures:[],numFailures:0,lastResult:void 0}:n(r,g(g({},i),{lower:t[t.length-1],lowerOpen:!0}),o)})})}(e.trans,e.range,1e4)},!0)}return y.mutate(e);function a(c){var e,t,n,l=Oe.trans,f=c.keys||(t=v,"delete"===(n=c).type?n.keys:n.keys||n.values.map(t.extractKey));if(!f)throw new Error("Keys missing");return"delete"!==(c="add"===c.type||"put"===c.type?g(g({},c),{keys:f}):g({},c)).type&&(c.values=i([],c.values,!0)),c.keys&&(c.keys=i([],c.keys,!0)),e=y,n=f,("add"===(t=c).type?Promise.resolve([]):e.getMany({trans:t.trans,keys:n,cache:"immutable"})).then(function(u){var s=f.map(function(e,t){var n,r,i,o=u[t],a={onerror:null,onsuccess:null};return"delete"===c.type?h.fire.call(a,e,o,l):"add"===c.type||void 0===o?(n=d.fire.call(a,e,c.values[t],l),null==e&&null!=n&&(c.keys[t]=e=n,v.outbound||E(c.values[t],v.keyPath,e))):(n=Bn(o,c.values[t]),(r=p.fire.call(a,n,e,o,l))&&(i=c.values[t],Object.keys(r).forEach(function(e){m(i,e)?i[e]=r[e]:E(i,e,r[e])}))),a});return y.mutate(c).then(function(e){for(var t=e.failures,n=e.results,r=e.numFailures,e=e.lastResult,i=0;i<f.length;++i){var o=(n||f)[i],a=s[i];null==o?a.onerror&&a.onerror(t[i]):a.onsuccess&&a.onsuccess("put"===c.type&&u[i]?c.values[i]:o)}return{failures:t,results:n,numFailures:r,lastResult:e}}).catch(function(t){return s.forEach(function(e){return e.onerror&&e.onerror(t)}),Promise.reject(t)})})}}})}})}};function Rn(e,t,n){try{if(!t)return null;if(t.keys.length<e.length)return null;for(var r=[],i=0,o=0;i<t.keys.length&&o<e.length;++i)0===Rt(t.keys[i],e[o])&&(r.push(n?A(t.values[i]):t.values[i]),++o);return r.length===e.length?r:null}catch(e){return null}}var Fn={stack:"dbcore",level:-1,create:function(t){return{table:function(e){var n=t.table(e);return g(g({},n),{getMany:function(t){if(!t.cache)return n.getMany(t);var e=Rn(t.keys,t.trans._cache,"clone"===t.cache);return e?je.resolve(e):n.getMany(t).then(function(e){return t.trans._cache={keys:t.keys,values:"clone"===t.cache?A(e):e},e})},mutate:function(e){return"add"!==e.type&&(e.trans._cache=null),n.mutate(e)}})}}}};function Mn(e){return!("from"in e)}var Nn=function(e,t){if(!this){var n=new Nn;return e&&"d"in e&&u(n,e),n}u(this,arguments.length?{d:1,from:e,to:1<arguments.length?t:e}:{d:0})};function qn(e,t,n){var r=Rt(t,n);if(!isNaN(r)){if(0<r)throw RangeError();if(Mn(e))return u(e,{from:t,to:n,d:1});var i=e.l,r=e.r;if(Rt(n,e.from)<0)return i?qn(i,t,n):e.l={from:t,to:n,d:1,l:null,r:null},Wn(e);if(0<Rt(t,e.to))return r?qn(r,t,n):e.r={from:t,to:n,d:1,l:null,r:null},Wn(e);Rt(t,e.from)<0&&(e.from=t,e.l=null,e.d=r?r.d+1:1),0<Rt(n,e.to)&&(e.to=n,e.r=null,e.d=e.l?e.l.d+1:1);n=!e.r;i&&!e.l&&Un(e,i),r&&n&&Un(e,r)}}function Un(e,t){Mn(t)||function e(t,n){var r=n.from,i=n.to,o=n.l,n=n.r;qn(t,r,i),o&&e(t,o),n&&e(t,n)}(e,t)}function Ln(e,t){var n=Vn(t),r=n.next();if(r.done)return!1;for(var i=r.value,o=Vn(e),a=o.next(i.from),u=a.value;!r.done&&!a.done;){if(Rt(u.from,i.to)<=0&&0<=Rt(u.to,i.from))return!0;Rt(i.from,u.from)<0?i=(r=n.next(u.from)).value:u=(a=o.next(i.from)).value}return!1}function Vn(e){var n=Mn(e)?null:{s:0,n:e};return{next:function(e){for(var t=0<arguments.length;n;)switch(n.s){case 0:if(n.s=1,t)for(;n.n.l&&Rt(e,n.n.from)<0;)n={up:n,n:n.n.l,s:1};else for(;n.n.l;)n={up:n,n:n.n.l,s:1};case 1:if(n.s=2,!t||Rt(e,n.n.to)<=0)return{value:n.n,done:!1};case 2:if(n.n.r){n.s=3,n={up:n,n:n.n.r,s:0};continue}case 3:n=n.up}return{done:!0}}}}function Wn(e){var t,n,r=((null===(t=e.r)||void 0===t?void 0:t.d)||0)-((null===(n=e.l)||void 0===n?void 0:n.d)||0),i=1<r?"r":r<-1?"l":"";i&&(t="r"==i?"l":"r",n=g({},e),r=e[i],e.from=r.from,e.to=r.to,e[i]=r[i],n[i]=r[t],(e[t]=n).d=zn(n)),e.d=zn(e)}function zn(e){var t=e.r,e=e.l;return(t?e?Math.max(t.d,e.d):t.d:e?e.d:0)+1}r(Nn.prototype,((e={add:function(e){return Un(this,e),this},addKey:function(e){return qn(this,e,e),this},addKeys:function(e){var t=this;return e.forEach(function(e){return qn(t,e,e)}),this}})[D]=function(){return Vn(this)},e));var Yn={stack:"dbcore",level:0,create:function(r){var v=r.schema.name,m=new Nn(r.MIN_KEY,r.MAX_KEY);return g(g({},r),{table:function(d){function e(e){var e=(t=e.query).index,t=t.range;return[e,new Nn(null!==(e=t.lower)&&void 0!==e?e:r.MIN_KEY,null!==(t=t.upper)&&void 0!==t?t:r.MAX_KEY)]}var p=r.table(d),y=p.schema,t=y.primaryKey,c=t.extractKey,l=t.outbound,n=g(g({},p),{mutate:function(e){function n(e){return r[e="idb://"+v+"/"+d+"/"+e]||(r[e]=new Nn)}var t=e.trans,r=t.mutatedParts||(t.mutatedParts={}),i=n(""),s=n(":dels"),c=e.type,t="deleteRange"===e.type?[e.range]:"delete"===e.type?[e.keys]:e.values.length<50?[[],e.values]:[],l=t[0],f=t[1],h=e.trans._cache;return p.mutate(e).then(function(e){var t,o,a,u;return b(l)?("delete"!==c&&(l=e.results),i.addKeys(l),(t=Rn(l,h))||"add"===c||s.addKeys(l),(t||f)&&(o=n,a=t,u=f,y.indexes.forEach(function(t){var n=o(t.name||"");function r(e){return null!=e?t.extractKey(e):null}function i(e){return t.multiEntry&&b(e)?e.forEach(function(e){return n.addKey(e)}):n.addKey(e)}(a||u).forEach(function(e,t){var n=a&&r(a[t]),t=u&&r(u[t]);0!==Rt(n,t)&&(null!=n&&i(n),null!=t&&i(t))})}))):l?(t={from:l.lower,to:l.upper},s.add(t),i.add(t)):(i.add(m),s.add(m),y.indexes.forEach(function(e){return n(e.name).add(m)})),e})}}),f={get:function(e){return[t,new Nn(e.key)]},getMany:function(e){return[t,(new Nn).addKeys(e.keys)]},count:e,query:e,openCursor:e};return x(f).forEach(function(s){n[s]=function(i){var t=Oe.subscr;if(t){var e=function(e){e="idb://"+v+"/"+d+"/"+e;return t[e]||(t[e]=new Nn)},o=e(""),a=e(":dels"),n=f[s](i),r=n[0],n=n[1];if(e(r.name||"").add(n),!r.isPrimaryKey){if("count"!==s){var u="query"===s&&l&&i.values&&p.query(g(g({},i),{values:!1}));return p[s].apply(this,arguments).then(function(t){if("query"===s){if(l&&i.values)return u.then(function(e){e=e.result;return o.addKeys(e),t});var e=i.values?t.result.map(c):t.result;(i.values?o:a).addKeys(e)}else if("openCursor"===s){var n=t,r=i.values;return n&&Object.create(n,{key:{get:function(){return a.addKey(n.primaryKey),n.key}},primaryKey:{get:function(){var e=n.primaryKey;return a.addKey(e),e}},value:{get:function(){return r&&o.addKey(n.primaryKey),n.value}}})}return t})}a.add(m)}}return p[s].apply(this,arguments)}}),n}})}};var Gn=(Hn.prototype.version=function(t){if(isNaN(t)||t<.1)throw new J.Type("Given version is not a positive number");if(t=Math.round(10*t)/10,this.idbdb||this._state.isBeingOpened)throw new J.Schema("Cannot add version when database is open");this.verno=Math.max(this.verno,t);var e=this._versions,n=e.filter(function(e){return e._cfg.version===t})[0];return n||(n=new this.Version(t),e.push(n),e.sort(gn),n.stores({}),this._state.autoSchema=!1,n)},Hn.prototype._whenReady=function(e){var n=this;return this.idbdb&&(this._state.openComplete||Oe.letThrough||this._vip)?e():new je(function(e,t){if(n._state.openComplete)return t(new J.DatabaseClosed(n._state.dbOpenError));if(!n._state.isBeingOpened){if(!n._options.autoOpen)return void t(new J.DatabaseClosed);n.open().catch(Z)}n._state.dbReadyPromise.then(e,t)}).then(e)},Hn.prototype.use=function(e){var t=e.stack,n=e.create,r=e.level,i=e.name;i&&this.unuse({stack:t,name:i});e=this._middlewares[t]||(this._middlewares[t]=[]);return e.push({stack:t,create:n,level:null==r?10:r,name:i}),e.sort(function(e,t){return e.level-t.level}),this},Hn.prototype.unuse=function(e){var t=e.stack,n=e.name,r=e.create;return t&&this._middlewares[t]&&(this._middlewares[t]=this._middlewares[t].filter(function(e){return r?e.create!==r:!!n&&e.name!==n})),this},Hn.prototype.open=function(){return Cn(this)},Hn.prototype._close=function(){var n=this._state,e=yt.indexOf(this);if(0<=e&&yt.splice(e,1),this.idbdb){try{this.idbdb.close()}catch(e){}this._novip.idbdb=null}n.dbReadyPromise=new je(function(e){n.dbReadyResolve=e}),n.openCanceller=new je(function(e,t){n.cancelOpen=t})},Hn.prototype.close=function(){this._close();var e=this._state;this._options.autoOpen=!1,e.dbOpenError=new J.DatabaseClosed,e.isBeingOpened&&e.cancelOpen(e.dbOpenError)},Hn.prototype.delete=function(){var i=this,n=0<arguments.length,o=this._state;return new je(function(r,t){function e(){i.close();var e=i._deps.indexedDB.deleteDatabase(i.name);e.onsuccess=We(function(){var e,t,n;e=i._deps,t=i.name,n=e.indexedDB,e=e.IDBKeyRange,Sn(n)||t===bt||On(n,e).delete(t).catch(Z),r()}),e.onerror=Jt(t),e.onblocked=i._fireOnBlocked}if(n)throw new J.InvalidArgument("Arguments not allowed in db.delete()");o.isBeingOpened?o.dbReadyPromise.then(e):e()})},Hn.prototype.backendDB=function(){return this.idbdb},Hn.prototype.isOpen=function(){return null!==this.idbdb},Hn.prototype.hasBeenClosed=function(){var e=this._state.dbOpenError;return e&&"DatabaseClosed"===e.name},Hn.prototype.hasFailed=function(){return null!==this._state.dbOpenError},Hn.prototype.dynamicallyOpened=function(){return this._state.autoSchema},Object.defineProperty(Hn.prototype,"tables",{get:function(){var t=this;return x(this._allTables).map(function(e){return t._allTables[e]})},enumerable:!1,configurable:!0}),Hn.prototype.transaction=function(){var e=function(e,t,n){var r=arguments.length;if(r<2)throw new J.InvalidArgument("Too few arguments");for(var i=new Array(r-1);--r;)i[r-1]=arguments[r];return n=i.pop(),[e,K(i),n]}.apply(this,arguments);return this._transaction.apply(this,e)},Hn.prototype._transaction=function(e,t,n){var r=this,i=Oe.trans;i&&i.db===this&&-1===e.indexOf("!")||(i=null);var o,a,u=-1!==e.indexOf("?");e=e.replace("!","").replace("?","");try{if(a=t.map(function(e){e=e instanceof r.Table?e.name:e;if("string"!=typeof e)throw new TypeError("Invalid table argument to Dexie.transaction(). Only Table or String are allowed");return e}),"r"==e||e===_t)o=_t;else{if("rw"!=e&&e!=wt)throw new J.InvalidArgument("Invalid transaction mode: "+e);o=wt}if(i){if(i.mode===_t&&o===wt){if(!u)throw new J.SubTransaction("Cannot enter a sub-transaction with READWRITE mode when parent transaction is READONLY");i=null}i&&a.forEach(function(e){if(i&&-1===i.storeNames.indexOf(e)){if(!u)throw new J.SubTransaction("Table "+e+" not included in parent transaction.");i=null}}),u&&i&&!i.active&&(i=null)}}catch(n){return i?i._promise(null,function(e,t){t(n)}):lt(n)}var s=function i(o,a,u,s,c){return je.resolve().then(function(){var e=Oe.transless||Oe,t=o._createTransaction(a,u,o._dbSchema,s),e={trans:t,transless:e};if(s)t.idbtrans=s.idbtrans;else try{t.create(),o._state.PR1398_maxLoop=3}catch(e){return e.name===Q.InvalidState&&o.isOpen()&&0<--o._state.PR1398_maxLoop?(console.warn("Dexie: Need to reopen db"),o._close(),o.open().then(function(){return i(o,a,u,null,c)})):lt(e)}var n,r=R(c);return r&&$e(),e=je.follow(function(){var e;(n=c.call(t,t))&&(r?(e=Ze.bind(null,null),n.then(e,e)):"function"==typeof n.next&&"function"==typeof n.throw&&(n=jn(n)))},e),(n&&"function"==typeof n.then?je.resolve(n).then(function(e){return t.active?e:lt(new J.PrematureCommit("Transaction committed too early. See http://bit.ly/2kdckMn"))}):e.then(function(){return n})).then(function(e){return s&&t._resolve(),t._completion.then(function(){return e})}).catch(function(e){return t._reject(e),lt(e)})})}.bind(null,this,o,a,i,n);return i?i._promise(o,s,"lock"):Oe.trans?it(Oe.transless,function(){return r._whenReady(s)}):this._whenReady(s)},Hn.prototype.table=function(e){if(!m(this._allTables,e))throw new J.InvalidTable("Table "+e+" does not exist");return this._allTables[e]},Hn);function Hn(e,t){var o=this;this._middlewares={},this.verno=0;var n=Hn.dependencies;this._options=t=g({addons:Hn.addons,autoOpen:!0,indexedDB:n.indexedDB,IDBKeyRange:n.IDBKeyRange},t),this._deps={indexedDB:t.indexedDB,IDBKeyRange:t.IDBKeyRange};n=t.addons;this._dbSchema={},this._versions=[],this._storeNames=[],this._allTables={},this.idbdb=null,this._novip=this;var a,r,u,i,s,c={dbOpenError:null,isBeingOpened:!1,onReadyBeingFired:null,openComplete:!1,dbReadyResolve:Z,dbReadyPromise:null,cancelOpen:Z,openCanceller:null,autoSchema:!0,PR1398_maxLoop:3};c.dbReadyPromise=new je(function(e){c.dbReadyResolve=e}),c.openCanceller=new je(function(e,t){c.cancelOpen=t}),this._state=c,this.name=e,this.on=Ot(this,"populate","blocked","versionchange","close",{ready:[ue,Z]}),this.on.ready.subscribe=p(this.on.ready.subscribe,function(i){return function(n,r){Hn.vip(function(){var t,e=o._state;e.openComplete?(e.dbOpenError||je.resolve().then(n),r&&i(n)):e.onReadyBeingFired?(e.onReadyBeingFired.push(n),r&&i(n)):(i(n),t=o,r||i(function e(){t.on.ready.unsubscribe(n),t.on.ready.unsubscribe(e)}))})}}),this.Collection=(a=this,St(Nt.prototype,function(e,t){this.db=a;var n=kt,r=null;if(t)try{n=t()}catch(e){r=e}var i=e._ctx,t=i.table,e=t.hook.reading.fire;this._ctx={table:t,index:i.index,isPrimKey:!i.index||t.schema.primKey.keyPath&&i.index===t.schema.primKey.name,range:n,keysOnly:!1,dir:"next",unique:"",algorithm:null,filter:null,replayFilter:null,justLimit:!0,isMatch:null,offset:0,limit:1/0,error:r,or:i.or,valueMapper:e!==ee?e:null}})),this.Table=(r=this,St(Pt.prototype,function(e,t,n){this.db=r,this._tx=n,this.name=e,this.schema=t,this.hook=r._allTables[e]?r._allTables[e].hook:Ot(null,{creating:[re,Z],reading:[te,ee],updating:[oe,Z],deleting:[ie,Z]})})),this.Transaction=(u=this,St(nn.prototype,function(e,t,n,r,i){var o=this;this.db=u,this.mode=e,this.storeNames=t,this.schema=n,this.chromeTransactionDurability=r,this.idbtrans=null,this.on=Ot(this,"complete","error","abort"),this.parent=i||null,this.active=!0,this._reculock=0,this._blockedFuncs=[],this._resolve=null,this._reject=null,this._waitingFor=null,this._waitingQueue=null,this._spinCount=0,this._completion=new je(function(e,t){o._resolve=e,o._reject=t}),this._completion.then(function(){o.active=!1,o.on.complete.fire()},function(e){var t=o.active;return o.active=!1,o.on.error.fire(e),o.parent?o.parent._reject(e):t&&o.idbtrans&&o.idbtrans.abort(),lt(e)})})),this.Version=(i=this,St(Pn.prototype,function(e){this.db=i,this._cfg={version:e,storesSource:null,dbschema:{},tables:{},contentUpgrade:null}})),this.WhereClause=(s=this,St(Qt.prototype,function(e,t,n){this.db=s,this._ctx={table:e,index:":id"===t?null:t,or:n};var r=s._deps.indexedDB;if(!r)throw new J.MissingAPI;this._cmp=this._ascending=r.cmp.bind(r),this._descending=function(e,t){return r.cmp(t,e)},this._max=function(e,t){return 0<r.cmp(e,t)?e:t},this._min=function(e,t){return r.cmp(e,t)<0?e:t},this._IDBKeyRange=s._deps.IDBKeyRange})),this.on("versionchange",function(e){0<e.newVersion?console.warn("Another connection wants to upgrade database '"+o.name+"'. Closing db now to resume the upgrade."):console.warn("Another connection wants to delete database '"+o.name+"'. Closing db now to resume the delete request."),o.close()}),this.on("blocked",function(e){!e.newVersion||e.newVersion<e.oldVersion?console.warn("Dexie.delete('"+o.name+"') was blocked"):console.warn("Upgrade '"+o.name+"' blocked by other connection holding version "+e.oldVersion/10)}),this._maxKey=sn(t.IDBKeyRange),this._createTransaction=function(e,t,n,r){return new o.Transaction(e,t,n,o._options.chromeTransactionDurability,r)},this._fireOnBlocked=function(t){o.on("blocked").fire(t),yt.filter(function(e){return e.name===o.name&&e!==o&&!e._state.vcFired}).map(function(e){return e.on("versionchange").fire(t)})},this.use(In),this.use(Tn),this.use(Yn),this.use(Fn),this.vip=Object.create(this,{_vip:{value:!0}}),n.forEach(function(e){return e(o)})}var e="undefined"!=typeof Symbol&&"observable"in Symbol?Symbol.observable:"@@observable",Qn=(Xn.prototype.subscribe=function(e,t,n){return this._subscribe(e&&"function"!=typeof e?e:{next:e,error:t,complete:n})},Xn.prototype[e]=function(){return this},Xn);function Xn(e){this._subscribe=e}function Jn(t,n){return x(n).forEach(function(e){Un(t[e]||(t[e]=new Nn),n[e])}),t}function $n(d){var p=!1,y=void 0,e=new Qn(function(n){var r=R(d);var i=!1,o={},a={},u={get closed(){return i},unsubscribe:function(){i=!0,tn.storagemutated.unsubscribe(f)}};n.start&&n.start(u);var s=!1,c=!1;function l(){return x(a).some(function(e){return o[e]&&Ln(o[e],a[e])})}var f=function(e){Jn(o,e),l()&&h()},h=function(){var t,e;s||i||(o={},e=function(e){r&&$e();var t=function(){return Je(d,{subscr:e,trans:null})},t=Oe.trans?it(Oe.transless,t):t();return r&&t.then(Ze,Ze),t}(t={}),c||(tn(Zt,f),c=!0),s=!0,Promise.resolve(e).then(function(e){y=e,s=!(p=!0),i||(l()?h():(o={},a=t,n.next&&n.next(e)))},function(e){p=s=!1,n.error&&n.error(e),u.unsubscribe()}))};return h(),u});return e.hasValue=function(){return p},e.getValue=function(){return y},e}try{nr={indexedDB:h.indexedDB||h.mozIndexedDB||h.webkitIndexedDB||h.msIndexedDB,IDBKeyRange:h.IDBKeyRange||h.webkitIDBKeyRange}}catch(e){nr={indexedDB:null,IDBKeyRange:null}}var Zn=Gn;function er(e){var t=rr;try{rr=!0,tn.storagemutated.fire(e)}finally{rr=t}}r(Zn,g(g({},V),{delete:function(e){return new Zn(e,{addons:[]}).delete()},exists:function(e){return new Zn(e,{addons:[]}).open().then(function(e){return e.close(),!0}).catch("NoSuchDatabaseError",function(){return!1})},getDatabaseNames:function(e){try{return t=Zn.dependencies,n=t.indexedDB,t=t.IDBKeyRange,(Sn(n)?Promise.resolve(n.databases()).then(function(e){return e.map(function(e){return e.name}).filter(function(e){return e!==bt})}):On(n,t).toCollection().primaryKeys()).then(e)}catch(e){return lt(new J.MissingAPI)}var t,n},defineClass:function(){return function(e){u(this,e)}},ignoreTransaction:function(e){return Oe.trans?it(Oe.transless,e):e()},vip:An,async:function(t){return function(){try{var e=jn(t.apply(this,arguments));return e&&"function"==typeof e.then?e:je.resolve(e)}catch(e){return lt(e)}}},spawn:function(e,t,n){try{var r=jn(e.apply(n,t||[]));return r&&"function"==typeof r.then?r:je.resolve(r)}catch(e){return lt(e)}},currentTransaction:{get:function(){return Oe.trans||null}},waitFor:function(e,t){t=je.resolve("function"==typeof e?Zn.ignoreTransaction(e):e).timeout(t||6e4);return Oe.trans?Oe.trans.waitFor(t):t},Promise:je,debug:{get:function(){return F},set:function(e){M(e,"dexie"===e?function(){return!0}:ft)}},derive:o,extend:u,props:r,override:p,Events:Ot,on:tn,liveQuery:$n,extendObservabilitySet:Jn,getByKeyPath:k,setByKeyPath:E,delByKeyPath:function(t,e){"string"==typeof e?E(t,e,void 0):"length"in e&&[].map.call(e,function(e){E(t,e,void 0)})},shallowClone:P,deepClone:A,getObjectDiff:Bn,cmp:Rt,asap:_,minKey:-1/0,addons:[],connections:yt,errnames:Q,dependencies:nr,semVer:"3.2.4",version:"3.2.4".split(".").map(function(e){return parseInt(e)}).reduce(function(e,t,n){return e+t/Math.pow(10,2*n)})})),Zn.maxKey=sn(Zn.dependencies.IDBKeyRange),"undefined"!=typeof dispatchEvent&&"undefined"!=typeof addEventListener&&(tn(Zt,function(e){var t;rr||(vt?(t=document.createEvent("CustomEvent")).initCustomEvent(en,!0,!0,e):t=new CustomEvent(en,{detail:e}),rr=!0,dispatchEvent(t),rr=!1)}),addEventListener(en,function(e){e=e.detail;rr||er(e)}));var tr,nr,rr=!1;return"undefined"!=typeof BroadcastChannel?("function"==typeof(tr=new BroadcastChannel(en)).unref&&tr.unref(),tn(Zt,function(e){rr||tr.postMessage(e)}),tr.onmessage=function(e){e.data&&er(e.data)}):"undefined"!=typeof self&&"undefined"!=typeof navigator&&(tn(Zt,function(t){try{rr||("undefined"!=typeof localStorage&&localStorage.setItem(en,JSON.stringify({trig:Math.random(),changedParts:t})),"object"==typeof self.clients&&i([],self.clients.matchAll({includeUncontrolled:!0}),!0).forEach(function(e){return e.postMessage({type:en,changedParts:t})}))}catch(e){}}),"undefined"!=typeof addEventListener&&addEventListener("storage",function(e){e.key!==en||(e=JSON.parse(e.newValue))&&er(e.changedParts)}),(nr=self.document&&navigator.serviceWorker)&&nr.addEventListener("message",function(e){e=e.data;e&&e.type===en&&er(e.changedParts)})),je.rejectionMapper=function(e,t){return!e||e instanceof z||e instanceof TypeError||e instanceof SyntaxError||!e.name||!$[e.name]?e:(t=new $[e.name](t||e.message,e),"stack"in e&&c(t,"stack",{get:function(){return this.inner.stack}}),t)},M(F,ft),g(Gn,Object.freeze({__proto__:null,Dexie:Gn,liveQuery:$n,default:Gn,RangeSet:Nn,mergeRanges:Un,rangesOverlap:Ln}),{default:Gn}),Gn}); -//# sourceMappingURL=dexie.min.js.map
\ No newline at end of file diff --git a/ext/lib/dexie.min.js.map b/ext/lib/dexie.min.js.map deleted file mode 100644 index 995ec22d..00000000 --- a/ext/lib/dexie.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["dexie.js"],"names":["global","factory","exports","module","define","amd","globalThis","self","Dexie","this","__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","__spreadArray","to","from","pack","ar","l","Array","slice","concat","_global","window","keys","isArray","extend","obj","extension","forEach","key","Promise","getProto","getPrototypeOf","_hasOwn","hasOwn","prop","props","proto","Reflect","ownKeys","setProp","defineProperty","functionOrGetSet","options","get","set","configurable","value","writable","derive","Child","Parent","create","bind","getOwnPropertyDescriptor","getPropertyDescriptor","_slice","args","start","end","override","origFunc","overridedFactory","assert","b","Error","asap$1","fn","setImmediate","setTimeout","arrayToObject","array","extractor","reduce","result","item","nameAndValue","getByKeyPath","keyPath","rv","val","push","period","indexOf","innerObj","substr","undefined","setByKeyPath","isFrozen","currentKeyPath","remainingKeyPath","isNaN","parseInt","splice","shallowClone","m","flatten","a","intrinsicTypeNames","split","map","num","filter","intrinsicTypes","x","circularRefs","deepClone","any","WeakMap","innerDeepClone","constructor","toString","toStringTag","o","iteratorSymbol","Symbol","iterator","getIteratorOf","NO_CHAR_ARRAY","getArrayOf","arrayLike","it","next","done","isAsyncFunction","debug","location","test","href","setDebug","libraryFilter","NEEDS_THROW_FOR_STACK","stack","getErrorWithStack","e","prettyStack","exception","numIgnoredFrames","name","message","frame","join","idbDomErrorNames","errorList","defaultTexts","VersionChanged","DatabaseClosed","Abort","TransactionInactive","MissingAPI","DexieError","msg","_e","getMultiErrorMessage","failures","v","ModifyError","successCount","failedKeys","BulkError","pos","failuresByPos","_stack","errnames","BaseException","exceptions","fullName","msgOrInner","inner","Syntax","SyntaxError","Type","TypeError","Range","RangeError","exceptionMap","fullNameExceptions","nop","mirror","pureFunctionChain","f1","f2","callBoth","on1","on2","hookCreatingChain","res","onsuccess","onerror","res2","hookDeletingChain","hookUpdatingChain","modifications","reverseStoppableEventChain","promisableChain","then","thiz","INTERNAL","LONG_STACKS_CLIP_LIMIT","ZONE_ECHO_LIMIT","_a$1","globalP","resolve","crypto","subtle","nativeP","digest","Uint8Array","resolvedNativePromise","nativePromiseProto","resolvedGlobalPromise","nativePromiseThen","NativePromise","patchGlobalPromise","stack_being_generated","schedulePhysicalTick","physicalTick","MutationObserver","hiddenDiv","document","createElement","observe","attributes","setAttribute","asap","callback","microtickQueue","needsNewPhysicalTick","isOutsideMicroTick","unhandledErrors","rejectingErrors","currentFulfiller","rejectionMapper","globalPSD","id","ref","unhandleds","onunhandled","globalError","pgp","env","finalize","uh","PSD","numScheduledCalls","tickFinalizers","DexiePromise","_listeners","onuncatched","_lib","psd","_PSD","_stackHolder","_prev","_numPrev","_state","_value","handleRejection","executePromiseTask","promise","shouldExecuteTick","beginMicroTickScope","reject","_then","propagateAllListeners","endMicroTickScope","ex","thenProp","microTaskId","totalEchoes","onFulfilled","onRejected","_this","possibleAwait","cleanup","decrementExpectedAwaits","propagateToListener","Listener","nativeAwaitCompatibleWrap","linkToPreviousPromise","zone","reason","_promise","tryCatch","origProp","some","listeners","len","finalizePhysicalTick","listener","cb","callListener","ret","markErrorAsHandled","prev","numPrev","wasRootExec","callbacks","unhandledErrs","finalizers","PromiseReject","wrap","errorCatcher","outerScope","switchToZone","catch","type","handler","err","finally","onFinally","getStack","stacks","limit","failure","errorName","timeout","ms","Infinity","handle","Timeout","clearTimeout","snapShot","all","values","onPossibleParallellAsync","remaining","race","newPSD","newScope","usePSD","scheduler","follow","zoneProps","finalizer","allSettled","possiblePromises","results","status","AggregateError","task","awaits","echoes","taskCounter","zoneStack","zoneEchoes","zone_id_counter","a1","a2","parent","globalEnv","PromiseProp","nthen","getPatchedPromiseThen","gthen","incrementExpectedAwaits","possiblePromise","rejection","zoneLeaveEcho","pop","targetZone","bEnteringZone","GlobalPromise_1","currentZone","enqueueNativeMicroTask","targetEnv","GlobalPromise","a3","job","outerZone","origThen","onResolved","UNHANDLEDREJECTION","event","eventData","createEvent","initEvent","CustomEvent","detail","dispatchEvent","PromiseRejectionEvent","onunhandledrejection","_","defaultPrevented","console","warn","dexieStackFrameFilter","maxString","String","fromCharCode","INVALID_KEY_ARGUMENT","STRING_EXPECTED","connections","isIEOrEdge","navigator","userAgent","hasIEDeleteObjectStoreBug","hangsOnDeleteLargeKeyRange","DBNAMES_DB","READONLY","READWRITE","combine","filter1","filter2","AnyRange","lower","lowerOpen","upper","upperOpen","workaroundForUndefinedPrimKey","Table","_trans","mode","writeLocked","trans","_tx","tableName","checkTableInTransaction","schema","NotFound","idbtrans","db","transless","tempTransaction","storeNames","idbdb","openComplete","letThrough","_vip","_createTransaction","_dbSchema","PR1398_maxLoop","InvalidState","isOpen","_close","open","_completion","dbOpenError","isBeingOpened","_options","autoOpen","dbReadyPromise","keyOrCrit","where","first","core","hook","reading","fire","indexOrCrit","WhereClause","keyPaths","equals","compoundIndex","indexes","primKey","ix","compound","every","_maxKey","kp","JSON","stringify","idxByName","idb","_deps","indexedDB","cmp","_a","prevIndex","prevFilterFn","index","multi","idx","filterFunction","toCollection","and","count","thenShortcut","offset","numRows","each","toArray","Collection","orderBy","reverse","mapToClass","mappedClass","readHook","unsubscribe","defineClass","content","add","auto","objToAdd","mutate","numFailures","lastResult","update","keyOrObject","modify","InvalidArgument","put","delete","clear","range","bulkGet","getMany","bulkAdd","objects","keysOrOptions","wantResults","allKeys","numObjects","objectsToAdd","bulkPut","objectsToPut","bulkDelete","numKeys","Events","ctx","eventName","subscriber","evs","subscribe","addEventType","chainFunction","defaultFunction","cfg","context","subscribers","makeClassConstructor","isPlainKeyRange","ignoreLimitFilter","algorithm","or","justLimit","replayFilter","addFilter","addReplayFilter","isLimitFilter","curr","getIndexOrStore","coreSchema","isPrimKey","primaryKey","getIndexByKeyPath","Schema","openCursor","coreTable","keysOnly","dir","unique","query","iter","coreTrans","set_1","union","cursor","advance","stop","fail","_iterate","iterate","valueMapper","cursorPromise","wrappedFn","c","continue","advancer","ta","tb","NaN","al","bl","compareUint8Arrays","getUint8Array","compareArrays","ArrayBuffer","isView","tsTag","buffer","byteOffset","byteLength","_read","_ctx","error","table","_write","_addAlgorithm","clone","raw","Math","min","sortBy","parts","lastPart","lastIndex","getval","order","sorter","aVal","bVal","sort","valueMapper_1","a_1","offsetLeft","rowsLeft","until","bIncludeStopEntry","last","isMatch","indexName","_ondirectionchange","desc","eachKey","eachUniqueKey","eachPrimaryKey","primaryKeys","uniqueKeys","firstKey","lastKey","distinct","strKey","found","changes","modifyer","anythingModified","applyMutateResult","expectedCount","_i","totalFailures","outbound","extractKey","modifyChunkSize","nextChunk","cache","addValues","putValues","putKeys","deleteKeys","origValue","ctx_1","criteria","deleteCallback","changeSpec","coreRange","simpleCompare","simpleCompareReverse","collectionOrWhereClause","T","collection","emptyCollection","whereClause","rangeEqual","addIgnoreCaseAlgorithm","match","needles","suffix","compare","upperNeedles","lowerNeedles","direction","nextKeySuffix","needlesLen","initDirection","toUpperCase","toLowerCase","needleBounds","needle","nb","createRange","firstPossibleNeedle","lowerKey","lowestPossibleCasing","casing","upperNeedle","lowerNeedle","llp","lwrKeyChar","nextCasing","enumerable","between","includeLower","includeUpper","_cmp","above","aboveOrEqual","below","belowOrEqual","startsWith","str","startsWithIgnoreCase","equalsIgnoreCase","anyOfIgnoreCase","startsWithAnyOfIgnoreCase","anyOf","_ascending","_descending","notEqual","inAnyRange","includeLowers","includeUppers","noneOf","ranges","ascending","descending","_min","max","_max","sortDirection","rangeSorter","newRange","rangePos","keyIsBeyondCurrentEntry","keyIsBeforeCurrentEntry","checkKey","startsWithAnyOf","eventRejectHandler","preventDefault","target","stopPropagation","DEXIE_STORAGE_MUTATED_EVENT_NAME","STORAGE_MUTATED_DOM_EVENT_NAME","globalEvents","Transaction","_lock","_reculock","lockOwnerFor","_unlock","_blockedFuncs","_locked","fnAndPSD","shift","OpenFailed","active","transaction","durability","chromeTransactionDurability","ev","_reject","onabort","on","oncomplete","_resolve","storagemutated","bWriteLock","ReadOnly","_root","waitFor","promiseLike","store","root","_waitingFor","_waitingQueue","objectStore","spin","_spinCount","currentWaitPromise","abort","memoizedTables","_memoizedTables","tableSchema","transactionBoundTable","createIndexSpec","src","nameFromKeyPath","createTableSchema","getMaxKey","IdbKeyRange","only","getKeyExtractor","arrayify","_id_counter","getKeyPathAlias","createDBCore","tmpTrans","makeIDBKeyRange","upperBound","lowerBound","bound","createDbCoreTable","hasGetAll","isAddOrPut","req","errorHandler","reqs","args1","args2","keyCount","callbackCount","successHandler","_pos","request","count_1","req_1","result_1","nonInfinitLimit","source","isPrimaryKey","idbKeyRange","getAll","getAllKeys","openKeyCursor","_cursorContinue","_cursorContinuePrimaryKey","_cursorAdvance","doThrowCursorIsStopped","___id","continuePrimaryKey","gotOne","guardedCallback","iterationPromise","resolveIteration","rejectIteration","tables","objectStoreNames","autoIncrement","indexByKeyPath","indexNames","multiEntry","tableMap","MIN_KEY","MAX_KEY","createMiddlewareStacks","middlewares","IDBKeyRange","dbcore","stackImpl","down","generateMiddlewareStacks","_novip","_middlewares","tbl","setApiOnPlace","objs","tableNames","dbschema","propDesc","removeTablesApi","lowerVersionFirst","_cfg","version","runUpgraders","oldVersion","idbUpgradeTrans","globalSchema","_storeNames","rejectTransaction","queue","anyContentUpgraderHasRun","createTable","populate","versions","_versions","buildGlobalSchema","oldSchema","newSchema","adjustToExistingIndexNames","diff","getSchemaDiff","tuple","change","recreate","Upgrade","store_1","addIndex","deleteIndex","del","idxName","contentUpgrade","upgradeSchema_1","returnValue_1","contentUpgradeIsAsync_1","promiseFollowed","decrementor","storeName","deleteObjectStore","runQueue","contains","oldDef","newDef","def","oldIndexes","newIndexes","oldIdx","newIdx","createObjectStore","createIndex","j","idbindex","_hasGetAll","dexieName","indexSpec","WorkerGlobalScope","Version","_parseStoresSpec","stores","outSchema","indexNum","trim","replace","storesSource","storesSpec","_allTables","upgrade","upgradeFunction","getDbNamesTable","dbNamesDB","Dexie$1","addons","dbnames","hasDatabasesNative","databases","vip","dexieOpen","state","openCanceller","throwIfCancelled","intervalId","resolveDbReady","dbReadyResolve","upgradeTransaction","wasCreated","userAgentData","tryIdb","setInterval","clearInterval","dbName","autoSchema","round","verno","onblocked","_fireOnBlocked","onupgradeneeded","delreq","allowEmptyDB","close","deleteDatabase","NoSuchDatabase","oldVer","pow","ch","onversionchange","vcFired","onclose","onReadyBeingFired","ready","fireRemainders","remainders_1","awaitIterator","callNext","onSuccess","step","onError","throw","getNext","pad","virtualIndexMiddleware","level","indexLookup","allVirtualIndexes","addVirtualIndexes","keyTail","lowLevelIndex","keyPathAlias","indexList","keyLength","isVirtual","virtualIndex","translateRequest","createVirtualCursor","getObjectDiff","prfx","ap","bp","apTypeName","hooksMiddleware","downCore","downTable","dxTrans","deleting","creating","updating","addPutOrDelete","deleteNextChunk","effectiveKeys","existingValues","contexts","objectDiff","additionalChanges_1","requestedValue_1","existingValue","generatedPrimaryKey","getFromTransactionCache","cacheExistingValuesMiddleware","cachedResult","isEmptyRange","node","RangeSet","fromOrTree","d","addRange","left","right","r","rebalance","rightWasCutOff","mergeRanges","newSet","_addRangeSet","rangesOverlap","rangeSet1","rangeSet2","i1","getRangeSetIterator","nextResult1","i2","nextResult2","keyProvided","up","rootClone","_b","oldRootRight","computeDepth","rangeSet","addKey","addKeys","observabilityMiddleware","FULL_RANGE","getRange","_d","_c","tableClone","getRangeSet","mutatedParts","part","pkRangeSet","delsRangeSet","newObjs","oldCache","oldObjs","addKeyOrKeys","oldKey","newKey","readSubscribers","method","subscr","pkRangeSet_1","delsRangeSet_1","queriedIndex","queriedRanges","keysPromise_1","resultingKeys","pKeys","cursor_1","wantValues_1","pkey","versionNumber","versionInstance","_whenReady","use","unuse","mw","cancelOpen","hasArguments","doDelete","backendDB","hasBeenClosed","hasFailed","dynamicallyOpened","_tableArgs_","scopeFunc","_transaction","parentTransaction","idbMode","onlyIfCompatible","SubTransaction","enterTransaction","enterTransactionScope","returnValue","scopeFuncIsAsync","PrematureCommit","InvalidTable","deps","dependencies","bSticky","db_1","keyRangeGenerator","keyRange","whereCtx","readingHook","complete","wasActive","orCollection","_IDBKeyRange","newVersion","addon","symbolObservable","observable","Observable","_subscribe","extendObservabilitySet","liveQuery","querier","hasValue","currentValue","observer","closed","accumMuts","currentObs","subscription","mutationListener","querying","startedListening","shouldNotify","doQuery","exec","execute","getValue","domDeps","mozIndexedDB","webkitIndexedDB","msIndexedDB","webkitIDBKeyRange","propagateLocally","updateParts","wasMe","propagatingLocally","databaseName","exists","getDatabaseNames","infos","info","ignoreTransaction","async","generatorFn","spawn","currentTransaction","promiseOrFunction","optionalTimeout","delByKeyPath","minKey","semVer","maxKey","addEventListener","updatedParts","event_1","initCustomEvent","bc_1","swContainer","BroadcastChannel","unref","changedParts","postMessage","onmessage","data","localStorage","setItem","trig","random","matchAll","includeUncontrolled","client","parse","newValue","serviceWorker","domError","freeze","__proto__","default"],"mappings":"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"}
\ No newline at end of file diff --git a/ext/lib/handlebars.min.js b/ext/lib/handlebars.min.js deleted file mode 100644 index 3671cbf0..00000000 --- a/ext/lib/handlebars.min.js +++ /dev/null @@ -1,25 +0,0 @@ -(()=>{var _i=Object.create;var bt=Object.defineProperty;var Si=Object.getOwnPropertyDescriptor;var yi=Object.getOwnPropertyNames,_r=Object.getOwnPropertySymbols,ki=Object.getPrototypeOf,yr=Object.prototype.hasOwnProperty,Pi=Object.prototype.propertyIsEnumerable;var Sr=(t,e,r)=>e in t?bt(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,E=(t,e)=>{for(var r in e||(e={}))yr.call(e,r)&&Sr(t,r,e[r]);if(_r)for(var r of _r(e))Pi.call(e,r)&&Sr(t,r,e[r]);return t};var ne=(t=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(t,{get:(e,r)=>(typeof require!="undefined"?require:e)[r]}):t)(function(t){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+t+'" is not supported')});var m=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var bi=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of yi(e))!yr.call(t,i)&&i!==r&&bt(t,i,{get:()=>e[i],enumerable:!(n=Si(e,i))||n.enumerable});return t};var ie=(t,e,r)=>(r=t!=null?_i(ki(t)):{},bi(e||!t||!t.__esModule?bt(r,"default",{value:t,enumerable:!0}):r,t));var P=m(x=>{"use strict";x.__esModule=!0;x.extend=kr;x.indexOf=wi;x.escapeExpression=Oi;x.isEmpty=Ai;x.createFrame=Mi;x.blockParams=Ni;x.appendContextPath=Ii;var Ci={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`","=":"="},Li=/[&<>"'`=]/g,Ei=/[&<>"'`=]/;function xi(t){return Ci[t]}function kr(t){for(var e=1;e<arguments.length;e++)for(var r in arguments[e])Object.prototype.hasOwnProperty.call(arguments[e],r)&&(t[r]=arguments[e][r]);return t}var Lt=Object.prototype.toString;x.toString=Lt;var Ct=function(e){return typeof e=="function"};Ct(/x/)&&(x.isFunction=Ct=function(t){return typeof t=="function"&&Lt.call(t)==="[object Function]"});x.isFunction=Ct;var Pr=Array.isArray||function(t){return t&&typeof t=="object"?Lt.call(t)==="[object Array]":!1};x.isArray=Pr;function wi(t,e){for(var r=0,n=t.length;r<n;r++)if(t[r]===e)return r;return-1}function Oi(t){if(typeof t!="string"){if(t&&t.toHTML)return t.toHTML();if(t==null)return"";if(!t)return t+"";t=""+t}return Ei.test(t)?t.replace(Li,xi):t}function Ai(t){return!t&&t!==0?!0:!!(Pr(t)&&t.length===0)}function Mi(t){var e=kr({},t);return e._parent=t,e}function Ni(t,e){return t.path=e,t}function Ii(t,e){return(t?t+".":"")+e}});var M=m((Ne,br)=>{"use strict";Ne.__esModule=!0;var Et=["description","fileName","lineNumber","endLineNumber","message","name","number","stack"];function xt(t,e){var r=e&&e.loc,n=void 0,i=void 0,s=void 0,o=void 0;r&&(n=r.start.line,i=r.end.line,s=r.start.column,o=r.end.column,t+=" - "+n+":"+s);for(var u=Error.prototype.constructor.call(this,t),l=0;l<Et.length;l++)this[Et[l]]=u[Et[l]];Error.captureStackTrace&&Error.captureStackTrace(this,xt);try{r&&(this.lineNumber=n,this.endLineNumber=i,Object.defineProperty?(Object.defineProperty(this,"column",{value:s,enumerable:!0}),Object.defineProperty(this,"endColumn",{value:o,enumerable:!0})):(this.column=s,this.endColumn=o))}catch(a){}}xt.prototype=new Error;Ne.default=xt;br.exports=Ne.default});var Lr=m((Ie,Cr)=>{"use strict";Ie.__esModule=!0;var wt=P();Ie.default=function(t){t.registerHelper("blockHelperMissing",function(e,r){var n=r.inverse,i=r.fn;if(e===!0)return i(this);if(e===!1||e==null)return n(this);if(wt.isArray(e))return e.length>0?(r.ids&&(r.ids=[r.name]),t.helpers.each(e,r)):n(this);if(r.data&&r.ids){var s=wt.createFrame(r.data);s.contextPath=wt.appendContextPath(r.data.contextPath,r.name),r={data:s}}return i(e,r)})};Cr.exports=Ie.default});var xr=m((De,Er)=>{"use strict";De.__esModule=!0;function Di(t){return t&&t.__esModule?t:{default:t}}var de=P(),Ri=M(),Bi=Di(Ri);De.default=function(t){t.registerHelper("each",function(e,r){if(!r)throw new Bi.default("Must pass iterator to #each");var n=r.fn,i=r.inverse,s=0,o="",u=void 0,l=void 0;r.data&&r.ids&&(l=de.appendContextPath(r.data.contextPath,r.ids[0])+"."),de.isFunction(e)&&(e=e.call(this)),r.data&&(u=de.createFrame(r.data));function a(g,_,O){u&&(u.key=g,u.index=_,u.first=_===0,u.last=!!O,l&&(u.contextPath=l+g)),o=o+n(e[g],{data:u,blockParams:de.blockParams([e[g],g],[l+g,null])})}if(e&&typeof e=="object")if(de.isArray(e))for(var h=e.length;s<h;s++)s in e&&a(s,s,s===e.length-1);else if(global.Symbol&&e[global.Symbol.iterator]){for(var c=[],p=e[global.Symbol.iterator](),d=p.next();!d.done;d=p.next())c.push(d.value);e=c;for(var h=e.length;s<h;s++)a(s,s,s===e.length-1)}else(function(){var g=void 0;Object.keys(e).forEach(function(_){g!==void 0&&a(g,s-1),g=_,s++}),g!==void 0&&a(g,s-1,!0)})();return s===0&&(o=i(this)),o})};Er.exports=De.default});var Or=m((Re,wr)=>{"use strict";Re.__esModule=!0;function Hi(t){return t&&t.__esModule?t:{default:t}}var Ti=M(),qi=Hi(Ti);Re.default=function(t){t.registerHelper("helperMissing",function(){if(arguments.length!==1)throw new qi.default('Missing helper: "'+arguments[arguments.length-1].name+'"')})};wr.exports=Re.default});var Ir=m((Be,Nr)=>{"use strict";Be.__esModule=!0;function Fi(t){return t&&t.__esModule?t:{default:t}}var Ar=P(),Vi=M(),Mr=Fi(Vi);Be.default=function(t){t.registerHelper("if",function(e,r){if(arguments.length!=2)throw new Mr.default("#if requires exactly one argument");return Ar.isFunction(e)&&(e=e.call(this)),!r.hash.includeZero&&!e||Ar.isEmpty(e)?r.inverse(this):r.fn(this)}),t.registerHelper("unless",function(e,r){if(arguments.length!=2)throw new Mr.default("#unless requires exactly one argument");return t.helpers.if.call(this,e,{fn:r.inverse,inverse:r.fn,hash:r.hash})})};Nr.exports=Be.default});var Rr=m((He,Dr)=>{"use strict";He.__esModule=!0;He.default=function(t){t.registerHelper("log",function(){for(var e=[void 0],r=arguments[arguments.length-1],n=0;n<arguments.length-1;n++)e.push(arguments[n]);var i=1;r.hash.level!=null?i=r.hash.level:r.data&&r.data.level!=null&&(i=r.data.level),e[0]=i,t.log.apply(t,e)})};Dr.exports=He.default});var Hr=m((Te,Br)=>{"use strict";Te.__esModule=!0;Te.default=function(t){t.registerHelper("lookup",function(e,r,n){return e&&n.lookupProperty(e,r)})};Br.exports=Te.default});var qr=m((qe,Tr)=>{"use strict";qe.__esModule=!0;function Wi(t){return t&&t.__esModule?t:{default:t}}var me=P(),Gi=M(),Ui=Wi(Gi);qe.default=function(t){t.registerHelper("with",function(e,r){if(arguments.length!=2)throw new Ui.default("#with requires exactly one argument");me.isFunction(e)&&(e=e.call(this));var n=r.fn;if(me.isEmpty(e))return r.inverse(this);var i=r.data;return r.data&&r.ids&&(i=me.createFrame(r.data),i.contextPath=me.appendContextPath(r.data.contextPath,r.ids[0])),n(e,{data:i,blockParams:me.blockParams([e],[i&&i.contextPath])})})};Tr.exports=qe.default});var Ve=m(Fe=>{"use strict";Fe.__esModule=!0;Fe.registerDefaultHelpers=ss;Fe.moveHelperToHooks=os;function X(t){return t&&t.__esModule?t:{default:t}}var Ki=Lr(),Ji=X(Ki),zi=xr(),Qi=X(zi),Yi=Or(),Xi=X(Yi),Zi=Ir(),ji=X(Zi),$i=Rr(),es=X($i),ts=Hr(),rs=X(ts),ns=qr(),is=X(ns);function ss(t){Ji.default(t),Qi.default(t),Xi.default(t),ji.default(t),es.default(t),rs.default(t),is.default(t)}function os(t,e,r){t.helpers[e]&&(t.hooks[e]=t.helpers[e],r||delete t.helpers[e])}});var Vr=m((We,Fr)=>{"use strict";We.__esModule=!0;var as=P();We.default=function(t){t.registerDecorator("inline",function(e,r,n,i){var s=e;return r.partials||(r.partials={},s=function(o,u){var l=n.partials;n.partials=as.extend({},l,r.partials);var a=e(o,u);return n.partials=l,a}),r.partials[i.args[0]]=i.fn,s})};Fr.exports=We.default});var Wr=m(Ot=>{"use strict";Ot.__esModule=!0;Ot.registerDefaultDecorators=hs;function us(t){return t&&t.__esModule?t:{default:t}}var ls=Vr(),cs=us(ls);function hs(t){cs.default(t)}});var At=m((Ge,Gr)=>{"use strict";Ge.__esModule=!0;var ps=P(),se={methodMap:["debug","info","warn","error"],level:"info",lookupLevel:function(e){if(typeof e=="string"){var r=ps.indexOf(se.methodMap,e.toLowerCase());r>=0?e=r:e=parseInt(e,10)}return e},log:function(e){if(e=se.lookupLevel(e),typeof console!="undefined"&&se.lookupLevel(se.level)<=e){var r=se.methodMap[e];console[r]||(r="log");for(var n=arguments.length,i=Array(n>1?n-1:0),s=1;s<n;s++)i[s-1]=arguments[s];console[r].apply(console,i)}}};Ge.default=se;Gr.exports=Ge.default});var Ur=m(Mt=>{"use strict";Mt.__esModule=!0;Mt.createNewLookupObject=ds;var fs=P();function ds(){for(var t=arguments.length,e=Array(t),r=0;r<t;r++)e[r]=arguments[r];return fs.extend.apply(void 0,[Object.create(null)].concat(e))}});var Ke=m(ge=>{"use strict";ge.__esModule=!0;ge.createProtoAccessControl=_s;ge.resultIsAllowed=Ss;ge.resetLoggedProperties=ks;function ms(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e.default=t,e}var Kr=Ur(),gs=At(),vs=ms(gs),Ue=Object.create(null);function _s(t){var e=Object.create(null);e.constructor=!1,e.__defineGetter__=!1,e.__defineSetter__=!1,e.__lookupGetter__=!1;var r=Object.create(null);return r.__proto__=!1,{properties:{whitelist:Kr.createNewLookupObject(r,t.allowedProtoProperties),defaultValue:t.allowProtoPropertiesByDefault},methods:{whitelist:Kr.createNewLookupObject(e,t.allowedProtoMethods),defaultValue:t.allowProtoMethodsByDefault}}}function Ss(t,e,r){return Jr(typeof t=="function"?e.methods:e.properties,r)}function Jr(t,e){return t.whitelist[e]!==void 0?t.whitelist[e]===!0:t.defaultValue!==void 0?t.defaultValue:(ys(e),!1)}function ys(t){Ue[t]!==!0&&(Ue[t]=!0,vs.log("error",'Handlebars: Access has been denied to resolve the property "'+t+`" because it is not an "own property" of its parent. -You can add a runtime option to disable the check or this warning: -See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details`))}function ks(){Object.keys(Ue).forEach(function(t){delete Ue[t]})}});var ze=m(B=>{"use strict";B.__esModule=!0;B.HandlebarsEnvironment=Dt;function zr(t){return t&&t.__esModule?t:{default:t}}var Z=P(),Ps=M(),Nt=zr(Ps),bs=Ve(),Cs=Wr(),Ls=At(),Je=zr(Ls),Es=Ke(),xs="4.7.7";B.VERSION=xs;var ws=8;B.COMPILER_REVISION=ws;var Os=7;B.LAST_COMPATIBLE_COMPILER_REVISION=Os;var As={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0 <4.3.0",8:">= 4.3.0"};B.REVISION_CHANGES=As;var It="[object Object]";function Dt(t,e,r){this.helpers=t||{},this.partials=e||{},this.decorators=r||{},bs.registerDefaultHelpers(this),Cs.registerDefaultDecorators(this)}Dt.prototype={constructor:Dt,logger:Je.default,log:Je.default.log,registerHelper:function(e,r){if(Z.toString.call(e)===It){if(r)throw new Nt.default("Arg not supported with multiple helpers");Z.extend(this.helpers,e)}else this.helpers[e]=r},unregisterHelper:function(e){delete this.helpers[e]},registerPartial:function(e,r){if(Z.toString.call(e)===It)Z.extend(this.partials,e);else{if(typeof r=="undefined")throw new Nt.default('Attempting to register a partial called "'+e+'" as undefined');this.partials[e]=r}},unregisterPartial:function(e){delete this.partials[e]},registerDecorator:function(e,r){if(Z.toString.call(e)===It){if(r)throw new Nt.default("Arg not supported with multiple decorators");Z.extend(this.decorators,e)}else this.decorators[e]=r},unregisterDecorator:function(e){delete this.decorators[e]},resetLoggedPropertyAccesses:function(){Es.resetLoggedProperties()}};var Ms=Je.default.log;B.log=Ms;B.createFrame=Z.createFrame;B.logger=Je.default});var Yr=m((Qe,Qr)=>{"use strict";Qe.__esModule=!0;function Rt(t){this.string=t}Rt.prototype.toString=Rt.prototype.toHTML=function(){return""+this.string};Qe.default=Rt;Qr.exports=Qe.default});var Xr=m(Bt=>{"use strict";Bt.__esModule=!0;Bt.wrapHelper=Ns;function Ns(t,e){if(typeof t!="function")return t;var r=function(){var i=arguments[arguments.length-1];return arguments[arguments.length-1]=e(i),t.apply(this,arguments)};return r}});var tn=m(z=>{"use strict";z.__esModule=!0;z.checkRevision=Ts;z.template=qs;z.wrapProgram=Ye;z.resolvePartial=Fs;z.invokePartial=Vs;z.noop=$r;function Is(t){return t&&t.__esModule?t:{default:t}}function Ds(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e.default=t,e}var Rs=P(),V=Ds(Rs),Bs=M(),W=Is(Bs),G=ze(),Zr=Ve(),Hs=Xr(),jr=Ke();function Ts(t){var e=t&&t[0]||1,r=G.COMPILER_REVISION;if(!(e>=G.LAST_COMPATIBLE_COMPILER_REVISION&&e<=G.COMPILER_REVISION))if(e<G.LAST_COMPATIBLE_COMPILER_REVISION){var n=G.REVISION_CHANGES[r],i=G.REVISION_CHANGES[e];throw new W.default("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version ("+n+") or downgrade your runtime to an older version ("+i+").")}else throw new W.default("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version ("+t[1]+").")}function qs(t,e){if(!e)throw new W.default("No environment passed to template");if(!t||!t.main)throw new W.default("Unknown template object: "+typeof t);t.main.decorator=t.main_d,e.VM.checkRevision(t.compiler);var r=t.compiler&&t.compiler[0]===7;function n(o,u,l){l.hash&&(u=V.extend({},u,l.hash),l.ids&&(l.ids[0]=!0)),o=e.VM.resolvePartial.call(this,o,u,l);var a=V.extend({},l,{hooks:this.hooks,protoAccessControl:this.protoAccessControl}),h=e.VM.invokePartial.call(this,o,u,a);if(h==null&&e.compile&&(l.partials[l.name]=e.compile(o,t.compilerOptions,e),h=l.partials[l.name](u,a)),h!=null){if(l.indent){for(var c=h.split(` -`),p=0,d=c.length;p<d&&!(!c[p]&&p+1===d);p++)c[p]=l.indent+c[p];h=c.join(` -`)}return h}else throw new W.default("The partial "+l.name+" could not be compiled when running in runtime-only mode")}var i={strict:function(u,l,a){if(!u||!(l in u))throw new W.default('"'+l+'" not defined in '+u,{loc:a});return i.lookupProperty(u,l)},lookupProperty:function(u,l){var a=u[l];if(a==null||Object.prototype.hasOwnProperty.call(u,l)||jr.resultIsAllowed(a,i.protoAccessControl,l))return a},lookup:function(u,l){for(var a=u.length,h=0;h<a;h++){var c=u[h]&&i.lookupProperty(u[h],l);if(c!=null)return u[h][l]}},lambda:function(u,l){return typeof u=="function"?u.call(l):u},escapeExpression:V.escapeExpression,invokePartial:n,fn:function(u){var l=t[u];return l.decorator=t[u+"_d"],l},programs:[],program:function(u,l,a,h,c){var p=this.programs[u],d=this.fn(u);return l||c||h||a?p=Ye(this,u,d,l,a,h,c):p||(p=this.programs[u]=Ye(this,u,d)),p},data:function(u,l){for(;u&&l--;)u=u._parent;return u},mergeIfNeeded:function(u,l){var a=u||l;return u&&l&&u!==l&&(a=V.extend({},l,u)),a},nullContext:Object.seal({}),noop:e.VM.noop,compilerInfo:t.compiler};function s(o){var u=arguments.length<=1||arguments[1]===void 0?{}:arguments[1],l=u.data;s._setup(u),!u.partial&&t.useData&&(l=Ws(o,l));var a=void 0,h=t.useBlockParams?[]:void 0;t.useDepths&&(u.depths?a=o!=u.depths[0]?[o].concat(u.depths):u.depths:a=[o]);function c(p){return""+t.main(i,p,i.helpers,i.partials,l,h,a)}return c=en(t.main,c,i,u.depths||[],l,h),c(o,u)}return s.isTop=!0,s._setup=function(o){if(o.partial)i.protoAccessControl=o.protoAccessControl,i.helpers=o.helpers,i.partials=o.partials,i.decorators=o.decorators,i.hooks=o.hooks;else{var u=V.extend({},e.helpers,o.helpers);Gs(u,i),i.helpers=u,t.usePartial&&(i.partials=i.mergeIfNeeded(o.partials,e.partials)),(t.usePartial||t.useDecorators)&&(i.decorators=V.extend({},e.decorators,o.decorators)),i.hooks={},i.protoAccessControl=jr.createProtoAccessControl(o);var l=o.allowCallsToHelperMissing||r;Zr.moveHelperToHooks(i,"helperMissing",l),Zr.moveHelperToHooks(i,"blockHelperMissing",l)}},s._child=function(o,u,l,a){if(t.useBlockParams&&!l)throw new W.default("must pass block params");if(t.useDepths&&!a)throw new W.default("must pass parent depths");return Ye(i,o,t[o],u,0,l,a)},s}function Ye(t,e,r,n,i,s,o){function u(l){var a=arguments.length<=1||arguments[1]===void 0?{}:arguments[1],h=o;return o&&l!=o[0]&&!(l===t.nullContext&&o[0]===null)&&(h=[l].concat(o)),r(t,l,t.helpers,t.partials,a.data||n,s&&[a.blockParams].concat(s),h)}return u=en(r,u,t,o,n,s),u.program=e,u.depth=o?o.length:0,u.blockParams=i||0,u}function Fs(t,e,r){return t?!t.call&&!r.name&&(r.name=t,t=r.partials[t]):r.name==="@partial-block"?t=r.data["partial-block"]:t=r.partials[r.name],t}function Vs(t,e,r){var n=r.data&&r.data["partial-block"];r.partial=!0,r.ids&&(r.data.contextPath=r.ids[0]||r.data.contextPath);var i=void 0;if(r.fn&&r.fn!==$r&&function(){r.data=G.createFrame(r.data);var s=r.fn;i=r.data["partial-block"]=function(u){var l=arguments.length<=1||arguments[1]===void 0?{}:arguments[1];return l.data=G.createFrame(l.data),l.data["partial-block"]=n,s(u,l)},s.partials&&(r.partials=V.extend({},r.partials,s.partials))}(),t===void 0&&i&&(t=i),t===void 0)throw new W.default("The partial "+r.name+" could not be found");if(t instanceof Function)return t(e,r)}function $r(){return""}function Ws(t,e){return(!e||!("root"in e))&&(e=e?G.createFrame(e):{},e.root=t),e}function en(t,e,r,n,i,s){if(t.decorator){var o={};e=t.decorator(e,o,r,n&&n[0],i,s,n),V.extend(e,o)}return e}function Gs(t,e){Object.keys(t).forEach(function(r){var n=t[r];t[r]=Us(n,e)})}function Us(t,e){var r=e.lookupProperty;return Hs.wrapHelper(t,function(n){return V.extend({lookupProperty:r},n)})}});var Ht=m((Xe,rn)=>{"use strict";Xe.__esModule=!0;Xe.default=function(t){var e=typeof global!="undefined"?global:window,r=e.Handlebars;t.noConflict=function(){return e.Handlebars===t&&(e.Handlebars=r),t}};rn.exports=Xe.default});var un=m((Ze,an)=>{"use strict";Ze.__esModule=!0;function qt(t){return t&&t.__esModule?t:{default:t}}function Ft(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e.default=t,e}var Ks=ze(),nn=Ft(Ks),Js=Yr(),zs=qt(Js),Qs=M(),Ys=qt(Qs),Xs=P(),Tt=Ft(Xs),Zs=tn(),sn=Ft(Zs),js=Ht(),$s=qt(js);function on(){var t=new nn.HandlebarsEnvironment;return Tt.extend(t,nn),t.SafeString=zs.default,t.Exception=Ys.default,t.Utils=Tt,t.escapeExpression=Tt.escapeExpression,t.VM=sn,t.template=function(e){return sn.template(e,t)},t}var ve=on();ve.create=on;$s.default(ve);ve.default=ve;Ze.default=ve;an.exports=Ze.default});var $e=m((je,cn)=>{"use strict";je.__esModule=!0;var ln={helpers:{helperExpression:function(e){return e.type==="SubExpression"||(e.type==="MustacheStatement"||e.type==="BlockStatement")&&!!(e.params&&e.params.length||e.hash)},scopedId:function(e){return/^\.|this\b/.test(e.original)},simpleId:function(e){return e.parts.length===1&&!ln.helpers.scopedId(e)&&!e.depth}}};je.default=ln;cn.exports=je.default});var pn=m((et,hn)=>{"use strict";et.__esModule=!0;var eo=function(){var t={trace:function(){},yy:{},symbols_:{error:2,root:3,program:4,EOF:5,program_repetition0:6,statement:7,mustache:8,block:9,rawBlock:10,partial:11,partialBlock:12,content:13,COMMENT:14,CONTENT:15,openRawBlock:16,rawBlock_repetition0:17,END_RAW_BLOCK:18,OPEN_RAW_BLOCK:19,helperName:20,openRawBlock_repetition0:21,openRawBlock_option0:22,CLOSE_RAW_BLOCK:23,openBlock:24,block_option0:25,closeBlock:26,openInverse:27,block_option1:28,OPEN_BLOCK:29,openBlock_repetition0:30,openBlock_option0:31,openBlock_option1:32,CLOSE:33,OPEN_INVERSE:34,openInverse_repetition0:35,openInverse_option0:36,openInverse_option1:37,openInverseChain:38,OPEN_INVERSE_CHAIN:39,openInverseChain_repetition0:40,openInverseChain_option0:41,openInverseChain_option1:42,inverseAndProgram:43,INVERSE:44,inverseChain:45,inverseChain_option0:46,OPEN_ENDBLOCK:47,OPEN:48,mustache_repetition0:49,mustache_option0:50,OPEN_UNESCAPED:51,mustache_repetition1:52,mustache_option1:53,CLOSE_UNESCAPED:54,OPEN_PARTIAL:55,partialName:56,partial_repetition0:57,partial_option0:58,openPartialBlock:59,OPEN_PARTIAL_BLOCK:60,openPartialBlock_repetition0:61,openPartialBlock_option0:62,param:63,sexpr:64,OPEN_SEXPR:65,sexpr_repetition0:66,sexpr_option0:67,CLOSE_SEXPR:68,hash:69,hash_repetition_plus0:70,hashSegment:71,ID:72,EQUALS:73,blockParams:74,OPEN_BLOCK_PARAMS:75,blockParams_repetition_plus0:76,CLOSE_BLOCK_PARAMS:77,path:78,dataName:79,STRING:80,NUMBER:81,BOOLEAN:82,UNDEFINED:83,NULL:84,DATA:85,pathSegments:86,SEP:87,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",14:"COMMENT",15:"CONTENT",18:"END_RAW_BLOCK",19:"OPEN_RAW_BLOCK",23:"CLOSE_RAW_BLOCK",29:"OPEN_BLOCK",33:"CLOSE",34:"OPEN_INVERSE",39:"OPEN_INVERSE_CHAIN",44:"INVERSE",47:"OPEN_ENDBLOCK",48:"OPEN",51:"OPEN_UNESCAPED",54:"CLOSE_UNESCAPED",55:"OPEN_PARTIAL",60:"OPEN_PARTIAL_BLOCK",65:"OPEN_SEXPR",68:"CLOSE_SEXPR",72:"ID",73:"EQUALS",75:"OPEN_BLOCK_PARAMS",77:"CLOSE_BLOCK_PARAMS",80:"STRING",81:"NUMBER",82:"BOOLEAN",83:"UNDEFINED",84:"NULL",85:"DATA",87:"SEP"},productions_:[0,[3,2],[4,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[13,1],[10,3],[16,5],[9,4],[9,4],[24,6],[27,6],[38,6],[43,2],[45,3],[45,1],[26,3],[8,5],[8,5],[11,5],[12,3],[59,5],[63,1],[63,1],[64,5],[69,1],[71,3],[74,3],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[56,1],[56,1],[79,2],[78,1],[86,3],[86,1],[6,0],[6,2],[17,0],[17,2],[21,0],[21,2],[22,0],[22,1],[25,0],[25,1],[28,0],[28,1],[30,0],[30,2],[31,0],[31,1],[32,0],[32,1],[35,0],[35,2],[36,0],[36,1],[37,0],[37,1],[40,0],[40,2],[41,0],[41,1],[42,0],[42,1],[46,0],[46,1],[49,0],[49,2],[50,0],[50,1],[52,0],[52,2],[53,0],[53,1],[57,0],[57,2],[58,0],[58,1],[61,0],[61,2],[62,0],[62,1],[66,0],[66,2],[67,0],[67,1],[70,1],[70,2],[76,1],[76,2]],performAction:function(i,s,o,u,l,a,h){var c=a.length-1;switch(l){case 1:return a[c-1];case 2:this.$=u.prepareProgram(a[c]);break;case 3:this.$=a[c];break;case 4:this.$=a[c];break;case 5:this.$=a[c];break;case 6:this.$=a[c];break;case 7:this.$=a[c];break;case 8:this.$=a[c];break;case 9:this.$={type:"CommentStatement",value:u.stripComment(a[c]),strip:u.stripFlags(a[c],a[c]),loc:u.locInfo(this._$)};break;case 10:this.$={type:"ContentStatement",original:a[c],value:a[c],loc:u.locInfo(this._$)};break;case 11:this.$=u.prepareRawBlock(a[c-2],a[c-1],a[c],this._$);break;case 12:this.$={path:a[c-3],params:a[c-2],hash:a[c-1]};break;case 13:this.$=u.prepareBlock(a[c-3],a[c-2],a[c-1],a[c],!1,this._$);break;case 14:this.$=u.prepareBlock(a[c-3],a[c-2],a[c-1],a[c],!0,this._$);break;case 15:this.$={open:a[c-5],path:a[c-4],params:a[c-3],hash:a[c-2],blockParams:a[c-1],strip:u.stripFlags(a[c-5],a[c])};break;case 16:this.$={path:a[c-4],params:a[c-3],hash:a[c-2],blockParams:a[c-1],strip:u.stripFlags(a[c-5],a[c])};break;case 17:this.$={path:a[c-4],params:a[c-3],hash:a[c-2],blockParams:a[c-1],strip:u.stripFlags(a[c-5],a[c])};break;case 18:this.$={strip:u.stripFlags(a[c-1],a[c-1]),program:a[c]};break;case 19:var p=u.prepareBlock(a[c-2],a[c-1],a[c],a[c],!1,this._$),d=u.prepareProgram([p],a[c-1].loc);d.chained=!0,this.$={strip:a[c-2].strip,program:d,chain:!0};break;case 20:this.$=a[c];break;case 21:this.$={path:a[c-1],strip:u.stripFlags(a[c-2],a[c])};break;case 22:this.$=u.prepareMustache(a[c-3],a[c-2],a[c-1],a[c-4],u.stripFlags(a[c-4],a[c]),this._$);break;case 23:this.$=u.prepareMustache(a[c-3],a[c-2],a[c-1],a[c-4],u.stripFlags(a[c-4],a[c]),this._$);break;case 24:this.$={type:"PartialStatement",name:a[c-3],params:a[c-2],hash:a[c-1],indent:"",strip:u.stripFlags(a[c-4],a[c]),loc:u.locInfo(this._$)};break;case 25:this.$=u.preparePartialBlock(a[c-2],a[c-1],a[c],this._$);break;case 26:this.$={path:a[c-3],params:a[c-2],hash:a[c-1],strip:u.stripFlags(a[c-4],a[c])};break;case 27:this.$=a[c];break;case 28:this.$=a[c];break;case 29:this.$={type:"SubExpression",path:a[c-3],params:a[c-2],hash:a[c-1],loc:u.locInfo(this._$)};break;case 30:this.$={type:"Hash",pairs:a[c],loc:u.locInfo(this._$)};break;case 31:this.$={type:"HashPair",key:u.id(a[c-2]),value:a[c],loc:u.locInfo(this._$)};break;case 32:this.$=u.id(a[c-1]);break;case 33:this.$=a[c];break;case 34:this.$=a[c];break;case 35:this.$={type:"StringLiteral",value:a[c],original:a[c],loc:u.locInfo(this._$)};break;case 36:this.$={type:"NumberLiteral",value:Number(a[c]),original:Number(a[c]),loc:u.locInfo(this._$)};break;case 37:this.$={type:"BooleanLiteral",value:a[c]==="true",original:a[c]==="true",loc:u.locInfo(this._$)};break;case 38:this.$={type:"UndefinedLiteral",original:void 0,value:void 0,loc:u.locInfo(this._$)};break;case 39:this.$={type:"NullLiteral",original:null,value:null,loc:u.locInfo(this._$)};break;case 40:this.$=a[c];break;case 41:this.$=a[c];break;case 42:this.$=u.preparePath(!0,a[c],this._$);break;case 43:this.$=u.preparePath(!1,a[c],this._$);break;case 44:a[c-2].push({part:u.id(a[c]),original:a[c],separator:a[c-1]}),this.$=a[c-2];break;case 45:this.$=[{part:u.id(a[c]),original:a[c]}];break;case 46:this.$=[];break;case 47:a[c-1].push(a[c]);break;case 48:this.$=[];break;case 49:a[c-1].push(a[c]);break;case 50:this.$=[];break;case 51:a[c-1].push(a[c]);break;case 58:this.$=[];break;case 59:a[c-1].push(a[c]);break;case 64:this.$=[];break;case 65:a[c-1].push(a[c]);break;case 70:this.$=[];break;case 71:a[c-1].push(a[c]);break;case 78:this.$=[];break;case 79:a[c-1].push(a[c]);break;case 82:this.$=[];break;case 83:a[c-1].push(a[c]);break;case 86:this.$=[];break;case 87:a[c-1].push(a[c]);break;case 90:this.$=[];break;case 91:a[c-1].push(a[c]);break;case 94:this.$=[];break;case 95:a[c-1].push(a[c]);break;case 98:this.$=[a[c]];break;case 99:a[c-1].push(a[c]);break;case 100:this.$=[a[c]];break;case 101:a[c-1].push(a[c]);break}},table:[{3:1,4:2,5:[2,46],6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{1:[3]},{5:[1,4]},{5:[2,2],7:5,8:6,9:7,10:8,11:9,12:10,13:11,14:[1,12],15:[1,20],16:17,19:[1,23],24:15,27:16,29:[1,21],34:[1,22],39:[2,2],44:[2,2],47:[2,2],48:[1,13],51:[1,14],55:[1,18],59:19,60:[1,24]},{1:[2,1]},{5:[2,47],14:[2,47],15:[2,47],19:[2,47],29:[2,47],34:[2,47],39:[2,47],44:[2,47],47:[2,47],48:[2,47],51:[2,47],55:[2,47],60:[2,47]},{5:[2,3],14:[2,3],15:[2,3],19:[2,3],29:[2,3],34:[2,3],39:[2,3],44:[2,3],47:[2,3],48:[2,3],51:[2,3],55:[2,3],60:[2,3]},{5:[2,4],14:[2,4],15:[2,4],19:[2,4],29:[2,4],34:[2,4],39:[2,4],44:[2,4],47:[2,4],48:[2,4],51:[2,4],55:[2,4],60:[2,4]},{5:[2,5],14:[2,5],15:[2,5],19:[2,5],29:[2,5],34:[2,5],39:[2,5],44:[2,5],47:[2,5],48:[2,5],51:[2,5],55:[2,5],60:[2,5]},{5:[2,6],14:[2,6],15:[2,6],19:[2,6],29:[2,6],34:[2,6],39:[2,6],44:[2,6],47:[2,6],48:[2,6],51:[2,6],55:[2,6],60:[2,6]},{5:[2,7],14:[2,7],15:[2,7],19:[2,7],29:[2,7],34:[2,7],39:[2,7],44:[2,7],47:[2,7],48:[2,7],51:[2,7],55:[2,7],60:[2,7]},{5:[2,8],14:[2,8],15:[2,8],19:[2,8],29:[2,8],34:[2,8],39:[2,8],44:[2,8],47:[2,8],48:[2,8],51:[2,8],55:[2,8],60:[2,8]},{5:[2,9],14:[2,9],15:[2,9],19:[2,9],29:[2,9],34:[2,9],39:[2,9],44:[2,9],47:[2,9],48:[2,9],51:[2,9],55:[2,9],60:[2,9]},{20:25,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:36,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:37,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{4:38,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{15:[2,48],17:39,18:[2,48]},{20:41,56:40,64:42,65:[1,43],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:44,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{5:[2,10],14:[2,10],15:[2,10],18:[2,10],19:[2,10],29:[2,10],34:[2,10],39:[2,10],44:[2,10],47:[2,10],48:[2,10],51:[2,10],55:[2,10],60:[2,10]},{20:45,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:46,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:47,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:41,56:48,64:42,65:[1,43],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[2,78],49:49,65:[2,78],72:[2,78],80:[2,78],81:[2,78],82:[2,78],83:[2,78],84:[2,78],85:[2,78]},{23:[2,33],33:[2,33],54:[2,33],65:[2,33],68:[2,33],72:[2,33],75:[2,33],80:[2,33],81:[2,33],82:[2,33],83:[2,33],84:[2,33],85:[2,33]},{23:[2,34],33:[2,34],54:[2,34],65:[2,34],68:[2,34],72:[2,34],75:[2,34],80:[2,34],81:[2,34],82:[2,34],83:[2,34],84:[2,34],85:[2,34]},{23:[2,35],33:[2,35],54:[2,35],65:[2,35],68:[2,35],72:[2,35],75:[2,35],80:[2,35],81:[2,35],82:[2,35],83:[2,35],84:[2,35],85:[2,35]},{23:[2,36],33:[2,36],54:[2,36],65:[2,36],68:[2,36],72:[2,36],75:[2,36],80:[2,36],81:[2,36],82:[2,36],83:[2,36],84:[2,36],85:[2,36]},{23:[2,37],33:[2,37],54:[2,37],65:[2,37],68:[2,37],72:[2,37],75:[2,37],80:[2,37],81:[2,37],82:[2,37],83:[2,37],84:[2,37],85:[2,37]},{23:[2,38],33:[2,38],54:[2,38],65:[2,38],68:[2,38],72:[2,38],75:[2,38],80:[2,38],81:[2,38],82:[2,38],83:[2,38],84:[2,38],85:[2,38]},{23:[2,39],33:[2,39],54:[2,39],65:[2,39],68:[2,39],72:[2,39],75:[2,39],80:[2,39],81:[2,39],82:[2,39],83:[2,39],84:[2,39],85:[2,39]},{23:[2,43],33:[2,43],54:[2,43],65:[2,43],68:[2,43],72:[2,43],75:[2,43],80:[2,43],81:[2,43],82:[2,43],83:[2,43],84:[2,43],85:[2,43],87:[1,50]},{72:[1,35],86:51},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{52:52,54:[2,82],65:[2,82],72:[2,82],80:[2,82],81:[2,82],82:[2,82],83:[2,82],84:[2,82],85:[2,82]},{25:53,38:55,39:[1,57],43:56,44:[1,58],45:54,47:[2,54]},{28:59,43:60,44:[1,58],47:[2,56]},{13:62,15:[1,20],18:[1,61]},{33:[2,86],57:63,65:[2,86],72:[2,86],80:[2,86],81:[2,86],82:[2,86],83:[2,86],84:[2,86],85:[2,86]},{33:[2,40],65:[2,40],72:[2,40],80:[2,40],81:[2,40],82:[2,40],83:[2,40],84:[2,40],85:[2,40]},{33:[2,41],65:[2,41],72:[2,41],80:[2,41],81:[2,41],82:[2,41],83:[2,41],84:[2,41],85:[2,41]},{20:64,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:65,47:[1,66]},{30:67,33:[2,58],65:[2,58],72:[2,58],75:[2,58],80:[2,58],81:[2,58],82:[2,58],83:[2,58],84:[2,58],85:[2,58]},{33:[2,64],35:68,65:[2,64],72:[2,64],75:[2,64],80:[2,64],81:[2,64],82:[2,64],83:[2,64],84:[2,64],85:[2,64]},{21:69,23:[2,50],65:[2,50],72:[2,50],80:[2,50],81:[2,50],82:[2,50],83:[2,50],84:[2,50],85:[2,50]},{33:[2,90],61:70,65:[2,90],72:[2,90],80:[2,90],81:[2,90],82:[2,90],83:[2,90],84:[2,90],85:[2,90]},{20:74,33:[2,80],50:71,63:72,64:75,65:[1,43],69:73,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{72:[1,79]},{23:[2,42],33:[2,42],54:[2,42],65:[2,42],68:[2,42],72:[2,42],75:[2,42],80:[2,42],81:[2,42],82:[2,42],83:[2,42],84:[2,42],85:[2,42],87:[1,50]},{20:74,53:80,54:[2,84],63:81,64:75,65:[1,43],69:82,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:83,47:[1,66]},{47:[2,55]},{4:84,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{47:[2,20]},{20:85,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:86,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{26:87,47:[1,66]},{47:[2,57]},{5:[2,11],14:[2,11],15:[2,11],19:[2,11],29:[2,11],34:[2,11],39:[2,11],44:[2,11],47:[2,11],48:[2,11],51:[2,11],55:[2,11],60:[2,11]},{15:[2,49],18:[2,49]},{20:74,33:[2,88],58:88,63:89,64:75,65:[1,43],69:90,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{65:[2,94],66:91,68:[2,94],72:[2,94],80:[2,94],81:[2,94],82:[2,94],83:[2,94],84:[2,94],85:[2,94]},{5:[2,25],14:[2,25],15:[2,25],19:[2,25],29:[2,25],34:[2,25],39:[2,25],44:[2,25],47:[2,25],48:[2,25],51:[2,25],55:[2,25],60:[2,25]},{20:92,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:74,31:93,33:[2,60],63:94,64:75,65:[1,43],69:95,70:76,71:77,72:[1,78],75:[2,60],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:74,33:[2,66],36:96,63:97,64:75,65:[1,43],69:98,70:76,71:77,72:[1,78],75:[2,66],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:74,22:99,23:[2,52],63:100,64:75,65:[1,43],69:101,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:74,33:[2,92],62:102,63:103,64:75,65:[1,43],69:104,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,105]},{33:[2,79],65:[2,79],72:[2,79],80:[2,79],81:[2,79],82:[2,79],83:[2,79],84:[2,79],85:[2,79]},{33:[2,81]},{23:[2,27],33:[2,27],54:[2,27],65:[2,27],68:[2,27],72:[2,27],75:[2,27],80:[2,27],81:[2,27],82:[2,27],83:[2,27],84:[2,27],85:[2,27]},{23:[2,28],33:[2,28],54:[2,28],65:[2,28],68:[2,28],72:[2,28],75:[2,28],80:[2,28],81:[2,28],82:[2,28],83:[2,28],84:[2,28],85:[2,28]},{23:[2,30],33:[2,30],54:[2,30],68:[2,30],71:106,72:[1,107],75:[2,30]},{23:[2,98],33:[2,98],54:[2,98],68:[2,98],72:[2,98],75:[2,98]},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],73:[1,108],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{23:[2,44],33:[2,44],54:[2,44],65:[2,44],68:[2,44],72:[2,44],75:[2,44],80:[2,44],81:[2,44],82:[2,44],83:[2,44],84:[2,44],85:[2,44],87:[2,44]},{54:[1,109]},{54:[2,83],65:[2,83],72:[2,83],80:[2,83],81:[2,83],82:[2,83],83:[2,83],84:[2,83],85:[2,83]},{54:[2,85]},{5:[2,13],14:[2,13],15:[2,13],19:[2,13],29:[2,13],34:[2,13],39:[2,13],44:[2,13],47:[2,13],48:[2,13],51:[2,13],55:[2,13],60:[2,13]},{38:55,39:[1,57],43:56,44:[1,58],45:111,46:110,47:[2,76]},{33:[2,70],40:112,65:[2,70],72:[2,70],75:[2,70],80:[2,70],81:[2,70],82:[2,70],83:[2,70],84:[2,70],85:[2,70]},{47:[2,18]},{5:[2,14],14:[2,14],15:[2,14],19:[2,14],29:[2,14],34:[2,14],39:[2,14],44:[2,14],47:[2,14],48:[2,14],51:[2,14],55:[2,14],60:[2,14]},{33:[1,113]},{33:[2,87],65:[2,87],72:[2,87],80:[2,87],81:[2,87],82:[2,87],83:[2,87],84:[2,87],85:[2,87]},{33:[2,89]},{20:74,63:115,64:75,65:[1,43],67:114,68:[2,96],69:116,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,117]},{32:118,33:[2,62],74:119,75:[1,120]},{33:[2,59],65:[2,59],72:[2,59],75:[2,59],80:[2,59],81:[2,59],82:[2,59],83:[2,59],84:[2,59],85:[2,59]},{33:[2,61],75:[2,61]},{33:[2,68],37:121,74:122,75:[1,120]},{33:[2,65],65:[2,65],72:[2,65],75:[2,65],80:[2,65],81:[2,65],82:[2,65],83:[2,65],84:[2,65],85:[2,65]},{33:[2,67],75:[2,67]},{23:[1,123]},{23:[2,51],65:[2,51],72:[2,51],80:[2,51],81:[2,51],82:[2,51],83:[2,51],84:[2,51],85:[2,51]},{23:[2,53]},{33:[1,124]},{33:[2,91],65:[2,91],72:[2,91],80:[2,91],81:[2,91],82:[2,91],83:[2,91],84:[2,91],85:[2,91]},{33:[2,93]},{5:[2,22],14:[2,22],15:[2,22],19:[2,22],29:[2,22],34:[2,22],39:[2,22],44:[2,22],47:[2,22],48:[2,22],51:[2,22],55:[2,22],60:[2,22]},{23:[2,99],33:[2,99],54:[2,99],68:[2,99],72:[2,99],75:[2,99]},{73:[1,108]},{20:74,63:125,64:75,65:[1,43],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,23],14:[2,23],15:[2,23],19:[2,23],29:[2,23],34:[2,23],39:[2,23],44:[2,23],47:[2,23],48:[2,23],51:[2,23],55:[2,23],60:[2,23]},{47:[2,19]},{47:[2,77]},{20:74,33:[2,72],41:126,63:127,64:75,65:[1,43],69:128,70:76,71:77,72:[1,78],75:[2,72],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,24],14:[2,24],15:[2,24],19:[2,24],29:[2,24],34:[2,24],39:[2,24],44:[2,24],47:[2,24],48:[2,24],51:[2,24],55:[2,24],60:[2,24]},{68:[1,129]},{65:[2,95],68:[2,95],72:[2,95],80:[2,95],81:[2,95],82:[2,95],83:[2,95],84:[2,95],85:[2,95]},{68:[2,97]},{5:[2,21],14:[2,21],15:[2,21],19:[2,21],29:[2,21],34:[2,21],39:[2,21],44:[2,21],47:[2,21],48:[2,21],51:[2,21],55:[2,21],60:[2,21]},{33:[1,130]},{33:[2,63]},{72:[1,132],76:131},{33:[1,133]},{33:[2,69]},{15:[2,12],18:[2,12]},{14:[2,26],15:[2,26],19:[2,26],29:[2,26],34:[2,26],47:[2,26],48:[2,26],51:[2,26],55:[2,26],60:[2,26]},{23:[2,31],33:[2,31],54:[2,31],68:[2,31],72:[2,31],75:[2,31]},{33:[2,74],42:134,74:135,75:[1,120]},{33:[2,71],65:[2,71],72:[2,71],75:[2,71],80:[2,71],81:[2,71],82:[2,71],83:[2,71],84:[2,71],85:[2,71]},{33:[2,73],75:[2,73]},{23:[2,29],33:[2,29],54:[2,29],65:[2,29],68:[2,29],72:[2,29],75:[2,29],80:[2,29],81:[2,29],82:[2,29],83:[2,29],84:[2,29],85:[2,29]},{14:[2,15],15:[2,15],19:[2,15],29:[2,15],34:[2,15],39:[2,15],44:[2,15],47:[2,15],48:[2,15],51:[2,15],55:[2,15],60:[2,15]},{72:[1,137],77:[1,136]},{72:[2,100],77:[2,100]},{14:[2,16],15:[2,16],19:[2,16],29:[2,16],34:[2,16],44:[2,16],47:[2,16],48:[2,16],51:[2,16],55:[2,16],60:[2,16]},{33:[1,138]},{33:[2,75]},{33:[2,32]},{72:[2,101],77:[2,101]},{14:[2,17],15:[2,17],19:[2,17],29:[2,17],34:[2,17],39:[2,17],44:[2,17],47:[2,17],48:[2,17],51:[2,17],55:[2,17],60:[2,17]}],defaultActions:{4:[2,1],54:[2,55],56:[2,20],60:[2,57],73:[2,81],82:[2,85],86:[2,18],90:[2,89],101:[2,53],104:[2,93],110:[2,19],111:[2,77],116:[2,97],119:[2,63],122:[2,69],135:[2,75],136:[2,32]},parseError:function(i,s){throw new Error(i)},parse:function(i){var s=this,o=[0],u=[null],l=[],a=this.table,h="",c=0,p=0,d=0,g=2,_=1;this.lexer.setInput(i),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,this.yy.parser=this,typeof this.lexer.yylloc=="undefined"&&(this.lexer.yylloc={});var O=this.lexer.yylloc;l.push(O);var k=this.lexer.options&&this.lexer.options.ranges;typeof this.yy.parseError=="function"&&(this.parseError=this.yy.parseError);function T(R){o.length=o.length-2*R,u.length=u.length-R,l.length=l.length-R}function q(){var R;return R=s.lexer.lex()||1,typeof R!="number"&&(R=s.symbols_[R]||R),R}for(var L,yt,Y,A,va,kt,re={},Ae,F,vr,Me;;){if(Y=o[o.length-1],this.defaultActions[Y]?A=this.defaultActions[Y]:((L===null||typeof L=="undefined")&&(L=q()),A=a[Y]&&a[Y][L]),typeof A=="undefined"||!A.length||!A[0]){var Pt="";if(!d){Me=[];for(Ae in a[Y])this.terminals_[Ae]&&Ae>2&&Me.push("'"+this.terminals_[Ae]+"'");this.lexer.showPosition?Pt="Parse error on line "+(c+1)+`: -`+this.lexer.showPosition()+` -Expecting `+Me.join(", ")+", got '"+(this.terminals_[L]||L)+"'":Pt="Parse error on line "+(c+1)+": Unexpected "+(L==1?"end of input":"'"+(this.terminals_[L]||L)+"'"),this.parseError(Pt,{text:this.lexer.match,token:this.terminals_[L]||L,line:this.lexer.yylineno,loc:O,expected:Me})}}if(A[0]instanceof Array&&A.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Y+", token: "+L);switch(A[0]){case 1:o.push(L),u.push(this.lexer.yytext),l.push(this.lexer.yylloc),o.push(A[1]),L=null,yt?(L=yt,yt=null):(p=this.lexer.yyleng,h=this.lexer.yytext,c=this.lexer.yylineno,O=this.lexer.yylloc,d>0&&d--);break;case 2:if(F=this.productions_[A[1]][1],re.$=u[u.length-F],re._$={first_line:l[l.length-(F||1)].first_line,last_line:l[l.length-1].last_line,first_column:l[l.length-(F||1)].first_column,last_column:l[l.length-1].last_column},k&&(re._$.range=[l[l.length-(F||1)].range[0],l[l.length-1].range[1]]),kt=this.performAction.call(re,h,p,c,this.yy,A[1],u,l),typeof kt!="undefined")return kt;F&&(o=o.slice(0,-1*F*2),u=u.slice(0,-1*F),l=l.slice(0,-1*F)),o.push(this.productions_[A[1]][0]),u.push(re.$),l.push(re._$),vr=a[o[o.length-2]][o[o.length-1]],o.push(vr);break;case 3:return!0}}return!0}},e=function(){var n={EOF:1,parseError:function(s,o){if(this.yy.parser)this.yy.parser.parseError(s,o);else throw new Error(s)},setInput:function(s){return this._input=s,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var s=this._input[0];this.yytext+=s,this.yyleng++,this.offset++,this.match+=s,this.matched+=s;var o=s.match(/(?:\r\n?|\n).*/g);return o?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),s},unput:function(s){var o=s.length,u=s.split(/(?:\r\n?|\n)/g);this._input=s+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-o-1),this.offset-=o;var l=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),u.length-1&&(this.yylineno-=u.length-1);var a=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:u?(u.length===l.length?this.yylloc.first_column:0)+l[l.length-u.length].length-u[0].length:this.yylloc.first_column-o},this.options.ranges&&(this.yylloc.range=[a[0],a[0]+this.yyleng-o]),this},more:function(){return this._more=!0,this},less:function(s){this.unput(this.match.slice(s))},pastInput:function(){var s=this.matched.substr(0,this.matched.length-this.match.length);return(s.length>20?"...":"")+s.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var s=this.match;return s.length<20&&(s+=this._input.substr(0,20-s.length)),(s.substr(0,20)+(s.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var s=this.pastInput(),o=new Array(s.length+1).join("-");return s+this.upcomingInput()+` -`+o+"^"},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var s,o,u,l,a,h;this._more||(this.yytext="",this.match="");for(var c=this._currentRules(),p=0;p<c.length&&(u=this._input.match(this.rules[c[p]]),!(u&&(!o||u[0].length>o[0].length)&&(o=u,l=p,!this.options.flex)));p++);return o?(h=o[0].match(/(?:\r\n?|\n).*/g),h&&(this.yylineno+=h.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:h?h[h.length-1].length-h[h.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+o[0].length},this.yytext+=o[0],this.match+=o[0],this.matches=o,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._input=this._input.slice(o[0].length),this.matched+=o[0],s=this.performAction.call(this,this.yy,this,c[l],this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),s||void 0):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var s=this.next();return typeof s!="undefined"?s:this.lex()},begin:function(s){this.conditionStack.push(s)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(s){this.begin(s)}};return n.options={},n.performAction=function(s,o,u,l){function a(c,p){return o.yytext=o.yytext.substring(c,o.yyleng-p+c)}var h=l;switch(u){case 0:if(o.yytext.slice(-2)==="\\\\"?(a(0,1),this.begin("mu")):o.yytext.slice(-1)==="\\"?(a(0,1),this.begin("emu")):this.begin("mu"),o.yytext)return 15;break;case 1:return 15;case 2:return this.popState(),15;break;case 3:return this.begin("raw"),15;break;case 4:return this.popState(),this.conditionStack[this.conditionStack.length-1]==="raw"?15:(a(5,9),"END_RAW_BLOCK");case 5:return 15;case 6:return this.popState(),14;break;case 7:return 65;case 8:return 68;case 9:return 19;case 10:return this.popState(),this.begin("raw"),23;break;case 11:return 55;case 12:return 60;case 13:return 29;case 14:return 47;case 15:return this.popState(),44;break;case 16:return this.popState(),44;break;case 17:return 34;case 18:return 39;case 19:return 51;case 20:return 48;case 21:this.unput(o.yytext),this.popState(),this.begin("com");break;case 22:return this.popState(),14;break;case 23:return 48;case 24:return 73;case 25:return 72;case 26:return 72;case 27:return 87;case 28:break;case 29:return this.popState(),54;break;case 30:return this.popState(),33;break;case 31:return o.yytext=a(1,2).replace(/\\"/g,'"'),80;break;case 32:return o.yytext=a(1,2).replace(/\\'/g,"'"),80;break;case 33:return 85;case 34:return 82;case 35:return 82;case 36:return 83;case 37:return 84;case 38:return 81;case 39:return 75;case 40:return 77;case 41:return 72;case 42:return o.yytext=o.yytext.replace(/\\([\\\]])/g,"$1"),72;break;case 43:return"INVALID";case 44:return 5}},n.rules=[/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:\{\{\{\{(?=[^\/]))/,/^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/,/^(?:[^\x00]+?(?=(\{\{\{\{)))/,/^(?:[\s\S]*?--(~)?\}\})/,/^(?:\()/,/^(?:\))/,/^(?:\{\{\{\{)/,/^(?:\}\}\}\})/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#>)/,/^(?:\{\{(~)?#\*?)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^\s*(~)?\}\})/,/^(?:\{\{(~)?\s*else\s*(~)?\}\})/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{(~)?!--)/,/^(?:\{\{(~)?![\s\S]*?\}\})/,/^(?:\{\{(~)?\*?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.)|])))/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s)])))/,/^(?:false(?=([~}\s)])))/,/^(?:undefined(?=([~}\s)])))/,/^(?:null(?=([~}\s)])))/,/^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/,/^(?:as\s+\|)/,/^(?:\|)/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/,/^(?:\[(\\\]|[^\]])*\])/,/^(?:.)/,/^(?:$)/],n.conditions={mu:{rules:[7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],inclusive:!1},emu:{rules:[2],inclusive:!1},com:{rules:[6],inclusive:!1},raw:{rules:[3,4,5],inclusive:!1},INITIAL:{rules:[0,1,44],inclusive:!0}},n}();t.lexer=e;function r(){this.yy={}}return r.prototype=t,t.Parser=r,new r}();et.default=eo;hn.exports=et.default});var it=m((nt,mn)=>{"use strict";nt.__esModule=!0;function to(t){return t&&t.__esModule?t:{default:t}}var ro=M(),Vt=to(ro);function tt(){this.parents=[]}tt.prototype={constructor:tt,mutating:!1,acceptKey:function(e,r){var n=this.accept(e[r]);if(this.mutating){if(n&&!tt.prototype[n.type])throw new Vt.default('Unexpected node type "'+n.type+'" found when accepting '+r+" on "+e.type);e[r]=n}},acceptRequired:function(e,r){if(this.acceptKey(e,r),!e[r])throw new Vt.default(e.type+" requires "+r)},acceptArray:function(e){for(var r=0,n=e.length;r<n;r++)this.acceptKey(e,r),e[r]||(e.splice(r,1),r--,n--)},accept:function(e){if(e){if(!this[e.type])throw new Vt.default("Unknown type: "+e.type,e);this.current&&this.parents.unshift(this.current),this.current=e;var r=this[e.type](e);if(this.current=this.parents.shift(),!this.mutating||r)return r;if(r!==!1)return e}},Program:function(e){this.acceptArray(e.body)},MustacheStatement:rt,Decorator:rt,BlockStatement:fn,DecoratorBlock:fn,PartialStatement:dn,PartialBlockStatement:function(e){dn.call(this,e),this.acceptKey(e,"program")},ContentStatement:function(){},CommentStatement:function(){},SubExpression:rt,PathExpression:function(){},StringLiteral:function(){},NumberLiteral:function(){},BooleanLiteral:function(){},UndefinedLiteral:function(){},NullLiteral:function(){},Hash:function(e){this.acceptArray(e.pairs)},HashPair:function(e){this.acceptRequired(e,"value")}};function rt(t){this.acceptRequired(t,"path"),this.acceptArray(t.params),this.acceptKey(t,"hash")}function fn(t){rt.call(this,t),this.acceptKey(t,"program"),this.acceptKey(t,"inverse")}function dn(t){this.acceptRequired(t,"name"),this.acceptArray(t.params),this.acceptKey(t,"hash")}nt.default=tt;mn.exports=nt.default});var vn=m((st,gn)=>{"use strict";st.__esModule=!0;function no(t){return t&&t.__esModule?t:{default:t}}var io=it(),so=no(io);function H(){var t=arguments.length<=0||arguments[0]===void 0?{}:arguments[0];this.options=t}H.prototype=new so.default;H.prototype.Program=function(t){var e=!this.options.ignoreStandalone,r=!this.isRootSeen;this.isRootSeen=!0;for(var n=t.body,i=0,s=n.length;i<s;i++){var o=n[i],u=this.accept(o);if(u){var l=Wt(n,i,r),a=Gt(n,i,r),h=u.openStandalone&&l,c=u.closeStandalone&&a,p=u.inlineStandalone&&l&&a;u.close&&j(n,i,!0),u.open&&Q(n,i,!0),e&&p&&(j(n,i),Q(n,i)&&o.type==="PartialStatement"&&(o.indent=/([ \t]+$)/.exec(n[i-1].original)[1])),e&&h&&(j((o.program||o.inverse).body),Q(n,i)),e&&c&&(j(n,i),Q((o.inverse||o.program).body))}}return t};H.prototype.BlockStatement=H.prototype.DecoratorBlock=H.prototype.PartialBlockStatement=function(t){this.accept(t.program),this.accept(t.inverse);var e=t.program||t.inverse,r=t.program&&t.inverse,n=r,i=r;if(r&&r.chained)for(n=r.body[0].program;i.chained;)i=i.body[i.body.length-1].program;var s={open:t.openStrip.open,close:t.closeStrip.close,openStandalone:Gt(e.body),closeStandalone:Wt((n||e).body)};if(t.openStrip.close&&j(e.body,null,!0),r){var o=t.inverseStrip;o.open&&Q(e.body,null,!0),o.close&&j(n.body,null,!0),t.closeStrip.open&&Q(i.body,null,!0),!this.options.ignoreStandalone&&Wt(e.body)&&Gt(n.body)&&(Q(e.body),j(n.body))}else t.closeStrip.open&&Q(e.body,null,!0);return s};H.prototype.Decorator=H.prototype.MustacheStatement=function(t){return t.strip};H.prototype.PartialStatement=H.prototype.CommentStatement=function(t){var e=t.strip||{};return{inlineStandalone:!0,open:e.open,close:e.close}};function Wt(t,e,r){e===void 0&&(e=t.length);var n=t[e-1],i=t[e-2];if(!n)return r;if(n.type==="ContentStatement")return(i||!r?/\r?\n\s*?$/:/(^|\r?\n)\s*?$/).test(n.original)}function Gt(t,e,r){e===void 0&&(e=-1);var n=t[e+1],i=t[e+2];if(!n)return r;if(n.type==="ContentStatement")return(i||!r?/^\s*?\r?\n/:/^\s*?(\r?\n|$)/).test(n.original)}function j(t,e,r){var n=t[e==null?0:e+1];if(!(!n||n.type!=="ContentStatement"||!r&&n.rightStripped)){var i=n.value;n.value=n.value.replace(r?/^\s+/:/^[ \t]*\r?\n?/,""),n.rightStripped=n.value!==i}}function Q(t,e,r){var n=t[e==null?t.length-1:e-1];if(!(!n||n.type!=="ContentStatement"||!r&&n.leftStripped)){var i=n.value;return n.value=n.value.replace(r?/\s+$/:/[ \t]+$/,""),n.leftStripped=n.value!==i,n.leftStripped}}st.default=H;gn.exports=st.default});var _n=m(N=>{"use strict";N.__esModule=!0;N.SourceLocation=uo;N.id=lo;N.stripFlags=co;N.stripComment=ho;N.preparePath=po;N.prepareMustache=fo;N.prepareRawBlock=mo;N.prepareBlock=go;N.prepareProgram=vo;N.preparePartialBlock=_o;function oo(t){return t&&t.__esModule?t:{default:t}}var ao=M(),Ut=oo(ao);function Kt(t,e){if(e=e.path?e.path.original:e,t.path.original!==e){var r={loc:t.path.loc};throw new Ut.default(t.path.original+" doesn't match "+e,r)}}function uo(t,e){this.source=t,this.start={line:e.first_line,column:e.first_column},this.end={line:e.last_line,column:e.last_column}}function lo(t){return/^\[.*\]$/.test(t)?t.substring(1,t.length-1):t}function co(t,e){return{open:t.charAt(2)==="~",close:e.charAt(e.length-3)==="~"}}function ho(t){return t.replace(/^\{\{~?!-?-?/,"").replace(/-?-?~?\}\}$/,"")}function po(t,e,r){r=this.locInfo(r);for(var n=t?"@":"",i=[],s=0,o=0,u=e.length;o<u;o++){var l=e[o].part,a=e[o].original!==l;if(n+=(e[o].separator||"")+l,!a&&(l===".."||l==="."||l==="this")){if(i.length>0)throw new Ut.default("Invalid path: "+n,{loc:r});l===".."&&s++}else i.push(l)}return{type:"PathExpression",data:t,depth:s,parts:i,original:n,loc:r}}function fo(t,e,r,n,i,s){var o=n.charAt(3)||n.charAt(2),u=o!=="{"&&o!=="&",l=/\*/.test(n);return{type:l?"Decorator":"MustacheStatement",path:t,params:e,hash:r,escaped:u,strip:i,loc:this.locInfo(s)}}function mo(t,e,r,n){Kt(t,r),n=this.locInfo(n);var i={type:"Program",body:e,strip:{},loc:n};return{type:"BlockStatement",path:t.path,params:t.params,hash:t.hash,program:i,openStrip:{},inverseStrip:{},closeStrip:{},loc:n}}function go(t,e,r,n,i,s){n&&n.path&&Kt(t,n);var o=/\*/.test(t.open);e.blockParams=t.blockParams;var u=void 0,l=void 0;if(r){if(o)throw new Ut.default("Unexpected inverse block on decorator",r);r.chain&&(r.program.body[0].closeStrip=n.strip),l=r.strip,u=r.program}return i&&(i=u,u=e,e=i),{type:o?"DecoratorBlock":"BlockStatement",path:t.path,params:t.params,hash:t.hash,program:e,inverse:u,openStrip:t.strip,inverseStrip:l,closeStrip:n&&n.strip,loc:this.locInfo(s)}}function vo(t,e){if(!e&&t.length){var r=t[0].loc,n=t[t.length-1].loc;r&&n&&(e={source:r.source,start:{line:r.start.line,column:r.start.column},end:{line:n.end.line,column:n.end.column}})}return{type:"Program",body:t,strip:{},loc:e}}function _o(t,e,r,n){return Kt(t,r),{type:"PartialBlockStatement",name:t.path,params:t.params,hash:t.hash,program:e,openStrip:t.strip,closeStrip:r&&r.strip,loc:this.locInfo(n)}}});var kn=m(_e=>{"use strict";_e.__esModule=!0;_e.parseWithoutProcessing=yn;_e.parse=Eo;function So(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e.default=t,e}function Sn(t){return t&&t.__esModule?t:{default:t}}var yo=pn(),Jt=Sn(yo),ko=vn(),Po=Sn(ko),bo=_n(),Co=So(bo),Lo=P();_e.parser=Jt.default;var ot={};Lo.extend(ot,Co);function yn(t,e){if(t.type==="Program")return t;Jt.default.yy=ot,ot.locInfo=function(n){return new ot.SourceLocation(e&&e.srcName,n)};var r=Jt.default.parse(t);return r}function Eo(t,e){var r=yn(t,e),n=new Po.default(e);return n.accept(r)}});var Ln=m(Pe=>{"use strict";Pe.__esModule=!0;Pe.Compiler=zt;Pe.precompile=Ao;Pe.compile=Mo;function bn(t){return t&&t.__esModule?t:{default:t}}var xo=M(),ye=bn(xo),ke=P(),wo=$e(),Se=bn(wo),Oo=[].slice;function zt(){}zt.prototype={compiler:zt,equals:function(e){var r=this.opcodes.length;if(e.opcodes.length!==r)return!1;for(var n=0;n<r;n++){var i=this.opcodes[n],s=e.opcodes[n];if(i.opcode!==s.opcode||!Cn(i.args,s.args))return!1}r=this.children.length;for(var n=0;n<r;n++)if(!this.children[n].equals(e.children[n]))return!1;return!0},guid:0,compile:function(e,r){return this.sourceNode=[],this.opcodes=[],this.children=[],this.options=r,this.stringParams=r.stringParams,this.trackIds=r.trackIds,r.blockParams=r.blockParams||[],r.knownHelpers=ke.extend(Object.create(null),{helperMissing:!0,blockHelperMissing:!0,each:!0,if:!0,unless:!0,with:!0,log:!0,lookup:!0},r.knownHelpers),this.accept(e)},compileProgram:function(e){var r=new this.compiler,n=r.compile(e,this.options),i=this.guid++;return this.usePartial=this.usePartial||n.usePartial,this.children[i]=n,this.useDepths=this.useDepths||n.useDepths,i},accept:function(e){if(!this[e.type])throw new ye.default("Unknown type: "+e.type,e);this.sourceNode.unshift(e);var r=this[e.type](e);return this.sourceNode.shift(),r},Program:function(e){this.options.blockParams.unshift(e.blockParams);for(var r=e.body,n=r.length,i=0;i<n;i++)this.accept(r[i]);return this.options.blockParams.shift(),this.isSimple=n===1,this.blockParams=e.blockParams?e.blockParams.length:0,this},BlockStatement:function(e){Pn(e);var r=e.program,n=e.inverse;r=r&&this.compileProgram(r),n=n&&this.compileProgram(n);var i=this.classifySexpr(e);i==="helper"?this.helperSexpr(e,r,n):i==="simple"?(this.simpleSexpr(e),this.opcode("pushProgram",r),this.opcode("pushProgram",n),this.opcode("emptyHash"),this.opcode("blockValue",e.path.original)):(this.ambiguousSexpr(e,r,n),this.opcode("pushProgram",r),this.opcode("pushProgram",n),this.opcode("emptyHash"),this.opcode("ambiguousBlockValue")),this.opcode("append")},DecoratorBlock:function(e){var r=e.program&&this.compileProgram(e.program),n=this.setupFullMustacheParams(e,r,void 0),i=e.path;this.useDecorators=!0,this.opcode("registerDecorator",n.length,i.original)},PartialStatement:function(e){this.usePartial=!0;var r=e.program;r&&(r=this.compileProgram(e.program));var n=e.params;if(n.length>1)throw new ye.default("Unsupported number of partial arguments: "+n.length,e);n.length||(this.options.explicitPartialContext?this.opcode("pushLiteral","undefined"):n.push({type:"PathExpression",parts:[],depth:0}));var i=e.name.original,s=e.name.type==="SubExpression";s&&this.accept(e.name),this.setupFullMustacheParams(e,r,void 0,!0);var o=e.indent||"";this.options.preventIndent&&o&&(this.opcode("appendContent",o),o=""),this.opcode("invokePartial",s,i,o),this.opcode("append")},PartialBlockStatement:function(e){this.PartialStatement(e)},MustacheStatement:function(e){this.SubExpression(e),e.escaped&&!this.options.noEscape?this.opcode("appendEscaped"):this.opcode("append")},Decorator:function(e){this.DecoratorBlock(e)},ContentStatement:function(e){e.value&&this.opcode("appendContent",e.value)},CommentStatement:function(){},SubExpression:function(e){Pn(e);var r=this.classifySexpr(e);r==="simple"?this.simpleSexpr(e):r==="helper"?this.helperSexpr(e):this.ambiguousSexpr(e)},ambiguousSexpr:function(e,r,n){var i=e.path,s=i.parts[0],o=r!=null||n!=null;this.opcode("getContext",i.depth),this.opcode("pushProgram",r),this.opcode("pushProgram",n),i.strict=!0,this.accept(i),this.opcode("invokeAmbiguous",s,o)},simpleSexpr:function(e){var r=e.path;r.strict=!0,this.accept(r),this.opcode("resolvePossibleLambda")},helperSexpr:function(e,r,n){var i=this.setupFullMustacheParams(e,r,n),s=e.path,o=s.parts[0];if(this.options.knownHelpers[o])this.opcode("invokeKnownHelper",i.length,o);else{if(this.options.knownHelpersOnly)throw new ye.default("You specified knownHelpersOnly, but used the unknown helper "+o,e);s.strict=!0,s.falsy=!0,this.accept(s),this.opcode("invokeHelper",i.length,s.original,Se.default.helpers.simpleId(s))}},PathExpression:function(e){this.addDepth(e.depth),this.opcode("getContext",e.depth);var r=e.parts[0],n=Se.default.helpers.scopedId(e),i=!e.depth&&!n&&this.blockParamIndex(r);i?this.opcode("lookupBlockParam",i,e.parts):r?e.data?(this.options.data=!0,this.opcode("lookupData",e.depth,e.parts,e.strict)):this.opcode("lookupOnContext",e.parts,e.falsy,e.strict,n):this.opcode("pushContext")},StringLiteral:function(e){this.opcode("pushString",e.value)},NumberLiteral:function(e){this.opcode("pushLiteral",e.value)},BooleanLiteral:function(e){this.opcode("pushLiteral",e.value)},UndefinedLiteral:function(){this.opcode("pushLiteral","undefined")},NullLiteral:function(){this.opcode("pushLiteral","null")},Hash:function(e){var r=e.pairs,n=0,i=r.length;for(this.opcode("pushHash");n<i;n++)this.pushParam(r[n].value);for(;n--;)this.opcode("assignToHash",r[n].key);this.opcode("popHash")},opcode:function(e){this.opcodes.push({opcode:e,args:Oo.call(arguments,1),loc:this.sourceNode[0].loc})},addDepth:function(e){e&&(this.useDepths=!0)},classifySexpr:function(e){var r=Se.default.helpers.simpleId(e.path),n=r&&!!this.blockParamIndex(e.path.parts[0]),i=!n&&Se.default.helpers.helperExpression(e),s=!n&&(i||r);if(s&&!i){var o=e.path.parts[0],u=this.options;u.knownHelpers[o]?i=!0:u.knownHelpersOnly&&(s=!1)}return i?"helper":s?"ambiguous":"simple"},pushParams:function(e){for(var r=0,n=e.length;r<n;r++)this.pushParam(e[r])},pushParam:function(e){var r=e.value!=null?e.value:e.original||"";if(this.stringParams)r.replace&&(r=r.replace(/^(\.?\.\/)*/g,"").replace(/\//g,".")),e.depth&&this.addDepth(e.depth),this.opcode("getContext",e.depth||0),this.opcode("pushStringParam",r,e.type),e.type==="SubExpression"&&this.accept(e);else{if(this.trackIds){var n=void 0;if(e.parts&&!Se.default.helpers.scopedId(e)&&!e.depth&&(n=this.blockParamIndex(e.parts[0])),n){var i=e.parts.slice(1).join(".");this.opcode("pushId","BlockParam",n,i)}else r=e.original||r,r.replace&&(r=r.replace(/^this(?:\.|$)/,"").replace(/^\.\//,"").replace(/^\.$/,"")),this.opcode("pushId",e.type,r)}this.accept(e)}},setupFullMustacheParams:function(e,r,n,i){var s=e.params;return this.pushParams(s),this.opcode("pushProgram",r),this.opcode("pushProgram",n),e.hash?this.accept(e.hash):this.opcode("emptyHash",i),s},blockParamIndex:function(e){for(var r=0,n=this.options.blockParams.length;r<n;r++){var i=this.options.blockParams[r],s=i&&ke.indexOf(i,e);if(i&&s>=0)return[r,s]}}};function Ao(t,e,r){if(t==null||typeof t!="string"&&t.type!=="Program")throw new ye.default("You must pass a string or Handlebars AST to Handlebars.precompile. You passed "+t);e=e||{},"data"in e||(e.data=!0),e.compat&&(e.useDepths=!0);var n=r.parse(t,e),i=new r.Compiler().compile(n,e);return new r.JavaScriptCompiler().compile(i,e)}function Mo(t,e,r){if(e===void 0&&(e={}),t==null||typeof t!="string"&&t.type!=="Program")throw new ye.default("You must pass a string or Handlebars AST to Handlebars.compile. You passed "+t);e=ke.extend({},e),"data"in e||(e.data=!0),e.compat&&(e.useDepths=!0);var n=void 0;function i(){var o=r.parse(t,e),u=new r.Compiler().compile(o,e),l=new r.JavaScriptCompiler().compile(u,e,void 0,!0);return r.template(l)}function s(o,u){return n||(n=i()),n.call(this,o,u)}return s._setup=function(o){return n||(n=i()),n._setup(o)},s._child=function(o,u,l,a){return n||(n=i()),n._child(o,u,l,a)},s}function Cn(t,e){if(t===e)return!0;if(ke.isArray(t)&&ke.isArray(e)&&t.length===e.length){for(var r=0;r<t.length;r++)if(!Cn(t[r],e[r]))return!1;return!0}}function Pn(t){if(!t.path.parts){var e=t.path;t.path={type:"PathExpression",data:!1,depth:0,parts:[e.original+""],original:e.original+"",loc:e.loc}}}});var xn=m(Qt=>{var En="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");Qt.encode=function(t){if(0<=t&&t<En.length)return En[t];throw new TypeError("Must be between 0 and 63: "+t)};Qt.decode=function(t){var e=65,r=90,n=97,i=122,s=48,o=57,u=43,l=47,a=26,h=52;return e<=t&&t<=r?t-e:n<=t&&t<=i?t-n+a:s<=t&&t<=o?t-s+h:t==u?62:t==l?63:-1}});var Zt=m(Xt=>{var wn=xn(),Yt=5,On=1<<Yt,An=On-1,Mn=On;function No(t){return t<0?(-t<<1)+1:(t<<1)+0}function Io(t){var e=(t&1)===1,r=t>>1;return e?-r:r}Xt.encode=function(e){var r="",n,i=No(e);do n=i&An,i>>>=Yt,i>0&&(n|=Mn),r+=wn.encode(n);while(i>0);return r};Xt.decode=function(e,r,n){var i=e.length,s=0,o=0,u,l;do{if(r>=i)throw new Error("Expected more digits in base 64 VLQ value.");if(l=wn.decode(e.charCodeAt(r++)),l===-1)throw new Error("Invalid base64 digit: "+e.charAt(r-1));u=!!(l&Mn),l&=An,s=s+(l<<o),o+=Yt}while(u);n.value=Io(s),n.rest=r}});var ue=m(C=>{function Do(t,e,r){if(e in t)return t[e];if(arguments.length===3)return r;throw new Error('"'+e+'" is a required argument.')}C.getArg=Do;var Nn=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/,Ro=/^data:.+\,.+$/;function be(t){var e=t.match(Nn);return e?{scheme:e[1],auth:e[2],host:e[3],port:e[4],path:e[5]}:null}C.urlParse=be;function oe(t){var e="";return t.scheme&&(e+=t.scheme+":"),e+="//",t.auth&&(e+=t.auth+"@"),t.host&&(e+=t.host),t.port&&(e+=":"+t.port),t.path&&(e+=t.path),e}C.urlGenerate=oe;function jt(t){var e=t,r=be(t);if(r){if(!r.path)return t;e=r.path}for(var n=C.isAbsolute(e),i=e.split(/\/+/),s,o=0,u=i.length-1;u>=0;u--)s=i[u],s==="."?i.splice(u,1):s===".."?o++:o>0&&(s===""?(i.splice(u+1,o),o=0):(i.splice(u,2),o--));return e=i.join("/"),e===""&&(e=n?"/":"."),r?(r.path=e,oe(r)):e}C.normalize=jt;function In(t,e){t===""&&(t="."),e===""&&(e=".");var r=be(e),n=be(t);if(n&&(t=n.path||"/"),r&&!r.scheme)return n&&(r.scheme=n.scheme),oe(r);if(r||e.match(Ro))return e;if(n&&!n.host&&!n.path)return n.host=e,oe(n);var i=e.charAt(0)==="/"?e:jt(t.replace(/\/+$/,"")+"/"+e);return n?(n.path=i,oe(n)):i}C.join=In;C.isAbsolute=function(t){return t.charAt(0)==="/"||Nn.test(t)};function Bo(t,e){t===""&&(t="."),t=t.replace(/\/$/,"");for(var r=0;e.indexOf(t+"/")!==0;){var n=t.lastIndexOf("/");if(n<0||(t=t.slice(0,n),t.match(/^([^\/]+:\/)?\/*$/)))return e;++r}return Array(r+1).join("../")+e.substr(t.length+1)}C.relative=Bo;var Dn=function(){var t=Object.create(null);return!("__proto__"in t)}();function Rn(t){return t}function Ho(t){return Bn(t)?"$"+t:t}C.toSetString=Dn?Rn:Ho;function To(t){return Bn(t)?t.slice(1):t}C.fromSetString=Dn?Rn:To;function Bn(t){if(!t)return!1;var e=t.length;if(e<9||t.charCodeAt(e-1)!==95||t.charCodeAt(e-2)!==95||t.charCodeAt(e-3)!==111||t.charCodeAt(e-4)!==116||t.charCodeAt(e-5)!==111||t.charCodeAt(e-6)!==114||t.charCodeAt(e-7)!==112||t.charCodeAt(e-8)!==95||t.charCodeAt(e-9)!==95)return!1;for(var r=e-10;r>=0;r--)if(t.charCodeAt(r)!==36)return!1;return!0}function qo(t,e,r){var n=ae(t.source,e.source);return n!==0||(n=t.originalLine-e.originalLine,n!==0)||(n=t.originalColumn-e.originalColumn,n!==0||r)||(n=t.generatedColumn-e.generatedColumn,n!==0)||(n=t.generatedLine-e.generatedLine,n!==0)?n:ae(t.name,e.name)}C.compareByOriginalPositions=qo;function Fo(t,e,r){var n=t.generatedLine-e.generatedLine;return n!==0||(n=t.generatedColumn-e.generatedColumn,n!==0||r)||(n=ae(t.source,e.source),n!==0)||(n=t.originalLine-e.originalLine,n!==0)||(n=t.originalColumn-e.originalColumn,n!==0)?n:ae(t.name,e.name)}C.compareByGeneratedPositionsDeflated=Fo;function ae(t,e){return t===e?0:t===null?1:e===null?-1:t>e?1:-1}function Vo(t,e){var r=t.generatedLine-e.generatedLine;return r!==0||(r=t.generatedColumn-e.generatedColumn,r!==0)||(r=ae(t.source,e.source),r!==0)||(r=t.originalLine-e.originalLine,r!==0)||(r=t.originalColumn-e.originalColumn,r!==0)?r:ae(t.name,e.name)}C.compareByGeneratedPositionsInflated=Vo;function Wo(t){return JSON.parse(t.replace(/^\)]}'[^\n]*\n/,""))}C.parseSourceMapInput=Wo;function Go(t,e,r){if(e=e||"",t&&(t[t.length-1]!=="/"&&e[0]!=="/"&&(t+="/"),e=t+e),r){var n=be(r);if(!n)throw new Error("sourceMapURL could not be parsed");if(n.path){var i=n.path.lastIndexOf("/");i>=0&&(n.path=n.path.substring(0,i+1))}e=In(oe(n),e)}return jt(e)}C.computeSourceURL=Go});var tr=m(Hn=>{var $t=ue(),er=Object.prototype.hasOwnProperty,$=typeof Map!="undefined";function U(){this._array=[],this._set=$?new Map:Object.create(null)}U.fromArray=function(e,r){for(var n=new U,i=0,s=e.length;i<s;i++)n.add(e[i],r);return n};U.prototype.size=function(){return $?this._set.size:Object.getOwnPropertyNames(this._set).length};U.prototype.add=function(e,r){var n=$?e:$t.toSetString(e),i=$?this.has(e):er.call(this._set,n),s=this._array.length;(!i||r)&&this._array.push(e),i||($?this._set.set(e,s):this._set[n]=s)};U.prototype.has=function(e){if($)return this._set.has(e);var r=$t.toSetString(e);return er.call(this._set,r)};U.prototype.indexOf=function(e){if($){var r=this._set.get(e);if(r>=0)return r}else{var n=$t.toSetString(e);if(er.call(this._set,n))return this._set[n]}throw new Error('"'+e+'" is not in the set.')};U.prototype.at=function(e){if(e>=0&&e<this._array.length)return this._array[e];throw new Error("No element indexed by "+e)};U.prototype.toArray=function(){return this._array.slice()};Hn.ArraySet=U});var Fn=m(qn=>{var Tn=ue();function Uo(t,e){var r=t.generatedLine,n=e.generatedLine,i=t.generatedColumn,s=e.generatedColumn;return n>r||n==r&&s>=i||Tn.compareByGeneratedPositionsInflated(t,e)<=0}function at(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}at.prototype.unsortedForEach=function(e,r){this._array.forEach(e,r)};at.prototype.add=function(e){Uo(this._last,e)?(this._last=e,this._array.push(e)):(this._sorted=!1,this._array.push(e))};at.prototype.toArray=function(){return this._sorted||(this._array.sort(Tn.compareByGeneratedPositionsInflated),this._sorted=!0),this._array};qn.MappingList=at});var rr=m(Vn=>{var Ce=Zt(),y=ue(),ut=tr().ArraySet,Ko=Fn().MappingList;function I(t){t||(t={}),this._file=y.getArg(t,"file",null),this._sourceRoot=y.getArg(t,"sourceRoot",null),this._skipValidation=y.getArg(t,"skipValidation",!1),this._sources=new ut,this._names=new ut,this._mappings=new Ko,this._sourcesContents=null}I.prototype._version=3;I.fromSourceMap=function(e){var r=e.sourceRoot,n=new I({file:e.file,sourceRoot:r});return e.eachMapping(function(i){var s={generated:{line:i.generatedLine,column:i.generatedColumn}};i.source!=null&&(s.source=i.source,r!=null&&(s.source=y.relative(r,s.source)),s.original={line:i.originalLine,column:i.originalColumn},i.name!=null&&(s.name=i.name)),n.addMapping(s)}),e.sources.forEach(function(i){var s=i;r!==null&&(s=y.relative(r,i)),n._sources.has(s)||n._sources.add(s);var o=e.sourceContentFor(i);o!=null&&n.setSourceContent(i,o)}),n};I.prototype.addMapping=function(e){var r=y.getArg(e,"generated"),n=y.getArg(e,"original",null),i=y.getArg(e,"source",null),s=y.getArg(e,"name",null);this._skipValidation||this._validateMapping(r,n,i,s),i!=null&&(i=String(i),this._sources.has(i)||this._sources.add(i)),s!=null&&(s=String(s),this._names.has(s)||this._names.add(s)),this._mappings.add({generatedLine:r.line,generatedColumn:r.column,originalLine:n!=null&&n.line,originalColumn:n!=null&&n.column,source:i,name:s})};I.prototype.setSourceContent=function(e,r){var n=e;this._sourceRoot!=null&&(n=y.relative(this._sourceRoot,n)),r!=null?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[y.toSetString(n)]=r):this._sourcesContents&&(delete this._sourcesContents[y.toSetString(n)],Object.keys(this._sourcesContents).length===0&&(this._sourcesContents=null))};I.prototype.applySourceMap=function(e,r,n){var i=r;if(r==null){if(e.file==null)throw new Error(`SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map's "file" property. Both were omitted.`);i=e.file}var s=this._sourceRoot;s!=null&&(i=y.relative(s,i));var o=new ut,u=new ut;this._mappings.unsortedForEach(function(l){if(l.source===i&&l.originalLine!=null){var a=e.originalPositionFor({line:l.originalLine,column:l.originalColumn});a.source!=null&&(l.source=a.source,n!=null&&(l.source=y.join(n,l.source)),s!=null&&(l.source=y.relative(s,l.source)),l.originalLine=a.line,l.originalColumn=a.column,a.name!=null&&(l.name=a.name))}var h=l.source;h!=null&&!o.has(h)&&o.add(h);var c=l.name;c!=null&&!u.has(c)&&u.add(c)},this),this._sources=o,this._names=u,e.sources.forEach(function(l){var a=e.sourceContentFor(l);a!=null&&(n!=null&&(l=y.join(n,l)),s!=null&&(l=y.relative(s,l)),this.setSourceContent(l,a))},this)};I.prototype._validateMapping=function(e,r,n,i){if(r&&typeof r.line!="number"&&typeof r.column!="number")throw new Error("original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values.");if(!(e&&"line"in e&&"column"in e&&e.line>0&&e.column>=0&&!r&&!n&&!i)){if(e&&"line"in e&&"column"in e&&r&&"line"in r&&"column"in r&&e.line>0&&e.column>=0&&r.line>0&&r.column>=0&&n)return;throw new Error("Invalid mapping: "+JSON.stringify({generated:e,source:n,original:r,name:i}))}};I.prototype._serializeMappings=function(){for(var e=0,r=1,n=0,i=0,s=0,o=0,u="",l,a,h,c,p=this._mappings.toArray(),d=0,g=p.length;d<g;d++){if(a=p[d],l="",a.generatedLine!==r)for(e=0;a.generatedLine!==r;)l+=";",r++;else if(d>0){if(!y.compareByGeneratedPositionsInflated(a,p[d-1]))continue;l+=","}l+=Ce.encode(a.generatedColumn-e),e=a.generatedColumn,a.source!=null&&(c=this._sources.indexOf(a.source),l+=Ce.encode(c-o),o=c,l+=Ce.encode(a.originalLine-1-i),i=a.originalLine-1,l+=Ce.encode(a.originalColumn-n),n=a.originalColumn,a.name!=null&&(h=this._names.indexOf(a.name),l+=Ce.encode(h-s),s=h)),u+=l}return u};I.prototype._generateSourcesContent=function(e,r){return e.map(function(n){if(!this._sourcesContents)return null;r!=null&&(n=y.relative(r,n));var i=y.toSetString(n);return Object.prototype.hasOwnProperty.call(this._sourcesContents,i)?this._sourcesContents[i]:null},this)};I.prototype.toJSON=function(){var e={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return this._file!=null&&(e.file=this._file),this._sourceRoot!=null&&(e.sourceRoot=this._sourceRoot),this._sourcesContents&&(e.sourcesContent=this._generateSourcesContent(e.sources,e.sourceRoot)),e};I.prototype.toString=function(){return JSON.stringify(this.toJSON())};Vn.SourceMapGenerator=I});var Wn=m(ee=>{ee.GREATEST_LOWER_BOUND=1;ee.LEAST_UPPER_BOUND=2;function nr(t,e,r,n,i,s){var o=Math.floor((e-t)/2)+t,u=i(r,n[o],!0);return u===0?o:u>0?e-o>1?nr(o,e,r,n,i,s):s==ee.LEAST_UPPER_BOUND?e<n.length?e:-1:o:o-t>1?nr(t,o,r,n,i,s):s==ee.LEAST_UPPER_BOUND?o:t<0?-1:t}ee.search=function(e,r,n,i){if(r.length===0)return-1;var s=nr(-1,r.length,e,r,n,i||ee.GREATEST_LOWER_BOUND);if(s<0)return-1;for(;s-1>=0&&n(r[s],r[s-1],!0)===0;)--s;return s}});var Un=m(Gn=>{function ir(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function Jo(t,e){return Math.round(t+Math.random()*(e-t))}function sr(t,e,r,n){if(r<n){var i=Jo(r,n),s=r-1;ir(t,i,n);for(var o=t[n],u=r;u<n;u++)e(t[u],o)<=0&&(s+=1,ir(t,s,u));ir(t,s+1,u);var l=s+1;sr(t,e,r,l-1),sr(t,e,l+1,n)}}Gn.quickSort=function(t,e){sr(t,e,0,t.length-1)}});var Jn=m(lt=>{var f=ue(),or=Wn(),le=tr().ArraySet,zo=Zt(),Le=Un().quickSort;function v(t,e){var r=t;return typeof t=="string"&&(r=f.parseSourceMapInput(t)),r.sections!=null?new D(r,e):new b(r,e)}v.fromSourceMap=function(t,e){return b.fromSourceMap(t,e)};v.prototype._version=3;v.prototype.__generatedMappings=null;Object.defineProperty(v.prototype,"_generatedMappings",{configurable:!0,enumerable:!0,get:function(){return this.__generatedMappings||this._parseMappings(this._mappings,this.sourceRoot),this.__generatedMappings}});v.prototype.__originalMappings=null;Object.defineProperty(v.prototype,"_originalMappings",{configurable:!0,enumerable:!0,get:function(){return this.__originalMappings||this._parseMappings(this._mappings,this.sourceRoot),this.__originalMappings}});v.prototype._charIsMappingSeparator=function(e,r){var n=e.charAt(r);return n===";"||n===","};v.prototype._parseMappings=function(e,r){throw new Error("Subclasses must implement _parseMappings")};v.GENERATED_ORDER=1;v.ORIGINAL_ORDER=2;v.GREATEST_LOWER_BOUND=1;v.LEAST_UPPER_BOUND=2;v.prototype.eachMapping=function(e,r,n){var i=r||null,s=n||v.GENERATED_ORDER,o;switch(s){case v.GENERATED_ORDER:o=this._generatedMappings;break;case v.ORIGINAL_ORDER:o=this._originalMappings;break;default:throw new Error("Unknown order of iteration.")}var u=this.sourceRoot;o.map(function(l){var a=l.source===null?null:this._sources.at(l.source);return a=f.computeSourceURL(u,a,this._sourceMapURL),{source:a,generatedLine:l.generatedLine,generatedColumn:l.generatedColumn,originalLine:l.originalLine,originalColumn:l.originalColumn,name:l.name===null?null:this._names.at(l.name)}},this).forEach(e,i)};v.prototype.allGeneratedPositionsFor=function(e){var r=f.getArg(e,"line"),n={source:f.getArg(e,"source"),originalLine:r,originalColumn:f.getArg(e,"column",0)};if(n.source=this._findSourceIndex(n.source),n.source<0)return[];var i=[],s=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",f.compareByOriginalPositions,or.LEAST_UPPER_BOUND);if(s>=0){var o=this._originalMappings[s];if(e.column===void 0)for(var u=o.originalLine;o&&o.originalLine===u;)i.push({line:f.getArg(o,"generatedLine",null),column:f.getArg(o,"generatedColumn",null),lastColumn:f.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++s];else for(var l=o.originalColumn;o&&o.originalLine===r&&o.originalColumn==l;)i.push({line:f.getArg(o,"generatedLine",null),column:f.getArg(o,"generatedColumn",null),lastColumn:f.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++s]}return i};lt.SourceMapConsumer=v;function b(t,e){var r=t;typeof t=="string"&&(r=f.parseSourceMapInput(t));var n=f.getArg(r,"version"),i=f.getArg(r,"sources"),s=f.getArg(r,"names",[]),o=f.getArg(r,"sourceRoot",null),u=f.getArg(r,"sourcesContent",null),l=f.getArg(r,"mappings"),a=f.getArg(r,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);o&&(o=f.normalize(o)),i=i.map(String).map(f.normalize).map(function(h){return o&&f.isAbsolute(o)&&f.isAbsolute(h)?f.relative(o,h):h}),this._names=le.fromArray(s.map(String),!0),this._sources=le.fromArray(i,!0),this._absoluteSources=this._sources.toArray().map(function(h){return f.computeSourceURL(o,h,e)}),this.sourceRoot=o,this.sourcesContent=u,this._mappings=l,this._sourceMapURL=e,this.file=a}b.prototype=Object.create(v.prototype);b.prototype.consumer=v;b.prototype._findSourceIndex=function(t){var e=t;if(this.sourceRoot!=null&&(e=f.relative(this.sourceRoot,e)),this._sources.has(e))return this._sources.indexOf(e);var r;for(r=0;r<this._absoluteSources.length;++r)if(this._absoluteSources[r]==t)return r;return-1};b.fromSourceMap=function(e,r){var n=Object.create(b.prototype),i=n._names=le.fromArray(e._names.toArray(),!0),s=n._sources=le.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file,n._sourceMapURL=r,n._absoluteSources=n._sources.toArray().map(function(d){return f.computeSourceURL(n.sourceRoot,d,r)});for(var o=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],a=0,h=o.length;a<h;a++){var c=o[a],p=new Kn;p.generatedLine=c.generatedLine,p.generatedColumn=c.generatedColumn,c.source&&(p.source=s.indexOf(c.source),p.originalLine=c.originalLine,p.originalColumn=c.originalColumn,c.name&&(p.name=i.indexOf(c.name)),l.push(p)),u.push(p)}return Le(n.__originalMappings,f.compareByOriginalPositions),n};b.prototype._version=3;Object.defineProperty(b.prototype,"sources",{get:function(){return this._absoluteSources.slice()}});function Kn(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}b.prototype._parseMappings=function(e,r){for(var n=1,i=0,s=0,o=0,u=0,l=0,a=e.length,h=0,c={},p={},d=[],g=[],_,O,k,T,q;h<a;)if(e.charAt(h)===";")n++,h++,i=0;else if(e.charAt(h)===",")h++;else{for(_=new Kn,_.generatedLine=n,T=h;T<a&&!this._charIsMappingSeparator(e,T);T++);if(O=e.slice(h,T),k=c[O],k)h+=O.length;else{for(k=[];h<T;)zo.decode(e,h,p),q=p.value,h=p.rest,k.push(q);if(k.length===2)throw new Error("Found a source, but no line and column");if(k.length===3)throw new Error("Found a source and line, but no column");c[O]=k}_.generatedColumn=i+k[0],i=_.generatedColumn,k.length>1&&(_.source=u+k[1],u+=k[1],_.originalLine=s+k[2],s=_.originalLine,_.originalLine+=1,_.originalColumn=o+k[3],o=_.originalColumn,k.length>4&&(_.name=l+k[4],l+=k[4])),g.push(_),typeof _.originalLine=="number"&&d.push(_)}Le(g,f.compareByGeneratedPositionsDeflated),this.__generatedMappings=g,Le(d,f.compareByOriginalPositions),this.__originalMappings=d};b.prototype._findMapping=function(e,r,n,i,s,o){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[i]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[i]);return or.search(e,r,s,o)};b.prototype.computeColumnSpans=function(){for(var e=0;e<this._generatedMappings.length;++e){var r=this._generatedMappings[e];if(e+1<this._generatedMappings.length){var n=this._generatedMappings[e+1];if(r.generatedLine===n.generatedLine){r.lastGeneratedColumn=n.generatedColumn-1;continue}}r.lastGeneratedColumn=1/0}};b.prototype.originalPositionFor=function(e){var r={generatedLine:f.getArg(e,"line"),generatedColumn:f.getArg(e,"column")},n=this._findMapping(r,this._generatedMappings,"generatedLine","generatedColumn",f.compareByGeneratedPositionsDeflated,f.getArg(e,"bias",v.GREATEST_LOWER_BOUND));if(n>=0){var i=this._generatedMappings[n];if(i.generatedLine===r.generatedLine){var s=f.getArg(i,"source",null);s!==null&&(s=this._sources.at(s),s=f.computeSourceURL(this.sourceRoot,s,this._sourceMapURL));var o=f.getArg(i,"name",null);return o!==null&&(o=this._names.at(o)),{source:s,line:f.getArg(i,"originalLine",null),column:f.getArg(i,"originalColumn",null),name:o}}}return{source:null,line:null,column:null,name:null}};b.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return e==null}):!1};b.prototype.sourceContentFor=function(e,r){if(!this.sourcesContent)return null;var n=this._findSourceIndex(e);if(n>=0)return this.sourcesContent[n];var i=e;this.sourceRoot!=null&&(i=f.relative(this.sourceRoot,i));var s;if(this.sourceRoot!=null&&(s=f.urlParse(this.sourceRoot))){var o=i.replace(/^file:\/\//,"");if(s.scheme=="file"&&this._sources.has(o))return this.sourcesContent[this._sources.indexOf(o)];if((!s.path||s.path=="/")&&this._sources.has("/"+i))return this.sourcesContent[this._sources.indexOf("/"+i)]}if(r)return null;throw new Error('"'+i+'" is not in the SourceMap.')};b.prototype.generatedPositionFor=function(e){var r=f.getArg(e,"source");if(r=this._findSourceIndex(r),r<0)return{line:null,column:null,lastColumn:null};var n={source:r,originalLine:f.getArg(e,"line"),originalColumn:f.getArg(e,"column")},i=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",f.compareByOriginalPositions,f.getArg(e,"bias",v.GREATEST_LOWER_BOUND));if(i>=0){var s=this._originalMappings[i];if(s.source===n.source)return{line:f.getArg(s,"generatedLine",null),column:f.getArg(s,"generatedColumn",null),lastColumn:f.getArg(s,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}};lt.BasicSourceMapConsumer=b;function D(t,e){var r=t;typeof t=="string"&&(r=f.parseSourceMapInput(t));var n=f.getArg(r,"version"),i=f.getArg(r,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new le,this._names=new le;var s={line:-1,column:0};this._sections=i.map(function(o){if(o.url)throw new Error("Support for url field in sections not implemented.");var u=f.getArg(o,"offset"),l=f.getArg(u,"line"),a=f.getArg(u,"column");if(l<s.line||l===s.line&&a<s.column)throw new Error("Section offsets must be ordered and non-overlapping.");return s=u,{generatedOffset:{generatedLine:l+1,generatedColumn:a+1},consumer:new v(f.getArg(o,"map"),e)}})}D.prototype=Object.create(v.prototype);D.prototype.constructor=v;D.prototype._version=3;Object.defineProperty(D.prototype,"sources",{get:function(){for(var t=[],e=0;e<this._sections.length;e++)for(var r=0;r<this._sections[e].consumer.sources.length;r++)t.push(this._sections[e].consumer.sources[r]);return t}});D.prototype.originalPositionFor=function(e){var r={generatedLine:f.getArg(e,"line"),generatedColumn:f.getArg(e,"column")},n=or.search(r,this._sections,function(s,o){var u=s.generatedLine-o.generatedOffset.generatedLine;return u||s.generatedColumn-o.generatedOffset.generatedColumn}),i=this._sections[n];return i?i.consumer.originalPositionFor({line:r.generatedLine-(i.generatedOffset.generatedLine-1),column:r.generatedColumn-(i.generatedOffset.generatedLine===r.generatedLine?i.generatedOffset.generatedColumn-1:0),bias:e.bias}):{source:null,line:null,column:null,name:null}};D.prototype.hasContentsOfAllSources=function(){return this._sections.every(function(e){return e.consumer.hasContentsOfAllSources()})};D.prototype.sourceContentFor=function(e,r){for(var n=0;n<this._sections.length;n++){var i=this._sections[n],s=i.consumer.sourceContentFor(e,!0);if(s)return s}if(r)return null;throw new Error('"'+e+'" is not in the SourceMap.')};D.prototype.generatedPositionFor=function(e){for(var r=0;r<this._sections.length;r++){var n=this._sections[r];if(n.consumer._findSourceIndex(f.getArg(e,"source"))!==-1){var i=n.consumer.generatedPositionFor(e);if(i){var s={line:i.line+(n.generatedOffset.generatedLine-1),column:i.column+(n.generatedOffset.generatedLine===i.line?n.generatedOffset.generatedColumn-1:0)};return s}}}return{line:null,column:null}};D.prototype._parseMappings=function(e,r){this.__generatedMappings=[],this.__originalMappings=[];for(var n=0;n<this._sections.length;n++)for(var i=this._sections[n],s=i.consumer._generatedMappings,o=0;o<s.length;o++){var u=s[o],l=i.consumer._sources.at(u.source);l=f.computeSourceURL(i.consumer.sourceRoot,l,this._sourceMapURL),this._sources.add(l),l=this._sources.indexOf(l);var a=null;u.name&&(a=i.consumer._names.at(u.name),this._names.add(a),a=this._names.indexOf(a));var h={source:l,generatedLine:u.generatedLine+(i.generatedOffset.generatedLine-1),generatedColumn:u.generatedColumn+(i.generatedOffset.generatedLine===u.generatedLine?i.generatedOffset.generatedColumn-1:0),originalLine:u.originalLine,originalColumn:u.originalColumn,name:a};this.__generatedMappings.push(h),typeof h.originalLine=="number"&&this.__originalMappings.push(h)}Le(this.__generatedMappings,f.compareByGeneratedPositionsDeflated),Le(this.__originalMappings,f.compareByOriginalPositions)};lt.IndexedSourceMapConsumer=D});var Qn=m(zn=>{var Qo=rr().SourceMapGenerator,ct=ue(),Yo=/(\r?\n)/,Xo=10,ce="$$$isSourceNode$$$";function w(t,e,r,n,i){this.children=[],this.sourceContents={},this.line=t==null?null:t,this.column=e==null?null:e,this.source=r==null?null:r,this.name=i==null?null:i,this[ce]=!0,n!=null&&this.add(n)}w.fromStringWithSourceMap=function(e,r,n){var i=new w,s=e.split(Yo),o=0,u=function(){var p=g(),d=g()||"";return p+d;function g(){return o<s.length?s[o++]:void 0}},l=1,a=0,h=null;return r.eachMapping(function(p){if(h!==null)if(l<p.generatedLine)c(h,u()),l++,a=0;else{var d=s[o]||"",g=d.substr(0,p.generatedColumn-a);s[o]=d.substr(p.generatedColumn-a),a=p.generatedColumn,c(h,g),h=p;return}for(;l<p.generatedLine;)i.add(u()),l++;if(a<p.generatedColumn){var d=s[o]||"";i.add(d.substr(0,p.generatedColumn)),s[o]=d.substr(p.generatedColumn),a=p.generatedColumn}h=p},this),o<s.length&&(h&&c(h,u()),i.add(s.splice(o).join(""))),r.sources.forEach(function(p){var d=r.sourceContentFor(p);d!=null&&(n!=null&&(p=ct.join(n,p)),i.setSourceContent(p,d))}),i;function c(p,d){if(p===null||p.source===void 0)i.add(d);else{var g=n?ct.join(n,p.source):p.source;i.add(new w(p.originalLine,p.originalColumn,g,d,p.name))}}};w.prototype.add=function(e){if(Array.isArray(e))e.forEach(function(r){this.add(r)},this);else if(e[ce]||typeof e=="string")e&&this.children.push(e);else throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);return this};w.prototype.prepend=function(e){if(Array.isArray(e))for(var r=e.length-1;r>=0;r--)this.prepend(e[r]);else if(e[ce]||typeof e=="string")this.children.unshift(e);else throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);return this};w.prototype.walk=function(e){for(var r,n=0,i=this.children.length;n<i;n++)r=this.children[n],r[ce]?r.walk(e):r!==""&&e(r,{source:this.source,line:this.line,column:this.column,name:this.name})};w.prototype.join=function(e){var r,n,i=this.children.length;if(i>0){for(r=[],n=0;n<i-1;n++)r.push(this.children[n]),r.push(e);r.push(this.children[n]),this.children=r}return this};w.prototype.replaceRight=function(e,r){var n=this.children[this.children.length-1];return n[ce]?n.replaceRight(e,r):typeof n=="string"?this.children[this.children.length-1]=n.replace(e,r):this.children.push("".replace(e,r)),this};w.prototype.setSourceContent=function(e,r){this.sourceContents[ct.toSetString(e)]=r};w.prototype.walkSourceContents=function(e){for(var r=0,n=this.children.length;r<n;r++)this.children[r][ce]&&this.children[r].walkSourceContents(e);for(var i=Object.keys(this.sourceContents),r=0,n=i.length;r<n;r++)e(ct.fromSetString(i[r]),this.sourceContents[i[r]])};w.prototype.toString=function(){var e="";return this.walk(function(r){e+=r}),e};w.prototype.toStringWithSourceMap=function(e){var r={code:"",line:1,column:0},n=new Qo(e),i=!1,s=null,o=null,u=null,l=null;return this.walk(function(a,h){r.code+=a,h.source!==null&&h.line!==null&&h.column!==null?((s!==h.source||o!==h.line||u!==h.column||l!==h.name)&&n.addMapping({source:h.source,original:{line:h.line,column:h.column},generated:{line:r.line,column:r.column},name:h.name}),s=h.source,o=h.line,u=h.column,l=h.name,i=!0):i&&(n.addMapping({generated:{line:r.line,column:r.column}}),s=null,i=!1);for(var c=0,p=a.length;c<p;c++)a.charCodeAt(c)===Xo?(r.line++,r.column=0,c+1===p?(s=null,i=!1):i&&n.addMapping({source:h.source,original:{line:h.line,column:h.column},generated:{line:r.line,column:r.column},name:h.name})):r.column++}),this.walkSourceContents(function(a,h){n.setSourceContent(a,h)}),{code:r.code,map:n}};zn.SourceNode=w});var Yn=m(ht=>{ht.SourceMapGenerator=rr().SourceMapGenerator;ht.SourceMapConsumer=Jn().SourceMapConsumer;ht.SourceNode=Qn().SourceNode});var $n=m((pt,jn)=>{"use strict";pt.__esModule=!0;var ur=P(),te=void 0;try{(typeof define!="function"||!define.amd)&&(Xn=Yn(),te=Xn.SourceNode)}catch(t){}var Xn;te||(te=function(t,e,r,n){this.src="",n&&this.add(n)},te.prototype={add:function(e){ur.isArray(e)&&(e=e.join("")),this.src+=e},prepend:function(e){ur.isArray(e)&&(e=e.join("")),this.src=e+this.src},toStringWithSourceMap:function(){return{code:this.toString()}},toString:function(){return this.src}});function ar(t,e,r){if(ur.isArray(t)){for(var n=[],i=0,s=t.length;i<s;i++)n.push(e.wrap(t[i],r));return n}else if(typeof t=="boolean"||typeof t=="number")return t+"";return t}function Zn(t){this.srcFile=t,this.source=[]}Zn.prototype={isEmpty:function(){return!this.source.length},prepend:function(e,r){this.source.unshift(this.wrap(e,r))},push:function(e,r){this.source.push(this.wrap(e,r))},merge:function(){var e=this.empty();return this.each(function(r){e.add(["  ",r,` -`])}),e},each:function(e){for(var r=0,n=this.source.length;r<n;r++)e(this.source[r])},empty:function(){var e=this.currentLocation||{start:{}};return new te(e.start.line,e.start.column,this.srcFile)},wrap:function(e){var r=arguments.length<=1||arguments[1]===void 0?this.currentLocation||{start:{}}:arguments[1];return e instanceof te?e:(e=ar(e,this,r),new te(r.start.line,r.start.column,this.srcFile,e))},functionCall:function(e,r,n){return n=this.generateList(n),this.wrap([e,r?"."+r+"(":"(",n,")"])},quotedString:function(e){return'"'+(e+"").replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")+'"'},objectLiteral:function(e){var r=this,n=[];Object.keys(e).forEach(function(s){var o=ar(e[s],r);o!=="undefined"&&n.push([r.quotedString(s),":",o])});var i=this.generateList(n);return i.prepend("{"),i.add("}"),i},generateList:function(e){for(var r=this.empty(),n=0,i=e.length;n<i;n++)n&&r.add(","),r.add(ar(e[n],this));return r},generateArray:function(e){var r=this.generateList(e);return r.prepend("["),r.add("]"),r}};pt.default=Zn;jn.exports=pt.default});var ii=m((ft,ni)=>{"use strict";ft.__esModule=!0;function ri(t){return t&&t.__esModule?t:{default:t}}var ei=ze(),Zo=M(),lr=ri(Zo),jo=P(),$o=$n(),ti=ri($o);function he(t){this.value=t}function pe(){}pe.prototype={nameLookup:function(e,r){return this.internalNameLookup(e,r)},depthedLookup:function(e){return[this.aliasable("container.lookup"),"(depths, ",JSON.stringify(e),")"]},compilerInfo:function(){var e=ei.COMPILER_REVISION,r=ei.REVISION_CHANGES[e];return[e,r]},appendToBuffer:function(e,r,n){return jo.isArray(e)||(e=[e]),e=this.source.wrap(e,r),this.environment.isSimple?["return ",e,";"]:n?["buffer += ",e,";"]:(e.appendToBuffer=!0,e)},initializeBuffer:function(){return this.quotedString("")},internalNameLookup:function(e,r){return this.lookupPropertyFunctionIsUsed=!0,["lookupProperty(",e,",",JSON.stringify(r),")"]},lookupPropertyFunctionIsUsed:!1,compile:function(e,r,n,i){this.environment=e,this.options=r,this.stringParams=this.options.stringParams,this.trackIds=this.options.trackIds,this.precompile=!i,this.name=this.environment.name,this.isChild=!!n,this.context=n||{decorators:[],programs:[],environments:[]},this.preamble(),this.stackSlot=0,this.stackVars=[],this.aliases={},this.registers={list:[]},this.hashes=[],this.compileStack=[],this.inlineStack=[],this.blockParams=[],this.compileChildren(e,r),this.useDepths=this.useDepths||e.useDepths||e.useDecorators||this.options.compat,this.useBlockParams=this.useBlockParams||e.useBlockParams;var s=e.opcodes,o=void 0,u=void 0,l=void 0,a=void 0;for(l=0,a=s.length;l<a;l++)o=s[l],this.source.currentLocation=o.loc,u=u||o.loc,this[o.opcode].apply(this,o.args);if(this.source.currentLocation=u,this.pushSource(""),this.stackSlot||this.inlineStack.length||this.compileStack.length)throw new lr.default("Compile completed with content left on stack");this.decorators.isEmpty()?this.decorators=void 0:(this.useDecorators=!0,this.decorators.prepend(["var decorators = container.decorators, ",this.lookupPropertyFunctionVarDeclaration(),`; -`]),this.decorators.push("return fn;"),i?this.decorators=Function.apply(this,["fn","props","container","depth0","data","blockParams","depths",this.decorators.merge()]):(this.decorators.prepend(`function(fn, props, container, depth0, data, blockParams, depths) { -`),this.decorators.push(`} -`),this.decorators=this.decorators.merge()));var h=this.createFunctionContext(i);if(this.isChild)return h;var c={compiler:this.compilerInfo(),main:h};this.decorators&&(c.main_d=this.decorators,c.useDecorators=!0);var p=this.context,d=p.programs,g=p.decorators;for(l=0,a=d.length;l<a;l++)d[l]&&(c[l]=d[l],g[l]&&(c[l+"_d"]=g[l],c.useDecorators=!0));return this.environment.usePartial&&(c.usePartial=!0),this.options.data&&(c.useData=!0),this.useDepths&&(c.useDepths=!0),this.useBlockParams&&(c.useBlockParams=!0),this.options.compat&&(c.compat=!0),i?c.compilerOptions=this.options:(c.compiler=JSON.stringify(c.compiler),this.source.currentLocation={start:{line:1,column:0}},c=this.objectLiteral(c),r.srcName?(c=c.toStringWithSourceMap({file:r.destName}),c.map=c.map&&c.map.toString()):c=c.toString()),c},preamble:function(){this.lastContext=0,this.source=new ti.default(this.options.srcName),this.decorators=new ti.default(this.options.srcName)},createFunctionContext:function(e){var r=this,n="",i=this.stackVars.concat(this.registers.list);i.length>0&&(n+=", "+i.join(", "));var s=0;Object.keys(this.aliases).forEach(function(l){var a=r.aliases[l];a.children&&a.referenceCount>1&&(n+=", alias"+ ++s+"="+l,a.children[0]="alias"+s)}),this.lookupPropertyFunctionIsUsed&&(n+=", "+this.lookupPropertyFunctionVarDeclaration());var o=["container","depth0","helpers","partials","data"];(this.useBlockParams||this.useDepths)&&o.push("blockParams"),this.useDepths&&o.push("depths");var u=this.mergeSource(n);return e?(o.push(u),Function.apply(this,o)):this.source.wrap(["function(",o.join(","),`) { -  `,u,"}"])},mergeSource:function(e){var r=this.environment.isSimple,n=!this.forceBuffer,i=void 0,s=void 0,o=void 0,u=void 0;return this.source.each(function(l){l.appendToBuffer?(o?l.prepend("  + "):o=l,u=l):(o&&(s?o.prepend("buffer += "):i=!0,u.add(";"),o=u=void 0),s=!0,r||(n=!1))}),n?o?(o.prepend("return "),u.add(";")):s||this.source.push('return "";'):(e+=", buffer = "+(i?"":this.initializeBuffer()),o?(o.prepend("return buffer + "),u.add(";")):this.source.push("return buffer;")),e&&this.source.prepend("var "+e.substring(2)+(i?"":`; -`)),this.source.merge()},lookupPropertyFunctionVarDeclaration:function(){return` -      lookupProperty = container.lookupProperty || function(parent, propertyName) { -        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { -          return parent[propertyName]; -        } -        return undefined -    } -    `.trim()},blockValue:function(e){var r=this.aliasable("container.hooks.blockHelperMissing"),n=[this.contextName(0)];this.setupHelperArgs(e,0,n);var i=this.popStack();n.splice(1,0,i),this.push(this.source.functionCall(r,"call",n))},ambiguousBlockValue:function(){var e=this.aliasable("container.hooks.blockHelperMissing"),r=[this.contextName(0)];this.setupHelperArgs("",0,r,!0),this.flushInline();var n=this.topStack();r.splice(1,0,n),this.pushSource(["if (!",this.lastHelper,") { ",n," = ",this.source.functionCall(e,"call",r),"}"])},appendContent:function(e){this.pendingContent?e=this.pendingContent+e:this.pendingLocation=this.source.currentLocation,this.pendingContent=e},append:function(){if(this.isInline())this.replaceStack(function(r){return[" != null ? ",r,' : ""']}),this.pushSource(this.appendToBuffer(this.popStack()));else{var e=this.popStack();this.pushSource(["if (",e," != null) { ",this.appendToBuffer(e,void 0,!0)," }"]),this.environment.isSimple&&this.pushSource(["else { ",this.appendToBuffer("''",void 0,!0)," }"])}},appendEscaped:function(){this.pushSource(this.appendToBuffer([this.aliasable("container.escapeExpression"),"(",this.popStack(),")"]))},getContext:function(e){this.lastContext=e},pushContext:function(){this.pushStackLiteral(this.contextName(this.lastContext))},lookupOnContext:function(e,r,n,i){var s=0;!i&&this.options.compat&&!this.lastContext?this.push(this.depthedLookup(e[s++])):this.pushContext(),this.resolvePath("context",e,s,r,n)},lookupBlockParam:function(e,r){this.useBlockParams=!0,this.push(["blockParams[",e[0],"][",e[1],"]"]),this.resolvePath("context",r,1)},lookupData:function(e,r,n){e?this.pushStackLiteral("container.data(data, "+e+")"):this.pushStackLiteral("data"),this.resolvePath("data",r,0,!0,n)},resolvePath:function(e,r,n,i,s){var o=this;if(this.options.strict||this.options.assumeObjects){this.push(ea(this.options.strict&&s,this,r,e));return}for(var u=r.length;n<u;n++)this.replaceStack(function(l){var a=o.nameLookup(l,r[n],e);return i?[" && ",a]:[" != null ? ",a," : ",l]})},resolvePossibleLambda:function(){this.push([this.aliasable("container.lambda"),"(",this.popStack(),", ",this.contextName(0),")"])},pushStringParam:function(e,r){this.pushContext(),this.pushString(r),r!=="SubExpression"&&(typeof e=="string"?this.pushString(e):this.pushStackLiteral(e))},emptyHash:function(e){this.trackIds&&this.push("{}"),this.stringParams&&(this.push("{}"),this.push("{}")),this.pushStackLiteral(e?"undefined":"{}")},pushHash:function(){this.hash&&this.hashes.push(this.hash),this.hash={values:{},types:[],contexts:[],ids:[]}},popHash:function(){var e=this.hash;this.hash=this.hashes.pop(),this.trackIds&&this.push(this.objectLiteral(e.ids)),this.stringParams&&(this.push(this.objectLiteral(e.contexts)),this.push(this.objectLiteral(e.types))),this.push(this.objectLiteral(e.values))},pushString:function(e){this.pushStackLiteral(this.quotedString(e))},pushLiteral:function(e){this.pushStackLiteral(e)},pushProgram:function(e){e!=null?this.pushStackLiteral(this.programExpression(e)):this.pushStackLiteral(null)},registerDecorator:function(e,r){var n=this.nameLookup("decorators",r,"decorator"),i=this.setupHelperArgs(r,e);this.decorators.push(["fn = ",this.decorators.functionCall(n,"",["fn","props","container",i])," || fn;"])},invokeHelper:function(e,r,n){var i=this.popStack(),s=this.setupHelper(e,r),o=[];n&&o.push(s.name),o.push(i),this.options.strict||o.push(this.aliasable("container.hooks.helperMissing"));var u=["(",this.itemsSeparatedBy(o,"||"),")"],l=this.source.functionCall(u,"call",s.callParams);this.push(l)},itemsSeparatedBy:function(e,r){var n=[];n.push(e[0]);for(var i=1;i<e.length;i++)n.push(r,e[i]);return n},invokeKnownHelper:function(e,r){var n=this.setupHelper(e,r);this.push(this.source.functionCall(n.name,"call",n.callParams))},invokeAmbiguous:function(e,r){this.useRegister("helper");var n=this.popStack();this.emptyHash();var i=this.setupHelper(0,e,r),s=this.lastHelper=this.nameLookup("helpers",e,"helper"),o=["(","(helper = ",s," || ",n,")"];this.options.strict||(o[0]="(helper = ",o.push(" != null ? helper : ",this.aliasable("container.hooks.helperMissing"))),this.push(["(",o,i.paramsInit?["),(",i.paramsInit]:[],"),","(typeof helper === ",this.aliasable('"function"')," ? ",this.source.functionCall("helper","call",i.callParams)," : helper))"])},invokePartial:function(e,r,n){var i=[],s=this.setupParams(r,1,i);e&&(r=this.popStack(),delete s.name),n&&(s.indent=JSON.stringify(n)),s.helpers="helpers",s.partials="partials",s.decorators="container.decorators",e?i.unshift(r):i.unshift(this.nameLookup("partials",r,"partial")),this.options.compat&&(s.depths="depths"),s=this.objectLiteral(s),i.push(s),this.push(this.source.functionCall("container.invokePartial","",i))},assignToHash:function(e){var r=this.popStack(),n=void 0,i=void 0,s=void 0;this.trackIds&&(s=this.popStack()),this.stringParams&&(i=this.popStack(),n=this.popStack());var o=this.hash;n&&(o.contexts[e]=n),i&&(o.types[e]=i),s&&(o.ids[e]=s),o.values[e]=r},pushId:function(e,r,n){e==="BlockParam"?this.pushStackLiteral("blockParams["+r[0]+"].path["+r[1]+"]"+(n?" + "+JSON.stringify("."+n):"")):e==="PathExpression"?this.pushString(r):e==="SubExpression"?this.pushStackLiteral("true"):this.pushStackLiteral("null")},compiler:pe,compileChildren:function(e,r){for(var n=e.children,i=void 0,s=void 0,o=0,u=n.length;o<u;o++){i=n[o],s=new this.compiler;var l=this.matchExistingProgram(i);if(l==null){this.context.programs.push("");var a=this.context.programs.length;i.index=a,i.name="program"+a,this.context.programs[a]=s.compile(i,r,this.context,!this.precompile),this.context.decorators[a]=s.decorators,this.context.environments[a]=i,this.useDepths=this.useDepths||s.useDepths,this.useBlockParams=this.useBlockParams||s.useBlockParams,i.useDepths=this.useDepths,i.useBlockParams=this.useBlockParams}else i.index=l.index,i.name="program"+l.index,this.useDepths=this.useDepths||l.useDepths,this.useBlockParams=this.useBlockParams||l.useBlockParams}},matchExistingProgram:function(e){for(var r=0,n=this.context.environments.length;r<n;r++){var i=this.context.environments[r];if(i&&i.equals(e))return i}},programExpression:function(e){var r=this.environment.children[e],n=[r.index,"data",r.blockParams];return(this.useBlockParams||this.useDepths)&&n.push("blockParams"),this.useDepths&&n.push("depths"),"container.program("+n.join(", ")+")"},useRegister:function(e){this.registers[e]||(this.registers[e]=!0,this.registers.list.push(e))},push:function(e){return e instanceof he||(e=this.source.wrap(e)),this.inlineStack.push(e),e},pushStackLiteral:function(e){this.push(new he(e))},pushSource:function(e){this.pendingContent&&(this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent),this.pendingLocation)),this.pendingContent=void 0),e&&this.source.push(e)},replaceStack:function(e){var r=["("],n=void 0,i=void 0,s=void 0;if(!this.isInline())throw new lr.default("replaceStack on non-inline");var o=this.popStack(!0);if(o instanceof he)n=[o.value],r=["(",n],s=!0;else{i=!0;var u=this.incrStack();r=["((",this.push(u)," = ",o,")"],n=this.topStack()}var l=e.call(this,n);s||this.popStack(),i&&this.stackSlot--,this.push(r.concat(l,")"))},incrStack:function(){return this.stackSlot++,this.stackSlot>this.stackVars.length&&this.stackVars.push("stack"+this.stackSlot),this.topStackName()},topStackName:function(){return"stack"+this.stackSlot},flushInline:function(){var e=this.inlineStack;this.inlineStack=[];for(var r=0,n=e.length;r<n;r++){var i=e[r];if(i instanceof he)this.compileStack.push(i);else{var s=this.incrStack();this.pushSource([s," = ",i,";"]),this.compileStack.push(s)}}},isInline:function(){return this.inlineStack.length},popStack:function(e){var r=this.isInline(),n=(r?this.inlineStack:this.compileStack).pop();if(!e&&n instanceof he)return n.value;if(!r){if(!this.stackSlot)throw new lr.default("Invalid stack pop");this.stackSlot--}return n},topStack:function(){var e=this.isInline()?this.inlineStack:this.compileStack,r=e[e.length-1];return r instanceof he?r.value:r},contextName:function(e){return this.useDepths&&e?"depths["+e+"]":"depth"+e},quotedString:function(e){return this.source.quotedString(e)},objectLiteral:function(e){return this.source.objectLiteral(e)},aliasable:function(e){var r=this.aliases[e];return r?(r.referenceCount++,r):(r=this.aliases[e]=this.source.wrap(e),r.aliasable=!0,r.referenceCount=1,r)},setupHelper:function(e,r,n){var i=[],s=this.setupHelperArgs(r,e,i,n),o=this.nameLookup("helpers",r,"helper"),u=this.aliasable(this.contextName(0)+" != null ? "+this.contextName(0)+" : (container.nullContext || {})");return{params:i,paramsInit:s,name:o,callParams:[u].concat(i)}},setupParams:function(e,r,n){var i={},s=[],o=[],u=[],l=!n,a=void 0;l&&(n=[]),i.name=this.quotedString(e),i.hash=this.popStack(),this.trackIds&&(i.hashIds=this.popStack()),this.stringParams&&(i.hashTypes=this.popStack(),i.hashContexts=this.popStack());var h=this.popStack(),c=this.popStack();(c||h)&&(i.fn=c||"container.noop",i.inverse=h||"container.noop");for(var p=r;p--;)a=this.popStack(),n[p]=a,this.trackIds&&(u[p]=this.popStack()),this.stringParams&&(o[p]=this.popStack(),s[p]=this.popStack());return l&&(i.args=this.source.generateArray(n)),this.trackIds&&(i.ids=this.source.generateArray(u)),this.stringParams&&(i.types=this.source.generateArray(o),i.contexts=this.source.generateArray(s)),this.options.data&&(i.data="data"),this.useBlockParams&&(i.blockParams="blockParams"),i},setupHelperArgs:function(e,r,n,i){var s=this.setupParams(e,r,n);return s.loc=JSON.stringify(this.source.currentLocation),s=this.objectLiteral(s),i?(this.useRegister("options"),n.push("options"),["options=",s]):n?(n.push(s),""):s}};(function(){for(var t="break else new var case finally return void catch for switch while continue function this with default if throw delete in try do instanceof typeof abstract enum int short boolean export interface static byte extends long super char final native synchronized class float package throws const goto private transient debugger implements protected volatile double import public let yield await null true false".split(" "),e=pe.RESERVED_WORDS={},r=0,n=t.length;r<n;r++)e[t[r]]=!0})();pe.isValidJavaScriptVariableName=function(t){return!pe.RESERVED_WORDS[t]&&/^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(t)};function ea(t,e,r,n){var i=e.popStack(),s=0,o=r.length;for(t&&o--;s<o;s++)i=e.nameLookup(i,r[s],n);return t?[e.aliasable("container.strict"),"(",i,", ",e.quotedString(r[s]),", ",JSON.stringify(e.source.currentLocation)," )"]:i}ft.default=pe;ni.exports=ft.default});var ai=m((dt,oi)=>{"use strict";dt.__esModule=!0;function Ee(t){return t&&t.__esModule?t:{default:t}}var ta=un(),ra=Ee(ta),na=$e(),ia=Ee(na),cr=kn(),hr=Ln(),sa=ii(),oa=Ee(sa),aa=it(),ua=Ee(aa),la=Ht(),ca=Ee(la),ha=ra.default.create;function si(){var t=ha();return t.compile=function(e,r){return hr.compile(e,r,t)},t.precompile=function(e,r){return hr.precompile(e,r,t)},t.AST=ia.default,t.Compiler=hr.Compiler,t.JavaScriptCompiler=oa.default,t.Parser=cr.parser,t.parse=cr.parse,t.parseWithoutProcessing=cr.parseWithoutProcessing,t}var fe=si();fe.create=si;ca.default(fe);fe.Visitor=ua.default;fe.default=fe;dt.default=fe;oi.exports=dt.default});var ui=m(mt=>{"use strict";mt.__esModule=!0;mt.print=ma;mt.PrintVisitor=S;function pa(t){return t&&t.__esModule?t:{default:t}}var fa=it(),da=pa(fa);function ma(t){return new S().accept(t)}function S(){this.padding=0}S.prototype=new da.default;S.prototype.pad=function(t){for(var e="",r=0,n=this.padding;r<n;r++)e+="  ";return e+=t+` -`,e};S.prototype.Program=function(t){var e="",r=t.body,n=void 0,i=void 0;if(t.blockParams){var s="BLOCK PARAMS: [";for(n=0,i=t.blockParams.length;n<i;n++)s+=" "+t.blockParams[n];s+=" ]",e+=this.pad(s)}for(n=0,i=r.length;n<i;n++)e+=this.accept(r[n]);return this.padding--,e};S.prototype.MustacheStatement=function(t){return this.pad("{{ "+this.SubExpression(t)+" }}")};S.prototype.Decorator=function(t){return this.pad("{{ DIRECTIVE "+this.SubExpression(t)+" }}")};S.prototype.BlockStatement=S.prototype.DecoratorBlock=function(t){var e="";return e+=this.pad((t.type==="DecoratorBlock"?"DIRECTIVE ":"")+"BLOCK:"),this.padding++,e+=this.pad(this.SubExpression(t)),t.program&&(e+=this.pad("PROGRAM:"),this.padding++,e+=this.accept(t.program),this.padding--),t.inverse&&(t.program&&this.padding++,e+=this.pad("{{^}}"),this.padding++,e+=this.accept(t.inverse),this.padding--,t.program&&this.padding--),this.padding--,e};S.prototype.PartialStatement=function(t){var e="PARTIAL:"+t.name.original;return t.params[0]&&(e+=" "+this.accept(t.params[0])),t.hash&&(e+=" "+this.accept(t.hash)),this.pad("{{> "+e+" }}")};S.prototype.PartialBlockStatement=function(t){var e="PARTIAL BLOCK:"+t.name.original;return t.params[0]&&(e+=" "+this.accept(t.params[0])),t.hash&&(e+=" "+this.accept(t.hash)),e+=" "+this.pad("PROGRAM:"),this.padding++,e+=this.accept(t.program),this.padding--,this.pad("{{> "+e+" }}")};S.prototype.ContentStatement=function(t){return this.pad("CONTENT[ '"+t.value+"' ]")};S.prototype.CommentStatement=function(t){return this.pad("{{! '"+t.value+"' }}")};S.prototype.SubExpression=function(t){for(var e=t.params,r=[],n=void 0,i=0,s=e.length;i<s;i++)r.push(this.accept(e[i]));return e="["+r.join(", ")+"]",n=t.hash?" "+this.accept(t.hash):"",this.accept(t.path)+" "+e+n};S.prototype.PathExpression=function(t){var e=t.parts.join("/");return(t.data?"@":"")+"PATH:"+e};S.prototype.StringLiteral=function(t){return'"'+t.value+'"'};S.prototype.NumberLiteral=function(t){return"NUMBER{"+t.value+"}"};S.prototype.BooleanLiteral=function(t){return"BOOLEAN{"+t.value+"}"};S.prototype.UndefinedLiteral=function(){return"UNDEFINED"};S.prototype.NullLiteral=function(){return"NULL"};S.prototype.Hash=function(t){for(var e=t.pairs,r=[],n=0,i=e.length;n<i;n++)r.push(this.accept(e[n]));return"HASH{"+r.join(", ")+"}"};S.prototype.HashPair=function(t){return t.key+"="+this.accept(t.value)}});var pr=m((Wa,hi)=>{var gt=ai().default,ci=ui();gt.PrintVisitor=ci.PrintVisitor;gt.print=ci.print;hi.exports=gt;function li(t,e){var r=ne("fs"),n=r.readFileSync(e,"utf8");t.exports=gt.compile(n)}typeof ne!="undefined"&&ne.extensions&&(ne.extensions[".handlebars"]=li,ne.extensions[".hbs"]=li)});var K=ie(pr()),St=ie(Ke()),we=ie($e()),Oe=ie(P()),gr=ie(Ve());var fr=Symbol("helper"),dr=Symbol("ambiguous"),mr=Symbol("simple");var pi=ie(P());function vt(t){return"program"in t||"inverse"in t}function fi(t){return t.type==="Decorator"||t.type==="DecoratorBlock"}function di(t){return delete t.lookupProperty,t}function xe(){return""}function mi(t,e){return(!e||!("root"in e))&&(e=e?(0,pi.createFrame)(e):{},e.root=t),e}function gi(t){if(!("parts"in t.path)){let r=t.path,n=r.original;t.path={type:"PathExpression",data:!1,depth:0,parts:[n+""],original:n+"",loc:r.loc}}}function vi(){try{return new Function,!0}catch(t){return!1}}var _t=class extends K.default.Visitor{constructor(r,n,i={}){super();this.contexts=[];this.output=[];this.blockParamNames=[];this.blockParamValues=[];this.processedRootDecorators=!1;this.processedDecoratorsForProgram=new Set;this.env=r,typeof n!="string"&&n.type==="Program"?this.ast=n:this.template=n,this.compileOptions=E({data:!0},i),this.compileOptions.knownHelpers=Object.assign(Object.create(null),{helperMissing:!0,blockHelperMissing:!0,each:!0,if:!0,unless:!0,with:!0,log:!0,lookup:!0},this.compileOptions.knownHelpers);let s=(0,St.createProtoAccessControl)({}),o=this.container={helpers:{},partials:{},decorators:{},strict(u,l,a){if(!u||!(l in u))throw new K.default.Exception('"'+l+'" not defined in '+u,{loc:a});return o.lookupProperty(u,l)},lookupProperty(u,l){let a=u[l];if(a==null||Object.prototype.hasOwnProperty.call(u,l)||(0,St.resultIsAllowed)(a,s,l))return a},lambda(u,l){return typeof u=="function"?u.call(l):u},data(u,l){for(;u&&l--;)u=u._parent;return u},hooks:{}};this.defaultHelperOptions={lookupProperty:o.lookupProperty}}render(r,n={}){this.contexts=[r],this.output=[],this.runtimeOptions=E({},n),this.container.helpers=E(E({},this.env.helpers),n.helpers),this.container.partials=E(E({},this.env.partials),n.partials),this.container.decorators=E(E({},this.env.decorators),n.decorators),this.container.hooks={},this.processedRootDecorators=!1,this.processedDecoratorsForProgram.clear(),this.compileOptions.data&&(this.runtimeOptions.data=mi(r,this.runtimeOptions.data));let i=!1;(0,gr.moveHelperToHooks)(this.container,"helperMissing",i),(0,gr.moveHelperToHooks)(this.container,"blockHelperMissing",i),this.ast||(this.ast=K.default.parse(this.template));let s=l=>this.generateProgramFunction(this.ast)(l,this.runtimeOptions),o=this.processDecorators(this.ast,s);this.processedRootDecorators=!0;let u=o(this.context,n);return o===s?(this.output.push(u),this.output.join("")):u}Program(r){this.blockParamNames.unshift(r.blockParams),super.Program(r),this.blockParamNames.shift()}MustacheStatement(r){this.processStatementOrExpression(r)}BlockStatement(r){this.processStatementOrExpression(r)}PartialStatement(r){this.invokePartial(r)}PartialBlockStatement(r){this.invokePartial(r)}DecoratorBlock(r){}Decorator(r){}SubExpression(r){this.processStatementOrExpression(r)}PathExpression(r){let n=!r.depth&&!we.default.helpers.scopedId(r)&&this.blockParamIndex(r.parts[0]),i;n?i=this.lookupBlockParam(n,r):r.data?i=this.lookupData(this.runtimeOptions.data,r):i=this.resolvePath(this.contexts[r.depth],r),this.output.push(i)}ContentStatement(r){this.output.push(r.value)}StringLiteral(r){this.output.push(r.value)}NumberLiteral(r){this.output.push(r.value)}BooleanLiteral(r){this.output.push(r.value)}UndefinedLiteral(){this.output.push(void 0)}NullLiteral(){this.output.push(null)}processDecorators(r,n){if(!this.processedDecoratorsForProgram.has(r)){this.processedDecoratorsForProgram.add(r);let i={};for(let s of r.body)fi(s)&&(n=this.processDecorator(s,n,i))}return n}processDecorator(r,n,i){let s=this.setupDecoratorOptions(r),o=this.container.lookupProperty(this.container.decorators,s.name)(n,i,this.container,s);return Object.assign(o||n,i)}processStatementOrExpression(r){switch(gi(r),this.classifyNode(r)){case mr:this.processSimpleNode(r);break;case fr:this.processHelperNode(r);break;case dr:this.processAmbiguousNode(r);break}}classifyNode(r){let n=we.default.helpers.simpleId(r.path),i=n&&!!this.blockParamIndex(r.path.parts[0]),s=!i&&we.default.helpers.helperExpression(r),o=!i&&(s||n);if(o&&!s){let u=r.path.parts[0],l=this.compileOptions;l.knownHelpers&&l.knownHelpers[u]?s=!0:l.knownHelpersOnly&&(o=!1)}return s?fr:o?dr:mr}blockParamIndex(r){for(let n=0,i=this.blockParamNames.length;n<i;n++){let s=this.blockParamNames[n],o=s&&(0,Oe.indexOf)(s,r);if(s&&o>=0)return[n,o]}}lookupBlockParam(r,n){let i=this.blockParamValues[r[0]][r[1]];return this.resolvePath(i,n,1)}lookupData(r,n){return n.depth&&(r=this.container.data(r,n.depth)),this.resolvePath(r,n)}processSimpleNode(r){let n=r.path;n.strict=!0;let i=this.resolveNodes(n)[0],s=this.container.lambda(i,this.context);vt(r)?this.blockValue(r,s):this.output.push(s)}blockValue(r,n){let i=r.path.original,s=this.setupParams(r,i),o=this.container.hooks.blockHelperMissing.call(this.context,n,s);this.output.push(o)}processHelperNode(r){let i=r.path.parts[0];if(this.compileOptions.knownHelpers&&this.compileOptions.knownHelpers[i])this.invokeKnownHelper(r);else{if(this.compileOptions.knownHelpersOnly)throw new K.default.Exception("You specified knownHelpersOnly, but used the unknown helper "+i,r);this.invokeHelper(r)}}invokeKnownHelper(r){let n=r.path.parts[0],i=this.setupHelper(r,n),s=i.fn.call(i.context,...i.params,i.options);this.output.push(s)}invokeHelper(r){let n=r.path,i=n.original,s=we.default.helpers.simpleId(n),o=this.setupHelper(r,i),u=s&&o.fn?r.loc:n.loc;o.fn=s&&o.fn||this.resolveNodes(n)[0],o.fn||(this.compileOptions.strict?o.fn=this.container.strict(o.context,i,u):o.fn=this.container.hooks.helperMissing);let l=o.fn.call(o.context,...o.params,o.options);this.output.push(l)}invokePartial(r){var p,d,g;let{params:n}=r;if(n.length>1)throw new K.default.Exception(`Unsupported number of partial arguments: ${n.length}`,r);let s=r.name.type==="SubExpression"?this.resolveNodes(r.name).join(""):r.name.original,o=this.setupParams(r,s);o.helpers=this.container.helpers,o.partials=this.container.partials,o.decorators=this.container.decorators;let u;if("fn"in o&&o.fn!==xe){let{fn:_}=o,O=(p=o.data)==null?void 0:p["partial-block"];o.data=(0,Oe.createFrame)(o.data),u=o.data["partial-block"]=function(T,q={}){return q.data=(0,Oe.createFrame)(q.data),q.data["partial-block"]=O,_(T,q)},_.partials&&(o.partials=E(E({},o.partials),_.partials))}let l={};n.length===0&&!this.compileOptions.explicitPartialContext?l=this.context:n.length===1&&(l=this.resolveNodes(n[0])[0]),Object.keys(o.hash).length>0&&(l=Object.assign({},l,o.hash));let a=(g=(d=this.container.partials[s])!=null?d:u)!=null?g:K.default.VM.resolvePartial(void 0,void 0,o);if(a===void 0)throw new K.default.Exception(`The partial ${s} could not be found`);let h;typeof a=="string"?(h=this.env.compileAST(a,this.compileOptions),s in this.container.partials&&(this.container.partials[s]=h)):h=a;let c=h(l,o);"indent"in r&&(c=r.indent+(this.compileOptions.preventIndent?c:c.replace(/\n(?!$)/g,` -${r.indent}`))),this.output.push(c)}processAmbiguousNode(r){let n=r.path.parts[0],i=this.setupHelper(r,n),{fn:s}=i,o=s?r.loc:r.path.loc;s=s!=null?s:this.resolveNodes(r.path)[0],s===void 0&&(this.compileOptions.strict?s=this.container.strict(i.context,n,o):(s=i.context!=null?this.container.lookupProperty(i.context,n):i.context,s==null&&(s=this.container.hooks.helperMissing)));let u=typeof s=="function"?s.call(i.context,...i.params,i.options):s;if(vt(r)){let l=i.fn?u:this.container.hooks.blockHelperMissing.call(this.context,u,i.options);l!=null&&this.output.push(l)}else r.escaped===!1||this.compileOptions.noEscape===!0||typeof u!="string"?this.output.push(u):this.output.push(K.default.escapeExpression(u))}setupHelper(r,n){return{fn:this.container.lookupProperty(this.container.helpers,n),context:this.context,params:this.resolveNodes(r.params),options:this.setupParams(r,n)}}setupDecoratorOptions(r){let n=r.path.original,i=di(this.setupParams(r,n));if(r.params.length>0)if(this.processedRootDecorators)i.args=this.resolveNodes(r.params);else{let s=this.contexts.shift();i.args=this.resolveNodes(r.params),this.contexts.unshift(s)}else i.args=[];return i}setupParams(r,n){let i=E({name:n,hash:this.getHash(r),data:this.runtimeOptions.data,loc:{start:r.loc.start,end:r.loc.end}},this.defaultHelperOptions);return vt(r)&&(i.fn=r.program?this.processDecorators(r.program,this.generateProgramFunction(r.program)):xe,i.inverse=r.inverse?this.processDecorators(r.inverse,this.generateProgramFunction(r.inverse)):xe),i}generateProgramFunction(r){var i,s;if(!r)return xe;let n=(o,u={})=>{u=E({},u),u.data=u.data||this.runtimeOptions.data,u.blockParams&&(u.blockParams=u.blockParams.concat(this.runtimeOptions.blockParams)),u.partials=u.partials||this.runtimeOptions.partials;let l=this.runtimeOptions;this.runtimeOptions=u;let a=o!==this.context;a&&this.contexts.unshift(o),this.blockParamValues.unshift(u.blockParams||[]);let h=this.resolveNodes(r).join("");return this.blockParamValues.shift(),a&&this.contexts.shift(),this.runtimeOptions=l,h};return n.blockParams=(s=(i=r.blockParams)==null?void 0:i.length)!=null?s:0,n}getHash(r){let n={};if(!r.hash)return n;for(let{key:i,value:s}of r.hash.pairs)n[i]=this.resolveNodes(s)[0];return n}resolvePath(r,n,i=0){if(this.compileOptions.strict||this.compileOptions.assumeObjects)return this.strictLookup(r,n);for(;i<n.parts.length;i++){if(r==null)return;r=this.container.lookupProperty(r,n.parts[i])}return r}strictLookup(r,n){let i=this.compileOptions.strict&&n.strict,s=n.parts.length-(i?1:0);for(let o=0;o<s;o++)r=this.container.lookupProperty(r,n.parts[o]);return i?this.container.strict(r,n.parts[s],n.loc):r}resolveNodes(r){let n=this.output;this.output=[],Array.isArray(r)?this.acceptArray(r):this.accept(r);let i=this.output;return this.output=n,i}get context(){return this.contexts[0]}};var J=pr(),ga=J.create;J.create=function(){let t=ga.call(J);return t.compileAST=J.compileAST,t};J.compileAST=function(t,e){if(t==null||typeof t!="string"&&t.type!=="Program")throw new J.Exception(`You must pass a string or Handlebars AST to Handlebars.compileAST. You passed ${t}`);let r=new _t(this!=null?this:J,t,e);return(n,i)=>r.render(n,i)};globalThis.Handlebars=J;globalThis.handlebarsCompileFnName=vi()?"compile":"compileAST";})(); -//# sourceMappingURL=handlebars.min.js.map diff --git a/ext/lib/handlebars.min.js.map b/ext/lib/handlebars.min.js.map deleted file mode 100644 index d9484007..00000000 --- a/ext/lib/handlebars.min.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ -  "version": 3, -  "sources": ["node_modules/handlebars/lib/handlebars/utils.js", "node_modules/handlebars/lib/handlebars/exception.js", "node_modules/handlebars/lib/handlebars/helpers/block-helper-missing.js", "node_modules/handlebars/lib/handlebars/helpers/each.js", "node_modules/handlebars/lib/handlebars/helpers/helper-missing.js", "node_modules/handlebars/lib/handlebars/helpers/if.js", "node_modules/handlebars/lib/handlebars/helpers/log.js", "node_modules/handlebars/lib/handlebars/helpers/lookup.js", "node_modules/handlebars/lib/handlebars/helpers/with.js", "node_modules/handlebars/lib/handlebars/helpers.js", "node_modules/handlebars/lib/handlebars/decorators/inline.js", "node_modules/handlebars/lib/handlebars/decorators.js", "node_modules/handlebars/lib/handlebars/logger.js", "node_modules/handlebars/lib/handlebars/internal/create-new-lookup-object.js", "node_modules/handlebars/lib/handlebars/internal/proto-access.js", "node_modules/handlebars/lib/handlebars/base.js", "node_modules/handlebars/lib/handlebars/safe-string.js", "node_modules/handlebars/lib/handlebars/internal/wrapHelper.js", "node_modules/handlebars/lib/handlebars/runtime.js", "node_modules/handlebars/lib/handlebars/no-conflict.js", "node_modules/handlebars/lib/handlebars.runtime.js", "node_modules/handlebars/lib/handlebars/compiler/ast.js", "node_modules/handlebars/lib/handlebars/compiler/parser.js", "node_modules/handlebars/lib/handlebars/compiler/visitor.js", "node_modules/handlebars/lib/handlebars/compiler/whitespace-control.js", "node_modules/handlebars/lib/handlebars/compiler/helpers.js", "node_modules/handlebars/lib/handlebars/compiler/base.js", "node_modules/handlebars/lib/handlebars/compiler/compiler.js", "node_modules/source-map/lib/base64.js", "node_modules/source-map/lib/base64-vlq.js", "node_modules/source-map/lib/util.js", "node_modules/source-map/lib/array-set.js", "node_modules/source-map/lib/mapping-list.js", "node_modules/source-map/lib/source-map-generator.js", "node_modules/source-map/lib/binary-search.js", "node_modules/source-map/lib/quick-sort.js", "node_modules/source-map/lib/source-map-consumer.js", "node_modules/source-map/lib/source-node.js", "node_modules/source-map/source-map.js", "node_modules/handlebars/lib/handlebars/compiler/code-gen.js", "node_modules/handlebars/lib/handlebars/compiler/javascript-compiler.js", "node_modules/handlebars/lib/handlebars.js", "node_modules/handlebars/lib/handlebars/compiler/printer.js", "node_modules/handlebars/lib/index.js", "src/hb/src/visitor.ts", "src/hb/src/symbols.ts", "src/hb/src/utils.ts", "src/hb/src/handlebars.ts", "src/hb/index.ts"], -  "sourcesContent": ["const escape = {\n  '&': '&',\n  '<': '<',\n  '>': '>',\n  '\"': '"',\n  \"'\": ''',\n  '`': '`',\n  '=': '='\n};\n\nconst badChars = /[&<>\"'`=]/g,\n  possible = /[&<>\"'`=]/;\n\nfunction escapeChar(chr) {\n  return escape[chr];\n}\n\nexport function extend(obj /* , ...source */) {\n  for (let i = 1; i < arguments.length; i++) {\n    for (let key in arguments[i]) {\n      if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {\n        obj[key] = arguments[i][key];\n      }\n    }\n  }\n\n  return obj;\n}\n\nexport let toString = Object.prototype.toString;\n\n// Sourced from lodash\n// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt\n/* eslint-disable func-style */\nlet isFunction = function(value) {\n  return typeof value === 'function';\n};\n// fallback for older versions of Chrome and Safari\n/* istanbul ignore next */\nif (isFunction(/x/)) {\n  isFunction = function(value) {\n    return (\n      typeof value === 'function' &&\n      toString.call(value) === '[object Function]'\n    );\n  };\n}\nexport { isFunction };\n/* eslint-enable func-style */\n\n/* istanbul ignore next */\nexport const isArray =\n  Array.isArray ||\n  function(value) {\n    return value && typeof value === 'object'\n      ? toString.call(value) === '[object Array]'\n      : false;\n  };\n\n// Older IE versions do not directly support indexOf so we must implement our own, sadly.\nexport function indexOf(array, value) {\n  for (let i = 0, len = array.length; i < len; i++) {\n    if (array[i] === value) {\n      return i;\n    }\n  }\n  return -1;\n}\n\nexport function escapeExpression(string) {\n  if (typeof string !== 'string') {\n    // don't escape SafeStrings, since they're already safe\n    if (string && string.toHTML) {\n      return string.toHTML();\n    } else if (string == null) {\n      return '';\n    } else if (!string) {\n      return string + '';\n    }\n\n    // Force a string conversion as this will be done by the append regardless and\n    // the regex test will do this transparently behind the scenes, causing issues if\n    // an object's to string has escaped characters in it.\n    string = '' + string;\n  }\n\n  if (!possible.test(string)) {\n    return string;\n  }\n  return string.replace(badChars, escapeChar);\n}\n\nexport function isEmpty(value) {\n  if (!value && value !== 0) {\n    return true;\n  } else if (isArray(value) && value.length === 0) {\n    return true;\n  } else {\n    return false;\n  }\n}\n\nexport function createFrame(object) {\n  let frame = extend({}, object);\n  frame._parent = object;\n  return frame;\n}\n\nexport function blockParams(params, ids) {\n  params.path = ids;\n  return params;\n}\n\nexport function appendContextPath(contextPath, id) {\n  return (contextPath ? contextPath + '.' : '') + id;\n}\n", "const errorProps = [\n  'description',\n  'fileName',\n  'lineNumber',\n  'endLineNumber',\n  'message',\n  'name',\n  'number',\n  'stack'\n];\n\nfunction Exception(message, node) {\n  let loc = node && node.loc,\n    line,\n    endLineNumber,\n    column,\n    endColumn;\n\n  if (loc) {\n    line = loc.start.line;\n    endLineNumber = loc.end.line;\n    column = loc.start.column;\n    endColumn = loc.end.column;\n\n    message += ' - ' + line + ':' + column;\n  }\n\n  let tmp = Error.prototype.constructor.call(this, message);\n\n  // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n  for (let idx = 0; idx < errorProps.length; idx++) {\n    this[errorProps[idx]] = tmp[errorProps[idx]];\n  }\n\n  /* istanbul ignore else */\n  if (Error.captureStackTrace) {\n    Error.captureStackTrace(this, Exception);\n  }\n\n  try {\n    if (loc) {\n      this.lineNumber = line;\n      this.endLineNumber = endLineNumber;\n\n      // Work around issue under safari where we can't directly set the column value\n      /* istanbul ignore next */\n      if (Object.defineProperty) {\n        Object.defineProperty(this, 'column', {\n          value: column,\n          enumerable: true\n        });\n        Object.defineProperty(this, 'endColumn', {\n          value: endColumn,\n          enumerable: true\n        });\n      } else {\n        this.column = column;\n        this.endColumn = endColumn;\n      }\n    }\n  } catch (nop) {\n    /* Ignore if the browser is very particular */\n  }\n}\n\nException.prototype = new Error();\n\nexport default Exception;\n", "import { appendContextPath, createFrame, isArray } from '../utils';\n\nexport default function(instance) {\n  instance.registerHelper('blockHelperMissing', function(context, options) {\n    let inverse = options.inverse,\n      fn = options.fn;\n\n    if (context === true) {\n      return fn(this);\n    } else if (context === false || context == null) {\n      return inverse(this);\n    } else if (isArray(context)) {\n      if (context.length > 0) {\n        if (options.ids) {\n          options.ids = [options.name];\n        }\n\n        return instance.helpers.each(context, options);\n      } else {\n        return inverse(this);\n      }\n    } else {\n      if (options.data && options.ids) {\n        let data = createFrame(options.data);\n        data.contextPath = appendContextPath(\n          options.data.contextPath,\n          options.name\n        );\n        options = { data: data };\n      }\n\n      return fn(context, options);\n    }\n  });\n}\n", "import {\n  appendContextPath,\n  blockParams,\n  createFrame,\n  isArray,\n  isFunction\n} from '../utils';\nimport Exception from '../exception';\n\nexport default function(instance) {\n  instance.registerHelper('each', function(context, options) {\n    if (!options) {\n      throw new Exception('Must pass iterator to #each');\n    }\n\n    let fn = options.fn,\n      inverse = options.inverse,\n      i = 0,\n      ret = '',\n      data,\n      contextPath;\n\n    if (options.data && options.ids) {\n      contextPath =\n        appendContextPath(options.data.contextPath, options.ids[0]) + '.';\n    }\n\n    if (isFunction(context)) {\n      context = context.call(this);\n    }\n\n    if (options.data) {\n      data = createFrame(options.data);\n    }\n\n    function execIteration(field, index, last) {\n      if (data) {\n        data.key = field;\n        data.index = index;\n        data.first = index === 0;\n        data.last = !!last;\n\n        if (contextPath) {\n          data.contextPath = contextPath + field;\n        }\n      }\n\n      ret =\n        ret +\n        fn(context[field], {\n          data: data,\n          blockParams: blockParams(\n            [context[field], field],\n            [contextPath + field, null]\n          )\n        });\n    }\n\n    if (context && typeof context === 'object') {\n      if (isArray(context)) {\n        for (let j = context.length; i < j; i++) {\n          if (i in context) {\n            execIteration(i, i, i === context.length - 1);\n          }\n        }\n      } else if (global.Symbol && context[global.Symbol.iterator]) {\n        const newContext = [];\n        const iterator = context[global.Symbol.iterator]();\n        for (let it = iterator.next(); !it.done; it = iterator.next()) {\n          newContext.push(it.value);\n        }\n        context = newContext;\n        for (let j = context.length; i < j; i++) {\n          execIteration(i, i, i === context.length - 1);\n        }\n      } else {\n        let priorKey;\n\n        Object.keys(context).forEach(key => {\n          // We're running the iterations one step out of sync so we can detect\n          // the last iteration without have to scan the object twice and create\n          // an itermediate keys array.\n          if (priorKey !== undefined) {\n            execIteration(priorKey, i - 1);\n          }\n          priorKey = key;\n          i++;\n        });\n        if (priorKey !== undefined) {\n          execIteration(priorKey, i - 1, true);\n        }\n      }\n    }\n\n    if (i === 0) {\n      ret = inverse(this);\n    }\n\n    return ret;\n  });\n}\n", "import Exception from '../exception';\n\nexport default function(instance) {\n  instance.registerHelper('helperMissing', function(/* [args, ]options */) {\n    if (arguments.length === 1) {\n      // A missing field in a {{foo}} construct.\n      return undefined;\n    } else {\n      // Someone is actually trying to call something, blow up.\n      throw new Exception(\n        'Missing helper: \"' + arguments[arguments.length - 1].name + '\"'\n      );\n    }\n  });\n}\n", "import { isEmpty, isFunction } from '../utils';\nimport Exception from '../exception';\n\nexport default function(instance) {\n  instance.registerHelper('if', function(conditional, options) {\n    if (arguments.length != 2) {\n      throw new Exception('#if requires exactly one argument');\n    }\n    if (isFunction(conditional)) {\n      conditional = conditional.call(this);\n    }\n\n    // Default behavior is to render the positive path if the value is truthy and not empty.\n    // The `includeZero` option may be set to treat the condtional as purely not empty based on the\n    // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.\n    if ((!options.hash.includeZero && !conditional) || isEmpty(conditional)) {\n      return options.inverse(this);\n    } else {\n      return options.fn(this);\n    }\n  });\n\n  instance.registerHelper('unless', function(conditional, options) {\n    if (arguments.length != 2) {\n      throw new Exception('#unless requires exactly one argument');\n    }\n    return instance.helpers['if'].call(this, conditional, {\n      fn: options.inverse,\n      inverse: options.fn,\n      hash: options.hash\n    });\n  });\n}\n", "export default function(instance) {\n  instance.registerHelper('log', function(/* message, options */) {\n    let args = [undefined],\n      options = arguments[arguments.length - 1];\n    for (let i = 0; i < arguments.length - 1; i++) {\n      args.push(arguments[i]);\n    }\n\n    let level = 1;\n    if (options.hash.level != null) {\n      level = options.hash.level;\n    } else if (options.data && options.data.level != null) {\n      level = options.data.level;\n    }\n    args[0] = level;\n\n    instance.log(...args);\n  });\n}\n", "export default function(instance) {\n  instance.registerHelper('lookup', function(obj, field, options) {\n    if (!obj) {\n      // Note for 5.0: Change to \"obj == null\" in 5.0\n      return obj;\n    }\n    return options.lookupProperty(obj, field);\n  });\n}\n", "import {\n  appendContextPath,\n  blockParams,\n  createFrame,\n  isEmpty,\n  isFunction\n} from '../utils';\nimport Exception from '../exception';\n\nexport default function(instance) {\n  instance.registerHelper('with', function(context, options) {\n    if (arguments.length != 2) {\n      throw new Exception('#with requires exactly one argument');\n    }\n    if (isFunction(context)) {\n      context = context.call(this);\n    }\n\n    let fn = options.fn;\n\n    if (!isEmpty(context)) {\n      let data = options.data;\n      if (options.data && options.ids) {\n        data = createFrame(options.data);\n        data.contextPath = appendContextPath(\n          options.data.contextPath,\n          options.ids[0]\n        );\n      }\n\n      return fn(context, {\n        data: data,\n        blockParams: blockParams([context], [data && data.contextPath])\n      });\n    } else {\n      return options.inverse(this);\n    }\n  });\n}\n", "import registerBlockHelperMissing from './helpers/block-helper-missing';\nimport registerEach from './helpers/each';\nimport registerHelperMissing from './helpers/helper-missing';\nimport registerIf from './helpers/if';\nimport registerLog from './helpers/log';\nimport registerLookup from './helpers/lookup';\nimport registerWith from './helpers/with';\n\nexport function registerDefaultHelpers(instance) {\n  registerBlockHelperMissing(instance);\n  registerEach(instance);\n  registerHelperMissing(instance);\n  registerIf(instance);\n  registerLog(instance);\n  registerLookup(instance);\n  registerWith(instance);\n}\n\nexport function moveHelperToHooks(instance, helperName, keepHelper) {\n  if (instance.helpers[helperName]) {\n    instance.hooks[helperName] = instance.helpers[helperName];\n    if (!keepHelper) {\n      delete instance.helpers[helperName];\n    }\n  }\n}\n", "import { extend } from '../utils';\n\nexport default function(instance) {\n  instance.registerDecorator('inline', function(fn, props, container, options) {\n    let ret = fn;\n    if (!props.partials) {\n      props.partials = {};\n      ret = function(context, options) {\n        // Create a new partials stack frame prior to exec.\n        let original = container.partials;\n        container.partials = extend({}, original, props.partials);\n        let ret = fn(context, options);\n        container.partials = original;\n        return ret;\n      };\n    }\n\n    props.partials[options.args[0]] = options.fn;\n\n    return ret;\n  });\n}\n", "import registerInline from './decorators/inline';\n\nexport function registerDefaultDecorators(instance) {\n  registerInline(instance);\n}\n", "import { indexOf } from './utils';\n\nlet logger = {\n  methodMap: ['debug', 'info', 'warn', 'error'],\n  level: 'info',\n\n  // Maps a given level value to the `methodMap` indexes above.\n  lookupLevel: function(level) {\n    if (typeof level === 'string') {\n      let levelMap = indexOf(logger.methodMap, level.toLowerCase());\n      if (levelMap >= 0) {\n        level = levelMap;\n      } else {\n        level = parseInt(level, 10);\n      }\n    }\n\n    return level;\n  },\n\n  // Can be overridden in the host environment\n  log: function(level, ...message) {\n    level = logger.lookupLevel(level);\n\n    if (\n      typeof console !== 'undefined' &&\n      logger.lookupLevel(logger.level) <= level\n    ) {\n      let method = logger.methodMap[level];\n      // eslint-disable-next-line no-console\n      if (!console[method]) {\n        method = 'log';\n      }\n      console[method](...message); // eslint-disable-line no-console\n    }\n  }\n};\n\nexport default logger;\n", "import { extend } from '../utils';\n\n/**\n * Create a new object with \"null\"-prototype to avoid truthy results on prototype properties.\n * The resulting object can be used with \"object[property]\" to check if a property exists\n * @param {...object} sources a varargs parameter of source objects that will be merged\n * @returns {object}\n */\nexport function createNewLookupObject(...sources) {\n  return extend(Object.create(null), ...sources);\n}\n", "import { createNewLookupObject } from './create-new-lookup-object';\nimport * as logger from '../logger';\n\nconst loggedProperties = Object.create(null);\n\nexport function createProtoAccessControl(runtimeOptions) {\n  let defaultMethodWhiteList = Object.create(null);\n  defaultMethodWhiteList['constructor'] = false;\n  defaultMethodWhiteList['__defineGetter__'] = false;\n  defaultMethodWhiteList['__defineSetter__'] = false;\n  defaultMethodWhiteList['__lookupGetter__'] = false;\n\n  let defaultPropertyWhiteList = Object.create(null);\n  // eslint-disable-next-line no-proto\n  defaultPropertyWhiteList['__proto__'] = false;\n\n  return {\n    properties: {\n      whitelist: createNewLookupObject(\n        defaultPropertyWhiteList,\n        runtimeOptions.allowedProtoProperties\n      ),\n      defaultValue: runtimeOptions.allowProtoPropertiesByDefault\n    },\n    methods: {\n      whitelist: createNewLookupObject(\n        defaultMethodWhiteList,\n        runtimeOptions.allowedProtoMethods\n      ),\n      defaultValue: runtimeOptions.allowProtoMethodsByDefault\n    }\n  };\n}\n\nexport function resultIsAllowed(result, protoAccessControl, propertyName) {\n  if (typeof result === 'function') {\n    return checkWhiteList(protoAccessControl.methods, propertyName);\n  } else {\n    return checkWhiteList(protoAccessControl.properties, propertyName);\n  }\n}\n\nfunction checkWhiteList(protoAccessControlForType, propertyName) {\n  if (protoAccessControlForType.whitelist[propertyName] !== undefined) {\n    return protoAccessControlForType.whitelist[propertyName] === true;\n  }\n  if (protoAccessControlForType.defaultValue !== undefined) {\n    return protoAccessControlForType.defaultValue;\n  }\n  logUnexpecedPropertyAccessOnce(propertyName);\n  return false;\n}\n\nfunction logUnexpecedPropertyAccessOnce(propertyName) {\n  if (loggedProperties[propertyName] !== true) {\n    loggedProperties[propertyName] = true;\n    logger.log(\n      'error',\n      `Handlebars: Access has been denied to resolve the property \"${propertyName}\" because it is not an \"own property\" of its parent.\\n` +\n        `You can add a runtime option to disable the check or this warning:\\n` +\n        `See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details`\n    );\n  }\n}\n\nexport function resetLoggedProperties() {\n  Object.keys(loggedProperties).forEach(propertyName => {\n    delete loggedProperties[propertyName];\n  });\n}\n", "import { createFrame, extend, toString } from './utils';\nimport Exception from './exception';\nimport { registerDefaultHelpers } from './helpers';\nimport { registerDefaultDecorators } from './decorators';\nimport logger from './logger';\nimport { resetLoggedProperties } from './internal/proto-access';\n\nexport const VERSION = '4.7.7';\nexport const COMPILER_REVISION = 8;\nexport const LAST_COMPATIBLE_COMPILER_REVISION = 7;\n\nexport const REVISION_CHANGES = {\n  1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it\n  2: '== 1.0.0-rc.3',\n  3: '== 1.0.0-rc.4',\n  4: '== 1.x.x',\n  5: '== 2.0.0-alpha.x',\n  6: '>= 2.0.0-beta.1',\n  7: '>= 4.0.0 <4.3.0',\n  8: '>= 4.3.0'\n};\n\nconst objectType = '[object Object]';\n\nexport function HandlebarsEnvironment(helpers, partials, decorators) {\n  this.helpers = helpers || {};\n  this.partials = partials || {};\n  this.decorators = decorators || {};\n\n  registerDefaultHelpers(this);\n  registerDefaultDecorators(this);\n}\n\nHandlebarsEnvironment.prototype = {\n  constructor: HandlebarsEnvironment,\n\n  logger: logger,\n  log: logger.log,\n\n  registerHelper: function(name, fn) {\n    if (toString.call(name) === objectType) {\n      if (fn) {\n        throw new Exception('Arg not supported with multiple helpers');\n      }\n      extend(this.helpers, name);\n    } else {\n      this.helpers[name] = fn;\n    }\n  },\n  unregisterHelper: function(name) {\n    delete this.helpers[name];\n  },\n\n  registerPartial: function(name, partial) {\n    if (toString.call(name) === objectType) {\n      extend(this.partials, name);\n    } else {\n      if (typeof partial === 'undefined') {\n        throw new Exception(\n          `Attempting to register a partial called \"${name}\" as undefined`\n        );\n      }\n      this.partials[name] = partial;\n    }\n  },\n  unregisterPartial: function(name) {\n    delete this.partials[name];\n  },\n\n  registerDecorator: function(name, fn) {\n    if (toString.call(name) === objectType) {\n      if (fn) {\n        throw new Exception('Arg not supported with multiple decorators');\n      }\n      extend(this.decorators, name);\n    } else {\n      this.decorators[name] = fn;\n    }\n  },\n  unregisterDecorator: function(name) {\n    delete this.decorators[name];\n  },\n  /**\n   * Reset the memory of illegal property accesses that have already been logged.\n   * @deprecated should only be used in handlebars test-cases\n   */\n  resetLoggedPropertyAccesses() {\n    resetLoggedProperties();\n  }\n};\n\nexport let log = logger.log;\n\nexport { createFrame, logger };\n", "// Build out our basic SafeString type\nfunction SafeString(string) {\n  this.string = string;\n}\n\nSafeString.prototype.toString = SafeString.prototype.toHTML = function() {\n  return '' + this.string;\n};\n\nexport default SafeString;\n", "export function wrapHelper(helper, transformOptionsFn) {\n  if (typeof helper !== 'function') {\n    // This should not happen, but apparently it does in https://github.com/wycats/handlebars.js/issues/1639\n    // We try to make the wrapper least-invasive by not wrapping it, if the helper is not a function.\n    return helper;\n  }\n  let wrapper = function(/* dynamic arguments */) {\n    const options = arguments[arguments.length - 1];\n    arguments[arguments.length - 1] = transformOptionsFn(options);\n    return helper.apply(this, arguments);\n  };\n  return wrapper;\n}\n", "import * as Utils from './utils';\nimport Exception from './exception';\nimport {\n  COMPILER_REVISION,\n  createFrame,\n  LAST_COMPATIBLE_COMPILER_REVISION,\n  REVISION_CHANGES\n} from './base';\nimport { moveHelperToHooks } from './helpers';\nimport { wrapHelper } from './internal/wrapHelper';\nimport {\n  createProtoAccessControl,\n  resultIsAllowed\n} from './internal/proto-access';\n\nexport function checkRevision(compilerInfo) {\n  const compilerRevision = (compilerInfo && compilerInfo[0]) || 1,\n    currentRevision = COMPILER_REVISION;\n\n  if (\n    compilerRevision >= LAST_COMPATIBLE_COMPILER_REVISION &&\n    compilerRevision <= COMPILER_REVISION\n  ) {\n    return;\n  }\n\n  if (compilerRevision < LAST_COMPATIBLE_COMPILER_REVISION) {\n    const runtimeVersions = REVISION_CHANGES[currentRevision],\n      compilerVersions = REVISION_CHANGES[compilerRevision];\n    throw new Exception(\n      'Template was precompiled with an older version of Handlebars than the current runtime. ' +\n        'Please update your precompiler to a newer version (' +\n        runtimeVersions +\n        ') or downgrade your runtime to an older version (' +\n        compilerVersions +\n        ').'\n    );\n  } else {\n    // Use the embedded version info since the runtime doesn't know about this revision yet\n    throw new Exception(\n      'Template was precompiled with a newer version of Handlebars than the current runtime. ' +\n        'Please update your runtime to a newer version (' +\n        compilerInfo[1] +\n        ').'\n    );\n  }\n}\n\nexport function template(templateSpec, env) {\n  /* istanbul ignore next */\n  if (!env) {\n    throw new Exception('No environment passed to template');\n  }\n  if (!templateSpec || !templateSpec.main) {\n    throw new Exception('Unknown template object: ' + typeof templateSpec);\n  }\n\n  templateSpec.main.decorator = templateSpec.main_d;\n\n  // Note: Using env.VM references rather than local var references throughout this section to allow\n  // for external users to override these as pseudo-supported APIs.\n  env.VM.checkRevision(templateSpec.compiler);\n\n  // backwards compatibility for precompiled templates with compiler-version 7 (<4.3.0)\n  const templateWasPrecompiledWithCompilerV7 =\n    templateSpec.compiler && templateSpec.compiler[0] === 7;\n\n  function invokePartialWrapper(partial, context, options) {\n    if (options.hash) {\n      context = Utils.extend({}, context, options.hash);\n      if (options.ids) {\n        options.ids[0] = true;\n      }\n    }\n    partial = env.VM.resolvePartial.call(this, partial, context, options);\n\n    let extendedOptions = Utils.extend({}, options, {\n      hooks: this.hooks,\n      protoAccessControl: this.protoAccessControl\n    });\n\n    let result = env.VM.invokePartial.call(\n      this,\n      partial,\n      context,\n      extendedOptions\n    );\n\n    if (result == null && env.compile) {\n      options.partials[options.name] = env.compile(\n        partial,\n        templateSpec.compilerOptions,\n        env\n      );\n      result = options.partials[options.name](context, extendedOptions);\n    }\n    if (result != null) {\n      if (options.indent) {\n        let lines = result.split('\\n');\n        for (let i = 0, l = lines.length; i < l; i++) {\n          if (!lines[i] && i + 1 === l) {\n            break;\n          }\n\n          lines[i] = options.indent + lines[i];\n        }\n        result = lines.join('\\n');\n      }\n      return result;\n    } else {\n      throw new Exception(\n        'The partial ' +\n          options.name +\n          ' could not be compiled when running in runtime-only mode'\n      );\n    }\n  }\n\n  // Just add water\n  let container = {\n    strict: function(obj, name, loc) {\n      if (!obj || !(name in obj)) {\n        throw new Exception('\"' + name + '\" not defined in ' + obj, {\n          loc: loc\n        });\n      }\n      return container.lookupProperty(obj, name);\n    },\n    lookupProperty: function(parent, propertyName) {\n      let result = parent[propertyName];\n      if (result == null) {\n        return result;\n      }\n      if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n        return result;\n      }\n\n      if (resultIsAllowed(result, container.protoAccessControl, propertyName)) {\n        return result;\n      }\n      return undefined;\n    },\n    lookup: function(depths, name) {\n      const len = depths.length;\n      for (let i = 0; i < len; i++) {\n        let result = depths[i] && container.lookupProperty(depths[i], name);\n        if (result != null) {\n          return depths[i][name];\n        }\n      }\n    },\n    lambda: function(current, context) {\n      return typeof current === 'function' ? current.call(context) : current;\n    },\n\n    escapeExpression: Utils.escapeExpression,\n    invokePartial: invokePartialWrapper,\n\n    fn: function(i) {\n      let ret = templateSpec[i];\n      ret.decorator = templateSpec[i + '_d'];\n      return ret;\n    },\n\n    programs: [],\n    program: function(i, data, declaredBlockParams, blockParams, depths) {\n      let programWrapper = this.programs[i],\n        fn = this.fn(i);\n      if (data || depths || blockParams || declaredBlockParams) {\n        programWrapper = wrapProgram(\n          this,\n          i,\n          fn,\n          data,\n          declaredBlockParams,\n          blockParams,\n          depths\n        );\n      } else if (!programWrapper) {\n        programWrapper = this.programs[i] = wrapProgram(this, i, fn);\n      }\n      return programWrapper;\n    },\n\n    data: function(value, depth) {\n      while (value && depth--) {\n        value = value._parent;\n      }\n      return value;\n    },\n    mergeIfNeeded: function(param, common) {\n      let obj = param || common;\n\n      if (param && common && param !== common) {\n        obj = Utils.extend({}, common, param);\n      }\n\n      return obj;\n    },\n    // An empty object to use as replacement for null-contexts\n    nullContext: Object.seal({}),\n\n    noop: env.VM.noop,\n    compilerInfo: templateSpec.compiler\n  };\n\n  function ret(context, options = {}) {\n    let data = options.data;\n\n    ret._setup(options);\n    if (!options.partial && templateSpec.useData) {\n      data = initData(context, data);\n    }\n    let depths,\n      blockParams = templateSpec.useBlockParams ? [] : undefined;\n    if (templateSpec.useDepths) {\n      if (options.depths) {\n        depths =\n          context != options.depths[0]\n            ? [context].concat(options.depths)\n            : options.depths;\n      } else {\n        depths = [context];\n      }\n    }\n\n    function main(context /*, options*/) {\n      return (\n        '' +\n        templateSpec.main(\n          container,\n          context,\n          container.helpers,\n          container.partials,\n          data,\n          blockParams,\n          depths\n        )\n      );\n    }\n\n    main = executeDecorators(\n      templateSpec.main,\n      main,\n      container,\n      options.depths || [],\n      data,\n      blockParams\n    );\n    return main(context, options);\n  }\n\n  ret.isTop = true;\n\n  ret._setup = function(options) {\n    if (!options.partial) {\n      let mergedHelpers = Utils.extend({}, env.helpers, options.helpers);\n      wrapHelpersToPassLookupProperty(mergedHelpers, container);\n      container.helpers = mergedHelpers;\n\n      if (templateSpec.usePartial) {\n        // Use mergeIfNeeded here to prevent compiling global partials multiple times\n        container.partials = container.mergeIfNeeded(\n          options.partials,\n          env.partials\n        );\n      }\n      if (templateSpec.usePartial || templateSpec.useDecorators) {\n        container.decorators = Utils.extend(\n          {},\n          env.decorators,\n          options.decorators\n        );\n      }\n\n      container.hooks = {};\n      container.protoAccessControl = createProtoAccessControl(options);\n\n      let keepHelperInHelpers =\n        options.allowCallsToHelperMissing ||\n        templateWasPrecompiledWithCompilerV7;\n      moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers);\n      moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers);\n    } else {\n      container.protoAccessControl = options.protoAccessControl; // internal option\n      container.helpers = options.helpers;\n      container.partials = options.partials;\n      container.decorators = options.decorators;\n      container.hooks = options.hooks;\n    }\n  };\n\n  ret._child = function(i, data, blockParams, depths) {\n    if (templateSpec.useBlockParams && !blockParams) {\n      throw new Exception('must pass block params');\n    }\n    if (templateSpec.useDepths && !depths) {\n      throw new Exception('must pass parent depths');\n    }\n\n    return wrapProgram(\n      container,\n      i,\n      templateSpec[i],\n      data,\n      0,\n      blockParams,\n      depths\n    );\n  };\n  return ret;\n}\n\nexport function wrapProgram(\n  container,\n  i,\n  fn,\n  data,\n  declaredBlockParams,\n  blockParams,\n  depths\n) {\n  function prog(context, options = {}) {\n    let currentDepths = depths;\n    if (\n      depths &&\n      context != depths[0] &&\n      !(context === container.nullContext && depths[0] === null)\n    ) {\n      currentDepths = [context].concat(depths);\n    }\n\n    return fn(\n      container,\n      context,\n      container.helpers,\n      container.partials,\n      options.data || data,\n      blockParams && [options.blockParams].concat(blockParams),\n      currentDepths\n    );\n  }\n\n  prog = executeDecorators(fn, prog, container, depths, data, blockParams);\n\n  prog.program = i;\n  prog.depth = depths ? depths.length : 0;\n  prog.blockParams = declaredBlockParams || 0;\n  return prog;\n}\n\n/**\n * This is currently part of the official API, therefore implementation details should not be changed.\n */\nexport function resolvePartial(partial, context, options) {\n  if (!partial) {\n    if (options.name === '@partial-block') {\n      partial = options.data['partial-block'];\n    } else {\n      partial = options.partials[options.name];\n    }\n  } else if (!partial.call && !options.name) {\n    // This is a dynamic partial that returned a string\n    options.name = partial;\n    partial = options.partials[partial];\n  }\n  return partial;\n}\n\nexport function invokePartial(partial, context, options) {\n  // Use the current closure context to save the partial-block if this partial\n  const currentPartialBlock = options.data && options.data['partial-block'];\n  options.partial = true;\n  if (options.ids) {\n    options.data.contextPath = options.ids[0] || options.data.contextPath;\n  }\n\n  let partialBlock;\n  if (options.fn && options.fn !== noop) {\n    options.data = createFrame(options.data);\n    // Wrapper function to get access to currentPartialBlock from the closure\n    let fn = options.fn;\n    partialBlock = options.data['partial-block'] = function partialBlockWrapper(\n      context,\n      options = {}\n    ) {\n      // Restore the partial-block from the closure for the execution of the block\n      // i.e. the part inside the block of the partial call.\n      options.data = createFrame(options.data);\n      options.data['partial-block'] = currentPartialBlock;\n      return fn(context, options);\n    };\n    if (fn.partials) {\n      options.partials = Utils.extend({}, options.partials, fn.partials);\n    }\n  }\n\n  if (partial === undefined && partialBlock) {\n    partial = partialBlock;\n  }\n\n  if (partial === undefined) {\n    throw new Exception('The partial ' + options.name + ' could not be found');\n  } else if (partial instanceof Function) {\n    return partial(context, options);\n  }\n}\n\nexport function noop() {\n  return '';\n}\n\nfunction initData(context, data) {\n  if (!data || !('root' in data)) {\n    data = data ? createFrame(data) : {};\n    data.root = context;\n  }\n  return data;\n}\n\nfunction executeDecorators(fn, prog, container, depths, data, blockParams) {\n  if (fn.decorator) {\n    let props = {};\n    prog = fn.decorator(\n      prog,\n      props,\n      container,\n      depths && depths[0],\n      data,\n      blockParams,\n      depths\n    );\n    Utils.extend(prog, props);\n  }\n  return prog;\n}\n\nfunction wrapHelpersToPassLookupProperty(mergedHelpers, container) {\n  Object.keys(mergedHelpers).forEach(helperName => {\n    let helper = mergedHelpers[helperName];\n    mergedHelpers[helperName] = passLookupPropertyOption(helper, container);\n  });\n}\n\nfunction passLookupPropertyOption(helper, container) {\n  const lookupProperty = container.lookupProperty;\n  return wrapHelper(helper, options => {\n    return Utils.extend({ lookupProperty }, options);\n  });\n}\n", "export default function(Handlebars) {\n  /* istanbul ignore next */\n  let root = typeof global !== 'undefined' ? global : window,\n    $Handlebars = root.Handlebars;\n  /* istanbul ignore next */\n  Handlebars.noConflict = function() {\n    if (root.Handlebars === Handlebars) {\n      root.Handlebars = $Handlebars;\n    }\n    return Handlebars;\n  };\n}\n", "import * as base from './handlebars/base';\n\n// Each of these augment the Handlebars object. No need to setup here.\n// (This is done to easily share code between commonjs and browse envs)\nimport SafeString from './handlebars/safe-string';\nimport Exception from './handlebars/exception';\nimport * as Utils from './handlebars/utils';\nimport * as runtime from './handlebars/runtime';\n\nimport noConflict from './handlebars/no-conflict';\n\n// For compatibility and usage outside of module systems, make the Handlebars object a namespace\nfunction create() {\n  let hb = new base.HandlebarsEnvironment();\n\n  Utils.extend(hb, base);\n  hb.SafeString = SafeString;\n  hb.Exception = Exception;\n  hb.Utils = Utils;\n  hb.escapeExpression = Utils.escapeExpression;\n\n  hb.VM = runtime;\n  hb.template = function(spec) {\n    return runtime.template(spec, hb);\n  };\n\n  return hb;\n}\n\nlet inst = create();\ninst.create = create;\n\nnoConflict(inst);\n\ninst['default'] = inst;\n\nexport default inst;\n", "let AST = {\n  // Public API used to evaluate derived attributes regarding AST nodes\n  helpers: {\n    // a mustache is definitely a helper if:\n    // * it is an eligible helper, and\n    // * it has at least one parameter or hash segment\n    helperExpression: function(node) {\n      return (\n        node.type === 'SubExpression' ||\n        ((node.type === 'MustacheStatement' ||\n          node.type === 'BlockStatement') &&\n          !!((node.params && node.params.length) || node.hash))\n      );\n    },\n\n    scopedId: function(path) {\n      return /^\\.|this\\b/.test(path.original);\n    },\n\n    // an ID is simple if it only has one part, and that part is not\n    // `..` or `this`.\n    simpleId: function(path) {\n      return (\n        path.parts.length === 1 && !AST.helpers.scopedId(path) && !path.depth\n      );\n    }\n  }\n};\n\n// Must be exported as an object rather than the root of the module as the jison lexer\n// must modify the object to operate properly.\nexport default AST;\n", "// File ignored in coverage tests via setting in .istanbul.yml\n/* Jison generated parser */\nvar handlebars = (function(){\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"root\":3,\"program\":4,\"EOF\":5,\"program_repetition0\":6,\"statement\":7,\"mustache\":8,\"block\":9,\"rawBlock\":10,\"partial\":11,\"partialBlock\":12,\"content\":13,\"COMMENT\":14,\"CONTENT\":15,\"openRawBlock\":16,\"rawBlock_repetition0\":17,\"END_RAW_BLOCK\":18,\"OPEN_RAW_BLOCK\":19,\"helperName\":20,\"openRawBlock_repetition0\":21,\"openRawBlock_option0\":22,\"CLOSE_RAW_BLOCK\":23,\"openBlock\":24,\"block_option0\":25,\"closeBlock\":26,\"openInverse\":27,\"block_option1\":28,\"OPEN_BLOCK\":29,\"openBlock_repetition0\":30,\"openBlock_option0\":31,\"openBlock_option1\":32,\"CLOSE\":33,\"OPEN_INVERSE\":34,\"openInverse_repetition0\":35,\"openInverse_option0\":36,\"openInverse_option1\":37,\"openInverseChain\":38,\"OPEN_INVERSE_CHAIN\":39,\"openInverseChain_repetition0\":40,\"openInverseChain_option0\":41,\"openInverseChain_option1\":42,\"inverseAndProgram\":43,\"INVERSE\":44,\"inverseChain\":45,\"inverseChain_option0\":46,\"OPEN_ENDBLOCK\":47,\"OPEN\":48,\"mustache_repetition0\":49,\"mustache_option0\":50,\"OPEN_UNESCAPED\":51,\"mustache_repetition1\":52,\"mustache_option1\":53,\"CLOSE_UNESCAPED\":54,\"OPEN_PARTIAL\":55,\"partialName\":56,\"partial_repetition0\":57,\"partial_option0\":58,\"openPartialBlock\":59,\"OPEN_PARTIAL_BLOCK\":60,\"openPartialBlock_repetition0\":61,\"openPartialBlock_option0\":62,\"param\":63,\"sexpr\":64,\"OPEN_SEXPR\":65,\"sexpr_repetition0\":66,\"sexpr_option0\":67,\"CLOSE_SEXPR\":68,\"hash\":69,\"hash_repetition_plus0\":70,\"hashSegment\":71,\"ID\":72,\"EQUALS\":73,\"blockParams\":74,\"OPEN_BLOCK_PARAMS\":75,\"blockParams_repetition_plus0\":76,\"CLOSE_BLOCK_PARAMS\":77,\"path\":78,\"dataName\":79,\"STRING\":80,\"NUMBER\":81,\"BOOLEAN\":82,\"UNDEFINED\":83,\"NULL\":84,\"DATA\":85,\"pathSegments\":86,\"SEP\":87,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",5:\"EOF\",14:\"COMMENT\",15:\"CONTENT\",18:\"END_RAW_BLOCK\",19:\"OPEN_RAW_BLOCK\",23:\"CLOSE_RAW_BLOCK\",29:\"OPEN_BLOCK\",33:\"CLOSE\",34:\"OPEN_INVERSE\",39:\"OPEN_INVERSE_CHAIN\",44:\"INVERSE\",47:\"OPEN_ENDBLOCK\",48:\"OPEN\",51:\"OPEN_UNESCAPED\",54:\"CLOSE_UNESCAPED\",55:\"OPEN_PARTIAL\",60:\"OPEN_PARTIAL_BLOCK\",65:\"OPEN_SEXPR\",68:\"CLOSE_SEXPR\",72:\"ID\",73:\"EQUALS\",75:\"OPEN_BLOCK_PARAMS\",77:\"CLOSE_BLOCK_PARAMS\",80:\"STRING\",81:\"NUMBER\",82:\"BOOLEAN\",83:\"UNDEFINED\",84:\"NULL\",85:\"DATA\",87:\"SEP\"},\nproductions_: [0,[3,2],[4,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[13,1],[10,3],[16,5],[9,4],[9,4],[24,6],[27,6],[38,6],[43,2],[45,3],[45,1],[26,3],[8,5],[8,5],[11,5],[12,3],[59,5],[63,1],[63,1],[64,5],[69,1],[71,3],[74,3],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[56,1],[56,1],[79,2],[78,1],[86,3],[86,1],[6,0],[6,2],[17,0],[17,2],[21,0],[21,2],[22,0],[22,1],[25,0],[25,1],[28,0],[28,1],[30,0],[30,2],[31,0],[31,1],[32,0],[32,1],[35,0],[35,2],[36,0],[36,1],[37,0],[37,1],[40,0],[40,2],[41,0],[41,1],[42,0],[42,1],[46,0],[46,1],[49,0],[49,2],[50,0],[50,1],[52,0],[52,2],[53,0],[53,1],[57,0],[57,2],[58,0],[58,1],[61,0],[61,2],[62,0],[62,1],[66,0],[66,2],[67,0],[67,1],[70,1],[70,2],[76,1],[76,2]],\nperformAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$\n) {\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1: return $$[$0-1]; \nbreak;\ncase 2:this.$ = yy.prepareProgram($$[$0]);\nbreak;\ncase 3:this.$ = $$[$0];\nbreak;\ncase 4:this.$ = $$[$0];\nbreak;\ncase 5:this.$ = $$[$0];\nbreak;\ncase 6:this.$ = $$[$0];\nbreak;\ncase 7:this.$ = $$[$0];\nbreak;\ncase 8:this.$ = $$[$0];\nbreak;\ncase 9:\n    this.$ = {\n      type: 'CommentStatement',\n      value: yy.stripComment($$[$0]),\n      strip: yy.stripFlags($$[$0], $$[$0]),\n      loc: yy.locInfo(this._$)\n    };\n  \nbreak;\ncase 10:\n    this.$ = {\n      type: 'ContentStatement',\n      original: $$[$0],\n      value: $$[$0],\n      loc: yy.locInfo(this._$)\n    };\n  \nbreak;\ncase 11:this.$ = yy.prepareRawBlock($$[$0-2], $$[$0-1], $$[$0], this._$);\nbreak;\ncase 12:this.$ = { path: $$[$0-3], params: $$[$0-2], hash: $$[$0-1] };\nbreak;\ncase 13:this.$ = yy.prepareBlock($$[$0-3], $$[$0-2], $$[$0-1], $$[$0], false, this._$);\nbreak;\ncase 14:this.$ = yy.prepareBlock($$[$0-3], $$[$0-2], $$[$0-1], $$[$0], true, this._$);\nbreak;\ncase 15:this.$ = { open: $$[$0-5], path: $$[$0-4], params: $$[$0-3], hash: $$[$0-2], blockParams: $$[$0-1], strip: yy.stripFlags($$[$0-5], $$[$0]) };\nbreak;\ncase 16:this.$ = { path: $$[$0-4], params: $$[$0-3], hash: $$[$0-2], blockParams: $$[$0-1], strip: yy.stripFlags($$[$0-5], $$[$0]) };\nbreak;\ncase 17:this.$ = { path: $$[$0-4], params: $$[$0-3], hash: $$[$0-2], blockParams: $$[$0-1], strip: yy.stripFlags($$[$0-5], $$[$0]) };\nbreak;\ncase 18:this.$ = { strip: yy.stripFlags($$[$0-1], $$[$0-1]), program: $$[$0] };\nbreak;\ncase 19:\n    var inverse = yy.prepareBlock($$[$0-2], $$[$0-1], $$[$0], $$[$0], false, this._$),\n        program = yy.prepareProgram([inverse], $$[$0-1].loc);\n    program.chained = true;\n\n    this.$ = { strip: $$[$0-2].strip, program: program, chain: true };\n  \nbreak;\ncase 20:this.$ = $$[$0];\nbreak;\ncase 21:this.$ = {path: $$[$0-1], strip: yy.stripFlags($$[$0-2], $$[$0])};\nbreak;\ncase 22:this.$ = yy.prepareMustache($$[$0-3], $$[$0-2], $$[$0-1], $$[$0-4], yy.stripFlags($$[$0-4], $$[$0]), this._$);\nbreak;\ncase 23:this.$ = yy.prepareMustache($$[$0-3], $$[$0-2], $$[$0-1], $$[$0-4], yy.stripFlags($$[$0-4], $$[$0]), this._$);\nbreak;\ncase 24:\n    this.$ = {\n      type: 'PartialStatement',\n      name: $$[$0-3],\n      params: $$[$0-2],\n      hash: $$[$0-1],\n      indent: '',\n      strip: yy.stripFlags($$[$0-4], $$[$0]),\n      loc: yy.locInfo(this._$)\n    };\n  \nbreak;\ncase 25:this.$ = yy.preparePartialBlock($$[$0-2], $$[$0-1], $$[$0], this._$);\nbreak;\ncase 26:this.$ = { path: $$[$0-3], params: $$[$0-2], hash: $$[$0-1], strip: yy.stripFlags($$[$0-4], $$[$0]) };\nbreak;\ncase 27:this.$ = $$[$0];\nbreak;\ncase 28:this.$ = $$[$0];\nbreak;\ncase 29:\n    this.$ = {\n      type: 'SubExpression',\n      path: $$[$0-3],\n      params: $$[$0-2],\n      hash: $$[$0-1],\n      loc: yy.locInfo(this._$)\n    };\n  \nbreak;\ncase 30:this.$ = {type: 'Hash', pairs: $$[$0], loc: yy.locInfo(this._$)};\nbreak;\ncase 31:this.$ = {type: 'HashPair', key: yy.id($$[$0-2]), value: $$[$0], loc: yy.locInfo(this._$)};\nbreak;\ncase 32:this.$ = yy.id($$[$0-1]);\nbreak;\ncase 33:this.$ = $$[$0];\nbreak;\ncase 34:this.$ = $$[$0];\nbreak;\ncase 35:this.$ = {type: 'StringLiteral', value: $$[$0], original: $$[$0], loc: yy.locInfo(this._$)};\nbreak;\ncase 36:this.$ = {type: 'NumberLiteral', value: Number($$[$0]), original: Number($$[$0]), loc: yy.locInfo(this._$)};\nbreak;\ncase 37:this.$ = {type: 'BooleanLiteral', value: $$[$0] === 'true', original: $$[$0] === 'true', loc: yy.locInfo(this._$)};\nbreak;\ncase 38:this.$ = {type: 'UndefinedLiteral', original: undefined, value: undefined, loc: yy.locInfo(this._$)};\nbreak;\ncase 39:this.$ = {type: 'NullLiteral', original: null, value: null, loc: yy.locInfo(this._$)};\nbreak;\ncase 40:this.$ = $$[$0];\nbreak;\ncase 41:this.$ = $$[$0];\nbreak;\ncase 42:this.$ = yy.preparePath(true, $$[$0], this._$);\nbreak;\ncase 43:this.$ = yy.preparePath(false, $$[$0], this._$);\nbreak;\ncase 44: $$[$0-2].push({part: yy.id($$[$0]), original: $$[$0], separator: $$[$0-1]}); this.$ = $$[$0-2]; \nbreak;\ncase 45:this.$ = [{part: yy.id($$[$0]), original: $$[$0]}];\nbreak;\ncase 46:this.$ = [];\nbreak;\ncase 47:$$[$0-1].push($$[$0]);\nbreak;\ncase 48:this.$ = [];\nbreak;\ncase 49:$$[$0-1].push($$[$0]);\nbreak;\ncase 50:this.$ = [];\nbreak;\ncase 51:$$[$0-1].push($$[$0]);\nbreak;\ncase 58:this.$ = [];\nbreak;\ncase 59:$$[$0-1].push($$[$0]);\nbreak;\ncase 64:this.$ = [];\nbreak;\ncase 65:$$[$0-1].push($$[$0]);\nbreak;\ncase 70:this.$ = [];\nbreak;\ncase 71:$$[$0-1].push($$[$0]);\nbreak;\ncase 78:this.$ = [];\nbreak;\ncase 79:$$[$0-1].push($$[$0]);\nbreak;\ncase 82:this.$ = [];\nbreak;\ncase 83:$$[$0-1].push($$[$0]);\nbreak;\ncase 86:this.$ = [];\nbreak;\ncase 87:$$[$0-1].push($$[$0]);\nbreak;\ncase 90:this.$ = [];\nbreak;\ncase 91:$$[$0-1].push($$[$0]);\nbreak;\ncase 94:this.$ = [];\nbreak;\ncase 95:$$[$0-1].push($$[$0]);\nbreak;\ncase 98:this.$ = [$$[$0]];\nbreak;\ncase 99:$$[$0-1].push($$[$0]);\nbreak;\ncase 100:this.$ = [$$[$0]];\nbreak;\ncase 101:$$[$0-1].push($$[$0]);\nbreak;\n}\n},\ntable: [{3:1,4:2,5:[2,46],6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{1:[3]},{5:[1,4]},{5:[2,2],7:5,8:6,9:7,10:8,11:9,12:10,13:11,14:[1,12],15:[1,20],16:17,19:[1,23],24:15,27:16,29:[1,21],34:[1,22],39:[2,2],44:[2,2],47:[2,2],48:[1,13],51:[1,14],55:[1,18],59:19,60:[1,24]},{1:[2,1]},{5:[2,47],14:[2,47],15:[2,47],19:[2,47],29:[2,47],34:[2,47],39:[2,47],44:[2,47],47:[2,47],48:[2,47],51:[2,47],55:[2,47],60:[2,47]},{5:[2,3],14:[2,3],15:[2,3],19:[2,3],29:[2,3],34:[2,3],39:[2,3],44:[2,3],47:[2,3],48:[2,3],51:[2,3],55:[2,3],60:[2,3]},{5:[2,4],14:[2,4],15:[2,4],19:[2,4],29:[2,4],34:[2,4],39:[2,4],44:[2,4],47:[2,4],48:[2,4],51:[2,4],55:[2,4],60:[2,4]},{5:[2,5],14:[2,5],15:[2,5],19:[2,5],29:[2,5],34:[2,5],39:[2,5],44:[2,5],47:[2,5],48:[2,5],51:[2,5],55:[2,5],60:[2,5]},{5:[2,6],14:[2,6],15:[2,6],19:[2,6],29:[2,6],34:[2,6],39:[2,6],44:[2,6],47:[2,6],48:[2,6],51:[2,6],55:[2,6],60:[2,6]},{5:[2,7],14:[2,7],15:[2,7],19:[2,7],29:[2,7],34:[2,7],39:[2,7],44:[2,7],47:[2,7],48:[2,7],51:[2,7],55:[2,7],60:[2,7]},{5:[2,8],14:[2,8],15:[2,8],19:[2,8],29:[2,8],34:[2,8],39:[2,8],44:[2,8],47:[2,8],48:[2,8],51:[2,8],55:[2,8],60:[2,8]},{5:[2,9],14:[2,9],15:[2,9],19:[2,9],29:[2,9],34:[2,9],39:[2,9],44:[2,9],47:[2,9],48:[2,9],51:[2,9],55:[2,9],60:[2,9]},{20:25,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:36,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:37,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{4:38,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{15:[2,48],17:39,18:[2,48]},{20:41,56:40,64:42,65:[1,43],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:44,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{5:[2,10],14:[2,10],15:[2,10],18:[2,10],19:[2,10],29:[2,10],34:[2,10],39:[2,10],44:[2,10],47:[2,10],48:[2,10],51:[2,10],55:[2,10],60:[2,10]},{20:45,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:46,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:47,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:41,56:48,64:42,65:[1,43],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[2,78],49:49,65:[2,78],72:[2,78],80:[2,78],81:[2,78],82:[2,78],83:[2,78],84:[2,78],85:[2,78]},{23:[2,33],33:[2,33],54:[2,33],65:[2,33],68:[2,33],72:[2,33],75:[2,33],80:[2,33],81:[2,33],82:[2,33],83:[2,33],84:[2,33],85:[2,33]},{23:[2,34],33:[2,34],54:[2,34],65:[2,34],68:[2,34],72:[2,34],75:[2,34],80:[2,34],81:[2,34],82:[2,34],83:[2,34],84:[2,34],85:[2,34]},{23:[2,35],33:[2,35],54:[2,35],65:[2,35],68:[2,35],72:[2,35],75:[2,35],80:[2,35],81:[2,35],82:[2,35],83:[2,35],84:[2,35],85:[2,35]},{23:[2,36],33:[2,36],54:[2,36],65:[2,36],68:[2,36],72:[2,36],75:[2,36],80:[2,36],81:[2,36],82:[2,36],83:[2,36],84:[2,36],85:[2,36]},{23:[2,37],33:[2,37],54:[2,37],65:[2,37],68:[2,37],72:[2,37],75:[2,37],80:[2,37],81:[2,37],82:[2,37],83:[2,37],84:[2,37],85:[2,37]},{23:[2,38],33:[2,38],54:[2,38],65:[2,38],68:[2,38],72:[2,38],75:[2,38],80:[2,38],81:[2,38],82:[2,38],83:[2,38],84:[2,38],85:[2,38]},{23:[2,39],33:[2,39],54:[2,39],65:[2,39],68:[2,39],72:[2,39],75:[2,39],80:[2,39],81:[2,39],82:[2,39],83:[2,39],84:[2,39],85:[2,39]},{23:[2,43],33:[2,43],54:[2,43],65:[2,43],68:[2,43],72:[2,43],75:[2,43],80:[2,43],81:[2,43],82:[2,43],83:[2,43],84:[2,43],85:[2,43],87:[1,50]},{72:[1,35],86:51},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{52:52,54:[2,82],65:[2,82],72:[2,82],80:[2,82],81:[2,82],82:[2,82],83:[2,82],84:[2,82],85:[2,82]},{25:53,38:55,39:[1,57],43:56,44:[1,58],45:54,47:[2,54]},{28:59,43:60,44:[1,58],47:[2,56]},{13:62,15:[1,20],18:[1,61]},{33:[2,86],57:63,65:[2,86],72:[2,86],80:[2,86],81:[2,86],82:[2,86],83:[2,86],84:[2,86],85:[2,86]},{33:[2,40],65:[2,40],72:[2,40],80:[2,40],81:[2,40],82:[2,40],83:[2,40],84:[2,40],85:[2,40]},{33:[2,41],65:[2,41],72:[2,41],80:[2,41],81:[2,41],82:[2,41],83:[2,41],84:[2,41],85:[2,41]},{20:64,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:65,47:[1,66]},{30:67,33:[2,58],65:[2,58],72:[2,58],75:[2,58],80:[2,58],81:[2,58],82:[2,58],83:[2,58],84:[2,58],85:[2,58]},{33:[2,64],35:68,65:[2,64],72:[2,64],75:[2,64],80:[2,64],81:[2,64],82:[2,64],83:[2,64],84:[2,64],85:[2,64]},{21:69,23:[2,50],65:[2,50],72:[2,50],80:[2,50],81:[2,50],82:[2,50],83:[2,50],84:[2,50],85:[2,50]},{33:[2,90],61:70,65:[2,90],72:[2,90],80:[2,90],81:[2,90],82:[2,90],83:[2,90],84:[2,90],85:[2,90]},{20:74,33:[2,80],50:71,63:72,64:75,65:[1,43],69:73,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{72:[1,79]},{23:[2,42],33:[2,42],54:[2,42],65:[2,42],68:[2,42],72:[2,42],75:[2,42],80:[2,42],81:[2,42],82:[2,42],83:[2,42],84:[2,42],85:[2,42],87:[1,50]},{20:74,53:80,54:[2,84],63:81,64:75,65:[1,43],69:82,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:83,47:[1,66]},{47:[2,55]},{4:84,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{47:[2,20]},{20:85,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:86,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{26:87,47:[1,66]},{47:[2,57]},{5:[2,11],14:[2,11],15:[2,11],19:[2,11],29:[2,11],34:[2,11],39:[2,11],44:[2,11],47:[2,11],48:[2,11],51:[2,11],55:[2,11],60:[2,11]},{15:[2,49],18:[2,49]},{20:74,33:[2,88],58:88,63:89,64:75,65:[1,43],69:90,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{65:[2,94],66:91,68:[2,94],72:[2,94],80:[2,94],81:[2,94],82:[2,94],83:[2,94],84:[2,94],85:[2,94]},{5:[2,25],14:[2,25],15:[2,25],19:[2,25],29:[2,25],34:[2,25],39:[2,25],44:[2,25],47:[2,25],48:[2,25],51:[2,25],55:[2,25],60:[2,25]},{20:92,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:74,31:93,33:[2,60],63:94,64:75,65:[1,43],69:95,70:76,71:77,72:[1,78],75:[2,60],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:74,33:[2,66],36:96,63:97,64:75,65:[1,43],69:98,70:76,71:77,72:[1,78],75:[2,66],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:74,22:99,23:[2,52],63:100,64:75,65:[1,43],69:101,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:74,33:[2,92],62:102,63:103,64:75,65:[1,43],69:104,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,105]},{33:[2,79],65:[2,79],72:[2,79],80:[2,79],81:[2,79],82:[2,79],83:[2,79],84:[2,79],85:[2,79]},{33:[2,81]},{23:[2,27],33:[2,27],54:[2,27],65:[2,27],68:[2,27],72:[2,27],75:[2,27],80:[2,27],81:[2,27],82:[2,27],83:[2,27],84:[2,27],85:[2,27]},{23:[2,28],33:[2,28],54:[2,28],65:[2,28],68:[2,28],72:[2,28],75:[2,28],80:[2,28],81:[2,28],82:[2,28],83:[2,28],84:[2,28],85:[2,28]},{23:[2,30],33:[2,30],54:[2,30],68:[2,30],71:106,72:[1,107],75:[2,30]},{23:[2,98],33:[2,98],54:[2,98],68:[2,98],72:[2,98],75:[2,98]},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],73:[1,108],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{23:[2,44],33:[2,44],54:[2,44],65:[2,44],68:[2,44],72:[2,44],75:[2,44],80:[2,44],81:[2,44],82:[2,44],83:[2,44],84:[2,44],85:[2,44],87:[2,44]},{54:[1,109]},{54:[2,83],65:[2,83],72:[2,83],80:[2,83],81:[2,83],82:[2,83],83:[2,83],84:[2,83],85:[2,83]},{54:[2,85]},{5:[2,13],14:[2,13],15:[2,13],19:[2,13],29:[2,13],34:[2,13],39:[2,13],44:[2,13],47:[2,13],48:[2,13],51:[2,13],55:[2,13],60:[2,13]},{38:55,39:[1,57],43:56,44:[1,58],45:111,46:110,47:[2,76]},{33:[2,70],40:112,65:[2,70],72:[2,70],75:[2,70],80:[2,70],81:[2,70],82:[2,70],83:[2,70],84:[2,70],85:[2,70]},{47:[2,18]},{5:[2,14],14:[2,14],15:[2,14],19:[2,14],29:[2,14],34:[2,14],39:[2,14],44:[2,14],47:[2,14],48:[2,14],51:[2,14],55:[2,14],60:[2,14]},{33:[1,113]},{33:[2,87],65:[2,87],72:[2,87],80:[2,87],81:[2,87],82:[2,87],83:[2,87],84:[2,87],85:[2,87]},{33:[2,89]},{20:74,63:115,64:75,65:[1,43],67:114,68:[2,96],69:116,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,117]},{32:118,33:[2,62],74:119,75:[1,120]},{33:[2,59],65:[2,59],72:[2,59],75:[2,59],80:[2,59],81:[2,59],82:[2,59],83:[2,59],84:[2,59],85:[2,59]},{33:[2,61],75:[2,61]},{33:[2,68],37:121,74:122,75:[1,120]},{33:[2,65],65:[2,65],72:[2,65],75:[2,65],80:[2,65],81:[2,65],82:[2,65],83:[2,65],84:[2,65],85:[2,65]},{33:[2,67],75:[2,67]},{23:[1,123]},{23:[2,51],65:[2,51],72:[2,51],80:[2,51],81:[2,51],82:[2,51],83:[2,51],84:[2,51],85:[2,51]},{23:[2,53]},{33:[1,124]},{33:[2,91],65:[2,91],72:[2,91],80:[2,91],81:[2,91],82:[2,91],83:[2,91],84:[2,91],85:[2,91]},{33:[2,93]},{5:[2,22],14:[2,22],15:[2,22],19:[2,22],29:[2,22],34:[2,22],39:[2,22],44:[2,22],47:[2,22],48:[2,22],51:[2,22],55:[2,22],60:[2,22]},{23:[2,99],33:[2,99],54:[2,99],68:[2,99],72:[2,99],75:[2,99]},{73:[1,108]},{20:74,63:125,64:75,65:[1,43],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,23],14:[2,23],15:[2,23],19:[2,23],29:[2,23],34:[2,23],39:[2,23],44:[2,23],47:[2,23],48:[2,23],51:[2,23],55:[2,23],60:[2,23]},{47:[2,19]},{47:[2,77]},{20:74,33:[2,72],41:126,63:127,64:75,65:[1,43],69:128,70:76,71:77,72:[1,78],75:[2,72],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,24],14:[2,24],15:[2,24],19:[2,24],29:[2,24],34:[2,24],39:[2,24],44:[2,24],47:[2,24],48:[2,24],51:[2,24],55:[2,24],60:[2,24]},{68:[1,129]},{65:[2,95],68:[2,95],72:[2,95],80:[2,95],81:[2,95],82:[2,95],83:[2,95],84:[2,95],85:[2,95]},{68:[2,97]},{5:[2,21],14:[2,21],15:[2,21],19:[2,21],29:[2,21],34:[2,21],39:[2,21],44:[2,21],47:[2,21],48:[2,21],51:[2,21],55:[2,21],60:[2,21]},{33:[1,130]},{33:[2,63]},{72:[1,132],76:131},{33:[1,133]},{33:[2,69]},{15:[2,12],18:[2,12]},{14:[2,26],15:[2,26],19:[2,26],29:[2,26],34:[2,26],47:[2,26],48:[2,26],51:[2,26],55:[2,26],60:[2,26]},{23:[2,31],33:[2,31],54:[2,31],68:[2,31],72:[2,31],75:[2,31]},{33:[2,74],42:134,74:135,75:[1,120]},{33:[2,71],65:[2,71],72:[2,71],75:[2,71],80:[2,71],81:[2,71],82:[2,71],83:[2,71],84:[2,71],85:[2,71]},{33:[2,73],75:[2,73]},{23:[2,29],33:[2,29],54:[2,29],65:[2,29],68:[2,29],72:[2,29],75:[2,29],80:[2,29],81:[2,29],82:[2,29],83:[2,29],84:[2,29],85:[2,29]},{14:[2,15],15:[2,15],19:[2,15],29:[2,15],34:[2,15],39:[2,15],44:[2,15],47:[2,15],48:[2,15],51:[2,15],55:[2,15],60:[2,15]},{72:[1,137],77:[1,136]},{72:[2,100],77:[2,100]},{14:[2,16],15:[2,16],19:[2,16],29:[2,16],34:[2,16],44:[2,16],47:[2,16],48:[2,16],51:[2,16],55:[2,16],60:[2,16]},{33:[1,138]},{33:[2,75]},{33:[2,32]},{72:[2,101],77:[2,101]},{14:[2,17],15:[2,17],19:[2,17],29:[2,17],34:[2,17],39:[2,17],44:[2,17],47:[2,17],48:[2,17],51:[2,17],55:[2,17],60:[2,17]}],\ndefaultActions: {4:[2,1],54:[2,55],56:[2,20],60:[2,57],73:[2,81],82:[2,85],86:[2,18],90:[2,89],101:[2,53],104:[2,93],110:[2,19],111:[2,77],116:[2,97],119:[2,63],122:[2,69],135:[2,75],136:[2,32]},\nparseError: function parseError (str, hash) {\n    throw new Error(str);\n},\nparse: function parse(input) {\n    var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n    this.lexer.setInput(input);\n    this.lexer.yy = this.yy;\n    this.yy.lexer = this.lexer;\n    this.yy.parser = this;\n    if (typeof this.lexer.yylloc == \"undefined\")\n        this.lexer.yylloc = {};\n    var yyloc = this.lexer.yylloc;\n    lstack.push(yyloc);\n    var ranges = this.lexer.options && this.lexer.options.ranges;\n    if (typeof this.yy.parseError === \"function\")\n        this.parseError = this.yy.parseError;\n    function popStack(n) {\n        stack.length = stack.length - 2 * n;\n        vstack.length = vstack.length - n;\n        lstack.length = lstack.length - n;\n    }\n    function lex() {\n        var token;\n        token = self.lexer.lex() || 1;\n        if (typeof token !== \"number\") {\n            token = self.symbols_[token] || token;\n        }\n        return token;\n    }\n    var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n    while (true) {\n        state = stack[stack.length - 1];\n        if (this.defaultActions[state]) {\n            action = this.defaultActions[state];\n        } else {\n            if (symbol === null || typeof symbol == \"undefined\") {\n                symbol = lex();\n            }\n            action = table[state] && table[state][symbol];\n        }\n        if (typeof action === \"undefined\" || !action.length || !action[0]) {\n            var errStr = \"\";\n            if (!recovering) {\n                expected = [];\n                for (p in table[state])\n                    if (this.terminals_[p] && p > 2) {\n                        expected.push(\"'\" + this.terminals_[p] + \"'\");\n                    }\n                if (this.lexer.showPosition) {\n                    errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + this.lexer.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n                } else {\n                    errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == 1?\"end of input\":\"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n                }\n                this.parseError(errStr, {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});\n            }\n        }\n        if (action[0] instanceof Array && action.length > 1) {\n            throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n        }\n        switch (action[0]) {\n        case 1:\n            stack.push(symbol);\n            vstack.push(this.lexer.yytext);\n            lstack.push(this.lexer.yylloc);\n            stack.push(action[1]);\n            symbol = null;\n            if (!preErrorSymbol) {\n                yyleng = this.lexer.yyleng;\n                yytext = this.lexer.yytext;\n                yylineno = this.lexer.yylineno;\n                yyloc = this.lexer.yylloc;\n                if (recovering > 0)\n                    recovering--;\n            } else {\n                symbol = preErrorSymbol;\n                preErrorSymbol = null;\n            }\n            break;\n        case 2:\n            len = this.productions_[action[1]][1];\n            yyval.$ = vstack[vstack.length - len];\n            yyval._$ = {first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column};\n            if (ranges) {\n                yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n            }\n            r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);\n            if (typeof r !== \"undefined\") {\n                return r;\n            }\n            if (len) {\n                stack = stack.slice(0, -1 * len * 2);\n                vstack = vstack.slice(0, -1 * len);\n                lstack = lstack.slice(0, -1 * len);\n            }\n            stack.push(this.productions_[action[1]][0]);\n            vstack.push(yyval.$);\n            lstack.push(yyval._$);\n            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n            stack.push(newState);\n            break;\n        case 3:\n            return true;\n        }\n    }\n    return true;\n}\n};\n/* Jison generated lexer */\nvar lexer = (function(){\nvar lexer = ({EOF:1,\nparseError:function parseError(str, hash) {\n        if (this.yy.parser) {\n            this.yy.parser.parseError(str, hash);\n        } else {\n            throw new Error(str);\n        }\n    },\nsetInput:function (input) {\n        this._input = input;\n        this._more = this._less = this.done = false;\n        this.yylineno = this.yyleng = 0;\n        this.yytext = this.matched = this.match = '';\n        this.conditionStack = ['INITIAL'];\n        this.yylloc = {first_line:1,first_column:0,last_line:1,last_column:0};\n        if (this.options.ranges) this.yylloc.range = [0,0];\n        this.offset = 0;\n        return this;\n    },\ninput:function () {\n        var ch = this._input[0];\n        this.yytext += ch;\n        this.yyleng++;\n        this.offset++;\n        this.match += ch;\n        this.matched += ch;\n        var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno++;\n            this.yylloc.last_line++;\n        } else {\n            this.yylloc.last_column++;\n        }\n        if (this.options.ranges) this.yylloc.range[1]++;\n\n        this._input = this._input.slice(1);\n        return ch;\n    },\nunput:function (ch) {\n        var len = ch.length;\n        var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n        this._input = ch + this._input;\n        this.yytext = this.yytext.substr(0, this.yytext.length-len-1);\n        //this.yyleng -= len;\n        this.offset -= len;\n        var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n        this.match = this.match.substr(0, this.match.length-1);\n        this.matched = this.matched.substr(0, this.matched.length-1);\n\n        if (lines.length-1) this.yylineno -= lines.length-1;\n        var r = this.yylloc.range;\n\n        this.yylloc = {first_line: this.yylloc.first_line,\n          last_line: this.yylineno+1,\n          first_column: this.yylloc.first_column,\n          last_column: lines ?\n              (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length:\n              this.yylloc.first_column - len\n          };\n\n        if (this.options.ranges) {\n            this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n        }\n        return this;\n    },\nmore:function () {\n        this._more = true;\n        return this;\n    },\nless:function (n) {\n        this.unput(this.match.slice(n));\n    },\npastInput:function () {\n        var past = this.matched.substr(0, this.matched.length - this.match.length);\n        return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n    },\nupcomingInput:function () {\n        var next = this.match;\n        if (next.length < 20) {\n            next += this._input.substr(0, 20-next.length);\n        }\n        return (next.substr(0,20)+(next.length > 20 ? '...':'')).replace(/\\n/g, \"\");\n    },\nshowPosition:function () {\n        var pre = this.pastInput();\n        var c = new Array(pre.length + 1).join(\"-\");\n        return pre + this.upcomingInput() + \"\\n\" + c+\"^\";\n    },\nnext:function () {\n        if (this.done) {\n            return this.EOF;\n        }\n        if (!this._input) this.done = true;\n\n        var token,\n            match,\n            tempMatch,\n            index,\n            col,\n            lines;\n        if (!this._more) {\n            this.yytext = '';\n            this.match = '';\n        }\n        var rules = this._currentRules();\n        for (var i=0;i < rules.length; i++) {\n            tempMatch = this._input.match(this.rules[rules[i]]);\n            if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n                match = tempMatch;\n                index = i;\n                if (!this.options.flex) break;\n            }\n        }\n        if (match) {\n            lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n            if (lines) this.yylineno += lines.length;\n            this.yylloc = {first_line: this.yylloc.last_line,\n                           last_line: this.yylineno+1,\n                           first_column: this.yylloc.last_column,\n                           last_column: lines ? lines[lines.length-1].length-lines[lines.length-1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length};\n            this.yytext += match[0];\n            this.match += match[0];\n            this.matches = match;\n            this.yyleng = this.yytext.length;\n            if (this.options.ranges) {\n                this.yylloc.range = [this.offset, this.offset += this.yyleng];\n            }\n            this._more = false;\n            this._input = this._input.slice(match[0].length);\n            this.matched += match[0];\n            token = this.performAction.call(this, this.yy, this, rules[index],this.conditionStack[this.conditionStack.length-1]);\n            if (this.done && this._input) this.done = false;\n            if (token) return token;\n            else return;\n        }\n        if (this._input === \"\") {\n            return this.EOF;\n        } else {\n            return this.parseError('Lexical error on line '+(this.yylineno+1)+'. Unrecognized text.\\n'+this.showPosition(),\n                    {text: \"\", token: null, line: this.yylineno});\n        }\n    },\nlex:function lex () {\n        var r = this.next();\n        if (typeof r !== 'undefined') {\n            return r;\n        } else {\n            return this.lex();\n        }\n    },\nbegin:function begin (condition) {\n        this.conditionStack.push(condition);\n    },\npopState:function popState () {\n        return this.conditionStack.pop();\n    },\n_currentRules:function _currentRules () {\n        return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules;\n    },\ntopState:function () {\n        return this.conditionStack[this.conditionStack.length-2];\n    },\npushState:function begin (condition) {\n        this.begin(condition);\n    }});\nlexer.options = {};\nlexer.performAction = function anonymous(yy,yy_,$avoiding_name_collisions,YY_START\n) {\n\n\nfunction strip(start, end) {\n  return yy_.yytext = yy_.yytext.substring(start, yy_.yyleng - end + start);\n}\n\n\nvar YYSTATE=YY_START\nswitch($avoiding_name_collisions) {\ncase 0:\n                                   if(yy_.yytext.slice(-2) === \"\\\\\\\\\") {\n                                     strip(0,1);\n                                     this.begin(\"mu\");\n                                   } else if(yy_.yytext.slice(-1) === \"\\\\\") {\n                                     strip(0,1);\n                                     this.begin(\"emu\");\n                                   } else {\n                                     this.begin(\"mu\");\n                                   }\n                                   if(yy_.yytext) return 15;\n                                 \nbreak;\ncase 1:return 15;\nbreak;\ncase 2:\n                                   this.popState();\n                                   return 15;\n                                 \nbreak;\ncase 3:this.begin('raw'); return 15;\nbreak;\ncase 4:\n                                  this.popState();\n                                  // Should be using `this.topState()` below, but it currently\n                                  // returns the second top instead of the first top. Opened an\n                                  // issue about it at https://github.com/zaach/jison/issues/291\n                                  if (this.conditionStack[this.conditionStack.length-1] === 'raw') {\n                                    return 15;\n                                  } else {\n                                    strip(5, 9);\n                                    return 'END_RAW_BLOCK';\n                                  }\n                                 \nbreak;\ncase 5: return 15; \nbreak;\ncase 6:\n  this.popState();\n  return 14;\n\nbreak;\ncase 7:return 65;\nbreak;\ncase 8:return 68;\nbreak;\ncase 9: return 19; \nbreak;\ncase 10:\n                                  this.popState();\n                                  this.begin('raw');\n                                  return 23;\n                                 \nbreak;\ncase 11:return 55;\nbreak;\ncase 12:return 60;\nbreak;\ncase 13:return 29;\nbreak;\ncase 14:return 47;\nbreak;\ncase 15:this.popState(); return 44;\nbreak;\ncase 16:this.popState(); return 44;\nbreak;\ncase 17:return 34;\nbreak;\ncase 18:return 39;\nbreak;\ncase 19:return 51;\nbreak;\ncase 20:return 48;\nbreak;\ncase 21:\n  this.unput(yy_.yytext);\n  this.popState();\n  this.begin('com');\n\nbreak;\ncase 22:\n  this.popState();\n  return 14;\n\nbreak;\ncase 23:return 48;\nbreak;\ncase 24:return 73;\nbreak;\ncase 25:return 72;\nbreak;\ncase 26:return 72;\nbreak;\ncase 27:return 87;\nbreak;\ncase 28:// ignore whitespace\nbreak;\ncase 29:this.popState(); return 54;\nbreak;\ncase 30:this.popState(); return 33;\nbreak;\ncase 31:yy_.yytext = strip(1,2).replace(/\\\\\"/g,'\"'); return 80;\nbreak;\ncase 32:yy_.yytext = strip(1,2).replace(/\\\\'/g,\"'\"); return 80;\nbreak;\ncase 33:return 85;\nbreak;\ncase 34:return 82;\nbreak;\ncase 35:return 82;\nbreak;\ncase 36:return 83;\nbreak;\ncase 37:return 84;\nbreak;\ncase 38:return 81;\nbreak;\ncase 39:return 75;\nbreak;\ncase 40:return 77;\nbreak;\ncase 41:return 72;\nbreak;\ncase 42:yy_.yytext = yy_.yytext.replace(/\\\\([\\\\\\]])/g,'$1'); return 72;\nbreak;\ncase 43:return 'INVALID';\nbreak;\ncase 44:return 5;\nbreak;\n}\n};\nlexer.rules = [/^(?:[^\\x00]*?(?=(\\{\\{)))/,/^(?:[^\\x00]+)/,/^(?:[^\\x00]{2,}?(?=(\\{\\{|\\\\\\{\\{|\\\\\\\\\\{\\{|$)))/,/^(?:\\{\\{\\{\\{(?=[^\\/]))/,/^(?:\\{\\{\\{\\{\\/[^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=[=}\\s\\/.])\\}\\}\\}\\})/,/^(?:[^\\x00]+?(?=(\\{\\{\\{\\{)))/,/^(?:[\\s\\S]*?--(~)?\\}\\})/,/^(?:\\()/,/^(?:\\))/,/^(?:\\{\\{\\{\\{)/,/^(?:\\}\\}\\}\\})/,/^(?:\\{\\{(~)?>)/,/^(?:\\{\\{(~)?#>)/,/^(?:\\{\\{(~)?#\\*?)/,/^(?:\\{\\{(~)?\\/)/,/^(?:\\{\\{(~)?\\^\\s*(~)?\\}\\})/,/^(?:\\{\\{(~)?\\s*else\\s*(~)?\\}\\})/,/^(?:\\{\\{(~)?\\^)/,/^(?:\\{\\{(~)?\\s*else\\b)/,/^(?:\\{\\{(~)?\\{)/,/^(?:\\{\\{(~)?&)/,/^(?:\\{\\{(~)?!--)/,/^(?:\\{\\{(~)?![\\s\\S]*?\\}\\})/,/^(?:\\{\\{(~)?\\*?)/,/^(?:=)/,/^(?:\\.\\.)/,/^(?:\\.(?=([=~}\\s\\/.)|])))/,/^(?:[\\/.])/,/^(?:\\s+)/,/^(?:\\}(~)?\\}\\})/,/^(?:(~)?\\}\\})/,/^(?:\"(\\\\[\"]|[^\"])*\")/,/^(?:'(\\\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\\s)])))/,/^(?:false(?=([~}\\s)])))/,/^(?:undefined(?=([~}\\s)])))/,/^(?:null(?=([~}\\s)])))/,/^(?:-?[0-9]+(?:\\.[0-9]+)?(?=([~}\\s)])))/,/^(?:as\\s+\\|)/,/^(?:\\|)/,/^(?:([^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=([=~}\\s\\/.)|]))))/,/^(?:\\[(\\\\\\]|[^\\]])*\\])/,/^(?:.)/,/^(?:$)/];\nlexer.conditions = {\"mu\":{\"rules\":[7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],\"inclusive\":false},\"emu\":{\"rules\":[2],\"inclusive\":false},\"com\":{\"rules\":[6],\"inclusive\":false},\"raw\":{\"rules\":[3,4,5],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,44],\"inclusive\":true}};\nreturn lexer;})()\nparser.lexer = lexer;\nfunction Parser () { this.yy = {}; }Parser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();export default handlebars;\n", "import Exception from '../exception';\n\nfunction Visitor() {\n  this.parents = [];\n}\n\nVisitor.prototype = {\n  constructor: Visitor,\n  mutating: false,\n\n  // Visits a given value. If mutating, will replace the value if necessary.\n  acceptKey: function(node, name) {\n    let value = this.accept(node[name]);\n    if (this.mutating) {\n      // Hacky sanity check: This may have a few false positives for type for the helper\n      // methods but will generally do the right thing without a lot of overhead.\n      if (value && !Visitor.prototype[value.type]) {\n        throw new Exception(\n          'Unexpected node type \"' +\n            value.type +\n            '\" found when accepting ' +\n            name +\n            ' on ' +\n            node.type\n        );\n      }\n      node[name] = value;\n    }\n  },\n\n  // Performs an accept operation with added sanity check to ensure\n  // required keys are not removed.\n  acceptRequired: function(node, name) {\n    this.acceptKey(node, name);\n\n    if (!node[name]) {\n      throw new Exception(node.type + ' requires ' + name);\n    }\n  },\n\n  // Traverses a given array. If mutating, empty respnses will be removed\n  // for child elements.\n  acceptArray: function(array) {\n    for (let i = 0, l = array.length; i < l; i++) {\n      this.acceptKey(array, i);\n\n      if (!array[i]) {\n        array.splice(i, 1);\n        i--;\n        l--;\n      }\n    }\n  },\n\n  accept: function(object) {\n    if (!object) {\n      return;\n    }\n\n    /* istanbul ignore next: Sanity code */\n    if (!this[object.type]) {\n      throw new Exception('Unknown type: ' + object.type, object);\n    }\n\n    if (this.current) {\n      this.parents.unshift(this.current);\n    }\n    this.current = object;\n\n    let ret = this[object.type](object);\n\n    this.current = this.parents.shift();\n\n    if (!this.mutating || ret) {\n      return ret;\n    } else if (ret !== false) {\n      return object;\n    }\n  },\n\n  Program: function(program) {\n    this.acceptArray(program.body);\n  },\n\n  MustacheStatement: visitSubExpression,\n  Decorator: visitSubExpression,\n\n  BlockStatement: visitBlock,\n  DecoratorBlock: visitBlock,\n\n  PartialStatement: visitPartial,\n  PartialBlockStatement: function(partial) {\n    visitPartial.call(this, partial);\n\n    this.acceptKey(partial, 'program');\n  },\n\n  ContentStatement: function(/* content */) {},\n  CommentStatement: function(/* comment */) {},\n\n  SubExpression: visitSubExpression,\n\n  PathExpression: function(/* path */) {},\n\n  StringLiteral: function(/* string */) {},\n  NumberLiteral: function(/* number */) {},\n  BooleanLiteral: function(/* bool */) {},\n  UndefinedLiteral: function(/* literal */) {},\n  NullLiteral: function(/* literal */) {},\n\n  Hash: function(hash) {\n    this.acceptArray(hash.pairs);\n  },\n  HashPair: function(pair) {\n    this.acceptRequired(pair, 'value');\n  }\n};\n\nfunction visitSubExpression(mustache) {\n  this.acceptRequired(mustache, 'path');\n  this.acceptArray(mustache.params);\n  this.acceptKey(mustache, 'hash');\n}\nfunction visitBlock(block) {\n  visitSubExpression.call(this, block);\n\n  this.acceptKey(block, 'program');\n  this.acceptKey(block, 'inverse');\n}\nfunction visitPartial(partial) {\n  this.acceptRequired(partial, 'name');\n  this.acceptArray(partial.params);\n  this.acceptKey(partial, 'hash');\n}\n\nexport default Visitor;\n", "import Visitor from './visitor';\n\nfunction WhitespaceControl(options = {}) {\n  this.options = options;\n}\nWhitespaceControl.prototype = new Visitor();\n\nWhitespaceControl.prototype.Program = function(program) {\n  const doStandalone = !this.options.ignoreStandalone;\n\n  let isRoot = !this.isRootSeen;\n  this.isRootSeen = true;\n\n  let body = program.body;\n  for (let i = 0, l = body.length; i < l; i++) {\n    let current = body[i],\n      strip = this.accept(current);\n\n    if (!strip) {\n      continue;\n    }\n\n    let _isPrevWhitespace = isPrevWhitespace(body, i, isRoot),\n      _isNextWhitespace = isNextWhitespace(body, i, isRoot),\n      openStandalone = strip.openStandalone && _isPrevWhitespace,\n      closeStandalone = strip.closeStandalone && _isNextWhitespace,\n      inlineStandalone =\n        strip.inlineStandalone && _isPrevWhitespace && _isNextWhitespace;\n\n    if (strip.close) {\n      omitRight(body, i, true);\n    }\n    if (strip.open) {\n      omitLeft(body, i, true);\n    }\n\n    if (doStandalone && inlineStandalone) {\n      omitRight(body, i);\n\n      if (omitLeft(body, i)) {\n        // If we are on a standalone node, save the indent info for partials\n        if (current.type === 'PartialStatement') {\n          // Pull out the whitespace from the final line\n          current.indent = /([ \\t]+$)/.exec(body[i - 1].original)[1];\n        }\n      }\n    }\n    if (doStandalone && openStandalone) {\n      omitRight((current.program || current.inverse).body);\n\n      // Strip out the previous content node if it's whitespace only\n      omitLeft(body, i);\n    }\n    if (doStandalone && closeStandalone) {\n      // Always strip the next node\n      omitRight(body, i);\n\n      omitLeft((current.inverse || current.program).body);\n    }\n  }\n\n  return program;\n};\n\nWhitespaceControl.prototype.BlockStatement = WhitespaceControl.prototype.DecoratorBlock = WhitespaceControl.prototype.PartialBlockStatement = function(\n  block\n) {\n  this.accept(block.program);\n  this.accept(block.inverse);\n\n  // Find the inverse program that is involed with whitespace stripping.\n  let program = block.program || block.inverse,\n    inverse = block.program && block.inverse,\n    firstInverse = inverse,\n    lastInverse = inverse;\n\n  if (inverse && inverse.chained) {\n    firstInverse = inverse.body[0].program;\n\n    // Walk the inverse chain to find the last inverse that is actually in the chain.\n    while (lastInverse.chained) {\n      lastInverse = lastInverse.body[lastInverse.body.length - 1].program;\n    }\n  }\n\n  let strip = {\n    open: block.openStrip.open,\n    close: block.closeStrip.close,\n\n    // Determine the standalone candiacy. Basically flag our content as being possibly standalone\n    // so our parent can determine if we actually are standalone\n    openStandalone: isNextWhitespace(program.body),\n    closeStandalone: isPrevWhitespace((firstInverse || program).body)\n  };\n\n  if (block.openStrip.close) {\n    omitRight(program.body, null, true);\n  }\n\n  if (inverse) {\n    let inverseStrip = block.inverseStrip;\n\n    if (inverseStrip.open) {\n      omitLeft(program.body, null, true);\n    }\n\n    if (inverseStrip.close) {\n      omitRight(firstInverse.body, null, true);\n    }\n    if (block.closeStrip.open) {\n      omitLeft(lastInverse.body, null, true);\n    }\n\n    // Find standalone else statments\n    if (\n      !this.options.ignoreStandalone &&\n      isPrevWhitespace(program.body) &&\n      isNextWhitespace(firstInverse.body)\n    ) {\n      omitLeft(program.body);\n      omitRight(firstInverse.body);\n    }\n  } else if (block.closeStrip.open) {\n    omitLeft(program.body, null, true);\n  }\n\n  return strip;\n};\n\nWhitespaceControl.prototype.Decorator = WhitespaceControl.prototype.MustacheStatement = function(\n  mustache\n) {\n  return mustache.strip;\n};\n\nWhitespaceControl.prototype.PartialStatement = WhitespaceControl.prototype.CommentStatement = function(\n  node\n) {\n  /* istanbul ignore next */\n  let strip = node.strip || {};\n  return {\n    inlineStandalone: true,\n    open: strip.open,\n    close: strip.close\n  };\n};\n\nfunction isPrevWhitespace(body, i, isRoot) {\n  if (i === undefined) {\n    i = body.length;\n  }\n\n  // Nodes that end with newlines are considered whitespace (but are special\n  // cased for strip operations)\n  let prev = body[i - 1],\n    sibling = body[i - 2];\n  if (!prev) {\n    return isRoot;\n  }\n\n  if (prev.type === 'ContentStatement') {\n    return (sibling || !isRoot ? /\\r?\\n\\s*?$/ : /(^|\\r?\\n)\\s*?$/).test(\n      prev.original\n    );\n  }\n}\nfunction isNextWhitespace(body, i, isRoot) {\n  if (i === undefined) {\n    i = -1;\n  }\n\n  let next = body[i + 1],\n    sibling = body[i + 2];\n  if (!next) {\n    return isRoot;\n  }\n\n  if (next.type === 'ContentStatement') {\n    return (sibling || !isRoot ? /^\\s*?\\r?\\n/ : /^\\s*?(\\r?\\n|$)/).test(\n      next.original\n    );\n  }\n}\n\n// Marks the node to the right of the position as omitted.\n// I.e. {{foo}}' ' will mark the ' ' node as omitted.\n//\n// If i is undefined, then the first child will be marked as such.\n//\n// If mulitple is truthy then all whitespace will be stripped out until non-whitespace\n// content is met.\nfunction omitRight(body, i, multiple) {\n  let current = body[i == null ? 0 : i + 1];\n  if (\n    !current ||\n    current.type !== 'ContentStatement' ||\n    (!multiple && current.rightStripped)\n  ) {\n    return;\n  }\n\n  let original = current.value;\n  current.value = current.value.replace(\n    multiple ? /^\\s+/ : /^[ \\t]*\\r?\\n?/,\n    ''\n  );\n  current.rightStripped = current.value !== original;\n}\n\n// Marks the node to the left of the position as omitted.\n// I.e. ' '{{foo}} will mark the ' ' node as omitted.\n//\n// If i is undefined then the last child will be marked as such.\n//\n// If mulitple is truthy then all whitespace will be stripped out until non-whitespace\n// content is met.\nfunction omitLeft(body, i, multiple) {\n  let current = body[i == null ? body.length - 1 : i - 1];\n  if (\n    !current ||\n    current.type !== 'ContentStatement' ||\n    (!multiple && current.leftStripped)\n  ) {\n    return;\n  }\n\n  // We omit the last node if it's whitespace only and not preceded by a non-content node.\n  let original = current.value;\n  current.value = current.value.replace(multiple ? /\\s+$/ : /[ \\t]+$/, '');\n  current.leftStripped = current.value !== original;\n  return current.leftStripped;\n}\n\nexport default WhitespaceControl;\n", "import Exception from '../exception';\n\nfunction validateClose(open, close) {\n  close = close.path ? close.path.original : close;\n\n  if (open.path.original !== close) {\n    let errorNode = { loc: open.path.loc };\n\n    throw new Exception(\n      open.path.original + \" doesn't match \" + close,\n      errorNode\n    );\n  }\n}\n\nexport function SourceLocation(source, locInfo) {\n  this.source = source;\n  this.start = {\n    line: locInfo.first_line,\n    column: locInfo.first_column\n  };\n  this.end = {\n    line: locInfo.last_line,\n    column: locInfo.last_column\n  };\n}\n\nexport function id(token) {\n  if (/^\\[.*\\]$/.test(token)) {\n    return token.substring(1, token.length - 1);\n  } else {\n    return token;\n  }\n}\n\nexport function stripFlags(open, close) {\n  return {\n    open: open.charAt(2) === '~',\n    close: close.charAt(close.length - 3) === '~'\n  };\n}\n\nexport function stripComment(comment) {\n  return comment.replace(/^\\{\\{~?!-?-?/, '').replace(/-?-?~?\\}\\}$/, '');\n}\n\nexport function preparePath(data, parts, loc) {\n  loc = this.locInfo(loc);\n\n  let original = data ? '@' : '',\n    dig = [],\n    depth = 0;\n\n  for (let i = 0, l = parts.length; i < l; i++) {\n    let part = parts[i].part,\n      // If we have [] syntax then we do not treat path references as operators,\n      // i.e. foo.[this] resolves to approximately context.foo['this']\n      isLiteral = parts[i].original !== part;\n    original += (parts[i].separator || '') + part;\n\n    if (!isLiteral && (part === '..' || part === '.' || part === 'this')) {\n      if (dig.length > 0) {\n        throw new Exception('Invalid path: ' + original, { loc });\n      } else if (part === '..') {\n        depth++;\n      }\n    } else {\n      dig.push(part);\n    }\n  }\n\n  return {\n    type: 'PathExpression',\n    data,\n    depth,\n    parts: dig,\n    original,\n    loc\n  };\n}\n\nexport function prepareMustache(path, params, hash, open, strip, locInfo) {\n  // Must use charAt to support IE pre-10\n  let escapeFlag = open.charAt(3) || open.charAt(2),\n    escaped = escapeFlag !== '{' && escapeFlag !== '&';\n\n  let decorator = /\\*/.test(open);\n  return {\n    type: decorator ? 'Decorator' : 'MustacheStatement',\n    path,\n    params,\n    hash,\n    escaped,\n    strip,\n    loc: this.locInfo(locInfo)\n  };\n}\n\nexport function prepareRawBlock(openRawBlock, contents, close, locInfo) {\n  validateClose(openRawBlock, close);\n\n  locInfo = this.locInfo(locInfo);\n  let program = {\n    type: 'Program',\n    body: contents,\n    strip: {},\n    loc: locInfo\n  };\n\n  return {\n    type: 'BlockStatement',\n    path: openRawBlock.path,\n    params: openRawBlock.params,\n    hash: openRawBlock.hash,\n    program,\n    openStrip: {},\n    inverseStrip: {},\n    closeStrip: {},\n    loc: locInfo\n  };\n}\n\nexport function prepareBlock(\n  openBlock,\n  program,\n  inverseAndProgram,\n  close,\n  inverted,\n  locInfo\n) {\n  if (close && close.path) {\n    validateClose(openBlock, close);\n  }\n\n  let decorator = /\\*/.test(openBlock.open);\n\n  program.blockParams = openBlock.blockParams;\n\n  let inverse, inverseStrip;\n\n  if (inverseAndProgram) {\n    if (decorator) {\n      throw new Exception(\n        'Unexpected inverse block on decorator',\n        inverseAndProgram\n      );\n    }\n\n    if (inverseAndProgram.chain) {\n      inverseAndProgram.program.body[0].closeStrip = close.strip;\n    }\n\n    inverseStrip = inverseAndProgram.strip;\n    inverse = inverseAndProgram.program;\n  }\n\n  if (inverted) {\n    inverted = inverse;\n    inverse = program;\n    program = inverted;\n  }\n\n  return {\n    type: decorator ? 'DecoratorBlock' : 'BlockStatement',\n    path: openBlock.path,\n    params: openBlock.params,\n    hash: openBlock.hash,\n    program,\n    inverse,\n    openStrip: openBlock.strip,\n    inverseStrip,\n    closeStrip: close && close.strip,\n    loc: this.locInfo(locInfo)\n  };\n}\n\nexport function prepareProgram(statements, loc) {\n  if (!loc && statements.length) {\n    const firstLoc = statements[0].loc,\n      lastLoc = statements[statements.length - 1].loc;\n\n    /* istanbul ignore else */\n    if (firstLoc && lastLoc) {\n      loc = {\n        source: firstLoc.source,\n        start: {\n          line: firstLoc.start.line,\n          column: firstLoc.start.column\n        },\n        end: {\n          line: lastLoc.end.line,\n          column: lastLoc.end.column\n        }\n      };\n    }\n  }\n\n  return {\n    type: 'Program',\n    body: statements,\n    strip: {},\n    loc: loc\n  };\n}\n\nexport function preparePartialBlock(open, program, close, locInfo) {\n  validateClose(open, close);\n\n  return {\n    type: 'PartialBlockStatement',\n    name: open.path,\n    params: open.params,\n    hash: open.hash,\n    program,\n    openStrip: open.strip,\n    closeStrip: close && close.strip,\n    loc: this.locInfo(locInfo)\n  };\n}\n", "import parser from './parser';\nimport WhitespaceControl from './whitespace-control';\nimport * as Helpers from './helpers';\nimport { extend } from '../utils';\n\nexport { parser };\n\nlet yy = {};\nextend(yy, Helpers);\n\nexport function parseWithoutProcessing(input, options) {\n  // Just return if an already-compiled AST was passed in.\n  if (input.type === 'Program') {\n    return input;\n  }\n\n  parser.yy = yy;\n\n  // Altering the shared object here, but this is ok as parser is a sync operation\n  yy.locInfo = function(locInfo) {\n    return new yy.SourceLocation(options && options.srcName, locInfo);\n  };\n\n  let ast = parser.parse(input);\n\n  return ast;\n}\n\nexport function parse(input, options) {\n  let ast = parseWithoutProcessing(input, options);\n  let strip = new WhitespaceControl(options);\n\n  return strip.accept(ast);\n}\n", "/* eslint-disable new-cap */\n\nimport Exception from '../exception';\nimport { isArray, indexOf, extend } from '../utils';\nimport AST from './ast';\n\nconst slice = [].slice;\n\nexport function Compiler() {}\n\n// the foundHelper register will disambiguate helper lookup from finding a\n// function in a context. This is necessary for mustache compatibility, which\n// requires that context functions in blocks are evaluated by blockHelperMissing,\n// and then proceed as if the resulting value was provided to blockHelperMissing.\n\nCompiler.prototype = {\n  compiler: Compiler,\n\n  equals: function(other) {\n    let len = this.opcodes.length;\n    if (other.opcodes.length !== len) {\n      return false;\n    }\n\n    for (let i = 0; i < len; i++) {\n      let opcode = this.opcodes[i],\n        otherOpcode = other.opcodes[i];\n      if (\n        opcode.opcode !== otherOpcode.opcode ||\n        !argEquals(opcode.args, otherOpcode.args)\n      ) {\n        return false;\n      }\n    }\n\n    // We know that length is the same between the two arrays because they are directly tied\n    // to the opcode behavior above.\n    len = this.children.length;\n    for (let i = 0; i < len; i++) {\n      if (!this.children[i].equals(other.children[i])) {\n        return false;\n      }\n    }\n\n    return true;\n  },\n\n  guid: 0,\n\n  compile: function(program, options) {\n    this.sourceNode = [];\n    this.opcodes = [];\n    this.children = [];\n    this.options = options;\n    this.stringParams = options.stringParams;\n    this.trackIds = options.trackIds;\n\n    options.blockParams = options.blockParams || [];\n\n    options.knownHelpers = extend(\n      Object.create(null),\n      {\n        helperMissing: true,\n        blockHelperMissing: true,\n        each: true,\n        if: true,\n        unless: true,\n        with: true,\n        log: true,\n        lookup: true\n      },\n      options.knownHelpers\n    );\n\n    return this.accept(program);\n  },\n\n  compileProgram: function(program) {\n    let childCompiler = new this.compiler(), // eslint-disable-line new-cap\n      result = childCompiler.compile(program, this.options),\n      guid = this.guid++;\n\n    this.usePartial = this.usePartial || result.usePartial;\n\n    this.children[guid] = result;\n    this.useDepths = this.useDepths || result.useDepths;\n\n    return guid;\n  },\n\n  accept: function(node) {\n    /* istanbul ignore next: Sanity code */\n    if (!this[node.type]) {\n      throw new Exception('Unknown type: ' + node.type, node);\n    }\n\n    this.sourceNode.unshift(node);\n    let ret = this[node.type](node);\n    this.sourceNode.shift();\n    return ret;\n  },\n\n  Program: function(program) {\n    this.options.blockParams.unshift(program.blockParams);\n\n    let body = program.body,\n      bodyLength = body.length;\n    for (let i = 0; i < bodyLength; i++) {\n      this.accept(body[i]);\n    }\n\n    this.options.blockParams.shift();\n\n    this.isSimple = bodyLength === 1;\n    this.blockParams = program.blockParams ? program.blockParams.length : 0;\n\n    return this;\n  },\n\n  BlockStatement: function(block) {\n    transformLiteralToPath(block);\n\n    let program = block.program,\n      inverse = block.inverse;\n\n    program = program && this.compileProgram(program);\n    inverse = inverse && this.compileProgram(inverse);\n\n    let type = this.classifySexpr(block);\n\n    if (type === 'helper') {\n      this.helperSexpr(block, program, inverse);\n    } else if (type === 'simple') {\n      this.simpleSexpr(block);\n\n      // now that the simple mustache is resolved, we need to\n      // evaluate it by executing `blockHelperMissing`\n      this.opcode('pushProgram', program);\n      this.opcode('pushProgram', inverse);\n      this.opcode('emptyHash');\n      this.opcode('blockValue', block.path.original);\n    } else {\n      this.ambiguousSexpr(block, program, inverse);\n\n      // now that the simple mustache is resolved, we need to\n      // evaluate it by executing `blockHelperMissing`\n      this.opcode('pushProgram', program);\n      this.opcode('pushProgram', inverse);\n      this.opcode('emptyHash');\n      this.opcode('ambiguousBlockValue');\n    }\n\n    this.opcode('append');\n  },\n\n  DecoratorBlock(decorator) {\n    let program = decorator.program && this.compileProgram(decorator.program);\n    let params = this.setupFullMustacheParams(decorator, program, undefined),\n      path = decorator.path;\n\n    this.useDecorators = true;\n    this.opcode('registerDecorator', params.length, path.original);\n  },\n\n  PartialStatement: function(partial) {\n    this.usePartial = true;\n\n    let program = partial.program;\n    if (program) {\n      program = this.compileProgram(partial.program);\n    }\n\n    let params = partial.params;\n    if (params.length > 1) {\n      throw new Exception(\n        'Unsupported number of partial arguments: ' + params.length,\n        partial\n      );\n    } else if (!params.length) {\n      if (this.options.explicitPartialContext) {\n        this.opcode('pushLiteral', 'undefined');\n      } else {\n        params.push({ type: 'PathExpression', parts: [], depth: 0 });\n      }\n    }\n\n    let partialName = partial.name.original,\n      isDynamic = partial.name.type === 'SubExpression';\n    if (isDynamic) {\n      this.accept(partial.name);\n    }\n\n    this.setupFullMustacheParams(partial, program, undefined, true);\n\n    let indent = partial.indent || '';\n    if (this.options.preventIndent && indent) {\n      this.opcode('appendContent', indent);\n      indent = '';\n    }\n\n    this.opcode('invokePartial', isDynamic, partialName, indent);\n    this.opcode('append');\n  },\n  PartialBlockStatement: function(partialBlock) {\n    this.PartialStatement(partialBlock);\n  },\n\n  MustacheStatement: function(mustache) {\n    this.SubExpression(mustache);\n\n    if (mustache.escaped && !this.options.noEscape) {\n      this.opcode('appendEscaped');\n    } else {\n      this.opcode('append');\n    }\n  },\n  Decorator(decorator) {\n    this.DecoratorBlock(decorator);\n  },\n\n  ContentStatement: function(content) {\n    if (content.value) {\n      this.opcode('appendContent', content.value);\n    }\n  },\n\n  CommentStatement: function() {},\n\n  SubExpression: function(sexpr) {\n    transformLiteralToPath(sexpr);\n    let type = this.classifySexpr(sexpr);\n\n    if (type === 'simple') {\n      this.simpleSexpr(sexpr);\n    } else if (type === 'helper') {\n      this.helperSexpr(sexpr);\n    } else {\n      this.ambiguousSexpr(sexpr);\n    }\n  },\n  ambiguousSexpr: function(sexpr, program, inverse) {\n    let path = sexpr.path,\n      name = path.parts[0],\n      isBlock = program != null || inverse != null;\n\n    this.opcode('getContext', path.depth);\n\n    this.opcode('pushProgram', program);\n    this.opcode('pushProgram', inverse);\n\n    path.strict = true;\n    this.accept(path);\n\n    this.opcode('invokeAmbiguous', name, isBlock);\n  },\n\n  simpleSexpr: function(sexpr) {\n    let path = sexpr.path;\n    path.strict = true;\n    this.accept(path);\n    this.opcode('resolvePossibleLambda');\n  },\n\n  helperSexpr: function(sexpr, program, inverse) {\n    let params = this.setupFullMustacheParams(sexpr, program, inverse),\n      path = sexpr.path,\n      name = path.parts[0];\n\n    if (this.options.knownHelpers[name]) {\n      this.opcode('invokeKnownHelper', params.length, name);\n    } else if (this.options.knownHelpersOnly) {\n      throw new Exception(\n        'You specified knownHelpersOnly, but used the unknown helper ' + name,\n        sexpr\n      );\n    } else {\n      path.strict = true;\n      path.falsy = true;\n\n      this.accept(path);\n      this.opcode(\n        'invokeHelper',\n        params.length,\n        path.original,\n        AST.helpers.simpleId(path)\n      );\n    }\n  },\n\n  PathExpression: function(path) {\n    this.addDepth(path.depth);\n    this.opcode('getContext', path.depth);\n\n    let name = path.parts[0],\n      scoped = AST.helpers.scopedId(path),\n      blockParamId = !path.depth && !scoped && this.blockParamIndex(name);\n\n    if (blockParamId) {\n      this.opcode('lookupBlockParam', blockParamId, path.parts);\n    } else if (!name) {\n      // Context reference, i.e. `{{foo .}}` or `{{foo ..}}`\n      this.opcode('pushContext');\n    } else if (path.data) {\n      this.options.data = true;\n      this.opcode('lookupData', path.depth, path.parts, path.strict);\n    } else {\n      this.opcode(\n        'lookupOnContext',\n        path.parts,\n        path.falsy,\n        path.strict,\n        scoped\n      );\n    }\n  },\n\n  StringLiteral: function(string) {\n    this.opcode('pushString', string.value);\n  },\n\n  NumberLiteral: function(number) {\n    this.opcode('pushLiteral', number.value);\n  },\n\n  BooleanLiteral: function(bool) {\n    this.opcode('pushLiteral', bool.value);\n  },\n\n  UndefinedLiteral: function() {\n    this.opcode('pushLiteral', 'undefined');\n  },\n\n  NullLiteral: function() {\n    this.opcode('pushLiteral', 'null');\n  },\n\n  Hash: function(hash) {\n    let pairs = hash.pairs,\n      i = 0,\n      l = pairs.length;\n\n    this.opcode('pushHash');\n\n    for (; i < l; i++) {\n      this.pushParam(pairs[i].value);\n    }\n    while (i--) {\n      this.opcode('assignToHash', pairs[i].key);\n    }\n    this.opcode('popHash');\n  },\n\n  // HELPERS\n  opcode: function(name) {\n    this.opcodes.push({\n      opcode: name,\n      args: slice.call(arguments, 1),\n      loc: this.sourceNode[0].loc\n    });\n  },\n\n  addDepth: function(depth) {\n    if (!depth) {\n      return;\n    }\n\n    this.useDepths = true;\n  },\n\n  classifySexpr: function(sexpr) {\n    let isSimple = AST.helpers.simpleId(sexpr.path);\n\n    let isBlockParam = isSimple && !!this.blockParamIndex(sexpr.path.parts[0]);\n\n    // a mustache is an eligible helper if:\n    // * its id is simple (a single part, not `this` or `..`)\n    let isHelper = !isBlockParam && AST.helpers.helperExpression(sexpr);\n\n    // if a mustache is an eligible helper but not a definite\n    // helper, it is ambiguous, and will be resolved in a later\n    // pass or at runtime.\n    let isEligible = !isBlockParam && (isHelper || isSimple);\n\n    // if ambiguous, we can possibly resolve the ambiguity now\n    // An eligible helper is one that does not have a complex path, i.e. `this.foo`, `../foo` etc.\n    if (isEligible && !isHelper) {\n      let name = sexpr.path.parts[0],\n        options = this.options;\n      if (options.knownHelpers[name]) {\n        isHelper = true;\n      } else if (options.knownHelpersOnly) {\n        isEligible = false;\n      }\n    }\n\n    if (isHelper) {\n      return 'helper';\n    } else if (isEligible) {\n      return 'ambiguous';\n    } else {\n      return 'simple';\n    }\n  },\n\n  pushParams: function(params) {\n    for (let i = 0, l = params.length; i < l; i++) {\n      this.pushParam(params[i]);\n    }\n  },\n\n  pushParam: function(val) {\n    let value = val.value != null ? val.value : val.original || '';\n\n    if (this.stringParams) {\n      if (value.replace) {\n        value = value.replace(/^(\\.?\\.\\/)*/g, '').replace(/\\//g, '.');\n      }\n\n      if (val.depth) {\n        this.addDepth(val.depth);\n      }\n      this.opcode('getContext', val.depth || 0);\n      this.opcode('pushStringParam', value, val.type);\n\n      if (val.type === 'SubExpression') {\n        // SubExpressions get evaluated and passed in\n        // in string params mode.\n        this.accept(val);\n      }\n    } else {\n      if (this.trackIds) {\n        let blockParamIndex;\n        if (val.parts && !AST.helpers.scopedId(val) && !val.depth) {\n          blockParamIndex = this.blockParamIndex(val.parts[0]);\n        }\n        if (blockParamIndex) {\n          let blockParamChild = val.parts.slice(1).join('.');\n          this.opcode('pushId', 'BlockParam', blockParamIndex, blockParamChild);\n        } else {\n          value = val.original || value;\n          if (value.replace) {\n            value = value\n              .replace(/^this(?:\\.|$)/, '')\n              .replace(/^\\.\\//, '')\n              .replace(/^\\.$/, '');\n          }\n\n          this.opcode('pushId', val.type, value);\n        }\n      }\n      this.accept(val);\n    }\n  },\n\n  setupFullMustacheParams: function(sexpr, program, inverse, omitEmpty) {\n    let params = sexpr.params;\n    this.pushParams(params);\n\n    this.opcode('pushProgram', program);\n    this.opcode('pushProgram', inverse);\n\n    if (sexpr.hash) {\n      this.accept(sexpr.hash);\n    } else {\n      this.opcode('emptyHash', omitEmpty);\n    }\n\n    return params;\n  },\n\n  blockParamIndex: function(name) {\n    for (\n      let depth = 0, len = this.options.blockParams.length;\n      depth < len;\n      depth++\n    ) {\n      let blockParams = this.options.blockParams[depth],\n        param = blockParams && indexOf(blockParams, name);\n      if (blockParams && param >= 0) {\n        return [depth, param];\n      }\n    }\n  }\n};\n\nexport function precompile(input, options, env) {\n  if (\n    input == null ||\n    (typeof input !== 'string' && input.type !== 'Program')\n  ) {\n    throw new Exception(\n      'You must pass a string or Handlebars AST to Handlebars.precompile. You passed ' +\n        input\n    );\n  }\n\n  options = options || {};\n  if (!('data' in options)) {\n    options.data = true;\n  }\n  if (options.compat) {\n    options.useDepths = true;\n  }\n\n  let ast = env.parse(input, options),\n    environment = new env.Compiler().compile(ast, options);\n  return new env.JavaScriptCompiler().compile(environment, options);\n}\n\nexport function compile(input, options = {}, env) {\n  if (\n    input == null ||\n    (typeof input !== 'string' && input.type !== 'Program')\n  ) {\n    throw new Exception(\n      'You must pass a string or Handlebars AST to Handlebars.compile. You passed ' +\n        input\n    );\n  }\n\n  options = extend({}, options);\n  if (!('data' in options)) {\n    options.data = true;\n  }\n  if (options.compat) {\n    options.useDepths = true;\n  }\n\n  let compiled;\n\n  function compileInput() {\n    let ast = env.parse(input, options),\n      environment = new env.Compiler().compile(ast, options),\n      templateSpec = new env.JavaScriptCompiler().compile(\n        environment,\n        options,\n        undefined,\n        true\n      );\n    return env.template(templateSpec);\n  }\n\n  // Template is only compiled on first use and cached after that point.\n  function ret(context, execOptions) {\n    if (!compiled) {\n      compiled = compileInput();\n    }\n    return compiled.call(this, context, execOptions);\n  }\n  ret._setup = function(setupOptions) {\n    if (!compiled) {\n      compiled = compileInput();\n    }\n    return compiled._setup(setupOptions);\n  };\n  ret._child = function(i, data, blockParams, depths) {\n    if (!compiled) {\n      compiled = compileInput();\n    }\n    return compiled._child(i, data, blockParams, depths);\n  };\n  return ret;\n}\n\nfunction argEquals(a, b) {\n  if (a === b) {\n    return true;\n  }\n\n  if (isArray(a) && isArray(b) && a.length === b.length) {\n    for (let i = 0; i < a.length; i++) {\n      if (!argEquals(a[i], b[i])) {\n        return false;\n      }\n    }\n    return true;\n  }\n}\n\nfunction transformLiteralToPath(sexpr) {\n  if (!sexpr.path.parts) {\n    let literal = sexpr.path;\n    // Casting to string here to make false and 0 literal values play nicely with the rest\n    // of the system.\n    sexpr.path = {\n      type: 'PathExpression',\n      data: false,\n      depth: 0,\n      parts: [literal.original + ''],\n      original: literal.original + '',\n      loc: literal.loc\n    };\n  }\n}\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n  if (0 <= number && number < intToCharMap.length) {\n    return intToCharMap[number];\n  }\n  throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n  var bigA = 65;     // 'A'\n  var bigZ = 90;     // 'Z'\n\n  var littleA = 97;  // 'a'\n  var littleZ = 122; // 'z'\n\n  var zero = 48;     // '0'\n  var nine = 57;     // '9'\n\n  var plus = 43;     // '+'\n  var slash = 47;    // '/'\n\n  var littleOffset = 26;\n  var numberOffset = 52;\n\n  // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n  if (bigA <= charCode && charCode <= bigZ) {\n    return (charCode - bigA);\n  }\n\n  // 26 - 51: abcdefghijklmnopqrstuvwxyz\n  if (littleA <= charCode && charCode <= littleZ) {\n    return (charCode - littleA + littleOffset);\n  }\n\n  // 52 - 61: 0123456789\n  if (zero <= charCode && charCode <= nine) {\n    return (charCode - zero + numberOffset);\n  }\n\n  // 62: +\n  if (charCode == plus) {\n    return 62;\n  }\n\n  // 63: /\n  if (charCode == slash) {\n    return 63;\n  }\n\n  // Invalid base64 digit.\n  return -1;\n};\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above\n *    copyright notice, this list of conditions and the following\n *    disclaimer in the documentation and/or other materials provided\n *    with the distribution.\n *  * Neither the name of Google Inc. nor the names of its\n *    contributors may be used to endorse or promote products derived\n *    from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = require('./base64');\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n//   Continuation\n//   |    Sign\n//   |    |\n//   V    V\n//   101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n  return aValue < 0\n    ? ((-aValue) << 1) + 1\n    : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n  var isNegative = (aValue & 1) === 1;\n  var shifted = aValue >> 1;\n  return isNegative\n    ? -shifted\n    : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n  var encoded = \"\";\n  var digit;\n\n  var vlq = toVLQSigned(aValue);\n\n  do {\n    digit = vlq & VLQ_BASE_MASK;\n    vlq >>>= VLQ_BASE_SHIFT;\n    if (vlq > 0) {\n      // There are still more digits in this value, so we must make sure the\n      // continuation bit is marked.\n      digit |= VLQ_CONTINUATION_BIT;\n    }\n    encoded += base64.encode(digit);\n  } while (vlq > 0);\n\n  return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n  var strLen = aStr.length;\n  var result = 0;\n  var shift = 0;\n  var continuation, digit;\n\n  do {\n    if (aIndex >= strLen) {\n      throw new Error(\"Expected more digits in base 64 VLQ value.\");\n    }\n\n    digit = base64.decode(aStr.charCodeAt(aIndex++));\n    if (digit === -1) {\n      throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n    }\n\n    continuation = !!(digit & VLQ_CONTINUATION_BIT);\n    digit &= VLQ_BASE_MASK;\n    result = result + (digit << shift);\n    shift += VLQ_BASE_SHIFT;\n  } while (continuation);\n\n  aOutParam.value = fromVLQSigned(result);\n  aOutParam.rest = aIndex;\n};\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n  if (aName in aArgs) {\n    return aArgs[aName];\n  } else if (arguments.length === 3) {\n    return aDefaultValue;\n  } else {\n    throw new Error('\"' + aName + '\" is a required argument.');\n  }\n}\nexports.getArg = getArg;\n\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.-]*)(?::(\\d+))?(.*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\n\nfunction urlParse(aUrl) {\n  var match = aUrl.match(urlRegexp);\n  if (!match) {\n    return null;\n  }\n  return {\n    scheme: match[1],\n    auth: match[2],\n    host: match[3],\n    port: match[4],\n    path: match[5]\n  };\n}\nexports.urlParse = urlParse;\n\nfunction urlGenerate(aParsedUrl) {\n  var url = '';\n  if (aParsedUrl.scheme) {\n    url += aParsedUrl.scheme + ':';\n  }\n  url += '//';\n  if (aParsedUrl.auth) {\n    url += aParsedUrl.auth + '@';\n  }\n  if (aParsedUrl.host) {\n    url += aParsedUrl.host;\n  }\n  if (aParsedUrl.port) {\n    url += \":\" + aParsedUrl.port\n  }\n  if (aParsedUrl.path) {\n    url += aParsedUrl.path;\n  }\n  return url;\n}\nexports.urlGenerate = urlGenerate;\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '<dir>/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nfunction normalize(aPath) {\n  var path = aPath;\n  var url = urlParse(aPath);\n  if (url) {\n    if (!url.path) {\n      return aPath;\n    }\n    path = url.path;\n  }\n  var isAbsolute = exports.isAbsolute(path);\n\n  var parts = path.split(/\\/+/);\n  for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n    part = parts[i];\n    if (part === '.') {\n      parts.splice(i, 1);\n    } else if (part === '..') {\n      up++;\n    } else if (up > 0) {\n      if (part === '') {\n        // The first part is blank if the path is absolute. Trying to go\n        // above the root is a no-op. Therefore we can remove all '..' parts\n        // directly after the root.\n        parts.splice(i + 1, up);\n        up = 0;\n      } else {\n        parts.splice(i, 2);\n        up--;\n      }\n    }\n  }\n  path = parts.join('/');\n\n  if (path === '') {\n    path = isAbsolute ? '/' : '.';\n  }\n\n  if (url) {\n    url.path = path;\n    return urlGenerate(url);\n  }\n  return path;\n}\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n *   first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n *   is updated with the result and aRoot is returned. Otherwise the result\n *   is returned.\n *   - If aPath is absolute, the result is aPath.\n *   - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n  if (aPath === \"\") {\n    aPath = \".\";\n  }\n  var aPathUrl = urlParse(aPath);\n  var aRootUrl = urlParse(aRoot);\n  if (aRootUrl) {\n    aRoot = aRootUrl.path || '/';\n  }\n\n  // `join(foo, '//www.example.org')`\n  if (aPathUrl && !aPathUrl.scheme) {\n    if (aRootUrl) {\n      aPathUrl.scheme = aRootUrl.scheme;\n    }\n    return urlGenerate(aPathUrl);\n  }\n\n  if (aPathUrl || aPath.match(dataUrlRegexp)) {\n    return aPath;\n  }\n\n  // `join('http://', 'www.example.com')`\n  if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n    aRootUrl.host = aPath;\n    return urlGenerate(aRootUrl);\n  }\n\n  var joined = aPath.charAt(0) === '/'\n    ? aPath\n    : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n  if (aRootUrl) {\n    aRootUrl.path = joined;\n    return urlGenerate(aRootUrl);\n  }\n  return joined;\n}\nexports.join = join;\n\nexports.isAbsolute = function (aPath) {\n  return aPath.charAt(0) === '/' || urlRegexp.test(aPath);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n\n  aRoot = aRoot.replace(/\\/$/, '');\n\n  // It is possible for the path to be above the root. In this case, simply\n  // checking whether the root is a prefix of the path won't work. Instead, we\n  // need to remove components from the root one by one, until either we find\n  // a prefix that fits, or we run out of components to remove.\n  var level = 0;\n  while (aPath.indexOf(aRoot + '/') !== 0) {\n    var index = aRoot.lastIndexOf(\"/\");\n    if (index < 0) {\n      return aPath;\n    }\n\n    // If the only part of the root that is left is the scheme (i.e. http://,\n    // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n    // have exhausted all components, so the path is not relative to the root.\n    aRoot = aRoot.slice(0, index);\n    if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n      return aPath;\n    }\n\n    ++level;\n  }\n\n  // Make sure we add a \"../\" for each component we removed from the root.\n  return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\n\nvar supportsNullProto = (function () {\n  var obj = Object.create(null);\n  return !('__proto__' in obj);\n}());\n\nfunction identity (s) {\n  return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return '$' + aStr;\n  }\n\n  return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\n\nfunction fromSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return aStr.slice(1);\n  }\n\n  return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\n\nfunction isProtoString(s) {\n  if (!s) {\n    return false;\n  }\n\n  var length = s.length;\n\n  if (length < 9 /* \"__proto__\".length */) {\n    return false;\n  }\n\n  if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 2) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n      s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n      s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n      s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n      s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n      s.charCodeAt(length - 8) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 9) !== 95  /* '_' */) {\n    return false;\n  }\n\n  for (var i = length - 10; i >= 0; i--) {\n    if (s.charCodeAt(i) !== 36 /* '$' */) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n  var cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0 || onlyCompareOriginal) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0 || onlyCompareGenerated) {\n    return cmp;\n  }\n\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\nfunction strcmp(aStr1, aStr2) {\n  if (aStr1 === aStr2) {\n    return 0;\n  }\n\n  if (aStr1 === null) {\n    return 1; // aStr2 !== null\n  }\n\n  if (aStr2 === null) {\n    return -1; // aStr1 !== null\n  }\n\n  if (aStr1 > aStr2) {\n    return 1;\n  }\n\n  return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n/**\n * Strip any JSON XSSI avoidance prefix from the string (as documented\n * in the source maps specification), and then parse the string as\n * JSON.\n */\nfunction parseSourceMapInput(str) {\n  return JSON.parse(str.replace(/^\\)]}'[^\\n]*\\n/, ''));\n}\nexports.parseSourceMapInput = parseSourceMapInput;\n\n/**\n * Compute the URL of a source given the the source root, the source's\n * URL, and the source map's URL.\n */\nfunction computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {\n  sourceURL = sourceURL || '';\n\n  if (sourceRoot) {\n    // This follows what Chrome does.\n    if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {\n      sourceRoot += '/';\n    }\n    // The spec says:\n    //   Line 4: An optional source root, useful for relocating source\n    //   files on a server or removing repeated values in the\n    //   \u201Csources\u201D entry.  This value is prepended to the individual\n    //   entries in the \u201Csource\u201D field.\n    sourceURL = sourceRoot + sourceURL;\n  }\n\n  // Historically, SourceMapConsumer did not take the sourceMapURL as\n  // a parameter.  This mode is still somewhat supported, which is why\n  // this code block is conditional.  However, it's preferable to pass\n  // the source map URL to SourceMapConsumer, so that this function\n  // can implement the source URL resolution algorithm as outlined in\n  // the spec.  This block is basically the equivalent of:\n  //    new URL(sourceURL, sourceMapURL).toString()\n  // ... except it avoids using URL, which wasn't available in the\n  // older releases of node still supported by this library.\n  //\n  // The spec says:\n  //   If the sources are not absolute URLs after prepending of the\n  //   \u201CsourceRoot\u201D, the sources are resolved relative to the\n  //   SourceMap (like resolving script src in a html document).\n  if (sourceMapURL) {\n    var parsed = urlParse(sourceMapURL);\n    if (!parsed) {\n      throw new Error(\"sourceMapURL could not be parsed\");\n    }\n    if (parsed.path) {\n      // Strip the last path component, but keep the \"/\".\n      var index = parsed.path.lastIndexOf('/');\n      if (index >= 0) {\n        parsed.path = parsed.path.substring(0, index + 1);\n      }\n    }\n    sourceURL = join(urlGenerate(parsed), sourceURL);\n  }\n\n  return normalize(sourceURL);\n}\nexports.computeSourceURL = computeSourceURL;\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar has = Object.prototype.hasOwnProperty;\nvar hasNativeMap = typeof Map !== \"undefined\";\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n  this._array = [];\n  this._set = hasNativeMap ? new Map() : Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n  var set = new ArraySet();\n  for (var i = 0, len = aArray.length; i < len; i++) {\n    set.add(aArray[i], aAllowDuplicates);\n  }\n  return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n  return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n  var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n  var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n  var idx = this._array.length;\n  if (!isDuplicate || aAllowDuplicates) {\n    this._array.push(aStr);\n  }\n  if (!isDuplicate) {\n    if (hasNativeMap) {\n      this._set.set(aStr, idx);\n    } else {\n      this._set[sStr] = idx;\n    }\n  }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n  if (hasNativeMap) {\n    return this._set.has(aStr);\n  } else {\n    var sStr = util.toSetString(aStr);\n    return has.call(this._set, sStr);\n  }\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n  if (hasNativeMap) {\n    var idx = this._set.get(aStr);\n    if (idx >= 0) {\n        return idx;\n    }\n  } else {\n    var sStr = util.toSetString(aStr);\n    if (has.call(this._set, sStr)) {\n      return this._set[sStr];\n    }\n  }\n\n  throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n  if (aIdx >= 0 && aIdx < this._array.length) {\n    return this._array[aIdx];\n  }\n  throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n  return this._array.slice();\n};\n\nexports.ArraySet = ArraySet;\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2014 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\n\n/**\n * Determine whether mappingB is after mappingA with respect to generated\n * position.\n */\nfunction generatedPositionAfter(mappingA, mappingB) {\n  // Optimized for most common case\n  var lineA = mappingA.generatedLine;\n  var lineB = mappingB.generatedLine;\n  var columnA = mappingA.generatedColumn;\n  var columnB = mappingB.generatedColumn;\n  return lineB > lineA || lineB == lineA && columnB >= columnA ||\n         util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n}\n\n/**\n * A data structure to provide a sorted view of accumulated mappings in a\n * performance conscious manner. It trades a neglibable overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nfunction MappingList() {\n  this._array = [];\n  this._sorted = true;\n  // Serves as infimum\n  this._last = {generatedLine: -1, generatedColumn: 0};\n}\n\n/**\n * Iterate through internal items. This method takes the same arguments that\n * `Array.prototype.forEach` takes.\n *\n * NOTE: The order of the mappings is NOT guaranteed.\n */\nMappingList.prototype.unsortedForEach =\n  function MappingList_forEach(aCallback, aThisArg) {\n    this._array.forEach(aCallback, aThisArg);\n  };\n\n/**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\nMappingList.prototype.add = function MappingList_add(aMapping) {\n  if (generatedPositionAfter(this._last, aMapping)) {\n    this._last = aMapping;\n    this._array.push(aMapping);\n  } else {\n    this._sorted = false;\n    this._array.push(aMapping);\n  }\n};\n\n/**\n * Returns the flat, sorted array of mappings. The mappings are sorted by\n * generated position.\n *\n * WARNING: This method returns internal data without copying, for\n * performance. The return value must NOT be mutated, and should be treated as\n * an immutable borrow. If you want to take ownership, you must make your own\n * copy.\n */\nMappingList.prototype.toArray = function MappingList_toArray() {\n  if (!this._sorted) {\n    this._array.sort(util.compareByGeneratedPositionsInflated);\n    this._sorted = true;\n  }\n  return this._array;\n};\n\nexports.MappingList = MappingList;\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar base64VLQ = require('./base64-vlq');\nvar util = require('./util');\nvar ArraySet = require('./array-set').ArraySet;\nvar MappingList = require('./mapping-list').MappingList;\n\n/**\n * An instance of the SourceMapGenerator represents a source map which is\n * being built incrementally. You may pass an object with the following\n * properties:\n *\n *   - file: The filename of the generated source.\n *   - sourceRoot: A root for all relative URLs in this source map.\n */\nfunction SourceMapGenerator(aArgs) {\n  if (!aArgs) {\n    aArgs = {};\n  }\n  this._file = util.getArg(aArgs, 'file', null);\n  this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n  this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n  this._mappings = new MappingList();\n  this._sourcesContents = null;\n}\n\nSourceMapGenerator.prototype._version = 3;\n\n/**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\nSourceMapGenerator.fromSourceMap =\n  function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {\n    var sourceRoot = aSourceMapConsumer.sourceRoot;\n    var generator = new SourceMapGenerator({\n      file: aSourceMapConsumer.file,\n      sourceRoot: sourceRoot\n    });\n    aSourceMapConsumer.eachMapping(function (mapping) {\n      var newMapping = {\n        generated: {\n          line: mapping.generatedLine,\n          column: mapping.generatedColumn\n        }\n      };\n\n      if (mapping.source != null) {\n        newMapping.source = mapping.source;\n        if (sourceRoot != null) {\n          newMapping.source = util.relative(sourceRoot, newMapping.source);\n        }\n\n        newMapping.original = {\n          line: mapping.originalLine,\n          column: mapping.originalColumn\n        };\n\n        if (mapping.name != null) {\n          newMapping.name = mapping.name;\n        }\n      }\n\n      generator.addMapping(newMapping);\n    });\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var sourceRelative = sourceFile;\n      if (sourceRoot !== null) {\n        sourceRelative = util.relative(sourceRoot, sourceFile);\n      }\n\n      if (!generator._sources.has(sourceRelative)) {\n        generator._sources.add(sourceRelative);\n      }\n\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        generator.setSourceContent(sourceFile, content);\n      }\n    });\n    return generator;\n  };\n\n/**\n * Add a single mapping from original source line and column to the generated\n * source's line and column for this source map being created. The mapping\n * object should have the following properties:\n *\n *   - generated: An object with the generated line and column positions.\n *   - original: An object with the original line and column positions.\n *   - source: The original source file (relative to the sourceRoot).\n *   - name: An optional original token name for this mapping.\n */\nSourceMapGenerator.prototype.addMapping =\n  function SourceMapGenerator_addMapping(aArgs) {\n    var generated = util.getArg(aArgs, 'generated');\n    var original = util.getArg(aArgs, 'original', null);\n    var source = util.getArg(aArgs, 'source', null);\n    var name = util.getArg(aArgs, 'name', null);\n\n    if (!this._skipValidation) {\n      this._validateMapping(generated, original, source, name);\n    }\n\n    if (source != null) {\n      source = String(source);\n      if (!this._sources.has(source)) {\n        this._sources.add(source);\n      }\n    }\n\n    if (name != null) {\n      name = String(name);\n      if (!this._names.has(name)) {\n        this._names.add(name);\n      }\n    }\n\n    this._mappings.add({\n      generatedLine: generated.line,\n      generatedColumn: generated.column,\n      originalLine: original != null && original.line,\n      originalColumn: original != null && original.column,\n      source: source,\n      name: name\n    });\n  };\n\n/**\n * Set the source content for a source file.\n */\nSourceMapGenerator.prototype.setSourceContent =\n  function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n    var source = aSourceFile;\n    if (this._sourceRoot != null) {\n      source = util.relative(this._sourceRoot, source);\n    }\n\n    if (aSourceContent != null) {\n      // Add the source content to the _sourcesContents map.\n      // Create a new _sourcesContents map if the property is null.\n      if (!this._sourcesContents) {\n        this._sourcesContents = Object.create(null);\n      }\n      this._sourcesContents[util.toSetString(source)] = aSourceContent;\n    } else if (this._sourcesContents) {\n      // Remove the source file from the _sourcesContents map.\n      // If the _sourcesContents map is empty, set the property to null.\n      delete this._sourcesContents[util.toSetString(source)];\n      if (Object.keys(this._sourcesContents).length === 0) {\n        this._sourcesContents = null;\n      }\n    }\n  };\n\n/**\n * Applies the mappings of a sub-source-map for a specific source file to the\n * source map being generated. Each mapping to the supplied source file is\n * rewritten using the supplied source map. Note: The resolution for the\n * resulting mappings is the minimium of this map and the supplied map.\n *\n * @param aSourceMapConsumer The source map to be applied.\n * @param aSourceFile Optional. The filename of the source file.\n *        If omitted, SourceMapConsumer's file property will be used.\n * @param aSourceMapPath Optional. The dirname of the path to the source map\n *        to be applied. If relative, it is relative to the SourceMapConsumer.\n *        This parameter is needed when the two source maps aren't in the same\n *        directory, and the source map to be applied contains relative source\n *        paths. If so, those relative source paths need to be rewritten\n *        relative to the SourceMapGenerator.\n */\nSourceMapGenerator.prototype.applySourceMap =\n  function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n    var sourceFile = aSourceFile;\n    // If aSourceFile is omitted, we will use the file property of the SourceMap\n    if (aSourceFile == null) {\n      if (aSourceMapConsumer.file == null) {\n        throw new Error(\n          'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n          'or the source map\\'s \"file\" property. Both were omitted.'\n        );\n      }\n      sourceFile = aSourceMapConsumer.file;\n    }\n    var sourceRoot = this._sourceRoot;\n    // Make \"sourceFile\" relative if an absolute Url is passed.\n    if (sourceRoot != null) {\n      sourceFile = util.relative(sourceRoot, sourceFile);\n    }\n    // Applying the SourceMap can add and remove items from the sources and\n    // the names array.\n    var newSources = new ArraySet();\n    var newNames = new ArraySet();\n\n    // Find mappings for the \"sourceFile\"\n    this._mappings.unsortedForEach(function (mapping) {\n      if (mapping.source === sourceFile && mapping.originalLine != null) {\n        // Check if it can be mapped by the source map, then update the mapping.\n        var original = aSourceMapConsumer.originalPositionFor({\n          line: mapping.originalLine,\n          column: mapping.originalColumn\n        });\n        if (original.source != null) {\n          // Copy mapping\n          mapping.source = original.source;\n          if (aSourceMapPath != null) {\n            mapping.source = util.join(aSourceMapPath, mapping.source)\n          }\n          if (sourceRoot != null) {\n            mapping.source = util.relative(sourceRoot, mapping.source);\n          }\n          mapping.originalLine = original.line;\n          mapping.originalColumn = original.column;\n          if (original.name != null) {\n            mapping.name = original.name;\n          }\n        }\n      }\n\n      var source = mapping.source;\n      if (source != null && !newSources.has(source)) {\n        newSources.add(source);\n      }\n\n      var name = mapping.name;\n      if (name != null && !newNames.has(name)) {\n        newNames.add(name);\n      }\n\n    }, this);\n    this._sources = newSources;\n    this._names = newNames;\n\n    // Copy sourcesContents of applied map.\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        if (aSourceMapPath != null) {\n          sourceFile = util.join(aSourceMapPath, sourceFile);\n        }\n        if (sourceRoot != null) {\n          sourceFile = util.relative(sourceRoot, sourceFile);\n        }\n        this.setSourceContent(sourceFile, content);\n      }\n    }, this);\n  };\n\n/**\n * A mapping can have one of the three levels of data:\n *\n *   1. Just the generated position.\n *   2. The Generated position, original position, and original source.\n *   3. Generated and original position, original source, as well as a name\n *      token.\n *\n * To maintain consistency, we validate that any new mapping being added falls\n * in to one of these categories.\n */\nSourceMapGenerator.prototype._validateMapping =\n  function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n                                              aName) {\n    // When aOriginal is truthy but has empty values for .line and .column,\n    // it is most likely a programmer error. In this case we throw a very\n    // specific error message to try to guide them the right way.\n    // For example: https://github.com/Polymer/polymer-bundler/pull/519\n    if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {\n        throw new Error(\n            'original.line and original.column are not numbers -- you probably meant to omit ' +\n            'the original mapping entirely and only map the generated position. If so, pass ' +\n            'null for the original mapping instead of an object with empty or null values.'\n        );\n    }\n\n    if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n        && aGenerated.line > 0 && aGenerated.column >= 0\n        && !aOriginal && !aSource && !aName) {\n      // Case 1.\n      return;\n    }\n    else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n             && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n             && aGenerated.line > 0 && aGenerated.column >= 0\n             && aOriginal.line > 0 && aOriginal.column >= 0\n             && aSource) {\n      // Cases 2 and 3.\n      return;\n    }\n    else {\n      throw new Error('Invalid mapping: ' + JSON.stringify({\n        generated: aGenerated,\n        source: aSource,\n        original: aOriginal,\n        name: aName\n      }));\n    }\n  };\n\n/**\n * Serialize the accumulated mappings in to the stream of base 64 VLQs\n * specified by the source map format.\n */\nSourceMapGenerator.prototype._serializeMappings =\n  function SourceMapGenerator_serializeMappings() {\n    var previousGeneratedColumn = 0;\n    var previousGeneratedLine = 1;\n    var previousOriginalColumn = 0;\n    var previousOriginalLine = 0;\n    var previousName = 0;\n    var previousSource = 0;\n    var result = '';\n    var next;\n    var mapping;\n    var nameIdx;\n    var sourceIdx;\n\n    var mappings = this._mappings.toArray();\n    for (var i = 0, len = mappings.length; i < len; i++) {\n      mapping = mappings[i];\n      next = ''\n\n      if (mapping.generatedLine !== previousGeneratedLine) {\n        previousGeneratedColumn = 0;\n        while (mapping.generatedLine !== previousGeneratedLine) {\n          next += ';';\n          previousGeneratedLine++;\n        }\n      }\n      else {\n        if (i > 0) {\n          if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n            continue;\n          }\n          next += ',';\n        }\n      }\n\n      next += base64VLQ.encode(mapping.generatedColumn\n                                 - previousGeneratedColumn);\n      previousGeneratedColumn = mapping.generatedColumn;\n\n      if (mapping.source != null) {\n        sourceIdx = this._sources.indexOf(mapping.source);\n        next += base64VLQ.encode(sourceIdx - previousSource);\n        previousSource = sourceIdx;\n\n        // lines are stored 0-based in SourceMap spec version 3\n        next += base64VLQ.encode(mapping.originalLine - 1\n                                   - previousOriginalLine);\n        previousOriginalLine = mapping.originalLine - 1;\n\n        next += base64VLQ.encode(mapping.originalColumn\n                                   - previousOriginalColumn);\n        previousOriginalColumn = mapping.originalColumn;\n\n        if (mapping.name != null) {\n          nameIdx = this._names.indexOf(mapping.name);\n          next += base64VLQ.encode(nameIdx - previousName);\n          previousName = nameIdx;\n        }\n      }\n\n      result += next;\n    }\n\n    return result;\n  };\n\nSourceMapGenerator.prototype._generateSourcesContent =\n  function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n    return aSources.map(function (source) {\n      if (!this._sourcesContents) {\n        return null;\n      }\n      if (aSourceRoot != null) {\n        source = util.relative(aSourceRoot, source);\n      }\n      var key = util.toSetString(source);\n      return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n        ? this._sourcesContents[key]\n        : null;\n    }, this);\n  };\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator.prototype.toJSON =\n  function SourceMapGenerator_toJSON() {\n    var map = {\n      version: this._version,\n      sources: this._sources.toArray(),\n      names: this._names.toArray(),\n      mappings: this._serializeMappings()\n    };\n    if (this._file != null) {\n      map.file = this._file;\n    }\n    if (this._sourceRoot != null) {\n      map.sourceRoot = this._sourceRoot;\n    }\n    if (this._sourcesContents) {\n      map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n    }\n\n    return map;\n  };\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator.prototype.toString =\n  function SourceMapGenerator_toString() {\n    return JSON.stringify(this.toJSON());\n  };\n\nexports.SourceMapGenerator = SourceMapGenerator;\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nexports.GREATEST_LOWER_BOUND = 1;\nexports.LEAST_UPPER_BOUND = 2;\n\n/**\n * Recursive implementation of binary search.\n *\n * @param aLow Indices here and lower do not contain the needle.\n * @param aHigh Indices here and higher do not contain the needle.\n * @param aNeedle The element being searched for.\n * @param aHaystack The non-empty array being searched.\n * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n */\nfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n  // This function terminates when one of the following is true:\n  //\n  //   1. We find the exact element we are looking for.\n  //\n  //   2. We did not find the exact element, but we can return the index of\n  //      the next-closest element.\n  //\n  //   3. We did not find the exact element, and there is no next-closest\n  //      element than the one we are searching for, so we return -1.\n  var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n  var cmp = aCompare(aNeedle, aHaystack[mid], true);\n  if (cmp === 0) {\n    // Found the element we are looking for.\n    return mid;\n  }\n  else if (cmp > 0) {\n    // Our needle is greater than aHaystack[mid].\n    if (aHigh - mid > 1) {\n      // The element is in the upper half.\n      return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n    }\n\n    // The exact needle element was not found in this haystack. Determine if\n    // we are in termination case (3) or (2) and return the appropriate thing.\n    if (aBias == exports.LEAST_UPPER_BOUND) {\n      return aHigh < aHaystack.length ? aHigh : -1;\n    } else {\n      return mid;\n    }\n  }\n  else {\n    // Our needle is less than aHaystack[mid].\n    if (mid - aLow > 1) {\n      // The element is in the lower half.\n      return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n    }\n\n    // we are in termination case (3) or (2) and return the appropriate thing.\n    if (aBias == exports.LEAST_UPPER_BOUND) {\n      return mid;\n    } else {\n      return aLow < 0 ? -1 : aLow;\n    }\n  }\n}\n\n/**\n * This is an implementation of binary search which will always try and return\n * the index of the closest element if there is no exact hit. This is because\n * mappings between original and generated line/col pairs are single points,\n * and there is an implicit region between each of them, so a miss just means\n * that you aren't on the very start of a region.\n *\n * @param aNeedle The element you are looking for.\n * @param aHaystack The array that is being searched.\n * @param aCompare A function which takes the needle and an element in the\n *     array and returns -1, 0, or 1 depending on whether the needle is less\n *     than, equal to, or greater than the element, respectively.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n */\nexports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n  if (aHaystack.length === 0) {\n    return -1;\n  }\n\n  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n                              aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n  if (index < 0) {\n    return -1;\n  }\n\n  // We have found either the exact element, or the next-closest element than\n  // the one we are searching for. However, there may be more than one such\n  // element. Make sure we always return the smallest of these.\n  while (index - 1 >= 0) {\n    if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n      break;\n    }\n    --index;\n  }\n\n  return index;\n};\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n *        The array.\n * @param {Number} x\n *        The index of the first item.\n * @param {Number} y\n *        The index of the second item.\n */\nfunction swap(ary, x, y) {\n  var temp = ary[x];\n  ary[x] = ary[y];\n  ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n *        The lower bound on the range.\n * @param {Number} high\n *        The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n  return Math.round(low + (Math.random() * (high - low)));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n * @param {Number} p\n *        Start index of the array\n * @param {Number} r\n *        End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n  // If our lower bound is less than our upper bound, we (1) partition the\n  // array into two pieces and (2) recurse on each half. If it is not, this is\n  // the empty array and our base case.\n\n  if (p < r) {\n    // (1) Partitioning.\n    //\n    // The partitioning chooses a pivot between `p` and `r` and moves all\n    // elements that are less than or equal to the pivot to the before it, and\n    // all the elements that are greater than it after it. The effect is that\n    // once partition is done, the pivot is in the exact place it will be when\n    // the array is put in sorted order, and it will not need to be moved\n    // again. This runs in O(n) time.\n\n    // Always choose a random pivot so that an input array which is reverse\n    // sorted does not cause O(n^2) running time.\n    var pivotIndex = randomIntInRange(p, r);\n    var i = p - 1;\n\n    swap(ary, pivotIndex, r);\n    var pivot = ary[r];\n\n    // Immediately after `j` is incremented in this loop, the following hold\n    // true:\n    //\n    //   * Every element in `ary[p .. i]` is less than or equal to the pivot.\n    //\n    //   * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n    for (var j = p; j < r; j++) {\n      if (comparator(ary[j], pivot) <= 0) {\n        i += 1;\n        swap(ary, i, j);\n      }\n    }\n\n    swap(ary, i + 1, j);\n    var q = i + 1;\n\n    // (2) Recurse on each half.\n\n    doQuickSort(ary, comparator, p, q - 1);\n    doQuickSort(ary, comparator, q + 1, r);\n  }\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n */\nexports.quickSort = function (ary, comparator) {\n  doQuickSort(ary, comparator, 0, ary.length - 1);\n};\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar binarySearch = require('./binary-search');\nvar ArraySet = require('./array-set').ArraySet;\nvar base64VLQ = require('./base64-vlq');\nvar quickSort = require('./quick-sort').quickSort;\n\nfunction SourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  return sourceMap.sections != null\n    ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)\n    : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);\n}\n\nSourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {\n  return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);\n}\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n//     {\n//       generatedLine: The line number in the generated code,\n//       generatedColumn: The column number in the generated code,\n//       source: The path to the original source file that generated this\n//               chunk of code,\n//       originalLine: The line number in the original source that\n//                     corresponds to this chunk of generated code,\n//       originalColumn: The column number in the original source that\n//                       corresponds to this chunk of generated code,\n//       name: The name of the original symbol which generated this chunk of\n//             code.\n//     }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n  configurable: true,\n  enumerable: true,\n  get: function () {\n    if (!this.__generatedMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n\n    return this.__generatedMappings;\n  }\n});\n\nSourceMapConsumer.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n  configurable: true,\n  enumerable: true,\n  get: function () {\n    if (!this.__originalMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n\n    return this.__originalMappings;\n  }\n});\n\nSourceMapConsumer.prototype._charIsMappingSeparator =\n  function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n    var c = aStr.charAt(index);\n    return c === \";\" || c === \",\";\n  };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer.prototype._parseMappings =\n  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    throw new Error(\"Subclasses must implement _parseMappings\");\n  };\n\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\n\nSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n *        The function that is called with each mapping.\n * @param Object aContext\n *        Optional. If specified, this object will be the value of `this` every\n *        time that `aCallback` is called.\n * @param aOrder\n *        Either `SourceMapConsumer.GENERATED_ORDER` or\n *        `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n *        iterate over the mappings sorted by the generated file's line/column\n *        order or the original's source/line/column order, respectively. Defaults to\n *        `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer.prototype.eachMapping =\n  function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n    var context = aContext || null;\n    var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\n    var mappings;\n    switch (order) {\n    case SourceMapConsumer.GENERATED_ORDER:\n      mappings = this._generatedMappings;\n      break;\n    case SourceMapConsumer.ORIGINAL_ORDER:\n      mappings = this._originalMappings;\n      break;\n    default:\n      throw new Error(\"Unknown order of iteration.\");\n    }\n\n    var sourceRoot = this.sourceRoot;\n    mappings.map(function (mapping) {\n      var source = mapping.source === null ? null : this._sources.at(mapping.source);\n      source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);\n      return {\n        source: source,\n        generatedLine: mapping.generatedLine,\n        generatedColumn: mapping.generatedColumn,\n        originalLine: mapping.originalLine,\n        originalColumn: mapping.originalColumn,\n        name: mapping.name === null ? null : this._names.at(mapping.name)\n      };\n    }, this).forEach(aCallback, context);\n  };\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number is 1-based.\n *   - column: Optional. the column number in the original source.\n *    The column number is 0-based.\n *\n * and an array of objects is returned, each with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *    line number is 1-based.\n *   - column: The column number in the generated source, or null.\n *    The column number is 0-based.\n */\nSourceMapConsumer.prototype.allGeneratedPositionsFor =\n  function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n    var line = util.getArg(aArgs, 'line');\n\n    // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n    // returns the index of the closest mapping less than the needle. By\n    // setting needle.originalColumn to 0, we thus find the last mapping for\n    // the given line, provided such a mapping exists.\n    var needle = {\n      source: util.getArg(aArgs, 'source'),\n      originalLine: line,\n      originalColumn: util.getArg(aArgs, 'column', 0)\n    };\n\n    needle.source = this._findSourceIndex(needle.source);\n    if (needle.source < 0) {\n      return [];\n    }\n\n    var mappings = [];\n\n    var index = this._findMapping(needle,\n                                  this._originalMappings,\n                                  \"originalLine\",\n                                  \"originalColumn\",\n                                  util.compareByOriginalPositions,\n                                  binarySearch.LEAST_UPPER_BOUND);\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\n      if (aArgs.column === undefined) {\n        var originalLine = mapping.originalLine;\n\n        // Iterate until either we run out of mappings, or we run into\n        // a mapping for a different line than the one we found. Since\n        // mappings are sorted, this is guaranteed to find all mappings for\n        // the line we found.\n        while (mapping && mapping.originalLine === originalLine) {\n          mappings.push({\n            line: util.getArg(mapping, 'generatedLine', null),\n            column: util.getArg(mapping, 'generatedColumn', null),\n            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n          });\n\n          mapping = this._originalMappings[++index];\n        }\n      } else {\n        var originalColumn = mapping.originalColumn;\n\n        // Iterate until either we run out of mappings, or we run into\n        // a mapping for a different line than the one we were searching for.\n        // Since mappings are sorted, this is guaranteed to find all mappings for\n        // the line we are searching for.\n        while (mapping &&\n               mapping.originalLine === line &&\n               mapping.originalColumn == originalColumn) {\n          mappings.push({\n            line: util.getArg(mapping, 'generatedLine', null),\n            column: util.getArg(mapping, 'generatedColumn', null),\n            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n          });\n\n          mapping = this._originalMappings[++index];\n        }\n      }\n    }\n\n    return mappings;\n  };\n\nexports.SourceMapConsumer = SourceMapConsumer;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The first parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - sources: An array of URLs to the original source files.\n *   - names: An array of identifiers which can be referrenced by individual mappings.\n *   - sourceRoot: Optional. The URL root from which all sources are relative.\n *   - sourcesContent: Optional. An array of contents of the original source files.\n *   - mappings: A string of base64 VLQs which contain the actual mappings.\n *   - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n *     {\n *       version : 3,\n *       file: \"out.js\",\n *       sourceRoot : \"\",\n *       sources: [\"foo.js\", \"bar.js\"],\n *       names: [\"src\", \"maps\", \"are\", \"fun\"],\n *       mappings: \"AA,AB;;ABCDE;\"\n *     }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found.  This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  var version = util.getArg(sourceMap, 'version');\n  var sources = util.getArg(sourceMap, 'sources');\n  // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n  // requires the array) to play nice here.\n  var names = util.getArg(sourceMap, 'names', []);\n  var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n  var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n  var mappings = util.getArg(sourceMap, 'mappings');\n  var file = util.getArg(sourceMap, 'file', null);\n\n  // Once again, Sass deviates from the spec and supplies the version as a\n  // string rather than a number, so we use loose equality checking here.\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n\n  if (sourceRoot) {\n    sourceRoot = util.normalize(sourceRoot);\n  }\n\n  sources = sources\n    .map(String)\n    // Some source maps produce relative source paths like \"./foo.js\" instead of\n    // \"foo.js\".  Normalize these first so that future comparisons will succeed.\n    // See bugzil.la/1090768.\n    .map(util.normalize)\n    // Always ensure that absolute sources are internally stored relative to\n    // the source root, if the source root is absolute. Not doing this would\n    // be particularly problematic when the source root is a prefix of the\n    // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n    .map(function (source) {\n      return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n        ? util.relative(sourceRoot, source)\n        : source;\n    });\n\n  // Pass `true` below to allow duplicate names and sources. While source maps\n  // are intended to be compressed and deduplicated, the TypeScript compiler\n  // sometimes generates source maps with duplicates in them. See Github issue\n  // #72 and bugzil.la/889492.\n  this._names = ArraySet.fromArray(names.map(String), true);\n  this._sources = ArraySet.fromArray(sources, true);\n\n  this._absoluteSources = this._sources.toArray().map(function (s) {\n    return util.computeSourceURL(sourceRoot, s, aSourceMapURL);\n  });\n\n  this.sourceRoot = sourceRoot;\n  this.sourcesContent = sourcesContent;\n  this._mappings = mappings;\n  this._sourceMapURL = aSourceMapURL;\n  this.file = file;\n}\n\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n/**\n * Utility function to find the index of a source.  Returns -1 if not\n * found.\n */\nBasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {\n  var relativeSource = aSource;\n  if (this.sourceRoot != null) {\n    relativeSource = util.relative(this.sourceRoot, relativeSource);\n  }\n\n  if (this._sources.has(relativeSource)) {\n    return this._sources.indexOf(relativeSource);\n  }\n\n  // Maybe aSource is an absolute URL as returned by |sources|.  In\n  // this case we can't simply undo the transform.\n  var i;\n  for (i = 0; i < this._absoluteSources.length; ++i) {\n    if (this._absoluteSources[i] == aSource) {\n      return i;\n    }\n  }\n\n  return -1;\n};\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n *        The source map that will be consumed.\n * @param String aSourceMapURL\n *        The URL at which the source map can be found (optional)\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap =\n  function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {\n    var smc = Object.create(BasicSourceMapConsumer.prototype);\n\n    var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n    var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n    smc.sourceRoot = aSourceMap._sourceRoot;\n    smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n                                                            smc.sourceRoot);\n    smc.file = aSourceMap._file;\n    smc._sourceMapURL = aSourceMapURL;\n    smc._absoluteSources = smc._sources.toArray().map(function (s) {\n      return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);\n    });\n\n    // Because we are modifying the entries (by converting string sources and\n    // names to indices into the sources and names ArraySets), we have to make\n    // a copy of the entry or else bad things happen. Shared mutable state\n    // strikes again! See github issue #191.\n\n    var generatedMappings = aSourceMap._mappings.toArray().slice();\n    var destGeneratedMappings = smc.__generatedMappings = [];\n    var destOriginalMappings = smc.__originalMappings = [];\n\n    for (var i = 0, length = generatedMappings.length; i < length; i++) {\n      var srcMapping = generatedMappings[i];\n      var destMapping = new Mapping;\n      destMapping.generatedLine = srcMapping.generatedLine;\n      destMapping.generatedColumn = srcMapping.generatedColumn;\n\n      if (srcMapping.source) {\n        destMapping.source = sources.indexOf(srcMapping.source);\n        destMapping.originalLine = srcMapping.originalLine;\n        destMapping.originalColumn = srcMapping.originalColumn;\n\n        if (srcMapping.name) {\n          destMapping.name = names.indexOf(srcMapping.name);\n        }\n\n        destOriginalMappings.push(destMapping);\n      }\n\n      destGeneratedMappings.push(destMapping);\n    }\n\n    quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\n    return smc;\n  };\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    return this._absoluteSources.slice();\n  }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n  this.generatedLine = 0;\n  this.generatedColumn = 0;\n  this.source = null;\n  this.originalLine = null;\n  this.originalColumn = null;\n  this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nBasicSourceMapConsumer.prototype._parseMappings =\n  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    var generatedLine = 1;\n    var previousGeneratedColumn = 0;\n    var previousOriginalLine = 0;\n    var previousOriginalColumn = 0;\n    var previousSource = 0;\n    var previousName = 0;\n    var length = aStr.length;\n    var index = 0;\n    var cachedSegments = {};\n    var temp = {};\n    var originalMappings = [];\n    var generatedMappings = [];\n    var mapping, str, segment, end, value;\n\n    while (index < length) {\n      if (aStr.charAt(index) === ';') {\n        generatedLine++;\n        index++;\n        previousGeneratedColumn = 0;\n      }\n      else if (aStr.charAt(index) === ',') {\n        index++;\n      }\n      else {\n        mapping = new Mapping();\n        mapping.generatedLine = generatedLine;\n\n        // Because each offset is encoded relative to the previous one,\n        // many segments often have the same encoding. We can exploit this\n        // fact by caching the parsed variable length fields of each segment,\n        // allowing us to avoid a second parse if we encounter the same\n        // segment again.\n        for (end = index; end < length; end++) {\n          if (this._charIsMappingSeparator(aStr, end)) {\n            break;\n          }\n        }\n        str = aStr.slice(index, end);\n\n        segment = cachedSegments[str];\n        if (segment) {\n          index += str.length;\n        } else {\n          segment = [];\n          while (index < end) {\n            base64VLQ.decode(aStr, index, temp);\n            value = temp.value;\n            index = temp.rest;\n            segment.push(value);\n          }\n\n          if (segment.length === 2) {\n            throw new Error('Found a source, but no line and column');\n          }\n\n          if (segment.length === 3) {\n            throw new Error('Found a source and line, but no column');\n          }\n\n          cachedSegments[str] = segment;\n        }\n\n        // Generated column.\n        mapping.generatedColumn = previousGeneratedColumn + segment[0];\n        previousGeneratedColumn = mapping.generatedColumn;\n\n        if (segment.length > 1) {\n          // Original source.\n          mapping.source = previousSource + segment[1];\n          previousSource += segment[1];\n\n          // Original line.\n          mapping.originalLine = previousOriginalLine + segment[2];\n          previousOriginalLine = mapping.originalLine;\n          // Lines are stored 0-based\n          mapping.originalLine += 1;\n\n          // Original column.\n          mapping.originalColumn = previousOriginalColumn + segment[3];\n          previousOriginalColumn = mapping.originalColumn;\n\n          if (segment.length > 4) {\n            // Original name.\n            mapping.name = previousName + segment[4];\n            previousName += segment[4];\n          }\n        }\n\n        generatedMappings.push(mapping);\n        if (typeof mapping.originalLine === 'number') {\n          originalMappings.push(mapping);\n        }\n      }\n    }\n\n    quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n    this.__generatedMappings = generatedMappings;\n\n    quickSort(originalMappings, util.compareByOriginalPositions);\n    this.__originalMappings = originalMappings;\n  };\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer.prototype._findMapping =\n  function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n                                         aColumnName, aComparator, aBias) {\n    // To return the position we are searching for, we must first find the\n    // mapping for the given position and then return the opposite position it\n    // points to. Because the mappings are sorted, we can use binary search to\n    // find the best mapping.\n\n    if (aNeedle[aLineName] <= 0) {\n      throw new TypeError('Line must be greater than or equal to 1, got '\n                          + aNeedle[aLineName]);\n    }\n    if (aNeedle[aColumnName] < 0) {\n      throw new TypeError('Column must be greater than or equal to 0, got '\n                          + aNeedle[aColumnName]);\n    }\n\n    return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n  };\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer.prototype.computeColumnSpans =\n  function SourceMapConsumer_computeColumnSpans() {\n    for (var index = 0; index < this._generatedMappings.length; ++index) {\n      var mapping = this._generatedMappings[index];\n\n      // Mappings do not contain a field for the last generated columnt. We\n      // can come up with an optimistic estimate, however, by assuming that\n      // mappings are contiguous (i.e. given two consecutive mappings, the\n      // first mapping ends where the second one starts).\n      if (index + 1 < this._generatedMappings.length) {\n        var nextMapping = this._generatedMappings[index + 1];\n\n        if (mapping.generatedLine === nextMapping.generatedLine) {\n          mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n          continue;\n        }\n      }\n\n      // The last mapping for each line spans the entire line.\n      mapping.lastGeneratedColumn = Infinity;\n    }\n  };\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.  The line number\n *     is 1-based.\n *   - column: The column number in the generated source.  The column\n *     number is 0-based.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the original source, or null.  The\n *     column number is 0-based.\n *   - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor =\n  function SourceMapConsumer_originalPositionFor(aArgs) {\n    var needle = {\n      generatedLine: util.getArg(aArgs, 'line'),\n      generatedColumn: util.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._generatedMappings,\n      \"generatedLine\",\n      \"generatedColumn\",\n      util.compareByGeneratedPositionsDeflated,\n      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._generatedMappings[index];\n\n      if (mapping.generatedLine === needle.generatedLine) {\n        var source = util.getArg(mapping, 'source', null);\n        if (source !== null) {\n          source = this._sources.at(source);\n          source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);\n        }\n        var name = util.getArg(mapping, 'name', null);\n        if (name !== null) {\n          name = this._names.at(name);\n        }\n        return {\n          source: source,\n          line: util.getArg(mapping, 'originalLine', null),\n          column: util.getArg(mapping, 'originalColumn', null),\n          name: name\n        };\n      }\n    }\n\n    return {\n      source: null,\n      line: null,\n      column: null,\n      name: null\n    };\n  };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n  function BasicSourceMapConsumer_hasContentsOfAllSources() {\n    if (!this.sourcesContent) {\n      return false;\n    }\n    return this.sourcesContent.length >= this._sources.size() &&\n      !this.sourcesContent.some(function (sc) { return sc == null; });\n  };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer.prototype.sourceContentFor =\n  function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    if (!this.sourcesContent) {\n      return null;\n    }\n\n    var index = this._findSourceIndex(aSource);\n    if (index >= 0) {\n      return this.sourcesContent[index];\n    }\n\n    var relativeSource = aSource;\n    if (this.sourceRoot != null) {\n      relativeSource = util.relative(this.sourceRoot, relativeSource);\n    }\n\n    var url;\n    if (this.sourceRoot != null\n        && (url = util.urlParse(this.sourceRoot))) {\n      // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n      // many users. We can help them out when they expect file:// URIs to\n      // behave like it would if they were running a local HTTP server. See\n      // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n      var fileUriAbsPath = relativeSource.replace(/^file:\\/\\//, \"\");\n      if (url.scheme == \"file\"\n          && this._sources.has(fileUriAbsPath)) {\n        return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n      }\n\n      if ((!url.path || url.path == \"/\")\n          && this._sources.has(\"/\" + relativeSource)) {\n        return this.sourcesContent[this._sources.indexOf(\"/\" + relativeSource)];\n      }\n    }\n\n    // This function is used recursively from\n    // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n    // don't want to throw if we can't find the source - we just want to\n    // return null, so we provide a flag to exit gracefully.\n    if (nullOnMissing) {\n      return null;\n    }\n    else {\n      throw new Error('\"' + relativeSource + '\" is not in the SourceMap.');\n    }\n  };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number\n *     is 1-based.\n *   - column: The column number in the original source.  The column\n *     number is 0-based.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the generated source, or null.\n *     The column number is 0-based.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor =\n  function SourceMapConsumer_generatedPositionFor(aArgs) {\n    var source = util.getArg(aArgs, 'source');\n    source = this._findSourceIndex(source);\n    if (source < 0) {\n      return {\n        line: null,\n        column: null,\n        lastColumn: null\n      };\n    }\n\n    var needle = {\n      source: source,\n      originalLine: util.getArg(aArgs, 'line'),\n      originalColumn: util.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._originalMappings,\n      \"originalLine\",\n      \"originalColumn\",\n      util.compareByOriginalPositions,\n      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\n      if (mapping.source === needle.source) {\n        return {\n          line: util.getArg(mapping, 'generatedLine', null),\n          column: util.getArg(mapping, 'generatedColumn', null),\n          lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n        };\n      }\n    }\n\n    return {\n      line: null,\n      column: null,\n      lastColumn: null\n    };\n  };\n\nexports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The first parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - file: Optional. The generated file this source map is associated with.\n *   - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n *   - offset: The offset into the original specified at which this section\n *       begins to apply, defined as an object with a \"line\" and \"column\"\n *       field.\n *   - map: A source map definition. This source map could also be indexed,\n *       but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n *  {\n *    version : 3,\n *    file: \"app.js\",\n *    sections: [{\n *      offset: {line:100, column:10},\n *      map: {\n *        version : 3,\n *        file: \"section.js\",\n *        sources: [\"foo.js\", \"bar.js\"],\n *        names: [\"src\", \"maps\", \"are\", \"fun\"],\n *        mappings: \"AAAA,E;;ABCDE;\"\n *      }\n *    }],\n *  }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found.  This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  var version = util.getArg(sourceMap, 'version');\n  var sections = util.getArg(sourceMap, 'sections');\n\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n\n  var lastOffset = {\n    line: -1,\n    column: 0\n  };\n  this._sections = sections.map(function (s) {\n    if (s.url) {\n      // The url field will require support for asynchronicity.\n      // See https://github.com/mozilla/source-map/issues/16\n      throw new Error('Support for url field in sections not implemented.');\n    }\n    var offset = util.getArg(s, 'offset');\n    var offsetLine = util.getArg(offset, 'line');\n    var offsetColumn = util.getArg(offset, 'column');\n\n    if (offsetLine < lastOffset.line ||\n        (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n      throw new Error('Section offsets must be ordered and non-overlapping.');\n    }\n    lastOffset = offset;\n\n    return {\n      generatedOffset: {\n        // The offset fields are 0-based, but we use 1-based indices when\n        // encoding/decoding from VLQ.\n        generatedLine: offsetLine + 1,\n        generatedColumn: offsetColumn + 1\n      },\n      consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)\n    }\n  });\n}\n\nIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    var sources = [];\n    for (var i = 0; i < this._sections.length; i++) {\n      for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n        sources.push(this._sections[i].consumer.sources[j]);\n      }\n    }\n    return sources;\n  }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.  The line number\n *     is 1-based.\n *   - column: The column number in the generated source.  The column\n *     number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the original source, or null.  The\n *     column number is 0-based.\n *   - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor =\n  function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n    var needle = {\n      generatedLine: util.getArg(aArgs, 'line'),\n      generatedColumn: util.getArg(aArgs, 'column')\n    };\n\n    // Find the section containing the generated position we're trying to map\n    // to an original position.\n    var sectionIndex = binarySearch.search(needle, this._sections,\n      function(needle, section) {\n        var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n        if (cmp) {\n          return cmp;\n        }\n\n        return (needle.generatedColumn -\n                section.generatedOffset.generatedColumn);\n      });\n    var section = this._sections[sectionIndex];\n\n    if (!section) {\n      return {\n        source: null,\n        line: null,\n        column: null,\n        name: null\n      };\n    }\n\n    return section.consumer.originalPositionFor({\n      line: needle.generatedLine -\n        (section.generatedOffset.generatedLine - 1),\n      column: needle.generatedColumn -\n        (section.generatedOffset.generatedLine === needle.generatedLine\n         ? section.generatedOffset.generatedColumn - 1\n         : 0),\n      bias: aArgs.bias\n    });\n  };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n  function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n    return this._sections.every(function (s) {\n      return s.consumer.hasContentsOfAllSources();\n    });\n  };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer.prototype.sourceContentFor =\n  function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n\n      var content = section.consumer.sourceContentFor(aSource, true);\n      if (content) {\n        return content;\n      }\n    }\n    if (nullOnMissing) {\n      return null;\n    }\n    else {\n      throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n    }\n  };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number\n *     is 1-based.\n *   - column: The column number in the original source.  The column\n *     number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *     line number is 1-based. \n *   - column: The column number in the generated source, or null.\n *     The column number is 0-based.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor =\n  function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n\n      // Only consider this section if the requested source is in the list of\n      // sources of the consumer.\n      if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {\n        continue;\n      }\n      var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n      if (generatedPosition) {\n        var ret = {\n          line: generatedPosition.line +\n            (section.generatedOffset.generatedLine - 1),\n          column: generatedPosition.column +\n            (section.generatedOffset.generatedLine === generatedPosition.line\n             ? section.generatedOffset.generatedColumn - 1\n             : 0)\n        };\n        return ret;\n      }\n    }\n\n    return {\n      line: null,\n      column: null\n    };\n  };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer.prototype._parseMappings =\n  function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    this.__generatedMappings = [];\n    this.__originalMappings = [];\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n      var sectionMappings = section.consumer._generatedMappings;\n      for (var j = 0; j < sectionMappings.length; j++) {\n        var mapping = sectionMappings[j];\n\n        var source = section.consumer._sources.at(mapping.source);\n        source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);\n        this._sources.add(source);\n        source = this._sources.indexOf(source);\n\n        var name = null;\n        if (mapping.name) {\n          name = section.consumer._names.at(mapping.name);\n          this._names.add(name);\n          name = this._names.indexOf(name);\n        }\n\n        // The mappings coming from the consumer for the section have\n        // generated positions relative to the start of the section, so we\n        // need to offset them to be relative to the start of the concatenated\n        // generated file.\n        var adjustedMapping = {\n          source: source,\n          generatedLine: mapping.generatedLine +\n            (section.generatedOffset.generatedLine - 1),\n          generatedColumn: mapping.generatedColumn +\n            (section.generatedOffset.generatedLine === mapping.generatedLine\n            ? section.generatedOffset.generatedColumn - 1\n            : 0),\n          originalLine: mapping.originalLine,\n          originalColumn: mapping.originalColumn,\n          name: name\n        };\n\n        this.__generatedMappings.push(adjustedMapping);\n        if (typeof adjustedMapping.originalLine === 'number') {\n          this.__originalMappings.push(adjustedMapping);\n        }\n      }\n    }\n\n    quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n    quickSort(this.__originalMappings, util.compareByOriginalPositions);\n  };\n\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;\nvar util = require('./util');\n\n// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n// operating systems these days (capturing the result).\nvar REGEX_NEWLINE = /(\\r?\\n)/;\n\n// Newline character code for charCodeAt() comparisons\nvar NEWLINE_CODE = 10;\n\n// Private symbol for identifying `SourceNode`s when multiple versions of\n// the source-map library are loaded. This MUST NOT CHANGE across\n// versions!\nvar isSourceNode = \"$$$isSourceNode$$$\";\n\n/**\n * SourceNodes provide a way to abstract over interpolating/concatenating\n * snippets of generated JavaScript source code while maintaining the line and\n * column information associated with the original source code.\n *\n * @param aLine The original line number.\n * @param aColumn The original column number.\n * @param aSource The original source's filename.\n * @param aChunks Optional. An array of strings which are snippets of\n *        generated JS, or other SourceNodes.\n * @param aName The original identifier.\n */\nfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n  this.children = [];\n  this.sourceContents = {};\n  this.line = aLine == null ? null : aLine;\n  this.column = aColumn == null ? null : aColumn;\n  this.source = aSource == null ? null : aSource;\n  this.name = aName == null ? null : aName;\n  this[isSourceNode] = true;\n  if (aChunks != null) this.add(aChunks);\n}\n\n/**\n * Creates a SourceNode from generated code and a SourceMapConsumer.\n *\n * @param aGeneratedCode The generated code\n * @param aSourceMapConsumer The SourceMap for the generated code\n * @param aRelativePath Optional. The path that relative sources in the\n *        SourceMapConsumer should be relative to.\n */\nSourceNode.fromStringWithSourceMap =\n  function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n    // The SourceNode we want to fill with the generated code\n    // and the SourceMap\n    var node = new SourceNode();\n\n    // All even indices of this array are one line of the generated code,\n    // while all odd indices are the newlines between two adjacent lines\n    // (since `REGEX_NEWLINE` captures its match).\n    // Processed fragments are accessed by calling `shiftNextLine`.\n    var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n    var remainingLinesIndex = 0;\n    var shiftNextLine = function() {\n      var lineContents = getNextLine();\n      // The last line of a file might not have a newline.\n      var newLine = getNextLine() || \"\";\n      return lineContents + newLine;\n\n      function getNextLine() {\n        return remainingLinesIndex < remainingLines.length ?\n            remainingLines[remainingLinesIndex++] : undefined;\n      }\n    };\n\n    // We need to remember the position of \"remainingLines\"\n    var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\n    // The generate SourceNodes we need a code range.\n    // To extract it current and last mapping is used.\n    // Here we store the last mapping.\n    var lastMapping = null;\n\n    aSourceMapConsumer.eachMapping(function (mapping) {\n      if (lastMapping !== null) {\n        // We add the code from \"lastMapping\" to \"mapping\":\n        // First check if there is a new line in between.\n        if (lastGeneratedLine < mapping.generatedLine) {\n          // Associate first line with \"lastMapping\"\n          addMappingWithCode(lastMapping, shiftNextLine());\n          lastGeneratedLine++;\n          lastGeneratedColumn = 0;\n          // The remaining code is added without mapping\n        } else {\n          // There is no new line in between.\n          // Associate the code between \"lastGeneratedColumn\" and\n          // \"mapping.generatedColumn\" with \"lastMapping\"\n          var nextLine = remainingLines[remainingLinesIndex] || '';\n          var code = nextLine.substr(0, mapping.generatedColumn -\n                                        lastGeneratedColumn);\n          remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n                                              lastGeneratedColumn);\n          lastGeneratedColumn = mapping.generatedColumn;\n          addMappingWithCode(lastMapping, code);\n          // No more remaining code, continue\n          lastMapping = mapping;\n          return;\n        }\n      }\n      // We add the generated code until the first mapping\n      // to the SourceNode without any mapping.\n      // Each line is added as separate string.\n      while (lastGeneratedLine < mapping.generatedLine) {\n        node.add(shiftNextLine());\n        lastGeneratedLine++;\n      }\n      if (lastGeneratedColumn < mapping.generatedColumn) {\n        var nextLine = remainingLines[remainingLinesIndex] || '';\n        node.add(nextLine.substr(0, mapping.generatedColumn));\n        remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n        lastGeneratedColumn = mapping.generatedColumn;\n      }\n      lastMapping = mapping;\n    }, this);\n    // We have processed all mappings.\n    if (remainingLinesIndex < remainingLines.length) {\n      if (lastMapping) {\n        // Associate the remaining code in the current line with \"lastMapping\"\n        addMappingWithCode(lastMapping, shiftNextLine());\n      }\n      // and add the remaining lines without any mapping\n      node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n    }\n\n    // Copy sourcesContent into SourceNode\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        if (aRelativePath != null) {\n          sourceFile = util.join(aRelativePath, sourceFile);\n        }\n        node.setSourceContent(sourceFile, content);\n      }\n    });\n\n    return node;\n\n    function addMappingWithCode(mapping, code) {\n      if (mapping === null || mapping.source === undefined) {\n        node.add(code);\n      } else {\n        var source = aRelativePath\n          ? util.join(aRelativePath, mapping.source)\n          : mapping.source;\n        node.add(new SourceNode(mapping.originalLine,\n                                mapping.originalColumn,\n                                source,\n                                code,\n                                mapping.name));\n      }\n    }\n  };\n\n/**\n * Add a chunk of generated JS to this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.add = function SourceNode_add(aChunk) {\n  if (Array.isArray(aChunk)) {\n    aChunk.forEach(function (chunk) {\n      this.add(chunk);\n    }, this);\n  }\n  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    if (aChunk) {\n      this.children.push(aChunk);\n    }\n  }\n  else {\n    throw new TypeError(\n      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n    );\n  }\n  return this;\n};\n\n/**\n * Add a chunk of generated JS to the beginning of this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n  if (Array.isArray(aChunk)) {\n    for (var i = aChunk.length-1; i >= 0; i--) {\n      this.prepend(aChunk[i]);\n    }\n  }\n  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    this.children.unshift(aChunk);\n  }\n  else {\n    throw new TypeError(\n      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n    );\n  }\n  return this;\n};\n\n/**\n * Walk over the tree of JS snippets in this node and its children. The\n * walking function is called once for each snippet of JS and is passed that\n * snippet and the its original associated source's line/column location.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n  var chunk;\n  for (var i = 0, len = this.children.length; i < len; i++) {\n    chunk = this.children[i];\n    if (chunk[isSourceNode]) {\n      chunk.walk(aFn);\n    }\n    else {\n      if (chunk !== '') {\n        aFn(chunk, { source: this.source,\n                     line: this.line,\n                     column: this.column,\n                     name: this.name });\n      }\n    }\n  }\n};\n\n/**\n * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n * each of `this.children`.\n *\n * @param aSep The separator.\n */\nSourceNode.prototype.join = function SourceNode_join(aSep) {\n  var newChildren;\n  var i;\n  var len = this.children.length;\n  if (len > 0) {\n    newChildren = [];\n    for (i = 0; i < len-1; i++) {\n      newChildren.push(this.children[i]);\n      newChildren.push(aSep);\n    }\n    newChildren.push(this.children[i]);\n    this.children = newChildren;\n  }\n  return this;\n};\n\n/**\n * Call String.prototype.replace on the very right-most source snippet. Useful\n * for trimming whitespace from the end of a source node, etc.\n *\n * @param aPattern The pattern to replace.\n * @param aReplacement The thing to replace the pattern with.\n */\nSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n  var lastChild = this.children[this.children.length - 1];\n  if (lastChild[isSourceNode]) {\n    lastChild.replaceRight(aPattern, aReplacement);\n  }\n  else if (typeof lastChild === 'string') {\n    this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n  }\n  else {\n    this.children.push(''.replace(aPattern, aReplacement));\n  }\n  return this;\n};\n\n/**\n * Set the source content for a source file. This will be added to the SourceMapGenerator\n * in the sourcesContent field.\n *\n * @param aSourceFile The filename of the source file\n * @param aSourceContent The content of the source file\n */\nSourceNode.prototype.setSourceContent =\n  function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n    this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n  };\n\n/**\n * Walk over the tree of SourceNodes. The walking function is called for each\n * source file content and is passed the filename and source content.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walkSourceContents =\n  function SourceNode_walkSourceContents(aFn) {\n    for (var i = 0, len = this.children.length; i < len; i++) {\n      if (this.children[i][isSourceNode]) {\n        this.children[i].walkSourceContents(aFn);\n      }\n    }\n\n    var sources = Object.keys(this.sourceContents);\n    for (var i = 0, len = sources.length; i < len; i++) {\n      aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n    }\n  };\n\n/**\n * Return the string representation of this source node. Walks over the tree\n * and concatenates all the various snippets together to one string.\n */\nSourceNode.prototype.toString = function SourceNode_toString() {\n  var str = \"\";\n  this.walk(function (chunk) {\n    str += chunk;\n  });\n  return str;\n};\n\n/**\n * Returns the string representation of this source node along with a source\n * map.\n */\nSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n  var generated = {\n    code: \"\",\n    line: 1,\n    column: 0\n  };\n  var map = new SourceMapGenerator(aArgs);\n  var sourceMappingActive = false;\n  var lastOriginalSource = null;\n  var lastOriginalLine = null;\n  var lastOriginalColumn = null;\n  var lastOriginalName = null;\n  this.walk(function (chunk, original) {\n    generated.code += chunk;\n    if (original.source !== null\n        && original.line !== null\n        && original.column !== null) {\n      if(lastOriginalSource !== original.source\n         || lastOriginalLine !== original.line\n         || lastOriginalColumn !== original.column\n         || lastOriginalName !== original.name) {\n        map.addMapping({\n          source: original.source,\n          original: {\n            line: original.line,\n            column: original.column\n          },\n          generated: {\n            line: generated.line,\n            column: generated.column\n          },\n          name: original.name\n        });\n      }\n      lastOriginalSource = original.source;\n      lastOriginalLine = original.line;\n      lastOriginalColumn = original.column;\n      lastOriginalName = original.name;\n      sourceMappingActive = true;\n    } else if (sourceMappingActive) {\n      map.addMapping({\n        generated: {\n          line: generated.line,\n          column: generated.column\n        }\n      });\n      lastOriginalSource = null;\n      sourceMappingActive = false;\n    }\n    for (var idx = 0, length = chunk.length; idx < length; idx++) {\n      if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n        generated.line++;\n        generated.column = 0;\n        // Mappings end at eol\n        if (idx + 1 === length) {\n          lastOriginalSource = null;\n          sourceMappingActive = false;\n        } else if (sourceMappingActive) {\n          map.addMapping({\n            source: original.source,\n            original: {\n              line: original.line,\n              column: original.column\n            },\n            generated: {\n              line: generated.line,\n              column: generated.column\n            },\n            name: original.name\n          });\n        }\n      } else {\n        generated.column++;\n      }\n    }\n  });\n  this.walkSourceContents(function (sourceFile, sourceContent) {\n    map.setSourceContent(sourceFile, sourceContent);\n  });\n\n  return { code: generated.code, map: map };\n};\n\nexports.SourceNode = SourceNode;\n", "/*\n * Copyright 2009-2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE.txt or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\nexports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;\nexports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;\nexports.SourceNode = require('./lib/source-node').SourceNode;\n", "/* global define */\nimport { isArray } from '../utils';\n\nlet SourceNode;\n\ntry {\n  /* istanbul ignore next */\n  if (typeof define !== 'function' || !define.amd) {\n    // We don't support this in AMD environments. For these environments, we asusme that\n    // they are running on the browser and thus have no need for the source-map library.\n    let SourceMap = require('source-map');\n    SourceNode = SourceMap.SourceNode;\n  }\n} catch (err) {\n  /* NOP */\n}\n\n/* istanbul ignore if: tested but not covered in istanbul due to dist build  */\nif (!SourceNode) {\n  SourceNode = function(line, column, srcFile, chunks) {\n    this.src = '';\n    if (chunks) {\n      this.add(chunks);\n    }\n  };\n  /* istanbul ignore next */\n  SourceNode.prototype = {\n    add: function(chunks) {\n      if (isArray(chunks)) {\n        chunks = chunks.join('');\n      }\n      this.src += chunks;\n    },\n    prepend: function(chunks) {\n      if (isArray(chunks)) {\n        chunks = chunks.join('');\n      }\n      this.src = chunks + this.src;\n    },\n    toStringWithSourceMap: function() {\n      return { code: this.toString() };\n    },\n    toString: function() {\n      return this.src;\n    }\n  };\n}\n\nfunction castChunk(chunk, codeGen, loc) {\n  if (isArray(chunk)) {\n    let ret = [];\n\n    for (let i = 0, len = chunk.length; i < len; i++) {\n      ret.push(codeGen.wrap(chunk[i], loc));\n    }\n    return ret;\n  } else if (typeof chunk === 'boolean' || typeof chunk === 'number') {\n    // Handle primitives that the SourceNode will throw up on\n    return chunk + '';\n  }\n  return chunk;\n}\n\nfunction CodeGen(srcFile) {\n  this.srcFile = srcFile;\n  this.source = [];\n}\n\nCodeGen.prototype = {\n  isEmpty() {\n    return !this.source.length;\n  },\n  prepend: function(source, loc) {\n    this.source.unshift(this.wrap(source, loc));\n  },\n  push: function(source, loc) {\n    this.source.push(this.wrap(source, loc));\n  },\n\n  merge: function() {\n    let source = this.empty();\n    this.each(function(line) {\n      source.add(['  ', line, '\\n']);\n    });\n    return source;\n  },\n\n  each: function(iter) {\n    for (let i = 0, len = this.source.length; i < len; i++) {\n      iter(this.source[i]);\n    }\n  },\n\n  empty: function() {\n    let loc = this.currentLocation || { start: {} };\n    return new SourceNode(loc.start.line, loc.start.column, this.srcFile);\n  },\n  wrap: function(chunk, loc = this.currentLocation || { start: {} }) {\n    if (chunk instanceof SourceNode) {\n      return chunk;\n    }\n\n    chunk = castChunk(chunk, this, loc);\n\n    return new SourceNode(\n      loc.start.line,\n      loc.start.column,\n      this.srcFile,\n      chunk\n    );\n  },\n\n  functionCall: function(fn, type, params) {\n    params = this.generateList(params);\n    return this.wrap([fn, type ? '.' + type + '(' : '(', params, ')']);\n  },\n\n  quotedString: function(str) {\n    return (\n      '\"' +\n      (str + '')\n        .replace(/\\\\/g, '\\\\\\\\')\n        .replace(/\"/g, '\\\\\"')\n        .replace(/\\n/g, '\\\\n')\n        .replace(/\\r/g, '\\\\r')\n        .replace(/\\u2028/g, '\\\\u2028') // Per Ecma-262 7.3 + 7.8.4\n        .replace(/\\u2029/g, '\\\\u2029') +\n      '\"'\n    );\n  },\n\n  objectLiteral: function(obj) {\n    let pairs = [];\n\n    Object.keys(obj).forEach(key => {\n      let value = castChunk(obj[key], this);\n      if (value !== 'undefined') {\n        pairs.push([this.quotedString(key), ':', value]);\n      }\n    });\n\n    let ret = this.generateList(pairs);\n    ret.prepend('{');\n    ret.add('}');\n    return ret;\n  },\n\n  generateList: function(entries) {\n    let ret = this.empty();\n\n    for (let i = 0, len = entries.length; i < len; i++) {\n      if (i) {\n        ret.add(',');\n      }\n\n      ret.add(castChunk(entries[i], this));\n    }\n\n    return ret;\n  },\n\n  generateArray: function(entries) {\n    let ret = this.generateList(entries);\n    ret.prepend('[');\n    ret.add(']');\n\n    return ret;\n  }\n};\n\nexport default CodeGen;\n", "import { COMPILER_REVISION, REVISION_CHANGES } from '../base';\nimport Exception from '../exception';\nimport { isArray } from '../utils';\nimport CodeGen from './code-gen';\n\nfunction Literal(value) {\n  this.value = value;\n}\n\nfunction JavaScriptCompiler() {}\n\nJavaScriptCompiler.prototype = {\n  // PUBLIC API: You can override these methods in a subclass to provide\n  // alternative compiled forms for name lookup and buffering semantics\n  nameLookup: function(parent, name /*,  type */) {\n    return this.internalNameLookup(parent, name);\n  },\n  depthedLookup: function(name) {\n    return [\n      this.aliasable('container.lookup'),\n      '(depths, ',\n      JSON.stringify(name),\n      ')'\n    ];\n  },\n\n  compilerInfo: function() {\n    const revision = COMPILER_REVISION,\n      versions = REVISION_CHANGES[revision];\n    return [revision, versions];\n  },\n\n  appendToBuffer: function(source, location, explicit) {\n    // Force a source as this simplifies the merge logic.\n    if (!isArray(source)) {\n      source = [source];\n    }\n    source = this.source.wrap(source, location);\n\n    if (this.environment.isSimple) {\n      return ['return ', source, ';'];\n    } else if (explicit) {\n      // This is a case where the buffer operation occurs as a child of another\n      // construct, generally braces. We have to explicitly output these buffer\n      // operations to ensure that the emitted code goes in the correct location.\n      return ['buffer += ', source, ';'];\n    } else {\n      source.appendToBuffer = true;\n      return source;\n    }\n  },\n\n  initializeBuffer: function() {\n    return this.quotedString('');\n  },\n  // END PUBLIC API\n  internalNameLookup: function(parent, name) {\n    this.lookupPropertyFunctionIsUsed = true;\n    return ['lookupProperty(', parent, ',', JSON.stringify(name), ')'];\n  },\n\n  lookupPropertyFunctionIsUsed: false,\n\n  compile: function(environment, options, context, asObject) {\n    this.environment = environment;\n    this.options = options;\n    this.stringParams = this.options.stringParams;\n    this.trackIds = this.options.trackIds;\n    this.precompile = !asObject;\n\n    this.name = this.environment.name;\n    this.isChild = !!context;\n    this.context = context || {\n      decorators: [],\n      programs: [],\n      environments: []\n    };\n\n    this.preamble();\n\n    this.stackSlot = 0;\n    this.stackVars = [];\n    this.aliases = {};\n    this.registers = { list: [] };\n    this.hashes = [];\n    this.compileStack = [];\n    this.inlineStack = [];\n    this.blockParams = [];\n\n    this.compileChildren(environment, options);\n\n    this.useDepths =\n      this.useDepths ||\n      environment.useDepths ||\n      environment.useDecorators ||\n      this.options.compat;\n    this.useBlockParams = this.useBlockParams || environment.useBlockParams;\n\n    let opcodes = environment.opcodes,\n      opcode,\n      firstLoc,\n      i,\n      l;\n\n    for (i = 0, l = opcodes.length; i < l; i++) {\n      opcode = opcodes[i];\n\n      this.source.currentLocation = opcode.loc;\n      firstLoc = firstLoc || opcode.loc;\n      this[opcode.opcode].apply(this, opcode.args);\n    }\n\n    // Flush any trailing content that might be pending.\n    this.source.currentLocation = firstLoc;\n    this.pushSource('');\n\n    /* istanbul ignore next */\n    if (this.stackSlot || this.inlineStack.length || this.compileStack.length) {\n      throw new Exception('Compile completed with content left on stack');\n    }\n\n    if (!this.decorators.isEmpty()) {\n      this.useDecorators = true;\n\n      this.decorators.prepend([\n        'var decorators = container.decorators, ',\n        this.lookupPropertyFunctionVarDeclaration(),\n        ';\\n'\n      ]);\n      this.decorators.push('return fn;');\n\n      if (asObject) {\n        this.decorators = Function.apply(this, [\n          'fn',\n          'props',\n          'container',\n          'depth0',\n          'data',\n          'blockParams',\n          'depths',\n          this.decorators.merge()\n        ]);\n      } else {\n        this.decorators.prepend(\n          'function(fn, props, container, depth0, data, blockParams, depths) {\\n'\n        );\n        this.decorators.push('}\\n');\n        this.decorators = this.decorators.merge();\n      }\n    } else {\n      this.decorators = undefined;\n    }\n\n    let fn = this.createFunctionContext(asObject);\n    if (!this.isChild) {\n      let ret = {\n        compiler: this.compilerInfo(),\n        main: fn\n      };\n\n      if (this.decorators) {\n        ret.main_d = this.decorators; // eslint-disable-line camelcase\n        ret.useDecorators = true;\n      }\n\n      let { programs, decorators } = this.context;\n      for (i = 0, l = programs.length; i < l; i++) {\n        if (programs[i]) {\n          ret[i] = programs[i];\n          if (decorators[i]) {\n            ret[i + '_d'] = decorators[i];\n            ret.useDecorators = true;\n          }\n        }\n      }\n\n      if (this.environment.usePartial) {\n        ret.usePartial = true;\n      }\n      if (this.options.data) {\n        ret.useData = true;\n      }\n      if (this.useDepths) {\n        ret.useDepths = true;\n      }\n      if (this.useBlockParams) {\n        ret.useBlockParams = true;\n      }\n      if (this.options.compat) {\n        ret.compat = true;\n      }\n\n      if (!asObject) {\n        ret.compiler = JSON.stringify(ret.compiler);\n\n        this.source.currentLocation = { start: { line: 1, column: 0 } };\n        ret = this.objectLiteral(ret);\n\n        if (options.srcName) {\n          ret = ret.toStringWithSourceMap({ file: options.destName });\n          ret.map = ret.map && ret.map.toString();\n        } else {\n          ret = ret.toString();\n        }\n      } else {\n        ret.compilerOptions = this.options;\n      }\n\n      return ret;\n    } else {\n      return fn;\n    }\n  },\n\n  preamble: function() {\n    // track the last context pushed into place to allow skipping the\n    // getContext opcode when it would be a noop\n    this.lastContext = 0;\n    this.source = new CodeGen(this.options.srcName);\n    this.decorators = new CodeGen(this.options.srcName);\n  },\n\n  createFunctionContext: function(asObject) {\n    let varDeclarations = '';\n\n    let locals = this.stackVars.concat(this.registers.list);\n    if (locals.length > 0) {\n      varDeclarations += ', ' + locals.join(', ');\n    }\n\n    // Generate minimizer alias mappings\n    //\n    // When using true SourceNodes, this will update all references to the given alias\n    // as the source nodes are reused in situ. For the non-source node compilation mode,\n    // aliases will not be used, but this case is already being run on the client and\n    // we aren't concern about minimizing the template size.\n    let aliasCount = 0;\n    Object.keys(this.aliases).forEach(alias => {\n      let node = this.aliases[alias];\n      if (node.children && node.referenceCount > 1) {\n        varDeclarations += ', alias' + ++aliasCount + '=' + alias;\n        node.children[0] = 'alias' + aliasCount;\n      }\n    });\n\n    if (this.lookupPropertyFunctionIsUsed) {\n      varDeclarations += ', ' + this.lookupPropertyFunctionVarDeclaration();\n    }\n\n    let params = ['container', 'depth0', 'helpers', 'partials', 'data'];\n\n    if (this.useBlockParams || this.useDepths) {\n      params.push('blockParams');\n    }\n    if (this.useDepths) {\n      params.push('depths');\n    }\n\n    // Perform a second pass over the output to merge content when possible\n    let source = this.mergeSource(varDeclarations);\n\n    if (asObject) {\n      params.push(source);\n\n      return Function.apply(this, params);\n    } else {\n      return this.source.wrap([\n        'function(',\n        params.join(','),\n        ') {\\n  ',\n        source,\n        '}'\n      ]);\n    }\n  },\n  mergeSource: function(varDeclarations) {\n    let isSimple = this.environment.isSimple,\n      appendOnly = !this.forceBuffer,\n      appendFirst,\n      sourceSeen,\n      bufferStart,\n      bufferEnd;\n    this.source.each(line => {\n      if (line.appendToBuffer) {\n        if (bufferStart) {\n          line.prepend('  + ');\n        } else {\n          bufferStart = line;\n        }\n        bufferEnd = line;\n      } else {\n        if (bufferStart) {\n          if (!sourceSeen) {\n            appendFirst = true;\n          } else {\n            bufferStart.prepend('buffer += ');\n          }\n          bufferEnd.add(';');\n          bufferStart = bufferEnd = undefined;\n        }\n\n        sourceSeen = true;\n        if (!isSimple) {\n          appendOnly = false;\n        }\n      }\n    });\n\n    if (appendOnly) {\n      if (bufferStart) {\n        bufferStart.prepend('return ');\n        bufferEnd.add(';');\n      } else if (!sourceSeen) {\n        this.source.push('return \"\";');\n      }\n    } else {\n      varDeclarations +=\n        ', buffer = ' + (appendFirst ? '' : this.initializeBuffer());\n\n      if (bufferStart) {\n        bufferStart.prepend('return buffer + ');\n        bufferEnd.add(';');\n      } else {\n        this.source.push('return buffer;');\n      }\n    }\n\n    if (varDeclarations) {\n      this.source.prepend(\n        'var ' + varDeclarations.substring(2) + (appendFirst ? '' : ';\\n')\n      );\n    }\n\n    return this.source.merge();\n  },\n\n  lookupPropertyFunctionVarDeclaration: function() {\n    return `\n      lookupProperty = container.lookupProperty || function(parent, propertyName) {\n        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n          return parent[propertyName];\n        }\n        return undefined\n    }\n    `.trim();\n  },\n\n  // [blockValue]\n  //\n  // On stack, before: hash, inverse, program, value\n  // On stack, after: return value of blockHelperMissing\n  //\n  // The purpose of this opcode is to take a block of the form\n  // `{{#this.foo}}...{{/this.foo}}`, resolve the value of `foo`, and\n  // replace it on the stack with the result of properly\n  // invoking blockHelperMissing.\n  blockValue: function(name) {\n    let blockHelperMissing = this.aliasable(\n        'container.hooks.blockHelperMissing'\n      ),\n      params = [this.contextName(0)];\n    this.setupHelperArgs(name, 0, params);\n\n    let blockName = this.popStack();\n    params.splice(1, 0, blockName);\n\n    this.push(this.source.functionCall(blockHelperMissing, 'call', params));\n  },\n\n  // [ambiguousBlockValue]\n  //\n  // On stack, before: hash, inverse, program, value\n  // Compiler value, before: lastHelper=value of last found helper, if any\n  // On stack, after, if no lastHelper: same as [blockValue]\n  // On stack, after, if lastHelper: value\n  ambiguousBlockValue: function() {\n    // We're being a bit cheeky and reusing the options value from the prior exec\n    let blockHelperMissing = this.aliasable(\n        'container.hooks.blockHelperMissing'\n      ),\n      params = [this.contextName(0)];\n    this.setupHelperArgs('', 0, params, true);\n\n    this.flushInline();\n\n    let current = this.topStack();\n    params.splice(1, 0, current);\n\n    this.pushSource([\n      'if (!',\n      this.lastHelper,\n      ') { ',\n      current,\n      ' = ',\n      this.source.functionCall(blockHelperMissing, 'call', params),\n      '}'\n    ]);\n  },\n\n  // [appendContent]\n  //\n  // On stack, before: ...\n  // On stack, after: ...\n  //\n  // Appends the string value of `content` to the current buffer\n  appendContent: function(content) {\n    if (this.pendingContent) {\n      content = this.pendingContent + content;\n    } else {\n      this.pendingLocation = this.source.currentLocation;\n    }\n\n    this.pendingContent = content;\n  },\n\n  // [append]\n  //\n  // On stack, before: value, ...\n  // On stack, after: ...\n  //\n  // Coerces `value` to a String and appends it to the current buffer.\n  //\n  // If `value` is truthy, or 0, it is coerced into a string and appended\n  // Otherwise, the empty string is appended\n  append: function() {\n    if (this.isInline()) {\n      this.replaceStack(current => [' != null ? ', current, ' : \"\"']);\n\n      this.pushSource(this.appendToBuffer(this.popStack()));\n    } else {\n      let local = this.popStack();\n      this.pushSource([\n        'if (',\n        local,\n        ' != null) { ',\n        this.appendToBuffer(local, undefined, true),\n        ' }'\n      ]);\n      if (this.environment.isSimple) {\n        this.pushSource([\n          'else { ',\n          this.appendToBuffer(\"''\", undefined, true),\n          ' }'\n        ]);\n      }\n    }\n  },\n\n  // [appendEscaped]\n  //\n  // On stack, before: value, ...\n  // On stack, after: ...\n  //\n  // Escape `value` and append it to the buffer\n  appendEscaped: function() {\n    this.pushSource(\n      this.appendToBuffer([\n        this.aliasable('container.escapeExpression'),\n        '(',\n        this.popStack(),\n        ')'\n      ])\n    );\n  },\n\n  // [getContext]\n  //\n  // On stack, before: ...\n  // On stack, after: ...\n  // Compiler value, after: lastContext=depth\n  //\n  // Set the value of the `lastContext` compiler value to the depth\n  getContext: function(depth) {\n    this.lastContext = depth;\n  },\n\n  // [pushContext]\n  //\n  // On stack, before: ...\n  // On stack, after: currentContext, ...\n  //\n  // Pushes the value of the current context onto the stack.\n  pushContext: function() {\n    this.pushStackLiteral(this.contextName(this.lastContext));\n  },\n\n  // [lookupOnContext]\n  //\n  // On stack, before: ...\n  // On stack, after: currentContext[name], ...\n  //\n  // Looks up the value of `name` on the current context and pushes\n  // it onto the stack.\n  lookupOnContext: function(parts, falsy, strict, scoped) {\n    let i = 0;\n\n    if (!scoped && this.options.compat && !this.lastContext) {\n      // The depthed query is expected to handle the undefined logic for the root level that\n      // is implemented below, so we evaluate that directly in compat mode\n      this.push(this.depthedLookup(parts[i++]));\n    } else {\n      this.pushContext();\n    }\n\n    this.resolvePath('context', parts, i, falsy, strict);\n  },\n\n  // [lookupBlockParam]\n  //\n  // On stack, before: ...\n  // On stack, after: blockParam[name], ...\n  //\n  // Looks up the value of `parts` on the given block param and pushes\n  // it onto the stack.\n  lookupBlockParam: function(blockParamId, parts) {\n    this.useBlockParams = true;\n\n    this.push(['blockParams[', blockParamId[0], '][', blockParamId[1], ']']);\n    this.resolvePath('context', parts, 1);\n  },\n\n  // [lookupData]\n  //\n  // On stack, before: ...\n  // On stack, after: data, ...\n  //\n  // Push the data lookup operator\n  lookupData: function(depth, parts, strict) {\n    if (!depth) {\n      this.pushStackLiteral('data');\n    } else {\n      this.pushStackLiteral('container.data(data, ' + depth + ')');\n    }\n\n    this.resolvePath('data', parts, 0, true, strict);\n  },\n\n  resolvePath: function(type, parts, i, falsy, strict) {\n    if (this.options.strict || this.options.assumeObjects) {\n      this.push(strictLookup(this.options.strict && strict, this, parts, type));\n      return;\n    }\n\n    let len = parts.length;\n    for (; i < len; i++) {\n      /* eslint-disable no-loop-func */\n      this.replaceStack(current => {\n        let lookup = this.nameLookup(current, parts[i], type);\n        // We want to ensure that zero and false are handled properly if the context (falsy flag)\n        // needs to have the special handling for these values.\n        if (!falsy) {\n          return [' != null ? ', lookup, ' : ', current];\n        } else {\n          // Otherwise we can use generic falsy handling\n          return [' && ', lookup];\n        }\n      });\n      /* eslint-enable no-loop-func */\n    }\n  },\n\n  // [resolvePossibleLambda]\n  //\n  // On stack, before: value, ...\n  // On stack, after: resolved value, ...\n  //\n  // If the `value` is a lambda, replace it on the stack by\n  // the return value of the lambda\n  resolvePossibleLambda: function() {\n    this.push([\n      this.aliasable('container.lambda'),\n      '(',\n      this.popStack(),\n      ', ',\n      this.contextName(0),\n      ')'\n    ]);\n  },\n\n  // [pushStringParam]\n  //\n  // On stack, before: ...\n  // On stack, after: string, currentContext, ...\n  //\n  // This opcode is designed for use in string mode, which\n  // provides the string value of a parameter along with its\n  // depth rather than resolving it immediately.\n  pushStringParam: function(string, type) {\n    this.pushContext();\n    this.pushString(type);\n\n    // If it's a subexpression, the string result\n    // will be pushed after this opcode.\n    if (type !== 'SubExpression') {\n      if (typeof string === 'string') {\n        this.pushString(string);\n      } else {\n        this.pushStackLiteral(string);\n      }\n    }\n  },\n\n  emptyHash: function(omitEmpty) {\n    if (this.trackIds) {\n      this.push('{}'); // hashIds\n    }\n    if (this.stringParams) {\n      this.push('{}'); // hashContexts\n      this.push('{}'); // hashTypes\n    }\n    this.pushStackLiteral(omitEmpty ? 'undefined' : '{}');\n  },\n  pushHash: function() {\n    if (this.hash) {\n      this.hashes.push(this.hash);\n    }\n    this.hash = { values: {}, types: [], contexts: [], ids: [] };\n  },\n  popHash: function() {\n    let hash = this.hash;\n    this.hash = this.hashes.pop();\n\n    if (this.trackIds) {\n      this.push(this.objectLiteral(hash.ids));\n    }\n    if (this.stringParams) {\n      this.push(this.objectLiteral(hash.contexts));\n      this.push(this.objectLiteral(hash.types));\n    }\n\n    this.push(this.objectLiteral(hash.values));\n  },\n\n  // [pushString]\n  //\n  // On stack, before: ...\n  // On stack, after: quotedString(string), ...\n  //\n  // Push a quoted version of `string` onto the stack\n  pushString: function(string) {\n    this.pushStackLiteral(this.quotedString(string));\n  },\n\n  // [pushLiteral]\n  //\n  // On stack, before: ...\n  // On stack, after: value, ...\n  //\n  // Pushes a value onto the stack. This operation prevents\n  // the compiler from creating a temporary variable to hold\n  // it.\n  pushLiteral: function(value) {\n    this.pushStackLiteral(value);\n  },\n\n  // [pushProgram]\n  //\n  // On stack, before: ...\n  // On stack, after: program(guid), ...\n  //\n  // Push a program expression onto the stack. This takes\n  // a compile-time guid and converts it into a runtime-accessible\n  // expression.\n  pushProgram: function(guid) {\n    if (guid != null) {\n      this.pushStackLiteral(this.programExpression(guid));\n    } else {\n      this.pushStackLiteral(null);\n    }\n  },\n\n  // [registerDecorator]\n  //\n  // On stack, before: hash, program, params..., ...\n  // On stack, after: ...\n  //\n  // Pops off the decorator's parameters, invokes the decorator,\n  // and inserts the decorator into the decorators list.\n  registerDecorator(paramSize, name) {\n    let foundDecorator = this.nameLookup('decorators', name, 'decorator'),\n      options = this.setupHelperArgs(name, paramSize);\n\n    this.decorators.push([\n      'fn = ',\n      this.decorators.functionCall(foundDecorator, '', [\n        'fn',\n        'props',\n        'container',\n        options\n      ]),\n      ' || fn;'\n    ]);\n  },\n\n  // [invokeHelper]\n  //\n  // On stack, before: hash, inverse, program, params..., ...\n  // On stack, after: result of helper invocation\n  //\n  // Pops off the helper's parameters, invokes the helper,\n  // and pushes the helper's return value onto the stack.\n  //\n  // If the helper is not found, `helperMissing` is called.\n  invokeHelper: function(paramSize, name, isSimple) {\n    let nonHelper = this.popStack(),\n      helper = this.setupHelper(paramSize, name);\n\n    let possibleFunctionCalls = [];\n\n    if (isSimple) {\n      // direct call to helper\n      possibleFunctionCalls.push(helper.name);\n    }\n    // call a function from the input object\n    possibleFunctionCalls.push(nonHelper);\n    if (!this.options.strict) {\n      possibleFunctionCalls.push(\n        this.aliasable('container.hooks.helperMissing')\n      );\n    }\n\n    let functionLookupCode = [\n      '(',\n      this.itemsSeparatedBy(possibleFunctionCalls, '||'),\n      ')'\n    ];\n    let functionCall = this.source.functionCall(\n      functionLookupCode,\n      'call',\n      helper.callParams\n    );\n    this.push(functionCall);\n  },\n\n  itemsSeparatedBy: function(items, separator) {\n    let result = [];\n    result.push(items[0]);\n    for (let i = 1; i < items.length; i++) {\n      result.push(separator, items[i]);\n    }\n    return result;\n  },\n  // [invokeKnownHelper]\n  //\n  // On stack, before: hash, inverse, program, params..., ...\n  // On stack, after: result of helper invocation\n  //\n  // This operation is used when the helper is known to exist,\n  // so a `helperMissing` fallback is not required.\n  invokeKnownHelper: function(paramSize, name) {\n    let helper = this.setupHelper(paramSize, name);\n    this.push(this.source.functionCall(helper.name, 'call', helper.callParams));\n  },\n\n  // [invokeAmbiguous]\n  //\n  // On stack, before: hash, inverse, program, params..., ...\n  // On stack, after: result of disambiguation\n  //\n  // This operation is used when an expression like `{{foo}}`\n  // is provided, but we don't know at compile-time whether it\n  // is a helper or a path.\n  //\n  // This operation emits more code than the other options,\n  // and can be avoided by passing the `knownHelpers` and\n  // `knownHelpersOnly` flags at compile-time.\n  invokeAmbiguous: function(name, helperCall) {\n    this.useRegister('helper');\n\n    let nonHelper = this.popStack();\n\n    this.emptyHash();\n    let helper = this.setupHelper(0, name, helperCall);\n\n    let helperName = (this.lastHelper = this.nameLookup(\n      'helpers',\n      name,\n      'helper'\n    ));\n\n    let lookup = ['(', '(helper = ', helperName, ' || ', nonHelper, ')'];\n    if (!this.options.strict) {\n      lookup[0] = '(helper = ';\n      lookup.push(\n        ' != null ? helper : ',\n        this.aliasable('container.hooks.helperMissing')\n      );\n    }\n\n    this.push([\n      '(',\n      lookup,\n      helper.paramsInit ? ['),(', helper.paramsInit] : [],\n      '),',\n      '(typeof helper === ',\n      this.aliasable('\"function\"'),\n      ' ? ',\n      this.source.functionCall('helper', 'call', helper.callParams),\n      ' : helper))'\n    ]);\n  },\n\n  // [invokePartial]\n  //\n  // On stack, before: context, ...\n  // On stack after: result of partial invocation\n  //\n  // This operation pops off a context, invokes a partial with that context,\n  // and pushes the result of the invocation back.\n  invokePartial: function(isDynamic, name, indent) {\n    let params = [],\n      options = this.setupParams(name, 1, params);\n\n    if (isDynamic) {\n      name = this.popStack();\n      delete options.name;\n    }\n\n    if (indent) {\n      options.indent = JSON.stringify(indent);\n    }\n    options.helpers = 'helpers';\n    options.partials = 'partials';\n    options.decorators = 'container.decorators';\n\n    if (!isDynamic) {\n      params.unshift(this.nameLookup('partials', name, 'partial'));\n    } else {\n      params.unshift(name);\n    }\n\n    if (this.options.compat) {\n      options.depths = 'depths';\n    }\n    options = this.objectLiteral(options);\n    params.push(options);\n\n    this.push(this.source.functionCall('container.invokePartial', '', params));\n  },\n\n  // [assignToHash]\n  //\n  // On stack, before: value, ..., hash, ...\n  // On stack, after: ..., hash, ...\n  //\n  // Pops a value off the stack and assigns it to the current hash\n  assignToHash: function(key) {\n    let value = this.popStack(),\n      context,\n      type,\n      id;\n\n    if (this.trackIds) {\n      id = this.popStack();\n    }\n    if (this.stringParams) {\n      type = this.popStack();\n      context = this.popStack();\n    }\n\n    let hash = this.hash;\n    if (context) {\n      hash.contexts[key] = context;\n    }\n    if (type) {\n      hash.types[key] = type;\n    }\n    if (id) {\n      hash.ids[key] = id;\n    }\n    hash.values[key] = value;\n  },\n\n  pushId: function(type, name, child) {\n    if (type === 'BlockParam') {\n      this.pushStackLiteral(\n        'blockParams[' +\n          name[0] +\n          '].path[' +\n          name[1] +\n          ']' +\n          (child ? ' + ' + JSON.stringify('.' + child) : '')\n      );\n    } else if (type === 'PathExpression') {\n      this.pushString(name);\n    } else if (type === 'SubExpression') {\n      this.pushStackLiteral('true');\n    } else {\n      this.pushStackLiteral('null');\n    }\n  },\n\n  // HELPERS\n\n  compiler: JavaScriptCompiler,\n\n  compileChildren: function(environment, options) {\n    let children = environment.children,\n      child,\n      compiler;\n\n    for (let i = 0, l = children.length; i < l; i++) {\n      child = children[i];\n      compiler = new this.compiler(); // eslint-disable-line new-cap\n\n      let existing = this.matchExistingProgram(child);\n\n      if (existing == null) {\n        this.context.programs.push(''); // Placeholder to prevent name conflicts for nested children\n        let index = this.context.programs.length;\n        child.index = index;\n        child.name = 'program' + index;\n        this.context.programs[index] = compiler.compile(\n          child,\n          options,\n          this.context,\n          !this.precompile\n        );\n        this.context.decorators[index] = compiler.decorators;\n        this.context.environments[index] = child;\n\n        this.useDepths = this.useDepths || compiler.useDepths;\n        this.useBlockParams = this.useBlockParams || compiler.useBlockParams;\n        child.useDepths = this.useDepths;\n        child.useBlockParams = this.useBlockParams;\n      } else {\n        child.index = existing.index;\n        child.name = 'program' + existing.index;\n\n        this.useDepths = this.useDepths || existing.useDepths;\n        this.useBlockParams = this.useBlockParams || existing.useBlockParams;\n      }\n    }\n  },\n  matchExistingProgram: function(child) {\n    for (let i = 0, len = this.context.environments.length; i < len; i++) {\n      let environment = this.context.environments[i];\n      if (environment && environment.equals(child)) {\n        return environment;\n      }\n    }\n  },\n\n  programExpression: function(guid) {\n    let child = this.environment.children[guid],\n      programParams = [child.index, 'data', child.blockParams];\n\n    if (this.useBlockParams || this.useDepths) {\n      programParams.push('blockParams');\n    }\n    if (this.useDepths) {\n      programParams.push('depths');\n    }\n\n    return 'container.program(' + programParams.join(', ') + ')';\n  },\n\n  useRegister: function(name) {\n    if (!this.registers[name]) {\n      this.registers[name] = true;\n      this.registers.list.push(name);\n    }\n  },\n\n  push: function(expr) {\n    if (!(expr instanceof Literal)) {\n      expr = this.source.wrap(expr);\n    }\n\n    this.inlineStack.push(expr);\n    return expr;\n  },\n\n  pushStackLiteral: function(item) {\n    this.push(new Literal(item));\n  },\n\n  pushSource: function(source) {\n    if (this.pendingContent) {\n      this.source.push(\n        this.appendToBuffer(\n          this.source.quotedString(this.pendingContent),\n          this.pendingLocation\n        )\n      );\n      this.pendingContent = undefined;\n    }\n\n    if (source) {\n      this.source.push(source);\n    }\n  },\n\n  replaceStack: function(callback) {\n    let prefix = ['('],\n      stack,\n      createdStack,\n      usedLiteral;\n\n    /* istanbul ignore next */\n    if (!this.isInline()) {\n      throw new Exception('replaceStack on non-inline');\n    }\n\n    // We want to merge the inline statement into the replacement statement via ','\n    let top = this.popStack(true);\n\n    if (top instanceof Literal) {\n      // Literals do not need to be inlined\n      stack = [top.value];\n      prefix = ['(', stack];\n      usedLiteral = true;\n    } else {\n      // Get or create the current stack name for use by the inline\n      createdStack = true;\n      let name = this.incrStack();\n\n      prefix = ['((', this.push(name), ' = ', top, ')'];\n      stack = this.topStack();\n    }\n\n    let item = callback.call(this, stack);\n\n    if (!usedLiteral) {\n      this.popStack();\n    }\n    if (createdStack) {\n      this.stackSlot--;\n    }\n    this.push(prefix.concat(item, ')'));\n  },\n\n  incrStack: function() {\n    this.stackSlot++;\n    if (this.stackSlot > this.stackVars.length) {\n      this.stackVars.push('stack' + this.stackSlot);\n    }\n    return this.topStackName();\n  },\n  topStackName: function() {\n    return 'stack' + this.stackSlot;\n  },\n  flushInline: function() {\n    let inlineStack = this.inlineStack;\n    this.inlineStack = [];\n    for (let i = 0, len = inlineStack.length; i < len; i++) {\n      let entry = inlineStack[i];\n      /* istanbul ignore if */\n      if (entry instanceof Literal) {\n        this.compileStack.push(entry);\n      } else {\n        let stack = this.incrStack();\n        this.pushSource([stack, ' = ', entry, ';']);\n        this.compileStack.push(stack);\n      }\n    }\n  },\n  isInline: function() {\n    return this.inlineStack.length;\n  },\n\n  popStack: function(wrapped) {\n    let inline = this.isInline(),\n      item = (inline ? this.inlineStack : this.compileStack).pop();\n\n    if (!wrapped && item instanceof Literal) {\n      return item.value;\n    } else {\n      if (!inline) {\n        /* istanbul ignore next */\n        if (!this.stackSlot) {\n          throw new Exception('Invalid stack pop');\n        }\n        this.stackSlot--;\n      }\n      return item;\n    }\n  },\n\n  topStack: function() {\n    let stack = this.isInline() ? this.inlineStack : this.compileStack,\n      item = stack[stack.length - 1];\n\n    /* istanbul ignore if */\n    if (item instanceof Literal) {\n      return item.value;\n    } else {\n      return item;\n    }\n  },\n\n  contextName: function(context) {\n    if (this.useDepths && context) {\n      return 'depths[' + context + ']';\n    } else {\n      return 'depth' + context;\n    }\n  },\n\n  quotedString: function(str) {\n    return this.source.quotedString(str);\n  },\n\n  objectLiteral: function(obj) {\n    return this.source.objectLiteral(obj);\n  },\n\n  aliasable: function(name) {\n    let ret = this.aliases[name];\n    if (ret) {\n      ret.referenceCount++;\n      return ret;\n    }\n\n    ret = this.aliases[name] = this.source.wrap(name);\n    ret.aliasable = true;\n    ret.referenceCount = 1;\n\n    return ret;\n  },\n\n  setupHelper: function(paramSize, name, blockHelper) {\n    let params = [],\n      paramsInit = this.setupHelperArgs(name, paramSize, params, blockHelper);\n    let foundHelper = this.nameLookup('helpers', name, 'helper'),\n      callContext = this.aliasable(\n        `${this.contextName(0)} != null ? ${this.contextName(\n          0\n        )} : (container.nullContext || {})`\n      );\n\n    return {\n      params: params,\n      paramsInit: paramsInit,\n      name: foundHelper,\n      callParams: [callContext].concat(params)\n    };\n  },\n\n  setupParams: function(helper, paramSize, params) {\n    let options = {},\n      contexts = [],\n      types = [],\n      ids = [],\n      objectArgs = !params,\n      param;\n\n    if (objectArgs) {\n      params = [];\n    }\n\n    options.name = this.quotedString(helper);\n    options.hash = this.popStack();\n\n    if (this.trackIds) {\n      options.hashIds = this.popStack();\n    }\n    if (this.stringParams) {\n      options.hashTypes = this.popStack();\n      options.hashContexts = this.popStack();\n    }\n\n    let inverse = this.popStack(),\n      program = this.popStack();\n\n    // Avoid setting fn and inverse if neither are set. This allows\n    // helpers to do a check for `if (options.fn)`\n    if (program || inverse) {\n      options.fn = program || 'container.noop';\n      options.inverse = inverse || 'container.noop';\n    }\n\n    // The parameters go on to the stack in order (making sure that they are evaluated in order)\n    // so we need to pop them off the stack in reverse order\n    let i = paramSize;\n    while (i--) {\n      param = this.popStack();\n      params[i] = param;\n\n      if (this.trackIds) {\n        ids[i] = this.popStack();\n      }\n      if (this.stringParams) {\n        types[i] = this.popStack();\n        contexts[i] = this.popStack();\n      }\n    }\n\n    if (objectArgs) {\n      options.args = this.source.generateArray(params);\n    }\n\n    if (this.trackIds) {\n      options.ids = this.source.generateArray(ids);\n    }\n    if (this.stringParams) {\n      options.types = this.source.generateArray(types);\n      options.contexts = this.source.generateArray(contexts);\n    }\n\n    if (this.options.data) {\n      options.data = 'data';\n    }\n    if (this.useBlockParams) {\n      options.blockParams = 'blockParams';\n    }\n    return options;\n  },\n\n  setupHelperArgs: function(helper, paramSize, params, useRegister) {\n    let options = this.setupParams(helper, paramSize, params);\n    options.loc = JSON.stringify(this.source.currentLocation);\n    options = this.objectLiteral(options);\n    if (useRegister) {\n      this.useRegister('options');\n      params.push('options');\n      return ['options=', options];\n    } else if (params) {\n      params.push(options);\n      return '';\n    } else {\n      return options;\n    }\n  }\n};\n\n(function() {\n  const reservedWords = (\n    'break else new var' +\n    ' case finally return void' +\n    ' catch for switch while' +\n    ' continue function this with' +\n    ' default if throw' +\n    ' delete in try' +\n    ' do instanceof typeof' +\n    ' abstract enum int short' +\n    ' boolean export interface static' +\n    ' byte extends long super' +\n    ' char final native synchronized' +\n    ' class float package throws' +\n    ' const goto private transient' +\n    ' debugger implements protected volatile' +\n    ' double import public let yield await' +\n    ' null true false'\n  ).split(' ');\n\n  const compilerWords = (JavaScriptCompiler.RESERVED_WORDS = {});\n\n  for (let i = 0, l = reservedWords.length; i < l; i++) {\n    compilerWords[reservedWords[i]] = true;\n  }\n})();\n\n/**\n * @deprecated May be removed in the next major version\n */\nJavaScriptCompiler.isValidJavaScriptVariableName = function(name) {\n  return (\n    !JavaScriptCompiler.RESERVED_WORDS[name] &&\n    /^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name)\n  );\n};\n\nfunction strictLookup(requireTerminal, compiler, parts, type) {\n  let stack = compiler.popStack(),\n    i = 0,\n    len = parts.length;\n  if (requireTerminal) {\n    len--;\n  }\n\n  for (; i < len; i++) {\n    stack = compiler.nameLookup(stack, parts[i], type);\n  }\n\n  if (requireTerminal) {\n    return [\n      compiler.aliasable('container.strict'),\n      '(',\n      stack,\n      ', ',\n      compiler.quotedString(parts[i]),\n      ', ',\n      JSON.stringify(compiler.source.currentLocation),\n      ' )'\n    ];\n  } else {\n    return stack;\n  }\n}\n\nexport default JavaScriptCompiler;\n", "import runtime from './handlebars.runtime';\n\n// Compiler imports\nimport AST from './handlebars/compiler/ast';\nimport {\n  parser as Parser,\n  parse,\n  parseWithoutProcessing\n} from './handlebars/compiler/base';\nimport { Compiler, compile, precompile } from './handlebars/compiler/compiler';\nimport JavaScriptCompiler from './handlebars/compiler/javascript-compiler';\nimport Visitor from './handlebars/compiler/visitor';\n\nimport noConflict from './handlebars/no-conflict';\n\nlet _create = runtime.create;\nfunction create() {\n  let hb = _create();\n\n  hb.compile = function(input, options) {\n    return compile(input, options, hb);\n  };\n  hb.precompile = function(input, options) {\n    return precompile(input, options, hb);\n  };\n\n  hb.AST = AST;\n  hb.Compiler = Compiler;\n  hb.JavaScriptCompiler = JavaScriptCompiler;\n  hb.Parser = Parser;\n  hb.parse = parse;\n  hb.parseWithoutProcessing = parseWithoutProcessing;\n\n  return hb;\n}\n\nlet inst = create();\ninst.create = create;\n\nnoConflict(inst);\n\ninst.Visitor = Visitor;\n\ninst['default'] = inst;\n\nexport default inst;\n", "/* eslint-disable new-cap */\nimport Visitor from './visitor';\n\nexport function print(ast) {\n  return new PrintVisitor().accept(ast);\n}\n\nexport function PrintVisitor() {\n  this.padding = 0;\n}\n\nPrintVisitor.prototype = new Visitor();\n\nPrintVisitor.prototype.pad = function(string) {\n  let out = '';\n\n  for (let i = 0, l = this.padding; i < l; i++) {\n    out += '  ';\n  }\n\n  out += string + '\\n';\n  return out;\n};\n\nPrintVisitor.prototype.Program = function(program) {\n  let out = '',\n    body = program.body,\n    i,\n    l;\n\n  if (program.blockParams) {\n    let blockParams = 'BLOCK PARAMS: [';\n    for (i = 0, l = program.blockParams.length; i < l; i++) {\n      blockParams += ' ' + program.blockParams[i];\n    }\n    blockParams += ' ]';\n    out += this.pad(blockParams);\n  }\n\n  for (i = 0, l = body.length; i < l; i++) {\n    out += this.accept(body[i]);\n  }\n\n  this.padding--;\n\n  return out;\n};\n\nPrintVisitor.prototype.MustacheStatement = function(mustache) {\n  return this.pad('{{ ' + this.SubExpression(mustache) + ' }}');\n};\nPrintVisitor.prototype.Decorator = function(mustache) {\n  return this.pad('{{ DIRECTIVE ' + this.SubExpression(mustache) + ' }}');\n};\n\nPrintVisitor.prototype.BlockStatement = PrintVisitor.prototype.DecoratorBlock = function(\n  block\n) {\n  let out = '';\n\n  out += this.pad(\n    (block.type === 'DecoratorBlock' ? 'DIRECTIVE ' : '') + 'BLOCK:'\n  );\n  this.padding++;\n  out += this.pad(this.SubExpression(block));\n  if (block.program) {\n    out += this.pad('PROGRAM:');\n    this.padding++;\n    out += this.accept(block.program);\n    this.padding--;\n  }\n  if (block.inverse) {\n    if (block.program) {\n      this.padding++;\n    }\n    out += this.pad('{{^}}');\n    this.padding++;\n    out += this.accept(block.inverse);\n    this.padding--;\n    if (block.program) {\n      this.padding--;\n    }\n  }\n  this.padding--;\n\n  return out;\n};\n\nPrintVisitor.prototype.PartialStatement = function(partial) {\n  let content = 'PARTIAL:' + partial.name.original;\n  if (partial.params[0]) {\n    content += ' ' + this.accept(partial.params[0]);\n  }\n  if (partial.hash) {\n    content += ' ' + this.accept(partial.hash);\n  }\n  return this.pad('{{> ' + content + ' }}');\n};\nPrintVisitor.prototype.PartialBlockStatement = function(partial) {\n  let content = 'PARTIAL BLOCK:' + partial.name.original;\n  if (partial.params[0]) {\n    content += ' ' + this.accept(partial.params[0]);\n  }\n  if (partial.hash) {\n    content += ' ' + this.accept(partial.hash);\n  }\n\n  content += ' ' + this.pad('PROGRAM:');\n  this.padding++;\n  content += this.accept(partial.program);\n  this.padding--;\n\n  return this.pad('{{> ' + content + ' }}');\n};\n\nPrintVisitor.prototype.ContentStatement = function(content) {\n  return this.pad(\"CONTENT[ '\" + content.value + \"' ]\");\n};\n\nPrintVisitor.prototype.CommentStatement = function(comment) {\n  return this.pad(\"{{! '\" + comment.value + \"' }}\");\n};\n\nPrintVisitor.prototype.SubExpression = function(sexpr) {\n  let params = sexpr.params,\n    paramStrings = [],\n    hash;\n\n  for (let i = 0, l = params.length; i < l; i++) {\n    paramStrings.push(this.accept(params[i]));\n  }\n\n  params = '[' + paramStrings.join(', ') + ']';\n\n  hash = sexpr.hash ? ' ' + this.accept(sexpr.hash) : '';\n\n  return this.accept(sexpr.path) + ' ' + params + hash;\n};\n\nPrintVisitor.prototype.PathExpression = function(id) {\n  let path = id.parts.join('/');\n  return (id.data ? '@' : '') + 'PATH:' + path;\n};\n\nPrintVisitor.prototype.StringLiteral = function(string) {\n  return '\"' + string.value + '\"';\n};\n\nPrintVisitor.prototype.NumberLiteral = function(number) {\n  return 'NUMBER{' + number.value + '}';\n};\n\nPrintVisitor.prototype.BooleanLiteral = function(bool) {\n  return 'BOOLEAN{' + bool.value + '}';\n};\n\nPrintVisitor.prototype.UndefinedLiteral = function() {\n  return 'UNDEFINED';\n};\n\nPrintVisitor.prototype.NullLiteral = function() {\n  return 'NULL';\n};\n\nPrintVisitor.prototype.Hash = function(hash) {\n  let pairs = hash.pairs,\n    joinedPairs = [];\n\n  for (let i = 0, l = pairs.length; i < l; i++) {\n    joinedPairs.push(this.accept(pairs[i]));\n  }\n\n  return 'HASH{' + joinedPairs.join(', ') + '}';\n};\nPrintVisitor.prototype.HashPair = function(pair) {\n  return pair.key + '=' + this.accept(pair.value);\n};\n/* eslint-enable new-cap */\n", "// USAGE:\n// var handlebars = require('handlebars');\n/* eslint-disable no-var */\n\n// var local = handlebars.create();\n\nvar handlebars = require('../dist/cjs/handlebars')['default'];\n\nvar printer = require('../dist/cjs/handlebars/compiler/printer');\nhandlebars.PrintVisitor = printer.PrintVisitor;\nhandlebars.print = printer.print;\n\nmodule.exports = handlebars;\n\n// Publish a Node.js require() handler for .handlebars and .hbs files\nfunction extension(module, filename) {\n  var fs = require('fs');\n  var templateString = fs.readFileSync(filename, 'utf8');\n  module.exports = handlebars.compile(templateString);\n}\n/* istanbul ignore else */\nif (typeof require !== 'undefined' && require.extensions) {\n  require.extensions['.handlebars'] = extension;\n  require.extensions['.hbs'] = extension;\n}\n", "/*\n * Elasticsearch B.V licenses this file to you under the MIT License.\n * See `packages/kbn-handlebars/LICENSE` for more information.\n */\n\nimport Handlebars from 'handlebars';\nimport {\n  createProtoAccessControl,\n  resultIsAllowed,\n  // @ts-expect-error: Could not find a declaration file for module\n} from 'handlebars/dist/cjs/handlebars/internal/proto-access';\n// @ts-expect-error: Could not find a declaration file for module\nimport AST from 'handlebars/dist/cjs/handlebars/compiler/ast';\n// @ts-expect-error: Could not find a declaration file for module\nimport { indexOf, createFrame } from 'handlebars/dist/cjs/handlebars/utils';\n// @ts-expect-error: Could not find a declaration file for module\nimport { moveHelperToHooks } from 'handlebars/dist/cjs/handlebars/helpers';\n\nimport type {\n  AmbiguousHelperOptions,\n  CompileOptions,\n  Container,\n  DecoratorDelegate,\n  DecoratorsHash,\n  HelperOptions,\n  NodeType,\n  NonBlockHelperOptions,\n  ProcessableBlockStatementNode,\n  ProcessableNode,\n  ProcessableNodeWithPathParts,\n  ProcessableNodeWithPathPartsOrLiteral,\n  ProcessableStatementNode,\n  ResolvePartialOptions,\n  RuntimeOptions,\n  Template,\n  TemplateDelegate,\n  VisitorHelper,\n} from './types';\nimport { kAmbiguous, kHelper, kSimple } from './symbols';\nimport {\n  initData,\n  isBlock,\n  isDecorator,\n  noop,\n  toDecoratorOptions,\n  transformLiteralToPath,\n} from './utils';\n\nexport class ElasticHandlebarsVisitor extends Handlebars.Visitor {\n  private env: typeof Handlebars;\n  private contexts: any[] = [];\n  private output: any[] = [];\n  private template?: string;\n  private compileOptions: CompileOptions;\n  private runtimeOptions?: RuntimeOptions;\n  private blockParamNames: any[][] = [];\n  private blockParamValues: any[][] = [];\n  private ast?: hbs.AST.Program;\n  private container: Container;\n  private defaultHelperOptions: Pick<NonBlockHelperOptions, 'lookupProperty'>;\n  private processedRootDecorators = false; // Root decorators should not have access to input arguments. This flag helps us detect them.\n  private processedDecoratorsForProgram = new Set(); // It's important that a given program node only has its decorators run once, we use this Map to keep track of them\n\n  constructor(\n    env: typeof Handlebars,\n    input: string | hbs.AST.Program,\n    options: CompileOptions = {}\n  ) {\n    super();\n\n    this.env = env;\n\n    if (typeof input !== 'string' && input.type === 'Program') {\n      this.ast = input;\n    } else {\n      this.template = input as string;\n    }\n\n    this.compileOptions = { data: true, ...options };\n    this.compileOptions.knownHelpers = Object.assign(\n      Object.create(null),\n      {\n        helperMissing: true,\n        blockHelperMissing: true,\n        each: true,\n        if: true,\n        unless: true,\n        with: true,\n        log: true,\n        lookup: true,\n      },\n      this.compileOptions.knownHelpers\n    );\n\n    const protoAccessControl = createProtoAccessControl({});\n\n    const container: Container = (this.container = {\n      helpers: {},\n      partials: {},\n      decorators: {},\n      strict(obj, name, loc) {\n        if (!obj || !(name in obj)) {\n          throw new Handlebars.Exception('\"' + name + '\" not defined in ' + obj, {\n            loc,\n          } as hbs.AST.Node);\n        }\n        return container.lookupProperty(obj, name);\n      },\n      // this function is lifted from the handlebars source and slightly modified (lib/handlebars/runtime.js)\n      lookupProperty(parent, propertyName) {\n        const result = parent[propertyName];\n        if (result == null) {\n          return result;\n        }\n        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n          return result;\n        }\n\n        if (resultIsAllowed(result, protoAccessControl, propertyName)) {\n          return result;\n        }\n        return undefined;\n      },\n      // this function is lifted from the handlebars source and slightly modified (lib/handlebars/runtime.js)\n      lambda(current, context) {\n        return typeof current === 'function' ? current.call(context) : current;\n      },\n      data(value: any, depth: number) {\n        while (value && depth--) {\n          value = value._parent;\n        }\n        return value;\n      },\n      hooks: {},\n    });\n\n    this.defaultHelperOptions = {\n      lookupProperty: container.lookupProperty,\n    };\n  }\n\n  render(context: any, options: RuntimeOptions = {}): string {\n    this.contexts = [context];\n    this.output = [];\n    this.runtimeOptions = { ...options };\n    this.container.helpers = { ...this.env.helpers, ...options.helpers };\n    this.container.partials = { ...this.env.partials, ...options.partials };\n    this.container.decorators = {\n      ...(this.env.decorators as DecoratorsHash),\n      ...options.decorators,\n    };\n    this.container.hooks = {};\n    this.processedRootDecorators = false;\n    this.processedDecoratorsForProgram.clear();\n\n    if (this.compileOptions.data) {\n      this.runtimeOptions.data = initData(context, this.runtimeOptions.data);\n    }\n\n    const keepHelperInHelpers = false;\n    moveHelperToHooks(this.container, 'helperMissing', keepHelperInHelpers);\n    moveHelperToHooks(this.container, 'blockHelperMissing', keepHelperInHelpers);\n\n    if (!this.ast) {\n      this.ast = Handlebars.parse(this.template!);\n    }\n\n    // The `defaultMain` function contains the default behavior:\n    //\n    // Generate a \"program\" function based on the root `Program` in the AST and\n    // call it. This will start the processing of all the child nodes in the\n    // AST.\n    const defaultMain: TemplateDelegate = (_context) => {\n      const prog = this.generateProgramFunction(this.ast!);\n      return prog(_context, this.runtimeOptions);\n    };\n\n    // Run any decorators that might exist on the root:\n    //\n    // The `defaultMain` function is passed in, and if there are no root\n    // decorators, or if the decorators chooses to do so, the same function is\n    // returned from `processDecorators` and the default behavior is retained.\n    //\n    // Alternatively any of the root decorators might call the `defaultMain`\n    // function themselves, process its return value, and return a completely\n    // different `main` function.\n    const main = this.processDecorators(this.ast, defaultMain);\n    this.processedRootDecorators = true;\n\n    // Call the `main` function and add the result to the final output.\n    const result = main(this.context, options);\n\n    if (main === defaultMain) {\n      this.output.push(result);\n      return this.output.join('');\n    } else {\n      // We normally expect the return value of `main` to be a string. However,\n      // if a decorator is used to override the `defaultMain` function, the\n      // return value can be any type. To match the upstream handlebars project\n      // behavior, we want the result of rendering the template to be the\n      // literal value returned by the decorator.\n      //\n      // Since the output array in this case always will be empty, we just\n      // return that single value instead of attempting to join all the array\n      // elements as strings.\n      return result;\n    }\n  }\n\n  // ********************************************** //\n  // ***    Visitor AST Traversal Functions     *** //\n  // ********************************************** //\n\n  Program(program: hbs.AST.Program) {\n    this.blockParamNames.unshift(program.blockParams);\n    super.Program(program);\n    this.blockParamNames.shift();\n  }\n\n  MustacheStatement(mustache: hbs.AST.MustacheStatement) {\n    this.processStatementOrExpression(mustache);\n  }\n\n  BlockStatement(block: hbs.AST.BlockStatement) {\n    this.processStatementOrExpression(block);\n  }\n\n  PartialStatement(partial: hbs.AST.PartialStatement) {\n    this.invokePartial(partial);\n  }\n\n  PartialBlockStatement(partial: hbs.AST.PartialBlockStatement) {\n    this.invokePartial(partial);\n  }\n\n  // This space is intentionally left blank: We want to override the Visitor\n  // class implementation of this method, but since we handle decorators\n  // separately before traversing the nodes, we just want to make this a no-op.\n  DecoratorBlock(decorator: hbs.AST.DecoratorBlock) {}\n\n  // This space is intentionally left blank: We want to override the Visitor\n  // class implementation of this method, but since we handle decorators\n  // separately before traversing the nodes, we just want to make this a no-op.\n  Decorator(decorator: hbs.AST.Decorator) {}\n\n  SubExpression(sexpr: hbs.AST.SubExpression) {\n    this.processStatementOrExpression(sexpr);\n  }\n\n  PathExpression(path: hbs.AST.PathExpression) {\n    const blockParamId =\n      !path.depth && !AST.helpers.scopedId(path) && this.blockParamIndex(path.parts[0]);\n\n    let result;\n    if (blockParamId) {\n      result = this.lookupBlockParam(blockParamId, path);\n    } else if (path.data) {\n      result = this.lookupData(this.runtimeOptions!.data, path);\n    } else {\n      result = this.resolvePath(this.contexts[path.depth], path);\n    }\n\n    this.output.push(result);\n  }\n\n  ContentStatement(content: hbs.AST.ContentStatement) {\n    this.output.push(content.value);\n  }\n\n  StringLiteral(string: hbs.AST.StringLiteral) {\n    this.output.push(string.value);\n  }\n\n  NumberLiteral(number: hbs.AST.NumberLiteral) {\n    this.output.push(number.value);\n  }\n\n  BooleanLiteral(bool: hbs.AST.BooleanLiteral) {\n    this.output.push(bool.value);\n  }\n\n  UndefinedLiteral() {\n    this.output.push(undefined);\n  }\n\n  NullLiteral() {\n    this.output.push(null);\n  }\n\n  // ********************************************** //\n  // ***      Visitor AST Helper Functions      *** //\n  // ********************************************** //\n\n  /**\n   * Special code for decorators, since they have to be executed ahead of time (before the wrapping program).\n   * So we have to look into the program AST body and see if it contains any decorators that we have to process\n   * before we can finish processing of the wrapping program.\n   */\n  private processDecorators(program: hbs.AST.Program, prog: TemplateDelegate) {\n    if (!this.processedDecoratorsForProgram.has(program)) {\n      this.processedDecoratorsForProgram.add(program);\n      const props = {};\n      for (const node of program.body) {\n        if (isDecorator(node)) {\n          prog = this.processDecorator(node, prog, props);\n        }\n      }\n    }\n\n    return prog;\n  }\n\n  private processDecorator(\n    decorator: hbs.AST.DecoratorBlock | hbs.AST.Decorator,\n    prog: TemplateDelegate,\n    props: Record<string, any>\n  ) {\n    const options = this.setupDecoratorOptions(decorator);\n\n    const result = this.container.lookupProperty<DecoratorDelegate>(\n      this.container.decorators,\n      options.name\n    )(prog, props, this.container, options);\n\n    return Object.assign(result || prog, props);\n  }\n\n  private processStatementOrExpression(node: ProcessableNodeWithPathPartsOrLiteral) {\n    // Calling `transformLiteralToPath` has side-effects!\n    // It converts a node from type `ProcessableNodeWithPathPartsOrLiteral` to `ProcessableNodeWithPathParts`\n    transformLiteralToPath(node);\n\n    switch (this.classifyNode(node as ProcessableNodeWithPathParts)) {\n      case kSimple:\n        this.processSimpleNode(node as ProcessableNodeWithPathParts);\n        break;\n      case kHelper:\n        this.processHelperNode(node as ProcessableNodeWithPathParts);\n        break;\n      case kAmbiguous:\n        this.processAmbiguousNode(node as ProcessableNodeWithPathParts);\n        break;\n    }\n  }\n\n  // Liftet from lib/handlebars/compiler/compiler.js (original name: classifySexpr)\n  private classifyNode(node: { path: hbs.AST.PathExpression }): NodeType {\n    const isSimple = AST.helpers.simpleId(node.path);\n    const isBlockParam = isSimple && !!this.blockParamIndex(node.path.parts[0]);\n\n    // a mustache is an eligible helper if:\n    // * its id is simple (a single part, not `this` or `..`)\n    let isHelper = !isBlockParam && AST.helpers.helperExpression(node);\n\n    // if a mustache is an eligible helper but not a definite\n    // helper, it is ambiguous, and will be resolved in a later\n    // pass or at runtime.\n    let isEligible = !isBlockParam && (isHelper || isSimple);\n\n    // if ambiguous, we can possibly resolve the ambiguity now\n    // An eligible helper is one that does not have a complex path, i.e. `this.foo`, `../foo` etc.\n    if (isEligible && !isHelper) {\n      const name = node.path.parts[0];\n      const options = this.compileOptions;\n      if (options.knownHelpers && options.knownHelpers[name]) {\n        isHelper = true;\n      } else if (options.knownHelpersOnly) {\n        isEligible = false;\n      }\n    }\n\n    if (isHelper) {\n      return kHelper;\n    } else if (isEligible) {\n      return kAmbiguous;\n    } else {\n      return kSimple;\n    }\n  }\n\n  // Liftet from lib/handlebars/compiler/compiler.js\n  private blockParamIndex(name: string): [number, any] | undefined {\n    for (let depth = 0, len = this.blockParamNames.length; depth < len; depth++) {\n      const blockParams = this.blockParamNames[depth];\n      const param = blockParams && indexOf(blockParams, name);\n      if (blockParams && param >= 0) {\n        return [depth, param];\n      }\n    }\n  }\n\n  // Looks up the value of `parts` on the given block param and pushes\n  // it onto the stack.\n  private lookupBlockParam(blockParamId: [number, any], path: hbs.AST.PathExpression) {\n    const value = this.blockParamValues[blockParamId[0]][blockParamId[1]];\n    return this.resolvePath(value, path, 1);\n  }\n\n  // Push the data lookup operator\n  private lookupData(data: any, path: hbs.AST.PathExpression) {\n    if (path.depth) {\n      data = this.container.data(data, path.depth);\n    }\n\n    return this.resolvePath(data, path);\n  }\n\n  private processSimpleNode(node: ProcessableNodeWithPathParts) {\n    const path = node.path;\n    // @ts-expect-error strict is not a valid property on PathExpression, but we used in the same way it's also used in the original handlebars\n    path.strict = true;\n    const result = this.resolveNodes(path)[0];\n    const lambdaResult = this.container.lambda(result, this.context);\n\n    if (isBlock(node)) {\n      this.blockValue(node, lambdaResult);\n    } else {\n      this.output.push(lambdaResult);\n    }\n  }\n\n  // The purpose of this opcode is to take a block of the form\n  // `{{#this.foo}}...{{/this.foo}}`, resolve the value of `foo`, and\n  // replace it on the stack with the result of properly\n  // invoking blockHelperMissing.\n  private blockValue(node: hbs.AST.BlockStatement, value: any) {\n    const name = node.path.original;\n    const options = this.setupParams(node, name);\n\n    const result = this.container.hooks.blockHelperMissing!.call(this.context, value, options);\n\n    this.output.push(result);\n  }\n\n  private processHelperNode(node: ProcessableNodeWithPathParts) {\n    const path = node.path;\n    const name = path.parts[0];\n\n    if (this.compileOptions.knownHelpers && this.compileOptions.knownHelpers[name]) {\n      this.invokeKnownHelper(node);\n    } else if (this.compileOptions.knownHelpersOnly) {\n      throw new Handlebars.Exception(\n        'You specified knownHelpersOnly, but used the unknown helper ' + name,\n        node\n      );\n    } else {\n      this.invokeHelper(node);\n    }\n  }\n\n  // This operation is used when the helper is known to exist,\n  // so a `helperMissing` fallback is not required.\n  private invokeKnownHelper(node: ProcessableNodeWithPathParts) {\n    const name = node.path.parts[0];\n    const helper = this.setupHelper(node, name);\n    // TypeScript: `helper.fn` might be `undefined` at this point, but to match the upstream behavior we call it without any guards\n    const result = helper.fn!.call(helper.context, ...helper.params, helper.options);\n    this.output.push(result);\n  }\n\n  // Pops off the helper's parameters, invokes the helper,\n  // and pushes the helper's return value onto the stack.\n  //\n  // If the helper is not found, `helperMissing` is called.\n  private invokeHelper(node: ProcessableNodeWithPathParts) {\n    const path = node.path;\n    const name = path.original;\n    const isSimple = AST.helpers.simpleId(path);\n    const helper = this.setupHelper(node, name);\n\n    const loc = isSimple && helper.fn ? node.loc : path.loc;\n    helper.fn = (isSimple && helper.fn) || this.resolveNodes(path)[0];\n\n    if (!helper.fn) {\n      if (this.compileOptions.strict) {\n        helper.fn = this.container.strict(helper.context, name, loc);\n      } else {\n        helper.fn = this.container.hooks.helperMissing;\n      }\n    }\n\n    // TypeScript: `helper.fn` might be `undefined` at this point, but to match the upstream behavior we call it without any guards\n    const result = helper.fn!.call(helper.context, ...helper.params, helper.options);\n\n    this.output.push(result);\n  }\n\n  private invokePartial(partial: hbs.AST.PartialStatement | hbs.AST.PartialBlockStatement) {\n    const { params } = partial;\n    if (params.length > 1) {\n      throw new Handlebars.Exception(\n        `Unsupported number of partial arguments: ${params.length}`,\n        partial\n      );\n    }\n\n    const isDynamic = partial.name.type === 'SubExpression';\n    const name = isDynamic\n      ? this.resolveNodes(partial.name).join('')\n      : (partial.name as hbs.AST.PathExpression).original;\n\n    const options: AmbiguousHelperOptions & ResolvePartialOptions = this.setupParams(partial, name);\n    options.helpers = this.container.helpers;\n    options.partials = this.container.partials;\n    options.decorators = this.container.decorators;\n\n    let partialBlock;\n    if ('fn' in options && options.fn !== noop) {\n      const { fn } = options;\n      const currentPartialBlock = options.data?.['partial-block'];\n      options.data = createFrame(options.data);\n\n      // Wrapper function to get access to currentPartialBlock from the closure\n      partialBlock = options.data['partial-block'] = function partialBlockWrapper(\n        context: any,\n        wrapperOptions: { data?: HelperOptions['data'] } = {}\n      ) {\n        // Restore the partial-block from the closure for the execution of the block\n        // i.e. the part inside the block of the partial call.\n        wrapperOptions.data = createFrame(wrapperOptions.data);\n        wrapperOptions.data['partial-block'] = currentPartialBlock;\n        return fn(context, wrapperOptions);\n      };\n\n      if (fn.partials) {\n        options.partials = { ...options.partials, ...fn.partials };\n      }\n    }\n\n    let context = {};\n    if (params.length === 0 && !this.compileOptions.explicitPartialContext) {\n      context = this.context;\n    } else if (params.length === 1) {\n      context = this.resolveNodes(params[0])[0];\n    }\n\n    if (Object.keys(options.hash).length > 0) {\n      // TODO: context can be an array, but maybe never when we have a hash???\n      context = Object.assign({}, context, options.hash);\n    }\n\n    const partialTemplate: Template | undefined =\n      this.container.partials[name] ??\n      partialBlock ??\n      // TypeScript note: We extend ResolvePartialOptions in our types.ts file\n      // to fix an error in the upstream type. When calling back into the\n      // upstream code, we just cast back to the non-extended type\n      Handlebars.VM.resolvePartial(\n        undefined,\n        undefined,\n        options as Handlebars.ResolvePartialOptions\n      );\n\n    if (partialTemplate === undefined) {\n      throw new Handlebars.Exception(`The partial ${name} could not be found`);\n    }\n\n    let render;\n    if (typeof partialTemplate === 'string') {\n      render = this.env.compileAST(partialTemplate, this.compileOptions);\n      if (name in this.container.partials) {\n        this.container.partials[name] = render;\n      }\n    } else {\n      render = partialTemplate;\n    }\n\n    let result = render(context, options);\n\n    if ('indent' in partial) {\n      result =\n        partial.indent +\n        (this.compileOptions.preventIndent\n          ? result\n          : result.replace(/\\n(?!$)/g, `\\n${partial.indent}`)); // indent each line, ignoring any trailing linebreak\n    }\n\n    this.output.push(result);\n  }\n\n  private processAmbiguousNode(node: ProcessableNodeWithPathParts) {\n    const name = node.path.parts[0];\n    const helper = this.setupHelper(node, name);\n    let { fn: helperFn } = helper;\n\n    const loc = helperFn ? node.loc : node.path.loc;\n    helperFn = helperFn ?? this.resolveNodes(node.path)[0];\n\n    if (helperFn === undefined) {\n      if (this.compileOptions.strict) {\n        helperFn = this.container.strict(helper.context, name, loc);\n      } else {\n        helperFn =\n          helper.context != null\n            ? this.container.lookupProperty(helper.context, name)\n            : helper.context;\n        if (helperFn == null) helperFn = this.container.hooks.helperMissing;\n      }\n    }\n\n    const helperResult =\n      typeof helperFn === 'function'\n        ? helperFn.call(helper.context, ...helper.params, helper.options)\n        : helperFn;\n\n    if (isBlock(node)) {\n      const result = helper.fn\n        ? helperResult\n        : this.container.hooks.blockHelperMissing!.call(this.context, helperResult, helper.options);\n      if (result != null) {\n        this.output.push(result);\n      }\n    } else {\n      if (\n        (node as hbs.AST.MustacheStatement).escaped === false ||\n        this.compileOptions.noEscape === true ||\n        typeof helperResult !== 'string'\n      ) {\n        this.output.push(helperResult);\n      } else {\n        this.output.push(Handlebars.escapeExpression(helperResult));\n      }\n    }\n  }\n\n  private setupHelper(node: ProcessableNode, helperName: string): VisitorHelper {\n    return {\n      fn: this.container.lookupProperty(this.container.helpers, helperName),\n      context: this.context,\n      params: this.resolveNodes(node.params),\n      options: this.setupParams(node, helperName),\n    };\n  }\n\n  private setupDecoratorOptions(decorator: hbs.AST.Decorator | hbs.AST.DecoratorBlock) {\n    // TypeScript: The types indicate that `decorator.path` technically can be an `hbs.AST.Literal`. However, the upstream codebase always treats it as an `hbs.AST.PathExpression`, so we do too.\n    const name = (decorator.path as hbs.AST.PathExpression).original;\n    const options = toDecoratorOptions(this.setupParams(decorator, name));\n\n    if (decorator.params.length > 0) {\n      if (!this.processedRootDecorators) {\n        // When processing the root decorators, temporarily remove the root context so it's not accessible to the decorator\n        const context = this.contexts.shift();\n        options.args = this.resolveNodes(decorator.params);\n        this.contexts.unshift(context);\n      } else {\n        options.args = this.resolveNodes(decorator.params);\n      }\n    } else {\n      options.args = [];\n    }\n\n    return options;\n  }\n\n  private setupParams(node: ProcessableBlockStatementNode, name: string): HelperOptions;\n  private setupParams(node: ProcessableStatementNode, name: string): NonBlockHelperOptions;\n  private setupParams(node: ProcessableNode, name: string): AmbiguousHelperOptions;\n  private setupParams(node: ProcessableNode, name: string) {\n    const options: AmbiguousHelperOptions = {\n      name,\n      hash: this.getHash(node),\n      data: this.runtimeOptions!.data,\n      loc: { start: node.loc.start, end: node.loc.end },\n      ...this.defaultHelperOptions,\n    };\n\n    if (isBlock(node)) {\n      (options as HelperOptions).fn = node.program\n        ? this.processDecorators(node.program, this.generateProgramFunction(node.program))\n        : noop;\n      (options as HelperOptions).inverse = node.inverse\n        ? this.processDecorators(node.inverse, this.generateProgramFunction(node.inverse))\n        : noop;\n    }\n\n    return options;\n  }\n\n  private generateProgramFunction(program: hbs.AST.Program) {\n    if (!program) return noop;\n\n    const prog: TemplateDelegate = (nextContext: any, runtimeOptions: RuntimeOptions = {}) => {\n      runtimeOptions = { ...runtimeOptions };\n\n      // inherit data in blockParams from parent program\n      runtimeOptions.data = runtimeOptions.data || this.runtimeOptions!.data;\n      if (runtimeOptions.blockParams) {\n        runtimeOptions.blockParams = runtimeOptions.blockParams.concat(\n          this.runtimeOptions!.blockParams\n        );\n      }\n\n      // inherit partials from parent program\n      runtimeOptions.partials = runtimeOptions.partials || this.runtimeOptions!.partials;\n\n      // stash parent program data\n      const tmpRuntimeOptions = this.runtimeOptions;\n      this.runtimeOptions = runtimeOptions;\n      const shiftContext = nextContext !== this.context;\n      if (shiftContext) this.contexts.unshift(nextContext);\n      this.blockParamValues.unshift(runtimeOptions.blockParams || []);\n\n      // execute child program\n      const result = this.resolveNodes(program).join('');\n\n      // unstash parent program data\n      this.blockParamValues.shift();\n      if (shiftContext) this.contexts.shift();\n      this.runtimeOptions = tmpRuntimeOptions;\n\n      // return result of child program\n      return result;\n    };\n\n    prog.blockParams = program.blockParams?.length ?? 0;\n    return prog;\n  }\n\n  private getHash(statement: { hash?: hbs.AST.Hash }) {\n    const result: { [key: string]: any } = {};\n    if (!statement.hash) return result;\n    for (const { key, value } of statement.hash.pairs) {\n      result[key] = this.resolveNodes(value)[0];\n    }\n    return result;\n  }\n\n  private resolvePath(obj: any, path: hbs.AST.PathExpression, index = 0) {\n    if (this.compileOptions.strict || this.compileOptions.assumeObjects) {\n      return this.strictLookup(obj, path);\n    }\n\n    for (; index < path.parts.length; index++) {\n      if (obj == null) return;\n      obj = this.container.lookupProperty(obj, path.parts[index]);\n    }\n\n    return obj;\n  }\n\n  private strictLookup(obj: any, path: hbs.AST.PathExpression) {\n    // @ts-expect-error strict is not a valid property on PathExpression, but we used in the same way it's also used in the original handlebars\n    const requireTerminal = this.compileOptions.strict && path.strict;\n    const len = path.parts.length - (requireTerminal ? 1 : 0);\n\n    for (let i = 0; i < len; i++) {\n      obj = this.container.lookupProperty(obj, path.parts[i]);\n    }\n\n    if (requireTerminal) {\n      return this.container.strict(obj, path.parts[len], path.loc);\n    } else {\n      return obj;\n    }\n  }\n\n  private resolveNodes(nodes: hbs.AST.Node | hbs.AST.Node[]): any[] {\n    const currentOutput = this.output;\n    this.output = [];\n\n    if (Array.isArray(nodes)) {\n      this.acceptArray(nodes);\n    } else {\n      this.accept(nodes);\n    }\n\n    const result = this.output;\n\n    this.output = currentOutput;\n\n    return result;\n  }\n\n  private get context() {\n    return this.contexts[0];\n  }\n}\n", "/*\n * Elasticsearch B.V licenses this file to you under the MIT License.\n * See `packages/kbn-handlebars/LICENSE` for more information.\n */\n\nexport const kHelper = Symbol('helper');\nexport const kAmbiguous = Symbol('ambiguous');\nexport const kSimple = Symbol('simple');\n", "/*\n * Elasticsearch B.V licenses this file to you under the MIT License.\n * See `packages/kbn-handlebars/LICENSE` for more information.\n */\n\n// @ts-expect-error: Could not find a declaration file for module\nimport { createFrame } from 'handlebars/dist/cjs/handlebars/utils';\n\nimport type { AmbiguousHelperOptions, DecoratorOptions } from './types';\n\nexport function isBlock(node: hbs.AST.Node): node is hbs.AST.BlockStatement {\n  return 'program' in node || 'inverse' in node;\n}\n\nexport function isDecorator(\n  node: hbs.AST.Node\n): node is hbs.AST.Decorator | hbs.AST.DecoratorBlock {\n  return node.type === 'Decorator' || node.type === 'DecoratorBlock';\n}\n\nexport function toDecoratorOptions(options: AmbiguousHelperOptions) {\n  // There's really no tests/documentation on this, but to match the upstream codebase we'll remove `lookupProperty` from the decorator context\n  delete (options as any).lookupProperty;\n\n  return options as DecoratorOptions;\n}\n\nexport function noop() {\n  return '';\n}\n\n// liftet from handlebars lib/handlebars/runtime.js\nexport function initData(context: any, data: any) {\n  if (!data || !('root' in data)) {\n    data = data ? createFrame(data) : {};\n    data.root = context;\n  }\n  return data;\n}\n\n// liftet from handlebars lib/handlebars/compiler/compiler.js\nexport function transformLiteralToPath(node: { path: hbs.AST.PathExpression | hbs.AST.Literal }) {\n  const pathIsLiteral = 'parts' in node.path === false;\n\n  if (pathIsLiteral) {\n    const literal = node.path;\n    // @ts-expect-error: Not all `hbs.AST.Literal` sub-types has an `original` property, but that's ok, in that case we just want `undefined`\n    const original = literal.original;\n    // Casting to string here to make false and 0 literal values play nicely with the rest\n    // of the system.\n    node.path = {\n      type: 'PathExpression',\n      data: false,\n      depth: 0,\n      parts: [original + ''],\n      original: original + '',\n      loc: literal.loc,\n    };\n  }\n}\n\nexport function allowUnsafeEval() {\n  try {\n    new Function();\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n", "/*\n * Elasticsearch B.V licenses this file to you under the MIT License.\n * See `packages/kbn-handlebars/LICENSE` for more information.\n */\n\n// The handlebars module uses `export =`, so we should technically use `import Handlebars = require('handlebars')`, but Babel will not allow this:\n// https://www.typescriptlang.org/docs/handbook/modules.html#export--and-import--require\nimport Handlebars = require('handlebars');\n\nimport type { CompileOptions, RuntimeOptions, TemplateDelegate } from './types';\nimport { ElasticHandlebarsVisitor } from './visitor';\n\nconst originalCreate = Handlebars.create;\n\nexport { Handlebars };\n\n/**\n * Creates an isolated Handlebars environment.\n *\n * Each environment has its own helpers.\n * This is only necessary for use cases that demand distinct helpers.\n * Most use cases can use the root Handlebars environment directly.\n *\n * @returns A sandboxed/scoped version of the @kbn/handlebars module\n */\nHandlebars.create = function (): typeof Handlebars {\n  const SandboxedHandlebars = originalCreate.call(Handlebars) as typeof Handlebars;\n  // When creating new Handlebars environments, ensure the custom compileAST function is present in the new environment as well\n  SandboxedHandlebars.compileAST = Handlebars.compileAST;\n  return SandboxedHandlebars;\n};\n\nHandlebars.compileAST = function (\n  input: string | hbs.AST.Program,\n  options?: CompileOptions\n): TemplateDelegate {\n  if (input == null || (typeof input !== 'string' && input.type !== 'Program')) {\n    throw new Handlebars.Exception(\n      `You must pass a string or Handlebars AST to Handlebars.compileAST. You passed ${input}`\n    );\n  }\n\n  // If `Handlebars.compileAST` is reassigned, `this` will be undefined.\n  const visitor = new ElasticHandlebarsVisitor(this ?? Handlebars, input, options);\n\n  return (context: any, runtimeOptions?: RuntimeOptions) => visitor.render(context, runtimeOptions);\n};\n", "/*\n * Elasticsearch B.V licenses this file to you under the MIT License.\n * See `packages/kbn-handlebars/LICENSE` for more information.\n */\n\nimport { Handlebars } from './src/handlebars';\nimport { allowUnsafeEval } from './src/utils';\n\n// The handlebars module uses `export =`, so it can't be re-exported using `export *`.\n// However, because of Babel, we're not allowed to use `export =` ourselves.\n// So we have to resort to using `exports default` even though eslint doesn't like it.\n//\n// eslint-disable-next-line import/no-default-export\nglobalThis.Handlebars = Handlebars;\n\n/**\n * If the `unsafe-eval` CSP is set, this string constant will be `compile`,\n * otherwise `compileAST`.\n *\n * This can be used to call the more optimized `compile` function in\n * environments that support it, or fall back to `compileAST` on environments\n * that don't.\n */\nglobalThis.handlebarsCompileFnName = allowUnsafeEval() ? 'compile' : 'compileAST';\n\nexport type {\n  CompileOptions,\n  RuntimeOptions,\n  HelperDelegate,\n  TemplateDelegate,\n  DecoratorDelegate,\n  HelperOptions,\n} from './src/types';\n"], -  "mappings": "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AE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GA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E,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAA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", -  "names": ["escape", "badChars", "possible", "escapeChar", "chr", "extend", "obj", "i", "key", "toString", "isFunction", "value", "exports", "isArray", "indexOf", "array", "len", "escapeExpression", "string", "isEmpty", "createFrame", "object", "frame", "blockParams", "params", "ids", "appendContextPath", "contextPath", "id", "errorProps", "Exception", "message", "node", "loc", "line", "endLineNumber", "column", "endColumn", "tmp", "idx", "nop", "instance", "context", "options", "inverse", "fn", "_utils", "data", "instance", "context", "options", "_exception2", "fn", "inverse", "i", "ret", "data", "contextPath", "_utils", "execIteration", "field", "index", "last", "j", "newContext", "iterator", "it", "priorKey", "key", "instance", "_exception2", "instance", "conditional", "options", "_exception2", "_utils", "instance", "args", "options", "i", "level", "instance", "obj", "field", "options", "instance", "context", "options", "_exception2", "_utils", "fn", "data", "registerDefaultHelpers", "instance", "_helpersBlockHelperMissing2", "_helpersEach2", "_helpersHelperMissing2", "_helpersIf2", "_helpersLog2", "_helpersLookup2", "_helpersWith2", "moveHelperToHooks", "helperName", "keepHelper", "instance", "fn", "props", "container", "options", "ret", "context", "original", "_utils", "registerDefaultDecorators", "instance", "_decoratorsInline2", "logger", "level", "levelMap", "_utils", "method", "message", "_len", "_key", "createNewLookupObject", "sources", "_len", "_key", "_utils", "logger", "_interopRequireWildcard", "_logger", "loggedProperties", "createProtoAccessControl", "runtimeOptions", "defaultMethodWhiteList", "defaultPropertyWhiteList", "_createNewLookupObject", "resultIsAllowed", "result", "protoAccessControl", "propertyName", "checkWhiteList", "protoAccessControlForType", "logUnexpecedPropertyAccessOnce", "resetLoggedProperties", "VERSION", "COMPILER_REVISION", "LAST_COMPATIBLE_COMPILER_REVISION", "REVISION_CHANGES", "objectType", "HandlebarsEnvironment", "helpers", "partials", "decorators", "_helpers", "_decorators", "_logger2", "name", "fn", "_utils", "_exception2", "partial", "_internalProtoAccess", "log", "SafeString", "string", "wrapHelper", "helper", "transformOptionsFn", "wrapper", "options", "Utils", "_interopRequireWildcard", "_utils", "checkRevision", "compilerInfo", "compilerRevision", "currentRevision", "_base", "runtimeVersions", "compilerVersions", "_exception2", "template", "templateSpec", "env", "templateWasPrecompiledWithCompilerV7", "invokePartialWrapper", "partial", "context", "options", "extendedOptions", "result", "lines", "i", "l", "container", "obj", "name", "loc", "parent", "propertyName", "_internalProtoAccess", "depths", "len", "current", "ret", "data", "declaredBlockParams", "blockParams", "programWrapper", "fn", "wrapProgram", "value", "depth", "param", "common", "initData", "main", "executeDecorators", "mergedHelpers", "wrapHelpersToPassLookupProperty", "keepHelperInHelpers", "_helpers", "prog", "currentDepths", "resolvePartial", "invokePartial", "currentPartialBlock", "partialBlock", "noop", "props", "helperName", "helper", "passLookupPropertyOption", "lookupProperty", "_internalWrapHelper", "Handlebars", "root", "$Handlebars", "base", "_interopRequireWildcard", "_handlebarsBase", "Utils", "_handlebarsUtils", "runtime", "_handlebarsRuntime", "create", "hb", "_handlebarsSafeString2", "_handlebarsException2", "spec", "inst", "_handlebarsNoConflict2", "AST", "node", "path", "handlebars", "parser", "yytext", "yyleng", "yylineno", "yy", "yystate", "$$", "_$", "$0", "inverse", "program", "str", "hash", "input", "self", "stack", "vstack", "lstack", "table", "recovering", "TERROR", "EOF", "yyloc", "ranges", "popStack", "n", "lex", "token", "symbol", "preErrorSymbol", "state", "action", "a", "r", "yyval", "p", "len", "newState", "expected", "errStr", "lexer", "ch", "lines", "oldLines", "past", "next", "pre", "c", "match", "tempMatch", "index", "col", "rules", "i", "condition", "yy_", "$avoiding_name_collisions", "YY_START", "strip", "start", "end", "YYSTATE", "Parser", "exports", "Visitor", "node", "name", "value", "_exception2", "array", "i", "l", "object", "ret", "program", "visitSubExpression", "visitBlock", "visitPartial", "partial", "hash", "pair", "mustache", "block", "WhitespaceControl", "options", "_visitor2", "program", "doStandalone", "isRoot", "body", "l", "current", "strip", "_isPrevWhitespace", "isPrevWhitespace", "_isNextWhitespace", "isNextWhitespace", "openStandalone", "closeStandalone", "inlineStandalone", "omitRight", "omitLeft", "block", "inverse", "firstInverse", "lastInverse", "inverseStrip", "mustache", "node", "i", "prev", "sibling", "next", "multiple", "original", "validateClose", "open", "close", "errorNode", "_exception2", "SourceLocation", "source", "locInfo", "id", "token", "stripFlags", "stripComment", "comment", "preparePath", "data", "parts", "loc", "original", "dig", "depth", "i", "l", "part", "isLiteral", "prepareMustache", "path", "params", "hash", "strip", "escapeFlag", "escaped", "decorator", "prepareRawBlock", "openRawBlock", "contents", "program", "prepareBlock", "openBlock", "inverseAndProgram", "inverted", "inverse", "inverseStrip", "prepareProgram", "statements", "firstLoc", "lastLoc", "preparePartialBlock", "Helpers", "_interopRequireWildcard", "_helpers", "_parser2", "yy", "_utils", "parseWithoutProcessing", "input", "options", "locInfo", "ast", "parse", "strip", "_whitespaceControl2", "slice", "Compiler", "other", "len", "i", "opcode", "otherOpcode", "argEquals", "program", "options", "_utils", "childCompiler", "result", "guid", "node", "_exception2", "ret", "body", "bodyLength", "block", "transformLiteralToPath", "inverse", "type", "decorator", "params", "path", "partial", "partialName", "isDynamic", "indent", "partialBlock", "mustache", "content", "sexpr", "name", "isBlock", "_ast2", "scoped", "blockParamId", "string", "number", "bool", "hash", "pairs", "l", "depth", "isSimple", "isBlockParam", "isHelper", "isEligible", "_name", "val", "value", "blockParamIndex", "blockParamChild", "omitEmpty", "blockParams", "param", "precompile", "input", "env", "ast", "environment", "compile", "compiled", "compileInput", "templateSpec", "context", "execOptions", "setupOptions", "data", "depths", "a", "b", "literal", "require_base64", "__commonJSMin", "exports", "intToCharMap", "number", "charCode", "bigA", "bigZ", "littleA", "littleZ", "zero", "nine", "plus", "slash", "littleOffset", "numberOffset", "require_base64_vlq", "__commonJSMin", "exports", "base64", "VLQ_BASE_SHIFT", "VLQ_BASE", "VLQ_BASE_MASK", "VLQ_CONTINUATION_BIT", "toVLQSigned", "aValue", "fromVLQSigned", "isNegative", "shifted", "encoded", "digit", "vlq", "aStr", "aIndex", "aOutParam", "strLen", "result", "shift", "continuation", "require_util", "__commonJSMin", "exports", "getArg", "aArgs", "aName", "aDefaultValue", "urlRegexp", "dataUrlRegexp", "urlParse", "aUrl", "match", "urlGenerate", "aParsedUrl", "url", "normalize", "aPath", "path", "isAbsolute", "parts", "part", "up", "i", "join", "aRoot", "aPathUrl", "aRootUrl", "joined", "relative", "level", "index", "supportsNullProto", "obj", "identity", "s", "toSetString", "aStr", "isProtoString", "fromSetString", "length", "compareByOriginalPositions", "mappingA", "mappingB", "onlyCompareOriginal", "cmp", "strcmp", "compareByGeneratedPositionsDeflated", "onlyCompareGenerated", "aStr1", "aStr2", "compareByGeneratedPositionsInflated", "parseSourceMapInput", "str", "computeSourceURL", "sourceRoot", "sourceURL", "sourceMapURL", "parsed", "require_array_set", "__commonJSMin", "exports", "util", "has", "hasNativeMap", "ArraySet", "aArray", "aAllowDuplicates", "set", "len", "aStr", "sStr", "isDuplicate", "idx", "aIdx", "require_mapping_list", "__commonJSMin", "exports", "util", "generatedPositionAfter", "mappingA", "mappingB", "lineA", "lineB", "columnA", "columnB", "MappingList", "aCallback", "aThisArg", "aMapping", "require_source_map_generator", "__commonJSMin", "exports", "base64VLQ", "util", "ArraySet", "MappingList", "SourceMapGenerator", "aArgs", "aSourceMapConsumer", "sourceRoot", "generator", "mapping", "newMapping", "sourceFile", "sourceRelative", "content", "generated", "original", "source", "name", "aSourceFile", "aSourceContent", "aSourceMapPath", "newSources", "newNames", "aGenerated", "aOriginal", "aSource", "aName", "previousGeneratedColumn", "previousGeneratedLine", "previousOriginalColumn", "previousOriginalLine", "previousName", "previousSource", "result", "next", "nameIdx", "sourceIdx", "mappings", "i", "len", "aSources", "aSourceRoot", "key", "map", "require_binary_search", "__commonJSMin", "exports", "recursiveSearch", "aLow", "aHigh", "aNeedle", "aHaystack", "aCompare", "aBias", "mid", "cmp", "index", "require_quick_sort", "__commonJSMin", "exports", "swap", "ary", "x", "y", "temp", "randomIntInRange", "low", "high", "doQuickSort", "comparator", "p", "r", "pivotIndex", "i", "pivot", "j", "q", "require_source_map_consumer", "__commonJSMin", "exports", "util", "binarySearch", "ArraySet", "base64VLQ", "quickSort", "SourceMapConsumer", "aSourceMap", "aSourceMapURL", "sourceMap", "IndexedSourceMapConsumer", "BasicSourceMapConsumer", "aStr", "index", "c", "aSourceRoot", "aCallback", "aContext", "aOrder", "context", "order", "mappings", "sourceRoot", "mapping", "source", "aArgs", "line", "needle", "originalLine", "originalColumn", "version", "sources", "names", "sourcesContent", "file", "s", "aSource", "relativeSource", "i", "smc", "generatedMappings", "destGeneratedMappings", "destOriginalMappings", "length", "srcMapping", "destMapping", "Mapping", "generatedLine", "previousGeneratedColumn", "previousOriginalLine", "previousOriginalColumn", "previousSource", "previousName", "cachedSegments", "temp", "originalMappings", "str", "segment", "end", "value", "aNeedle", "aMappings", "aLineName", "aColumnName", "aComparator", "aBias", "nextMapping", "name", "sc", "nullOnMissing", "url", "fileUriAbsPath", "sections", "lastOffset", "offset", "offsetLine", "offsetColumn", "j", "sectionIndex", "section", "cmp", "content", "generatedPosition", "ret", "sectionMappings", "adjustedMapping", "require_source_node", "__commonJSMin", "exports", "SourceMapGenerator", "util", "REGEX_NEWLINE", "NEWLINE_CODE", "isSourceNode", "SourceNode", "aLine", "aColumn", "aSource", "aChunks", "aName", "aGeneratedCode", "aSourceMapConsumer", "aRelativePath", "node", "remainingLines", "remainingLinesIndex", "shiftNextLine", "lineContents", "getNextLine", "newLine", "lastGeneratedLine", "lastGeneratedColumn", "lastMapping", "mapping", "addMappingWithCode", "nextLine", "code", "sourceFile", "content", "source", "aChunk", "chunk", "i", "aFn", "len", "aSep", "newChildren", "aPattern", "aReplacement", "lastChild", "aSourceFile", "aSourceContent", "sources", "str", "aArgs", "generated", "map", "sourceMappingActive", "lastOriginalSource", "lastOriginalLine", "lastOriginalColumn", "lastOriginalName", "original", "idx", "length", "sourceContent", "require_source_map", "__commonJSMin", "exports", "SourceNode", "SourceMap", "err", "line", "column", "srcFile", "chunks", "_utils", "castChunk", "chunk", "codeGen", "loc", "ret", "len", "CodeGen", "source", "iter", "i", "fn", "type", "params", "str", "obj", "pairs", "key", "value", "_this", "entries", "Literal", "value", "JavaScriptCompiler", "parent", "name", "revision", "_base", "versions", "source", "location", "explicit", "_utils", "environment", "options", "context", "asObject", "opcodes", "opcode", "firstLoc", "i", "l", "_exception2", "fn", "ret", "programs", "_context", "decorators", "_codeGen2", "varDeclarations", "locals", "aliasCount", "alias", "node", "_this", "params", "isSimple", "appendOnly", "appendFirst", "sourceSeen", "bufferStart", "bufferEnd", "line", "blockHelperMissing", "blockName", "current", "content", "local", "depth", "parts", "falsy", "strict", "scoped", "blockParamId", "type", "strictLookup", "len", "lookup", "_this2", "string", "omitEmpty", "hash", "guid", "paramSize", "foundDecorator", "nonHelper", "helper", "possibleFunctionCalls", "functionLookupCode", "functionCall", "items", "separator", "result", "helperCall", "helperName", "isDynamic", "indent", "key", "id", "child", "children", "compiler", "existing", "index", "programParams", "expr", "item", "callback", "prefix", "stack", "createdStack", "usedLiteral", "top", "_name", "inlineStack", "entry", "wrapped", "inline", "str", "obj", "blockHelper", "paramsInit", "foundHelper", "callContext", "contexts", "types", "ids", "objectArgs", "param", "inverse", "program", "useRegister", "reservedWords", "compilerWords", "requireTerminal", "_create", "_handlebarsRuntime2", "create", "hb", "input", "options", "_handlebarsCompilerCompiler", "_handlebarsCompilerAst2", "_handlebarsCompilerJavascriptCompiler2", "_handlebarsCompilerBase", "inst", "_handlebarsNoConflict2", "_handlebarsCompilerVisitor2", "print", "ast", "PrintVisitor", "_visitor2", "string", "out", "i", "l", "program", "body", "blockParams", "mustache", "block", "partial", "content", "comment", "sexpr", "params", "paramStrings", "hash", "id", "path", "number", "bool", "pairs", "joinedPairs", "pair", "require_lib", "__commonJSMin", "exports", "module", "handlebars", "printer", "extension", "filename", "fs", "templateString", "__require", "import_handlebars", "import_proto_access", "import_ast", "import_utils", "import_helpers", "kHelper", "kAmbiguous", "kSimple", "import_utils", "isBlock", "node", "isDecorator", "toDecoratorOptions", "options", "noop", "initData", "context", "data", "transformLiteralToPath", "literal", "original", "allowUnsafeEval", "e", "ElasticHandlebarsVisitor", "Handlebars", "env", "input", "options", "__spreadValues", "protoAccessControl", "container", "obj", "name", "loc", "parent", "propertyName", "result", "current", "context", "value", "depth", "initData", "keepHelperInHelpers", "defaultMain", "_context", "main", "program", "mustache", "block", "partial", "decorator", "sexpr", "path", "blockParamId", "AST", "content", "string", "number", "bool", "prog", "props", "node", "isDecorator", "transformLiteralToPath", "kSimple", "kHelper", "kAmbiguous", "isSimple", "isBlockParam", "isHelper", "isEligible", "len", "blockParams", "param", "data", "lambdaResult", "isBlock", "helper", "_a", "_b", "_c", "params", "partialBlock", "noop", "fn", "currentPartialBlock", "wrapperOptions", "partialTemplate", "render", "helperFn", "helperResult", "helperName", "toDecoratorOptions", "nextContext", "runtimeOptions", "tmpRuntimeOptions", "shiftContext", "statement", "key", "index", "requireTerminal", "i", "nodes", "currentOutput", "Handlebars", "originalCreate", "Handlebars", "SandboxedHandlebars", "originalCreate", "input", "options", "visitor", "ElasticHandlebarsVisitor", "context", "runtimeOptions", "Handlebars", "allowUnsafeEval"] -} diff --git a/ext/lib/jszip.min.js b/ext/lib/jszip.min.js deleted file mode 100644 index e4840d72..00000000 --- a/ext/lib/jszip.min.js +++ /dev/null @@ -1,13 +0,0 @@ -/*! - -JSZip v3.9.1 - A JavaScript class for generating and reading zip files -<http://stuartk.com/jszip> - -(c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com> -Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown. - -JSZip uses the library pako released under the MIT license : -https://github.com/nodeca/pako/blob/master/LICENSE -*/ - -!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).JSZip=t()}}(function(){return function s(a,o,h){function u(r,t){if(!o[r]){if(!a[r]){var e="function"==typeof require&&require;if(!t&&e)return e(r,!0);if(l)return l(r,!0);var i=new Error("Cannot find module '"+r+"'");throw i.code="MODULE_NOT_FOUND",i}var n=o[r]={exports:{}};a[r][0].call(n.exports,function(t){var e=a[r][1][t];return u(e||t)},n,n.exports,s,a,o,h)}return o[r].exports}for(var l="function"==typeof require&&require,t=0;t<h.length;t++)u(h[t]);return u}({1:[function(t,e,r){"use strict";var c=t("./utils"),d=t("./support"),p="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.encode=function(t){for(var e,r,i,n,s,a,o,h=[],u=0,l=t.length,f=l,d="string"!==c.getTypeOf(t);u<t.length;)f=l-u,i=d?(e=t[u++],r=u<l?t[u++]:0,u<l?t[u++]:0):(e=t.charCodeAt(u++),r=u<l?t.charCodeAt(u++):0,u<l?t.charCodeAt(u++):0),n=e>>2,s=(3&e)<<4|r>>4,a=1<f?(15&r)<<2|i>>6:64,o=2<f?63&i:64,h.push(p.charAt(n)+p.charAt(s)+p.charAt(a)+p.charAt(o));return h.join("")},r.decode=function(t){var e,r,i,n,s,a,o=0,h=0,u="data:";if(t.substr(0,u.length)===u)throw new Error("Invalid base64 input, it looks like a data url.");var l,f=3*(t=t.replace(/[^A-Za-z0-9\+\/\=]/g,"")).length/4;if(t.charAt(t.length-1)===p.charAt(64)&&f--,t.charAt(t.length-2)===p.charAt(64)&&f--,f%1!=0)throw new Error("Invalid base64 input, bad content length.");for(l=d.uint8array?new Uint8Array(0|f):new Array(0|f);o<t.length;)e=p.indexOf(t.charAt(o++))<<2|(n=p.indexOf(t.charAt(o++)))>>4,r=(15&n)<<4|(s=p.indexOf(t.charAt(o++)))>>2,i=(3&s)<<6|(a=p.indexOf(t.charAt(o++))),l[h++]=e,64!==s&&(l[h++]=r),64!==a&&(l[h++]=i);return l}},{"./support":30,"./utils":32}],2:[function(t,e,r){"use strict";var i=t("./external"),n=t("./stream/DataWorker"),s=t("./stream/Crc32Probe"),a=t("./stream/DataLengthProbe");function o(t,e,r,i,n){this.compressedSize=t,this.uncompressedSize=e,this.crc32=r,this.compression=i,this.compressedContent=n}o.prototype={getContentWorker:function(){var t=new n(i.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a("data_length")),e=this;return t.on("end",function(){if(this.streamInfo.data_length!==e.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),t},getCompressedWorker:function(){return new n(i.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},o.createWorkerFrom=function(t,e,r){return t.pipe(new s).pipe(new a("uncompressedSize")).pipe(e.compressWorker(r)).pipe(new a("compressedSize")).withStreamInfo("compression",e)},e.exports=o},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(t,e,r){"use strict";var i=t("./stream/GenericWorker");r.STORE={magic:"\0\0",compressWorker:function(t){return new i("STORE compression")},uncompressWorker:function(){return new i("STORE decompression")}},r.DEFLATE=t("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(t,e,r){"use strict";var i=t("./utils");var o=function(){for(var t,e=[],r=0;r<256;r++){t=r;for(var i=0;i<8;i++)t=1&t?3988292384^t>>>1:t>>>1;e[r]=t}return e}();e.exports=function(t,e){return void 0!==t&&t.length?"string"!==i.getTypeOf(t)?function(t,e,r,i){var n=o,s=i+r;t^=-1;for(var a=i;a<s;a++)t=t>>>8^n[255&(t^e[a])];return-1^t}(0|e,t,t.length,0):function(t,e,r,i){var n=o,s=i+r;t^=-1;for(var a=i;a<s;a++)t=t>>>8^n[255&(t^e.charCodeAt(a))];return-1^t}(0|e,t,t.length,0):0}},{"./utils":32}],5:[function(t,e,r){"use strict";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(t,e,r){"use strict";var i=null;i="undefined"!=typeof Promise?Promise:t("lie"),e.exports={Promise:i}},{lie:37}],7:[function(t,e,r){"use strict";var i="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,n=t("pako"),s=t("./utils"),a=t("./stream/GenericWorker"),o=i?"uint8array":"array";function h(t,e){a.call(this,"FlateWorker/"+t),this._pako=null,this._pakoAction=t,this._pakoOptions=e,this.meta={}}r.magic="\b\0",s.inherits(h,a),h.prototype.processChunk=function(t){this.meta=t.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,t.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new n[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var e=this;this._pako.onData=function(t){e.push({data:t,meta:e.meta})}},r.compressWorker=function(t){return new h("Deflate",t)},r.uncompressWorker=function(){return new h("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(t,e,r){"use strict";function A(t,e){var r,i="";for(r=0;r<e;r++)i+=String.fromCharCode(255&t),t>>>=8;return i}function i(t,e,r,i,n,s){var a,o,h=t.file,u=t.compression,l=s!==O.utf8encode,f=I.transformTo("string",s(h.name)),d=I.transformTo("string",O.utf8encode(h.name)),c=h.comment,p=I.transformTo("string",s(c)),m=I.transformTo("string",O.utf8encode(c)),_=d.length!==h.name.length,g=m.length!==c.length,b="",v="",y="",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};e&&!r||(x.crc32=t.crc32,x.compressedSize=t.compressedSize,x.uncompressedSize=t.uncompressedSize);var S=0;e&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),"UNIX"===n?(C=798,z|=function(t,e){var r=t;return t||(r=e?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(t){return 63&(t||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+d,b+="up"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+="uc"+A(y.length,2)+y);var E="";return E+="\n\0",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+"\0\0\0\0"+A(z,4)+A(i,4)+f+b+p}}var I=t("../utils"),n=t("../stream/GenericWorker"),O=t("../utf8"),B=t("../crc32"),R=t("../signature");function s(t,e,r,i){n.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=e,this.zipPlatform=r,this.encodeFileName=i,this.streamFiles=t,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,n),s.prototype.push=function(t){var e=t.meta.percent||0,r=this.entriesCount,i=this._sources.length;this.accumulate?this.contentBuffer.push(t):(this.bytesWritten+=t.data.length,n.prototype.push.call(this,{data:t.data,meta:{currentFile:this.currentFile,percent:r?(e+100*(r-i-1))/r:100}}))},s.prototype.openedSource=function(t){this.currentSourceOffset=this.bytesWritten,this.currentFile=t.file.name;var e=this.streamFiles&&!t.file.dir;if(e){var r=i(t,e,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(t){this.accumulate=!1;var e=this.streamFiles&&!t.file.dir,r=i(t,e,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),e)this.push({data:function(t){return R.DATA_DESCRIPTOR+A(t.crc32,4)+A(t.compressedSize,4)+A(t.uncompressedSize,4)}(t),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var t=this.bytesWritten,e=0;e<this.dirRecords.length;e++)this.push({data:this.dirRecords[e],meta:{percent:100}});var r=this.bytesWritten-t,i=function(t,e,r,i,n){var s=I.transformTo("string",n(i));return R.CENTRAL_DIRECTORY_END+"\0\0\0\0"+A(t,2)+A(t,2)+A(e,4)+A(r,4)+A(s.length,2)+s}(this.dirRecords.length,r,t,this.zipComment,this.encodeFileName);this.push({data:i,meta:{percent:100}})},s.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},s.prototype.registerPrevious=function(t){this._sources.push(t);var e=this;return t.on("data",function(t){e.processChunk(t)}),t.on("end",function(){e.closedSource(e.previous.streamInfo),e._sources.length?e.prepareNextSource():e.end()}),t.on("error",function(t){e.error(t)}),this},s.prototype.resume=function(){return!!n.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},s.prototype.error=function(t){var e=this._sources;if(!n.prototype.error.call(this,t))return!1;for(var r=0;r<e.length;r++)try{e[r].error(t)}catch(t){}return!0},s.prototype.lock=function(){n.prototype.lock.call(this);for(var t=this._sources,e=0;e<t.length;e++)t[e].lock()},e.exports=s},{"../crc32":4,"../signature":23,"../stream/GenericWorker":28,"../utf8":31,"../utils":32}],9:[function(t,e,r){"use strict";var u=t("../compressions"),i=t("./ZipFileWorker");r.generateWorker=function(t,a,e){var o=new i(a.streamFiles,e,a.platform,a.encodeFileName),h=0;try{t.forEach(function(t,e){h++;var r=function(t,e){var r=t||e,i=u[r];if(!i)throw new Error(r+" is not a valid compression method !");return i}(e.options.compression,a.compression),i=e.options.compressionOptions||a.compressionOptions||{},n=e.dir,s=e.date;e._compressWorker(r,i).withStreamInfo("file",{name:t,dir:n,date:s,comment:e.comment||"",unixPermissions:e.unixPermissions,dosPermissions:e.dosPermissions}).pipe(o)}),o.entriesCount=h}catch(t){o.error(t)}return o}},{"../compressions":3,"./ZipFileWorker":8}],10:[function(t,e,r){"use strict";function i(){if(!(this instanceof i))return new i;if(arguments.length)throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.");this.files=Object.create(null),this.comment=null,this.root="",this.clone=function(){var t=new i;for(var e in this)"function"!=typeof this[e]&&(t[e]=this[e]);return t}}(i.prototype=t("./object")).loadAsync=t("./load"),i.support=t("./support"),i.defaults=t("./defaults"),i.version="3.9.1",i.loadAsync=function(t,e){return(new i).loadAsync(t,e)},i.external=t("./external"),e.exports=i},{"./defaults":5,"./external":6,"./load":11,"./object":15,"./support":30}],11:[function(t,e,r){"use strict";var u=t("./utils"),n=t("./external"),i=t("./utf8"),s=t("./zipEntries"),a=t("./stream/Crc32Probe"),l=t("./nodejsUtils");function f(i){return new n.Promise(function(t,e){var r=i.decompressed.getContentWorker().pipe(new a);r.on("error",function(t){e(t)}).on("end",function(){r.streamInfo.crc32!==i.decompressed.crc32?e(new Error("Corrupted zip : CRC32 mismatch")):t()}).resume()})}e.exports=function(t,o){var h=this;return o=u.extend(o||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:i.utf8decode}),l.isNode&&l.isStream(t)?n.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")):u.prepareContent("the loaded zip file",t,!0,o.optimizedBinaryString,o.base64).then(function(t){var e=new s(o);return e.load(t),e}).then(function(t){var e=[n.Promise.resolve(t)],r=t.files;if(o.checkCRC32)for(var i=0;i<r.length;i++)e.push(f(r[i]));return n.Promise.all(e)}).then(function(t){for(var e=t.shift(),r=e.files,i=0;i<r.length;i++){var n=r[i],s=n.fileNameStr,a=u.resolve(n.fileNameStr);h.file(a,n.decompressed,{binary:!0,optimizedBinaryString:!0,date:n.date,dir:n.dir,comment:n.fileCommentStr.length?n.fileCommentStr:null,unixPermissions:n.unixPermissions,dosPermissions:n.dosPermissions,createFolders:o.createFolders}),n.dir||(h.file(a).unsafeOriginalName=s)}return e.zipComment.length&&(h.comment=e.zipComment),h})}},{"./external":6,"./nodejsUtils":14,"./stream/Crc32Probe":25,"./utf8":31,"./utils":32,"./zipEntries":33}],12:[function(t,e,r){"use strict";var i=t("../utils"),n=t("../stream/GenericWorker");function s(t,e){n.call(this,"Nodejs stream input adapter for "+t),this._upstreamEnded=!1,this._bindStream(e)}i.inherits(s,n),s.prototype._bindStream=function(t){var e=this;(this._stream=t).pause(),t.on("data",function(t){e.push({data:t,meta:{percent:0}})}).on("error",function(t){e.isPaused?this.generatedError=t:e.error(t)}).on("end",function(){e.isPaused?e._upstreamEnded=!0:e.end()})},s.prototype.pause=function(){return!!n.prototype.pause.call(this)&&(this._stream.pause(),!0)},s.prototype.resume=function(){return!!n.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},e.exports=s},{"../stream/GenericWorker":28,"../utils":32}],13:[function(t,e,r){"use strict";var n=t("readable-stream").Readable;function i(t,e,r){n.call(this,e),this._helper=t;var i=this;t.on("data",function(t,e){i.push(t)||i._helper.pause(),r&&r(e)}).on("error",function(t){i.emit("error",t)}).on("end",function(){i.push(null)})}t("../utils").inherits(i,n),i.prototype._read=function(){this._helper.resume()},e.exports=i},{"../utils":32,"readable-stream":16}],14:[function(t,e,r){"use strict";e.exports={isNode:"undefined"!=typeof Buffer,newBufferFrom:function(t,e){if(Buffer.from&&Buffer.from!==Uint8Array.from)return Buffer.from(t,e);if("number"==typeof t)throw new Error('The "data" argument must not be a number');return new Buffer(t,e)},allocBuffer:function(t){if(Buffer.alloc)return Buffer.alloc(t);var e=new Buffer(t);return e.fill(0),e},isBuffer:function(t){return Buffer.isBuffer(t)},isStream:function(t){return t&&"function"==typeof t.on&&"function"==typeof t.pause&&"function"==typeof t.resume}}},{}],15:[function(t,e,r){"use strict";function s(t,e,r){var i,n=u.getTypeOf(e),s=u.extend(r||{},f);s.date=s.date||new Date,null!==s.compression&&(s.compression=s.compression.toUpperCase()),"string"==typeof s.unixPermissions&&(s.unixPermissions=parseInt(s.unixPermissions,8)),s.unixPermissions&&16384&s.unixPermissions&&(s.dir=!0),s.dosPermissions&&16&s.dosPermissions&&(s.dir=!0),s.dir&&(t=g(t)),s.createFolders&&(i=_(t))&&b.call(this,i,!0);var a="string"===n&&!1===s.binary&&!1===s.base64;r&&void 0!==r.binary||(s.binary=!a),(e instanceof d&&0===e.uncompressedSize||s.dir||!e||0===e.length)&&(s.base64=!1,s.binary=!0,e="",s.compression="STORE",n="string");var o=null;o=e instanceof d||e instanceof l?e:p.isNode&&p.isStream(e)?new m(t,e):u.prepareContent(t,e,s.binary,s.optimizedBinaryString,s.base64);var h=new c(t,o,s);this.files[t]=h}var n=t("./utf8"),u=t("./utils"),l=t("./stream/GenericWorker"),a=t("./stream/StreamHelper"),f=t("./defaults"),d=t("./compressedObject"),c=t("./zipObject"),o=t("./generate"),p=t("./nodejsUtils"),m=t("./nodejs/NodejsStreamInputAdapter"),_=function(t){"/"===t.slice(-1)&&(t=t.substring(0,t.length-1));var e=t.lastIndexOf("/");return 0<e?t.substring(0,e):""},g=function(t){return"/"!==t.slice(-1)&&(t+="/"),t},b=function(t,e){return e=void 0!==e?e:f.createFolders,t=g(t),this.files[t]||s.call(this,t,null,{dir:!0,createFolders:e}),this.files[t]};function h(t){return"[object RegExp]"===Object.prototype.toString.call(t)}var i={load:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},forEach:function(t){var e,r,i;for(e in this.files)i=this.files[e],(r=e.slice(this.root.length,e.length))&&e.slice(0,this.root.length)===this.root&&t(r,i)},filter:function(r){var i=[];return this.forEach(function(t,e){r(t,e)&&i.push(e)}),i},file:function(t,e,r){if(1!==arguments.length)return t=this.root+t,s.call(this,t,e,r),this;if(h(t)){var i=t;return this.filter(function(t,e){return!e.dir&&i.test(t)})}var n=this.files[this.root+t];return n&&!n.dir?n:null},folder:function(r){if(!r)return this;if(h(r))return this.filter(function(t,e){return e.dir&&r.test(t)});var t=this.root+r,e=b.call(this,t),i=this.clone();return i.root=e.name,i},remove:function(r){r=this.root+r;var t=this.files[r];if(t||("/"!==r.slice(-1)&&(r+="/"),t=this.files[r]),t&&!t.dir)delete this.files[r];else for(var e=this.filter(function(t,e){return e.name.slice(0,r.length)===r}),i=0;i<e.length;i++)delete this.files[e[i].name];return this},generate:function(t){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},generateInternalStream:function(t){var e,r={};try{if((r=u.extend(t||{},{streamFiles:!1,compression:"STORE",compressionOptions:null,type:"",platform:"DOS",comment:null,mimeType:"application/zip",encodeFileName:n.utf8encode})).type=r.type.toLowerCase(),r.compression=r.compression.toUpperCase(),"binarystring"===r.type&&(r.type="string"),!r.type)throw new Error("No output type specified.");u.checkSupport(r.type),"darwin"!==r.platform&&"freebsd"!==r.platform&&"linux"!==r.platform&&"sunos"!==r.platform||(r.platform="UNIX"),"win32"===r.platform&&(r.platform="DOS");var i=r.comment||this.comment||"";e=o.generateWorker(this,r,i)}catch(t){(e=new l("error")).error(t)}return new a(e,r.type||"string",r.mimeType)},generateAsync:function(t,e){return this.generateInternalStream(t).accumulate(e)},generateNodeStream:function(t,e){return(t=t||{}).type||(t.type="nodebuffer"),this.generateInternalStream(t).toNodejsStream(e)}};e.exports=i},{"./compressedObject":2,"./defaults":5,"./generate":9,"./nodejs/NodejsStreamInputAdapter":12,"./nodejsUtils":14,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31,"./utils":32,"./zipObject":35}],16:[function(t,e,r){e.exports=t("stream")},{stream:void 0}],17:[function(t,e,r){"use strict";var i=t("./DataReader");function n(t){i.call(this,t);for(var e=0;e<this.data.length;e++)t[e]=255&t[e]}t("../utils").inherits(n,i),n.prototype.byteAt=function(t){return this.data[this.zero+t]},n.prototype.lastIndexOfSignature=function(t){for(var e=t.charCodeAt(0),r=t.charCodeAt(1),i=t.charCodeAt(2),n=t.charCodeAt(3),s=this.length-4;0<=s;--s)if(this.data[s]===e&&this.data[s+1]===r&&this.data[s+2]===i&&this.data[s+3]===n)return s-this.zero;return-1},n.prototype.readAndCheckSignature=function(t){var e=t.charCodeAt(0),r=t.charCodeAt(1),i=t.charCodeAt(2),n=t.charCodeAt(3),s=this.readData(4);return e===s[0]&&r===s[1]&&i===s[2]&&n===s[3]},n.prototype.readData=function(t){if(this.checkOffset(t),0===t)return[];var e=this.data.slice(this.zero+this.index,this.zero+this.index+t);return this.index+=t,e},e.exports=n},{"../utils":32,"./DataReader":18}],18:[function(t,e,r){"use strict";var i=t("../utils");function n(t){this.data=t,this.length=t.length,this.index=0,this.zero=0}n.prototype={checkOffset:function(t){this.checkIndex(this.index+t)},checkIndex:function(t){if(this.length<this.zero+t||t<0)throw new Error("End of data reached (data length = "+this.length+", asked index = "+t+"). Corrupted zip ?")},setIndex:function(t){this.checkIndex(t),this.index=t},skip:function(t){this.setIndex(this.index+t)},byteAt:function(t){},readInt:function(t){var e,r=0;for(this.checkOffset(t),e=this.index+t-1;e>=this.index;e--)r=(r<<8)+this.byteAt(e);return this.index+=t,r},readString:function(t){return i.transformTo("string",this.readData(t))},readData:function(t){},lastIndexOfSignature:function(t){},readAndCheckSignature:function(t){},readDate:function(){var t=this.readInt(4);return new Date(Date.UTC(1980+(t>>25&127),(t>>21&15)-1,t>>16&31,t>>11&31,t>>5&63,(31&t)<<1))}},e.exports=n},{"../utils":32}],19:[function(t,e,r){"use strict";var i=t("./Uint8ArrayReader");function n(t){i.call(this,t)}t("../utils").inherits(n,i),n.prototype.readData=function(t){this.checkOffset(t);var e=this.data.slice(this.zero+this.index,this.zero+this.index+t);return this.index+=t,e},e.exports=n},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(t,e,r){"use strict";var i=t("./DataReader");function n(t){i.call(this,t)}t("../utils").inherits(n,i),n.prototype.byteAt=function(t){return this.data.charCodeAt(this.zero+t)},n.prototype.lastIndexOfSignature=function(t){return this.data.lastIndexOf(t)-this.zero},n.prototype.readAndCheckSignature=function(t){return t===this.readData(4)},n.prototype.readData=function(t){this.checkOffset(t);var e=this.data.slice(this.zero+this.index,this.zero+this.index+t);return this.index+=t,e},e.exports=n},{"../utils":32,"./DataReader":18}],21:[function(t,e,r){"use strict";var i=t("./ArrayReader");function n(t){i.call(this,t)}t("../utils").inherits(n,i),n.prototype.readData=function(t){if(this.checkOffset(t),0===t)return new Uint8Array(0);var e=this.data.subarray(this.zero+this.index,this.zero+this.index+t);return this.index+=t,e},e.exports=n},{"../utils":32,"./ArrayReader":17}],22:[function(t,e,r){"use strict";var i=t("../utils"),n=t("../support"),s=t("./ArrayReader"),a=t("./StringReader"),o=t("./NodeBufferReader"),h=t("./Uint8ArrayReader");e.exports=function(t){var e=i.getTypeOf(t);return i.checkSupport(e),"string"!==e||n.uint8array?"nodebuffer"===e?new o(t):n.uint8array?new h(i.transformTo("uint8array",t)):new s(i.transformTo("array",t)):new a(t)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(t,e,r){"use strict";r.LOCAL_FILE_HEADER="PK",r.CENTRAL_FILE_HEADER="PK",r.CENTRAL_DIRECTORY_END="PK",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",r.ZIP64_CENTRAL_DIRECTORY_END="PK",r.DATA_DESCRIPTOR="PK\b"},{}],24:[function(t,e,r){"use strict";var i=t("./GenericWorker"),n=t("../utils");function s(t){i.call(this,"ConvertWorker to "+t),this.destType=t}n.inherits(s,i),s.prototype.processChunk=function(t){this.push({data:n.transformTo(this.destType,t.data),meta:t.meta})},e.exports=s},{"../utils":32,"./GenericWorker":28}],25:[function(t,e,r){"use strict";var i=t("./GenericWorker"),n=t("../crc32");function s(){i.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}t("../utils").inherits(s,i),s.prototype.processChunk=function(t){this.streamInfo.crc32=n(t.data,this.streamInfo.crc32||0),this.push(t)},e.exports=s},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(t,e,r){"use strict";var i=t("../utils"),n=t("./GenericWorker");function s(t){n.call(this,"DataLengthProbe for "+t),this.propName=t,this.withStreamInfo(t,0)}i.inherits(s,n),s.prototype.processChunk=function(t){if(t){var e=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=e+t.data.length}n.prototype.processChunk.call(this,t)},e.exports=s},{"../utils":32,"./GenericWorker":28}],27:[function(t,e,r){"use strict";var i=t("../utils"),n=t("./GenericWorker");function s(t){n.call(this,"DataWorker");var e=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,t.then(function(t){e.dataIsReady=!0,e.data=t,e.max=t&&t.length||0,e.type=i.getTypeOf(t),e.isPaused||e._tickAndRepeat()},function(t){e.error(t)})}i.inherits(s,n),s.prototype.cleanUp=function(){n.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!n.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,i.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(i.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var t=null,e=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":t=this.data.substring(this.index,e);break;case"uint8array":t=this.data.subarray(this.index,e);break;case"array":case"nodebuffer":t=this.data.slice(this.index,e)}return this.index=e,this.push({data:t,meta:{percent:this.max?this.index/this.max*100:0}})},e.exports=s},{"../utils":32,"./GenericWorker":28}],28:[function(t,e,r){"use strict";function i(t){this.name=t||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}i.prototype={push:function(t){this.emit("data",t)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(t){this.emit("error",t)}return!0},error:function(t){return!this.isFinished&&(this.isPaused?this.generatedError=t:(this.isFinished=!0,this.emit("error",t),this.previous&&this.previous.error(t),this.cleanUp()),!0)},on:function(t,e){return this._listeners[t].push(e),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(t,e){if(this._listeners[t])for(var r=0;r<this._listeners[t].length;r++)this._listeners[t][r].call(this,e)},pipe:function(t){return t.registerPrevious(this)},registerPrevious:function(t){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.streamInfo=t.streamInfo,this.mergeStreamInfo(),this.previous=t;var e=this;return t.on("data",function(t){e.processChunk(t)}),t.on("end",function(){e.end()}),t.on("error",function(t){e.error(t)}),this},pause:function(){return!this.isPaused&&!this.isFinished&&(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;var t=this.isPaused=!1;return this.generatedError&&(this.error(this.generatedError),t=!0),this.previous&&this.previous.resume(),!t},flush:function(){},processChunk:function(t){this.push(t)},withStreamInfo:function(t,e){return this.extraStreamInfo[t]=e,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var t in this.extraStreamInfo)this.extraStreamInfo.hasOwnProperty(t)&&(this.streamInfo[t]=this.extraStreamInfo[t])},lock:function(){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var t="Worker "+this.name;return this.previous?this.previous+" -> "+t:t}},e.exports=i},{}],29:[function(t,e,r){"use strict";var h=t("../utils"),n=t("./ConvertWorker"),s=t("./GenericWorker"),u=t("../base64"),i=t("../support"),a=t("../external"),o=null;if(i.nodestream)try{o=t("../nodejs/NodejsStreamOutputAdapter")}catch(t){}function l(t,o){return new a.Promise(function(e,r){var i=[],n=t._internalType,s=t._outputType,a=t._mimeType;t.on("data",function(t,e){i.push(t),o&&o(e)}).on("error",function(t){i=[],r(t)}).on("end",function(){try{var t=function(t,e,r){switch(t){case"blob":return h.newBlob(h.transformTo("arraybuffer",e),r);case"base64":return u.encode(e);default:return h.transformTo(t,e)}}(s,function(t,e){var r,i=0,n=null,s=0;for(r=0;r<e.length;r++)s+=e[r].length;switch(t){case"string":return e.join("");case"array":return Array.prototype.concat.apply([],e);case"uint8array":for(n=new Uint8Array(s),r=0;r<e.length;r++)n.set(e[r],i),i+=e[r].length;return n;case"nodebuffer":return Buffer.concat(e);default:throw new Error("concat : unsupported type '"+t+"'")}}(n,i),a);e(t)}catch(t){r(t)}i=[]}).resume()})}function f(t,e,r){var i=e;switch(e){case"blob":case"arraybuffer":i="uint8array";break;case"base64":i="string"}try{this._internalType=i,this._outputType=e,this._mimeType=r,h.checkSupport(i),this._worker=t.pipe(new n(i)),t.lock()}catch(t){this._worker=new s("error"),this._worker.error(t)}}f.prototype={accumulate:function(t){return l(this,t)},on:function(t,e){var r=this;return"data"===t?this._worker.on(t,function(t){e.call(r,t.data,t.meta)}):this._worker.on(t,function(){h.delay(e,arguments,r)}),this},resume:function(){return h.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(t){if(h.checkSupport("nodestream"),"nodebuffer"!==this._outputType)throw new Error(this._outputType+" is not supported by this method");return new o(this,{objectMode:"nodebuffer"!==this._outputType},t)}},e.exports=f},{"../base64":1,"../external":6,"../nodejs/NodejsStreamOutputAdapter":13,"../support":30,"../utils":32,"./ConvertWorker":24,"./GenericWorker":28}],30:[function(t,e,r){"use strict";if(r.base64=!0,r.array=!0,r.string=!0,r.arraybuffer="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof Uint8Array,r.nodebuffer="undefined"!=typeof Buffer,r.uint8array="undefined"!=typeof Uint8Array,"undefined"==typeof ArrayBuffer)r.blob=!1;else{var i=new ArrayBuffer(0);try{r.blob=0===new Blob([i],{type:"application/zip"}).size}catch(t){try{var n=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);n.append(i),r.blob=0===n.getBlob("application/zip").size}catch(t){r.blob=!1}}}try{r.nodestream=!!t("readable-stream").Readable}catch(t){r.nodestream=!1}},{"readable-stream":16}],31:[function(t,e,s){"use strict";for(var o=t("./utils"),h=t("./support"),r=t("./nodejsUtils"),i=t("./stream/GenericWorker"),u=new Array(256),n=0;n<256;n++)u[n]=252<=n?6:248<=n?5:240<=n?4:224<=n?3:192<=n?2:1;u[254]=u[254]=1;function a(){i.call(this,"utf-8 decode"),this.leftOver=null}function l(){i.call(this,"utf-8 encode")}s.utf8encode=function(t){return h.nodebuffer?r.newBufferFrom(t,"utf-8"):function(t){var e,r,i,n,s,a=t.length,o=0;for(n=0;n<a;n++)55296==(64512&(r=t.charCodeAt(n)))&&n+1<a&&56320==(64512&(i=t.charCodeAt(n+1)))&&(r=65536+(r-55296<<10)+(i-56320),n++),o+=r<128?1:r<2048?2:r<65536?3:4;for(e=h.uint8array?new Uint8Array(o):new Array(o),n=s=0;s<o;n++)55296==(64512&(r=t.charCodeAt(n)))&&n+1<a&&56320==(64512&(i=t.charCodeAt(n+1)))&&(r=65536+(r-55296<<10)+(i-56320),n++),r<128?e[s++]=r:(r<2048?e[s++]=192|r>>>6:(r<65536?e[s++]=224|r>>>12:(e[s++]=240|r>>>18,e[s++]=128|r>>>12&63),e[s++]=128|r>>>6&63),e[s++]=128|63&r);return e}(t)},s.utf8decode=function(t){return h.nodebuffer?o.transformTo("nodebuffer",t).toString("utf-8"):function(t){var e,r,i,n,s=t.length,a=new Array(2*s);for(e=r=0;e<s;)if((i=t[e++])<128)a[r++]=i;else if(4<(n=u[i]))a[r++]=65533,e+=n-1;else{for(i&=2===n?31:3===n?15:7;1<n&&e<s;)i=i<<6|63&t[e++],n--;1<n?a[r++]=65533:i<65536?a[r++]=i:(i-=65536,a[r++]=55296|i>>10&1023,a[r++]=56320|1023&i)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(t=o.transformTo(h.uint8array?"uint8array":"array",t))},o.inherits(a,i),a.prototype.processChunk=function(t){var e=o.transformTo(h.uint8array?"uint8array":"array",t.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=e;(e=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),e.set(r,this.leftOver.length)}else e=this.leftOver.concat(e);this.leftOver=null}var i=function(t,e){var r;for((e=e||t.length)>t.length&&(e=t.length),r=e-1;0<=r&&128==(192&t[r]);)r--;return r<0?e:0===r?e:r+u[t[r]]>e?r:e}(e),n=e;i!==e.length&&(h.uint8array?(n=e.subarray(0,i),this.leftOver=e.subarray(i,e.length)):(n=e.slice(0,i),this.leftOver=e.slice(i,e.length))),this.push({data:s.utf8decode(n),meta:t.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,i),l.prototype.processChunk=function(t){this.push({data:s.utf8encode(t.data),meta:t.meta})},s.Utf8EncodeWorker=l},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(t,e,a){"use strict";var o=t("./support"),h=t("./base64"),r=t("./nodejsUtils"),i=t("set-immediate-shim"),u=t("./external");function n(t){return t}function l(t,e){for(var r=0;r<t.length;++r)e[r]=255&t.charCodeAt(r);return e}a.newBlob=function(e,r){a.checkSupport("blob");try{return new Blob([e],{type:r})}catch(t){try{var i=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return i.append(e),i.getBlob(r)}catch(t){throw new Error("Bug : can't construct the Blob.")}}};var s={stringifyByChunk:function(t,e,r){var i=[],n=0,s=t.length;if(s<=r)return String.fromCharCode.apply(null,t);for(;n<s;)"array"===e||"nodebuffer"===e?i.push(String.fromCharCode.apply(null,t.slice(n,Math.min(n+r,s)))):i.push(String.fromCharCode.apply(null,t.subarray(n,Math.min(n+r,s)))),n+=r;return i.join("")},stringifyByChar:function(t){for(var e="",r=0;r<t.length;r++)e+=String.fromCharCode(t[r]);return e},applyCanBeUsed:{uint8array:function(){try{return o.uint8array&&1===String.fromCharCode.apply(null,new Uint8Array(1)).length}catch(t){return!1}}(),nodebuffer:function(){try{return o.nodebuffer&&1===String.fromCharCode.apply(null,r.allocBuffer(1)).length}catch(t){return!1}}()}};function f(t){var e=65536,r=a.getTypeOf(t),i=!0;if("uint8array"===r?i=s.applyCanBeUsed.uint8array:"nodebuffer"===r&&(i=s.applyCanBeUsed.nodebuffer),i)for(;1<e;)try{return s.stringifyByChunk(t,r,e)}catch(t){e=Math.floor(e/2)}return s.stringifyByChar(t)}function d(t,e){for(var r=0;r<t.length;r++)e[r]=t[r];return e}a.applyFromCharCode=f;var c={};c.string={string:n,array:function(t){return l(t,new Array(t.length))},arraybuffer:function(t){return c.string.uint8array(t).buffer},uint8array:function(t){return l(t,new Uint8Array(t.length))},nodebuffer:function(t){return l(t,r.allocBuffer(t.length))}},c.array={string:f,array:n,arraybuffer:function(t){return new Uint8Array(t).buffer},uint8array:function(t){return new Uint8Array(t)},nodebuffer:function(t){return r.newBufferFrom(t)}},c.arraybuffer={string:function(t){return f(new Uint8Array(t))},array:function(t){return d(new Uint8Array(t),new Array(t.byteLength))},arraybuffer:n,uint8array:function(t){return new Uint8Array(t)},nodebuffer:function(t){return r.newBufferFrom(new Uint8Array(t))}},c.uint8array={string:f,array:function(t){return d(t,new Array(t.length))},arraybuffer:function(t){return t.buffer},uint8array:n,nodebuffer:function(t){return r.newBufferFrom(t)}},c.nodebuffer={string:f,array:function(t){return d(t,new Array(t.length))},arraybuffer:function(t){return c.nodebuffer.uint8array(t).buffer},uint8array:function(t){return d(t,new Uint8Array(t.length))},nodebuffer:n},a.transformTo=function(t,e){if(e=e||"",!t)return e;a.checkSupport(t);var r=a.getTypeOf(e);return c[r][t](e)},a.resolve=function(t){for(var e=t.split("/"),r=[],i=0;i<e.length;i++){var n=e[i];"."===n||""===n&&0!==i&&i!==e.length-1||(".."===n?r.pop():r.push(n))}return r.join("/")},a.getTypeOf=function(t){return"string"==typeof t?"string":"[object Array]"===Object.prototype.toString.call(t)?"array":o.nodebuffer&&r.isBuffer(t)?"nodebuffer":o.uint8array&&t instanceof Uint8Array?"uint8array":o.arraybuffer&&t instanceof ArrayBuffer?"arraybuffer":void 0},a.checkSupport=function(t){if(!o[t.toLowerCase()])throw new Error(t+" is not supported by this platform")},a.MAX_VALUE_16BITS=65535,a.MAX_VALUE_32BITS=-1,a.pretty=function(t){var e,r,i="";for(r=0;r<(t||"").length;r++)i+="\\x"+((e=t.charCodeAt(r))<16?"0":"")+e.toString(16).toUpperCase();return i},a.delay=function(t,e,r){i(function(){t.apply(r||null,e||[])})},a.inherits=function(t,e){function r(){}r.prototype=e.prototype,t.prototype=new r},a.extend=function(){var t,e,r={};for(t=0;t<arguments.length;t++)for(e in arguments[t])arguments[t].hasOwnProperty(e)&&void 0===r[e]&&(r[e]=arguments[t][e]);return r},a.prepareContent=function(r,t,i,n,s){return u.Promise.resolve(t).then(function(i){return o.blob&&(i instanceof Blob||-1!==["[object File]","[object Blob]"].indexOf(Object.prototype.toString.call(i)))&&"undefined"!=typeof FileReader?new u.Promise(function(e,r){var t=new FileReader;t.onload=function(t){e(t.target.result)},t.onerror=function(t){r(t.target.error)},t.readAsArrayBuffer(i)}):i}).then(function(t){var e=a.getTypeOf(t);return e?("arraybuffer"===e?t=a.transformTo("uint8array",t):"string"===e&&(s?t=h.decode(t):i&&!0!==n&&(t=function(t){return l(t,o.uint8array?new Uint8Array(t.length):new Array(t.length))}(t))),t):u.Promise.reject(new Error("Can't read the data of '"+r+"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?"))})}},{"./base64":1,"./external":6,"./nodejsUtils":14,"./support":30,"set-immediate-shim":54}],33:[function(t,e,r){"use strict";var i=t("./reader/readerFor"),n=t("./utils"),s=t("./signature"),a=t("./zipEntry"),o=(t("./utf8"),t("./support"));function h(t){this.files=[],this.loadOptions=t}h.prototype={checkSignature:function(t){if(!this.reader.readAndCheckSignature(t)){this.reader.index-=4;var e=this.reader.readString(4);throw new Error("Corrupted zip or bug: unexpected signature ("+n.pretty(e)+", expected "+n.pretty(t)+")")}},isSignature:function(t,e){var r=this.reader.index;this.reader.setIndex(t);var i=this.reader.readString(4)===e;return this.reader.setIndex(r),i},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var t=this.reader.readData(this.zipCommentLength),e=o.uint8array?"uint8array":"array",r=n.transformTo(e,t);this.zipComment=this.loadOptions.decodeFileName(r)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var t,e,r,i=this.zip64EndOfCentralSize-44;0<i;)t=this.reader.readInt(2),e=this.reader.readInt(4),r=this.reader.readData(e),this.zip64ExtensibleData[t]={id:t,length:e,value:r}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),1<this.disksCount)throw new Error("Multi-volumes zip are not supported")},readLocalFiles:function(){var t,e;for(t=0;t<this.files.length;t++)e=this.files[t],this.reader.setIndex(e.localHeaderOffset),this.checkSignature(s.LOCAL_FILE_HEADER),e.readLocalPart(this.reader),e.handleUTF8(),e.processAttributes()},readCentralDir:function(){var t;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(s.CENTRAL_FILE_HEADER);)(t=new a({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(t);if(this.centralDirRecords!==this.files.length&&0!==this.centralDirRecords&&0===this.files.length)throw new Error("Corrupted zip or bug: expected "+this.centralDirRecords+" records in central dir, got "+this.files.length)},readEndOfCentral:function(){var t=this.reader.lastIndexOfSignature(s.CENTRAL_DIRECTORY_END);if(t<0)throw!this.isSignature(0,s.LOCAL_FILE_HEADER)?new Error("Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html"):new Error("Corrupted zip: can't find end of central directory");this.reader.setIndex(t);var e=t;if(this.checkSignature(s.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===n.MAX_VALUE_16BITS||this.diskWithCentralDirStart===n.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===n.MAX_VALUE_16BITS||this.centralDirRecords===n.MAX_VALUE_16BITS||this.centralDirSize===n.MAX_VALUE_32BITS||this.centralDirOffset===n.MAX_VALUE_32BITS){if(this.zip64=!0,(t=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR))<0)throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator");if(this.reader.setIndex(t),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,s.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error("Corrupted zip: can't find the ZIP64 end of central directory");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var r=this.centralDirOffset+this.centralDirSize;this.zip64&&(r+=20,r+=12+this.zip64EndOfCentralSize);var i=e-r;if(0<i)this.isSignature(e,s.CENTRAL_FILE_HEADER)||(this.reader.zero=i);else if(i<0)throw new Error("Corrupted zip: missing "+Math.abs(i)+" bytes.")},prepareReader:function(t){this.reader=i(t)},load:function(t){this.prepareReader(t),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},e.exports=h},{"./reader/readerFor":22,"./signature":23,"./support":30,"./utf8":31,"./utils":32,"./zipEntry":34}],34:[function(t,e,r){"use strict";var i=t("./reader/readerFor"),s=t("./utils"),n=t("./compressedObject"),a=t("./crc32"),o=t("./utf8"),h=t("./compressions"),u=t("./support");function l(t,e){this.options=t,this.loadOptions=e}l.prototype={isEncrypted:function(){return 1==(1&this.bitFlag)},useUTF8:function(){return 2048==(2048&this.bitFlag)},readLocalPart:function(t){var e,r;if(t.skip(22),this.fileNameLength=t.readInt(2),r=t.readInt(2),this.fileName=t.readData(this.fileNameLength),t.skip(r),-1===this.compressedSize||-1===this.uncompressedSize)throw new Error("Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)");if(null===(e=function(t){for(var e in h)if(h.hasOwnProperty(e)&&h[e].magic===t)return h[e];return null}(this.compressionMethod)))throw new Error("Corrupted zip : compression "+s.pretty(this.compressionMethod)+" unknown (inner file : "+s.transformTo("string",this.fileName)+")");this.decompressed=new n(this.compressedSize,this.uncompressedSize,this.crc32,e,t.readData(this.compressedSize))},readCentralPart:function(t){this.versionMadeBy=t.readInt(2),t.skip(2),this.bitFlag=t.readInt(2),this.compressionMethod=t.readString(2),this.date=t.readDate(),this.crc32=t.readInt(4),this.compressedSize=t.readInt(4),this.uncompressedSize=t.readInt(4);var e=t.readInt(2);if(this.extraFieldsLength=t.readInt(2),this.fileCommentLength=t.readInt(2),this.diskNumberStart=t.readInt(2),this.internalFileAttributes=t.readInt(2),this.externalFileAttributes=t.readInt(4),this.localHeaderOffset=t.readInt(4),this.isEncrypted())throw new Error("Encrypted zip are not supported");t.skip(e),this.readExtraFields(t),this.parseZIP64ExtraField(t),this.fileComment=t.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var t=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),0==t&&(this.dosPermissions=63&this.externalFileAttributes),3==t&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(t){if(this.extraFields[1]){var e=i(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(t){var e,r,i,n=t.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});t.index+4<n;)e=t.readInt(2),r=t.readInt(2),i=t.readData(r),this.extraFields[e]={id:e,length:r,value:i};t.setIndex(n)},handleUTF8:function(){var t=u.uint8array?"uint8array":"array";if(this.useUTF8())this.fileNameStr=o.utf8decode(this.fileName),this.fileCommentStr=o.utf8decode(this.fileComment);else{var e=this.findExtraFieldUnicodePath();if(null!==e)this.fileNameStr=e;else{var r=s.transformTo(t,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(r)}var i=this.findExtraFieldUnicodeComment();if(null!==i)this.fileCommentStr=i;else{var n=s.transformTo(t,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(n)}}},findExtraFieldUnicodePath:function(){var t=this.extraFields[28789];if(t){var e=i(t.value);return 1!==e.readInt(1)?null:a(this.fileName)!==e.readInt(4)?null:o.utf8decode(e.readData(t.length-5))}return null},findExtraFieldUnicodeComment:function(){var t=this.extraFields[25461];if(t){var e=i(t.value);return 1!==e.readInt(1)?null:a(this.fileComment)!==e.readInt(4)?null:o.utf8decode(e.readData(t.length-5))}return null}},e.exports=l},{"./compressedObject":2,"./compressions":3,"./crc32":4,"./reader/readerFor":22,"./support":30,"./utf8":31,"./utils":32}],35:[function(t,e,r){"use strict";function i(t,e,r){this.name=t,this.dir=r.dir,this.date=r.date,this.comment=r.comment,this.unixPermissions=r.unixPermissions,this.dosPermissions=r.dosPermissions,this._data=e,this._dataBinary=r.binary,this.options={compression:r.compression,compressionOptions:r.compressionOptions}}var s=t("./stream/StreamHelper"),n=t("./stream/DataWorker"),a=t("./utf8"),o=t("./compressedObject"),h=t("./stream/GenericWorker");i.prototype={internalStream:function(t){var e=null,r="string";try{if(!t)throw new Error("No output type specified.");var i="string"===(r=t.toLowerCase())||"text"===r;"binarystring"!==r&&"text"!==r||(r="string"),e=this._decompressWorker();var n=!this._dataBinary;n&&!i&&(e=e.pipe(new a.Utf8EncodeWorker)),!n&&i&&(e=e.pipe(new a.Utf8DecodeWorker))}catch(t){(e=new h("error")).error(t)}return new s(e,r,"")},async:function(t,e){return this.internalStream(t).accumulate(e)},nodeStream:function(t,e){return this.internalStream(t||"nodebuffer").toNodejsStream(e)},_compressWorker:function(t,e){if(this._data instanceof o&&this._data.compression.magic===t.magic)return this._data.getCompressedWorker();var r=this._decompressWorker();return this._dataBinary||(r=r.pipe(new a.Utf8EncodeWorker)),o.createWorkerFrom(r,t,e)},_decompressWorker:function(){return this._data instanceof o?this._data.getContentWorker():this._data instanceof h?this._data:new n(this._data)}};for(var u=["asText","asBinary","asNodeBuffer","asUint8Array","asArrayBuffer"],l=function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},f=0;f<u.length;f++)i.prototype[u[f]]=l;e.exports=i},{"./compressedObject":2,"./stream/DataWorker":27,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31}],36:[function(t,l,e){(function(e){"use strict";var r,i,t=e.MutationObserver||e.WebKitMutationObserver;if(t){var n=0,s=new t(u),a=e.document.createTextNode("");s.observe(a,{characterData:!0}),r=function(){a.data=n=++n%2}}else if(e.setImmediate||void 0===e.MessageChannel)r="document"in e&&"onreadystatechange"in e.document.createElement("script")?function(){var t=e.document.createElement("script");t.onreadystatechange=function(){u(),t.onreadystatechange=null,t.parentNode.removeChild(t),t=null},e.document.documentElement.appendChild(t)}:function(){setTimeout(u,0)};else{var o=new e.MessageChannel;o.port1.onmessage=u,r=function(){o.port2.postMessage(0)}}var h=[];function u(){var t,e;i=!0;for(var r=h.length;r;){for(e=h,h=[],t=-1;++t<r;)e[t]();r=h.length}i=!1}l.exports=function(t){1!==h.push(t)||i||r()}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],37:[function(t,e,r){"use strict";var n=t("immediate");function u(){}var l={},s=["REJECTED"],a=["FULFILLED"],i=["PENDING"];function o(t){if("function"!=typeof t)throw new TypeError("resolver must be a function");this.state=i,this.queue=[],this.outcome=void 0,t!==u&&c(this,t)}function h(t,e,r){this.promise=t,"function"==typeof e&&(this.onFulfilled=e,this.callFulfilled=this.otherCallFulfilled),"function"==typeof r&&(this.onRejected=r,this.callRejected=this.otherCallRejected)}function f(e,r,i){n(function(){var t;try{t=r(i)}catch(t){return l.reject(e,t)}t===e?l.reject(e,new TypeError("Cannot resolve promise with itself")):l.resolve(e,t)})}function d(t){var e=t&&t.then;if(t&&("object"==typeof t||"function"==typeof t)&&"function"==typeof e)return function(){e.apply(t,arguments)}}function c(e,t){var r=!1;function i(t){r||(r=!0,l.reject(e,t))}function n(t){r||(r=!0,l.resolve(e,t))}var s=p(function(){t(n,i)});"error"===s.status&&i(s.value)}function p(t,e){var r={};try{r.value=t(e),r.status="success"}catch(t){r.status="error",r.value=t}return r}(e.exports=o).prototype.finally=function(e){if("function"!=typeof e)return this;var r=this.constructor;return this.then(function(t){return r.resolve(e()).then(function(){return t})},function(t){return r.resolve(e()).then(function(){throw t})})},o.prototype.catch=function(t){return this.then(null,t)},o.prototype.then=function(t,e){if("function"!=typeof t&&this.state===a||"function"!=typeof e&&this.state===s)return this;var r=new this.constructor(u);this.state!==i?f(r,this.state===a?t:e,this.outcome):this.queue.push(new h(r,t,e));return r},h.prototype.callFulfilled=function(t){l.resolve(this.promise,t)},h.prototype.otherCallFulfilled=function(t){f(this.promise,this.onFulfilled,t)},h.prototype.callRejected=function(t){l.reject(this.promise,t)},h.prototype.otherCallRejected=function(t){f(this.promise,this.onRejected,t)},l.resolve=function(t,e){var r=p(d,e);if("error"===r.status)return l.reject(t,r.value);var i=r.value;if(i)c(t,i);else{t.state=a,t.outcome=e;for(var n=-1,s=t.queue.length;++n<s;)t.queue[n].callFulfilled(e)}return t},l.reject=function(t,e){t.state=s,t.outcome=e;for(var r=-1,i=t.queue.length;++r<i;)t.queue[r].callRejected(e);return t},o.resolve=function(t){if(t instanceof this)return t;return l.resolve(new this(u),t)},o.reject=function(t){var e=new this(u);return l.reject(e,t)},o.all=function(t){var r=this;if("[object Array]"!==Object.prototype.toString.call(t))return this.reject(new TypeError("must be an array"));var i=t.length,n=!1;if(!i)return this.resolve([]);var s=new Array(i),a=0,e=-1,o=new this(u);for(;++e<i;)h(t[e],e);return o;function h(t,e){r.resolve(t).then(function(t){s[e]=t,++a!==i||n||(n=!0,l.resolve(o,s))},function(t){n||(n=!0,l.reject(o,t))})}},o.race=function(t){var e=this;if("[object Array]"!==Object.prototype.toString.call(t))return this.reject(new TypeError("must be an array"));var r=t.length,i=!1;if(!r)return this.resolve([]);var n=-1,s=new this(u);for(;++n<r;)a=t[n],e.resolve(a).then(function(t){i||(i=!0,l.resolve(s,t))},function(t){i||(i=!0,l.reject(s,t))});var a;return s}},{immediate:36}],38:[function(t,e,r){"use strict";var i={};(0,t("./lib/utils/common").assign)(i,t("./lib/deflate"),t("./lib/inflate"),t("./lib/zlib/constants")),e.exports=i},{"./lib/deflate":39,"./lib/inflate":40,"./lib/utils/common":41,"./lib/zlib/constants":44}],39:[function(t,e,r){"use strict";var a=t("./zlib/deflate"),o=t("./utils/common"),h=t("./utils/strings"),n=t("./zlib/messages"),s=t("./zlib/zstream"),u=Object.prototype.toString,l=0,f=-1,d=0,c=8;function p(t){if(!(this instanceof p))return new p(t);this.options=o.assign({level:f,method:c,chunkSize:16384,windowBits:15,memLevel:8,strategy:d,to:""},t||{});var e=this.options;e.raw&&0<e.windowBits?e.windowBits=-e.windowBits:e.gzip&&0<e.windowBits&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new s,this.strm.avail_out=0;var r=a.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(r!==l)throw new Error(n[r]);if(e.header&&a.deflateSetHeader(this.strm,e.header),e.dictionary){var i;if(i="string"==typeof e.dictionary?h.string2buf(e.dictionary):"[object ArrayBuffer]"===u.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,(r=a.deflateSetDictionary(this.strm,i))!==l)throw new Error(n[r]);this._dict_set=!0}}function i(t,e){var r=new p(e);if(r.push(t,!0),r.err)throw r.msg||n[r.err];return r.result}p.prototype.push=function(t,e){var r,i,n=this.strm,s=this.options.chunkSize;if(this.ended)return!1;i=e===~~e?e:!0===e?4:0,"string"==typeof t?n.input=h.string2buf(t):"[object ArrayBuffer]"===u.call(t)?n.input=new Uint8Array(t):n.input=t,n.next_in=0,n.avail_in=n.input.length;do{if(0===n.avail_out&&(n.output=new o.Buf8(s),n.next_out=0,n.avail_out=s),1!==(r=a.deflate(n,i))&&r!==l)return this.onEnd(r),!(this.ended=!0);0!==n.avail_out&&(0!==n.avail_in||4!==i&&2!==i)||("string"===this.options.to?this.onData(h.buf2binstring(o.shrinkBuf(n.output,n.next_out))):this.onData(o.shrinkBuf(n.output,n.next_out)))}while((0<n.avail_in||0===n.avail_out)&&1!==r);return 4===i?(r=a.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===l):2!==i||(this.onEnd(l),!(n.avail_out=0))},p.prototype.onData=function(t){this.chunks.push(t)},p.prototype.onEnd=function(t){t===l&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=o.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},r.Deflate=p,r.deflate=i,r.deflateRaw=function(t,e){return(e=e||{}).raw=!0,i(t,e)},r.gzip=function(t,e){return(e=e||{}).gzip=!0,i(t,e)}},{"./utils/common":41,"./utils/strings":42,"./zlib/deflate":46,"./zlib/messages":51,"./zlib/zstream":53}],40:[function(t,e,r){"use strict";var d=t("./zlib/inflate"),c=t("./utils/common"),p=t("./utils/strings"),m=t("./zlib/constants"),i=t("./zlib/messages"),n=t("./zlib/zstream"),s=t("./zlib/gzheader"),_=Object.prototype.toString;function a(t){if(!(this instanceof a))return new a(t);this.options=c.assign({chunkSize:16384,windowBits:0,to:""},t||{});var e=this.options;e.raw&&0<=e.windowBits&&e.windowBits<16&&(e.windowBits=-e.windowBits,0===e.windowBits&&(e.windowBits=-15)),!(0<=e.windowBits&&e.windowBits<16)||t&&t.windowBits||(e.windowBits+=32),15<e.windowBits&&e.windowBits<48&&0==(15&e.windowBits)&&(e.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new n,this.strm.avail_out=0;var r=d.inflateInit2(this.strm,e.windowBits);if(r!==m.Z_OK)throw new Error(i[r]);this.header=new s,d.inflateGetHeader(this.strm,this.header)}function o(t,e){var r=new a(e);if(r.push(t,!0),r.err)throw r.msg||i[r.err];return r.result}a.prototype.push=function(t,e){var r,i,n,s,a,o,h=this.strm,u=this.options.chunkSize,l=this.options.dictionary,f=!1;if(this.ended)return!1;i=e===~~e?e:!0===e?m.Z_FINISH:m.Z_NO_FLUSH,"string"==typeof t?h.input=p.binstring2buf(t):"[object ArrayBuffer]"===_.call(t)?h.input=new Uint8Array(t):h.input=t,h.next_in=0,h.avail_in=h.input.length;do{if(0===h.avail_out&&(h.output=new c.Buf8(u),h.next_out=0,h.avail_out=u),(r=d.inflate(h,m.Z_NO_FLUSH))===m.Z_NEED_DICT&&l&&(o="string"==typeof l?p.string2buf(l):"[object ArrayBuffer]"===_.call(l)?new Uint8Array(l):l,r=d.inflateSetDictionary(this.strm,o)),r===m.Z_BUF_ERROR&&!0===f&&(r=m.Z_OK,f=!1),r!==m.Z_STREAM_END&&r!==m.Z_OK)return this.onEnd(r),!(this.ended=!0);h.next_out&&(0!==h.avail_out&&r!==m.Z_STREAM_END&&(0!==h.avail_in||i!==m.Z_FINISH&&i!==m.Z_SYNC_FLUSH)||("string"===this.options.to?(n=p.utf8border(h.output,h.next_out),s=h.next_out-n,a=p.buf2string(h.output,n),h.next_out=s,h.avail_out=u-s,s&&c.arraySet(h.output,h.output,n,s,0),this.onData(a)):this.onData(c.shrinkBuf(h.output,h.next_out)))),0===h.avail_in&&0===h.avail_out&&(f=!0)}while((0<h.avail_in||0===h.avail_out)&&r!==m.Z_STREAM_END);return r===m.Z_STREAM_END&&(i=m.Z_FINISH),i===m.Z_FINISH?(r=d.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===m.Z_OK):i!==m.Z_SYNC_FLUSH||(this.onEnd(m.Z_OK),!(h.avail_out=0))},a.prototype.onData=function(t){this.chunks.push(t)},a.prototype.onEnd=function(t){t===m.Z_OK&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=c.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},r.Inflate=a,r.inflate=o,r.inflateRaw=function(t,e){return(e=e||{}).raw=!0,o(t,e)},r.ungzip=o},{"./utils/common":41,"./utils/strings":42,"./zlib/constants":44,"./zlib/gzheader":47,"./zlib/inflate":49,"./zlib/messages":51,"./zlib/zstream":53}],41:[function(t,e,r){"use strict";var i="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;r.assign=function(t){for(var e=Array.prototype.slice.call(arguments,1);e.length;){var r=e.shift();if(r){if("object"!=typeof r)throw new TypeError(r+"must be non-object");for(var i in r)r.hasOwnProperty(i)&&(t[i]=r[i])}}return t},r.shrinkBuf=function(t,e){return t.length===e?t:t.subarray?t.subarray(0,e):(t.length=e,t)};var n={arraySet:function(t,e,r,i,n){if(e.subarray&&t.subarray)t.set(e.subarray(r,r+i),n);else for(var s=0;s<i;s++)t[n+s]=e[r+s]},flattenChunks:function(t){var e,r,i,n,s,a;for(e=i=0,r=t.length;e<r;e++)i+=t[e].length;for(a=new Uint8Array(i),e=n=0,r=t.length;e<r;e++)s=t[e],a.set(s,n),n+=s.length;return a}},s={arraySet:function(t,e,r,i,n){for(var s=0;s<i;s++)t[n+s]=e[r+s]},flattenChunks:function(t){return[].concat.apply([],t)}};r.setTyped=function(t){t?(r.Buf8=Uint8Array,r.Buf16=Uint16Array,r.Buf32=Int32Array,r.assign(r,n)):(r.Buf8=Array,r.Buf16=Array,r.Buf32=Array,r.assign(r,s))},r.setTyped(i)},{}],42:[function(t,e,r){"use strict";var h=t("./common"),n=!0,s=!0;try{String.fromCharCode.apply(null,[0])}catch(t){n=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){s=!1}for(var u=new h.Buf8(256),i=0;i<256;i++)u[i]=252<=i?6:248<=i?5:240<=i?4:224<=i?3:192<=i?2:1;function l(t,e){if(e<65537&&(t.subarray&&s||!t.subarray&&n))return String.fromCharCode.apply(null,h.shrinkBuf(t,e));for(var r="",i=0;i<e;i++)r+=String.fromCharCode(t[i]);return r}u[254]=u[254]=1,r.string2buf=function(t){var e,r,i,n,s,a=t.length,o=0;for(n=0;n<a;n++)55296==(64512&(r=t.charCodeAt(n)))&&n+1<a&&56320==(64512&(i=t.charCodeAt(n+1)))&&(r=65536+(r-55296<<10)+(i-56320),n++),o+=r<128?1:r<2048?2:r<65536?3:4;for(e=new h.Buf8(o),n=s=0;s<o;n++)55296==(64512&(r=t.charCodeAt(n)))&&n+1<a&&56320==(64512&(i=t.charCodeAt(n+1)))&&(r=65536+(r-55296<<10)+(i-56320),n++),r<128?e[s++]=r:(r<2048?e[s++]=192|r>>>6:(r<65536?e[s++]=224|r>>>12:(e[s++]=240|r>>>18,e[s++]=128|r>>>12&63),e[s++]=128|r>>>6&63),e[s++]=128|63&r);return e},r.buf2binstring=function(t){return l(t,t.length)},r.binstring2buf=function(t){for(var e=new h.Buf8(t.length),r=0,i=e.length;r<i;r++)e[r]=t.charCodeAt(r);return e},r.buf2string=function(t,e){var r,i,n,s,a=e||t.length,o=new Array(2*a);for(r=i=0;r<a;)if((n=t[r++])<128)o[i++]=n;else if(4<(s=u[n]))o[i++]=65533,r+=s-1;else{for(n&=2===s?31:3===s?15:7;1<s&&r<a;)n=n<<6|63&t[r++],s--;1<s?o[i++]=65533:n<65536?o[i++]=n:(n-=65536,o[i++]=55296|n>>10&1023,o[i++]=56320|1023&n)}return l(o,i)},r.utf8border=function(t,e){var r;for((e=e||t.length)>t.length&&(e=t.length),r=e-1;0<=r&&128==(192&t[r]);)r--;return r<0?e:0===r?e:r+u[t[r]]>e?r:e}},{"./common":41}],43:[function(t,e,r){"use strict";e.exports=function(t,e,r,i){for(var n=65535&t|0,s=t>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3<r?2e3:r;s=s+(n=n+e[i++]|0)|0,--a;);n%=65521,s%=65521}return n|s<<16|0}},{}],44:[function(t,e,r){"use strict";e.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],45:[function(t,e,r){"use strict";var o=function(){for(var t,e=[],r=0;r<256;r++){t=r;for(var i=0;i<8;i++)t=1&t?3988292384^t>>>1:t>>>1;e[r]=t}return e}();e.exports=function(t,e,r,i){var n=o,s=i+r;t^=-1;for(var a=i;a<s;a++)t=t>>>8^n[255&(t^e[a])];return-1^t}},{}],46:[function(t,e,r){"use strict";var h,d=t("../utils/common"),u=t("./trees"),c=t("./adler32"),p=t("./crc32"),i=t("./messages"),l=0,f=4,m=0,_=-2,g=-1,b=4,n=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(t,e){return t.msg=i[e],e}function T(t){return(t<<1)-(4<t?9:0)}function D(t){for(var e=t.length;0<=--e;)t[e]=0}function F(t){var e=t.state,r=e.pending;r>t.avail_out&&(r=t.avail_out),0!==r&&(d.arraySet(t.output,e.pending_buf,e.pending_out,r,t.next_out),t.next_out+=r,e.pending_out+=r,t.total_out+=r,t.avail_out-=r,e.pending-=r,0===e.pending&&(e.pending_out=0))}function N(t,e){u._tr_flush_block(t,0<=t.block_start?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,F(t.strm)}function U(t,e){t.pending_buf[t.pending++]=e}function P(t,e){t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e}function L(t,e){var r,i,n=t.max_chain_length,s=t.strstart,a=t.prev_length,o=t.nice_match,h=t.strstart>t.w_size-z?t.strstart-(t.w_size-z):0,u=t.window,l=t.w_mask,f=t.prev,d=t.strstart+S,c=u[s+a-1],p=u[s+a];t.prev_length>=t.good_match&&(n>>=2),o>t.lookahead&&(o=t.lookahead);do{if(u[(r=e)+a]===p&&u[r+a-1]===c&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&s<d);if(i=S-(d-s),s=d-S,a<i){if(t.match_start=e,o<=(a=i))break;c=u[s+a-1],p=u[s+a]}}}while((e=f[e&l])>h&&0!=--n);return a<=t.lookahead?a:t.lookahead}function j(t){var e,r,i,n,s,a,o,h,u,l,f=t.w_size;do{if(n=t.window_size-t.lookahead-t.strstart,t.strstart>=f+(f-z)){for(d.arraySet(t.window,t.window,f,f,0),t.match_start-=f,t.strstart-=f,t.block_start-=f,e=r=t.hash_size;i=t.head[--e],t.head[e]=f<=i?i-f:0,--r;);for(e=r=f;i=t.prev[--e],t.prev[e]=f<=i?i-f:0,--r;);n+=f}if(0===t.strm.avail_in)break;if(a=t.strm,o=t.window,h=t.strstart+t.lookahead,u=n,l=void 0,l=a.avail_in,u<l&&(l=u),r=0===l?0:(a.avail_in-=l,d.arraySet(o,a.input,a.next_in,l,h),1===a.state.wrap?a.adler=c(a.adler,o,l,h):2===a.state.wrap&&(a.adler=p(a.adler,o,l,h)),a.next_in+=l,a.total_in+=l,l),t.lookahead+=r,t.lookahead+t.insert>=x)for(s=t.strstart-t.insert,t.ins_h=t.window[s],t.ins_h=(t.ins_h<<t.hash_shift^t.window[s+1])&t.hash_mask;t.insert&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[s+x-1])&t.hash_mask,t.prev[s&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=s,s++,t.insert--,!(t.lookahead+t.insert<x)););}while(t.lookahead<z&&0!==t.strm.avail_in)}function Z(t,e){for(var r,i;;){if(t.lookahead<z){if(j(t),t.lookahead<z&&e===l)return A;if(0===t.lookahead)break}if(r=0,t.lookahead>=x&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+x-1])&t.hash_mask,r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==r&&t.strstart-r<=t.w_size-z&&(t.match_length=L(t,r)),t.match_length>=x)if(i=u._tr_tally(t,t.strstart-t.match_start,t.match_length-x),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=x){for(t.match_length--;t.strstart++,t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+x-1])&t.hash_mask,r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart,0!=--t.match_length;);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+1])&t.hash_mask;else i=u._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(i&&(N(t,!1),0===t.strm.avail_out))return A}return t.insert=t.strstart<x-1?t.strstart:x-1,e===f?(N(t,!0),0===t.strm.avail_out?O:B):t.last_lit&&(N(t,!1),0===t.strm.avail_out)?A:I}function W(t,e){for(var r,i,n;;){if(t.lookahead<z){if(j(t),t.lookahead<z&&e===l)return A;if(0===t.lookahead)break}if(r=0,t.lookahead>=x&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+x-1])&t.hash_mask,r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=x-1,0!==r&&t.prev_length<t.max_lazy_match&&t.strstart-r<=t.w_size-z&&(t.match_length=L(t,r),t.match_length<=5&&(1===t.strategy||t.match_length===x&&4096<t.strstart-t.match_start)&&(t.match_length=x-1)),t.prev_length>=x&&t.match_length<=t.prev_length){for(n=t.strstart+t.lookahead-x,i=u._tr_tally(t,t.strstart-1-t.prev_match,t.prev_length-x),t.lookahead-=t.prev_length-1,t.prev_length-=2;++t.strstart<=n&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+x-1])&t.hash_mask,r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!=--t.prev_length;);if(t.match_available=0,t.match_length=x-1,t.strstart++,i&&(N(t,!1),0===t.strm.avail_out))return A}else if(t.match_available){if((i=u._tr_tally(t,0,t.window[t.strstart-1]))&&N(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return A}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(i=u._tr_tally(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<x-1?t.strstart:x-1,e===f?(N(t,!0),0===t.strm.avail_out?O:B):t.last_lit&&(N(t,!1),0===t.strm.avail_out)?A:I}function M(t,e,r,i,n){this.good_length=t,this.max_lazy=e,this.nice_length=r,this.max_chain=i,this.func=n}function H(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=v,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new d.Buf16(2*w),this.dyn_dtree=new d.Buf16(2*(2*a+1)),this.bl_tree=new d.Buf16(2*(2*o+1)),D(this.dyn_ltree),D(this.dyn_dtree),D(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new d.Buf16(k+1),this.heap=new d.Buf16(2*s+1),D(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new d.Buf16(2*s+1),D(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function G(t){var e;return t&&t.state?(t.total_in=t.total_out=0,t.data_type=n,(e=t.state).pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=e.wrap?C:E,t.adler=2===e.wrap?0:1,e.last_flush=l,u._tr_init(e),m):R(t,_)}function K(t){var e=G(t);return e===m&&function(t){t.window_size=2*t.w_size,D(t.head),t.max_lazy_match=h[t.level].max_lazy,t.good_match=h[t.level].good_length,t.nice_match=h[t.level].nice_length,t.max_chain_length=h[t.level].max_chain,t.strstart=0,t.block_start=0,t.lookahead=0,t.insert=0,t.match_length=t.prev_length=x-1,t.match_available=0,t.ins_h=0}(t.state),e}function Y(t,e,r,i,n,s){if(!t)return _;var a=1;if(e===g&&(e=6),i<0?(a=0,i=-i):15<i&&(a=2,i-=16),n<1||y<n||r!==v||i<8||15<i||e<0||9<e||s<0||b<s)return R(t,_);8===i&&(i=9);var o=new H;return(t.state=o).strm=t,o.wrap=a,o.gzhead=null,o.w_bits=i,o.w_size=1<<o.w_bits,o.w_mask=o.w_size-1,o.hash_bits=n+7,o.hash_size=1<<o.hash_bits,o.hash_mask=o.hash_size-1,o.hash_shift=~~((o.hash_bits+x-1)/x),o.window=new d.Buf8(2*o.w_size),o.head=new d.Buf16(o.hash_size),o.prev=new d.Buf16(o.w_size),o.lit_bufsize=1<<n+6,o.pending_buf_size=4*o.lit_bufsize,o.pending_buf=new d.Buf8(o.pending_buf_size),o.d_buf=1*o.lit_bufsize,o.l_buf=3*o.lit_bufsize,o.level=e,o.strategy=s,o.method=r,K(t)}h=[new M(0,0,0,0,function(t,e){var r=65535;for(r>t.pending_buf_size-5&&(r=t.pending_buf_size-5);;){if(t.lookahead<=1){if(j(t),0===t.lookahead&&e===l)return A;if(0===t.lookahead)break}t.strstart+=t.lookahead,t.lookahead=0;var i=t.block_start+r;if((0===t.strstart||t.strstart>=i)&&(t.lookahead=t.strstart-i,t.strstart=i,N(t,!1),0===t.strm.avail_out))return A;if(t.strstart-t.block_start>=t.w_size-z&&(N(t,!1),0===t.strm.avail_out))return A}return t.insert=0,e===f?(N(t,!0),0===t.strm.avail_out?O:B):(t.strstart>t.block_start&&(N(t,!1),t.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(t,e){return Y(t,e,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(t,e){return t&&t.state?2!==t.state.wrap?_:(t.state.gzhead=e,m):_},r.deflate=function(t,e){var r,i,n,s;if(!t||!t.state||5<e||e<0)return t?R(t,_):_;if(i=t.state,!t.output||!t.input&&0!==t.avail_in||666===i.status&&e!==f)return R(t,0===t.avail_out?-5:_);if(i.strm=t,r=i.last_flush,i.last_flush=e,i.status===C)if(2===i.wrap)t.adler=0,U(i,31),U(i,139),U(i,8),i.gzhead?(U(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),U(i,255&i.gzhead.time),U(i,i.gzhead.time>>8&255),U(i,i.gzhead.time>>16&255),U(i,i.gzhead.time>>24&255),U(i,9===i.level?2:2<=i.strategy||i.level<2?4:0),U(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(U(i,255&i.gzhead.extra.length),U(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(t.adler=p(t.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=69):(U(i,0),U(i,0),U(i,0),U(i,0),U(i,0),U(i,9===i.level?2:2<=i.strategy||i.level<2?4:0),U(i,3),i.status=E);else{var a=v+(i.w_bits-8<<4)<<8;a|=(2<=i.strategy||i.level<2?0:i.level<6?1:6===i.level?2:3)<<6,0!==i.strstart&&(a|=32),a+=31-a%31,i.status=E,P(i,a),0!==i.strstart&&(P(i,t.adler>>>16),P(i,65535&t.adler)),t.adler=1}if(69===i.status)if(i.gzhead.extra){for(n=i.pending;i.gzindex<(65535&i.gzhead.extra.length)&&(i.pending!==i.pending_buf_size||(i.gzhead.hcrc&&i.pending>n&&(t.adler=p(t.adler,i.pending_buf,i.pending-n,n)),F(t),n=i.pending,i.pending!==i.pending_buf_size));)U(i,255&i.gzhead.extra[i.gzindex]),i.gzindex++;i.gzhead.hcrc&&i.pending>n&&(t.adler=p(t.adler,i.pending_buf,i.pending-n,n)),i.gzindex===i.gzhead.extra.length&&(i.gzindex=0,i.status=73)}else i.status=73;if(73===i.status)if(i.gzhead.name){n=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>n&&(t.adler=p(t.adler,i.pending_buf,i.pending-n,n)),F(t),n=i.pending,i.pending===i.pending_buf_size)){s=1;break}s=i.gzindex<i.gzhead.name.length?255&i.gzhead.name.charCodeAt(i.gzindex++):0,U(i,s)}while(0!==s);i.gzhead.hcrc&&i.pending>n&&(t.adler=p(t.adler,i.pending_buf,i.pending-n,n)),0===s&&(i.gzindex=0,i.status=91)}else i.status=91;if(91===i.status)if(i.gzhead.comment){n=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>n&&(t.adler=p(t.adler,i.pending_buf,i.pending-n,n)),F(t),n=i.pending,i.pending===i.pending_buf_size)){s=1;break}s=i.gzindex<i.gzhead.comment.length?255&i.gzhead.comment.charCodeAt(i.gzindex++):0,U(i,s)}while(0!==s);i.gzhead.hcrc&&i.pending>n&&(t.adler=p(t.adler,i.pending_buf,i.pending-n,n)),0===s&&(i.status=103)}else i.status=103;if(103===i.status&&(i.gzhead.hcrc?(i.pending+2>i.pending_buf_size&&F(t),i.pending+2<=i.pending_buf_size&&(U(i,255&t.adler),U(i,t.adler>>8&255),t.adler=0,i.status=E)):i.status=E),0!==i.pending){if(F(t),0===t.avail_out)return i.last_flush=-1,m}else if(0===t.avail_in&&T(e)<=T(r)&&e!==f)return R(t,-5);if(666===i.status&&0!==t.avail_in)return R(t,-5);if(0!==t.avail_in||0!==i.lookahead||e!==l&&666!==i.status){var o=2===i.strategy?function(t,e){for(var r;;){if(0===t.lookahead&&(j(t),0===t.lookahead)){if(e===l)return A;break}if(t.match_length=0,r=u._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,r&&(N(t,!1),0===t.strm.avail_out))return A}return t.insert=0,e===f?(N(t,!0),0===t.strm.avail_out?O:B):t.last_lit&&(N(t,!1),0===t.strm.avail_out)?A:I}(i,e):3===i.strategy?function(t,e){for(var r,i,n,s,a=t.window;;){if(t.lookahead<=S){if(j(t),t.lookahead<=S&&e===l)return A;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=x&&0<t.strstart&&(i=a[n=t.strstart-1])===a[++n]&&i===a[++n]&&i===a[++n]){s=t.strstart+S;do{}while(i===a[++n]&&i===a[++n]&&i===a[++n]&&i===a[++n]&&i===a[++n]&&i===a[++n]&&i===a[++n]&&i===a[++n]&&n<s);t.match_length=S-(s-n),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=x?(r=u._tr_tally(t,1,t.match_length-x),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(r=u._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),r&&(N(t,!1),0===t.strm.avail_out))return A}return t.insert=0,e===f?(N(t,!0),0===t.strm.avail_out?O:B):t.last_lit&&(N(t,!1),0===t.strm.avail_out)?A:I}(i,e):h[i.level].func(i,e);if(o!==O&&o!==B||(i.status=666),o===A||o===O)return 0===t.avail_out&&(i.last_flush=-1),m;if(o===I&&(1===e?u._tr_align(i):5!==e&&(u._tr_stored_block(i,0,0,!1),3===e&&(D(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),F(t),0===t.avail_out))return i.last_flush=-1,m}return e!==f?m:i.wrap<=0?1:(2===i.wrap?(U(i,255&t.adler),U(i,t.adler>>8&255),U(i,t.adler>>16&255),U(i,t.adler>>24&255),U(i,255&t.total_in),U(i,t.total_in>>8&255),U(i,t.total_in>>16&255),U(i,t.total_in>>24&255)):(P(i,t.adler>>>16),P(i,65535&t.adler)),F(t),0<i.wrap&&(i.wrap=-i.wrap),0!==i.pending?m:1)},r.deflateEnd=function(t){var e;return t&&t.state?(e=t.state.status)!==C&&69!==e&&73!==e&&91!==e&&103!==e&&e!==E&&666!==e?R(t,_):(t.state=null,e===E?R(t,-3):m):_},r.deflateSetDictionary=function(t,e){var r,i,n,s,a,o,h,u,l=e.length;if(!t||!t.state)return _;if(2===(s=(r=t.state).wrap)||1===s&&r.status!==C||r.lookahead)return _;for(1===s&&(t.adler=c(t.adler,e,l,0)),r.wrap=0,l>=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new d.Buf8(r.w_size),d.arraySet(u,e,l-r.w_size,r.w_size,0),e=u,l=r.w_size),a=t.avail_in,o=t.next_in,h=t.input,t.avail_in=l,t.next_in=0,t.input=e,j(r);r.lookahead>=x;){for(i=r.strstart,n=r.lookahead-(x-1);r.ins_h=(r.ins_h<<r.hash_shift^r.window[i+x-1])&r.hash_mask,r.prev[i&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=i,i++,--n;);r.strstart=i,r.lookahead=x-1,j(r)}return r.strstart+=r.lookahead,r.block_start=r.strstart,r.insert=r.lookahead,r.lookahead=0,r.match_length=r.prev_length=x-1,r.match_available=0,t.next_in=o,t.input=h,t.avail_in=a,r.wrap=s,m},r.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./messages":51,"./trees":52}],47:[function(t,e,r){"use strict";e.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}},{}],48:[function(t,e,r){"use strict";e.exports=function(t,e){var r,i,n,s,a,o,h,u,l,f,d,c,p,m,_,g,b,v,y,w,k,x,S,z,C;r=t.state,i=t.next_in,z=t.input,n=i+(t.avail_in-5),s=t.next_out,C=t.output,a=s-(e-t.avail_out),o=s+(t.avail_out-257),h=r.dmax,u=r.wsize,l=r.whave,f=r.wnext,d=r.window,c=r.hold,p=r.bits,m=r.lencode,_=r.distcode,g=(1<<r.lenbits)-1,b=(1<<r.distbits)-1;t:do{p<15&&(c+=z[i++]<<p,p+=8,c+=z[i++]<<p,p+=8),v=m[c&g];e:for(;;){if(c>>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(c&(1<<y)-1)];continue e}if(32&y){r.mode=12;break t}t.msg="invalid literal/length code",r.mode=30;break t}w=65535&v,(y&=15)&&(p<y&&(c+=z[i++]<<p,p+=8),w+=c&(1<<y)-1,c>>>=y,p-=y),p<15&&(c+=z[i++]<<p,p+=8,c+=z[i++]<<p,p+=8),v=_[c&b];r:for(;;){if(c>>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(c&(1<<y)-1)];continue r}t.msg="invalid distance code",r.mode=30;break t}if(k=65535&v,p<(y&=15)&&(c+=z[i++]<<p,(p+=8)<y&&(c+=z[i++]<<p,p+=8)),h<(k+=c&(1<<y)-1)){t.msg="invalid distance too far back",r.mode=30;break t}if(c>>>=y,p-=y,(y=s-a)<k){if(l<(y=k-y)&&r.sane){t.msg="invalid distance too far back",r.mode=30;break t}if(S=d,(x=0)===f){if(x+=u-y,y<w){for(w-=y;C[s++]=d[x++],--y;);x=s-k,S=C}}else if(f<y){if(x+=u+f-y,(y-=f)<w){for(w-=y;C[s++]=d[x++],--y;);if(x=0,f<w){for(w-=y=f;C[s++]=d[x++],--y;);x=s-k,S=C}}}else if(x+=f-y,y<w){for(w-=y;C[s++]=d[x++],--y;);x=s-k,S=C}for(;2<w;)C[s++]=S[x++],C[s++]=S[x++],C[s++]=S[x++],w-=3;w&&(C[s++]=S[x++],1<w&&(C[s++]=S[x++]))}else{for(x=s-k;C[s++]=C[x++],C[s++]=C[x++],C[s++]=C[x++],2<(w-=3););w&&(C[s++]=C[x++],1<w&&(C[s++]=C[x++]))}break}}break}}while(i<n&&s<o);i-=w=p>>3,c&=(1<<(p-=w<<3))-1,t.next_in=i,t.next_out=s,t.avail_in=i<n?n-i+5:5-(i-n),t.avail_out=s<o?o-s+257:257-(s-o),r.hold=c,r.bits=p}},{}],49:[function(t,e,r){"use strict";var I=t("../utils/common"),O=t("./adler32"),B=t("./crc32"),R=t("./inffast"),T=t("./inftrees"),D=1,F=2,N=0,U=-2,P=1,i=852,n=592;function L(t){return(t>>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(t){var e;return t&&t.state?(e=t.state,t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=1&e.wrap),e.mode=P,e.last=0,e.havedict=0,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new I.Buf32(i),e.distcode=e.distdyn=new I.Buf32(n),e.sane=1,e.back=-1,N):U}function o(t){var e;return t&&t.state?((e=t.state).wsize=0,e.whave=0,e.wnext=0,a(t)):U}function h(t,e){var r,i;return t&&t.state?(i=t.state,e<0?(r=0,e=-e):(r=1+(e>>4),e<48&&(e&=15)),e&&(e<8||15<e)?U:(null!==i.window&&i.wbits!==e&&(i.window=null),i.wrap=r,i.wbits=e,o(t))):U}function u(t,e){var r,i;return t?(i=new s,(t.state=i).window=null,(r=h(t,e))!==N&&(t.state=null),r):U}var l,f,d=!0;function j(t){if(d){var e;for(l=new I.Buf32(512),f=new I.Buf32(32),e=0;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(T(D,t.lens,0,288,l,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;T(F,t.lens,0,32,f,0,t.work,{bits:5}),d=!1}t.lencode=l,t.lenbits=9,t.distcode=f,t.distbits=5}function Z(t,e,r,i){var n,s=t.state;return null===s.window&&(s.wsize=1<<s.wbits,s.wnext=0,s.whave=0,s.window=new I.Buf8(s.wsize)),i>=s.wsize?(I.arraySet(s.window,e,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(i<(n=s.wsize-s.wnext)&&(n=i),I.arraySet(s.window,e,r-i,n,s.wnext),(i-=n)?(I.arraySet(s.window,e,r-i,i,0),s.wnext=i,s.whave=s.wsize):(s.wnext+=n,s.wnext===s.wsize&&(s.wnext=0),s.whave<s.wsize&&(s.whave+=n))),0}r.inflateReset=o,r.inflateReset2=h,r.inflateResetKeep=a,r.inflateInit=function(t){return u(t,15)},r.inflateInit2=u,r.inflate=function(t,e){var r,i,n,s,a,o,h,u,l,f,d,c,p,m,_,g,b,v,y,w,k,x,S,z,C=0,E=new I.Buf8(4),A=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!t||!t.state||!t.output||!t.input&&0!==t.avail_in)return U;12===(r=t.state).mode&&(r.mode=13),a=t.next_out,n=t.output,h=t.avail_out,s=t.next_in,i=t.input,o=t.avail_in,u=r.hold,l=r.bits,f=o,d=h,x=N;t:for(;;)switch(r.mode){case P:if(0===r.wrap){r.mode=13;break}for(;l<16;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(2&r.wrap&&35615===u){E[r.check=0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){t.msg="incorrect header check",r.mode=30;break}if(8!=(15&u)){t.msg="unknown compression method",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){t.msg="invalid window size",r.mode=30;break}r.dmax=1<<k,t.adler=r.check=1,r.mode=512&u?10:12,l=u=0;break;case 2:for(;l<16;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(r.flags=u,8!=(255&r.flags)){t.msg="unknown compression method",r.mode=30;break}if(57344&r.flags){t.msg="unknown header flags set",r.mode=30;break}r.head&&(r.head.text=u>>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}r.head&&(r.head.time=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}r.head&&(r.head.xflags=255&u,r.head.os=u>>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}r.length=u,r.head&&(r.head.extra_len=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(c=r.length)&&(c=o),c&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,i,s,c,k)),512&r.flags&&(r.check=B(r.check,i,c,s)),o-=c,s+=c,r.length-=c),r.length))break t;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break t;for(c=0;k=i[s+c++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&c<o;);if(512&r.flags&&(r.check=B(r.check,i,c,s)),o-=c,s+=c,k)break t}else r.head&&(r.head.name=null);r.length=0,r.mode=8;case 8:if(4096&r.flags){if(0===o)break t;for(c=0;k=i[s+c++],r.head&&k&&r.length<65536&&(r.head.comment+=String.fromCharCode(k)),k&&c<o;);if(512&r.flags&&(r.check=B(r.check,i,c,s)),o-=c,s+=c,k)break t}else r.head&&(r.head.comment=null);r.mode=9;case 9:if(512&r.flags){for(;l<16;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(u!==(65535&r.check)){t.msg="header crc mismatch",r.mode=30;break}l=u=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),t.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}t.adler=r.check=L(u),l=u=0,r.mode=11;case 11:if(0===r.havedict)return t.next_out=a,t.avail_out=h,t.next_in=s,t.avail_in=o,r.hold=u,r.bits=l,2;t.adler=r.check=1,r.mode=12;case 12:if(5===e||6===e)break t;case 13:if(r.last){u>>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}switch(r.last=1&u,l-=1,3&(u>>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==e)break;u>>>=2,l-=2;break t;case 2:r.mode=17;break;case 3:t.msg="invalid block type",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if((65535&u)!=(u>>>16^65535)){t.msg="invalid stored block lengths",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===e)break t;case 15:r.mode=16;case 16:if(c=r.length){if(o<c&&(c=o),h<c&&(c=h),0===c)break t;I.arraySet(n,i,s,c,a),o-=c,s+=c,h-=c,a+=c,r.length-=c;break}r.mode=12;break;case 17:for(;l<14;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(r.nlen=257+(31&u),u>>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286<r.nlen||30<r.ndist){t.msg="too many length or distance symbols",r.mode=30;break}r.have=0,r.mode=18;case 18:for(;r.have<r.ncode;){for(;l<3;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}r.lens[A[r.have++]]=7&u,u>>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){t.msg="invalid code lengths set",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have<r.nlen+r.ndist;){for(;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(b<16)u>>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l<z;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(u>>>=_,l-=_,0===r.have){t.msg="invalid bit length repeat",r.mode=30;break}k=r.lens[r.have-1],c=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l<z;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}l-=_,k=0,c=3+(7&(u>>>=_)),u>>>=3,l-=3}else{for(z=_+7;l<z;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}l-=_,k=0,c=11+(127&(u>>>=_)),u>>>=7,l-=7}if(r.have+c>r.nlen+r.ndist){t.msg="invalid bit length repeat",r.mode=30;break}for(;c--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){t.msg="invalid code -- missing end-of-block",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){t.msg="invalid literal/lengths set",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){t.msg="invalid distances set",r.mode=30;break}if(r.mode=20,6===e)break t;case 20:r.mode=21;case 21:if(6<=o&&258<=h){t.next_out=a,t.avail_out=h,t.next_in=s,t.avail_in=o,r.hold=u,r.bits=l,R(t,d),a=t.next_out,n=t.output,h=t.avail_out,s=t.next_in,i=t.input,o=t.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(g&&0==(240&g)){for(v=_,y=g,w=b;g=(C=r.lencode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){t.msg="invalid literal/length code",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l<z;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}r.length+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<<r.distbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(0==(240&g)){for(v=_,y=g,w=b;g=(C=r.distcode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){t.msg="invalid distance code",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l<z;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}r.offset+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){t.msg="invalid distance too far back",r.mode=30;break}r.mode=25;case 25:if(0===h)break t;if(c=d-h,r.offset>c){if((c=r.offset-c)>r.whave&&r.sane){t.msg="invalid distance too far back",r.mode=30;break}p=c>r.wnext?(c-=r.wnext,r.wsize-c):r.wnext-c,c>r.length&&(c=r.length),m=r.window}else m=n,p=a-r.offset,c=r.length;for(h<c&&(c=h),h-=c,r.length-=c;n[a++]=m[p++],--c;);0===r.length&&(r.mode=21);break;case 26:if(0===h)break t;n[a++]=r.length,h--,r.mode=21;break;case 27:if(r.wrap){for(;l<32;){if(0===o)break t;o--,u|=i[s++]<<l,l+=8}if(d-=h,t.total_out+=d,r.total+=d,d&&(t.adler=r.check=r.flags?B(r.check,n,d,a-d):O(r.check,n,d,a-d)),d=h,(r.flags?u:L(u))!==r.check){t.msg="incorrect data check",r.mode=30;break}l=u=0}r.mode=28;case 28:if(r.wrap&&r.flags){for(;l<32;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(u!==(4294967295&r.total)){t.msg="incorrect length check",r.mode=30;break}l=u=0}r.mode=29;case 29:x=1;break t;case 30:x=-3;break t;case 31:return-4;case 32:default:return U}return t.next_out=a,t.avail_out=h,t.next_in=s,t.avail_in=o,r.hold=u,r.bits=l,(r.wsize||d!==t.avail_out&&r.mode<30&&(r.mode<27||4!==e))&&Z(t,t.output,t.next_out,d-t.avail_out)?(r.mode=31,-4):(f-=t.avail_in,d-=t.avail_out,t.total_in+=f,t.total_out+=d,r.total+=d,r.wrap&&d&&(t.adler=r.check=r.flags?B(r.check,n,d,t.next_out-d):O(r.check,n,d,t.next_out-d)),t.data_type=r.bits+(r.last?64:0)+(12===r.mode?128:0)+(20===r.mode||15===r.mode?256:0),(0==f&&0===d||4===e)&&x===N&&(x=-5),x)},r.inflateEnd=function(t){if(!t||!t.state)return U;var e=t.state;return e.window&&(e.window=null),t.state=null,N},r.inflateGetHeader=function(t,e){var r;return t&&t.state?0==(2&(r=t.state).wrap)?U:((r.head=e).done=!1,N):U},r.inflateSetDictionary=function(t,e){var r,i=e.length;return t&&t.state?0!==(r=t.state).wrap&&11!==r.mode?U:11===r.mode&&O(1,e,i,0)!==r.check?-3:Z(t,e,i,i)?(r.mode=31,-4):(r.havedict=1,N):U},r.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./inffast":48,"./inftrees":50}],50:[function(t,e,r){"use strict";var D=t("../utils/common"),F=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],N=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],U=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],P=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];e.exports=function(t,e,r,i,n,s,a,o){var h,u,l,f,d,c,p,m,_,g=o.bits,b=0,v=0,y=0,w=0,k=0,x=0,S=0,z=0,C=0,E=0,A=null,I=0,O=new D.Buf16(16),B=new D.Buf16(16),R=null,T=0;for(b=0;b<=15;b++)O[b]=0;for(v=0;v<i;v++)O[e[r+v]]++;for(k=g,w=15;1<=w&&0===O[w];w--);if(w<k&&(k=w),0===w)return n[s++]=20971520,n[s++]=20971520,o.bits=1,0;for(y=1;y<w&&0===O[y];y++);for(k<y&&(k=y),b=z=1;b<=15;b++)if(z<<=1,(z-=O[b])<0)return-1;if(0<z&&(0===t||1!==w))return-1;for(B[1]=0,b=1;b<15;b++)B[b+1]=B[b]+O[b];for(v=0;v<i;v++)0!==e[r+v]&&(a[B[e[r+v]]++]=v);if(c=0===t?(A=R=a,19):1===t?(A=F,I-=257,R=N,T-=257,256):(A=U,R=P,-1),b=y,d=s,S=v=E=0,l=-1,f=(C=1<<(x=k))-1,1===t&&852<C||2===t&&592<C)return 1;for(;;){for(p=b-S,_=a[v]<c?(m=0,a[v]):a[v]>c?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<<b-S,y=u=1<<x;n[d+(E>>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<<b-1;E&h;)h>>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=e[r+a[v]]}if(k<b&&(E&f)!==l){for(0===S&&(S=k),d+=y,z=1<<(x=b-S);x+S<w&&!((z-=O[x+S])<=0);)x++,z<<=1;if(C+=1<<x,1===t&&852<C||2===t&&592<C)return 1;n[l=E&f]=k<<24|x<<16|d-s|0}}return 0!==E&&(n[d+E]=b-S<<24|64<<16|0),o.bits=k,0}},{"../utils/common":41}],51:[function(t,e,r){"use strict";e.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],52:[function(t,e,r){"use strict";var n=t("../utils/common"),o=0,h=1;function i(t){for(var e=t.length;0<=--e;)t[e]=0}var s=0,a=29,u=256,l=u+1+a,f=30,d=19,_=2*l+1,g=15,c=16,p=7,m=256,b=16,v=17,y=18,w=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],k=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],x=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],S=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],z=new Array(2*(l+2));i(z);var C=new Array(2*f);i(C);var E=new Array(512);i(E);var A=new Array(256);i(A);var I=new Array(a);i(I);var O,B,R,T=new Array(f);function D(t,e,r,i,n){this.static_tree=t,this.extra_bits=e,this.extra_base=r,this.elems=i,this.max_length=n,this.has_stree=t&&t.length}function F(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}function N(t){return t<256?E[t]:E[256+(t>>>7)]}function U(t,e){t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255}function P(t,e,r){t.bi_valid>c-r?(t.bi_buf|=e<<t.bi_valid&65535,U(t,t.bi_buf),t.bi_buf=e>>c-t.bi_valid,t.bi_valid+=r-c):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=r)}function L(t,e,r){P(t,r[2*e],r[2*e+1])}function j(t,e){for(var r=0;r|=1&t,t>>>=1,r<<=1,0<--e;);return r>>>1}function Z(t,e,r){var i,n,s=new Array(g+1),a=0;for(i=1;i<=g;i++)s[i]=a=a+r[i-1]<<1;for(n=0;n<=e;n++){var o=t[2*n+1];0!==o&&(t[2*n]=j(s[o]++,o))}}function W(t){var e;for(e=0;e<l;e++)t.dyn_ltree[2*e]=0;for(e=0;e<f;e++)t.dyn_dtree[2*e]=0;for(e=0;e<d;e++)t.bl_tree[2*e]=0;t.dyn_ltree[2*m]=1,t.opt_len=t.static_len=0,t.last_lit=t.matches=0}function M(t){8<t.bi_valid?U(t,t.bi_buf):0<t.bi_valid&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0}function H(t,e,r,i){var n=2*e,s=2*r;return t[n]<t[s]||t[n]===t[s]&&i[e]<=i[r]}function G(t,e,r){for(var i=t.heap[r],n=r<<1;n<=t.heap_len&&(n<t.heap_len&&H(e,t.heap[n+1],t.heap[n],t.depth)&&n++,!H(e,i,t.heap[n],t.depth));)t.heap[r]=t.heap[n],r=n,n<<=1;t.heap[r]=i}function K(t,e,r){var i,n,s,a,o=0;if(0!==t.last_lit)for(;i=t.pending_buf[t.d_buf+2*o]<<8|t.pending_buf[t.d_buf+2*o+1],n=t.pending_buf[t.l_buf+o],o++,0===i?L(t,n,e):(L(t,(s=A[n])+u+1,e),0!==(a=w[s])&&P(t,n-=I[s],a),L(t,s=N(--i),r),0!==(a=k[s])&&P(t,i-=T[s],a)),o<t.last_lit;);L(t,m,e)}function Y(t,e){var r,i,n,s=e.dyn_tree,a=e.stat_desc.static_tree,o=e.stat_desc.has_stree,h=e.stat_desc.elems,u=-1;for(t.heap_len=0,t.heap_max=_,r=0;r<h;r++)0!==s[2*r]?(t.heap[++t.heap_len]=u=r,t.depth[r]=0):s[2*r+1]=0;for(;t.heap_len<2;)s[2*(n=t.heap[++t.heap_len]=u<2?++u:0)]=1,t.depth[n]=0,t.opt_len--,o&&(t.static_len-=a[2*n+1]);for(e.max_code=u,r=t.heap_len>>1;1<=r;r--)G(t,s,r);for(n=h;r=t.heap[1],t.heap[1]=t.heap[t.heap_len--],G(t,s,1),i=t.heap[1],t.heap[--t.heap_max]=r,t.heap[--t.heap_max]=i,s[2*n]=s[2*r]+s[2*i],t.depth[n]=(t.depth[r]>=t.depth[i]?t.depth[r]:t.depth[i])+1,s[2*r+1]=s[2*i+1]=n,t.heap[1]=n++,G(t,s,1),2<=t.heap_len;);t.heap[--t.heap_max]=t.heap[1],function(t,e){var r,i,n,s,a,o,h=e.dyn_tree,u=e.max_code,l=e.stat_desc.static_tree,f=e.stat_desc.has_stree,d=e.stat_desc.extra_bits,c=e.stat_desc.extra_base,p=e.stat_desc.max_length,m=0;for(s=0;s<=g;s++)t.bl_count[s]=0;for(h[2*t.heap[t.heap_max]+1]=0,r=t.heap_max+1;r<_;r++)p<(s=h[2*h[2*(i=t.heap[r])+1]+1]+1)&&(s=p,m++),h[2*i+1]=s,u<i||(t.bl_count[s]++,a=0,c<=i&&(a=d[i-c]),o=h[2*i],t.opt_len+=o*(s+a),f&&(t.static_len+=o*(l[2*i+1]+a)));if(0!==m){do{for(s=p-1;0===t.bl_count[s];)s--;t.bl_count[s]--,t.bl_count[s+1]+=2,t.bl_count[p]--,m-=2}while(0<m);for(s=p;0!==s;s--)for(i=t.bl_count[s];0!==i;)u<(n=t.heap[--r])||(h[2*n+1]!==s&&(t.opt_len+=(s-h[2*n+1])*h[2*n],h[2*n+1]=s),i--)}}(t,e),Z(s,u,t.bl_count)}function X(t,e,r){var i,n,s=-1,a=e[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),e[2*(r+1)+1]=65535,i=0;i<=r;i++)n=a,a=e[2*(i+1)+1],++o<h&&n===a||(o<u?t.bl_tree[2*n]+=o:0!==n?(n!==s&&t.bl_tree[2*n]++,t.bl_tree[2*b]++):o<=10?t.bl_tree[2*v]++:t.bl_tree[2*y]++,s=n,u=(o=0)===a?(h=138,3):n===a?(h=6,3):(h=7,4))}function V(t,e,r){var i,n,s=-1,a=e[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),i=0;i<=r;i++)if(n=a,a=e[2*(i+1)+1],!(++o<h&&n===a)){if(o<u)for(;L(t,n,t.bl_tree),0!=--o;);else 0!==n?(n!==s&&(L(t,n,t.bl_tree),o--),L(t,b,t.bl_tree),P(t,o-3,2)):o<=10?(L(t,v,t.bl_tree),P(t,o-3,3)):(L(t,y,t.bl_tree),P(t,o-11,7));s=n,u=(o=0)===a?(h=138,3):n===a?(h=6,3):(h=7,4)}}i(T);var q=!1;function J(t,e,r,i){P(t,(s<<1)+(i?1:0),3),function(t,e,r,i){M(t),i&&(U(t,r),U(t,~r)),n.arraySet(t.pending_buf,t.window,e,r,t.pending),t.pending+=r}(t,e,r,!0)}r._tr_init=function(t){q||(function(){var t,e,r,i,n,s=new Array(g+1);for(i=r=0;i<a-1;i++)for(I[i]=r,t=0;t<1<<w[i];t++)A[r++]=i;for(A[r-1]=i,i=n=0;i<16;i++)for(T[i]=n,t=0;t<1<<k[i];t++)E[n++]=i;for(n>>=7;i<f;i++)for(T[i]=n<<7,t=0;t<1<<k[i]-7;t++)E[256+n++]=i;for(e=0;e<=g;e++)s[e]=0;for(t=0;t<=143;)z[2*t+1]=8,t++,s[8]++;for(;t<=255;)z[2*t+1]=9,t++,s[9]++;for(;t<=279;)z[2*t+1]=7,t++,s[7]++;for(;t<=287;)z[2*t+1]=8,t++,s[8]++;for(Z(z,l+1,s),t=0;t<f;t++)C[2*t+1]=5,C[2*t]=j(t,5);O=new D(z,w,u+1,l,g),B=new D(C,k,0,f,g),R=new D(new Array(0),x,0,d,p)}(),q=!0),t.l_desc=new F(t.dyn_ltree,O),t.d_desc=new F(t.dyn_dtree,B),t.bl_desc=new F(t.bl_tree,R),t.bi_buf=0,t.bi_valid=0,W(t)},r._tr_stored_block=J,r._tr_flush_block=function(t,e,r,i){var n,s,a=0;0<t.level?(2===t.strm.data_type&&(t.strm.data_type=function(t){var e,r=4093624447;for(e=0;e<=31;e++,r>>>=1)if(1&r&&0!==t.dyn_ltree[2*e])return o;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return h;for(e=32;e<u;e++)if(0!==t.dyn_ltree[2*e])return h;return o}(t)),Y(t,t.l_desc),Y(t,t.d_desc),a=function(t){var e;for(X(t,t.dyn_ltree,t.l_desc.max_code),X(t,t.dyn_dtree,t.d_desc.max_code),Y(t,t.bl_desc),e=d-1;3<=e&&0===t.bl_tree[2*S[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e}(t),n=t.opt_len+3+7>>>3,(s=t.static_len+3+7>>>3)<=n&&(n=s)):n=s=r+5,r+4<=n&&-1!==e?J(t,e,r,i):4===t.strategy||s===n?(P(t,2+(i?1:0),3),K(t,z,C)):(P(t,4+(i?1:0),3),function(t,e,r,i){var n;for(P(t,e-257,5),P(t,r-1,5),P(t,i-4,4),n=0;n<i;n++)P(t,t.bl_tree[2*S[n]+1],3);V(t,t.dyn_ltree,e-1),V(t,t.dyn_dtree,r-1)}(t,t.l_desc.max_code+1,t.d_desc.max_code+1,a+1),K(t,t.dyn_ltree,t.dyn_dtree)),W(t),i&&M(t)},r._tr_tally=function(t,e,r){return t.pending_buf[t.d_buf+2*t.last_lit]=e>>>8&255,t.pending_buf[t.d_buf+2*t.last_lit+1]=255&e,t.pending_buf[t.l_buf+t.last_lit]=255&r,t.last_lit++,0===e?t.dyn_ltree[2*r]++:(t.matches++,e--,t.dyn_ltree[2*(A[r]+u+1)]++,t.dyn_dtree[2*N(e)]++),t.last_lit===t.lit_bufsize-1},r._tr_align=function(t){P(t,2,3),L(t,m,z),function(t){16===t.bi_valid?(U(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):8<=t.bi_valid&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)}(t)}},{"../utils/common":41}],53:[function(t,e,r){"use strict";e.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(t,e,r){"use strict";e.exports="function"==typeof setImmediate?setImmediate:function(){var t=[].slice.apply(arguments);t.splice(1,0,0),setTimeout.apply(null,t)}},{}]},{},[10])(10)});
\ No newline at end of file diff --git a/ext/lib/parse5.js b/ext/lib/parse5.js deleted file mode 100644 index b84b7402..00000000 --- a/ext/lib/parse5.js +++ /dev/null @@ -1,8557 +0,0 @@ -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.parse5 = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { -    return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.decodeXML = exports.decodeHTMLStrict = exports.decodeHTML = exports.determineBranch = exports.BinTrieFlags = exports.fromCodePoint = exports.replaceCodePoint = exports.decodeCodePoint = exports.xmlDecodeTree = exports.htmlDecodeTree = void 0; -var decode_data_html_js_1 = __importDefault(require("./generated/decode-data-html.js")); -exports.htmlDecodeTree = decode_data_html_js_1.default; -var decode_data_xml_js_1 = __importDefault(require("./generated/decode-data-xml.js")); -exports.xmlDecodeTree = decode_data_xml_js_1.default; -var decode_codepoint_js_1 = __importDefault(require("./decode_codepoint.js")); -exports.decodeCodePoint = decode_codepoint_js_1.default; -var decode_codepoint_js_2 = require("./decode_codepoint.js"); -Object.defineProperty(exports, "replaceCodePoint", { enumerable: true, get: function () { return decode_codepoint_js_2.replaceCodePoint; } }); -Object.defineProperty(exports, "fromCodePoint", { enumerable: true, get: function () { return decode_codepoint_js_2.fromCodePoint; } }); -var CharCodes; -(function (CharCodes) { -    CharCodes[CharCodes["NUM"] = 35] = "NUM"; -    CharCodes[CharCodes["SEMI"] = 59] = "SEMI"; -    CharCodes[CharCodes["ZERO"] = 48] = "ZERO"; -    CharCodes[CharCodes["NINE"] = 57] = "NINE"; -    CharCodes[CharCodes["LOWER_A"] = 97] = "LOWER_A"; -    CharCodes[CharCodes["LOWER_F"] = 102] = "LOWER_F"; -    CharCodes[CharCodes["LOWER_X"] = 120] = "LOWER_X"; -    /** Bit that needs to be set to convert an upper case ASCII character to lower case */ -    CharCodes[CharCodes["To_LOWER_BIT"] = 32] = "To_LOWER_BIT"; -})(CharCodes || (CharCodes = {})); -var BinTrieFlags; -(function (BinTrieFlags) { -    BinTrieFlags[BinTrieFlags["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH"; -    BinTrieFlags[BinTrieFlags["BRANCH_LENGTH"] = 16256] = "BRANCH_LENGTH"; -    BinTrieFlags[BinTrieFlags["JUMP_TABLE"] = 127] = "JUMP_TABLE"; -})(BinTrieFlags = exports.BinTrieFlags || (exports.BinTrieFlags = {})); -function getDecoder(decodeTree) { -    return function decodeHTMLBinary(str, strict) { -        var ret = ""; -        var lastIdx = 0; -        var strIdx = 0; -        while ((strIdx = str.indexOf("&", strIdx)) >= 0) { -            ret += str.slice(lastIdx, strIdx); -            lastIdx = strIdx; -            // Skip the "&" -            strIdx += 1; -            // If we have a numeric entity, handle this separately. -            if (str.charCodeAt(strIdx) === CharCodes.NUM) { -                // Skip the leading "&#". For hex entities, also skip the leading "x". -                var start = strIdx + 1; -                var base = 10; -                var cp = str.charCodeAt(start); -                if ((cp | CharCodes.To_LOWER_BIT) === CharCodes.LOWER_X) { -                    base = 16; -                    strIdx += 1; -                    start += 1; -                } -                do -                    cp = str.charCodeAt(++strIdx); -                while ((cp >= CharCodes.ZERO && cp <= CharCodes.NINE) || -                    (base === 16 && -                        (cp | CharCodes.To_LOWER_BIT) >= CharCodes.LOWER_A && -                        (cp | CharCodes.To_LOWER_BIT) <= CharCodes.LOWER_F)); -                if (start !== strIdx) { -                    var entity = str.substring(start, strIdx); -                    var parsed = parseInt(entity, base); -                    if (str.charCodeAt(strIdx) === CharCodes.SEMI) { -                        strIdx += 1; -                    } -                    else if (strict) { -                        continue; -                    } -                    ret += (0, decode_codepoint_js_1.default)(parsed); -                    lastIdx = strIdx; -                } -                continue; -            } -            var resultIdx = 0; -            var excess = 1; -            var treeIdx = 0; -            var current = decodeTree[treeIdx]; -            for (; strIdx < str.length; strIdx++, excess++) { -                treeIdx = determineBranch(decodeTree, current, treeIdx + 1, str.charCodeAt(strIdx)); -                if (treeIdx < 0) -                    break; -                current = decodeTree[treeIdx]; -                var masked = current & BinTrieFlags.VALUE_LENGTH; -                // If the branch is a value, store it and continue -                if (masked) { -                    // If we have a legacy entity while parsing strictly, just skip the number of bytes -                    if (!strict || str.charCodeAt(strIdx) === CharCodes.SEMI) { -                        resultIdx = treeIdx; -                        excess = 0; -                    } -                    // The mask is the number of bytes of the value, including the current byte. -                    var valueLength = (masked >> 14) - 1; -                    if (valueLength === 0) -                        break; -                    treeIdx += valueLength; -                } -            } -            if (resultIdx !== 0) { -                var valueLength = (decodeTree[resultIdx] & BinTrieFlags.VALUE_LENGTH) >> 14; -                ret += -                    valueLength === 1 -                        ? String.fromCharCode(decodeTree[resultIdx] & ~BinTrieFlags.VALUE_LENGTH) -                        : valueLength === 2 -                            ? String.fromCharCode(decodeTree[resultIdx + 1]) -                            : String.fromCharCode(decodeTree[resultIdx + 1], decodeTree[resultIdx + 2]); -                lastIdx = strIdx - excess + 1; -            } -        } -        return ret + str.slice(lastIdx); -    }; -} -function determineBranch(decodeTree, current, nodeIdx, char) { -    var branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7; -    var jumpOffset = current & BinTrieFlags.JUMP_TABLE; -    // Case 1: Single branch encoded in jump offset -    if (branchCount === 0) { -        return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1; -    } -    // Case 2: Multiple branches encoded in jump table -    if (jumpOffset) { -        var value = char - jumpOffset; -        return value < 0 || value >= branchCount -            ? -1 -            : decodeTree[nodeIdx + value] - 1; -    } -    // Case 3: Multiple branches encoded in dictionary -    // Binary search for the character. -    var lo = nodeIdx; -    var hi = lo + branchCount - 1; -    while (lo <= hi) { -        var mid = (lo + hi) >>> 1; -        var midVal = decodeTree[mid]; -        if (midVal < char) { -            lo = mid + 1; -        } -        else if (midVal > char) { -            hi = mid - 1; -        } -        else { -            return decodeTree[mid + branchCount]; -        } -    } -    return -1; -} -exports.determineBranch = determineBranch; -var htmlDecoder = getDecoder(decode_data_html_js_1.default); -var xmlDecoder = getDecoder(decode_data_xml_js_1.default); -/** - * Decodes an HTML string, allowing for entities not terminated by a semi-colon. - * - * @param str The string to decode. - * @returns The decoded string. - */ -function decodeHTML(str) { -    return htmlDecoder(str, false); -} -exports.decodeHTML = decodeHTML; -/** - * Decodes an HTML string, requiring all entities to be terminated by a semi-colon. - * - * @param str The string to decode. - * @returns The decoded string. - */ -function decodeHTMLStrict(str) { -    return htmlDecoder(str, true); -} -exports.decodeHTMLStrict = decodeHTMLStrict; -/** - * Decodes an XML string, requiring all entities to be terminated by a semi-colon. - * - * @param str The string to decode. - * @returns The decoded string. - */ -function decodeXML(str) { -    return xmlDecoder(str, true); -} -exports.decodeXML = decodeXML; - -},{"./decode_codepoint.js":2,"./generated/decode-data-html.js":4,"./generated/decode-data-xml.js":5}],2:[function(require,module,exports){ -"use strict"; -// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134 -var _a; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.replaceCodePoint = exports.fromCodePoint = void 0; -var decodeMap = new Map([ -    [0, 65533], -    [128, 8364], -    [130, 8218], -    [131, 402], -    [132, 8222], -    [133, 8230], -    [134, 8224], -    [135, 8225], -    [136, 710], -    [137, 8240], -    [138, 352], -    [139, 8249], -    [140, 338], -    [142, 381], -    [145, 8216], -    [146, 8217], -    [147, 8220], -    [148, 8221], -    [149, 8226], -    [150, 8211], -    [151, 8212], -    [152, 732], -    [153, 8482], -    [154, 353], -    [155, 8250], -    [156, 339], -    [158, 382], -    [159, 376], -]); -exports.fromCodePoint =  -// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins -(_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function (codePoint) { -    var output = ""; -    if (codePoint > 0xffff) { -        codePoint -= 0x10000; -        output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800); -        codePoint = 0xdc00 | (codePoint & 0x3ff); -    } -    output += String.fromCharCode(codePoint); -    return output; -}; -function replaceCodePoint(codePoint) { -    var _a; -    if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) { -        return 0xfffd; -    } -    return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint; -} -exports.replaceCodePoint = replaceCodePoint; -function decodeCodePoint(codePoint) { -    return (0, exports.fromCodePoint)(replaceCodePoint(codePoint)); -} -exports.default = decodeCodePoint; - -},{}],3:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.escapeText = exports.escapeAttribute = exports.escapeUTF8 = exports.escape = exports.encodeXML = exports.getCodePoint = exports.xmlReplacer = void 0; -exports.xmlReplacer = /["&'<>$\x80-\uFFFF]/g; -var xmlCodeMap = new Map([ -    [34, """], -    [38, "&"], -    [39, "'"], -    [60, "<"], -    [62, ">"], -]); -// For compatibility with node < 4, we wrap `codePointAt` -exports.getCodePoint =  -// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -String.prototype.codePointAt != null -    ? function (str, index) { return str.codePointAt(index); } -    : // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae -        function (c, index) { -            return (c.charCodeAt(index) & 0xfc00) === 0xd800 -                ? (c.charCodeAt(index) - 0xd800) * 0x400 + -                    c.charCodeAt(index + 1) - -                    0xdc00 + -                    0x10000 -                : c.charCodeAt(index); -        }; -/** - * Encodes all non-ASCII characters, as well as characters not valid in XML - * documents using XML entities. - * - * If a character has no equivalent entity, a - * numeric hexadecimal reference (eg. `ü`) will be used. - */ -function encodeXML(str) { -    var ret = ""; -    var lastIdx = 0; -    var match; -    while ((match = exports.xmlReplacer.exec(str)) !== null) { -        var i = match.index; -        var char = str.charCodeAt(i); -        var next = xmlCodeMap.get(char); -        if (next !== undefined) { -            ret += str.substring(lastIdx, i) + next; -            lastIdx = i + 1; -        } -        else { -            ret += "".concat(str.substring(lastIdx, i), "&#x").concat((0, exports.getCodePoint)(str, i).toString(16), ";"); -            // Increase by 1 if we have a surrogate pair -            lastIdx = exports.xmlReplacer.lastIndex += Number((char & 0xfc00) === 0xd800); -        } -    } -    return ret + str.substr(lastIdx); -} -exports.encodeXML = encodeXML; -/** - * Encodes all non-ASCII characters, as well as characters not valid in XML - * documents using numeric hexadecimal reference (eg. `ü`). - * - * Have a look at `escapeUTF8` if you want a more concise output at the expense - * of reduced transportability. - * - * @param data String to escape. - */ -exports.escape = encodeXML; -function getEscaper(regex, map) { -    return function escape(data) { -        var match; -        var lastIdx = 0; -        var result = ""; -        while ((match = regex.exec(data))) { -            if (lastIdx !== match.index) { -                result += data.substring(lastIdx, match.index); -            } -            // We know that this chararcter will be in the map. -            result += map.get(match[0].charCodeAt(0)); -            // Every match will be of length 1 -            lastIdx = match.index + 1; -        } -        return result + data.substring(lastIdx); -    }; -} -/** - * Encodes all characters not valid in XML documents using XML entities. - * - * Note that the output will be character-set dependent. - * - * @param data String to escape. - */ -exports.escapeUTF8 = getEscaper(/[&<>'"]/g, xmlCodeMap); -/** - * Encodes all characters that have to be escaped in HTML attributes, - * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}. - * - * @param data String to escape. - */ -exports.escapeAttribute = getEscaper(/["&\u00A0]/g, new Map([ -    [34, """], -    [38, "&"], -    [160, " "], -])); -/** - * Encodes all characters that have to be escaped in HTML text, - * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}. - * - * @param data String to escape. - */ -exports.escapeText = getEscaper(/[&<>\u00A0]/g, new Map([ -    [38, "&"], -    [60, "<"], -    [62, ">"], -    [160, " "], -])); - -},{}],4:[function(require,module,exports){ -"use strict"; -// Generated using scripts/write-decode-map.ts -Object.defineProperty(exports, "__esModule", { value: true }); -exports.default = new Uint16Array( -// prettier-ignore -"\u1d41<\xd5\u0131\u028a\u049d\u057b\u05d0\u0675\u06de\u07a2\u07d6\u080f\u0a4a\u0a91\u0da1\u0e6d\u0f09\u0f26\u10ca\u1228\u12e1\u1415\u149d\u14c3\u14df\u1525\0\0\0\0\0\0\u156b\u16cd\u198d\u1c12\u1ddd\u1f7e\u2060\u21b0\u228d\u23c0\u23fb\u2442\u2824\u2912\u2d08\u2e48\u2fce\u3016\u32ba\u3639\u37ac\u38fe\u3a28\u3a71\u3ae0\u3b2e\u0800EMabcfglmnoprstu\\bfms\x7f\x84\x8b\x90\x95\x98\xa6\xb3\xb9\xc8\xcflig\u803b\xc6\u40c6P\u803b&\u4026cute\u803b\xc1\u40c1reve;\u4102\u0100iyx}rc\u803b\xc2\u40c2;\u4410r;\uc000\ud835\udd04rave\u803b\xc0\u40c0pha;\u4391acr;\u4100d;\u6a53\u0100gp\x9d\xa1on;\u4104f;\uc000\ud835\udd38plyFunction;\u6061ing\u803b\xc5\u40c5\u0100cs\xbe\xc3r;\uc000\ud835\udc9cign;\u6254ilde\u803b\xc3\u40c3ml\u803b\xc4\u40c4\u0400aceforsu\xe5\xfb\xfe\u0117\u011c\u0122\u0127\u012a\u0100cr\xea\xf2kslash;\u6216\u0176\xf6\xf8;\u6ae7ed;\u6306y;\u4411\u0180crt\u0105\u010b\u0114ause;\u6235noullis;\u612ca;\u4392r;\uc000\ud835\udd05pf;\uc000\ud835\udd39eve;\u42d8c\xf2\u0113mpeq;\u624e\u0700HOacdefhilorsu\u014d\u0151\u0156\u0180\u019e\u01a2\u01b5\u01b7\u01ba\u01dc\u0215\u0273\u0278\u027ecy;\u4427PY\u803b\xa9\u40a9\u0180cpy\u015d\u0162\u017aute;\u4106\u0100;i\u0167\u0168\u62d2talDifferentialD;\u6145leys;\u612d\u0200aeio\u0189\u018e\u0194\u0198ron;\u410cdil\u803b\xc7\u40c7rc;\u4108nint;\u6230ot;\u410a\u0100dn\u01a7\u01adilla;\u40b8terDot;\u40b7\xf2\u017fi;\u43a7rcle\u0200DMPT\u01c7\u01cb\u01d1\u01d6ot;\u6299inus;\u6296lus;\u6295imes;\u6297o\u0100cs\u01e2\u01f8kwiseContourIntegral;\u6232eCurly\u0100DQ\u0203\u020foubleQuote;\u601duote;\u6019\u0200lnpu\u021e\u0228\u0247\u0255on\u0100;e\u0225\u0226\u6237;\u6a74\u0180git\u022f\u0236\u023aruent;\u6261nt;\u622fourIntegral;\u622e\u0100fr\u024c\u024e;\u6102oduct;\u6210nterClockwiseContourIntegral;\u6233oss;\u6a2fcr;\uc000\ud835\udc9ep\u0100;C\u0284\u0285\u62d3ap;\u624d\u0580DJSZacefios\u02a0\u02ac\u02b0\u02b4\u02b8\u02cb\u02d7\u02e1\u02e6\u0333\u048d\u0100;o\u0179\u02a5trahd;\u6911cy;\u4402cy;\u4405cy;\u440f\u0180grs\u02bf\u02c4\u02c7ger;\u6021r;\u61a1hv;\u6ae4\u0100ay\u02d0\u02d5ron;\u410e;\u4414l\u0100;t\u02dd\u02de\u6207a;\u4394r;\uc000\ud835\udd07\u0100af\u02eb\u0327\u0100cm\u02f0\u0322ritical\u0200ADGT\u0300\u0306\u0316\u031ccute;\u40b4o\u0174\u030b\u030d;\u42d9bleAcute;\u42ddrave;\u4060ilde;\u42dcond;\u62c4ferentialD;\u6146\u0470\u033d\0\0\0\u0342\u0354\0\u0405f;\uc000\ud835\udd3b\u0180;DE\u0348\u0349\u034d\u40a8ot;\u60dcqual;\u6250ble\u0300CDLRUV\u0363\u0372\u0382\u03cf\u03e2\u03f8ontourIntegra\xec\u0239o\u0274\u0379\0\0\u037b\xbb\u0349nArrow;\u61d3\u0100eo\u0387\u03a4ft\u0180ART\u0390\u0396\u03a1rrow;\u61d0ightArrow;\u61d4e\xe5\u02cang\u0100LR\u03ab\u03c4eft\u0100AR\u03b3\u03b9rrow;\u67f8ightArrow;\u67faightArrow;\u67f9ight\u0100AT\u03d8\u03derrow;\u61d2ee;\u62a8p\u0241\u03e9\0\0\u03efrrow;\u61d1ownArrow;\u61d5erticalBar;\u6225n\u0300ABLRTa\u0412\u042a\u0430\u045e\u047f\u037crrow\u0180;BU\u041d\u041e\u0422\u6193ar;\u6913pArrow;\u61f5reve;\u4311eft\u02d2\u043a\0\u0446\0\u0450ightVector;\u6950eeVector;\u695eector\u0100;B\u0459\u045a\u61bdar;\u6956ight\u01d4\u0467\0\u0471eeVector;\u695fector\u0100;B\u047a\u047b\u61c1ar;\u6957ee\u0100;A\u0486\u0487\u62a4rrow;\u61a7\u0100ct\u0492\u0497r;\uc000\ud835\udc9frok;\u4110\u0800NTacdfglmopqstux\u04bd\u04c0\u04c4\u04cb\u04de\u04e2\u04e7\u04ee\u04f5\u0521\u052f\u0536\u0552\u055d\u0560\u0565G;\u414aH\u803b\xd0\u40d0cute\u803b\xc9\u40c9\u0180aiy\u04d2\u04d7\u04dcron;\u411arc\u803b\xca\u40ca;\u442dot;\u4116r;\uc000\ud835\udd08rave\u803b\xc8\u40c8ement;\u6208\u0100ap\u04fa\u04fecr;\u4112ty\u0253\u0506\0\0\u0512mallSquare;\u65fberySmallSquare;\u65ab\u0100gp\u0526\u052aon;\u4118f;\uc000\ud835\udd3csilon;\u4395u\u0100ai\u053c\u0549l\u0100;T\u0542\u0543\u6a75ilde;\u6242librium;\u61cc\u0100ci\u0557\u055ar;\u6130m;\u6a73a;\u4397ml\u803b\xcb\u40cb\u0100ip\u056a\u056fsts;\u6203onentialE;\u6147\u0280cfios\u0585\u0588\u058d\u05b2\u05ccy;\u4424r;\uc000\ud835\udd09lled\u0253\u0597\0\0\u05a3mallSquare;\u65fcerySmallSquare;\u65aa\u0370\u05ba\0\u05bf\0\0\u05c4f;\uc000\ud835\udd3dAll;\u6200riertrf;\u6131c\xf2\u05cb\u0600JTabcdfgorst\u05e8\u05ec\u05ef\u05fa\u0600\u0612\u0616\u061b\u061d\u0623\u066c\u0672cy;\u4403\u803b>\u403emma\u0100;d\u05f7\u05f8\u4393;\u43dcreve;\u411e\u0180eiy\u0607\u060c\u0610dil;\u4122rc;\u411c;\u4413ot;\u4120r;\uc000\ud835\udd0a;\u62d9pf;\uc000\ud835\udd3eeater\u0300EFGLST\u0635\u0644\u064e\u0656\u065b\u0666qual\u0100;L\u063e\u063f\u6265ess;\u62dbullEqual;\u6267reater;\u6aa2ess;\u6277lantEqual;\u6a7eilde;\u6273cr;\uc000\ud835\udca2;\u626b\u0400Aacfiosu\u0685\u068b\u0696\u069b\u069e\u06aa\u06be\u06caRDcy;\u442a\u0100ct\u0690\u0694ek;\u42c7;\u405eirc;\u4124r;\u610clbertSpace;\u610b\u01f0\u06af\0\u06b2f;\u610dizontalLine;\u6500\u0100ct\u06c3\u06c5\xf2\u06a9rok;\u4126mp\u0144\u06d0\u06d8ownHum\xf0\u012fqual;\u624f\u0700EJOacdfgmnostu\u06fa\u06fe\u0703\u0707\u070e\u071a\u071e\u0721\u0728\u0744\u0778\u078b\u078f\u0795cy;\u4415lig;\u4132cy;\u4401cute\u803b\xcd\u40cd\u0100iy\u0713\u0718rc\u803b\xce\u40ce;\u4418ot;\u4130r;\u6111rave\u803b\xcc\u40cc\u0180;ap\u0720\u072f\u073f\u0100cg\u0734\u0737r;\u412ainaryI;\u6148lie\xf3\u03dd\u01f4\u0749\0\u0762\u0100;e\u074d\u074e\u622c\u0100gr\u0753\u0758ral;\u622bsection;\u62c2isible\u0100CT\u076c\u0772omma;\u6063imes;\u6062\u0180gpt\u077f\u0783\u0788on;\u412ef;\uc000\ud835\udd40a;\u4399cr;\u6110ilde;\u4128\u01eb\u079a\0\u079ecy;\u4406l\u803b\xcf\u40cf\u0280cfosu\u07ac\u07b7\u07bc\u07c2\u07d0\u0100iy\u07b1\u07b5rc;\u4134;\u4419r;\uc000\ud835\udd0dpf;\uc000\ud835\udd41\u01e3\u07c7\0\u07ccr;\uc000\ud835\udca5rcy;\u4408kcy;\u4404\u0380HJacfos\u07e4\u07e8\u07ec\u07f1\u07fd\u0802\u0808cy;\u4425cy;\u440cppa;\u439a\u0100ey\u07f6\u07fbdil;\u4136;\u441ar;\uc000\ud835\udd0epf;\uc000\ud835\udd42cr;\uc000\ud835\udca6\u0580JTaceflmost\u0825\u0829\u082c\u0850\u0863\u09b3\u09b8\u09c7\u09cd\u0a37\u0a47cy;\u4409\u803b<\u403c\u0280cmnpr\u0837\u083c\u0841\u0844\u084dute;\u4139bda;\u439bg;\u67ealacetrf;\u6112r;\u619e\u0180aey\u0857\u085c\u0861ron;\u413ddil;\u413b;\u441b\u0100fs\u0868\u0970t\u0500ACDFRTUVar\u087e\u08a9\u08b1\u08e0\u08e6\u08fc\u092f\u095b\u0390\u096a\u0100nr\u0883\u088fgleBracket;\u67e8row\u0180;BR\u0899\u089a\u089e\u6190ar;\u61e4ightArrow;\u61c6eiling;\u6308o\u01f5\u08b7\0\u08c3bleBracket;\u67e6n\u01d4\u08c8\0\u08d2eeVector;\u6961ector\u0100;B\u08db\u08dc\u61c3ar;\u6959loor;\u630aight\u0100AV\u08ef\u08f5rrow;\u6194ector;\u694e\u0100er\u0901\u0917e\u0180;AV\u0909\u090a\u0910\u62a3rrow;\u61a4ector;\u695aiangle\u0180;BE\u0924\u0925\u0929\u62b2ar;\u69cfqual;\u62b4p\u0180DTV\u0937\u0942\u094cownVector;\u6951eeVector;\u6960ector\u0100;B\u0956\u0957\u61bfar;\u6958ector\u0100;B\u0965\u0966\u61bcar;\u6952ight\xe1\u039cs\u0300EFGLST\u097e\u098b\u0995\u099d\u09a2\u09adqualGreater;\u62daullEqual;\u6266reater;\u6276ess;\u6aa1lantEqual;\u6a7dilde;\u6272r;\uc000\ud835\udd0f\u0100;e\u09bd\u09be\u62d8ftarrow;\u61daidot;\u413f\u0180npw\u09d4\u0a16\u0a1bg\u0200LRlr\u09de\u09f7\u0a02\u0a10eft\u0100AR\u09e6\u09ecrrow;\u67f5ightArrow;\u67f7ightArrow;\u67f6eft\u0100ar\u03b3\u0a0aight\xe1\u03bfight\xe1\u03caf;\uc000\ud835\udd43er\u0100LR\u0a22\u0a2ceftArrow;\u6199ightArrow;\u6198\u0180cht\u0a3e\u0a40\u0a42\xf2\u084c;\u61b0rok;\u4141;\u626a\u0400acefiosu\u0a5a\u0a5d\u0a60\u0a77\u0a7c\u0a85\u0a8b\u0a8ep;\u6905y;\u441c\u0100dl\u0a65\u0a6fiumSpace;\u605flintrf;\u6133r;\uc000\ud835\udd10nusPlus;\u6213pf;\uc000\ud835\udd44c\xf2\u0a76;\u439c\u0480Jacefostu\u0aa3\u0aa7\u0aad\u0ac0\u0b14\u0b19\u0d91\u0d97\u0d9ecy;\u440acute;\u4143\u0180aey\u0ab4\u0ab9\u0aberon;\u4147dil;\u4145;\u441d\u0180gsw\u0ac7\u0af0\u0b0eative\u0180MTV\u0ad3\u0adf\u0ae8ediumSpace;\u600bhi\u0100cn\u0ae6\u0ad8\xeb\u0ad9eryThi\xee\u0ad9ted\u0100GL\u0af8\u0b06reaterGreate\xf2\u0673essLes\xf3\u0a48Line;\u400ar;\uc000\ud835\udd11\u0200Bnpt\u0b22\u0b28\u0b37\u0b3areak;\u6060BreakingSpace;\u40a0f;\u6115\u0680;CDEGHLNPRSTV\u0b55\u0b56\u0b6a\u0b7c\u0ba1\u0beb\u0c04\u0c5e\u0c84\u0ca6\u0cd8\u0d61\u0d85\u6aec\u0100ou\u0b5b\u0b64ngruent;\u6262pCap;\u626doubleVerticalBar;\u6226\u0180lqx\u0b83\u0b8a\u0b9bement;\u6209ual\u0100;T\u0b92\u0b93\u6260ilde;\uc000\u2242\u0338ists;\u6204reater\u0380;EFGLST\u0bb6\u0bb7\u0bbd\u0bc9\u0bd3\u0bd8\u0be5\u626fqual;\u6271ullEqual;\uc000\u2267\u0338reater;\uc000\u226b\u0338ess;\u6279lantEqual;\uc000\u2a7e\u0338ilde;\u6275ump\u0144\u0bf2\u0bfdownHump;\uc000\u224e\u0338qual;\uc000\u224f\u0338e\u0100fs\u0c0a\u0c27tTriangle\u0180;BE\u0c1a\u0c1b\u0c21\u62eaar;\uc000\u29cf\u0338qual;\u62ecs\u0300;EGLST\u0c35\u0c36\u0c3c\u0c44\u0c4b\u0c58\u626equal;\u6270reater;\u6278ess;\uc000\u226a\u0338lantEqual;\uc000\u2a7d\u0338ilde;\u6274ested\u0100GL\u0c68\u0c79reaterGreater;\uc000\u2aa2\u0338essLess;\uc000\u2aa1\u0338recedes\u0180;ES\u0c92\u0c93\u0c9b\u6280qual;\uc000\u2aaf\u0338lantEqual;\u62e0\u0100ei\u0cab\u0cb9verseElement;\u620cghtTriangle\u0180;BE\u0ccb\u0ccc\u0cd2\u62ebar;\uc000\u29d0\u0338qual;\u62ed\u0100qu\u0cdd\u0d0cuareSu\u0100bp\u0ce8\u0cf9set\u0100;E\u0cf0\u0cf3\uc000\u228f\u0338qual;\u62e2erset\u0100;E\u0d03\u0d06\uc000\u2290\u0338qual;\u62e3\u0180bcp\u0d13\u0d24\u0d4eset\u0100;E\u0d1b\u0d1e\uc000\u2282\u20d2qual;\u6288ceeds\u0200;EST\u0d32\u0d33\u0d3b\u0d46\u6281qual;\uc000\u2ab0\u0338lantEqual;\u62e1ilde;\uc000\u227f\u0338erset\u0100;E\u0d58\u0d5b\uc000\u2283\u20d2qual;\u6289ilde\u0200;EFT\u0d6e\u0d6f\u0d75\u0d7f\u6241qual;\u6244ullEqual;\u6247ilde;\u6249erticalBar;\u6224cr;\uc000\ud835\udca9ilde\u803b\xd1\u40d1;\u439d\u0700Eacdfgmoprstuv\u0dbd\u0dc2\u0dc9\u0dd5\u0ddb\u0de0\u0de7\u0dfc\u0e02\u0e20\u0e22\u0e32\u0e3f\u0e44lig;\u4152cute\u803b\xd3\u40d3\u0100iy\u0dce\u0dd3rc\u803b\xd4\u40d4;\u441eblac;\u4150r;\uc000\ud835\udd12rave\u803b\xd2\u40d2\u0180aei\u0dee\u0df2\u0df6cr;\u414cga;\u43a9cron;\u439fpf;\uc000\ud835\udd46enCurly\u0100DQ\u0e0e\u0e1aoubleQuote;\u601cuote;\u6018;\u6a54\u0100cl\u0e27\u0e2cr;\uc000\ud835\udcaaash\u803b\xd8\u40d8i\u016c\u0e37\u0e3cde\u803b\xd5\u40d5es;\u6a37ml\u803b\xd6\u40d6er\u0100BP\u0e4b\u0e60\u0100ar\u0e50\u0e53r;\u603eac\u0100ek\u0e5a\u0e5c;\u63deet;\u63b4arenthesis;\u63dc\u0480acfhilors\u0e7f\u0e87\u0e8a\u0e8f\u0e92\u0e94\u0e9d\u0eb0\u0efcrtialD;\u6202y;\u441fr;\uc000\ud835\udd13i;\u43a6;\u43a0usMinus;\u40b1\u0100ip\u0ea2\u0eadncareplan\xe5\u069df;\u6119\u0200;eio\u0eb9\u0eba\u0ee0\u0ee4\u6abbcedes\u0200;EST\u0ec8\u0ec9\u0ecf\u0eda\u627aqual;\u6aaflantEqual;\u627cilde;\u627eme;\u6033\u0100dp\u0ee9\u0eeeuct;\u620fortion\u0100;a\u0225\u0ef9l;\u621d\u0100ci\u0f01\u0f06r;\uc000\ud835\udcab;\u43a8\u0200Ufos\u0f11\u0f16\u0f1b\u0f1fOT\u803b\"\u4022r;\uc000\ud835\udd14pf;\u611acr;\uc000\ud835\udcac\u0600BEacefhiorsu\u0f3e\u0f43\u0f47\u0f60\u0f73\u0fa7\u0faa\u0fad\u1096\u10a9\u10b4\u10bearr;\u6910G\u803b\xae\u40ae\u0180cnr\u0f4e\u0f53\u0f56ute;\u4154g;\u67ebr\u0100;t\u0f5c\u0f5d\u61a0l;\u6916\u0180aey\u0f67\u0f6c\u0f71ron;\u4158dil;\u4156;\u4420\u0100;v\u0f78\u0f79\u611cerse\u0100EU\u0f82\u0f99\u0100lq\u0f87\u0f8eement;\u620builibrium;\u61cbpEquilibrium;\u696fr\xbb\u0f79o;\u43a1ght\u0400ACDFTUVa\u0fc1\u0feb\u0ff3\u1022\u1028\u105b\u1087\u03d8\u0100nr\u0fc6\u0fd2gleBracket;\u67e9row\u0180;BL\u0fdc\u0fdd\u0fe1\u6192ar;\u61e5eftArrow;\u61c4eiling;\u6309o\u01f5\u0ff9\0\u1005bleBracket;\u67e7n\u01d4\u100a\0\u1014eeVector;\u695dector\u0100;B\u101d\u101e\u61c2ar;\u6955loor;\u630b\u0100er\u102d\u1043e\u0180;AV\u1035\u1036\u103c\u62a2rrow;\u61a6ector;\u695biangle\u0180;BE\u1050\u1051\u1055\u62b3ar;\u69d0qual;\u62b5p\u0180DTV\u1063\u106e\u1078ownVector;\u694feeVector;\u695cector\u0100;B\u1082\u1083\u61bear;\u6954ector\u0100;B\u1091\u1092\u61c0ar;\u6953\u0100pu\u109b\u109ef;\u611dndImplies;\u6970ightarrow;\u61db\u0100ch\u10b9\u10bcr;\u611b;\u61b1leDelayed;\u69f4\u0680HOacfhimoqstu\u10e4\u10f1\u10f7\u10fd\u1119\u111e\u1151\u1156\u1161\u1167\u11b5\u11bb\u11bf\u0100Cc\u10e9\u10eeHcy;\u4429y;\u4428FTcy;\u442ccute;\u415a\u0280;aeiy\u1108\u1109\u110e\u1113\u1117\u6abcron;\u4160dil;\u415erc;\u415c;\u4421r;\uc000\ud835\udd16ort\u0200DLRU\u112a\u1134\u113e\u1149ownArrow\xbb\u041eeftArrow\xbb\u089aightArrow\xbb\u0fddpArrow;\u6191gma;\u43a3allCircle;\u6218pf;\uc000\ud835\udd4a\u0272\u116d\0\0\u1170t;\u621aare\u0200;ISU\u117b\u117c\u1189\u11af\u65a1ntersection;\u6293u\u0100bp\u118f\u119eset\u0100;E\u1197\u1198\u628fqual;\u6291erset\u0100;E\u11a8\u11a9\u6290qual;\u6292nion;\u6294cr;\uc000\ud835\udcaear;\u62c6\u0200bcmp\u11c8\u11db\u1209\u120b\u0100;s\u11cd\u11ce\u62d0et\u0100;E\u11cd\u11d5qual;\u6286\u0100ch\u11e0\u1205eeds\u0200;EST\u11ed\u11ee\u11f4\u11ff\u627bqual;\u6ab0lantEqual;\u627dilde;\u627fTh\xe1\u0f8c;\u6211\u0180;es\u1212\u1213\u1223\u62d1rset\u0100;E\u121c\u121d\u6283qual;\u6287et\xbb\u1213\u0580HRSacfhiors\u123e\u1244\u1249\u1255\u125e\u1271\u1276\u129f\u12c2\u12c8\u12d1ORN\u803b\xde\u40deADE;\u6122\u0100Hc\u124e\u1252cy;\u440by;\u4426\u0100bu\u125a\u125c;\u4009;\u43a4\u0180aey\u1265\u126a\u126fron;\u4164dil;\u4162;\u4422r;\uc000\ud835\udd17\u0100ei\u127b\u1289\u01f2\u1280\0\u1287efore;\u6234a;\u4398\u0100cn\u128e\u1298kSpace;\uc000\u205f\u200aSpace;\u6009lde\u0200;EFT\u12ab\u12ac\u12b2\u12bc\u623cqual;\u6243ullEqual;\u6245ilde;\u6248pf;\uc000\ud835\udd4bipleDot;\u60db\u0100ct\u12d6\u12dbr;\uc000\ud835\udcafrok;\u4166\u0ae1\u12f7\u130e\u131a\u1326\0\u132c\u1331\0\0\0\0\0\u1338\u133d\u1377\u1385\0\u13ff\u1404\u140a\u1410\u0100cr\u12fb\u1301ute\u803b\xda\u40dar\u0100;o\u1307\u1308\u619fcir;\u6949r\u01e3\u1313\0\u1316y;\u440eve;\u416c\u0100iy\u131e\u1323rc\u803b\xdb\u40db;\u4423blac;\u4170r;\uc000\ud835\udd18rave\u803b\xd9\u40d9acr;\u416a\u0100di\u1341\u1369er\u0100BP\u1348\u135d\u0100ar\u134d\u1350r;\u405fac\u0100ek\u1357\u1359;\u63dfet;\u63b5arenthesis;\u63ddon\u0100;P\u1370\u1371\u62c3lus;\u628e\u0100gp\u137b\u137fon;\u4172f;\uc000\ud835\udd4c\u0400ADETadps\u1395\u13ae\u13b8\u13c4\u03e8\u13d2\u13d7\u13f3rrow\u0180;BD\u1150\u13a0\u13a4ar;\u6912ownArrow;\u61c5ownArrow;\u6195quilibrium;\u696eee\u0100;A\u13cb\u13cc\u62a5rrow;\u61a5own\xe1\u03f3er\u0100LR\u13de\u13e8eftArrow;\u6196ightArrow;\u6197i\u0100;l\u13f9\u13fa\u43d2on;\u43a5ing;\u416ecr;\uc000\ud835\udcb0ilde;\u4168ml\u803b\xdc\u40dc\u0480Dbcdefosv\u1427\u142c\u1430\u1433\u143e\u1485\u148a\u1490\u1496ash;\u62abar;\u6aeby;\u4412ash\u0100;l\u143b\u143c\u62a9;\u6ae6\u0100er\u1443\u1445;\u62c1\u0180bty\u144c\u1450\u147aar;\u6016\u0100;i\u144f\u1455cal\u0200BLST\u1461\u1465\u146a\u1474ar;\u6223ine;\u407ceparator;\u6758ilde;\u6240ThinSpace;\u600ar;\uc000\ud835\udd19pf;\uc000\ud835\udd4dcr;\uc000\ud835\udcb1dash;\u62aa\u0280cefos\u14a7\u14ac\u14b1\u14b6\u14bcirc;\u4174dge;\u62c0r;\uc000\ud835\udd1apf;\uc000\ud835\udd4ecr;\uc000\ud835\udcb2\u0200fios\u14cb\u14d0\u14d2\u14d8r;\uc000\ud835\udd1b;\u439epf;\uc000\ud835\udd4fcr;\uc000\ud835\udcb3\u0480AIUacfosu\u14f1\u14f5\u14f9\u14fd\u1504\u150f\u1514\u151a\u1520cy;\u442fcy;\u4407cy;\u442ecute\u803b\xdd\u40dd\u0100iy\u1509\u150drc;\u4176;\u442br;\uc000\ud835\udd1cpf;\uc000\ud835\udd50cr;\uc000\ud835\udcb4ml;\u4178\u0400Hacdefos\u1535\u1539\u153f\u154b\u154f\u155d\u1560\u1564cy;\u4416cute;\u4179\u0100ay\u1544\u1549ron;\u417d;\u4417ot;\u417b\u01f2\u1554\0\u155boWidt\xe8\u0ad9a;\u4396r;\u6128pf;\u6124cr;\uc000\ud835\udcb5\u0be1\u1583\u158a\u1590\0\u15b0\u15b6\u15bf\0\0\0\0\u15c6\u15db\u15eb\u165f\u166d\0\u1695\u169b\u16b2\u16b9\0\u16becute\u803b\xe1\u40e1reve;\u4103\u0300;Ediuy\u159c\u159d\u15a1\u15a3\u15a8\u15ad\u623e;\uc000\u223e\u0333;\u623frc\u803b\xe2\u40e2te\u80bb\xb4\u0306;\u4430lig\u803b\xe6\u40e6\u0100;r\xb2\u15ba;\uc000\ud835\udd1erave\u803b\xe0\u40e0\u0100ep\u15ca\u15d6\u0100fp\u15cf\u15d4sym;\u6135\xe8\u15d3ha;\u43b1\u0100ap\u15dfc\u0100cl\u15e4\u15e7r;\u4101g;\u6a3f\u0264\u15f0\0\0\u160a\u0280;adsv\u15fa\u15fb\u15ff\u1601\u1607\u6227nd;\u6a55;\u6a5clope;\u6a58;\u6a5a\u0380;elmrsz\u1618\u1619\u161b\u161e\u163f\u164f\u1659\u6220;\u69a4e\xbb\u1619sd\u0100;a\u1625\u1626\u6221\u0461\u1630\u1632\u1634\u1636\u1638\u163a\u163c\u163e;\u69a8;\u69a9;\u69aa;\u69ab;\u69ac;\u69ad;\u69ae;\u69aft\u0100;v\u1645\u1646\u621fb\u0100;d\u164c\u164d\u62be;\u699d\u0100pt\u1654\u1657h;\u6222\xbb\xb9arr;\u637c\u0100gp\u1663\u1667on;\u4105f;\uc000\ud835\udd52\u0380;Eaeiop\u12c1\u167b\u167d\u1682\u1684\u1687\u168a;\u6a70cir;\u6a6f;\u624ad;\u624bs;\u4027rox\u0100;e\u12c1\u1692\xf1\u1683ing\u803b\xe5\u40e5\u0180cty\u16a1\u16a6\u16a8r;\uc000\ud835\udcb6;\u402amp\u0100;e\u12c1\u16af\xf1\u0288ilde\u803b\xe3\u40e3ml\u803b\xe4\u40e4\u0100ci\u16c2\u16c8onin\xf4\u0272nt;\u6a11\u0800Nabcdefiklnoprsu\u16ed\u16f1\u1730\u173c\u1743\u1748\u1778\u177d\u17e0\u17e6\u1839\u1850\u170d\u193d\u1948\u1970ot;\u6aed\u0100cr\u16f6\u171ek\u0200ceps\u1700\u1705\u170d\u1713ong;\u624cpsilon;\u43f6rime;\u6035im\u0100;e\u171a\u171b\u623dq;\u62cd\u0176\u1722\u1726ee;\u62bded\u0100;g\u172c\u172d\u6305e\xbb\u172drk\u0100;t\u135c\u1737brk;\u63b6\u0100oy\u1701\u1741;\u4431quo;\u601e\u0280cmprt\u1753\u175b\u1761\u1764\u1768aus\u0100;e\u010a\u0109ptyv;\u69b0s\xe9\u170cno\xf5\u0113\u0180ahw\u176f\u1771\u1773;\u43b2;\u6136een;\u626cr;\uc000\ud835\udd1fg\u0380costuvw\u178d\u179d\u17b3\u17c1\u17d5\u17db\u17de\u0180aiu\u1794\u1796\u179a\xf0\u0760rc;\u65efp\xbb\u1371\u0180dpt\u17a4\u17a8\u17adot;\u6a00lus;\u6a01imes;\u6a02\u0271\u17b9\0\0\u17becup;\u6a06ar;\u6605riangle\u0100du\u17cd\u17d2own;\u65bdp;\u65b3plus;\u6a04e\xe5\u1444\xe5\u14adarow;\u690d\u0180ako\u17ed\u1826\u1835\u0100cn\u17f2\u1823k\u0180lst\u17fa\u05ab\u1802ozenge;\u69ebriangle\u0200;dlr\u1812\u1813\u1818\u181d\u65b4own;\u65beeft;\u65c2ight;\u65b8k;\u6423\u01b1\u182b\0\u1833\u01b2\u182f\0\u1831;\u6592;\u65914;\u6593ck;\u6588\u0100eo\u183e\u184d\u0100;q\u1843\u1846\uc000=\u20e5uiv;\uc000\u2261\u20e5t;\u6310\u0200ptwx\u1859\u185e\u1867\u186cf;\uc000\ud835\udd53\u0100;t\u13cb\u1863om\xbb\u13cctie;\u62c8\u0600DHUVbdhmptuv\u1885\u1896\u18aa\u18bb\u18d7\u18db\u18ec\u18ff\u1905\u190a\u1910\u1921\u0200LRlr\u188e\u1890\u1892\u1894;\u6557;\u6554;\u6556;\u6553\u0280;DUdu\u18a1\u18a2\u18a4\u18a6\u18a8\u6550;\u6566;\u6569;\u6564;\u6567\u0200LRlr\u18b3\u18b5\u18b7\u18b9;\u655d;\u655a;\u655c;\u6559\u0380;HLRhlr\u18ca\u18cb\u18cd\u18cf\u18d1\u18d3\u18d5\u6551;\u656c;\u6563;\u6560;\u656b;\u6562;\u655fox;\u69c9\u0200LRlr\u18e4\u18e6\u18e8\u18ea;\u6555;\u6552;\u6510;\u650c\u0280;DUdu\u06bd\u18f7\u18f9\u18fb\u18fd;\u6565;\u6568;\u652c;\u6534inus;\u629flus;\u629eimes;\u62a0\u0200LRlr\u1919\u191b\u191d\u191f;\u655b;\u6558;\u6518;\u6514\u0380;HLRhlr\u1930\u1931\u1933\u1935\u1937\u1939\u193b\u6502;\u656a;\u6561;\u655e;\u653c;\u6524;\u651c\u0100ev\u0123\u1942bar\u803b\xa6\u40a6\u0200ceio\u1951\u1956\u195a\u1960r;\uc000\ud835\udcb7mi;\u604fm\u0100;e\u171a\u171cl\u0180;bh\u1968\u1969\u196b\u405c;\u69c5sub;\u67c8\u016c\u1974\u197el\u0100;e\u1979\u197a\u6022t\xbb\u197ap\u0180;Ee\u012f\u1985\u1987;\u6aae\u0100;q\u06dc\u06db\u0ce1\u19a7\0\u19e8\u1a11\u1a15\u1a32\0\u1a37\u1a50\0\0\u1ab4\0\0\u1ac1\0\0\u1b21\u1b2e\u1b4d\u1b52\0\u1bfd\0\u1c0c\u0180cpr\u19ad\u19b2\u19ddute;\u4107\u0300;abcds\u19bf\u19c0\u19c4\u19ca\u19d5\u19d9\u6229nd;\u6a44rcup;\u6a49\u0100au\u19cf\u19d2p;\u6a4bp;\u6a47ot;\u6a40;\uc000\u2229\ufe00\u0100eo\u19e2\u19e5t;\u6041\xee\u0693\u0200aeiu\u19f0\u19fb\u1a01\u1a05\u01f0\u19f5\0\u19f8s;\u6a4don;\u410ddil\u803b\xe7\u40e7rc;\u4109ps\u0100;s\u1a0c\u1a0d\u6a4cm;\u6a50ot;\u410b\u0180dmn\u1a1b\u1a20\u1a26il\u80bb\xb8\u01adptyv;\u69b2t\u8100\xa2;e\u1a2d\u1a2e\u40a2r\xe4\u01b2r;\uc000\ud835\udd20\u0180cei\u1a3d\u1a40\u1a4dy;\u4447ck\u0100;m\u1a47\u1a48\u6713ark\xbb\u1a48;\u43c7r\u0380;Ecefms\u1a5f\u1a60\u1a62\u1a6b\u1aa4\u1aaa\u1aae\u65cb;\u69c3\u0180;el\u1a69\u1a6a\u1a6d\u42c6q;\u6257e\u0261\u1a74\0\0\u1a88rrow\u0100lr\u1a7c\u1a81eft;\u61baight;\u61bb\u0280RSacd\u1a92\u1a94\u1a96\u1a9a\u1a9f\xbb\u0f47;\u64c8st;\u629birc;\u629aash;\u629dnint;\u6a10id;\u6aefcir;\u69c2ubs\u0100;u\u1abb\u1abc\u6663it\xbb\u1abc\u02ec\u1ac7\u1ad4\u1afa\0\u1b0aon\u0100;e\u1acd\u1ace\u403a\u0100;q\xc7\xc6\u026d\u1ad9\0\0\u1ae2a\u0100;t\u1ade\u1adf\u402c;\u4040\u0180;fl\u1ae8\u1ae9\u1aeb\u6201\xee\u1160e\u0100mx\u1af1\u1af6ent\xbb\u1ae9e\xf3\u024d\u01e7\u1afe\0\u1b07\u0100;d\u12bb\u1b02ot;\u6a6dn\xf4\u0246\u0180fry\u1b10\u1b14\u1b17;\uc000\ud835\udd54o\xe4\u0254\u8100\xa9;s\u0155\u1b1dr;\u6117\u0100ao\u1b25\u1b29rr;\u61b5ss;\u6717\u0100cu\u1b32\u1b37r;\uc000\ud835\udcb8\u0100bp\u1b3c\u1b44\u0100;e\u1b41\u1b42\u6acf;\u6ad1\u0100;e\u1b49\u1b4a\u6ad0;\u6ad2dot;\u62ef\u0380delprvw\u1b60\u1b6c\u1b77\u1b82\u1bac\u1bd4\u1bf9arr\u0100lr\u1b68\u1b6a;\u6938;\u6935\u0270\u1b72\0\0\u1b75r;\u62dec;\u62dfarr\u0100;p\u1b7f\u1b80\u61b6;\u693d\u0300;bcdos\u1b8f\u1b90\u1b96\u1ba1\u1ba5\u1ba8\u622arcap;\u6a48\u0100au\u1b9b\u1b9ep;\u6a46p;\u6a4aot;\u628dr;\u6a45;\uc000\u222a\ufe00\u0200alrv\u1bb5\u1bbf\u1bde\u1be3rr\u0100;m\u1bbc\u1bbd\u61b7;\u693cy\u0180evw\u1bc7\u1bd4\u1bd8q\u0270\u1bce\0\0\u1bd2re\xe3\u1b73u\xe3\u1b75ee;\u62ceedge;\u62cfen\u803b\xa4\u40a4earrow\u0100lr\u1bee\u1bf3eft\xbb\u1b80ight\xbb\u1bbde\xe4\u1bdd\u0100ci\u1c01\u1c07onin\xf4\u01f7nt;\u6231lcty;\u632d\u0980AHabcdefhijlorstuwz\u1c38\u1c3b\u1c3f\u1c5d\u1c69\u1c75\u1c8a\u1c9e\u1cac\u1cb7\u1cfb\u1cff\u1d0d\u1d7b\u1d91\u1dab\u1dbb\u1dc6\u1dcdr\xf2\u0381ar;\u6965\u0200glrs\u1c48\u1c4d\u1c52\u1c54ger;\u6020eth;\u6138\xf2\u1133h\u0100;v\u1c5a\u1c5b\u6010\xbb\u090a\u016b\u1c61\u1c67arow;\u690fa\xe3\u0315\u0100ay\u1c6e\u1c73ron;\u410f;\u4434\u0180;ao\u0332\u1c7c\u1c84\u0100gr\u02bf\u1c81r;\u61catseq;\u6a77\u0180glm\u1c91\u1c94\u1c98\u803b\xb0\u40b0ta;\u43b4ptyv;\u69b1\u0100ir\u1ca3\u1ca8sht;\u697f;\uc000\ud835\udd21ar\u0100lr\u1cb3\u1cb5\xbb\u08dc\xbb\u101e\u0280aegsv\u1cc2\u0378\u1cd6\u1cdc\u1ce0m\u0180;os\u0326\u1cca\u1cd4nd\u0100;s\u0326\u1cd1uit;\u6666amma;\u43ddin;\u62f2\u0180;io\u1ce7\u1ce8\u1cf8\u40f7de\u8100\xf7;o\u1ce7\u1cf0ntimes;\u62c7n\xf8\u1cf7cy;\u4452c\u026f\u1d06\0\0\u1d0arn;\u631eop;\u630d\u0280lptuw\u1d18\u1d1d\u1d22\u1d49\u1d55lar;\u4024f;\uc000\ud835\udd55\u0280;emps\u030b\u1d2d\u1d37\u1d3d\u1d42q\u0100;d\u0352\u1d33ot;\u6251inus;\u6238lus;\u6214quare;\u62a1blebarwedg\xe5\xfan\u0180adh\u112e\u1d5d\u1d67ownarrow\xf3\u1c83arpoon\u0100lr\u1d72\u1d76ef\xf4\u1cb4igh\xf4\u1cb6\u0162\u1d7f\u1d85karo\xf7\u0f42\u026f\u1d8a\0\0\u1d8ern;\u631fop;\u630c\u0180cot\u1d98\u1da3\u1da6\u0100ry\u1d9d\u1da1;\uc000\ud835\udcb9;\u4455l;\u69f6rok;\u4111\u0100dr\u1db0\u1db4ot;\u62f1i\u0100;f\u1dba\u1816\u65bf\u0100ah\u1dc0\u1dc3r\xf2\u0429a\xf2\u0fa6angle;\u69a6\u0100ci\u1dd2\u1dd5y;\u445fgrarr;\u67ff\u0900Dacdefglmnopqrstux\u1e01\u1e09\u1e19\u1e38\u0578\u1e3c\u1e49\u1e61\u1e7e\u1ea5\u1eaf\u1ebd\u1ee1\u1f2a\u1f37\u1f44\u1f4e\u1f5a\u0100Do\u1e06\u1d34o\xf4\u1c89\u0100cs\u1e0e\u1e14ute\u803b\xe9\u40e9ter;\u6a6e\u0200aioy\u1e22\u1e27\u1e31\u1e36ron;\u411br\u0100;c\u1e2d\u1e2e\u6256\u803b\xea\u40ealon;\u6255;\u444dot;\u4117\u0100Dr\u1e41\u1e45ot;\u6252;\uc000\ud835\udd22\u0180;rs\u1e50\u1e51\u1e57\u6a9aave\u803b\xe8\u40e8\u0100;d\u1e5c\u1e5d\u6a96ot;\u6a98\u0200;ils\u1e6a\u1e6b\u1e72\u1e74\u6a99nters;\u63e7;\u6113\u0100;d\u1e79\u1e7a\u6a95ot;\u6a97\u0180aps\u1e85\u1e89\u1e97cr;\u4113ty\u0180;sv\u1e92\u1e93\u1e95\u6205et\xbb\u1e93p\u01001;\u1e9d\u1ea4\u0133\u1ea1\u1ea3;\u6004;\u6005\u6003\u0100gs\u1eaa\u1eac;\u414bp;\u6002\u0100gp\u1eb4\u1eb8on;\u4119f;\uc000\ud835\udd56\u0180als\u1ec4\u1ece\u1ed2r\u0100;s\u1eca\u1ecb\u62d5l;\u69e3us;\u6a71i\u0180;lv\u1eda\u1edb\u1edf\u43b5on\xbb\u1edb;\u43f5\u0200csuv\u1eea\u1ef3\u1f0b\u1f23\u0100io\u1eef\u1e31rc\xbb\u1e2e\u0269\u1ef9\0\0\u1efb\xed\u0548ant\u0100gl\u1f02\u1f06tr\xbb\u1e5dess\xbb\u1e7a\u0180aei\u1f12\u1f16\u1f1als;\u403dst;\u625fv\u0100;D\u0235\u1f20D;\u6a78parsl;\u69e5\u0100Da\u1f2f\u1f33ot;\u6253rr;\u6971\u0180cdi\u1f3e\u1f41\u1ef8r;\u612fo\xf4\u0352\u0100ah\u1f49\u1f4b;\u43b7\u803b\xf0\u40f0\u0100mr\u1f53\u1f57l\u803b\xeb\u40ebo;\u60ac\u0180cip\u1f61\u1f64\u1f67l;\u4021s\xf4\u056e\u0100eo\u1f6c\u1f74ctatio\xee\u0559nential\xe5\u0579\u09e1\u1f92\0\u1f9e\0\u1fa1\u1fa7\0\0\u1fc6\u1fcc\0\u1fd3\0\u1fe6\u1fea\u2000\0\u2008\u205allingdotse\xf1\u1e44y;\u4444male;\u6640\u0180ilr\u1fad\u1fb3\u1fc1lig;\u8000\ufb03\u0269\u1fb9\0\0\u1fbdg;\u8000\ufb00ig;\u8000\ufb04;\uc000\ud835\udd23lig;\u8000\ufb01lig;\uc000fj\u0180alt\u1fd9\u1fdc\u1fe1t;\u666dig;\u8000\ufb02ns;\u65b1of;\u4192\u01f0\u1fee\0\u1ff3f;\uc000\ud835\udd57\u0100ak\u05bf\u1ff7\u0100;v\u1ffc\u1ffd\u62d4;\u6ad9artint;\u6a0d\u0100ao\u200c\u2055\u0100cs\u2011\u2052\u03b1\u201a\u2030\u2038\u2045\u2048\0\u2050\u03b2\u2022\u2025\u2027\u202a\u202c\0\u202e\u803b\xbd\u40bd;\u6153\u803b\xbc\u40bc;\u6155;\u6159;\u615b\u01b3\u2034\0\u2036;\u6154;\u6156\u02b4\u203e\u2041\0\0\u2043\u803b\xbe\u40be;\u6157;\u615c5;\u6158\u01b6\u204c\0\u204e;\u615a;\u615d8;\u615el;\u6044wn;\u6322cr;\uc000\ud835\udcbb\u0880Eabcdefgijlnorstv\u2082\u2089\u209f\u20a5\u20b0\u20b4\u20f0\u20f5\u20fa\u20ff\u2103\u2112\u2138\u0317\u213e\u2152\u219e\u0100;l\u064d\u2087;\u6a8c\u0180cmp\u2090\u2095\u209dute;\u41f5ma\u0100;d\u209c\u1cda\u43b3;\u6a86reve;\u411f\u0100iy\u20aa\u20aerc;\u411d;\u4433ot;\u4121\u0200;lqs\u063e\u0642\u20bd\u20c9\u0180;qs\u063e\u064c\u20c4lan\xf4\u0665\u0200;cdl\u0665\u20d2\u20d5\u20e5c;\u6aa9ot\u0100;o\u20dc\u20dd\u6a80\u0100;l\u20e2\u20e3\u6a82;\u6a84\u0100;e\u20ea\u20ed\uc000\u22db\ufe00s;\u6a94r;\uc000\ud835\udd24\u0100;g\u0673\u061bmel;\u6137cy;\u4453\u0200;Eaj\u065a\u210c\u210e\u2110;\u6a92;\u6aa5;\u6aa4\u0200Eaes\u211b\u211d\u2129\u2134;\u6269p\u0100;p\u2123\u2124\u6a8arox\xbb\u2124\u0100;q\u212e\u212f\u6a88\u0100;q\u212e\u211bim;\u62e7pf;\uc000\ud835\udd58\u0100ci\u2143\u2146r;\u610am\u0180;el\u066b\u214e\u2150;\u6a8e;\u6a90\u8300>;cdlqr\u05ee\u2160\u216a\u216e\u2173\u2179\u0100ci\u2165\u2167;\u6aa7r;\u6a7aot;\u62d7Par;\u6995uest;\u6a7c\u0280adels\u2184\u216a\u2190\u0656\u219b\u01f0\u2189\0\u218epro\xf8\u209er;\u6978q\u0100lq\u063f\u2196les\xf3\u2088i\xed\u066b\u0100en\u21a3\u21adrtneqq;\uc000\u2269\ufe00\xc5\u21aa\u0500Aabcefkosy\u21c4\u21c7\u21f1\u21f5\u21fa\u2218\u221d\u222f\u2268\u227dr\xf2\u03a0\u0200ilmr\u21d0\u21d4\u21d7\u21dbrs\xf0\u1484f\xbb\u2024il\xf4\u06a9\u0100dr\u21e0\u21e4cy;\u444a\u0180;cw\u08f4\u21eb\u21efir;\u6948;\u61adar;\u610firc;\u4125\u0180alr\u2201\u220e\u2213rts\u0100;u\u2209\u220a\u6665it\xbb\u220alip;\u6026con;\u62b9r;\uc000\ud835\udd25s\u0100ew\u2223\u2229arow;\u6925arow;\u6926\u0280amopr\u223a\u223e\u2243\u225e\u2263rr;\u61fftht;\u623bk\u0100lr\u2249\u2253eftarrow;\u61a9ightarrow;\u61aaf;\uc000\ud835\udd59bar;\u6015\u0180clt\u226f\u2274\u2278r;\uc000\ud835\udcbdas\xe8\u21f4rok;\u4127\u0100bp\u2282\u2287ull;\u6043hen\xbb\u1c5b\u0ae1\u22a3\0\u22aa\0\u22b8\u22c5\u22ce\0\u22d5\u22f3\0\0\u22f8\u2322\u2367\u2362\u237f\0\u2386\u23aa\u23b4cute\u803b\xed\u40ed\u0180;iy\u0771\u22b0\u22b5rc\u803b\xee\u40ee;\u4438\u0100cx\u22bc\u22bfy;\u4435cl\u803b\xa1\u40a1\u0100fr\u039f\u22c9;\uc000\ud835\udd26rave\u803b\xec\u40ec\u0200;ino\u073e\u22dd\u22e9\u22ee\u0100in\u22e2\u22e6nt;\u6a0ct;\u622dfin;\u69dcta;\u6129lig;\u4133\u0180aop\u22fe\u231a\u231d\u0180cgt\u2305\u2308\u2317r;\u412b\u0180elp\u071f\u230f\u2313in\xe5\u078ear\xf4\u0720h;\u4131f;\u62b7ed;\u41b5\u0280;cfot\u04f4\u232c\u2331\u233d\u2341are;\u6105in\u0100;t\u2338\u2339\u621eie;\u69dddo\xf4\u2319\u0280;celp\u0757\u234c\u2350\u235b\u2361al;\u62ba\u0100gr\u2355\u2359er\xf3\u1563\xe3\u234darhk;\u6a17rod;\u6a3c\u0200cgpt\u236f\u2372\u2376\u237by;\u4451on;\u412ff;\uc000\ud835\udd5aa;\u43b9uest\u803b\xbf\u40bf\u0100ci\u238a\u238fr;\uc000\ud835\udcben\u0280;Edsv\u04f4\u239b\u239d\u23a1\u04f3;\u62f9ot;\u62f5\u0100;v\u23a6\u23a7\u62f4;\u62f3\u0100;i\u0777\u23aelde;\u4129\u01eb\u23b8\0\u23bccy;\u4456l\u803b\xef\u40ef\u0300cfmosu\u23cc\u23d7\u23dc\u23e1\u23e7\u23f5\u0100iy\u23d1\u23d5rc;\u4135;\u4439r;\uc000\ud835\udd27ath;\u4237pf;\uc000\ud835\udd5b\u01e3\u23ec\0\u23f1r;\uc000\ud835\udcbfrcy;\u4458kcy;\u4454\u0400acfghjos\u240b\u2416\u2422\u2427\u242d\u2431\u2435\u243bppa\u0100;v\u2413\u2414\u43ba;\u43f0\u0100ey\u241b\u2420dil;\u4137;\u443ar;\uc000\ud835\udd28reen;\u4138cy;\u4445cy;\u445cpf;\uc000\ud835\udd5ccr;\uc000\ud835\udcc0\u0b80ABEHabcdefghjlmnoprstuv\u2470\u2481\u2486\u248d\u2491\u250e\u253d\u255a\u2580\u264e\u265e\u2665\u2679\u267d\u269a\u26b2\u26d8\u275d\u2768\u278b\u27c0\u2801\u2812\u0180art\u2477\u247a\u247cr\xf2\u09c6\xf2\u0395ail;\u691barr;\u690e\u0100;g\u0994\u248b;\u6a8bar;\u6962\u0963\u24a5\0\u24aa\0\u24b1\0\0\0\0\0\u24b5\u24ba\0\u24c6\u24c8\u24cd\0\u24f9ute;\u413amptyv;\u69b4ra\xee\u084cbda;\u43bbg\u0180;dl\u088e\u24c1\u24c3;\u6991\xe5\u088e;\u6a85uo\u803b\xab\u40abr\u0400;bfhlpst\u0899\u24de\u24e6\u24e9\u24eb\u24ee\u24f1\u24f5\u0100;f\u089d\u24e3s;\u691fs;\u691d\xeb\u2252p;\u61abl;\u6939im;\u6973l;\u61a2\u0180;ae\u24ff\u2500\u2504\u6aabil;\u6919\u0100;s\u2509\u250a\u6aad;\uc000\u2aad\ufe00\u0180abr\u2515\u2519\u251drr;\u690crk;\u6772\u0100ak\u2522\u252cc\u0100ek\u2528\u252a;\u407b;\u405b\u0100es\u2531\u2533;\u698bl\u0100du\u2539\u253b;\u698f;\u698d\u0200aeuy\u2546\u254b\u2556\u2558ron;\u413e\u0100di\u2550\u2554il;\u413c\xec\u08b0\xe2\u2529;\u443b\u0200cqrs\u2563\u2566\u256d\u257da;\u6936uo\u0100;r\u0e19\u1746\u0100du\u2572\u2577har;\u6967shar;\u694bh;\u61b2\u0280;fgqs\u258b\u258c\u0989\u25f3\u25ff\u6264t\u0280ahlrt\u2598\u25a4\u25b7\u25c2\u25e8rrow\u0100;t\u0899\u25a1a\xe9\u24f6arpoon\u0100du\u25af\u25b4own\xbb\u045ap\xbb\u0966eftarrows;\u61c7ight\u0180ahs\u25cd\u25d6\u25derrow\u0100;s\u08f4\u08a7arpoon\xf3\u0f98quigarro\xf7\u21f0hreetimes;\u62cb\u0180;qs\u258b\u0993\u25falan\xf4\u09ac\u0280;cdgs\u09ac\u260a\u260d\u261d\u2628c;\u6aa8ot\u0100;o\u2614\u2615\u6a7f\u0100;r\u261a\u261b\u6a81;\u6a83\u0100;e\u2622\u2625\uc000\u22da\ufe00s;\u6a93\u0280adegs\u2633\u2639\u263d\u2649\u264bppro\xf8\u24c6ot;\u62d6q\u0100gq\u2643\u2645\xf4\u0989gt\xf2\u248c\xf4\u099bi\xed\u09b2\u0180ilr\u2655\u08e1\u265asht;\u697c;\uc000\ud835\udd29\u0100;E\u099c\u2663;\u6a91\u0161\u2669\u2676r\u0100du\u25b2\u266e\u0100;l\u0965\u2673;\u696alk;\u6584cy;\u4459\u0280;acht\u0a48\u2688\u268b\u2691\u2696r\xf2\u25c1orne\xf2\u1d08ard;\u696bri;\u65fa\u0100io\u269f\u26a4dot;\u4140ust\u0100;a\u26ac\u26ad\u63b0che\xbb\u26ad\u0200Eaes\u26bb\u26bd\u26c9\u26d4;\u6268p\u0100;p\u26c3\u26c4\u6a89rox\xbb\u26c4\u0100;q\u26ce\u26cf\u6a87\u0100;q\u26ce\u26bbim;\u62e6\u0400abnoptwz\u26e9\u26f4\u26f7\u271a\u272f\u2741\u2747\u2750\u0100nr\u26ee\u26f1g;\u67ecr;\u61fdr\xeb\u08c1g\u0180lmr\u26ff\u270d\u2714eft\u0100ar\u09e6\u2707ight\xe1\u09f2apsto;\u67fcight\xe1\u09fdparrow\u0100lr\u2725\u2729ef\xf4\u24edight;\u61ac\u0180afl\u2736\u2739\u273dr;\u6985;\uc000\ud835\udd5dus;\u6a2dimes;\u6a34\u0161\u274b\u274fst;\u6217\xe1\u134e\u0180;ef\u2757\u2758\u1800\u65cange\xbb\u2758ar\u0100;l\u2764\u2765\u4028t;\u6993\u0280achmt\u2773\u2776\u277c\u2785\u2787r\xf2\u08a8orne\xf2\u1d8car\u0100;d\u0f98\u2783;\u696d;\u600eri;\u62bf\u0300achiqt\u2798\u279d\u0a40\u27a2\u27ae\u27bbquo;\u6039r;\uc000\ud835\udcc1m\u0180;eg\u09b2\u27aa\u27ac;\u6a8d;\u6a8f\u0100bu\u252a\u27b3o\u0100;r\u0e1f\u27b9;\u601arok;\u4142\u8400<;cdhilqr\u082b\u27d2\u2639\u27dc\u27e0\u27e5\u27ea\u27f0\u0100ci\u27d7\u27d9;\u6aa6r;\u6a79re\xe5\u25f2mes;\u62c9arr;\u6976uest;\u6a7b\u0100Pi\u27f5\u27f9ar;\u6996\u0180;ef\u2800\u092d\u181b\u65c3r\u0100du\u2807\u280dshar;\u694ahar;\u6966\u0100en\u2817\u2821rtneqq;\uc000\u2268\ufe00\xc5\u281e\u0700Dacdefhilnopsu\u2840\u2845\u2882\u288e\u2893\u28a0\u28a5\u28a8\u28da\u28e2\u28e4\u0a83\u28f3\u2902Dot;\u623a\u0200clpr\u284e\u2852\u2863\u287dr\u803b\xaf\u40af\u0100et\u2857\u2859;\u6642\u0100;e\u285e\u285f\u6720se\xbb\u285f\u0100;s\u103b\u2868to\u0200;dlu\u103b\u2873\u2877\u287bow\xee\u048cef\xf4\u090f\xf0\u13d1ker;\u65ae\u0100oy\u2887\u288cmma;\u6a29;\u443cash;\u6014asuredangle\xbb\u1626r;\uc000\ud835\udd2ao;\u6127\u0180cdn\u28af\u28b4\u28c9ro\u803b\xb5\u40b5\u0200;acd\u1464\u28bd\u28c0\u28c4s\xf4\u16a7ir;\u6af0ot\u80bb\xb7\u01b5us\u0180;bd\u28d2\u1903\u28d3\u6212\u0100;u\u1d3c\u28d8;\u6a2a\u0163\u28de\u28e1p;\u6adb\xf2\u2212\xf0\u0a81\u0100dp\u28e9\u28eeels;\u62a7f;\uc000\ud835\udd5e\u0100ct\u28f8\u28fdr;\uc000\ud835\udcc2pos\xbb\u159d\u0180;lm\u2909\u290a\u290d\u43bctimap;\u62b8\u0c00GLRVabcdefghijlmoprstuvw\u2942\u2953\u297e\u2989\u2998\u29da\u29e9\u2a15\u2a1a\u2a58\u2a5d\u2a83\u2a95\u2aa4\u2aa8\u2b04\u2b07\u2b44\u2b7f\u2bae\u2c34\u2c67\u2c7c\u2ce9\u0100gt\u2947\u294b;\uc000\u22d9\u0338\u0100;v\u2950\u0bcf\uc000\u226b\u20d2\u0180elt\u295a\u2972\u2976ft\u0100ar\u2961\u2967rrow;\u61cdightarrow;\u61ce;\uc000\u22d8\u0338\u0100;v\u297b\u0c47\uc000\u226a\u20d2ightarrow;\u61cf\u0100Dd\u298e\u2993ash;\u62afash;\u62ae\u0280bcnpt\u29a3\u29a7\u29ac\u29b1\u29ccla\xbb\u02deute;\u4144g;\uc000\u2220\u20d2\u0280;Eiop\u0d84\u29bc\u29c0\u29c5\u29c8;\uc000\u2a70\u0338d;\uc000\u224b\u0338s;\u4149ro\xf8\u0d84ur\u0100;a\u29d3\u29d4\u666el\u0100;s\u29d3\u0b38\u01f3\u29df\0\u29e3p\u80bb\xa0\u0b37mp\u0100;e\u0bf9\u0c00\u0280aeouy\u29f4\u29fe\u2a03\u2a10\u2a13\u01f0\u29f9\0\u29fb;\u6a43on;\u4148dil;\u4146ng\u0100;d\u0d7e\u2a0aot;\uc000\u2a6d\u0338p;\u6a42;\u443dash;\u6013\u0380;Aadqsx\u0b92\u2a29\u2a2d\u2a3b\u2a41\u2a45\u2a50rr;\u61d7r\u0100hr\u2a33\u2a36k;\u6924\u0100;o\u13f2\u13f0ot;\uc000\u2250\u0338ui\xf6\u0b63\u0100ei\u2a4a\u2a4ear;\u6928\xed\u0b98ist\u0100;s\u0ba0\u0b9fr;\uc000\ud835\udd2b\u0200Eest\u0bc5\u2a66\u2a79\u2a7c\u0180;qs\u0bbc\u2a6d\u0be1\u0180;qs\u0bbc\u0bc5\u2a74lan\xf4\u0be2i\xed\u0bea\u0100;r\u0bb6\u2a81\xbb\u0bb7\u0180Aap\u2a8a\u2a8d\u2a91r\xf2\u2971rr;\u61aear;\u6af2\u0180;sv\u0f8d\u2a9c\u0f8c\u0100;d\u2aa1\u2aa2\u62fc;\u62facy;\u445a\u0380AEadest\u2ab7\u2aba\u2abe\u2ac2\u2ac5\u2af6\u2af9r\xf2\u2966;\uc000\u2266\u0338rr;\u619ar;\u6025\u0200;fqs\u0c3b\u2ace\u2ae3\u2aeft\u0100ar\u2ad4\u2ad9rro\xf7\u2ac1ightarro\xf7\u2a90\u0180;qs\u0c3b\u2aba\u2aealan\xf4\u0c55\u0100;s\u0c55\u2af4\xbb\u0c36i\xed\u0c5d\u0100;r\u0c35\u2afei\u0100;e\u0c1a\u0c25i\xe4\u0d90\u0100pt\u2b0c\u2b11f;\uc000\ud835\udd5f\u8180\xac;in\u2b19\u2b1a\u2b36\u40acn\u0200;Edv\u0b89\u2b24\u2b28\u2b2e;\uc000\u22f9\u0338ot;\uc000\u22f5\u0338\u01e1\u0b89\u2b33\u2b35;\u62f7;\u62f6i\u0100;v\u0cb8\u2b3c\u01e1\u0cb8\u2b41\u2b43;\u62fe;\u62fd\u0180aor\u2b4b\u2b63\u2b69r\u0200;ast\u0b7b\u2b55\u2b5a\u2b5flle\xec\u0b7bl;\uc000\u2afd\u20e5;\uc000\u2202\u0338lint;\u6a14\u0180;ce\u0c92\u2b70\u2b73u\xe5\u0ca5\u0100;c\u0c98\u2b78\u0100;e\u0c92\u2b7d\xf1\u0c98\u0200Aait\u2b88\u2b8b\u2b9d\u2ba7r\xf2\u2988rr\u0180;cw\u2b94\u2b95\u2b99\u619b;\uc000\u2933\u0338;\uc000\u219d\u0338ghtarrow\xbb\u2b95ri\u0100;e\u0ccb\u0cd6\u0380chimpqu\u2bbd\u2bcd\u2bd9\u2b04\u0b78\u2be4\u2bef\u0200;cer\u0d32\u2bc6\u0d37\u2bc9u\xe5\u0d45;\uc000\ud835\udcc3ort\u026d\u2b05\0\0\u2bd6ar\xe1\u2b56m\u0100;e\u0d6e\u2bdf\u0100;q\u0d74\u0d73su\u0100bp\u2beb\u2bed\xe5\u0cf8\xe5\u0d0b\u0180bcp\u2bf6\u2c11\u2c19\u0200;Ees\u2bff\u2c00\u0d22\u2c04\u6284;\uc000\u2ac5\u0338et\u0100;e\u0d1b\u2c0bq\u0100;q\u0d23\u2c00c\u0100;e\u0d32\u2c17\xf1\u0d38\u0200;Ees\u2c22\u2c23\u0d5f\u2c27\u6285;\uc000\u2ac6\u0338et\u0100;e\u0d58\u2c2eq\u0100;q\u0d60\u2c23\u0200gilr\u2c3d\u2c3f\u2c45\u2c47\xec\u0bd7lde\u803b\xf1\u40f1\xe7\u0c43iangle\u0100lr\u2c52\u2c5ceft\u0100;e\u0c1a\u2c5a\xf1\u0c26ight\u0100;e\u0ccb\u2c65\xf1\u0cd7\u0100;m\u2c6c\u2c6d\u43bd\u0180;es\u2c74\u2c75\u2c79\u4023ro;\u6116p;\u6007\u0480DHadgilrs\u2c8f\u2c94\u2c99\u2c9e\u2ca3\u2cb0\u2cb6\u2cd3\u2ce3ash;\u62adarr;\u6904p;\uc000\u224d\u20d2ash;\u62ac\u0100et\u2ca8\u2cac;\uc000\u2265\u20d2;\uc000>\u20d2nfin;\u69de\u0180Aet\u2cbd\u2cc1\u2cc5rr;\u6902;\uc000\u2264\u20d2\u0100;r\u2cca\u2ccd\uc000<\u20d2ie;\uc000\u22b4\u20d2\u0100At\u2cd8\u2cdcrr;\u6903rie;\uc000\u22b5\u20d2im;\uc000\u223c\u20d2\u0180Aan\u2cf0\u2cf4\u2d02rr;\u61d6r\u0100hr\u2cfa\u2cfdk;\u6923\u0100;o\u13e7\u13e5ear;\u6927\u1253\u1a95\0\0\0\0\0\0\0\0\0\0\0\0\0\u2d2d\0\u2d38\u2d48\u2d60\u2d65\u2d72\u2d84\u1b07\0\0\u2d8d\u2dab\0\u2dc8\u2dce\0\u2ddc\u2e19\u2e2b\u2e3e\u2e43\u0100cs\u2d31\u1a97ute\u803b\xf3\u40f3\u0100iy\u2d3c\u2d45r\u0100;c\u1a9e\u2d42\u803b\xf4\u40f4;\u443e\u0280abios\u1aa0\u2d52\u2d57\u01c8\u2d5alac;\u4151v;\u6a38old;\u69bclig;\u4153\u0100cr\u2d69\u2d6dir;\u69bf;\uc000\ud835\udd2c\u036f\u2d79\0\0\u2d7c\0\u2d82n;\u42dbave\u803b\xf2\u40f2;\u69c1\u0100bm\u2d88\u0df4ar;\u69b5\u0200acit\u2d95\u2d98\u2da5\u2da8r\xf2\u1a80\u0100ir\u2d9d\u2da0r;\u69beoss;\u69bbn\xe5\u0e52;\u69c0\u0180aei\u2db1\u2db5\u2db9cr;\u414dga;\u43c9\u0180cdn\u2dc0\u2dc5\u01cdron;\u43bf;\u69b6pf;\uc000\ud835\udd60\u0180ael\u2dd4\u2dd7\u01d2r;\u69b7rp;\u69b9\u0380;adiosv\u2dea\u2deb\u2dee\u2e08\u2e0d\u2e10\u2e16\u6228r\xf2\u1a86\u0200;efm\u2df7\u2df8\u2e02\u2e05\u6a5dr\u0100;o\u2dfe\u2dff\u6134f\xbb\u2dff\u803b\xaa\u40aa\u803b\xba\u40bagof;\u62b6r;\u6a56lope;\u6a57;\u6a5b\u0180clo\u2e1f\u2e21\u2e27\xf2\u2e01ash\u803b\xf8\u40f8l;\u6298i\u016c\u2e2f\u2e34de\u803b\xf5\u40f5es\u0100;a\u01db\u2e3as;\u6a36ml\u803b\xf6\u40f6bar;\u633d\u0ae1\u2e5e\0\u2e7d\0\u2e80\u2e9d\0\u2ea2\u2eb9\0\0\u2ecb\u0e9c\0\u2f13\0\0\u2f2b\u2fbc\0\u2fc8r\u0200;ast\u0403\u2e67\u2e72\u0e85\u8100\xb6;l\u2e6d\u2e6e\u40b6le\xec\u0403\u0269\u2e78\0\0\u2e7bm;\u6af3;\u6afdy;\u443fr\u0280cimpt\u2e8b\u2e8f\u2e93\u1865\u2e97nt;\u4025od;\u402eil;\u6030enk;\u6031r;\uc000\ud835\udd2d\u0180imo\u2ea8\u2eb0\u2eb4\u0100;v\u2ead\u2eae\u43c6;\u43d5ma\xf4\u0a76ne;\u660e\u0180;tv\u2ebf\u2ec0\u2ec8\u43c0chfork\xbb\u1ffd;\u43d6\u0100au\u2ecf\u2edfn\u0100ck\u2ed5\u2eddk\u0100;h\u21f4\u2edb;\u610e\xf6\u21f4s\u0480;abcdemst\u2ef3\u2ef4\u1908\u2ef9\u2efd\u2f04\u2f06\u2f0a\u2f0e\u402bcir;\u6a23ir;\u6a22\u0100ou\u1d40\u2f02;\u6a25;\u6a72n\u80bb\xb1\u0e9dim;\u6a26wo;\u6a27\u0180ipu\u2f19\u2f20\u2f25ntint;\u6a15f;\uc000\ud835\udd61nd\u803b\xa3\u40a3\u0500;Eaceinosu\u0ec8\u2f3f\u2f41\u2f44\u2f47\u2f81\u2f89\u2f92\u2f7e\u2fb6;\u6ab3p;\u6ab7u\xe5\u0ed9\u0100;c\u0ece\u2f4c\u0300;acens\u0ec8\u2f59\u2f5f\u2f66\u2f68\u2f7eppro\xf8\u2f43urlye\xf1\u0ed9\xf1\u0ece\u0180aes\u2f6f\u2f76\u2f7approx;\u6ab9qq;\u6ab5im;\u62e8i\xed\u0edfme\u0100;s\u2f88\u0eae\u6032\u0180Eas\u2f78\u2f90\u2f7a\xf0\u2f75\u0180dfp\u0eec\u2f99\u2faf\u0180als\u2fa0\u2fa5\u2faalar;\u632eine;\u6312urf;\u6313\u0100;t\u0efb\u2fb4\xef\u0efbrel;\u62b0\u0100ci\u2fc0\u2fc5r;\uc000\ud835\udcc5;\u43c8ncsp;\u6008\u0300fiopsu\u2fda\u22e2\u2fdf\u2fe5\u2feb\u2ff1r;\uc000\ud835\udd2epf;\uc000\ud835\udd62rime;\u6057cr;\uc000\ud835\udcc6\u0180aeo\u2ff8\u3009\u3013t\u0100ei\u2ffe\u3005rnion\xf3\u06b0nt;\u6a16st\u0100;e\u3010\u3011\u403f\xf1\u1f19\xf4\u0f14\u0a80ABHabcdefhilmnoprstux\u3040\u3051\u3055\u3059\u30e0\u310e\u312b\u3147\u3162\u3172\u318e\u3206\u3215\u3224\u3229\u3258\u326e\u3272\u3290\u32b0\u32b7\u0180art\u3047\u304a\u304cr\xf2\u10b3\xf2\u03ddail;\u691car\xf2\u1c65ar;\u6964\u0380cdenqrt\u3068\u3075\u3078\u307f\u308f\u3094\u30cc\u0100eu\u306d\u3071;\uc000\u223d\u0331te;\u4155i\xe3\u116emptyv;\u69b3g\u0200;del\u0fd1\u3089\u308b\u308d;\u6992;\u69a5\xe5\u0fd1uo\u803b\xbb\u40bbr\u0580;abcfhlpstw\u0fdc\u30ac\u30af\u30b7\u30b9\u30bc\u30be\u30c0\u30c3\u30c7\u30cap;\u6975\u0100;f\u0fe0\u30b4s;\u6920;\u6933s;\u691e\xeb\u225d\xf0\u272el;\u6945im;\u6974l;\u61a3;\u619d\u0100ai\u30d1\u30d5il;\u691ao\u0100;n\u30db\u30dc\u6236al\xf3\u0f1e\u0180abr\u30e7\u30ea\u30eer\xf2\u17e5rk;\u6773\u0100ak\u30f3\u30fdc\u0100ek\u30f9\u30fb;\u407d;\u405d\u0100es\u3102\u3104;\u698cl\u0100du\u310a\u310c;\u698e;\u6990\u0200aeuy\u3117\u311c\u3127\u3129ron;\u4159\u0100di\u3121\u3125il;\u4157\xec\u0ff2\xe2\u30fa;\u4440\u0200clqs\u3134\u3137\u313d\u3144a;\u6937dhar;\u6969uo\u0100;r\u020e\u020dh;\u61b3\u0180acg\u314e\u315f\u0f44l\u0200;ips\u0f78\u3158\u315b\u109cn\xe5\u10bbar\xf4\u0fa9t;\u65ad\u0180ilr\u3169\u1023\u316esht;\u697d;\uc000\ud835\udd2f\u0100ao\u3177\u3186r\u0100du\u317d\u317f\xbb\u047b\u0100;l\u1091\u3184;\u696c\u0100;v\u318b\u318c\u43c1;\u43f1\u0180gns\u3195\u31f9\u31fcht\u0300ahlrst\u31a4\u31b0\u31c2\u31d8\u31e4\u31eerrow\u0100;t\u0fdc\u31ada\xe9\u30c8arpoon\u0100du\u31bb\u31bfow\xee\u317ep\xbb\u1092eft\u0100ah\u31ca\u31d0rrow\xf3\u0feaarpoon\xf3\u0551ightarrows;\u61c9quigarro\xf7\u30cbhreetimes;\u62ccg;\u42daingdotse\xf1\u1f32\u0180ahm\u320d\u3210\u3213r\xf2\u0feaa\xf2\u0551;\u600foust\u0100;a\u321e\u321f\u63b1che\xbb\u321fmid;\u6aee\u0200abpt\u3232\u323d\u3240\u3252\u0100nr\u3237\u323ag;\u67edr;\u61fer\xeb\u1003\u0180afl\u3247\u324a\u324er;\u6986;\uc000\ud835\udd63us;\u6a2eimes;\u6a35\u0100ap\u325d\u3267r\u0100;g\u3263\u3264\u4029t;\u6994olint;\u6a12ar\xf2\u31e3\u0200achq\u327b\u3280\u10bc\u3285quo;\u603ar;\uc000\ud835\udcc7\u0100bu\u30fb\u328ao\u0100;r\u0214\u0213\u0180hir\u3297\u329b\u32a0re\xe5\u31f8mes;\u62cai\u0200;efl\u32aa\u1059\u1821\u32ab\u65b9tri;\u69celuhar;\u6968;\u611e\u0d61\u32d5\u32db\u32df\u332c\u3338\u3371\0\u337a\u33a4\0\0\u33ec\u33f0\0\u3428\u3448\u345a\u34ad\u34b1\u34ca\u34f1\0\u3616\0\0\u3633cute;\u415bqu\xef\u27ba\u0500;Eaceinpsy\u11ed\u32f3\u32f5\u32ff\u3302\u330b\u330f\u331f\u3326\u3329;\u6ab4\u01f0\u32fa\0\u32fc;\u6ab8on;\u4161u\xe5\u11fe\u0100;d\u11f3\u3307il;\u415frc;\u415d\u0180Eas\u3316\u3318\u331b;\u6ab6p;\u6abaim;\u62e9olint;\u6a13i\xed\u1204;\u4441ot\u0180;be\u3334\u1d47\u3335\u62c5;\u6a66\u0380Aacmstx\u3346\u334a\u3357\u335b\u335e\u3363\u336drr;\u61d8r\u0100hr\u3350\u3352\xeb\u2228\u0100;o\u0a36\u0a34t\u803b\xa7\u40a7i;\u403bwar;\u6929m\u0100in\u3369\xf0nu\xf3\xf1t;\u6736r\u0100;o\u3376\u2055\uc000\ud835\udd30\u0200acoy\u3382\u3386\u3391\u33a0rp;\u666f\u0100hy\u338b\u338fcy;\u4449;\u4448rt\u026d\u3399\0\0\u339ci\xe4\u1464ara\xec\u2e6f\u803b\xad\u40ad\u0100gm\u33a8\u33b4ma\u0180;fv\u33b1\u33b2\u33b2\u43c3;\u43c2\u0400;deglnpr\u12ab\u33c5\u33c9\u33ce\u33d6\u33de\u33e1\u33e6ot;\u6a6a\u0100;q\u12b1\u12b0\u0100;E\u33d3\u33d4\u6a9e;\u6aa0\u0100;E\u33db\u33dc\u6a9d;\u6a9fe;\u6246lus;\u6a24arr;\u6972ar\xf2\u113d\u0200aeit\u33f8\u3408\u340f\u3417\u0100ls\u33fd\u3404lsetm\xe9\u336ahp;\u6a33parsl;\u69e4\u0100dl\u1463\u3414e;\u6323\u0100;e\u341c\u341d\u6aaa\u0100;s\u3422\u3423\u6aac;\uc000\u2aac\ufe00\u0180flp\u342e\u3433\u3442tcy;\u444c\u0100;b\u3438\u3439\u402f\u0100;a\u343e\u343f\u69c4r;\u633ff;\uc000\ud835\udd64a\u0100dr\u344d\u0402es\u0100;u\u3454\u3455\u6660it\xbb\u3455\u0180csu\u3460\u3479\u349f\u0100au\u3465\u346fp\u0100;s\u1188\u346b;\uc000\u2293\ufe00p\u0100;s\u11b4\u3475;\uc000\u2294\ufe00u\u0100bp\u347f\u348f\u0180;es\u1197\u119c\u3486et\u0100;e\u1197\u348d\xf1\u119d\u0180;es\u11a8\u11ad\u3496et\u0100;e\u11a8\u349d\xf1\u11ae\u0180;af\u117b\u34a6\u05b0r\u0165\u34ab\u05b1\xbb\u117car\xf2\u1148\u0200cemt\u34b9\u34be\u34c2\u34c5r;\uc000\ud835\udcc8tm\xee\xf1i\xec\u3415ar\xe6\u11be\u0100ar\u34ce\u34d5r\u0100;f\u34d4\u17bf\u6606\u0100an\u34da\u34edight\u0100ep\u34e3\u34eapsilo\xee\u1ee0h\xe9\u2eafs\xbb\u2852\u0280bcmnp\u34fb\u355e\u1209\u358b\u358e\u0480;Edemnprs\u350e\u350f\u3511\u3515\u351e\u3523\u352c\u3531\u3536\u6282;\u6ac5ot;\u6abd\u0100;d\u11da\u351aot;\u6ac3ult;\u6ac1\u0100Ee\u3528\u352a;\u6acb;\u628alus;\u6abfarr;\u6979\u0180eiu\u353d\u3552\u3555t\u0180;en\u350e\u3545\u354bq\u0100;q\u11da\u350feq\u0100;q\u352b\u3528m;\u6ac7\u0100bp\u355a\u355c;\u6ad5;\u6ad3c\u0300;acens\u11ed\u356c\u3572\u3579\u357b\u3326ppro\xf8\u32faurlye\xf1\u11fe\xf1\u11f3\u0180aes\u3582\u3588\u331bppro\xf8\u331aq\xf1\u3317g;\u666a\u0680123;Edehlmnps\u35a9\u35ac\u35af\u121c\u35b2\u35b4\u35c0\u35c9\u35d5\u35da\u35df\u35e8\u35ed\u803b\xb9\u40b9\u803b\xb2\u40b2\u803b\xb3\u40b3;\u6ac6\u0100os\u35b9\u35bct;\u6abeub;\u6ad8\u0100;d\u1222\u35c5ot;\u6ac4s\u0100ou\u35cf\u35d2l;\u67c9b;\u6ad7arr;\u697bult;\u6ac2\u0100Ee\u35e4\u35e6;\u6acc;\u628blus;\u6ac0\u0180eiu\u35f4\u3609\u360ct\u0180;en\u121c\u35fc\u3602q\u0100;q\u1222\u35b2eq\u0100;q\u35e7\u35e4m;\u6ac8\u0100bp\u3611\u3613;\u6ad4;\u6ad6\u0180Aan\u361c\u3620\u362drr;\u61d9r\u0100hr\u3626\u3628\xeb\u222e\u0100;o\u0a2b\u0a29war;\u692alig\u803b\xdf\u40df\u0be1\u3651\u365d\u3660\u12ce\u3673\u3679\0\u367e\u36c2\0\0\0\0\0\u36db\u3703\0\u3709\u376c\0\0\0\u3787\u0272\u3656\0\0\u365bget;\u6316;\u43c4r\xeb\u0e5f\u0180aey\u3666\u366b\u3670ron;\u4165dil;\u4163;\u4442lrec;\u6315r;\uc000\ud835\udd31\u0200eiko\u3686\u369d\u36b5\u36bc\u01f2\u368b\0\u3691e\u01004f\u1284\u1281a\u0180;sv\u3698\u3699\u369b\u43b8ym;\u43d1\u0100cn\u36a2\u36b2k\u0100as\u36a8\u36aeppro\xf8\u12c1im\xbb\u12acs\xf0\u129e\u0100as\u36ba\u36ae\xf0\u12c1rn\u803b\xfe\u40fe\u01ec\u031f\u36c6\u22e7es\u8180\xd7;bd\u36cf\u36d0\u36d8\u40d7\u0100;a\u190f\u36d5r;\u6a31;\u6a30\u0180eps\u36e1\u36e3\u3700\xe1\u2a4d\u0200;bcf\u0486\u36ec\u36f0\u36f4ot;\u6336ir;\u6af1\u0100;o\u36f9\u36fc\uc000\ud835\udd65rk;\u6ada\xe1\u3362rime;\u6034\u0180aip\u370f\u3712\u3764d\xe5\u1248\u0380adempst\u3721\u374d\u3740\u3751\u3757\u375c\u375fngle\u0280;dlqr\u3730\u3731\u3736\u3740\u3742\u65b5own\xbb\u1dbbeft\u0100;e\u2800\u373e\xf1\u092e;\u625cight\u0100;e\u32aa\u374b\xf1\u105aot;\u65ecinus;\u6a3alus;\u6a39b;\u69cdime;\u6a3bezium;\u63e2\u0180cht\u3772\u377d\u3781\u0100ry\u3777\u377b;\uc000\ud835\udcc9;\u4446cy;\u445brok;\u4167\u0100io\u378b\u378ex\xf4\u1777head\u0100lr\u3797\u37a0eftarro\xf7\u084fightarrow\xbb\u0f5d\u0900AHabcdfghlmoprstuw\u37d0\u37d3\u37d7\u37e4\u37f0\u37fc\u380e\u381c\u3823\u3834\u3851\u385d\u386b\u38a9\u38cc\u38d2\u38ea\u38f6r\xf2\u03edar;\u6963\u0100cr\u37dc\u37e2ute\u803b\xfa\u40fa\xf2\u1150r\u01e3\u37ea\0\u37edy;\u445eve;\u416d\u0100iy\u37f5\u37farc\u803b\xfb\u40fb;\u4443\u0180abh\u3803\u3806\u380br\xf2\u13adlac;\u4171a\xf2\u13c3\u0100ir\u3813\u3818sht;\u697e;\uc000\ud835\udd32rave\u803b\xf9\u40f9\u0161\u3827\u3831r\u0100lr\u382c\u382e\xbb\u0957\xbb\u1083lk;\u6580\u0100ct\u3839\u384d\u026f\u383f\0\0\u384arn\u0100;e\u3845\u3846\u631cr\xbb\u3846op;\u630fri;\u65f8\u0100al\u3856\u385acr;\u416b\u80bb\xa8\u0349\u0100gp\u3862\u3866on;\u4173f;\uc000\ud835\udd66\u0300adhlsu\u114b\u3878\u387d\u1372\u3891\u38a0own\xe1\u13b3arpoon\u0100lr\u3888\u388cef\xf4\u382digh\xf4\u382fi\u0180;hl\u3899\u389a\u389c\u43c5\xbb\u13faon\xbb\u389aparrows;\u61c8\u0180cit\u38b0\u38c4\u38c8\u026f\u38b6\0\0\u38c1rn\u0100;e\u38bc\u38bd\u631dr\xbb\u38bdop;\u630eng;\u416fri;\u65f9cr;\uc000\ud835\udcca\u0180dir\u38d9\u38dd\u38e2ot;\u62f0lde;\u4169i\u0100;f\u3730\u38e8\xbb\u1813\u0100am\u38ef\u38f2r\xf2\u38a8l\u803b\xfc\u40fcangle;\u69a7\u0780ABDacdeflnoprsz\u391c\u391f\u3929\u392d\u39b5\u39b8\u39bd\u39df\u39e4\u39e8\u39f3\u39f9\u39fd\u3a01\u3a20r\xf2\u03f7ar\u0100;v\u3926\u3927\u6ae8;\u6ae9as\xe8\u03e1\u0100nr\u3932\u3937grt;\u699c\u0380eknprst\u34e3\u3946\u394b\u3952\u395d\u3964\u3996app\xe1\u2415othin\xe7\u1e96\u0180hir\u34eb\u2ec8\u3959op\xf4\u2fb5\u0100;h\u13b7\u3962\xef\u318d\u0100iu\u3969\u396dgm\xe1\u33b3\u0100bp\u3972\u3984setneq\u0100;q\u397d\u3980\uc000\u228a\ufe00;\uc000\u2acb\ufe00setneq\u0100;q\u398f\u3992\uc000\u228b\ufe00;\uc000\u2acc\ufe00\u0100hr\u399b\u399fet\xe1\u369ciangle\u0100lr\u39aa\u39afeft\xbb\u0925ight\xbb\u1051y;\u4432ash\xbb\u1036\u0180elr\u39c4\u39d2\u39d7\u0180;be\u2dea\u39cb\u39cfar;\u62bbq;\u625alip;\u62ee\u0100bt\u39dc\u1468a\xf2\u1469r;\uc000\ud835\udd33tr\xe9\u39aesu\u0100bp\u39ef\u39f1\xbb\u0d1c\xbb\u0d59pf;\uc000\ud835\udd67ro\xf0\u0efbtr\xe9\u39b4\u0100cu\u3a06\u3a0br;\uc000\ud835\udccb\u0100bp\u3a10\u3a18n\u0100Ee\u3980\u3a16\xbb\u397en\u0100Ee\u3992\u3a1e\xbb\u3990igzag;\u699a\u0380cefoprs\u3a36\u3a3b\u3a56\u3a5b\u3a54\u3a61\u3a6airc;\u4175\u0100di\u3a40\u3a51\u0100bg\u3a45\u3a49ar;\u6a5fe\u0100;q\u15fa\u3a4f;\u6259erp;\u6118r;\uc000\ud835\udd34pf;\uc000\ud835\udd68\u0100;e\u1479\u3a66at\xe8\u1479cr;\uc000\ud835\udccc\u0ae3\u178e\u3a87\0\u3a8b\0\u3a90\u3a9b\0\0\u3a9d\u3aa8\u3aab\u3aaf\0\0\u3ac3\u3ace\0\u3ad8\u17dc\u17dftr\xe9\u17d1r;\uc000\ud835\udd35\u0100Aa\u3a94\u3a97r\xf2\u03c3r\xf2\u09f6;\u43be\u0100Aa\u3aa1\u3aa4r\xf2\u03b8r\xf2\u09eba\xf0\u2713is;\u62fb\u0180dpt\u17a4\u3ab5\u3abe\u0100fl\u3aba\u17a9;\uc000\ud835\udd69im\xe5\u17b2\u0100Aa\u3ac7\u3acar\xf2\u03cer\xf2\u0a01\u0100cq\u3ad2\u17b8r;\uc000\ud835\udccd\u0100pt\u17d6\u3adcr\xe9\u17d4\u0400acefiosu\u3af0\u3afd\u3b08\u3b0c\u3b11\u3b15\u3b1b\u3b21c\u0100uy\u3af6\u3afbte\u803b\xfd\u40fd;\u444f\u0100iy\u3b02\u3b06rc;\u4177;\u444bn\u803b\xa5\u40a5r;\uc000\ud835\udd36cy;\u4457pf;\uc000\ud835\udd6acr;\uc000\ud835\udcce\u0100cm\u3b26\u3b29y;\u444el\u803b\xff\u40ff\u0500acdefhiosw\u3b42\u3b48\u3b54\u3b58\u3b64\u3b69\u3b6d\u3b74\u3b7a\u3b80cute;\u417a\u0100ay\u3b4d\u3b52ron;\u417e;\u4437ot;\u417c\u0100et\u3b5d\u3b61tr\xe6\u155fa;\u43b6r;\uc000\ud835\udd37cy;\u4436grarr;\u61ddpf;\uc000\ud835\udd6bcr;\uc000\ud835\udccf\u0100jn\u3b85\u3b87;\u600dj;\u600c" -    .split("") -    .map(function (c) { return c.charCodeAt(0); })); - -},{}],5:[function(require,module,exports){ -"use strict"; -// Generated using scripts/write-decode-map.ts -Object.defineProperty(exports, "__esModule", { value: true }); -exports.default = new Uint16Array( -// prettier-ignore -"\u0200aglq\t\x15\x18\x1b\u026d\x0f\0\0\x12p;\u4026os;\u4027t;\u403et;\u403cuot;\u4022" -    .split("") -    .map(function (c) { return c.charCodeAt(0); })); - -},{}],6:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getDocumentMode = exports.isConforming = void 0; -const html_js_1 = require("./html.js"); -//Const -const VALID_DOCTYPE_NAME = 'html'; -const VALID_SYSTEM_ID = 'about:legacy-compat'; -const QUIRKS_MODE_SYSTEM_ID = 'http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd'; -const QUIRKS_MODE_PUBLIC_ID_PREFIXES = [ -    '+//silmaril//dtd html pro v0r11 19970101//', -    '-//as//dtd html 3.0 aswedit + extensions//', -    '-//advasoft ltd//dtd html 3.0 aswedit + extensions//', -    '-//ietf//dtd html 2.0 level 1//', -    '-//ietf//dtd html 2.0 level 2//', -    '-//ietf//dtd html 2.0 strict level 1//', -    '-//ietf//dtd html 2.0 strict level 2//', -    '-//ietf//dtd html 2.0 strict//', -    '-//ietf//dtd html 2.0//', -    '-//ietf//dtd html 2.1e//', -    '-//ietf//dtd html 3.0//', -    '-//ietf//dtd html 3.2 final//', -    '-//ietf//dtd html 3.2//', -    '-//ietf//dtd html 3//', -    '-//ietf//dtd html level 0//', -    '-//ietf//dtd html level 1//', -    '-//ietf//dtd html level 2//', -    '-//ietf//dtd html level 3//', -    '-//ietf//dtd html strict level 0//', -    '-//ietf//dtd html strict level 1//', -    '-//ietf//dtd html strict level 2//', -    '-//ietf//dtd html strict level 3//', -    '-//ietf//dtd html strict//', -    '-//ietf//dtd html//', -    '-//metrius//dtd metrius presentational//', -    '-//microsoft//dtd internet explorer 2.0 html strict//', -    '-//microsoft//dtd internet explorer 2.0 html//', -    '-//microsoft//dtd internet explorer 2.0 tables//', -    '-//microsoft//dtd internet explorer 3.0 html strict//', -    '-//microsoft//dtd internet explorer 3.0 html//', -    '-//microsoft//dtd internet explorer 3.0 tables//', -    '-//netscape comm. corp.//dtd html//', -    '-//netscape comm. corp.//dtd strict html//', -    "-//o'reilly and associates//dtd html 2.0//", -    "-//o'reilly and associates//dtd html extended 1.0//", -    "-//o'reilly and associates//dtd html extended relaxed 1.0//", -    '-//sq//dtd html 2.0 hotmetal + extensions//', -    '-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//', -    '-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//', -    '-//spyglass//dtd html 2.0 extended//', -    '-//sun microsystems corp.//dtd hotjava html//', -    '-//sun microsystems corp.//dtd hotjava strict html//', -    '-//w3c//dtd html 3 1995-03-24//', -    '-//w3c//dtd html 3.2 draft//', -    '-//w3c//dtd html 3.2 final//', -    '-//w3c//dtd html 3.2//', -    '-//w3c//dtd html 3.2s draft//', -    '-//w3c//dtd html 4.0 frameset//', -    '-//w3c//dtd html 4.0 transitional//', -    '-//w3c//dtd html experimental 19960712//', -    '-//w3c//dtd html experimental 970421//', -    '-//w3c//dtd w3 html//', -    '-//w3o//dtd w3 html 3.0//', -    '-//webtechs//dtd mozilla html 2.0//', -    '-//webtechs//dtd mozilla html//', -]; -const QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES = [ -    ...QUIRKS_MODE_PUBLIC_ID_PREFIXES, -    '-//w3c//dtd html 4.01 frameset//', -    '-//w3c//dtd html 4.01 transitional//', -]; -const QUIRKS_MODE_PUBLIC_IDS = new Set([ -    '-//w3o//dtd w3 html strict 3.0//en//', -    '-/w3c/dtd html 4.0 transitional/en', -    'html', -]); -const LIMITED_QUIRKS_PUBLIC_ID_PREFIXES = ['-//w3c//dtd xhtml 1.0 frameset//', '-//w3c//dtd xhtml 1.0 transitional//']; -const LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES = [ -    ...LIMITED_QUIRKS_PUBLIC_ID_PREFIXES, -    '-//w3c//dtd html 4.01 frameset//', -    '-//w3c//dtd html 4.01 transitional//', -]; -//Utils -function hasPrefix(publicId, prefixes) { -    return prefixes.some((prefix) => publicId.startsWith(prefix)); -} -//API -function isConforming(token) { -    return (token.name === VALID_DOCTYPE_NAME && -        token.publicId === null && -        (token.systemId === null || token.systemId === VALID_SYSTEM_ID)); -} -exports.isConforming = isConforming; -function getDocumentMode(token) { -    if (token.name !== VALID_DOCTYPE_NAME) { -        return html_js_1.DOCUMENT_MODE.QUIRKS; -    } -    const { systemId } = token; -    if (systemId && systemId.toLowerCase() === QUIRKS_MODE_SYSTEM_ID) { -        return html_js_1.DOCUMENT_MODE.QUIRKS; -    } -    let { publicId } = token; -    if (publicId !== null) { -        publicId = publicId.toLowerCase(); -        if (QUIRKS_MODE_PUBLIC_IDS.has(publicId)) { -            return html_js_1.DOCUMENT_MODE.QUIRKS; -        } -        let prefixes = systemId === null ? QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES : QUIRKS_MODE_PUBLIC_ID_PREFIXES; -        if (hasPrefix(publicId, prefixes)) { -            return html_js_1.DOCUMENT_MODE.QUIRKS; -        } -        prefixes = -            systemId === null ? LIMITED_QUIRKS_PUBLIC_ID_PREFIXES : LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES; -        if (hasPrefix(publicId, prefixes)) { -            return html_js_1.DOCUMENT_MODE.LIMITED_QUIRKS; -        } -    } -    return html_js_1.DOCUMENT_MODE.NO_QUIRKS; -} -exports.getDocumentMode = getDocumentMode; - -},{"./html.js":9}],7:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ERR = void 0; -var ERR; -(function (ERR) { -    ERR["controlCharacterInInputStream"] = "control-character-in-input-stream"; -    ERR["noncharacterInInputStream"] = "noncharacter-in-input-stream"; -    ERR["surrogateInInputStream"] = "surrogate-in-input-stream"; -    ERR["nonVoidHtmlElementStartTagWithTrailingSolidus"] = "non-void-html-element-start-tag-with-trailing-solidus"; -    ERR["endTagWithAttributes"] = "end-tag-with-attributes"; -    ERR["endTagWithTrailingSolidus"] = "end-tag-with-trailing-solidus"; -    ERR["unexpectedSolidusInTag"] = "unexpected-solidus-in-tag"; -    ERR["unexpectedNullCharacter"] = "unexpected-null-character"; -    ERR["unexpectedQuestionMarkInsteadOfTagName"] = "unexpected-question-mark-instead-of-tag-name"; -    ERR["invalidFirstCharacterOfTagName"] = "invalid-first-character-of-tag-name"; -    ERR["unexpectedEqualsSignBeforeAttributeName"] = "unexpected-equals-sign-before-attribute-name"; -    ERR["missingEndTagName"] = "missing-end-tag-name"; -    ERR["unexpectedCharacterInAttributeName"] = "unexpected-character-in-attribute-name"; -    ERR["unknownNamedCharacterReference"] = "unknown-named-character-reference"; -    ERR["missingSemicolonAfterCharacterReference"] = "missing-semicolon-after-character-reference"; -    ERR["unexpectedCharacterAfterDoctypeSystemIdentifier"] = "unexpected-character-after-doctype-system-identifier"; -    ERR["unexpectedCharacterInUnquotedAttributeValue"] = "unexpected-character-in-unquoted-attribute-value"; -    ERR["eofBeforeTagName"] = "eof-before-tag-name"; -    ERR["eofInTag"] = "eof-in-tag"; -    ERR["missingAttributeValue"] = "missing-attribute-value"; -    ERR["missingWhitespaceBetweenAttributes"] = "missing-whitespace-between-attributes"; -    ERR["missingWhitespaceAfterDoctypePublicKeyword"] = "missing-whitespace-after-doctype-public-keyword"; -    ERR["missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers"] = "missing-whitespace-between-doctype-public-and-system-identifiers"; -    ERR["missingWhitespaceAfterDoctypeSystemKeyword"] = "missing-whitespace-after-doctype-system-keyword"; -    ERR["missingQuoteBeforeDoctypePublicIdentifier"] = "missing-quote-before-doctype-public-identifier"; -    ERR["missingQuoteBeforeDoctypeSystemIdentifier"] = "missing-quote-before-doctype-system-identifier"; -    ERR["missingDoctypePublicIdentifier"] = "missing-doctype-public-identifier"; -    ERR["missingDoctypeSystemIdentifier"] = "missing-doctype-system-identifier"; -    ERR["abruptDoctypePublicIdentifier"] = "abrupt-doctype-public-identifier"; -    ERR["abruptDoctypeSystemIdentifier"] = "abrupt-doctype-system-identifier"; -    ERR["cdataInHtmlContent"] = "cdata-in-html-content"; -    ERR["incorrectlyOpenedComment"] = "incorrectly-opened-comment"; -    ERR["eofInScriptHtmlCommentLikeText"] = "eof-in-script-html-comment-like-text"; -    ERR["eofInDoctype"] = "eof-in-doctype"; -    ERR["nestedComment"] = "nested-comment"; -    ERR["abruptClosingOfEmptyComment"] = "abrupt-closing-of-empty-comment"; -    ERR["eofInComment"] = "eof-in-comment"; -    ERR["incorrectlyClosedComment"] = "incorrectly-closed-comment"; -    ERR["eofInCdata"] = "eof-in-cdata"; -    ERR["absenceOfDigitsInNumericCharacterReference"] = "absence-of-digits-in-numeric-character-reference"; -    ERR["nullCharacterReference"] = "null-character-reference"; -    ERR["surrogateCharacterReference"] = "surrogate-character-reference"; -    ERR["characterReferenceOutsideUnicodeRange"] = "character-reference-outside-unicode-range"; -    ERR["controlCharacterReference"] = "control-character-reference"; -    ERR["noncharacterCharacterReference"] = "noncharacter-character-reference"; -    ERR["missingWhitespaceBeforeDoctypeName"] = "missing-whitespace-before-doctype-name"; -    ERR["missingDoctypeName"] = "missing-doctype-name"; -    ERR["invalidCharacterSequenceAfterDoctypeName"] = "invalid-character-sequence-after-doctype-name"; -    ERR["duplicateAttribute"] = "duplicate-attribute"; -    ERR["nonConformingDoctype"] = "non-conforming-doctype"; -    ERR["missingDoctype"] = "missing-doctype"; -    ERR["misplacedDoctype"] = "misplaced-doctype"; -    ERR["endTagWithoutMatchingOpenElement"] = "end-tag-without-matching-open-element"; -    ERR["closingOfElementWithOpenChildElements"] = "closing-of-element-with-open-child-elements"; -    ERR["disallowedContentInNoscriptInHead"] = "disallowed-content-in-noscript-in-head"; -    ERR["openElementsLeftAfterEof"] = "open-elements-left-after-eof"; -    ERR["abandonedHeadElementChild"] = "abandoned-head-element-child"; -    ERR["misplacedStartTagForHeadElement"] = "misplaced-start-tag-for-head-element"; -    ERR["nestedNoscriptInHead"] = "nested-noscript-in-head"; -    ERR["eofInElementThatCanContainOnlyText"] = "eof-in-element-that-can-contain-only-text"; -})(ERR = exports.ERR || (exports.ERR = {})); - -},{}],8:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.isIntegrationPoint = exports.adjustTokenSVGTagName = exports.adjustTokenXMLAttrs = exports.adjustTokenSVGAttrs = exports.adjustTokenMathMLAttrs = exports.causesExit = exports.SVG_TAG_NAMES_ADJUSTMENT_MAP = void 0; -const html_js_1 = require("./html.js"); -//MIME types -const MIME_TYPES = { -    TEXT_HTML: 'text/html', -    APPLICATION_XML: 'application/xhtml+xml', -}; -//Attributes -const DEFINITION_URL_ATTR = 'definitionurl'; -const ADJUSTED_DEFINITION_URL_ATTR = 'definitionURL'; -const SVG_ATTRS_ADJUSTMENT_MAP = new Map([ -    'attributeName', -    'attributeType', -    'baseFrequency', -    'baseProfile', -    'calcMode', -    'clipPathUnits', -    'diffuseConstant', -    'edgeMode', -    'filterUnits', -    'glyphRef', -    'gradientTransform', -    'gradientUnits', -    'kernelMatrix', -    'kernelUnitLength', -    'keyPoints', -    'keySplines', -    'keyTimes', -    'lengthAdjust', -    'limitingConeAngle', -    'markerHeight', -    'markerUnits', -    'markerWidth', -    'maskContentUnits', -    'maskUnits', -    'numOctaves', -    'pathLength', -    'patternContentUnits', -    'patternTransform', -    'patternUnits', -    'pointsAtX', -    'pointsAtY', -    'pointsAtZ', -    'preserveAlpha', -    'preserveAspectRatio', -    'primitiveUnits', -    'refX', -    'refY', -    'repeatCount', -    'repeatDur', -    'requiredExtensions', -    'requiredFeatures', -    'specularConstant', -    'specularExponent', -    'spreadMethod', -    'startOffset', -    'stdDeviation', -    'stitchTiles', -    'surfaceScale', -    'systemLanguage', -    'tableValues', -    'targetX', -    'targetY', -    'textLength', -    'viewBox', -    'viewTarget', -    'xChannelSelector', -    'yChannelSelector', -    'zoomAndPan', -].map((attr) => [attr.toLowerCase(), attr])); -const XML_ATTRS_ADJUSTMENT_MAP = new Map([ -    ['xlink:actuate', { prefix: 'xlink', name: 'actuate', namespace: html_js_1.NS.XLINK }], -    ['xlink:arcrole', { prefix: 'xlink', name: 'arcrole', namespace: html_js_1.NS.XLINK }], -    ['xlink:href', { prefix: 'xlink', name: 'href', namespace: html_js_1.NS.XLINK }], -    ['xlink:role', { prefix: 'xlink', name: 'role', namespace: html_js_1.NS.XLINK }], -    ['xlink:show', { prefix: 'xlink', name: 'show', namespace: html_js_1.NS.XLINK }], -    ['xlink:title', { prefix: 'xlink', name: 'title', namespace: html_js_1.NS.XLINK }], -    ['xlink:type', { prefix: 'xlink', name: 'type', namespace: html_js_1.NS.XLINK }], -    ['xml:base', { prefix: 'xml', name: 'base', namespace: html_js_1.NS.XML }], -    ['xml:lang', { prefix: 'xml', name: 'lang', namespace: html_js_1.NS.XML }], -    ['xml:space', { prefix: 'xml', name: 'space', namespace: html_js_1.NS.XML }], -    ['xmlns', { prefix: '', name: 'xmlns', namespace: html_js_1.NS.XMLNS }], -    ['xmlns:xlink', { prefix: 'xmlns', name: 'xlink', namespace: html_js_1.NS.XMLNS }], -]); -//SVG tag names adjustment map -exports.SVG_TAG_NAMES_ADJUSTMENT_MAP = new Map([ -    'altGlyph', -    'altGlyphDef', -    'altGlyphItem', -    'animateColor', -    'animateMotion', -    'animateTransform', -    'clipPath', -    'feBlend', -    'feColorMatrix', -    'feComponentTransfer', -    'feComposite', -    'feConvolveMatrix', -    'feDiffuseLighting', -    'feDisplacementMap', -    'feDistantLight', -    'feFlood', -    'feFuncA', -    'feFuncB', -    'feFuncG', -    'feFuncR', -    'feGaussianBlur', -    'feImage', -    'feMerge', -    'feMergeNode', -    'feMorphology', -    'feOffset', -    'fePointLight', -    'feSpecularLighting', -    'feSpotLight', -    'feTile', -    'feTurbulence', -    'foreignObject', -    'glyphRef', -    'linearGradient', -    'radialGradient', -    'textPath', -].map((tn) => [tn.toLowerCase(), tn])); -//Tags that causes exit from foreign content -const EXITS_FOREIGN_CONTENT = new Set([ -    html_js_1.TAG_ID.B, -    html_js_1.TAG_ID.BIG, -    html_js_1.TAG_ID.BLOCKQUOTE, -    html_js_1.TAG_ID.BODY, -    html_js_1.TAG_ID.BR, -    html_js_1.TAG_ID.CENTER, -    html_js_1.TAG_ID.CODE, -    html_js_1.TAG_ID.DD, -    html_js_1.TAG_ID.DIV, -    html_js_1.TAG_ID.DL, -    html_js_1.TAG_ID.DT, -    html_js_1.TAG_ID.EM, -    html_js_1.TAG_ID.EMBED, -    html_js_1.TAG_ID.H1, -    html_js_1.TAG_ID.H2, -    html_js_1.TAG_ID.H3, -    html_js_1.TAG_ID.H4, -    html_js_1.TAG_ID.H5, -    html_js_1.TAG_ID.H6, -    html_js_1.TAG_ID.HEAD, -    html_js_1.TAG_ID.HR, -    html_js_1.TAG_ID.I, -    html_js_1.TAG_ID.IMG, -    html_js_1.TAG_ID.LI, -    html_js_1.TAG_ID.LISTING, -    html_js_1.TAG_ID.MENU, -    html_js_1.TAG_ID.META, -    html_js_1.TAG_ID.NOBR, -    html_js_1.TAG_ID.OL, -    html_js_1.TAG_ID.P, -    html_js_1.TAG_ID.PRE, -    html_js_1.TAG_ID.RUBY, -    html_js_1.TAG_ID.S, -    html_js_1.TAG_ID.SMALL, -    html_js_1.TAG_ID.SPAN, -    html_js_1.TAG_ID.STRONG, -    html_js_1.TAG_ID.STRIKE, -    html_js_1.TAG_ID.SUB, -    html_js_1.TAG_ID.SUP, -    html_js_1.TAG_ID.TABLE, -    html_js_1.TAG_ID.TT, -    html_js_1.TAG_ID.U, -    html_js_1.TAG_ID.UL, -    html_js_1.TAG_ID.VAR, -]); -//Check exit from foreign content -function causesExit(startTagToken) { -    const tn = startTagToken.tagID; -    const isFontWithAttrs = tn === html_js_1.TAG_ID.FONT && -        startTagToken.attrs.some(({ name }) => name === html_js_1.ATTRS.COLOR || name === html_js_1.ATTRS.SIZE || name === html_js_1.ATTRS.FACE); -    return isFontWithAttrs || EXITS_FOREIGN_CONTENT.has(tn); -} -exports.causesExit = causesExit; -//Token adjustments -function adjustTokenMathMLAttrs(token) { -    for (let i = 0; i < token.attrs.length; i++) { -        if (token.attrs[i].name === DEFINITION_URL_ATTR) { -            token.attrs[i].name = ADJUSTED_DEFINITION_URL_ATTR; -            break; -        } -    } -} -exports.adjustTokenMathMLAttrs = adjustTokenMathMLAttrs; -function adjustTokenSVGAttrs(token) { -    for (let i = 0; i < token.attrs.length; i++) { -        const adjustedAttrName = SVG_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i].name); -        if (adjustedAttrName != null) { -            token.attrs[i].name = adjustedAttrName; -        } -    } -} -exports.adjustTokenSVGAttrs = adjustTokenSVGAttrs; -function adjustTokenXMLAttrs(token) { -    for (let i = 0; i < token.attrs.length; i++) { -        const adjustedAttrEntry = XML_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i].name); -        if (adjustedAttrEntry) { -            token.attrs[i].prefix = adjustedAttrEntry.prefix; -            token.attrs[i].name = adjustedAttrEntry.name; -            token.attrs[i].namespace = adjustedAttrEntry.namespace; -        } -    } -} -exports.adjustTokenXMLAttrs = adjustTokenXMLAttrs; -function adjustTokenSVGTagName(token) { -    const adjustedTagName = exports.SVG_TAG_NAMES_ADJUSTMENT_MAP.get(token.tagName); -    if (adjustedTagName != null) { -        token.tagName = adjustedTagName; -        token.tagID = (0, html_js_1.getTagID)(token.tagName); -    } -} -exports.adjustTokenSVGTagName = adjustTokenSVGTagName; -//Integration points -function isMathMLTextIntegrationPoint(tn, ns) { -    return ns === html_js_1.NS.MATHML && (tn === html_js_1.TAG_ID.MI || tn === html_js_1.TAG_ID.MO || tn === html_js_1.TAG_ID.MN || tn === html_js_1.TAG_ID.MS || tn === html_js_1.TAG_ID.MTEXT); -} -function isHtmlIntegrationPoint(tn, ns, attrs) { -    if (ns === html_js_1.NS.MATHML && tn === html_js_1.TAG_ID.ANNOTATION_XML) { -        for (let i = 0; i < attrs.length; i++) { -            if (attrs[i].name === html_js_1.ATTRS.ENCODING) { -                const value = attrs[i].value.toLowerCase(); -                return value === MIME_TYPES.TEXT_HTML || value === MIME_TYPES.APPLICATION_XML; -            } -        } -    } -    return ns === html_js_1.NS.SVG && (tn === html_js_1.TAG_ID.FOREIGN_OBJECT || tn === html_js_1.TAG_ID.DESC || tn === html_js_1.TAG_ID.TITLE); -} -function isIntegrationPoint(tn, ns, attrs, foreignNS) { -    return (((!foreignNS || foreignNS === html_js_1.NS.HTML) && isHtmlIntegrationPoint(tn, ns, attrs)) || -        ((!foreignNS || foreignNS === html_js_1.NS.MATHML) && isMathMLTextIntegrationPoint(tn, ns))); -} -exports.isIntegrationPoint = isIntegrationPoint; - -},{"./html.js":9}],9:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.hasUnescapedText = exports.isNumberedHeader = exports.SPECIAL_ELEMENTS = exports.getTagID = exports.TAG_ID = exports.TAG_NAMES = exports.DOCUMENT_MODE = exports.ATTRS = exports.NS = void 0; -/** All valid namespaces in HTML. */ -var NS; -(function (NS) { -    NS["HTML"] = "http://www.w3.org/1999/xhtml"; -    NS["MATHML"] = "http://www.w3.org/1998/Math/MathML"; -    NS["SVG"] = "http://www.w3.org/2000/svg"; -    NS["XLINK"] = "http://www.w3.org/1999/xlink"; -    NS["XML"] = "http://www.w3.org/XML/1998/namespace"; -    NS["XMLNS"] = "http://www.w3.org/2000/xmlns/"; -})(NS = exports.NS || (exports.NS = {})); -var ATTRS; -(function (ATTRS) { -    ATTRS["TYPE"] = "type"; -    ATTRS["ACTION"] = "action"; -    ATTRS["ENCODING"] = "encoding"; -    ATTRS["PROMPT"] = "prompt"; -    ATTRS["NAME"] = "name"; -    ATTRS["COLOR"] = "color"; -    ATTRS["FACE"] = "face"; -    ATTRS["SIZE"] = "size"; -})(ATTRS = exports.ATTRS || (exports.ATTRS = {})); -/** - * The mode of the document. - * - * @see {@link https://dom.spec.whatwg.org/#concept-document-limited-quirks} - */ -var DOCUMENT_MODE; -(function (DOCUMENT_MODE) { -    DOCUMENT_MODE["NO_QUIRKS"] = "no-quirks"; -    DOCUMENT_MODE["QUIRKS"] = "quirks"; -    DOCUMENT_MODE["LIMITED_QUIRKS"] = "limited-quirks"; -})(DOCUMENT_MODE = exports.DOCUMENT_MODE || (exports.DOCUMENT_MODE = {})); -var TAG_NAMES; -(function (TAG_NAMES) { -    TAG_NAMES["A"] = "a"; -    TAG_NAMES["ADDRESS"] = "address"; -    TAG_NAMES["ANNOTATION_XML"] = "annotation-xml"; -    TAG_NAMES["APPLET"] = "applet"; -    TAG_NAMES["AREA"] = "area"; -    TAG_NAMES["ARTICLE"] = "article"; -    TAG_NAMES["ASIDE"] = "aside"; -    TAG_NAMES["B"] = "b"; -    TAG_NAMES["BASE"] = "base"; -    TAG_NAMES["BASEFONT"] = "basefont"; -    TAG_NAMES["BGSOUND"] = "bgsound"; -    TAG_NAMES["BIG"] = "big"; -    TAG_NAMES["BLOCKQUOTE"] = "blockquote"; -    TAG_NAMES["BODY"] = "body"; -    TAG_NAMES["BR"] = "br"; -    TAG_NAMES["BUTTON"] = "button"; -    TAG_NAMES["CAPTION"] = "caption"; -    TAG_NAMES["CENTER"] = "center"; -    TAG_NAMES["CODE"] = "code"; -    TAG_NAMES["COL"] = "col"; -    TAG_NAMES["COLGROUP"] = "colgroup"; -    TAG_NAMES["DD"] = "dd"; -    TAG_NAMES["DESC"] = "desc"; -    TAG_NAMES["DETAILS"] = "details"; -    TAG_NAMES["DIALOG"] = "dialog"; -    TAG_NAMES["DIR"] = "dir"; -    TAG_NAMES["DIV"] = "div"; -    TAG_NAMES["DL"] = "dl"; -    TAG_NAMES["DT"] = "dt"; -    TAG_NAMES["EM"] = "em"; -    TAG_NAMES["EMBED"] = "embed"; -    TAG_NAMES["FIELDSET"] = "fieldset"; -    TAG_NAMES["FIGCAPTION"] = "figcaption"; -    TAG_NAMES["FIGURE"] = "figure"; -    TAG_NAMES["FONT"] = "font"; -    TAG_NAMES["FOOTER"] = "footer"; -    TAG_NAMES["FOREIGN_OBJECT"] = "foreignObject"; -    TAG_NAMES["FORM"] = "form"; -    TAG_NAMES["FRAME"] = "frame"; -    TAG_NAMES["FRAMESET"] = "frameset"; -    TAG_NAMES["H1"] = "h1"; -    TAG_NAMES["H2"] = "h2"; -    TAG_NAMES["H3"] = "h3"; -    TAG_NAMES["H4"] = "h4"; -    TAG_NAMES["H5"] = "h5"; -    TAG_NAMES["H6"] = "h6"; -    TAG_NAMES["HEAD"] = "head"; -    TAG_NAMES["HEADER"] = "header"; -    TAG_NAMES["HGROUP"] = "hgroup"; -    TAG_NAMES["HR"] = "hr"; -    TAG_NAMES["HTML"] = "html"; -    TAG_NAMES["I"] = "i"; -    TAG_NAMES["IMG"] = "img"; -    TAG_NAMES["IMAGE"] = "image"; -    TAG_NAMES["INPUT"] = "input"; -    TAG_NAMES["IFRAME"] = "iframe"; -    TAG_NAMES["KEYGEN"] = "keygen"; -    TAG_NAMES["LABEL"] = "label"; -    TAG_NAMES["LI"] = "li"; -    TAG_NAMES["LINK"] = "link"; -    TAG_NAMES["LISTING"] = "listing"; -    TAG_NAMES["MAIN"] = "main"; -    TAG_NAMES["MALIGNMARK"] = "malignmark"; -    TAG_NAMES["MARQUEE"] = "marquee"; -    TAG_NAMES["MATH"] = "math"; -    TAG_NAMES["MENU"] = "menu"; -    TAG_NAMES["META"] = "meta"; -    TAG_NAMES["MGLYPH"] = "mglyph"; -    TAG_NAMES["MI"] = "mi"; -    TAG_NAMES["MO"] = "mo"; -    TAG_NAMES["MN"] = "mn"; -    TAG_NAMES["MS"] = "ms"; -    TAG_NAMES["MTEXT"] = "mtext"; -    TAG_NAMES["NAV"] = "nav"; -    TAG_NAMES["NOBR"] = "nobr"; -    TAG_NAMES["NOFRAMES"] = "noframes"; -    TAG_NAMES["NOEMBED"] = "noembed"; -    TAG_NAMES["NOSCRIPT"] = "noscript"; -    TAG_NAMES["OBJECT"] = "object"; -    TAG_NAMES["OL"] = "ol"; -    TAG_NAMES["OPTGROUP"] = "optgroup"; -    TAG_NAMES["OPTION"] = "option"; -    TAG_NAMES["P"] = "p"; -    TAG_NAMES["PARAM"] = "param"; -    TAG_NAMES["PLAINTEXT"] = "plaintext"; -    TAG_NAMES["PRE"] = "pre"; -    TAG_NAMES["RB"] = "rb"; -    TAG_NAMES["RP"] = "rp"; -    TAG_NAMES["RT"] = "rt"; -    TAG_NAMES["RTC"] = "rtc"; -    TAG_NAMES["RUBY"] = "ruby"; -    TAG_NAMES["S"] = "s"; -    TAG_NAMES["SCRIPT"] = "script"; -    TAG_NAMES["SECTION"] = "section"; -    TAG_NAMES["SELECT"] = "select"; -    TAG_NAMES["SOURCE"] = "source"; -    TAG_NAMES["SMALL"] = "small"; -    TAG_NAMES["SPAN"] = "span"; -    TAG_NAMES["STRIKE"] = "strike"; -    TAG_NAMES["STRONG"] = "strong"; -    TAG_NAMES["STYLE"] = "style"; -    TAG_NAMES["SUB"] = "sub"; -    TAG_NAMES["SUMMARY"] = "summary"; -    TAG_NAMES["SUP"] = "sup"; -    TAG_NAMES["TABLE"] = "table"; -    TAG_NAMES["TBODY"] = "tbody"; -    TAG_NAMES["TEMPLATE"] = "template"; -    TAG_NAMES["TEXTAREA"] = "textarea"; -    TAG_NAMES["TFOOT"] = "tfoot"; -    TAG_NAMES["TD"] = "td"; -    TAG_NAMES["TH"] = "th"; -    TAG_NAMES["THEAD"] = "thead"; -    TAG_NAMES["TITLE"] = "title"; -    TAG_NAMES["TR"] = "tr"; -    TAG_NAMES["TRACK"] = "track"; -    TAG_NAMES["TT"] = "tt"; -    TAG_NAMES["U"] = "u"; -    TAG_NAMES["UL"] = "ul"; -    TAG_NAMES["SVG"] = "svg"; -    TAG_NAMES["VAR"] = "var"; -    TAG_NAMES["WBR"] = "wbr"; -    TAG_NAMES["XMP"] = "xmp"; -})(TAG_NAMES = exports.TAG_NAMES || (exports.TAG_NAMES = {})); -/** - * Tag IDs are numeric IDs for known tag names. - * - * We use tag IDs to improve the performance of tag name comparisons. - */ -var TAG_ID; -(function (TAG_ID) { -    TAG_ID[TAG_ID["UNKNOWN"] = 0] = "UNKNOWN"; -    TAG_ID[TAG_ID["A"] = 1] = "A"; -    TAG_ID[TAG_ID["ADDRESS"] = 2] = "ADDRESS"; -    TAG_ID[TAG_ID["ANNOTATION_XML"] = 3] = "ANNOTATION_XML"; -    TAG_ID[TAG_ID["APPLET"] = 4] = "APPLET"; -    TAG_ID[TAG_ID["AREA"] = 5] = "AREA"; -    TAG_ID[TAG_ID["ARTICLE"] = 6] = "ARTICLE"; -    TAG_ID[TAG_ID["ASIDE"] = 7] = "ASIDE"; -    TAG_ID[TAG_ID["B"] = 8] = "B"; -    TAG_ID[TAG_ID["BASE"] = 9] = "BASE"; -    TAG_ID[TAG_ID["BASEFONT"] = 10] = "BASEFONT"; -    TAG_ID[TAG_ID["BGSOUND"] = 11] = "BGSOUND"; -    TAG_ID[TAG_ID["BIG"] = 12] = "BIG"; -    TAG_ID[TAG_ID["BLOCKQUOTE"] = 13] = "BLOCKQUOTE"; -    TAG_ID[TAG_ID["BODY"] = 14] = "BODY"; -    TAG_ID[TAG_ID["BR"] = 15] = "BR"; -    TAG_ID[TAG_ID["BUTTON"] = 16] = "BUTTON"; -    TAG_ID[TAG_ID["CAPTION"] = 17] = "CAPTION"; -    TAG_ID[TAG_ID["CENTER"] = 18] = "CENTER"; -    TAG_ID[TAG_ID["CODE"] = 19] = "CODE"; -    TAG_ID[TAG_ID["COL"] = 20] = "COL"; -    TAG_ID[TAG_ID["COLGROUP"] = 21] = "COLGROUP"; -    TAG_ID[TAG_ID["DD"] = 22] = "DD"; -    TAG_ID[TAG_ID["DESC"] = 23] = "DESC"; -    TAG_ID[TAG_ID["DETAILS"] = 24] = "DETAILS"; -    TAG_ID[TAG_ID["DIALOG"] = 25] = "DIALOG"; -    TAG_ID[TAG_ID["DIR"] = 26] = "DIR"; -    TAG_ID[TAG_ID["DIV"] = 27] = "DIV"; -    TAG_ID[TAG_ID["DL"] = 28] = "DL"; -    TAG_ID[TAG_ID["DT"] = 29] = "DT"; -    TAG_ID[TAG_ID["EM"] = 30] = "EM"; -    TAG_ID[TAG_ID["EMBED"] = 31] = "EMBED"; -    TAG_ID[TAG_ID["FIELDSET"] = 32] = "FIELDSET"; -    TAG_ID[TAG_ID["FIGCAPTION"] = 33] = "FIGCAPTION"; -    TAG_ID[TAG_ID["FIGURE"] = 34] = "FIGURE"; -    TAG_ID[TAG_ID["FONT"] = 35] = "FONT"; -    TAG_ID[TAG_ID["FOOTER"] = 36] = "FOOTER"; -    TAG_ID[TAG_ID["FOREIGN_OBJECT"] = 37] = "FOREIGN_OBJECT"; -    TAG_ID[TAG_ID["FORM"] = 38] = "FORM"; -    TAG_ID[TAG_ID["FRAME"] = 39] = "FRAME"; -    TAG_ID[TAG_ID["FRAMESET"] = 40] = "FRAMESET"; -    TAG_ID[TAG_ID["H1"] = 41] = "H1"; -    TAG_ID[TAG_ID["H2"] = 42] = "H2"; -    TAG_ID[TAG_ID["H3"] = 43] = "H3"; -    TAG_ID[TAG_ID["H4"] = 44] = "H4"; -    TAG_ID[TAG_ID["H5"] = 45] = "H5"; -    TAG_ID[TAG_ID["H6"] = 46] = "H6"; -    TAG_ID[TAG_ID["HEAD"] = 47] = "HEAD"; -    TAG_ID[TAG_ID["HEADER"] = 48] = "HEADER"; -    TAG_ID[TAG_ID["HGROUP"] = 49] = "HGROUP"; -    TAG_ID[TAG_ID["HR"] = 50] = "HR"; -    TAG_ID[TAG_ID["HTML"] = 51] = "HTML"; -    TAG_ID[TAG_ID["I"] = 52] = "I"; -    TAG_ID[TAG_ID["IMG"] = 53] = "IMG"; -    TAG_ID[TAG_ID["IMAGE"] = 54] = "IMAGE"; -    TAG_ID[TAG_ID["INPUT"] = 55] = "INPUT"; -    TAG_ID[TAG_ID["IFRAME"] = 56] = "IFRAME"; -    TAG_ID[TAG_ID["KEYGEN"] = 57] = "KEYGEN"; -    TAG_ID[TAG_ID["LABEL"] = 58] = "LABEL"; -    TAG_ID[TAG_ID["LI"] = 59] = "LI"; -    TAG_ID[TAG_ID["LINK"] = 60] = "LINK"; -    TAG_ID[TAG_ID["LISTING"] = 61] = "LISTING"; -    TAG_ID[TAG_ID["MAIN"] = 62] = "MAIN"; -    TAG_ID[TAG_ID["MALIGNMARK"] = 63] = "MALIGNMARK"; -    TAG_ID[TAG_ID["MARQUEE"] = 64] = "MARQUEE"; -    TAG_ID[TAG_ID["MATH"] = 65] = "MATH"; -    TAG_ID[TAG_ID["MENU"] = 66] = "MENU"; -    TAG_ID[TAG_ID["META"] = 67] = "META"; -    TAG_ID[TAG_ID["MGLYPH"] = 68] = "MGLYPH"; -    TAG_ID[TAG_ID["MI"] = 69] = "MI"; -    TAG_ID[TAG_ID["MO"] = 70] = "MO"; -    TAG_ID[TAG_ID["MN"] = 71] = "MN"; -    TAG_ID[TAG_ID["MS"] = 72] = "MS"; -    TAG_ID[TAG_ID["MTEXT"] = 73] = "MTEXT"; -    TAG_ID[TAG_ID["NAV"] = 74] = "NAV"; -    TAG_ID[TAG_ID["NOBR"] = 75] = "NOBR"; -    TAG_ID[TAG_ID["NOFRAMES"] = 76] = "NOFRAMES"; -    TAG_ID[TAG_ID["NOEMBED"] = 77] = "NOEMBED"; -    TAG_ID[TAG_ID["NOSCRIPT"] = 78] = "NOSCRIPT"; -    TAG_ID[TAG_ID["OBJECT"] = 79] = "OBJECT"; -    TAG_ID[TAG_ID["OL"] = 80] = "OL"; -    TAG_ID[TAG_ID["OPTGROUP"] = 81] = "OPTGROUP"; -    TAG_ID[TAG_ID["OPTION"] = 82] = "OPTION"; -    TAG_ID[TAG_ID["P"] = 83] = "P"; -    TAG_ID[TAG_ID["PARAM"] = 84] = "PARAM"; -    TAG_ID[TAG_ID["PLAINTEXT"] = 85] = "PLAINTEXT"; -    TAG_ID[TAG_ID["PRE"] = 86] = "PRE"; -    TAG_ID[TAG_ID["RB"] = 87] = "RB"; -    TAG_ID[TAG_ID["RP"] = 88] = "RP"; -    TAG_ID[TAG_ID["RT"] = 89] = "RT"; -    TAG_ID[TAG_ID["RTC"] = 90] = "RTC"; -    TAG_ID[TAG_ID["RUBY"] = 91] = "RUBY"; -    TAG_ID[TAG_ID["S"] = 92] = "S"; -    TAG_ID[TAG_ID["SCRIPT"] = 93] = "SCRIPT"; -    TAG_ID[TAG_ID["SECTION"] = 94] = "SECTION"; -    TAG_ID[TAG_ID["SELECT"] = 95] = "SELECT"; -    TAG_ID[TAG_ID["SOURCE"] = 96] = "SOURCE"; -    TAG_ID[TAG_ID["SMALL"] = 97] = "SMALL"; -    TAG_ID[TAG_ID["SPAN"] = 98] = "SPAN"; -    TAG_ID[TAG_ID["STRIKE"] = 99] = "STRIKE"; -    TAG_ID[TAG_ID["STRONG"] = 100] = "STRONG"; -    TAG_ID[TAG_ID["STYLE"] = 101] = "STYLE"; -    TAG_ID[TAG_ID["SUB"] = 102] = "SUB"; -    TAG_ID[TAG_ID["SUMMARY"] = 103] = "SUMMARY"; -    TAG_ID[TAG_ID["SUP"] = 104] = "SUP"; -    TAG_ID[TAG_ID["TABLE"] = 105] = "TABLE"; -    TAG_ID[TAG_ID["TBODY"] = 106] = "TBODY"; -    TAG_ID[TAG_ID["TEMPLATE"] = 107] = "TEMPLATE"; -    TAG_ID[TAG_ID["TEXTAREA"] = 108] = "TEXTAREA"; -    TAG_ID[TAG_ID["TFOOT"] = 109] = "TFOOT"; -    TAG_ID[TAG_ID["TD"] = 110] = "TD"; -    TAG_ID[TAG_ID["TH"] = 111] = "TH"; -    TAG_ID[TAG_ID["THEAD"] = 112] = "THEAD"; -    TAG_ID[TAG_ID["TITLE"] = 113] = "TITLE"; -    TAG_ID[TAG_ID["TR"] = 114] = "TR"; -    TAG_ID[TAG_ID["TRACK"] = 115] = "TRACK"; -    TAG_ID[TAG_ID["TT"] = 116] = "TT"; -    TAG_ID[TAG_ID["U"] = 117] = "U"; -    TAG_ID[TAG_ID["UL"] = 118] = "UL"; -    TAG_ID[TAG_ID["SVG"] = 119] = "SVG"; -    TAG_ID[TAG_ID["VAR"] = 120] = "VAR"; -    TAG_ID[TAG_ID["WBR"] = 121] = "WBR"; -    TAG_ID[TAG_ID["XMP"] = 122] = "XMP"; -})(TAG_ID = exports.TAG_ID || (exports.TAG_ID = {})); -const TAG_NAME_TO_ID = new Map([ -    [TAG_NAMES.A, TAG_ID.A], -    [TAG_NAMES.ADDRESS, TAG_ID.ADDRESS], -    [TAG_NAMES.ANNOTATION_XML, TAG_ID.ANNOTATION_XML], -    [TAG_NAMES.APPLET, TAG_ID.APPLET], -    [TAG_NAMES.AREA, TAG_ID.AREA], -    [TAG_NAMES.ARTICLE, TAG_ID.ARTICLE], -    [TAG_NAMES.ASIDE, TAG_ID.ASIDE], -    [TAG_NAMES.B, TAG_ID.B], -    [TAG_NAMES.BASE, TAG_ID.BASE], -    [TAG_NAMES.BASEFONT, TAG_ID.BASEFONT], -    [TAG_NAMES.BGSOUND, TAG_ID.BGSOUND], -    [TAG_NAMES.BIG, TAG_ID.BIG], -    [TAG_NAMES.BLOCKQUOTE, TAG_ID.BLOCKQUOTE], -    [TAG_NAMES.BODY, TAG_ID.BODY], -    [TAG_NAMES.BR, TAG_ID.BR], -    [TAG_NAMES.BUTTON, TAG_ID.BUTTON], -    [TAG_NAMES.CAPTION, TAG_ID.CAPTION], -    [TAG_NAMES.CENTER, TAG_ID.CENTER], -    [TAG_NAMES.CODE, TAG_ID.CODE], -    [TAG_NAMES.COL, TAG_ID.COL], -    [TAG_NAMES.COLGROUP, TAG_ID.COLGROUP], -    [TAG_NAMES.DD, TAG_ID.DD], -    [TAG_NAMES.DESC, TAG_ID.DESC], -    [TAG_NAMES.DETAILS, TAG_ID.DETAILS], -    [TAG_NAMES.DIALOG, TAG_ID.DIALOG], -    [TAG_NAMES.DIR, TAG_ID.DIR], -    [TAG_NAMES.DIV, TAG_ID.DIV], -    [TAG_NAMES.DL, TAG_ID.DL], -    [TAG_NAMES.DT, TAG_ID.DT], -    [TAG_NAMES.EM, TAG_ID.EM], -    [TAG_NAMES.EMBED, TAG_ID.EMBED], -    [TAG_NAMES.FIELDSET, TAG_ID.FIELDSET], -    [TAG_NAMES.FIGCAPTION, TAG_ID.FIGCAPTION], -    [TAG_NAMES.FIGURE, TAG_ID.FIGURE], -    [TAG_NAMES.FONT, TAG_ID.FONT], -    [TAG_NAMES.FOOTER, TAG_ID.FOOTER], -    [TAG_NAMES.FOREIGN_OBJECT, TAG_ID.FOREIGN_OBJECT], -    [TAG_NAMES.FORM, TAG_ID.FORM], -    [TAG_NAMES.FRAME, TAG_ID.FRAME], -    [TAG_NAMES.FRAMESET, TAG_ID.FRAMESET], -    [TAG_NAMES.H1, TAG_ID.H1], -    [TAG_NAMES.H2, TAG_ID.H2], -    [TAG_NAMES.H3, TAG_ID.H3], -    [TAG_NAMES.H4, TAG_ID.H4], -    [TAG_NAMES.H5, TAG_ID.H5], -    [TAG_NAMES.H6, TAG_ID.H6], -    [TAG_NAMES.HEAD, TAG_ID.HEAD], -    [TAG_NAMES.HEADER, TAG_ID.HEADER], -    [TAG_NAMES.HGROUP, TAG_ID.HGROUP], -    [TAG_NAMES.HR, TAG_ID.HR], -    [TAG_NAMES.HTML, TAG_ID.HTML], -    [TAG_NAMES.I, TAG_ID.I], -    [TAG_NAMES.IMG, TAG_ID.IMG], -    [TAG_NAMES.IMAGE, TAG_ID.IMAGE], -    [TAG_NAMES.INPUT, TAG_ID.INPUT], -    [TAG_NAMES.IFRAME, TAG_ID.IFRAME], -    [TAG_NAMES.KEYGEN, TAG_ID.KEYGEN], -    [TAG_NAMES.LABEL, TAG_ID.LABEL], -    [TAG_NAMES.LI, TAG_ID.LI], -    [TAG_NAMES.LINK, TAG_ID.LINK], -    [TAG_NAMES.LISTING, TAG_ID.LISTING], -    [TAG_NAMES.MAIN, TAG_ID.MAIN], -    [TAG_NAMES.MALIGNMARK, TAG_ID.MALIGNMARK], -    [TAG_NAMES.MARQUEE, TAG_ID.MARQUEE], -    [TAG_NAMES.MATH, TAG_ID.MATH], -    [TAG_NAMES.MENU, TAG_ID.MENU], -    [TAG_NAMES.META, TAG_ID.META], -    [TAG_NAMES.MGLYPH, TAG_ID.MGLYPH], -    [TAG_NAMES.MI, TAG_ID.MI], -    [TAG_NAMES.MO, TAG_ID.MO], -    [TAG_NAMES.MN, TAG_ID.MN], -    [TAG_NAMES.MS, TAG_ID.MS], -    [TAG_NAMES.MTEXT, TAG_ID.MTEXT], -    [TAG_NAMES.NAV, TAG_ID.NAV], -    [TAG_NAMES.NOBR, TAG_ID.NOBR], -    [TAG_NAMES.NOFRAMES, TAG_ID.NOFRAMES], -    [TAG_NAMES.NOEMBED, TAG_ID.NOEMBED], -    [TAG_NAMES.NOSCRIPT, TAG_ID.NOSCRIPT], -    [TAG_NAMES.OBJECT, TAG_ID.OBJECT], -    [TAG_NAMES.OL, TAG_ID.OL], -    [TAG_NAMES.OPTGROUP, TAG_ID.OPTGROUP], -    [TAG_NAMES.OPTION, TAG_ID.OPTION], -    [TAG_NAMES.P, TAG_ID.P], -    [TAG_NAMES.PARAM, TAG_ID.PARAM], -    [TAG_NAMES.PLAINTEXT, TAG_ID.PLAINTEXT], -    [TAG_NAMES.PRE, TAG_ID.PRE], -    [TAG_NAMES.RB, TAG_ID.RB], -    [TAG_NAMES.RP, TAG_ID.RP], -    [TAG_NAMES.RT, TAG_ID.RT], -    [TAG_NAMES.RTC, TAG_ID.RTC], -    [TAG_NAMES.RUBY, TAG_ID.RUBY], -    [TAG_NAMES.S, TAG_ID.S], -    [TAG_NAMES.SCRIPT, TAG_ID.SCRIPT], -    [TAG_NAMES.SECTION, TAG_ID.SECTION], -    [TAG_NAMES.SELECT, TAG_ID.SELECT], -    [TAG_NAMES.SOURCE, TAG_ID.SOURCE], -    [TAG_NAMES.SMALL, TAG_ID.SMALL], -    [TAG_NAMES.SPAN, TAG_ID.SPAN], -    [TAG_NAMES.STRIKE, TAG_ID.STRIKE], -    [TAG_NAMES.STRONG, TAG_ID.STRONG], -    [TAG_NAMES.STYLE, TAG_ID.STYLE], -    [TAG_NAMES.SUB, TAG_ID.SUB], -    [TAG_NAMES.SUMMARY, TAG_ID.SUMMARY], -    [TAG_NAMES.SUP, TAG_ID.SUP], -    [TAG_NAMES.TABLE, TAG_ID.TABLE], -    [TAG_NAMES.TBODY, TAG_ID.TBODY], -    [TAG_NAMES.TEMPLATE, TAG_ID.TEMPLATE], -    [TAG_NAMES.TEXTAREA, TAG_ID.TEXTAREA], -    [TAG_NAMES.TFOOT, TAG_ID.TFOOT], -    [TAG_NAMES.TD, TAG_ID.TD], -    [TAG_NAMES.TH, TAG_ID.TH], -    [TAG_NAMES.THEAD, TAG_ID.THEAD], -    [TAG_NAMES.TITLE, TAG_ID.TITLE], -    [TAG_NAMES.TR, TAG_ID.TR], -    [TAG_NAMES.TRACK, TAG_ID.TRACK], -    [TAG_NAMES.TT, TAG_ID.TT], -    [TAG_NAMES.U, TAG_ID.U], -    [TAG_NAMES.UL, TAG_ID.UL], -    [TAG_NAMES.SVG, TAG_ID.SVG], -    [TAG_NAMES.VAR, TAG_ID.VAR], -    [TAG_NAMES.WBR, TAG_ID.WBR], -    [TAG_NAMES.XMP, TAG_ID.XMP], -]); -function getTagID(tagName) { -    var _a; -    return (_a = TAG_NAME_TO_ID.get(tagName)) !== null && _a !== void 0 ? _a : TAG_ID.UNKNOWN; -} -exports.getTagID = getTagID; -const $ = TAG_ID; -exports.SPECIAL_ELEMENTS = { -    [NS.HTML]: new Set([ -        $.ADDRESS, -        $.APPLET, -        $.AREA, -        $.ARTICLE, -        $.ASIDE, -        $.BASE, -        $.BASEFONT, -        $.BGSOUND, -        $.BLOCKQUOTE, -        $.BODY, -        $.BR, -        $.BUTTON, -        $.CAPTION, -        $.CENTER, -        $.COL, -        $.COLGROUP, -        $.DD, -        $.DETAILS, -        $.DIR, -        $.DIV, -        $.DL, -        $.DT, -        $.EMBED, -        $.FIELDSET, -        $.FIGCAPTION, -        $.FIGURE, -        $.FOOTER, -        $.FORM, -        $.FRAME, -        $.FRAMESET, -        $.H1, -        $.H2, -        $.H3, -        $.H4, -        $.H5, -        $.H6, -        $.HEAD, -        $.HEADER, -        $.HGROUP, -        $.HR, -        $.HTML, -        $.IFRAME, -        $.IMG, -        $.INPUT, -        $.LI, -        $.LINK, -        $.LISTING, -        $.MAIN, -        $.MARQUEE, -        $.MENU, -        $.META, -        $.NAV, -        $.NOEMBED, -        $.NOFRAMES, -        $.NOSCRIPT, -        $.OBJECT, -        $.OL, -        $.P, -        $.PARAM, -        $.PLAINTEXT, -        $.PRE, -        $.SCRIPT, -        $.SECTION, -        $.SELECT, -        $.SOURCE, -        $.STYLE, -        $.SUMMARY, -        $.TABLE, -        $.TBODY, -        $.TD, -        $.TEMPLATE, -        $.TEXTAREA, -        $.TFOOT, -        $.TH, -        $.THEAD, -        $.TITLE, -        $.TR, -        $.TRACK, -        $.UL, -        $.WBR, -        $.XMP, -    ]), -    [NS.MATHML]: new Set([$.MI, $.MO, $.MN, $.MS, $.MTEXT, $.ANNOTATION_XML]), -    [NS.SVG]: new Set([$.TITLE, $.FOREIGN_OBJECT, $.DESC]), -    [NS.XLINK]: new Set(), -    [NS.XML]: new Set(), -    [NS.XMLNS]: new Set(), -}; -function isNumberedHeader(tn) { -    return tn === $.H1 || tn === $.H2 || tn === $.H3 || tn === $.H4 || tn === $.H5 || tn === $.H6; -} -exports.isNumberedHeader = isNumberedHeader; -const UNESCAPED_TEXT = new Set([ -    TAG_NAMES.STYLE, -    TAG_NAMES.SCRIPT, -    TAG_NAMES.XMP, -    TAG_NAMES.IFRAME, -    TAG_NAMES.NOEMBED, -    TAG_NAMES.NOFRAMES, -    TAG_NAMES.PLAINTEXT, -]); -function hasUnescapedText(tn, scriptingEnabled) { -    return UNESCAPED_TEXT.has(tn) || (scriptingEnabled && tn === TAG_NAMES.NOSCRIPT); -} -exports.hasUnescapedText = hasUnescapedText; - -},{}],10:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getTokenAttr = exports.TokenType = void 0; -var TokenType; -(function (TokenType) { -    TokenType[TokenType["CHARACTER"] = 0] = "CHARACTER"; -    TokenType[TokenType["NULL_CHARACTER"] = 1] = "NULL_CHARACTER"; -    TokenType[TokenType["WHITESPACE_CHARACTER"] = 2] = "WHITESPACE_CHARACTER"; -    TokenType[TokenType["START_TAG"] = 3] = "START_TAG"; -    TokenType[TokenType["END_TAG"] = 4] = "END_TAG"; -    TokenType[TokenType["COMMENT"] = 5] = "COMMENT"; -    TokenType[TokenType["DOCTYPE"] = 6] = "DOCTYPE"; -    TokenType[TokenType["EOF"] = 7] = "EOF"; -    TokenType[TokenType["HIBERNATION"] = 8] = "HIBERNATION"; -})(TokenType = exports.TokenType || (exports.TokenType = {})); -function getTokenAttr(token, attrName) { -    for (let i = token.attrs.length - 1; i >= 0; i--) { -        if (token.attrs[i].name === attrName) { -            return token.attrs[i].value; -        } -    } -    return null; -} -exports.getTokenAttr = getTokenAttr; - -},{}],11:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.isUndefinedCodePoint = exports.isControlCodePoint = exports.getSurrogatePairCodePoint = exports.isSurrogatePair = exports.isSurrogate = exports.SEQUENCES = exports.CODE_POINTS = exports.REPLACEMENT_CHARACTER = void 0; -const UNDEFINED_CODE_POINTS = new Set([ -    65534, 65535, 131070, 131071, 196606, 196607, 262142, 262143, 327678, 327679, 393214, -    393215, 458750, 458751, 524286, 524287, 589822, 589823, 655358, 655359, 720894, -    720895, 786430, 786431, 851966, 851967, 917502, 917503, 983038, 983039, 1048574, -    1048575, 1114110, 1114111, -]); -exports.REPLACEMENT_CHARACTER = '\uFFFD'; -var CODE_POINTS; -(function (CODE_POINTS) { -    CODE_POINTS[CODE_POINTS["EOF"] = -1] = "EOF"; -    CODE_POINTS[CODE_POINTS["NULL"] = 0] = "NULL"; -    CODE_POINTS[CODE_POINTS["TABULATION"] = 9] = "TABULATION"; -    CODE_POINTS[CODE_POINTS["CARRIAGE_RETURN"] = 13] = "CARRIAGE_RETURN"; -    CODE_POINTS[CODE_POINTS["LINE_FEED"] = 10] = "LINE_FEED"; -    CODE_POINTS[CODE_POINTS["FORM_FEED"] = 12] = "FORM_FEED"; -    CODE_POINTS[CODE_POINTS["SPACE"] = 32] = "SPACE"; -    CODE_POINTS[CODE_POINTS["EXCLAMATION_MARK"] = 33] = "EXCLAMATION_MARK"; -    CODE_POINTS[CODE_POINTS["QUOTATION_MARK"] = 34] = "QUOTATION_MARK"; -    CODE_POINTS[CODE_POINTS["NUMBER_SIGN"] = 35] = "NUMBER_SIGN"; -    CODE_POINTS[CODE_POINTS["AMPERSAND"] = 38] = "AMPERSAND"; -    CODE_POINTS[CODE_POINTS["APOSTROPHE"] = 39] = "APOSTROPHE"; -    CODE_POINTS[CODE_POINTS["HYPHEN_MINUS"] = 45] = "HYPHEN_MINUS"; -    CODE_POINTS[CODE_POINTS["SOLIDUS"] = 47] = "SOLIDUS"; -    CODE_POINTS[CODE_POINTS["DIGIT_0"] = 48] = "DIGIT_0"; -    CODE_POINTS[CODE_POINTS["DIGIT_9"] = 57] = "DIGIT_9"; -    CODE_POINTS[CODE_POINTS["SEMICOLON"] = 59] = "SEMICOLON"; -    CODE_POINTS[CODE_POINTS["LESS_THAN_SIGN"] = 60] = "LESS_THAN_SIGN"; -    CODE_POINTS[CODE_POINTS["EQUALS_SIGN"] = 61] = "EQUALS_SIGN"; -    CODE_POINTS[CODE_POINTS["GREATER_THAN_SIGN"] = 62] = "GREATER_THAN_SIGN"; -    CODE_POINTS[CODE_POINTS["QUESTION_MARK"] = 63] = "QUESTION_MARK"; -    CODE_POINTS[CODE_POINTS["LATIN_CAPITAL_A"] = 65] = "LATIN_CAPITAL_A"; -    CODE_POINTS[CODE_POINTS["LATIN_CAPITAL_F"] = 70] = "LATIN_CAPITAL_F"; -    CODE_POINTS[CODE_POINTS["LATIN_CAPITAL_X"] = 88] = "LATIN_CAPITAL_X"; -    CODE_POINTS[CODE_POINTS["LATIN_CAPITAL_Z"] = 90] = "LATIN_CAPITAL_Z"; -    CODE_POINTS[CODE_POINTS["RIGHT_SQUARE_BRACKET"] = 93] = "RIGHT_SQUARE_BRACKET"; -    CODE_POINTS[CODE_POINTS["GRAVE_ACCENT"] = 96] = "GRAVE_ACCENT"; -    CODE_POINTS[CODE_POINTS["LATIN_SMALL_A"] = 97] = "LATIN_SMALL_A"; -    CODE_POINTS[CODE_POINTS["LATIN_SMALL_F"] = 102] = "LATIN_SMALL_F"; -    CODE_POINTS[CODE_POINTS["LATIN_SMALL_X"] = 120] = "LATIN_SMALL_X"; -    CODE_POINTS[CODE_POINTS["LATIN_SMALL_Z"] = 122] = "LATIN_SMALL_Z"; -    CODE_POINTS[CODE_POINTS["REPLACEMENT_CHARACTER"] = 65533] = "REPLACEMENT_CHARACTER"; -})(CODE_POINTS = exports.CODE_POINTS || (exports.CODE_POINTS = {})); -exports.SEQUENCES = { -    DASH_DASH: '--', -    CDATA_START: '[CDATA[', -    DOCTYPE: 'doctype', -    SCRIPT: 'script', -    PUBLIC: 'public', -    SYSTEM: 'system', -}; -//Surrogates -function isSurrogate(cp) { -    return cp >= 55296 && cp <= 57343; -} -exports.isSurrogate = isSurrogate; -function isSurrogatePair(cp) { -    return cp >= 56320 && cp <= 57343; -} -exports.isSurrogatePair = isSurrogatePair; -function getSurrogatePairCodePoint(cp1, cp2) { -    return (cp1 - 55296) * 1024 + 9216 + cp2; -} -exports.getSurrogatePairCodePoint = getSurrogatePairCodePoint; -//NOTE: excluding NULL and ASCII whitespace -function isControlCodePoint(cp) { -    return ((cp !== 0x20 && cp !== 0x0a && cp !== 0x0d && cp !== 0x09 && cp !== 0x0c && cp >= 0x01 && cp <= 0x1f) || -        (cp >= 0x7f && cp <= 0x9f)); -} -exports.isControlCodePoint = isControlCodePoint; -function isUndefinedCodePoint(cp) { -    return (cp >= 64976 && cp <= 65007) || UNDEFINED_CODE_POINTS.has(cp); -} -exports.isUndefinedCodePoint = isUndefinedCodePoint; - -},{}],12:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.parseFragment = exports.parse = exports.TokenizerMode = exports.Tokenizer = exports.Token = exports.html = exports.foreignContent = exports.ErrorCodes = exports.serializeOuter = exports.serialize = exports.Parser = exports.defaultTreeAdapter = void 0; -const index_js_1 = require("./parser/index.js"); -var default_js_1 = require("./tree-adapters/default.js"); -Object.defineProperty(exports, "defaultTreeAdapter", { enumerable: true, get: function () { return default_js_1.defaultTreeAdapter; } }); -var index_js_2 = require("./parser/index.js"); -Object.defineProperty(exports, "Parser", { enumerable: true, get: function () { return index_js_2.Parser; } }); -var index_js_3 = require("./serializer/index.js"); -Object.defineProperty(exports, "serialize", { enumerable: true, get: function () { return index_js_3.serialize; } }); -Object.defineProperty(exports, "serializeOuter", { enumerable: true, get: function () { return index_js_3.serializeOuter; } }); -var error_codes_js_1 = require("./common/error-codes.js"); -Object.defineProperty(exports, "ErrorCodes", { enumerable: true, get: function () { return error_codes_js_1.ERR; } }); -/** @internal */ -exports.foreignContent = require("./common/foreign-content.js"); -/** @internal */ -exports.html = require("./common/html.js"); -/** @internal */ -exports.Token = require("./common/token.js"); -/** @internal */ -var index_js_4 = require("./tokenizer/index.js"); -Object.defineProperty(exports, "Tokenizer", { enumerable: true, get: function () { return index_js_4.Tokenizer; } }); -Object.defineProperty(exports, "TokenizerMode", { enumerable: true, get: function () { return index_js_4.TokenizerMode; } }); -// Shorthands -/** - * Parses an HTML string. - * - * @param html Input HTML string. - * @param options Parsing options. - * @returns Document - * - * @example - * - * ```js - * const parse5 = require('parse5'); - * - * const document = parse5.parse('<!DOCTYPE html><html><head></head><body>Hi there!</body></html>'); - * - * console.log(document.childNodes[1].tagName); //> 'html' - *``` - */ -function parse(html, options) { -    return index_js_1.Parser.parse(html, options); -} -exports.parse = parse; -function parseFragment(fragmentContext, html, options) { -    if (typeof fragmentContext === 'string') { -        options = html; -        html = fragmentContext; -        fragmentContext = null; -    } -    const parser = index_js_1.Parser.getFragmentParser(fragmentContext, options); -    parser.tokenizer.write(html, true); -    return parser.getFragment(); -} -exports.parseFragment = parseFragment; - -},{"./common/error-codes.js":7,"./common/foreign-content.js":8,"./common/html.js":9,"./common/token.js":10,"./parser/index.js":14,"./serializer/index.js":16,"./tokenizer/index.js":17,"./tree-adapters/default.js":19}],13:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.FormattingElementList = exports.EntryType = void 0; -//Const -const NOAH_ARK_CAPACITY = 3; -var EntryType; -(function (EntryType) { -    EntryType[EntryType["Marker"] = 0] = "Marker"; -    EntryType[EntryType["Element"] = 1] = "Element"; -})(EntryType = exports.EntryType || (exports.EntryType = {})); -const MARKER = { type: EntryType.Marker }; -//List of formatting elements -class FormattingElementList { -    constructor(treeAdapter) { -        this.treeAdapter = treeAdapter; -        this.entries = []; -        this.bookmark = null; -    } -    //Noah Ark's condition -    //OPTIMIZATION: at first we try to find possible candidates for exclusion using -    //lightweight heuristics without thorough attributes check. -    _getNoahArkConditionCandidates(newElement, neAttrs) { -        const candidates = []; -        const neAttrsLength = neAttrs.length; -        const neTagName = this.treeAdapter.getTagName(newElement); -        const neNamespaceURI = this.treeAdapter.getNamespaceURI(newElement); -        for (let i = 0; i < this.entries.length; i++) { -            const entry = this.entries[i]; -            if (entry.type === EntryType.Marker) { -                break; -            } -            const { element } = entry; -            if (this.treeAdapter.getTagName(element) === neTagName && -                this.treeAdapter.getNamespaceURI(element) === neNamespaceURI) { -                const elementAttrs = this.treeAdapter.getAttrList(element); -                if (elementAttrs.length === neAttrsLength) { -                    candidates.push({ idx: i, attrs: elementAttrs }); -                } -            } -        } -        return candidates; -    } -    _ensureNoahArkCondition(newElement) { -        if (this.entries.length < NOAH_ARK_CAPACITY) -            return; -        const neAttrs = this.treeAdapter.getAttrList(newElement); -        const candidates = this._getNoahArkConditionCandidates(newElement, neAttrs); -        if (candidates.length < NOAH_ARK_CAPACITY) -            return; -        //NOTE: build attrs map for the new element, so we can perform fast lookups -        const neAttrsMap = new Map(neAttrs.map((neAttr) => [neAttr.name, neAttr.value])); -        let validCandidates = 0; -        //NOTE: remove bottommost candidates, until Noah's Ark condition will not be met -        for (let i = 0; i < candidates.length; i++) { -            const candidate = candidates[i]; -            // We know that `candidate.attrs.length === neAttrs.length` -            if (candidate.attrs.every((cAttr) => neAttrsMap.get(cAttr.name) === cAttr.value)) { -                validCandidates += 1; -                if (validCandidates >= NOAH_ARK_CAPACITY) { -                    this.entries.splice(candidate.idx, 1); -                } -            } -        } -    } -    //Mutations -    insertMarker() { -        this.entries.unshift(MARKER); -    } -    pushElement(element, token) { -        this._ensureNoahArkCondition(element); -        this.entries.unshift({ -            type: EntryType.Element, -            element, -            token, -        }); -    } -    insertElementAfterBookmark(element, token) { -        const bookmarkIdx = this.entries.indexOf(this.bookmark); -        this.entries.splice(bookmarkIdx, 0, { -            type: EntryType.Element, -            element, -            token, -        }); -    } -    removeEntry(entry) { -        const entryIndex = this.entries.indexOf(entry); -        if (entryIndex >= 0) { -            this.entries.splice(entryIndex, 1); -        } -    } -    /** -     * Clears the list of formatting elements up to the last marker. -     * -     * @see https://html.spec.whatwg.org/multipage/parsing.html#clear-the-list-of-active-formatting-elements-up-to-the-last-marker -     */ -    clearToLastMarker() { -        const markerIdx = this.entries.indexOf(MARKER); -        if (markerIdx >= 0) { -            this.entries.splice(0, markerIdx + 1); -        } -        else { -            this.entries.length = 0; -        } -    } -    //Search -    getElementEntryInScopeWithTagName(tagName) { -        const entry = this.entries.find((entry) => entry.type === EntryType.Marker || this.treeAdapter.getTagName(entry.element) === tagName); -        return entry && entry.type === EntryType.Element ? entry : null; -    } -    getElementEntry(element) { -        return this.entries.find((entry) => entry.type === EntryType.Element && entry.element === element); -    } -} -exports.FormattingElementList = FormattingElementList; - -},{}],14:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Parser = void 0; -const index_js_1 = require("../tokenizer/index.js"); -const open_element_stack_js_1 = require("./open-element-stack.js"); -const formatting_element_list_js_1 = require("./formatting-element-list.js"); -const default_js_1 = require("../tree-adapters/default.js"); -const doctype = require("../common/doctype.js"); -const foreignContent = require("../common/foreign-content.js"); -const error_codes_js_1 = require("../common/error-codes.js"); -const unicode = require("../common/unicode.js"); -const html_js_1 = require("../common/html.js"); -const token_js_1 = require("../common/token.js"); -//Misc constants -const HIDDEN_INPUT_TYPE = 'hidden'; -//Adoption agency loops iteration count -const AA_OUTER_LOOP_ITER = 8; -const AA_INNER_LOOP_ITER = 3; -//Insertion modes -var InsertionMode; -(function (InsertionMode) { -    InsertionMode[InsertionMode["INITIAL"] = 0] = "INITIAL"; -    InsertionMode[InsertionMode["BEFORE_HTML"] = 1] = "BEFORE_HTML"; -    InsertionMode[InsertionMode["BEFORE_HEAD"] = 2] = "BEFORE_HEAD"; -    InsertionMode[InsertionMode["IN_HEAD"] = 3] = "IN_HEAD"; -    InsertionMode[InsertionMode["IN_HEAD_NO_SCRIPT"] = 4] = "IN_HEAD_NO_SCRIPT"; -    InsertionMode[InsertionMode["AFTER_HEAD"] = 5] = "AFTER_HEAD"; -    InsertionMode[InsertionMode["IN_BODY"] = 6] = "IN_BODY"; -    InsertionMode[InsertionMode["TEXT"] = 7] = "TEXT"; -    InsertionMode[InsertionMode["IN_TABLE"] = 8] = "IN_TABLE"; -    InsertionMode[InsertionMode["IN_TABLE_TEXT"] = 9] = "IN_TABLE_TEXT"; -    InsertionMode[InsertionMode["IN_CAPTION"] = 10] = "IN_CAPTION"; -    InsertionMode[InsertionMode["IN_COLUMN_GROUP"] = 11] = "IN_COLUMN_GROUP"; -    InsertionMode[InsertionMode["IN_TABLE_BODY"] = 12] = "IN_TABLE_BODY"; -    InsertionMode[InsertionMode["IN_ROW"] = 13] = "IN_ROW"; -    InsertionMode[InsertionMode["IN_CELL"] = 14] = "IN_CELL"; -    InsertionMode[InsertionMode["IN_SELECT"] = 15] = "IN_SELECT"; -    InsertionMode[InsertionMode["IN_SELECT_IN_TABLE"] = 16] = "IN_SELECT_IN_TABLE"; -    InsertionMode[InsertionMode["IN_TEMPLATE"] = 17] = "IN_TEMPLATE"; -    InsertionMode[InsertionMode["AFTER_BODY"] = 18] = "AFTER_BODY"; -    InsertionMode[InsertionMode["IN_FRAMESET"] = 19] = "IN_FRAMESET"; -    InsertionMode[InsertionMode["AFTER_FRAMESET"] = 20] = "AFTER_FRAMESET"; -    InsertionMode[InsertionMode["AFTER_AFTER_BODY"] = 21] = "AFTER_AFTER_BODY"; -    InsertionMode[InsertionMode["AFTER_AFTER_FRAMESET"] = 22] = "AFTER_AFTER_FRAMESET"; -})(InsertionMode || (InsertionMode = {})); -const BASE_LOC = { -    startLine: -1, -    startCol: -1, -    startOffset: -1, -    endLine: -1, -    endCol: -1, -    endOffset: -1, -}; -const TABLE_STRUCTURE_TAGS = new Set([html_js_1.TAG_ID.TABLE, html_js_1.TAG_ID.TBODY, html_js_1.TAG_ID.TFOOT, html_js_1.TAG_ID.THEAD, html_js_1.TAG_ID.TR]); -const defaultParserOptions = { -    scriptingEnabled: true, -    sourceCodeLocationInfo: false, -    treeAdapter: default_js_1.defaultTreeAdapter, -    onParseError: null, -}; -//Parser -class Parser { -    constructor(options, document, fragmentContext = null, scriptHandler = null) { -        this.fragmentContext = fragmentContext; -        this.scriptHandler = scriptHandler; -        this.currentToken = null; -        this.stopped = false; -        this.insertionMode = InsertionMode.INITIAL; -        this.originalInsertionMode = InsertionMode.INITIAL; -        this.headElement = null; -        this.formElement = null; -        /** Indicates that the current node is not an element in the HTML namespace */ -        this.currentNotInHTML = false; -        /** -         * The template insertion mode stack is maintained from the left. -         * Ie. the topmost element will always have index 0. -         */ -        this.tmplInsertionModeStack = []; -        this.pendingCharacterTokens = []; -        this.hasNonWhitespacePendingCharacterToken = false; -        this.framesetOk = true; -        this.skipNextNewLine = false; -        this.fosterParentingEnabled = false; -        this.options = Object.assign(Object.assign({}, defaultParserOptions), options); -        this.treeAdapter = this.options.treeAdapter; -        this.onParseError = this.options.onParseError; -        // Always enable location info if we report parse errors. -        if (this.onParseError) { -            this.options.sourceCodeLocationInfo = true; -        } -        this.document = document !== null && document !== void 0 ? document : this.treeAdapter.createDocument(); -        this.tokenizer = new index_js_1.Tokenizer(this.options, this); -        this.activeFormattingElements = new formatting_element_list_js_1.FormattingElementList(this.treeAdapter); -        this.fragmentContextID = fragmentContext ? (0, html_js_1.getTagID)(this.treeAdapter.getTagName(fragmentContext)) : html_js_1.TAG_ID.UNKNOWN; -        this._setContextModes(fragmentContext !== null && fragmentContext !== void 0 ? fragmentContext : this.document, this.fragmentContextID); -        this.openElements = new open_element_stack_js_1.OpenElementStack(this.document, this.treeAdapter, this); -    } -    // API -    static parse(html, options) { -        const parser = new this(options); -        parser.tokenizer.write(html, true); -        return parser.document; -    } -    static getFragmentParser(fragmentContext, options) { -        const opts = Object.assign(Object.assign({}, defaultParserOptions), options); -        //NOTE: use a <template> element as the fragment context if no context element was provided, -        //so we will parse in a "forgiving" manner -        fragmentContext !== null && fragmentContext !== void 0 ? fragmentContext : (fragmentContext = opts.treeAdapter.createElement(html_js_1.TAG_NAMES.TEMPLATE, html_js_1.NS.HTML, [])); -        //NOTE: create a fake element which will be used as the `document` for fragment parsing. -        //This is important for jsdom, where a new `document` cannot be created. This led to -        //fragment parsing messing with the main `document`. -        const documentMock = opts.treeAdapter.createElement('documentmock', html_js_1.NS.HTML, []); -        const parser = new this(opts, documentMock, fragmentContext); -        if (parser.fragmentContextID === html_js_1.TAG_ID.TEMPLATE) { -            parser.tmplInsertionModeStack.unshift(InsertionMode.IN_TEMPLATE); -        } -        parser._initTokenizerForFragmentParsing(); -        parser._insertFakeRootElement(); -        parser._resetInsertionMode(); -        parser._findFormInFragmentContext(); -        return parser; -    } -    getFragment() { -        const rootElement = this.treeAdapter.getFirstChild(this.document); -        const fragment = this.treeAdapter.createDocumentFragment(); -        this._adoptNodes(rootElement, fragment); -        return fragment; -    } -    //Errors -    _err(token, code, beforeToken) { -        var _a; -        if (!this.onParseError) -            return; -        const loc = (_a = token.location) !== null && _a !== void 0 ? _a : BASE_LOC; -        const err = { -            code, -            startLine: loc.startLine, -            startCol: loc.startCol, -            startOffset: loc.startOffset, -            endLine: beforeToken ? loc.startLine : loc.endLine, -            endCol: beforeToken ? loc.startCol : loc.endCol, -            endOffset: beforeToken ? loc.startOffset : loc.endOffset, -        }; -        this.onParseError(err); -    } -    //Stack events -    onItemPush(node, tid, isTop) { -        var _a, _b; -        (_b = (_a = this.treeAdapter).onItemPush) === null || _b === void 0 ? void 0 : _b.call(_a, node); -        if (isTop && this.openElements.stackTop > 0) -            this._setContextModes(node, tid); -    } -    onItemPop(node, isTop) { -        var _a, _b; -        if (this.options.sourceCodeLocationInfo) { -            this._setEndLocation(node, this.currentToken); -        } -        (_b = (_a = this.treeAdapter).onItemPop) === null || _b === void 0 ? void 0 : _b.call(_a, node, this.openElements.current); -        if (isTop) { -            let current; -            let currentTagId; -            if (this.openElements.stackTop === 0 && this.fragmentContext) { -                current = this.fragmentContext; -                currentTagId = this.fragmentContextID; -            } -            else { -                ({ current, currentTagId } = this.openElements); -            } -            this._setContextModes(current, currentTagId); -        } -    } -    _setContextModes(current, tid) { -        const isHTML = current === this.document || this.treeAdapter.getNamespaceURI(current) === html_js_1.NS.HTML; -        this.currentNotInHTML = !isHTML; -        this.tokenizer.inForeignNode = !isHTML && !this._isIntegrationPoint(tid, current); -    } -    _switchToTextParsing(currentToken, nextTokenizerState) { -        this._insertElement(currentToken, html_js_1.NS.HTML); -        this.tokenizer.state = nextTokenizerState; -        this.originalInsertionMode = this.insertionMode; -        this.insertionMode = InsertionMode.TEXT; -    } -    switchToPlaintextParsing() { -        this.insertionMode = InsertionMode.TEXT; -        this.originalInsertionMode = InsertionMode.IN_BODY; -        this.tokenizer.state = index_js_1.TokenizerMode.PLAINTEXT; -    } -    //Fragment parsing -    _getAdjustedCurrentElement() { -        return this.openElements.stackTop === 0 && this.fragmentContext -            ? this.fragmentContext -            : this.openElements.current; -    } -    _findFormInFragmentContext() { -        let node = this.fragmentContext; -        while (node) { -            if (this.treeAdapter.getTagName(node) === html_js_1.TAG_NAMES.FORM) { -                this.formElement = node; -                break; -            } -            node = this.treeAdapter.getParentNode(node); -        } -    } -    _initTokenizerForFragmentParsing() { -        if (!this.fragmentContext || this.treeAdapter.getNamespaceURI(this.fragmentContext) !== html_js_1.NS.HTML) { -            return; -        } -        switch (this.fragmentContextID) { -            case html_js_1.TAG_ID.TITLE: -            case html_js_1.TAG_ID.TEXTAREA: { -                this.tokenizer.state = index_js_1.TokenizerMode.RCDATA; -                break; -            } -            case html_js_1.TAG_ID.STYLE: -            case html_js_1.TAG_ID.XMP: -            case html_js_1.TAG_ID.IFRAME: -            case html_js_1.TAG_ID.NOEMBED: -            case html_js_1.TAG_ID.NOFRAMES: -            case html_js_1.TAG_ID.NOSCRIPT: { -                this.tokenizer.state = index_js_1.TokenizerMode.RAWTEXT; -                break; -            } -            case html_js_1.TAG_ID.SCRIPT: { -                this.tokenizer.state = index_js_1.TokenizerMode.SCRIPT_DATA; -                break; -            } -            case html_js_1.TAG_ID.PLAINTEXT: { -                this.tokenizer.state = index_js_1.TokenizerMode.PLAINTEXT; -                break; -            } -            default: -            // Do nothing -        } -    } -    //Tree mutation -    _setDocumentType(token) { -        const name = token.name || ''; -        const publicId = token.publicId || ''; -        const systemId = token.systemId || ''; -        this.treeAdapter.setDocumentType(this.document, name, publicId, systemId); -        if (token.location) { -            const documentChildren = this.treeAdapter.getChildNodes(this.document); -            const docTypeNode = documentChildren.find((node) => this.treeAdapter.isDocumentTypeNode(node)); -            if (docTypeNode) { -                this.treeAdapter.setNodeSourceCodeLocation(docTypeNode, token.location); -            } -        } -    } -    _attachElementToTree(element, location) { -        if (this.options.sourceCodeLocationInfo) { -            const loc = location && Object.assign(Object.assign({}, location), { startTag: location }); -            this.treeAdapter.setNodeSourceCodeLocation(element, loc); -        } -        if (this._shouldFosterParentOnInsertion()) { -            this._fosterParentElement(element); -        } -        else { -            const parent = this.openElements.currentTmplContentOrNode; -            this.treeAdapter.appendChild(parent, element); -        } -    } -    _appendElement(token, namespaceURI) { -        const element = this.treeAdapter.createElement(token.tagName, namespaceURI, token.attrs); -        this._attachElementToTree(element, token.location); -    } -    _insertElement(token, namespaceURI) { -        const element = this.treeAdapter.createElement(token.tagName, namespaceURI, token.attrs); -        this._attachElementToTree(element, token.location); -        this.openElements.push(element, token.tagID); -    } -    _insertFakeElement(tagName, tagID) { -        const element = this.treeAdapter.createElement(tagName, html_js_1.NS.HTML, []); -        this._attachElementToTree(element, null); -        this.openElements.push(element, tagID); -    } -    _insertTemplate(token) { -        const tmpl = this.treeAdapter.createElement(token.tagName, html_js_1.NS.HTML, token.attrs); -        const content = this.treeAdapter.createDocumentFragment(); -        this.treeAdapter.setTemplateContent(tmpl, content); -        this._attachElementToTree(tmpl, token.location); -        this.openElements.push(tmpl, token.tagID); -        if (this.options.sourceCodeLocationInfo) -            this.treeAdapter.setNodeSourceCodeLocation(content, null); -    } -    _insertFakeRootElement() { -        const element = this.treeAdapter.createElement(html_js_1.TAG_NAMES.HTML, html_js_1.NS.HTML, []); -        if (this.options.sourceCodeLocationInfo) -            this.treeAdapter.setNodeSourceCodeLocation(element, null); -        this.treeAdapter.appendChild(this.openElements.current, element); -        this.openElements.push(element, html_js_1.TAG_ID.HTML); -    } -    _appendCommentNode(token, parent) { -        const commentNode = this.treeAdapter.createCommentNode(token.data); -        this.treeAdapter.appendChild(parent, commentNode); -        if (this.options.sourceCodeLocationInfo) { -            this.treeAdapter.setNodeSourceCodeLocation(commentNode, token.location); -        } -    } -    _insertCharacters(token) { -        let parent; -        let beforeElement; -        if (this._shouldFosterParentOnInsertion()) { -            ({ parent, beforeElement } = this._findFosterParentingLocation()); -            if (beforeElement) { -                this.treeAdapter.insertTextBefore(parent, token.chars, beforeElement); -            } -            else { -                this.treeAdapter.insertText(parent, token.chars); -            } -        } -        else { -            parent = this.openElements.currentTmplContentOrNode; -            this.treeAdapter.insertText(parent, token.chars); -        } -        if (!token.location) -            return; -        const siblings = this.treeAdapter.getChildNodes(parent); -        const textNodeIdx = beforeElement ? siblings.lastIndexOf(beforeElement) : siblings.length; -        const textNode = siblings[textNodeIdx - 1]; -        //NOTE: if we have a location assigned by another token, then just update the end position -        const tnLoc = this.treeAdapter.getNodeSourceCodeLocation(textNode); -        if (tnLoc) { -            const { endLine, endCol, endOffset } = token.location; -            this.treeAdapter.updateNodeSourceCodeLocation(textNode, { endLine, endCol, endOffset }); -        } -        else if (this.options.sourceCodeLocationInfo) { -            this.treeAdapter.setNodeSourceCodeLocation(textNode, token.location); -        } -    } -    _adoptNodes(donor, recipient) { -        for (let child = this.treeAdapter.getFirstChild(donor); child; child = this.treeAdapter.getFirstChild(donor)) { -            this.treeAdapter.detachNode(child); -            this.treeAdapter.appendChild(recipient, child); -        } -    } -    _setEndLocation(element, closingToken) { -        if (this.treeAdapter.getNodeSourceCodeLocation(element) && closingToken.location) { -            const ctLoc = closingToken.location; -            const tn = this.treeAdapter.getTagName(element); -            const endLoc =  -            // NOTE: For cases like <p> <p> </p> - First 'p' closes without a closing -            // tag and for cases like <td> <p> </td> - 'p' closes without a closing tag. -            closingToken.type === token_js_1.TokenType.END_TAG && tn === closingToken.tagName -                ? { -                    endTag: Object.assign({}, ctLoc), -                    endLine: ctLoc.endLine, -                    endCol: ctLoc.endCol, -                    endOffset: ctLoc.endOffset, -                } -                : { -                    endLine: ctLoc.startLine, -                    endCol: ctLoc.startCol, -                    endOffset: ctLoc.startOffset, -                }; -            this.treeAdapter.updateNodeSourceCodeLocation(element, endLoc); -        } -    } -    //Token processing -    shouldProcessStartTagTokenInForeignContent(token) { -        // Check that neither current === document, or ns === NS.HTML -        if (!this.currentNotInHTML) -            return false; -        let current; -        let currentTagId; -        if (this.openElements.stackTop === 0 && this.fragmentContext) { -            current = this.fragmentContext; -            currentTagId = this.fragmentContextID; -        } -        else { -            ({ current, currentTagId } = this.openElements); -        } -        if (token.tagID === html_js_1.TAG_ID.SVG && -            this.treeAdapter.getTagName(current) === html_js_1.TAG_NAMES.ANNOTATION_XML && -            this.treeAdapter.getNamespaceURI(current) === html_js_1.NS.MATHML) { -            return false; -        } -        return ( -        // Check that `current` is not an integration point for HTML or MathML elements. -        this.tokenizer.inForeignNode || -            // If it _is_ an integration point, then we might have to check that it is not an HTML -            // integration point. -            ((token.tagID === html_js_1.TAG_ID.MGLYPH || token.tagID === html_js_1.TAG_ID.MALIGNMARK) && -                !this._isIntegrationPoint(currentTagId, current, html_js_1.NS.HTML))); -    } -    _processToken(token) { -        switch (token.type) { -            case token_js_1.TokenType.CHARACTER: { -                this.onCharacter(token); -                break; -            } -            case token_js_1.TokenType.NULL_CHARACTER: { -                this.onNullCharacter(token); -                break; -            } -            case token_js_1.TokenType.COMMENT: { -                this.onComment(token); -                break; -            } -            case token_js_1.TokenType.DOCTYPE: { -                this.onDoctype(token); -                break; -            } -            case token_js_1.TokenType.START_TAG: { -                this._processStartTag(token); -                break; -            } -            case token_js_1.TokenType.END_TAG: { -                this.onEndTag(token); -                break; -            } -            case token_js_1.TokenType.EOF: { -                this.onEof(token); -                break; -            } -            case token_js_1.TokenType.WHITESPACE_CHARACTER: { -                this.onWhitespaceCharacter(token); -                break; -            } -        } -    } -    //Integration points -    _isIntegrationPoint(tid, element, foreignNS) { -        const ns = this.treeAdapter.getNamespaceURI(element); -        const attrs = this.treeAdapter.getAttrList(element); -        return foreignContent.isIntegrationPoint(tid, ns, attrs, foreignNS); -    } -    //Active formatting elements reconstruction -    _reconstructActiveFormattingElements() { -        const listLength = this.activeFormattingElements.entries.length; -        if (listLength) { -            const endIndex = this.activeFormattingElements.entries.findIndex((entry) => entry.type === formatting_element_list_js_1.EntryType.Marker || this.openElements.contains(entry.element)); -            const unopenIdx = endIndex < 0 ? listLength - 1 : endIndex - 1; -            for (let i = unopenIdx; i >= 0; i--) { -                const entry = this.activeFormattingElements.entries[i]; -                this._insertElement(entry.token, this.treeAdapter.getNamespaceURI(entry.element)); -                entry.element = this.openElements.current; -            } -        } -    } -    //Close elements -    _closeTableCell() { -        this.openElements.generateImpliedEndTags(); -        this.openElements.popUntilTableCellPopped(); -        this.activeFormattingElements.clearToLastMarker(); -        this.insertionMode = InsertionMode.IN_ROW; -    } -    _closePElement() { -        this.openElements.generateImpliedEndTagsWithExclusion(html_js_1.TAG_ID.P); -        this.openElements.popUntilTagNamePopped(html_js_1.TAG_ID.P); -    } -    //Insertion modes -    _resetInsertionMode() { -        for (let i = this.openElements.stackTop; i >= 0; i--) { -            //Insertion mode reset map -            switch (i === 0 && this.fragmentContext ? this.fragmentContextID : this.openElements.tagIDs[i]) { -                case html_js_1.TAG_ID.TR: { -                    this.insertionMode = InsertionMode.IN_ROW; -                    return; -                } -                case html_js_1.TAG_ID.TBODY: -                case html_js_1.TAG_ID.THEAD: -                case html_js_1.TAG_ID.TFOOT: { -                    this.insertionMode = InsertionMode.IN_TABLE_BODY; -                    return; -                } -                case html_js_1.TAG_ID.CAPTION: { -                    this.insertionMode = InsertionMode.IN_CAPTION; -                    return; -                } -                case html_js_1.TAG_ID.COLGROUP: { -                    this.insertionMode = InsertionMode.IN_COLUMN_GROUP; -                    return; -                } -                case html_js_1.TAG_ID.TABLE: { -                    this.insertionMode = InsertionMode.IN_TABLE; -                    return; -                } -                case html_js_1.TAG_ID.BODY: { -                    this.insertionMode = InsertionMode.IN_BODY; -                    return; -                } -                case html_js_1.TAG_ID.FRAMESET: { -                    this.insertionMode = InsertionMode.IN_FRAMESET; -                    return; -                } -                case html_js_1.TAG_ID.SELECT: { -                    this._resetInsertionModeForSelect(i); -                    return; -                } -                case html_js_1.TAG_ID.TEMPLATE: { -                    this.insertionMode = this.tmplInsertionModeStack[0]; -                    return; -                } -                case html_js_1.TAG_ID.HTML: { -                    this.insertionMode = this.headElement ? InsertionMode.AFTER_HEAD : InsertionMode.BEFORE_HEAD; -                    return; -                } -                case html_js_1.TAG_ID.TD: -                case html_js_1.TAG_ID.TH: { -                    if (i > 0) { -                        this.insertionMode = InsertionMode.IN_CELL; -                        return; -                    } -                    break; -                } -                case html_js_1.TAG_ID.HEAD: { -                    if (i > 0) { -                        this.insertionMode = InsertionMode.IN_HEAD; -                        return; -                    } -                    break; -                } -            } -        } -        this.insertionMode = InsertionMode.IN_BODY; -    } -    _resetInsertionModeForSelect(selectIdx) { -        if (selectIdx > 0) { -            for (let i = selectIdx - 1; i > 0; i--) { -                const tn = this.openElements.tagIDs[i]; -                if (tn === html_js_1.TAG_ID.TEMPLATE) { -                    break; -                } -                else if (tn === html_js_1.TAG_ID.TABLE) { -                    this.insertionMode = InsertionMode.IN_SELECT_IN_TABLE; -                    return; -                } -            } -        } -        this.insertionMode = InsertionMode.IN_SELECT; -    } -    //Foster parenting -    _isElementCausesFosterParenting(tn) { -        return TABLE_STRUCTURE_TAGS.has(tn); -    } -    _shouldFosterParentOnInsertion() { -        return this.fosterParentingEnabled && this._isElementCausesFosterParenting(this.openElements.currentTagId); -    } -    _findFosterParentingLocation() { -        for (let i = this.openElements.stackTop; i >= 0; i--) { -            const openElement = this.openElements.items[i]; -            switch (this.openElements.tagIDs[i]) { -                case html_js_1.TAG_ID.TEMPLATE: { -                    if (this.treeAdapter.getNamespaceURI(openElement) === html_js_1.NS.HTML) { -                        return { parent: this.treeAdapter.getTemplateContent(openElement), beforeElement: null }; -                    } -                    break; -                } -                case html_js_1.TAG_ID.TABLE: { -                    const parent = this.treeAdapter.getParentNode(openElement); -                    if (parent) { -                        return { parent, beforeElement: openElement }; -                    } -                    return { parent: this.openElements.items[i - 1], beforeElement: null }; -                } -                default: -                // Do nothing -            } -        } -        return { parent: this.openElements.items[0], beforeElement: null }; -    } -    _fosterParentElement(element) { -        const location = this._findFosterParentingLocation(); -        if (location.beforeElement) { -            this.treeAdapter.insertBefore(location.parent, element, location.beforeElement); -        } -        else { -            this.treeAdapter.appendChild(location.parent, element); -        } -    } -    //Special elements -    _isSpecialElement(element, id) { -        const ns = this.treeAdapter.getNamespaceURI(element); -        return html_js_1.SPECIAL_ELEMENTS[ns].has(id); -    } -    onCharacter(token) { -        this.skipNextNewLine = false; -        if (this.tokenizer.inForeignNode) { -            characterInForeignContent(this, token); -            return; -        } -        switch (this.insertionMode) { -            case InsertionMode.INITIAL: { -                tokenInInitialMode(this, token); -                break; -            } -            case InsertionMode.BEFORE_HTML: { -                tokenBeforeHtml(this, token); -                break; -            } -            case InsertionMode.BEFORE_HEAD: { -                tokenBeforeHead(this, token); -                break; -            } -            case InsertionMode.IN_HEAD: { -                tokenInHead(this, token); -                break; -            } -            case InsertionMode.IN_HEAD_NO_SCRIPT: { -                tokenInHeadNoScript(this, token); -                break; -            } -            case InsertionMode.AFTER_HEAD: { -                tokenAfterHead(this, token); -                break; -            } -            case InsertionMode.IN_BODY: -            case InsertionMode.IN_CAPTION: -            case InsertionMode.IN_CELL: -            case InsertionMode.IN_TEMPLATE: { -                characterInBody(this, token); -                break; -            } -            case InsertionMode.TEXT: -            case InsertionMode.IN_SELECT: -            case InsertionMode.IN_SELECT_IN_TABLE: { -                this._insertCharacters(token); -                break; -            } -            case InsertionMode.IN_TABLE: -            case InsertionMode.IN_TABLE_BODY: -            case InsertionMode.IN_ROW: { -                characterInTable(this, token); -                break; -            } -            case InsertionMode.IN_TABLE_TEXT: { -                characterInTableText(this, token); -                break; -            } -            case InsertionMode.IN_COLUMN_GROUP: { -                tokenInColumnGroup(this, token); -                break; -            } -            case InsertionMode.AFTER_BODY: { -                tokenAfterBody(this, token); -                break; -            } -            case InsertionMode.AFTER_AFTER_BODY: { -                tokenAfterAfterBody(this, token); -                break; -            } -            default: -            // Do nothing -        } -    } -    onNullCharacter(token) { -        this.skipNextNewLine = false; -        if (this.tokenizer.inForeignNode) { -            nullCharacterInForeignContent(this, token); -            return; -        } -        switch (this.insertionMode) { -            case InsertionMode.INITIAL: { -                tokenInInitialMode(this, token); -                break; -            } -            case InsertionMode.BEFORE_HTML: { -                tokenBeforeHtml(this, token); -                break; -            } -            case InsertionMode.BEFORE_HEAD: { -                tokenBeforeHead(this, token); -                break; -            } -            case InsertionMode.IN_HEAD: { -                tokenInHead(this, token); -                break; -            } -            case InsertionMode.IN_HEAD_NO_SCRIPT: { -                tokenInHeadNoScript(this, token); -                break; -            } -            case InsertionMode.AFTER_HEAD: { -                tokenAfterHead(this, token); -                break; -            } -            case InsertionMode.TEXT: { -                this._insertCharacters(token); -                break; -            } -            case InsertionMode.IN_TABLE: -            case InsertionMode.IN_TABLE_BODY: -            case InsertionMode.IN_ROW: { -                characterInTable(this, token); -                break; -            } -            case InsertionMode.IN_COLUMN_GROUP: { -                tokenInColumnGroup(this, token); -                break; -            } -            case InsertionMode.AFTER_BODY: { -                tokenAfterBody(this, token); -                break; -            } -            case InsertionMode.AFTER_AFTER_BODY: { -                tokenAfterAfterBody(this, token); -                break; -            } -            default: -            // Do nothing -        } -    } -    onComment(token) { -        this.skipNextNewLine = false; -        if (this.currentNotInHTML) { -            appendComment(this, token); -            return; -        } -        switch (this.insertionMode) { -            case InsertionMode.INITIAL: -            case InsertionMode.BEFORE_HTML: -            case InsertionMode.BEFORE_HEAD: -            case InsertionMode.IN_HEAD: -            case InsertionMode.IN_HEAD_NO_SCRIPT: -            case InsertionMode.AFTER_HEAD: -            case InsertionMode.IN_BODY: -            case InsertionMode.IN_TABLE: -            case InsertionMode.IN_CAPTION: -            case InsertionMode.IN_COLUMN_GROUP: -            case InsertionMode.IN_TABLE_BODY: -            case InsertionMode.IN_ROW: -            case InsertionMode.IN_CELL: -            case InsertionMode.IN_SELECT: -            case InsertionMode.IN_SELECT_IN_TABLE: -            case InsertionMode.IN_TEMPLATE: -            case InsertionMode.IN_FRAMESET: -            case InsertionMode.AFTER_FRAMESET: { -                appendComment(this, token); -                break; -            } -            case InsertionMode.IN_TABLE_TEXT: { -                tokenInTableText(this, token); -                break; -            } -            case InsertionMode.AFTER_BODY: { -                appendCommentToRootHtmlElement(this, token); -                break; -            } -            case InsertionMode.AFTER_AFTER_BODY: -            case InsertionMode.AFTER_AFTER_FRAMESET: { -                appendCommentToDocument(this, token); -                break; -            } -            default: -            // Do nothing -        } -    } -    onDoctype(token) { -        this.skipNextNewLine = false; -        switch (this.insertionMode) { -            case InsertionMode.INITIAL: { -                doctypeInInitialMode(this, token); -                break; -            } -            case InsertionMode.BEFORE_HEAD: -            case InsertionMode.IN_HEAD: -            case InsertionMode.IN_HEAD_NO_SCRIPT: -            case InsertionMode.AFTER_HEAD: { -                this._err(token, error_codes_js_1.ERR.misplacedDoctype); -                break; -            } -            case InsertionMode.IN_TABLE_TEXT: { -                tokenInTableText(this, token); -                break; -            } -            default: -            // Do nothing -        } -    } -    onStartTag(token) { -        this.skipNextNewLine = false; -        this.currentToken = token; -        this._processStartTag(token); -        if (token.selfClosing && !token.ackSelfClosing) { -            this._err(token, error_codes_js_1.ERR.nonVoidHtmlElementStartTagWithTrailingSolidus); -        } -    } -    /** -     * Processes a given start tag. -     * -     * `onStartTag` checks if a self-closing tag was recognized. When a token -     * is moved inbetween multiple insertion modes, this check for self-closing -     * could lead to false positives. To avoid this, `_processStartTag` is used -     * for nested calls. -     * -     * @param token The token to process. -     */ -    _processStartTag(token) { -        if (this.shouldProcessStartTagTokenInForeignContent(token)) { -            startTagInForeignContent(this, token); -        } -        else { -            this._startTagOutsideForeignContent(token); -        } -    } -    _startTagOutsideForeignContent(token) { -        switch (this.insertionMode) { -            case InsertionMode.INITIAL: { -                tokenInInitialMode(this, token); -                break; -            } -            case InsertionMode.BEFORE_HTML: { -                startTagBeforeHtml(this, token); -                break; -            } -            case InsertionMode.BEFORE_HEAD: { -                startTagBeforeHead(this, token); -                break; -            } -            case InsertionMode.IN_HEAD: { -                startTagInHead(this, token); -                break; -            } -            case InsertionMode.IN_HEAD_NO_SCRIPT: { -                startTagInHeadNoScript(this, token); -                break; -            } -            case InsertionMode.AFTER_HEAD: { -                startTagAfterHead(this, token); -                break; -            } -            case InsertionMode.IN_BODY: { -                startTagInBody(this, token); -                break; -            } -            case InsertionMode.IN_TABLE: { -                startTagInTable(this, token); -                break; -            } -            case InsertionMode.IN_TABLE_TEXT: { -                tokenInTableText(this, token); -                break; -            } -            case InsertionMode.IN_CAPTION: { -                startTagInCaption(this, token); -                break; -            } -            case InsertionMode.IN_COLUMN_GROUP: { -                startTagInColumnGroup(this, token); -                break; -            } -            case InsertionMode.IN_TABLE_BODY: { -                startTagInTableBody(this, token); -                break; -            } -            case InsertionMode.IN_ROW: { -                startTagInRow(this, token); -                break; -            } -            case InsertionMode.IN_CELL: { -                startTagInCell(this, token); -                break; -            } -            case InsertionMode.IN_SELECT: { -                startTagInSelect(this, token); -                break; -            } -            case InsertionMode.IN_SELECT_IN_TABLE: { -                startTagInSelectInTable(this, token); -                break; -            } -            case InsertionMode.IN_TEMPLATE: { -                startTagInTemplate(this, token); -                break; -            } -            case InsertionMode.AFTER_BODY: { -                startTagAfterBody(this, token); -                break; -            } -            case InsertionMode.IN_FRAMESET: { -                startTagInFrameset(this, token); -                break; -            } -            case InsertionMode.AFTER_FRAMESET: { -                startTagAfterFrameset(this, token); -                break; -            } -            case InsertionMode.AFTER_AFTER_BODY: { -                startTagAfterAfterBody(this, token); -                break; -            } -            case InsertionMode.AFTER_AFTER_FRAMESET: { -                startTagAfterAfterFrameset(this, token); -                break; -            } -            default: -            // Do nothing -        } -    } -    onEndTag(token) { -        this.skipNextNewLine = false; -        this.currentToken = token; -        if (this.currentNotInHTML) { -            endTagInForeignContent(this, token); -        } -        else { -            this._endTagOutsideForeignContent(token); -        } -    } -    _endTagOutsideForeignContent(token) { -        switch (this.insertionMode) { -            case InsertionMode.INITIAL: { -                tokenInInitialMode(this, token); -                break; -            } -            case InsertionMode.BEFORE_HTML: { -                endTagBeforeHtml(this, token); -                break; -            } -            case InsertionMode.BEFORE_HEAD: { -                endTagBeforeHead(this, token); -                break; -            } -            case InsertionMode.IN_HEAD: { -                endTagInHead(this, token); -                break; -            } -            case InsertionMode.IN_HEAD_NO_SCRIPT: { -                endTagInHeadNoScript(this, token); -                break; -            } -            case InsertionMode.AFTER_HEAD: { -                endTagAfterHead(this, token); -                break; -            } -            case InsertionMode.IN_BODY: { -                endTagInBody(this, token); -                break; -            } -            case InsertionMode.TEXT: { -                endTagInText(this, token); -                break; -            } -            case InsertionMode.IN_TABLE: { -                endTagInTable(this, token); -                break; -            } -            case InsertionMode.IN_TABLE_TEXT: { -                tokenInTableText(this, token); -                break; -            } -            case InsertionMode.IN_CAPTION: { -                endTagInCaption(this, token); -                break; -            } -            case InsertionMode.IN_COLUMN_GROUP: { -                endTagInColumnGroup(this, token); -                break; -            } -            case InsertionMode.IN_TABLE_BODY: { -                endTagInTableBody(this, token); -                break; -            } -            case InsertionMode.IN_ROW: { -                endTagInRow(this, token); -                break; -            } -            case InsertionMode.IN_CELL: { -                endTagInCell(this, token); -                break; -            } -            case InsertionMode.IN_SELECT: { -                endTagInSelect(this, token); -                break; -            } -            case InsertionMode.IN_SELECT_IN_TABLE: { -                endTagInSelectInTable(this, token); -                break; -            } -            case InsertionMode.IN_TEMPLATE: { -                endTagInTemplate(this, token); -                break; -            } -            case InsertionMode.AFTER_BODY: { -                endTagAfterBody(this, token); -                break; -            } -            case InsertionMode.IN_FRAMESET: { -                endTagInFrameset(this, token); -                break; -            } -            case InsertionMode.AFTER_FRAMESET: { -                endTagAfterFrameset(this, token); -                break; -            } -            case InsertionMode.AFTER_AFTER_BODY: { -                tokenAfterAfterBody(this, token); -                break; -            } -            default: -            // Do nothing -        } -    } -    onEof(token) { -        switch (this.insertionMode) { -            case InsertionMode.INITIAL: { -                tokenInInitialMode(this, token); -                break; -            } -            case InsertionMode.BEFORE_HTML: { -                tokenBeforeHtml(this, token); -                break; -            } -            case InsertionMode.BEFORE_HEAD: { -                tokenBeforeHead(this, token); -                break; -            } -            case InsertionMode.IN_HEAD: { -                tokenInHead(this, token); -                break; -            } -            case InsertionMode.IN_HEAD_NO_SCRIPT: { -                tokenInHeadNoScript(this, token); -                break; -            } -            case InsertionMode.AFTER_HEAD: { -                tokenAfterHead(this, token); -                break; -            } -            case InsertionMode.IN_BODY: -            case InsertionMode.IN_TABLE: -            case InsertionMode.IN_CAPTION: -            case InsertionMode.IN_COLUMN_GROUP: -            case InsertionMode.IN_TABLE_BODY: -            case InsertionMode.IN_ROW: -            case InsertionMode.IN_CELL: -            case InsertionMode.IN_SELECT: -            case InsertionMode.IN_SELECT_IN_TABLE: { -                eofInBody(this, token); -                break; -            } -            case InsertionMode.TEXT: { -                eofInText(this, token); -                break; -            } -            case InsertionMode.IN_TABLE_TEXT: { -                tokenInTableText(this, token); -                break; -            } -            case InsertionMode.IN_TEMPLATE: { -                eofInTemplate(this, token); -                break; -            } -            case InsertionMode.AFTER_BODY: -            case InsertionMode.IN_FRAMESET: -            case InsertionMode.AFTER_FRAMESET: -            case InsertionMode.AFTER_AFTER_BODY: -            case InsertionMode.AFTER_AFTER_FRAMESET: { -                stopParsing(this, token); -                break; -            } -            default: -            // Do nothing -        } -    } -    onWhitespaceCharacter(token) { -        if (this.skipNextNewLine) { -            this.skipNextNewLine = false; -            if (token.chars.charCodeAt(0) === unicode.CODE_POINTS.LINE_FEED) { -                if (token.chars.length === 1) { -                    return; -                } -                token.chars = token.chars.substr(1); -            } -        } -        if (this.tokenizer.inForeignNode) { -            this._insertCharacters(token); -            return; -        } -        switch (this.insertionMode) { -            case InsertionMode.IN_HEAD: -            case InsertionMode.IN_HEAD_NO_SCRIPT: -            case InsertionMode.AFTER_HEAD: -            case InsertionMode.TEXT: -            case InsertionMode.IN_COLUMN_GROUP: -            case InsertionMode.IN_SELECT: -            case InsertionMode.IN_SELECT_IN_TABLE: -            case InsertionMode.IN_FRAMESET: -            case InsertionMode.AFTER_FRAMESET: { -                this._insertCharacters(token); -                break; -            } -            case InsertionMode.IN_BODY: -            case InsertionMode.IN_CAPTION: -            case InsertionMode.IN_CELL: -            case InsertionMode.IN_TEMPLATE: -            case InsertionMode.AFTER_BODY: -            case InsertionMode.AFTER_AFTER_BODY: -            case InsertionMode.AFTER_AFTER_FRAMESET: { -                whitespaceCharacterInBody(this, token); -                break; -            } -            case InsertionMode.IN_TABLE: -            case InsertionMode.IN_TABLE_BODY: -            case InsertionMode.IN_ROW: { -                characterInTable(this, token); -                break; -            } -            case InsertionMode.IN_TABLE_TEXT: { -                whitespaceCharacterInTableText(this, token); -                break; -            } -            default: -            // Do nothing -        } -    } -} -exports.Parser = Parser; -//Adoption agency algorithm -//(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/tree-construction.html#adoptionAgency) -//------------------------------------------------------------------ -//Steps 5-8 of the algorithm -function aaObtainFormattingElementEntry(p, token) { -    let formattingElementEntry = p.activeFormattingElements.getElementEntryInScopeWithTagName(token.tagName); -    if (formattingElementEntry) { -        if (!p.openElements.contains(formattingElementEntry.element)) { -            p.activeFormattingElements.removeEntry(formattingElementEntry); -            formattingElementEntry = null; -        } -        else if (!p.openElements.hasInScope(token.tagID)) { -            formattingElementEntry = null; -        } -    } -    else { -        genericEndTagInBody(p, token); -    } -    return formattingElementEntry; -} -//Steps 9 and 10 of the algorithm -function aaObtainFurthestBlock(p, formattingElementEntry) { -    let furthestBlock = null; -    let idx = p.openElements.stackTop; -    for (; idx >= 0; idx--) { -        const element = p.openElements.items[idx]; -        if (element === formattingElementEntry.element) { -            break; -        } -        if (p._isSpecialElement(element, p.openElements.tagIDs[idx])) { -            furthestBlock = element; -        } -    } -    if (!furthestBlock) { -        p.openElements.shortenToLength(idx < 0 ? 0 : idx); -        p.activeFormattingElements.removeEntry(formattingElementEntry); -    } -    return furthestBlock; -} -//Step 13 of the algorithm -function aaInnerLoop(p, furthestBlock, formattingElement) { -    let lastElement = furthestBlock; -    let nextElement = p.openElements.getCommonAncestor(furthestBlock); -    for (let i = 0, element = nextElement; element !== formattingElement; i++, element = nextElement) { -        //NOTE: store the next element for the next loop iteration (it may be deleted from the stack by step 9.5) -        nextElement = p.openElements.getCommonAncestor(element); -        const elementEntry = p.activeFormattingElements.getElementEntry(element); -        const counterOverflow = elementEntry && i >= AA_INNER_LOOP_ITER; -        const shouldRemoveFromOpenElements = !elementEntry || counterOverflow; -        if (shouldRemoveFromOpenElements) { -            if (counterOverflow) { -                p.activeFormattingElements.removeEntry(elementEntry); -            } -            p.openElements.remove(element); -        } -        else { -            element = aaRecreateElementFromEntry(p, elementEntry); -            if (lastElement === furthestBlock) { -                p.activeFormattingElements.bookmark = elementEntry; -            } -            p.treeAdapter.detachNode(lastElement); -            p.treeAdapter.appendChild(element, lastElement); -            lastElement = element; -        } -    } -    return lastElement; -} -//Step 13.7 of the algorithm -function aaRecreateElementFromEntry(p, elementEntry) { -    const ns = p.treeAdapter.getNamespaceURI(elementEntry.element); -    const newElement = p.treeAdapter.createElement(elementEntry.token.tagName, ns, elementEntry.token.attrs); -    p.openElements.replace(elementEntry.element, newElement); -    elementEntry.element = newElement; -    return newElement; -} -//Step 14 of the algorithm -function aaInsertLastNodeInCommonAncestor(p, commonAncestor, lastElement) { -    const tn = p.treeAdapter.getTagName(commonAncestor); -    const tid = (0, html_js_1.getTagID)(tn); -    if (p._isElementCausesFosterParenting(tid)) { -        p._fosterParentElement(lastElement); -    } -    else { -        const ns = p.treeAdapter.getNamespaceURI(commonAncestor); -        if (tid === html_js_1.TAG_ID.TEMPLATE && ns === html_js_1.NS.HTML) { -            commonAncestor = p.treeAdapter.getTemplateContent(commonAncestor); -        } -        p.treeAdapter.appendChild(commonAncestor, lastElement); -    } -} -//Steps 15-19 of the algorithm -function aaReplaceFormattingElement(p, furthestBlock, formattingElementEntry) { -    const ns = p.treeAdapter.getNamespaceURI(formattingElementEntry.element); -    const { token } = formattingElementEntry; -    const newElement = p.treeAdapter.createElement(token.tagName, ns, token.attrs); -    p._adoptNodes(furthestBlock, newElement); -    p.treeAdapter.appendChild(furthestBlock, newElement); -    p.activeFormattingElements.insertElementAfterBookmark(newElement, token); -    p.activeFormattingElements.removeEntry(formattingElementEntry); -    p.openElements.remove(formattingElementEntry.element); -    p.openElements.insertAfter(furthestBlock, newElement, token.tagID); -} -//Algorithm entry point -function callAdoptionAgency(p, token) { -    for (let i = 0; i < AA_OUTER_LOOP_ITER; i++) { -        const formattingElementEntry = aaObtainFormattingElementEntry(p, token); -        if (!formattingElementEntry) { -            break; -        } -        const furthestBlock = aaObtainFurthestBlock(p, formattingElementEntry); -        if (!furthestBlock) { -            break; -        } -        p.activeFormattingElements.bookmark = formattingElementEntry; -        const lastElement = aaInnerLoop(p, furthestBlock, formattingElementEntry.element); -        const commonAncestor = p.openElements.getCommonAncestor(formattingElementEntry.element); -        p.treeAdapter.detachNode(lastElement); -        if (commonAncestor) -            aaInsertLastNodeInCommonAncestor(p, commonAncestor, lastElement); -        aaReplaceFormattingElement(p, furthestBlock, formattingElementEntry); -    } -} -//Generic token handlers -//------------------------------------------------------------------ -function appendComment(p, token) { -    p._appendCommentNode(token, p.openElements.currentTmplContentOrNode); -} -function appendCommentToRootHtmlElement(p, token) { -    p._appendCommentNode(token, p.openElements.items[0]); -} -function appendCommentToDocument(p, token) { -    p._appendCommentNode(token, p.document); -} -function stopParsing(p, token) { -    p.stopped = true; -    // NOTE: Set end locations for elements that remain on the open element stack. -    if (token.location) { -        // NOTE: If we are not in a fragment, `html` and `body` will stay on the stack. -        // This is a problem, as we might overwrite their end position here. -        const target = p.fragmentContext ? 0 : 2; -        for (let i = p.openElements.stackTop; i >= target; i--) { -            p._setEndLocation(p.openElements.items[i], token); -        } -        // Handle `html` and `body` -        if (!p.fragmentContext && p.openElements.stackTop >= 0) { -            const htmlElement = p.openElements.items[0]; -            const htmlLocation = p.treeAdapter.getNodeSourceCodeLocation(htmlElement); -            if (htmlLocation && !htmlLocation.endTag) { -                p._setEndLocation(htmlElement, token); -                if (p.openElements.stackTop >= 1) { -                    const bodyElement = p.openElements.items[1]; -                    const bodyLocation = p.treeAdapter.getNodeSourceCodeLocation(bodyElement); -                    if (bodyLocation && !bodyLocation.endTag) { -                        p._setEndLocation(bodyElement, token); -                    } -                } -            } -        } -    } -} -// The "initial" insertion mode -//------------------------------------------------------------------ -function doctypeInInitialMode(p, token) { -    p._setDocumentType(token); -    const mode = token.forceQuirks ? html_js_1.DOCUMENT_MODE.QUIRKS : doctype.getDocumentMode(token); -    if (!doctype.isConforming(token)) { -        p._err(token, error_codes_js_1.ERR.nonConformingDoctype); -    } -    p.treeAdapter.setDocumentMode(p.document, mode); -    p.insertionMode = InsertionMode.BEFORE_HTML; -} -function tokenInInitialMode(p, token) { -    p._err(token, error_codes_js_1.ERR.missingDoctype, true); -    p.treeAdapter.setDocumentMode(p.document, html_js_1.DOCUMENT_MODE.QUIRKS); -    p.insertionMode = InsertionMode.BEFORE_HTML; -    p._processToken(token); -} -// The "before html" insertion mode -//------------------------------------------------------------------ -function startTagBeforeHtml(p, token) { -    if (token.tagID === html_js_1.TAG_ID.HTML) { -        p._insertElement(token, html_js_1.NS.HTML); -        p.insertionMode = InsertionMode.BEFORE_HEAD; -    } -    else { -        tokenBeforeHtml(p, token); -    } -} -function endTagBeforeHtml(p, token) { -    const tn = token.tagID; -    if (tn === html_js_1.TAG_ID.HTML || tn === html_js_1.TAG_ID.HEAD || tn === html_js_1.TAG_ID.BODY || tn === html_js_1.TAG_ID.BR) { -        tokenBeforeHtml(p, token); -    } -} -function tokenBeforeHtml(p, token) { -    p._insertFakeRootElement(); -    p.insertionMode = InsertionMode.BEFORE_HEAD; -    p._processToken(token); -} -// The "before head" insertion mode -//------------------------------------------------------------------ -function startTagBeforeHead(p, token) { -    switch (token.tagID) { -        case html_js_1.TAG_ID.HTML: { -            startTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.HEAD: { -            p._insertElement(token, html_js_1.NS.HTML); -            p.headElement = p.openElements.current; -            p.insertionMode = InsertionMode.IN_HEAD; -            break; -        } -        default: { -            tokenBeforeHead(p, token); -        } -    } -} -function endTagBeforeHead(p, token) { -    const tn = token.tagID; -    if (tn === html_js_1.TAG_ID.HEAD || tn === html_js_1.TAG_ID.BODY || tn === html_js_1.TAG_ID.HTML || tn === html_js_1.TAG_ID.BR) { -        tokenBeforeHead(p, token); -    } -    else { -        p._err(token, error_codes_js_1.ERR.endTagWithoutMatchingOpenElement); -    } -} -function tokenBeforeHead(p, token) { -    p._insertFakeElement(html_js_1.TAG_NAMES.HEAD, html_js_1.TAG_ID.HEAD); -    p.headElement = p.openElements.current; -    p.insertionMode = InsertionMode.IN_HEAD; -    p._processToken(token); -} -// The "in head" insertion mode -//------------------------------------------------------------------ -function startTagInHead(p, token) { -    switch (token.tagID) { -        case html_js_1.TAG_ID.HTML: { -            startTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.BASE: -        case html_js_1.TAG_ID.BASEFONT: -        case html_js_1.TAG_ID.BGSOUND: -        case html_js_1.TAG_ID.LINK: -        case html_js_1.TAG_ID.META: { -            p._appendElement(token, html_js_1.NS.HTML); -            token.ackSelfClosing = true; -            break; -        } -        case html_js_1.TAG_ID.TITLE: { -            p._switchToTextParsing(token, index_js_1.TokenizerMode.RCDATA); -            break; -        } -        case html_js_1.TAG_ID.NOSCRIPT: { -            if (p.options.scriptingEnabled) { -                p._switchToTextParsing(token, index_js_1.TokenizerMode.RAWTEXT); -            } -            else { -                p._insertElement(token, html_js_1.NS.HTML); -                p.insertionMode = InsertionMode.IN_HEAD_NO_SCRIPT; -            } -            break; -        } -        case html_js_1.TAG_ID.NOFRAMES: -        case html_js_1.TAG_ID.STYLE: { -            p._switchToTextParsing(token, index_js_1.TokenizerMode.RAWTEXT); -            break; -        } -        case html_js_1.TAG_ID.SCRIPT: { -            p._switchToTextParsing(token, index_js_1.TokenizerMode.SCRIPT_DATA); -            break; -        } -        case html_js_1.TAG_ID.TEMPLATE: { -            p._insertTemplate(token); -            p.activeFormattingElements.insertMarker(); -            p.framesetOk = false; -            p.insertionMode = InsertionMode.IN_TEMPLATE; -            p.tmplInsertionModeStack.unshift(InsertionMode.IN_TEMPLATE); -            break; -        } -        case html_js_1.TAG_ID.HEAD: { -            p._err(token, error_codes_js_1.ERR.misplacedStartTagForHeadElement); -            break; -        } -        default: { -            tokenInHead(p, token); -        } -    } -} -function endTagInHead(p, token) { -    switch (token.tagID) { -        case html_js_1.TAG_ID.HEAD: { -            p.openElements.pop(); -            p.insertionMode = InsertionMode.AFTER_HEAD; -            break; -        } -        case html_js_1.TAG_ID.BODY: -        case html_js_1.TAG_ID.BR: -        case html_js_1.TAG_ID.HTML: { -            tokenInHead(p, token); -            break; -        } -        case html_js_1.TAG_ID.TEMPLATE: { -            templateEndTagInHead(p, token); -            break; -        } -        default: { -            p._err(token, error_codes_js_1.ERR.endTagWithoutMatchingOpenElement); -        } -    } -} -function templateEndTagInHead(p, token) { -    if (p.openElements.tmplCount > 0) { -        p.openElements.generateImpliedEndTagsThoroughly(); -        if (p.openElements.currentTagId !== html_js_1.TAG_ID.TEMPLATE) { -            p._err(token, error_codes_js_1.ERR.closingOfElementWithOpenChildElements); -        } -        p.openElements.popUntilTagNamePopped(html_js_1.TAG_ID.TEMPLATE); -        p.activeFormattingElements.clearToLastMarker(); -        p.tmplInsertionModeStack.shift(); -        p._resetInsertionMode(); -    } -    else { -        p._err(token, error_codes_js_1.ERR.endTagWithoutMatchingOpenElement); -    } -} -function tokenInHead(p, token) { -    p.openElements.pop(); -    p.insertionMode = InsertionMode.AFTER_HEAD; -    p._processToken(token); -} -// The "in head no script" insertion mode -//------------------------------------------------------------------ -function startTagInHeadNoScript(p, token) { -    switch (token.tagID) { -        case html_js_1.TAG_ID.HTML: { -            startTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.BASEFONT: -        case html_js_1.TAG_ID.BGSOUND: -        case html_js_1.TAG_ID.HEAD: -        case html_js_1.TAG_ID.LINK: -        case html_js_1.TAG_ID.META: -        case html_js_1.TAG_ID.NOFRAMES: -        case html_js_1.TAG_ID.STYLE: { -            startTagInHead(p, token); -            break; -        } -        case html_js_1.TAG_ID.NOSCRIPT: { -            p._err(token, error_codes_js_1.ERR.nestedNoscriptInHead); -            break; -        } -        default: { -            tokenInHeadNoScript(p, token); -        } -    } -} -function endTagInHeadNoScript(p, token) { -    switch (token.tagID) { -        case html_js_1.TAG_ID.NOSCRIPT: { -            p.openElements.pop(); -            p.insertionMode = InsertionMode.IN_HEAD; -            break; -        } -        case html_js_1.TAG_ID.BR: { -            tokenInHeadNoScript(p, token); -            break; -        } -        default: { -            p._err(token, error_codes_js_1.ERR.endTagWithoutMatchingOpenElement); -        } -    } -} -function tokenInHeadNoScript(p, token) { -    const errCode = token.type === token_js_1.TokenType.EOF ? error_codes_js_1.ERR.openElementsLeftAfterEof : error_codes_js_1.ERR.disallowedContentInNoscriptInHead; -    p._err(token, errCode); -    p.openElements.pop(); -    p.insertionMode = InsertionMode.IN_HEAD; -    p._processToken(token); -} -// The "after head" insertion mode -//------------------------------------------------------------------ -function startTagAfterHead(p, token) { -    switch (token.tagID) { -        case html_js_1.TAG_ID.HTML: { -            startTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.BODY: { -            p._insertElement(token, html_js_1.NS.HTML); -            p.framesetOk = false; -            p.insertionMode = InsertionMode.IN_BODY; -            break; -        } -        case html_js_1.TAG_ID.FRAMESET: { -            p._insertElement(token, html_js_1.NS.HTML); -            p.insertionMode = InsertionMode.IN_FRAMESET; -            break; -        } -        case html_js_1.TAG_ID.BASE: -        case html_js_1.TAG_ID.BASEFONT: -        case html_js_1.TAG_ID.BGSOUND: -        case html_js_1.TAG_ID.LINK: -        case html_js_1.TAG_ID.META: -        case html_js_1.TAG_ID.NOFRAMES: -        case html_js_1.TAG_ID.SCRIPT: -        case html_js_1.TAG_ID.STYLE: -        case html_js_1.TAG_ID.TEMPLATE: -        case html_js_1.TAG_ID.TITLE: { -            p._err(token, error_codes_js_1.ERR.abandonedHeadElementChild); -            p.openElements.push(p.headElement, html_js_1.TAG_ID.HEAD); -            startTagInHead(p, token); -            p.openElements.remove(p.headElement); -            break; -        } -        case html_js_1.TAG_ID.HEAD: { -            p._err(token, error_codes_js_1.ERR.misplacedStartTagForHeadElement); -            break; -        } -        default: { -            tokenAfterHead(p, token); -        } -    } -} -function endTagAfterHead(p, token) { -    switch (token.tagID) { -        case html_js_1.TAG_ID.BODY: -        case html_js_1.TAG_ID.HTML: -        case html_js_1.TAG_ID.BR: { -            tokenAfterHead(p, token); -            break; -        } -        case html_js_1.TAG_ID.TEMPLATE: { -            templateEndTagInHead(p, token); -            break; -        } -        default: { -            p._err(token, error_codes_js_1.ERR.endTagWithoutMatchingOpenElement); -        } -    } -} -function tokenAfterHead(p, token) { -    p._insertFakeElement(html_js_1.TAG_NAMES.BODY, html_js_1.TAG_ID.BODY); -    p.insertionMode = InsertionMode.IN_BODY; -    modeInBody(p, token); -} -// The "in body" insertion mode -//------------------------------------------------------------------ -function modeInBody(p, token) { -    switch (token.type) { -        case token_js_1.TokenType.CHARACTER: { -            characterInBody(p, token); -            break; -        } -        case token_js_1.TokenType.WHITESPACE_CHARACTER: { -            whitespaceCharacterInBody(p, token); -            break; -        } -        case token_js_1.TokenType.COMMENT: { -            appendComment(p, token); -            break; -        } -        case token_js_1.TokenType.START_TAG: { -            startTagInBody(p, token); -            break; -        } -        case token_js_1.TokenType.END_TAG: { -            endTagInBody(p, token); -            break; -        } -        case token_js_1.TokenType.EOF: { -            eofInBody(p, token); -            break; -        } -        default: -        // Do nothing -    } -} -function whitespaceCharacterInBody(p, token) { -    p._reconstructActiveFormattingElements(); -    p._insertCharacters(token); -} -function characterInBody(p, token) { -    p._reconstructActiveFormattingElements(); -    p._insertCharacters(token); -    p.framesetOk = false; -} -function htmlStartTagInBody(p, token) { -    if (p.openElements.tmplCount === 0) { -        p.treeAdapter.adoptAttributes(p.openElements.items[0], token.attrs); -    } -} -function bodyStartTagInBody(p, token) { -    const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement(); -    if (bodyElement && p.openElements.tmplCount === 0) { -        p.framesetOk = false; -        p.treeAdapter.adoptAttributes(bodyElement, token.attrs); -    } -} -function framesetStartTagInBody(p, token) { -    const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement(); -    if (p.framesetOk && bodyElement) { -        p.treeAdapter.detachNode(bodyElement); -        p.openElements.popAllUpToHtmlElement(); -        p._insertElement(token, html_js_1.NS.HTML); -        p.insertionMode = InsertionMode.IN_FRAMESET; -    } -} -function addressStartTagInBody(p, token) { -    if (p.openElements.hasInButtonScope(html_js_1.TAG_ID.P)) { -        p._closePElement(); -    } -    p._insertElement(token, html_js_1.NS.HTML); -} -function numberedHeaderStartTagInBody(p, token) { -    if (p.openElements.hasInButtonScope(html_js_1.TAG_ID.P)) { -        p._closePElement(); -    } -    if ((0, html_js_1.isNumberedHeader)(p.openElements.currentTagId)) { -        p.openElements.pop(); -    } -    p._insertElement(token, html_js_1.NS.HTML); -} -function preStartTagInBody(p, token) { -    if (p.openElements.hasInButtonScope(html_js_1.TAG_ID.P)) { -        p._closePElement(); -    } -    p._insertElement(token, html_js_1.NS.HTML); -    //NOTE: If the next token is a U+000A LINE FEED (LF) character token, then ignore that token and move -    //on to the next one. (Newlines at the start of pre blocks are ignored as an authoring convenience.) -    p.skipNextNewLine = true; -    p.framesetOk = false; -} -function formStartTagInBody(p, token) { -    const inTemplate = p.openElements.tmplCount > 0; -    if (!p.formElement || inTemplate) { -        if (p.openElements.hasInButtonScope(html_js_1.TAG_ID.P)) { -            p._closePElement(); -        } -        p._insertElement(token, html_js_1.NS.HTML); -        if (!inTemplate) { -            p.formElement = p.openElements.current; -        } -    } -} -function listItemStartTagInBody(p, token) { -    p.framesetOk = false; -    const tn = token.tagID; -    for (let i = p.openElements.stackTop; i >= 0; i--) { -        const elementId = p.openElements.tagIDs[i]; -        if ((tn === html_js_1.TAG_ID.LI && elementId === html_js_1.TAG_ID.LI) || -            ((tn === html_js_1.TAG_ID.DD || tn === html_js_1.TAG_ID.DT) && (elementId === html_js_1.TAG_ID.DD || elementId === html_js_1.TAG_ID.DT))) { -            p.openElements.generateImpliedEndTagsWithExclusion(elementId); -            p.openElements.popUntilTagNamePopped(elementId); -            break; -        } -        if (elementId !== html_js_1.TAG_ID.ADDRESS && -            elementId !== html_js_1.TAG_ID.DIV && -            elementId !== html_js_1.TAG_ID.P && -            p._isSpecialElement(p.openElements.items[i], elementId)) { -            break; -        } -    } -    if (p.openElements.hasInButtonScope(html_js_1.TAG_ID.P)) { -        p._closePElement(); -    } -    p._insertElement(token, html_js_1.NS.HTML); -} -function plaintextStartTagInBody(p, token) { -    if (p.openElements.hasInButtonScope(html_js_1.TAG_ID.P)) { -        p._closePElement(); -    } -    p._insertElement(token, html_js_1.NS.HTML); -    p.tokenizer.state = index_js_1.TokenizerMode.PLAINTEXT; -} -function buttonStartTagInBody(p, token) { -    if (p.openElements.hasInScope(html_js_1.TAG_ID.BUTTON)) { -        p.openElements.generateImpliedEndTags(); -        p.openElements.popUntilTagNamePopped(html_js_1.TAG_ID.BUTTON); -    } -    p._reconstructActiveFormattingElements(); -    p._insertElement(token, html_js_1.NS.HTML); -    p.framesetOk = false; -} -function aStartTagInBody(p, token) { -    const activeElementEntry = p.activeFormattingElements.getElementEntryInScopeWithTagName(html_js_1.TAG_NAMES.A); -    if (activeElementEntry) { -        callAdoptionAgency(p, token); -        p.openElements.remove(activeElementEntry.element); -        p.activeFormattingElements.removeEntry(activeElementEntry); -    } -    p._reconstructActiveFormattingElements(); -    p._insertElement(token, html_js_1.NS.HTML); -    p.activeFormattingElements.pushElement(p.openElements.current, token); -} -function bStartTagInBody(p, token) { -    p._reconstructActiveFormattingElements(); -    p._insertElement(token, html_js_1.NS.HTML); -    p.activeFormattingElements.pushElement(p.openElements.current, token); -} -function nobrStartTagInBody(p, token) { -    p._reconstructActiveFormattingElements(); -    if (p.openElements.hasInScope(html_js_1.TAG_ID.NOBR)) { -        callAdoptionAgency(p, token); -        p._reconstructActiveFormattingElements(); -    } -    p._insertElement(token, html_js_1.NS.HTML); -    p.activeFormattingElements.pushElement(p.openElements.current, token); -} -function appletStartTagInBody(p, token) { -    p._reconstructActiveFormattingElements(); -    p._insertElement(token, html_js_1.NS.HTML); -    p.activeFormattingElements.insertMarker(); -    p.framesetOk = false; -} -function tableStartTagInBody(p, token) { -    if (p.treeAdapter.getDocumentMode(p.document) !== html_js_1.DOCUMENT_MODE.QUIRKS && p.openElements.hasInButtonScope(html_js_1.TAG_ID.P)) { -        p._closePElement(); -    } -    p._insertElement(token, html_js_1.NS.HTML); -    p.framesetOk = false; -    p.insertionMode = InsertionMode.IN_TABLE; -} -function areaStartTagInBody(p, token) { -    p._reconstructActiveFormattingElements(); -    p._appendElement(token, html_js_1.NS.HTML); -    p.framesetOk = false; -    token.ackSelfClosing = true; -} -function isHiddenInput(token) { -    const inputType = (0, token_js_1.getTokenAttr)(token, html_js_1.ATTRS.TYPE); -    return inputType != null && inputType.toLowerCase() === HIDDEN_INPUT_TYPE; -} -function inputStartTagInBody(p, token) { -    p._reconstructActiveFormattingElements(); -    p._appendElement(token, html_js_1.NS.HTML); -    if (!isHiddenInput(token)) { -        p.framesetOk = false; -    } -    token.ackSelfClosing = true; -} -function paramStartTagInBody(p, token) { -    p._appendElement(token, html_js_1.NS.HTML); -    token.ackSelfClosing = true; -} -function hrStartTagInBody(p, token) { -    if (p.openElements.hasInButtonScope(html_js_1.TAG_ID.P)) { -        p._closePElement(); -    } -    p._appendElement(token, html_js_1.NS.HTML); -    p.framesetOk = false; -    token.ackSelfClosing = true; -} -function imageStartTagInBody(p, token) { -    token.tagName = html_js_1.TAG_NAMES.IMG; -    token.tagID = html_js_1.TAG_ID.IMG; -    areaStartTagInBody(p, token); -} -function textareaStartTagInBody(p, token) { -    p._insertElement(token, html_js_1.NS.HTML); -    //NOTE: If the next token is a U+000A LINE FEED (LF) character token, then ignore that token and move -    //on to the next one. (Newlines at the start of textarea elements are ignored as an authoring convenience.) -    p.skipNextNewLine = true; -    p.tokenizer.state = index_js_1.TokenizerMode.RCDATA; -    p.originalInsertionMode = p.insertionMode; -    p.framesetOk = false; -    p.insertionMode = InsertionMode.TEXT; -} -function xmpStartTagInBody(p, token) { -    if (p.openElements.hasInButtonScope(html_js_1.TAG_ID.P)) { -        p._closePElement(); -    } -    p._reconstructActiveFormattingElements(); -    p.framesetOk = false; -    p._switchToTextParsing(token, index_js_1.TokenizerMode.RAWTEXT); -} -function iframeStartTagInBody(p, token) { -    p.framesetOk = false; -    p._switchToTextParsing(token, index_js_1.TokenizerMode.RAWTEXT); -} -//NOTE: here we assume that we always act as an user agent with enabled plugins, so we parse -//<noembed> as rawtext. -function noembedStartTagInBody(p, token) { -    p._switchToTextParsing(token, index_js_1.TokenizerMode.RAWTEXT); -} -function selectStartTagInBody(p, token) { -    p._reconstructActiveFormattingElements(); -    p._insertElement(token, html_js_1.NS.HTML); -    p.framesetOk = false; -    p.insertionMode = -        p.insertionMode === InsertionMode.IN_TABLE || -            p.insertionMode === InsertionMode.IN_CAPTION || -            p.insertionMode === InsertionMode.IN_TABLE_BODY || -            p.insertionMode === InsertionMode.IN_ROW || -            p.insertionMode === InsertionMode.IN_CELL -            ? InsertionMode.IN_SELECT_IN_TABLE -            : InsertionMode.IN_SELECT; -} -function optgroupStartTagInBody(p, token) { -    if (p.openElements.currentTagId === html_js_1.TAG_ID.OPTION) { -        p.openElements.pop(); -    } -    p._reconstructActiveFormattingElements(); -    p._insertElement(token, html_js_1.NS.HTML); -} -function rbStartTagInBody(p, token) { -    if (p.openElements.hasInScope(html_js_1.TAG_ID.RUBY)) { -        p.openElements.generateImpliedEndTags(); -    } -    p._insertElement(token, html_js_1.NS.HTML); -} -function rtStartTagInBody(p, token) { -    if (p.openElements.hasInScope(html_js_1.TAG_ID.RUBY)) { -        p.openElements.generateImpliedEndTagsWithExclusion(html_js_1.TAG_ID.RTC); -    } -    p._insertElement(token, html_js_1.NS.HTML); -} -function mathStartTagInBody(p, token) { -    p._reconstructActiveFormattingElements(); -    foreignContent.adjustTokenMathMLAttrs(token); -    foreignContent.adjustTokenXMLAttrs(token); -    if (token.selfClosing) { -        p._appendElement(token, html_js_1.NS.MATHML); -    } -    else { -        p._insertElement(token, html_js_1.NS.MATHML); -    } -    token.ackSelfClosing = true; -} -function svgStartTagInBody(p, token) { -    p._reconstructActiveFormattingElements(); -    foreignContent.adjustTokenSVGAttrs(token); -    foreignContent.adjustTokenXMLAttrs(token); -    if (token.selfClosing) { -        p._appendElement(token, html_js_1.NS.SVG); -    } -    else { -        p._insertElement(token, html_js_1.NS.SVG); -    } -    token.ackSelfClosing = true; -} -function genericStartTagInBody(p, token) { -    p._reconstructActiveFormattingElements(); -    p._insertElement(token, html_js_1.NS.HTML); -} -function startTagInBody(p, token) { -    switch (token.tagID) { -        case html_js_1.TAG_ID.I: -        case html_js_1.TAG_ID.S: -        case html_js_1.TAG_ID.B: -        case html_js_1.TAG_ID.U: -        case html_js_1.TAG_ID.EM: -        case html_js_1.TAG_ID.TT: -        case html_js_1.TAG_ID.BIG: -        case html_js_1.TAG_ID.CODE: -        case html_js_1.TAG_ID.FONT: -        case html_js_1.TAG_ID.SMALL: -        case html_js_1.TAG_ID.STRIKE: -        case html_js_1.TAG_ID.STRONG: { -            bStartTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.A: { -            aStartTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.H1: -        case html_js_1.TAG_ID.H2: -        case html_js_1.TAG_ID.H3: -        case html_js_1.TAG_ID.H4: -        case html_js_1.TAG_ID.H5: -        case html_js_1.TAG_ID.H6: { -            numberedHeaderStartTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.P: -        case html_js_1.TAG_ID.DL: -        case html_js_1.TAG_ID.OL: -        case html_js_1.TAG_ID.UL: -        case html_js_1.TAG_ID.DIV: -        case html_js_1.TAG_ID.DIR: -        case html_js_1.TAG_ID.NAV: -        case html_js_1.TAG_ID.MAIN: -        case html_js_1.TAG_ID.MENU: -        case html_js_1.TAG_ID.ASIDE: -        case html_js_1.TAG_ID.CENTER: -        case html_js_1.TAG_ID.FIGURE: -        case html_js_1.TAG_ID.FOOTER: -        case html_js_1.TAG_ID.HEADER: -        case html_js_1.TAG_ID.HGROUP: -        case html_js_1.TAG_ID.DIALOG: -        case html_js_1.TAG_ID.DETAILS: -        case html_js_1.TAG_ID.ADDRESS: -        case html_js_1.TAG_ID.ARTICLE: -        case html_js_1.TAG_ID.SECTION: -        case html_js_1.TAG_ID.SUMMARY: -        case html_js_1.TAG_ID.FIELDSET: -        case html_js_1.TAG_ID.BLOCKQUOTE: -        case html_js_1.TAG_ID.FIGCAPTION: { -            addressStartTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.LI: -        case html_js_1.TAG_ID.DD: -        case html_js_1.TAG_ID.DT: { -            listItemStartTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.BR: -        case html_js_1.TAG_ID.IMG: -        case html_js_1.TAG_ID.WBR: -        case html_js_1.TAG_ID.AREA: -        case html_js_1.TAG_ID.EMBED: -        case html_js_1.TAG_ID.KEYGEN: { -            areaStartTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.HR: { -            hrStartTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.RB: -        case html_js_1.TAG_ID.RTC: { -            rbStartTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.RT: -        case html_js_1.TAG_ID.RP: { -            rtStartTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.PRE: -        case html_js_1.TAG_ID.LISTING: { -            preStartTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.XMP: { -            xmpStartTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.SVG: { -            svgStartTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.HTML: { -            htmlStartTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.BASE: -        case html_js_1.TAG_ID.LINK: -        case html_js_1.TAG_ID.META: -        case html_js_1.TAG_ID.STYLE: -        case html_js_1.TAG_ID.TITLE: -        case html_js_1.TAG_ID.SCRIPT: -        case html_js_1.TAG_ID.BGSOUND: -        case html_js_1.TAG_ID.BASEFONT: -        case html_js_1.TAG_ID.TEMPLATE: { -            startTagInHead(p, token); -            break; -        } -        case html_js_1.TAG_ID.BODY: { -            bodyStartTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.FORM: { -            formStartTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.NOBR: { -            nobrStartTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.MATH: { -            mathStartTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.TABLE: { -            tableStartTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.INPUT: { -            inputStartTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.PARAM: -        case html_js_1.TAG_ID.TRACK: -        case html_js_1.TAG_ID.SOURCE: { -            paramStartTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.IMAGE: { -            imageStartTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.BUTTON: { -            buttonStartTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.APPLET: -        case html_js_1.TAG_ID.OBJECT: -        case html_js_1.TAG_ID.MARQUEE: { -            appletStartTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.IFRAME: { -            iframeStartTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.SELECT: { -            selectStartTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.OPTION: -        case html_js_1.TAG_ID.OPTGROUP: { -            optgroupStartTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.NOEMBED: { -            noembedStartTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.FRAMESET: { -            framesetStartTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.TEXTAREA: { -            textareaStartTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.NOSCRIPT: { -            if (p.options.scriptingEnabled) { -                noembedStartTagInBody(p, token); -            } -            else { -                genericStartTagInBody(p, token); -            } -            break; -        } -        case html_js_1.TAG_ID.PLAINTEXT: { -            plaintextStartTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.COL: -        case html_js_1.TAG_ID.TH: -        case html_js_1.TAG_ID.TD: -        case html_js_1.TAG_ID.TR: -        case html_js_1.TAG_ID.HEAD: -        case html_js_1.TAG_ID.FRAME: -        case html_js_1.TAG_ID.TBODY: -        case html_js_1.TAG_ID.TFOOT: -        case html_js_1.TAG_ID.THEAD: -        case html_js_1.TAG_ID.CAPTION: -        case html_js_1.TAG_ID.COLGROUP: { -            // Ignore token -            break; -        } -        default: { -            genericStartTagInBody(p, token); -        } -    } -} -function bodyEndTagInBody(p, token) { -    if (p.openElements.hasInScope(html_js_1.TAG_ID.BODY)) { -        p.insertionMode = InsertionMode.AFTER_BODY; -        //NOTE: <body> is never popped from the stack, so we need to updated -        //the end location explicitly. -        if (p.options.sourceCodeLocationInfo) { -            const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement(); -            if (bodyElement) { -                p._setEndLocation(bodyElement, token); -            } -        } -    } -} -function htmlEndTagInBody(p, token) { -    if (p.openElements.hasInScope(html_js_1.TAG_ID.BODY)) { -        p.insertionMode = InsertionMode.AFTER_BODY; -        endTagAfterBody(p, token); -    } -} -function addressEndTagInBody(p, token) { -    const tn = token.tagID; -    if (p.openElements.hasInScope(tn)) { -        p.openElements.generateImpliedEndTags(); -        p.openElements.popUntilTagNamePopped(tn); -    } -} -function formEndTagInBody(p) { -    const inTemplate = p.openElements.tmplCount > 0; -    const { formElement } = p; -    if (!inTemplate) { -        p.formElement = null; -    } -    if ((formElement || inTemplate) && p.openElements.hasInScope(html_js_1.TAG_ID.FORM)) { -        p.openElements.generateImpliedEndTags(); -        if (inTemplate) { -            p.openElements.popUntilTagNamePopped(html_js_1.TAG_ID.FORM); -        } -        else if (formElement) { -            p.openElements.remove(formElement); -        } -    } -} -function pEndTagInBody(p) { -    if (!p.openElements.hasInButtonScope(html_js_1.TAG_ID.P)) { -        p._insertFakeElement(html_js_1.TAG_NAMES.P, html_js_1.TAG_ID.P); -    } -    p._closePElement(); -} -function liEndTagInBody(p) { -    if (p.openElements.hasInListItemScope(html_js_1.TAG_ID.LI)) { -        p.openElements.generateImpliedEndTagsWithExclusion(html_js_1.TAG_ID.LI); -        p.openElements.popUntilTagNamePopped(html_js_1.TAG_ID.LI); -    } -} -function ddEndTagInBody(p, token) { -    const tn = token.tagID; -    if (p.openElements.hasInScope(tn)) { -        p.openElements.generateImpliedEndTagsWithExclusion(tn); -        p.openElements.popUntilTagNamePopped(tn); -    } -} -function numberedHeaderEndTagInBody(p) { -    if (p.openElements.hasNumberedHeaderInScope()) { -        p.openElements.generateImpliedEndTags(); -        p.openElements.popUntilNumberedHeaderPopped(); -    } -} -function appletEndTagInBody(p, token) { -    const tn = token.tagID; -    if (p.openElements.hasInScope(tn)) { -        p.openElements.generateImpliedEndTags(); -        p.openElements.popUntilTagNamePopped(tn); -        p.activeFormattingElements.clearToLastMarker(); -    } -} -function brEndTagInBody(p) { -    p._reconstructActiveFormattingElements(); -    p._insertFakeElement(html_js_1.TAG_NAMES.BR, html_js_1.TAG_ID.BR); -    p.openElements.pop(); -    p.framesetOk = false; -} -function genericEndTagInBody(p, token) { -    const tn = token.tagName; -    const tid = token.tagID; -    for (let i = p.openElements.stackTop; i > 0; i--) { -        const element = p.openElements.items[i]; -        const elementId = p.openElements.tagIDs[i]; -        // Compare the tag name here, as the tag might not be a known tag with an ID. -        if (tid === elementId && (tid !== html_js_1.TAG_ID.UNKNOWN || p.treeAdapter.getTagName(element) === tn)) { -            p.openElements.generateImpliedEndTagsWithExclusion(tid); -            if (p.openElements.stackTop >= i) -                p.openElements.shortenToLength(i); -            break; -        } -        if (p._isSpecialElement(element, elementId)) { -            break; -        } -    } -} -function endTagInBody(p, token) { -    switch (token.tagID) { -        case html_js_1.TAG_ID.A: -        case html_js_1.TAG_ID.B: -        case html_js_1.TAG_ID.I: -        case html_js_1.TAG_ID.S: -        case html_js_1.TAG_ID.U: -        case html_js_1.TAG_ID.EM: -        case html_js_1.TAG_ID.TT: -        case html_js_1.TAG_ID.BIG: -        case html_js_1.TAG_ID.CODE: -        case html_js_1.TAG_ID.FONT: -        case html_js_1.TAG_ID.NOBR: -        case html_js_1.TAG_ID.SMALL: -        case html_js_1.TAG_ID.STRIKE: -        case html_js_1.TAG_ID.STRONG: { -            callAdoptionAgency(p, token); -            break; -        } -        case html_js_1.TAG_ID.P: { -            pEndTagInBody(p); -            break; -        } -        case html_js_1.TAG_ID.DL: -        case html_js_1.TAG_ID.UL: -        case html_js_1.TAG_ID.OL: -        case html_js_1.TAG_ID.DIR: -        case html_js_1.TAG_ID.DIV: -        case html_js_1.TAG_ID.NAV: -        case html_js_1.TAG_ID.PRE: -        case html_js_1.TAG_ID.MAIN: -        case html_js_1.TAG_ID.MENU: -        case html_js_1.TAG_ID.ASIDE: -        case html_js_1.TAG_ID.BUTTON: -        case html_js_1.TAG_ID.CENTER: -        case html_js_1.TAG_ID.FIGURE: -        case html_js_1.TAG_ID.FOOTER: -        case html_js_1.TAG_ID.HEADER: -        case html_js_1.TAG_ID.HGROUP: -        case html_js_1.TAG_ID.DIALOG: -        case html_js_1.TAG_ID.ADDRESS: -        case html_js_1.TAG_ID.ARTICLE: -        case html_js_1.TAG_ID.DETAILS: -        case html_js_1.TAG_ID.SECTION: -        case html_js_1.TAG_ID.SUMMARY: -        case html_js_1.TAG_ID.LISTING: -        case html_js_1.TAG_ID.FIELDSET: -        case html_js_1.TAG_ID.BLOCKQUOTE: -        case html_js_1.TAG_ID.FIGCAPTION: { -            addressEndTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.LI: { -            liEndTagInBody(p); -            break; -        } -        case html_js_1.TAG_ID.DD: -        case html_js_1.TAG_ID.DT: { -            ddEndTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.H1: -        case html_js_1.TAG_ID.H2: -        case html_js_1.TAG_ID.H3: -        case html_js_1.TAG_ID.H4: -        case html_js_1.TAG_ID.H5: -        case html_js_1.TAG_ID.H6: { -            numberedHeaderEndTagInBody(p); -            break; -        } -        case html_js_1.TAG_ID.BR: { -            brEndTagInBody(p); -            break; -        } -        case html_js_1.TAG_ID.BODY: { -            bodyEndTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.HTML: { -            htmlEndTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.FORM: { -            formEndTagInBody(p); -            break; -        } -        case html_js_1.TAG_ID.APPLET: -        case html_js_1.TAG_ID.OBJECT: -        case html_js_1.TAG_ID.MARQUEE: { -            appletEndTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.TEMPLATE: { -            templateEndTagInHead(p, token); -            break; -        } -        default: { -            genericEndTagInBody(p, token); -        } -    } -} -function eofInBody(p, token) { -    if (p.tmplInsertionModeStack.length > 0) { -        eofInTemplate(p, token); -    } -    else { -        stopParsing(p, token); -    } -} -// The "text" insertion mode -//------------------------------------------------------------------ -function endTagInText(p, token) { -    var _a; -    if (token.tagID === html_js_1.TAG_ID.SCRIPT) { -        (_a = p.scriptHandler) === null || _a === void 0 ? void 0 : _a.call(p, p.openElements.current); -    } -    p.openElements.pop(); -    p.insertionMode = p.originalInsertionMode; -} -function eofInText(p, token) { -    p._err(token, error_codes_js_1.ERR.eofInElementThatCanContainOnlyText); -    p.openElements.pop(); -    p.insertionMode = p.originalInsertionMode; -    p.onEof(token); -} -// The "in table" insertion mode -//------------------------------------------------------------------ -function characterInTable(p, token) { -    if (TABLE_STRUCTURE_TAGS.has(p.openElements.currentTagId)) { -        p.pendingCharacterTokens.length = 0; -        p.hasNonWhitespacePendingCharacterToken = false; -        p.originalInsertionMode = p.insertionMode; -        p.insertionMode = InsertionMode.IN_TABLE_TEXT; -        switch (token.type) { -            case token_js_1.TokenType.CHARACTER: { -                characterInTableText(p, token); -                break; -            } -            case token_js_1.TokenType.WHITESPACE_CHARACTER: { -                whitespaceCharacterInTableText(p, token); -                break; -            } -            // Ignore null -        } -    } -    else { -        tokenInTable(p, token); -    } -} -function captionStartTagInTable(p, token) { -    p.openElements.clearBackToTableContext(); -    p.activeFormattingElements.insertMarker(); -    p._insertElement(token, html_js_1.NS.HTML); -    p.insertionMode = InsertionMode.IN_CAPTION; -} -function colgroupStartTagInTable(p, token) { -    p.openElements.clearBackToTableContext(); -    p._insertElement(token, html_js_1.NS.HTML); -    p.insertionMode = InsertionMode.IN_COLUMN_GROUP; -} -function colStartTagInTable(p, token) { -    p.openElements.clearBackToTableContext(); -    p._insertFakeElement(html_js_1.TAG_NAMES.COLGROUP, html_js_1.TAG_ID.COLGROUP); -    p.insertionMode = InsertionMode.IN_COLUMN_GROUP; -    startTagInColumnGroup(p, token); -} -function tbodyStartTagInTable(p, token) { -    p.openElements.clearBackToTableContext(); -    p._insertElement(token, html_js_1.NS.HTML); -    p.insertionMode = InsertionMode.IN_TABLE_BODY; -} -function tdStartTagInTable(p, token) { -    p.openElements.clearBackToTableContext(); -    p._insertFakeElement(html_js_1.TAG_NAMES.TBODY, html_js_1.TAG_ID.TBODY); -    p.insertionMode = InsertionMode.IN_TABLE_BODY; -    startTagInTableBody(p, token); -} -function tableStartTagInTable(p, token) { -    if (p.openElements.hasInTableScope(html_js_1.TAG_ID.TABLE)) { -        p.openElements.popUntilTagNamePopped(html_js_1.TAG_ID.TABLE); -        p._resetInsertionMode(); -        p._processStartTag(token); -    } -} -function inputStartTagInTable(p, token) { -    if (isHiddenInput(token)) { -        p._appendElement(token, html_js_1.NS.HTML); -    } -    else { -        tokenInTable(p, token); -    } -    token.ackSelfClosing = true; -} -function formStartTagInTable(p, token) { -    if (!p.formElement && p.openElements.tmplCount === 0) { -        p._insertElement(token, html_js_1.NS.HTML); -        p.formElement = p.openElements.current; -        p.openElements.pop(); -    } -} -function startTagInTable(p, token) { -    switch (token.tagID) { -        case html_js_1.TAG_ID.TD: -        case html_js_1.TAG_ID.TH: -        case html_js_1.TAG_ID.TR: { -            tdStartTagInTable(p, token); -            break; -        } -        case html_js_1.TAG_ID.STYLE: -        case html_js_1.TAG_ID.SCRIPT: -        case html_js_1.TAG_ID.TEMPLATE: { -            startTagInHead(p, token); -            break; -        } -        case html_js_1.TAG_ID.COL: { -            colStartTagInTable(p, token); -            break; -        } -        case html_js_1.TAG_ID.FORM: { -            formStartTagInTable(p, token); -            break; -        } -        case html_js_1.TAG_ID.TABLE: { -            tableStartTagInTable(p, token); -            break; -        } -        case html_js_1.TAG_ID.TBODY: -        case html_js_1.TAG_ID.TFOOT: -        case html_js_1.TAG_ID.THEAD: { -            tbodyStartTagInTable(p, token); -            break; -        } -        case html_js_1.TAG_ID.INPUT: { -            inputStartTagInTable(p, token); -            break; -        } -        case html_js_1.TAG_ID.CAPTION: { -            captionStartTagInTable(p, token); -            break; -        } -        case html_js_1.TAG_ID.COLGROUP: { -            colgroupStartTagInTable(p, token); -            break; -        } -        default: { -            tokenInTable(p, token); -        } -    } -} -function endTagInTable(p, token) { -    switch (token.tagID) { -        case html_js_1.TAG_ID.TABLE: { -            if (p.openElements.hasInTableScope(html_js_1.TAG_ID.TABLE)) { -                p.openElements.popUntilTagNamePopped(html_js_1.TAG_ID.TABLE); -                p._resetInsertionMode(); -            } -            break; -        } -        case html_js_1.TAG_ID.TEMPLATE: { -            templateEndTagInHead(p, token); -            break; -        } -        case html_js_1.TAG_ID.BODY: -        case html_js_1.TAG_ID.CAPTION: -        case html_js_1.TAG_ID.COL: -        case html_js_1.TAG_ID.COLGROUP: -        case html_js_1.TAG_ID.HTML: -        case html_js_1.TAG_ID.TBODY: -        case html_js_1.TAG_ID.TD: -        case html_js_1.TAG_ID.TFOOT: -        case html_js_1.TAG_ID.TH: -        case html_js_1.TAG_ID.THEAD: -        case html_js_1.TAG_ID.TR: { -            // Ignore token -            break; -        } -        default: { -            tokenInTable(p, token); -        } -    } -} -function tokenInTable(p, token) { -    const savedFosterParentingState = p.fosterParentingEnabled; -    p.fosterParentingEnabled = true; -    // Process token in `In Body` mode -    modeInBody(p, token); -    p.fosterParentingEnabled = savedFosterParentingState; -} -// The "in table text" insertion mode -//------------------------------------------------------------------ -function whitespaceCharacterInTableText(p, token) { -    p.pendingCharacterTokens.push(token); -} -function characterInTableText(p, token) { -    p.pendingCharacterTokens.push(token); -    p.hasNonWhitespacePendingCharacterToken = true; -} -function tokenInTableText(p, token) { -    let i = 0; -    if (p.hasNonWhitespacePendingCharacterToken) { -        for (; i < p.pendingCharacterTokens.length; i++) { -            tokenInTable(p, p.pendingCharacterTokens[i]); -        } -    } -    else { -        for (; i < p.pendingCharacterTokens.length; i++) { -            p._insertCharacters(p.pendingCharacterTokens[i]); -        } -    } -    p.insertionMode = p.originalInsertionMode; -    p._processToken(token); -} -// The "in caption" insertion mode -//------------------------------------------------------------------ -const TABLE_VOID_ELEMENTS = new Set([html_js_1.TAG_ID.CAPTION, html_js_1.TAG_ID.COL, html_js_1.TAG_ID.COLGROUP, html_js_1.TAG_ID.TBODY, html_js_1.TAG_ID.TD, html_js_1.TAG_ID.TFOOT, html_js_1.TAG_ID.TH, html_js_1.TAG_ID.THEAD, html_js_1.TAG_ID.TR]); -function startTagInCaption(p, token) { -    const tn = token.tagID; -    if (TABLE_VOID_ELEMENTS.has(tn)) { -        if (p.openElements.hasInTableScope(html_js_1.TAG_ID.CAPTION)) { -            p.openElements.generateImpliedEndTags(); -            p.openElements.popUntilTagNamePopped(html_js_1.TAG_ID.CAPTION); -            p.activeFormattingElements.clearToLastMarker(); -            p.insertionMode = InsertionMode.IN_TABLE; -            startTagInTable(p, token); -        } -    } -    else { -        startTagInBody(p, token); -    } -} -function endTagInCaption(p, token) { -    const tn = token.tagID; -    switch (tn) { -        case html_js_1.TAG_ID.CAPTION: -        case html_js_1.TAG_ID.TABLE: { -            if (p.openElements.hasInTableScope(html_js_1.TAG_ID.CAPTION)) { -                p.openElements.generateImpliedEndTags(); -                p.openElements.popUntilTagNamePopped(html_js_1.TAG_ID.CAPTION); -                p.activeFormattingElements.clearToLastMarker(); -                p.insertionMode = InsertionMode.IN_TABLE; -                if (tn === html_js_1.TAG_ID.TABLE) { -                    endTagInTable(p, token); -                } -            } -            break; -        } -        case html_js_1.TAG_ID.BODY: -        case html_js_1.TAG_ID.COL: -        case html_js_1.TAG_ID.COLGROUP: -        case html_js_1.TAG_ID.HTML: -        case html_js_1.TAG_ID.TBODY: -        case html_js_1.TAG_ID.TD: -        case html_js_1.TAG_ID.TFOOT: -        case html_js_1.TAG_ID.TH: -        case html_js_1.TAG_ID.THEAD: -        case html_js_1.TAG_ID.TR: { -            // Ignore token -            break; -        } -        default: { -            endTagInBody(p, token); -        } -    } -} -// The "in column group" insertion mode -//------------------------------------------------------------------ -function startTagInColumnGroup(p, token) { -    switch (token.tagID) { -        case html_js_1.TAG_ID.HTML: { -            startTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.COL: { -            p._appendElement(token, html_js_1.NS.HTML); -            token.ackSelfClosing = true; -            break; -        } -        case html_js_1.TAG_ID.TEMPLATE: { -            startTagInHead(p, token); -            break; -        } -        default: { -            tokenInColumnGroup(p, token); -        } -    } -} -function endTagInColumnGroup(p, token) { -    switch (token.tagID) { -        case html_js_1.TAG_ID.COLGROUP: { -            if (p.openElements.currentTagId === html_js_1.TAG_ID.COLGROUP) { -                p.openElements.pop(); -                p.insertionMode = InsertionMode.IN_TABLE; -            } -            break; -        } -        case html_js_1.TAG_ID.TEMPLATE: { -            templateEndTagInHead(p, token); -            break; -        } -        case html_js_1.TAG_ID.COL: { -            // Ignore token -            break; -        } -        default: { -            tokenInColumnGroup(p, token); -        } -    } -} -function tokenInColumnGroup(p, token) { -    if (p.openElements.currentTagId === html_js_1.TAG_ID.COLGROUP) { -        p.openElements.pop(); -        p.insertionMode = InsertionMode.IN_TABLE; -        p._processToken(token); -    } -} -// The "in table body" insertion mode -//------------------------------------------------------------------ -function startTagInTableBody(p, token) { -    switch (token.tagID) { -        case html_js_1.TAG_ID.TR: { -            p.openElements.clearBackToTableBodyContext(); -            p._insertElement(token, html_js_1.NS.HTML); -            p.insertionMode = InsertionMode.IN_ROW; -            break; -        } -        case html_js_1.TAG_ID.TH: -        case html_js_1.TAG_ID.TD: { -            p.openElements.clearBackToTableBodyContext(); -            p._insertFakeElement(html_js_1.TAG_NAMES.TR, html_js_1.TAG_ID.TR); -            p.insertionMode = InsertionMode.IN_ROW; -            startTagInRow(p, token); -            break; -        } -        case html_js_1.TAG_ID.CAPTION: -        case html_js_1.TAG_ID.COL: -        case html_js_1.TAG_ID.COLGROUP: -        case html_js_1.TAG_ID.TBODY: -        case html_js_1.TAG_ID.TFOOT: -        case html_js_1.TAG_ID.THEAD: { -            if (p.openElements.hasTableBodyContextInTableScope()) { -                p.openElements.clearBackToTableBodyContext(); -                p.openElements.pop(); -                p.insertionMode = InsertionMode.IN_TABLE; -                startTagInTable(p, token); -            } -            break; -        } -        default: { -            startTagInTable(p, token); -        } -    } -} -function endTagInTableBody(p, token) { -    const tn = token.tagID; -    switch (token.tagID) { -        case html_js_1.TAG_ID.TBODY: -        case html_js_1.TAG_ID.TFOOT: -        case html_js_1.TAG_ID.THEAD: { -            if (p.openElements.hasInTableScope(tn)) { -                p.openElements.clearBackToTableBodyContext(); -                p.openElements.pop(); -                p.insertionMode = InsertionMode.IN_TABLE; -            } -            break; -        } -        case html_js_1.TAG_ID.TABLE: { -            if (p.openElements.hasTableBodyContextInTableScope()) { -                p.openElements.clearBackToTableBodyContext(); -                p.openElements.pop(); -                p.insertionMode = InsertionMode.IN_TABLE; -                endTagInTable(p, token); -            } -            break; -        } -        case html_js_1.TAG_ID.BODY: -        case html_js_1.TAG_ID.CAPTION: -        case html_js_1.TAG_ID.COL: -        case html_js_1.TAG_ID.COLGROUP: -        case html_js_1.TAG_ID.HTML: -        case html_js_1.TAG_ID.TD: -        case html_js_1.TAG_ID.TH: -        case html_js_1.TAG_ID.TR: { -            // Ignore token -            break; -        } -        default: { -            endTagInTable(p, token); -        } -    } -} -// The "in row" insertion mode -//------------------------------------------------------------------ -function startTagInRow(p, token) { -    switch (token.tagID) { -        case html_js_1.TAG_ID.TH: -        case html_js_1.TAG_ID.TD: { -            p.openElements.clearBackToTableRowContext(); -            p._insertElement(token, html_js_1.NS.HTML); -            p.insertionMode = InsertionMode.IN_CELL; -            p.activeFormattingElements.insertMarker(); -            break; -        } -        case html_js_1.TAG_ID.CAPTION: -        case html_js_1.TAG_ID.COL: -        case html_js_1.TAG_ID.COLGROUP: -        case html_js_1.TAG_ID.TBODY: -        case html_js_1.TAG_ID.TFOOT: -        case html_js_1.TAG_ID.THEAD: -        case html_js_1.TAG_ID.TR: { -            if (p.openElements.hasInTableScope(html_js_1.TAG_ID.TR)) { -                p.openElements.clearBackToTableRowContext(); -                p.openElements.pop(); -                p.insertionMode = InsertionMode.IN_TABLE_BODY; -                startTagInTableBody(p, token); -            } -            break; -        } -        default: { -            startTagInTable(p, token); -        } -    } -} -function endTagInRow(p, token) { -    switch (token.tagID) { -        case html_js_1.TAG_ID.TR: { -            if (p.openElements.hasInTableScope(html_js_1.TAG_ID.TR)) { -                p.openElements.clearBackToTableRowContext(); -                p.openElements.pop(); -                p.insertionMode = InsertionMode.IN_TABLE_BODY; -            } -            break; -        } -        case html_js_1.TAG_ID.TABLE: { -            if (p.openElements.hasInTableScope(html_js_1.TAG_ID.TR)) { -                p.openElements.clearBackToTableRowContext(); -                p.openElements.pop(); -                p.insertionMode = InsertionMode.IN_TABLE_BODY; -                endTagInTableBody(p, token); -            } -            break; -        } -        case html_js_1.TAG_ID.TBODY: -        case html_js_1.TAG_ID.TFOOT: -        case html_js_1.TAG_ID.THEAD: { -            if (p.openElements.hasInTableScope(token.tagID) || p.openElements.hasInTableScope(html_js_1.TAG_ID.TR)) { -                p.openElements.clearBackToTableRowContext(); -                p.openElements.pop(); -                p.insertionMode = InsertionMode.IN_TABLE_BODY; -                endTagInTableBody(p, token); -            } -            break; -        } -        case html_js_1.TAG_ID.BODY: -        case html_js_1.TAG_ID.CAPTION: -        case html_js_1.TAG_ID.COL: -        case html_js_1.TAG_ID.COLGROUP: -        case html_js_1.TAG_ID.HTML: -        case html_js_1.TAG_ID.TD: -        case html_js_1.TAG_ID.TH: { -            // Ignore end tag -            break; -        } -        default: { -            endTagInTable(p, token); -        } -    } -} -// The "in cell" insertion mode -//------------------------------------------------------------------ -function startTagInCell(p, token) { -    const tn = token.tagID; -    if (TABLE_VOID_ELEMENTS.has(tn)) { -        if (p.openElements.hasInTableScope(html_js_1.TAG_ID.TD) || p.openElements.hasInTableScope(html_js_1.TAG_ID.TH)) { -            p._closeTableCell(); -            startTagInRow(p, token); -        } -    } -    else { -        startTagInBody(p, token); -    } -} -function endTagInCell(p, token) { -    const tn = token.tagID; -    switch (tn) { -        case html_js_1.TAG_ID.TD: -        case html_js_1.TAG_ID.TH: { -            if (p.openElements.hasInTableScope(tn)) { -                p.openElements.generateImpliedEndTags(); -                p.openElements.popUntilTagNamePopped(tn); -                p.activeFormattingElements.clearToLastMarker(); -                p.insertionMode = InsertionMode.IN_ROW; -            } -            break; -        } -        case html_js_1.TAG_ID.TABLE: -        case html_js_1.TAG_ID.TBODY: -        case html_js_1.TAG_ID.TFOOT: -        case html_js_1.TAG_ID.THEAD: -        case html_js_1.TAG_ID.TR: { -            if (p.openElements.hasInTableScope(tn)) { -                p._closeTableCell(); -                endTagInRow(p, token); -            } -            break; -        } -        case html_js_1.TAG_ID.BODY: -        case html_js_1.TAG_ID.CAPTION: -        case html_js_1.TAG_ID.COL: -        case html_js_1.TAG_ID.COLGROUP: -        case html_js_1.TAG_ID.HTML: { -            // Ignore token -            break; -        } -        default: { -            endTagInBody(p, token); -        } -    } -} -// The "in select" insertion mode -//------------------------------------------------------------------ -function startTagInSelect(p, token) { -    switch (token.tagID) { -        case html_js_1.TAG_ID.HTML: { -            startTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.OPTION: { -            if (p.openElements.currentTagId === html_js_1.TAG_ID.OPTION) { -                p.openElements.pop(); -            } -            p._insertElement(token, html_js_1.NS.HTML); -            break; -        } -        case html_js_1.TAG_ID.OPTGROUP: { -            if (p.openElements.currentTagId === html_js_1.TAG_ID.OPTION) { -                p.openElements.pop(); -            } -            if (p.openElements.currentTagId === html_js_1.TAG_ID.OPTGROUP) { -                p.openElements.pop(); -            } -            p._insertElement(token, html_js_1.NS.HTML); -            break; -        } -        case html_js_1.TAG_ID.INPUT: -        case html_js_1.TAG_ID.KEYGEN: -        case html_js_1.TAG_ID.TEXTAREA: -        case html_js_1.TAG_ID.SELECT: { -            if (p.openElements.hasInSelectScope(html_js_1.TAG_ID.SELECT)) { -                p.openElements.popUntilTagNamePopped(html_js_1.TAG_ID.SELECT); -                p._resetInsertionMode(); -                if (token.tagID !== html_js_1.TAG_ID.SELECT) { -                    p._processStartTag(token); -                } -            } -            break; -        } -        case html_js_1.TAG_ID.SCRIPT: -        case html_js_1.TAG_ID.TEMPLATE: { -            startTagInHead(p, token); -            break; -        } -        default: -        // Do nothing -    } -} -function endTagInSelect(p, token) { -    switch (token.tagID) { -        case html_js_1.TAG_ID.OPTGROUP: { -            if (p.openElements.stackTop > 0 && -                p.openElements.currentTagId === html_js_1.TAG_ID.OPTION && -                p.openElements.tagIDs[p.openElements.stackTop - 1] === html_js_1.TAG_ID.OPTGROUP) { -                p.openElements.pop(); -            } -            if (p.openElements.currentTagId === html_js_1.TAG_ID.OPTGROUP) { -                p.openElements.pop(); -            } -            break; -        } -        case html_js_1.TAG_ID.OPTION: { -            if (p.openElements.currentTagId === html_js_1.TAG_ID.OPTION) { -                p.openElements.pop(); -            } -            break; -        } -        case html_js_1.TAG_ID.SELECT: { -            if (p.openElements.hasInSelectScope(html_js_1.TAG_ID.SELECT)) { -                p.openElements.popUntilTagNamePopped(html_js_1.TAG_ID.SELECT); -                p._resetInsertionMode(); -            } -            break; -        } -        case html_js_1.TAG_ID.TEMPLATE: { -            templateEndTagInHead(p, token); -            break; -        } -        default: -        // Do nothing -    } -} -// The "in select in table" insertion mode -//------------------------------------------------------------------ -function startTagInSelectInTable(p, token) { -    const tn = token.tagID; -    if (tn === html_js_1.TAG_ID.CAPTION || -        tn === html_js_1.TAG_ID.TABLE || -        tn === html_js_1.TAG_ID.TBODY || -        tn === html_js_1.TAG_ID.TFOOT || -        tn === html_js_1.TAG_ID.THEAD || -        tn === html_js_1.TAG_ID.TR || -        tn === html_js_1.TAG_ID.TD || -        tn === html_js_1.TAG_ID.TH) { -        p.openElements.popUntilTagNamePopped(html_js_1.TAG_ID.SELECT); -        p._resetInsertionMode(); -        p._processStartTag(token); -    } -    else { -        startTagInSelect(p, token); -    } -} -function endTagInSelectInTable(p, token) { -    const tn = token.tagID; -    if (tn === html_js_1.TAG_ID.CAPTION || -        tn === html_js_1.TAG_ID.TABLE || -        tn === html_js_1.TAG_ID.TBODY || -        tn === html_js_1.TAG_ID.TFOOT || -        tn === html_js_1.TAG_ID.THEAD || -        tn === html_js_1.TAG_ID.TR || -        tn === html_js_1.TAG_ID.TD || -        tn === html_js_1.TAG_ID.TH) { -        if (p.openElements.hasInTableScope(tn)) { -            p.openElements.popUntilTagNamePopped(html_js_1.TAG_ID.SELECT); -            p._resetInsertionMode(); -            p.onEndTag(token); -        } -    } -    else { -        endTagInSelect(p, token); -    } -} -// The "in template" insertion mode -//------------------------------------------------------------------ -function startTagInTemplate(p, token) { -    switch (token.tagID) { -        // First, handle tags that can start without a mode change -        case html_js_1.TAG_ID.BASE: -        case html_js_1.TAG_ID.BASEFONT: -        case html_js_1.TAG_ID.BGSOUND: -        case html_js_1.TAG_ID.LINK: -        case html_js_1.TAG_ID.META: -        case html_js_1.TAG_ID.NOFRAMES: -        case html_js_1.TAG_ID.SCRIPT: -        case html_js_1.TAG_ID.STYLE: -        case html_js_1.TAG_ID.TEMPLATE: -        case html_js_1.TAG_ID.TITLE: { -            startTagInHead(p, token); -            break; -        } -        // Re-process the token in the appropriate mode -        case html_js_1.TAG_ID.CAPTION: -        case html_js_1.TAG_ID.COLGROUP: -        case html_js_1.TAG_ID.TBODY: -        case html_js_1.TAG_ID.TFOOT: -        case html_js_1.TAG_ID.THEAD: { -            p.tmplInsertionModeStack[0] = InsertionMode.IN_TABLE; -            p.insertionMode = InsertionMode.IN_TABLE; -            startTagInTable(p, token); -            break; -        } -        case html_js_1.TAG_ID.COL: { -            p.tmplInsertionModeStack[0] = InsertionMode.IN_COLUMN_GROUP; -            p.insertionMode = InsertionMode.IN_COLUMN_GROUP; -            startTagInColumnGroup(p, token); -            break; -        } -        case html_js_1.TAG_ID.TR: { -            p.tmplInsertionModeStack[0] = InsertionMode.IN_TABLE_BODY; -            p.insertionMode = InsertionMode.IN_TABLE_BODY; -            startTagInTableBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.TD: -        case html_js_1.TAG_ID.TH: { -            p.tmplInsertionModeStack[0] = InsertionMode.IN_ROW; -            p.insertionMode = InsertionMode.IN_ROW; -            startTagInRow(p, token); -            break; -        } -        default: { -            p.tmplInsertionModeStack[0] = InsertionMode.IN_BODY; -            p.insertionMode = InsertionMode.IN_BODY; -            startTagInBody(p, token); -        } -    } -} -function endTagInTemplate(p, token) { -    if (token.tagID === html_js_1.TAG_ID.TEMPLATE) { -        templateEndTagInHead(p, token); -    } -} -function eofInTemplate(p, token) { -    if (p.openElements.tmplCount > 0) { -        p.openElements.popUntilTagNamePopped(html_js_1.TAG_ID.TEMPLATE); -        p.activeFormattingElements.clearToLastMarker(); -        p.tmplInsertionModeStack.shift(); -        p._resetInsertionMode(); -        p.onEof(token); -    } -    else { -        stopParsing(p, token); -    } -} -// The "after body" insertion mode -//------------------------------------------------------------------ -function startTagAfterBody(p, token) { -    if (token.tagID === html_js_1.TAG_ID.HTML) { -        startTagInBody(p, token); -    } -    else { -        tokenAfterBody(p, token); -    } -} -function endTagAfterBody(p, token) { -    var _a; -    if (token.tagID === html_js_1.TAG_ID.HTML) { -        if (!p.fragmentContext) { -            p.insertionMode = InsertionMode.AFTER_AFTER_BODY; -        } -        //NOTE: <html> is never popped from the stack, so we need to updated -        //the end location explicitly. -        if (p.options.sourceCodeLocationInfo && p.openElements.tagIDs[0] === html_js_1.TAG_ID.HTML) { -            p._setEndLocation(p.openElements.items[0], token); -            // Update the body element, if it doesn't have an end tag -            const bodyElement = p.openElements.items[1]; -            if (bodyElement && !((_a = p.treeAdapter.getNodeSourceCodeLocation(bodyElement)) === null || _a === void 0 ? void 0 : _a.endTag)) { -                p._setEndLocation(bodyElement, token); -            } -        } -    } -    else { -        tokenAfterBody(p, token); -    } -} -function tokenAfterBody(p, token) { -    p.insertionMode = InsertionMode.IN_BODY; -    modeInBody(p, token); -} -// The "in frameset" insertion mode -//------------------------------------------------------------------ -function startTagInFrameset(p, token) { -    switch (token.tagID) { -        case html_js_1.TAG_ID.HTML: { -            startTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.FRAMESET: { -            p._insertElement(token, html_js_1.NS.HTML); -            break; -        } -        case html_js_1.TAG_ID.FRAME: { -            p._appendElement(token, html_js_1.NS.HTML); -            token.ackSelfClosing = true; -            break; -        } -        case html_js_1.TAG_ID.NOFRAMES: { -            startTagInHead(p, token); -            break; -        } -        default: -        // Do nothing -    } -} -function endTagInFrameset(p, token) { -    if (token.tagID === html_js_1.TAG_ID.FRAMESET && !p.openElements.isRootHtmlElementCurrent()) { -        p.openElements.pop(); -        if (!p.fragmentContext && p.openElements.currentTagId !== html_js_1.TAG_ID.FRAMESET) { -            p.insertionMode = InsertionMode.AFTER_FRAMESET; -        } -    } -} -// The "after frameset" insertion mode -//------------------------------------------------------------------ -function startTagAfterFrameset(p, token) { -    switch (token.tagID) { -        case html_js_1.TAG_ID.HTML: { -            startTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.NOFRAMES: { -            startTagInHead(p, token); -            break; -        } -        default: -        // Do nothing -    } -} -function endTagAfterFrameset(p, token) { -    if (token.tagID === html_js_1.TAG_ID.HTML) { -        p.insertionMode = InsertionMode.AFTER_AFTER_FRAMESET; -    } -} -// The "after after body" insertion mode -//------------------------------------------------------------------ -function startTagAfterAfterBody(p, token) { -    if (token.tagID === html_js_1.TAG_ID.HTML) { -        startTagInBody(p, token); -    } -    else { -        tokenAfterAfterBody(p, token); -    } -} -function tokenAfterAfterBody(p, token) { -    p.insertionMode = InsertionMode.IN_BODY; -    modeInBody(p, token); -} -// The "after after frameset" insertion mode -//------------------------------------------------------------------ -function startTagAfterAfterFrameset(p, token) { -    switch (token.tagID) { -        case html_js_1.TAG_ID.HTML: { -            startTagInBody(p, token); -            break; -        } -        case html_js_1.TAG_ID.NOFRAMES: { -            startTagInHead(p, token); -            break; -        } -        default: -        // Do nothing -    } -} -// The rules for parsing tokens in foreign content -//------------------------------------------------------------------ -function nullCharacterInForeignContent(p, token) { -    token.chars = unicode.REPLACEMENT_CHARACTER; -    p._insertCharacters(token); -} -function characterInForeignContent(p, token) { -    p._insertCharacters(token); -    p.framesetOk = false; -} -function popUntilHtmlOrIntegrationPoint(p) { -    while (p.treeAdapter.getNamespaceURI(p.openElements.current) !== html_js_1.NS.HTML && -        !p._isIntegrationPoint(p.openElements.currentTagId, p.openElements.current)) { -        p.openElements.pop(); -    } -} -function startTagInForeignContent(p, token) { -    if (foreignContent.causesExit(token)) { -        popUntilHtmlOrIntegrationPoint(p); -        p._startTagOutsideForeignContent(token); -    } -    else { -        const current = p._getAdjustedCurrentElement(); -        const currentNs = p.treeAdapter.getNamespaceURI(current); -        if (currentNs === html_js_1.NS.MATHML) { -            foreignContent.adjustTokenMathMLAttrs(token); -        } -        else if (currentNs === html_js_1.NS.SVG) { -            foreignContent.adjustTokenSVGTagName(token); -            foreignContent.adjustTokenSVGAttrs(token); -        } -        foreignContent.adjustTokenXMLAttrs(token); -        if (token.selfClosing) { -            p._appendElement(token, currentNs); -        } -        else { -            p._insertElement(token, currentNs); -        } -        token.ackSelfClosing = true; -    } -} -function endTagInForeignContent(p, token) { -    if (token.tagID === html_js_1.TAG_ID.P || token.tagID === html_js_1.TAG_ID.BR) { -        popUntilHtmlOrIntegrationPoint(p); -        p._endTagOutsideForeignContent(token); -        return; -    } -    for (let i = p.openElements.stackTop; i > 0; i--) { -        const element = p.openElements.items[i]; -        if (p.treeAdapter.getNamespaceURI(element) === html_js_1.NS.HTML) { -            p._endTagOutsideForeignContent(token); -            break; -        } -        const tagName = p.treeAdapter.getTagName(element); -        if (tagName.toLowerCase() === token.tagName) { -            //NOTE: update the token tag name for `_setEndLocation`. -            token.tagName = tagName; -            p.openElements.shortenToLength(i); -            break; -        } -    } -} - -},{"../common/doctype.js":6,"../common/error-codes.js":7,"../common/foreign-content.js":8,"../common/html.js":9,"../common/token.js":10,"../common/unicode.js":11,"../tokenizer/index.js":17,"../tree-adapters/default.js":19,"./formatting-element-list.js":13,"./open-element-stack.js":15}],15:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.OpenElementStack = void 0; -const html_js_1 = require("../common/html.js"); -//Element utils -const IMPLICIT_END_TAG_REQUIRED = new Set([html_js_1.TAG_ID.DD, html_js_1.TAG_ID.DT, html_js_1.TAG_ID.LI, html_js_1.TAG_ID.OPTGROUP, html_js_1.TAG_ID.OPTION, html_js_1.TAG_ID.P, html_js_1.TAG_ID.RB, html_js_1.TAG_ID.RP, html_js_1.TAG_ID.RT, html_js_1.TAG_ID.RTC]); -const IMPLICIT_END_TAG_REQUIRED_THOROUGHLY = new Set([ -    ...IMPLICIT_END_TAG_REQUIRED, -    html_js_1.TAG_ID.CAPTION, -    html_js_1.TAG_ID.COLGROUP, -    html_js_1.TAG_ID.TBODY, -    html_js_1.TAG_ID.TD, -    html_js_1.TAG_ID.TFOOT, -    html_js_1.TAG_ID.TH, -    html_js_1.TAG_ID.THEAD, -    html_js_1.TAG_ID.TR, -]); -const SCOPING_ELEMENT_NS = new Map([ -    [html_js_1.TAG_ID.APPLET, html_js_1.NS.HTML], -    [html_js_1.TAG_ID.CAPTION, html_js_1.NS.HTML], -    [html_js_1.TAG_ID.HTML, html_js_1.NS.HTML], -    [html_js_1.TAG_ID.MARQUEE, html_js_1.NS.HTML], -    [html_js_1.TAG_ID.OBJECT, html_js_1.NS.HTML], -    [html_js_1.TAG_ID.TABLE, html_js_1.NS.HTML], -    [html_js_1.TAG_ID.TD, html_js_1.NS.HTML], -    [html_js_1.TAG_ID.TEMPLATE, html_js_1.NS.HTML], -    [html_js_1.TAG_ID.TH, html_js_1.NS.HTML], -    [html_js_1.TAG_ID.ANNOTATION_XML, html_js_1.NS.MATHML], -    [html_js_1.TAG_ID.MI, html_js_1.NS.MATHML], -    [html_js_1.TAG_ID.MN, html_js_1.NS.MATHML], -    [html_js_1.TAG_ID.MO, html_js_1.NS.MATHML], -    [html_js_1.TAG_ID.MS, html_js_1.NS.MATHML], -    [html_js_1.TAG_ID.MTEXT, html_js_1.NS.MATHML], -    [html_js_1.TAG_ID.DESC, html_js_1.NS.SVG], -    [html_js_1.TAG_ID.FOREIGN_OBJECT, html_js_1.NS.SVG], -    [html_js_1.TAG_ID.TITLE, html_js_1.NS.SVG], -]); -const NAMED_HEADERS = [html_js_1.TAG_ID.H1, html_js_1.TAG_ID.H2, html_js_1.TAG_ID.H3, html_js_1.TAG_ID.H4, html_js_1.TAG_ID.H5, html_js_1.TAG_ID.H6]; -const TABLE_ROW_CONTEXT = [html_js_1.TAG_ID.TR, html_js_1.TAG_ID.TEMPLATE, html_js_1.TAG_ID.HTML]; -const TABLE_BODY_CONTEXT = [html_js_1.TAG_ID.TBODY, html_js_1.TAG_ID.TFOOT, html_js_1.TAG_ID.THEAD, html_js_1.TAG_ID.TEMPLATE, html_js_1.TAG_ID.HTML]; -const TABLE_CONTEXT = [html_js_1.TAG_ID.TABLE, html_js_1.TAG_ID.TEMPLATE, html_js_1.TAG_ID.HTML]; -const TABLE_CELLS = [html_js_1.TAG_ID.TD, html_js_1.TAG_ID.TH]; -//Stack of open elements -class OpenElementStack { -    get currentTmplContentOrNode() { -        return this._isInTemplate() ? this.treeAdapter.getTemplateContent(this.current) : this.current; -    } -    constructor(document, treeAdapter, handler) { -        this.treeAdapter = treeAdapter; -        this.handler = handler; -        this.items = []; -        this.tagIDs = []; -        this.stackTop = -1; -        this.tmplCount = 0; -        this.currentTagId = html_js_1.TAG_ID.UNKNOWN; -        this.current = document; -    } -    //Index of element -    _indexOf(element) { -        return this.items.lastIndexOf(element, this.stackTop); -    } -    //Update current element -    _isInTemplate() { -        return this.currentTagId === html_js_1.TAG_ID.TEMPLATE && this.treeAdapter.getNamespaceURI(this.current) === html_js_1.NS.HTML; -    } -    _updateCurrentElement() { -        this.current = this.items[this.stackTop]; -        this.currentTagId = this.tagIDs[this.stackTop]; -    } -    //Mutations -    push(element, tagID) { -        this.stackTop++; -        this.items[this.stackTop] = element; -        this.current = element; -        this.tagIDs[this.stackTop] = tagID; -        this.currentTagId = tagID; -        if (this._isInTemplate()) { -            this.tmplCount++; -        } -        this.handler.onItemPush(element, tagID, true); -    } -    pop() { -        const popped = this.current; -        if (this.tmplCount > 0 && this._isInTemplate()) { -            this.tmplCount--; -        } -        this.stackTop--; -        this._updateCurrentElement(); -        this.handler.onItemPop(popped, true); -    } -    replace(oldElement, newElement) { -        const idx = this._indexOf(oldElement); -        this.items[idx] = newElement; -        if (idx === this.stackTop) { -            this.current = newElement; -        } -    } -    insertAfter(referenceElement, newElement, newElementID) { -        const insertionIdx = this._indexOf(referenceElement) + 1; -        this.items.splice(insertionIdx, 0, newElement); -        this.tagIDs.splice(insertionIdx, 0, newElementID); -        this.stackTop++; -        if (insertionIdx === this.stackTop) { -            this._updateCurrentElement(); -        } -        this.handler.onItemPush(this.current, this.currentTagId, insertionIdx === this.stackTop); -    } -    popUntilTagNamePopped(tagName) { -        let targetIdx = this.stackTop + 1; -        do { -            targetIdx = this.tagIDs.lastIndexOf(tagName, targetIdx - 1); -        } while (targetIdx > 0 && this.treeAdapter.getNamespaceURI(this.items[targetIdx]) !== html_js_1.NS.HTML); -        this.shortenToLength(targetIdx < 0 ? 0 : targetIdx); -    } -    shortenToLength(idx) { -        while (this.stackTop >= idx) { -            const popped = this.current; -            if (this.tmplCount > 0 && this._isInTemplate()) { -                this.tmplCount -= 1; -            } -            this.stackTop--; -            this._updateCurrentElement(); -            this.handler.onItemPop(popped, this.stackTop < idx); -        } -    } -    popUntilElementPopped(element) { -        const idx = this._indexOf(element); -        this.shortenToLength(idx < 0 ? 0 : idx); -    } -    popUntilPopped(tagNames, targetNS) { -        const idx = this._indexOfTagNames(tagNames, targetNS); -        this.shortenToLength(idx < 0 ? 0 : idx); -    } -    popUntilNumberedHeaderPopped() { -        this.popUntilPopped(NAMED_HEADERS, html_js_1.NS.HTML); -    } -    popUntilTableCellPopped() { -        this.popUntilPopped(TABLE_CELLS, html_js_1.NS.HTML); -    } -    popAllUpToHtmlElement() { -        //NOTE: here we assume that the root <html> element is always first in the open element stack, so -        //we perform this fast stack clean up. -        this.tmplCount = 0; -        this.shortenToLength(1); -    } -    _indexOfTagNames(tagNames, namespace) { -        for (let i = this.stackTop; i >= 0; i--) { -            if (tagNames.includes(this.tagIDs[i]) && this.treeAdapter.getNamespaceURI(this.items[i]) === namespace) { -                return i; -            } -        } -        return -1; -    } -    clearBackTo(tagNames, targetNS) { -        const idx = this._indexOfTagNames(tagNames, targetNS); -        this.shortenToLength(idx + 1); -    } -    clearBackToTableContext() { -        this.clearBackTo(TABLE_CONTEXT, html_js_1.NS.HTML); -    } -    clearBackToTableBodyContext() { -        this.clearBackTo(TABLE_BODY_CONTEXT, html_js_1.NS.HTML); -    } -    clearBackToTableRowContext() { -        this.clearBackTo(TABLE_ROW_CONTEXT, html_js_1.NS.HTML); -    } -    remove(element) { -        const idx = this._indexOf(element); -        if (idx >= 0) { -            if (idx === this.stackTop) { -                this.pop(); -            } -            else { -                this.items.splice(idx, 1); -                this.tagIDs.splice(idx, 1); -                this.stackTop--; -                this._updateCurrentElement(); -                this.handler.onItemPop(element, false); -            } -        } -    } -    //Search -    tryPeekProperlyNestedBodyElement() { -        //Properly nested <body> element (should be second element in stack). -        return this.stackTop >= 1 && this.tagIDs[1] === html_js_1.TAG_ID.BODY ? this.items[1] : null; -    } -    contains(element) { -        return this._indexOf(element) > -1; -    } -    getCommonAncestor(element) { -        const elementIdx = this._indexOf(element) - 1; -        return elementIdx >= 0 ? this.items[elementIdx] : null; -    } -    isRootHtmlElementCurrent() { -        return this.stackTop === 0 && this.tagIDs[0] === html_js_1.TAG_ID.HTML; -    } -    //Element in scope -    hasInScope(tagName) { -        for (let i = this.stackTop; i >= 0; i--) { -            const tn = this.tagIDs[i]; -            const ns = this.treeAdapter.getNamespaceURI(this.items[i]); -            if (tn === tagName && ns === html_js_1.NS.HTML) { -                return true; -            } -            if (SCOPING_ELEMENT_NS.get(tn) === ns) { -                return false; -            } -        } -        return true; -    } -    hasNumberedHeaderInScope() { -        for (let i = this.stackTop; i >= 0; i--) { -            const tn = this.tagIDs[i]; -            const ns = this.treeAdapter.getNamespaceURI(this.items[i]); -            if ((0, html_js_1.isNumberedHeader)(tn) && ns === html_js_1.NS.HTML) { -                return true; -            } -            if (SCOPING_ELEMENT_NS.get(tn) === ns) { -                return false; -            } -        } -        return true; -    } -    hasInListItemScope(tagName) { -        for (let i = this.stackTop; i >= 0; i--) { -            const tn = this.tagIDs[i]; -            const ns = this.treeAdapter.getNamespaceURI(this.items[i]); -            if (tn === tagName && ns === html_js_1.NS.HTML) { -                return true; -            } -            if (((tn === html_js_1.TAG_ID.UL || tn === html_js_1.TAG_ID.OL) && ns === html_js_1.NS.HTML) || SCOPING_ELEMENT_NS.get(tn) === ns) { -                return false; -            } -        } -        return true; -    } -    hasInButtonScope(tagName) { -        for (let i = this.stackTop; i >= 0; i--) { -            const tn = this.tagIDs[i]; -            const ns = this.treeAdapter.getNamespaceURI(this.items[i]); -            if (tn === tagName && ns === html_js_1.NS.HTML) { -                return true; -            } -            if ((tn === html_js_1.TAG_ID.BUTTON && ns === html_js_1.NS.HTML) || SCOPING_ELEMENT_NS.get(tn) === ns) { -                return false; -            } -        } -        return true; -    } -    hasInTableScope(tagName) { -        for (let i = this.stackTop; i >= 0; i--) { -            const tn = this.tagIDs[i]; -            const ns = this.treeAdapter.getNamespaceURI(this.items[i]); -            if (ns !== html_js_1.NS.HTML) { -                continue; -            } -            if (tn === tagName) { -                return true; -            } -            if (tn === html_js_1.TAG_ID.TABLE || tn === html_js_1.TAG_ID.TEMPLATE || tn === html_js_1.TAG_ID.HTML) { -                return false; -            } -        } -        return true; -    } -    hasTableBodyContextInTableScope() { -        for (let i = this.stackTop; i >= 0; i--) { -            const tn = this.tagIDs[i]; -            const ns = this.treeAdapter.getNamespaceURI(this.items[i]); -            if (ns !== html_js_1.NS.HTML) { -                continue; -            } -            if (tn === html_js_1.TAG_ID.TBODY || tn === html_js_1.TAG_ID.THEAD || tn === html_js_1.TAG_ID.TFOOT) { -                return true; -            } -            if (tn === html_js_1.TAG_ID.TABLE || tn === html_js_1.TAG_ID.HTML) { -                return false; -            } -        } -        return true; -    } -    hasInSelectScope(tagName) { -        for (let i = this.stackTop; i >= 0; i--) { -            const tn = this.tagIDs[i]; -            const ns = this.treeAdapter.getNamespaceURI(this.items[i]); -            if (ns !== html_js_1.NS.HTML) { -                continue; -            } -            if (tn === tagName) { -                return true; -            } -            if (tn !== html_js_1.TAG_ID.OPTION && tn !== html_js_1.TAG_ID.OPTGROUP) { -                return false; -            } -        } -        return true; -    } -    //Implied end tags -    generateImpliedEndTags() { -        while (IMPLICIT_END_TAG_REQUIRED.has(this.currentTagId)) { -            this.pop(); -        } -    } -    generateImpliedEndTagsThoroughly() { -        while (IMPLICIT_END_TAG_REQUIRED_THOROUGHLY.has(this.currentTagId)) { -            this.pop(); -        } -    } -    generateImpliedEndTagsWithExclusion(exclusionId) { -        while (this.currentTagId !== exclusionId && IMPLICIT_END_TAG_REQUIRED_THOROUGHLY.has(this.currentTagId)) { -            this.pop(); -        } -    } -} -exports.OpenElementStack = OpenElementStack; - -},{"../common/html.js":9}],16:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.serializeOuter = exports.serialize = void 0; -const html_js_1 = require("../common/html.js"); -const escape_js_1 = require("entities/lib/escape.js"); -const default_js_1 = require("../tree-adapters/default.js"); -// Sets -const VOID_ELEMENTS = new Set([ -    html_js_1.TAG_NAMES.AREA, -    html_js_1.TAG_NAMES.BASE, -    html_js_1.TAG_NAMES.BASEFONT, -    html_js_1.TAG_NAMES.BGSOUND, -    html_js_1.TAG_NAMES.BR, -    html_js_1.TAG_NAMES.COL, -    html_js_1.TAG_NAMES.EMBED, -    html_js_1.TAG_NAMES.FRAME, -    html_js_1.TAG_NAMES.HR, -    html_js_1.TAG_NAMES.IMG, -    html_js_1.TAG_NAMES.INPUT, -    html_js_1.TAG_NAMES.KEYGEN, -    html_js_1.TAG_NAMES.LINK, -    html_js_1.TAG_NAMES.META, -    html_js_1.TAG_NAMES.PARAM, -    html_js_1.TAG_NAMES.SOURCE, -    html_js_1.TAG_NAMES.TRACK, -    html_js_1.TAG_NAMES.WBR, -]); -function isVoidElement(node, options) { -    return (options.treeAdapter.isElementNode(node) && -        options.treeAdapter.getNamespaceURI(node) === html_js_1.NS.HTML && -        VOID_ELEMENTS.has(options.treeAdapter.getTagName(node))); -} -const defaultOpts = { treeAdapter: default_js_1.defaultTreeAdapter, scriptingEnabled: true }; -/** - * Serializes an AST node to an HTML string. - * - * @example - * - * ```js - * const parse5 = require('parse5'); - * - * const document = parse5.parse('<!DOCTYPE html><html><head></head><body>Hi there!</body></html>'); - * - * // Serializes a document. - * const html = parse5.serialize(document); - * - * // Serializes the <html> element content. - * const str = parse5.serialize(document.childNodes[1]); - * - * console.log(str); //> '<head></head><body>Hi there!</body>' - * ``` - * - * @param node Node to serialize. - * @param options Serialization options. - */ -function serialize(node, options) { -    const opts = Object.assign(Object.assign({}, defaultOpts), options); -    if (isVoidElement(node, opts)) { -        return ''; -    } -    return serializeChildNodes(node, opts); -} -exports.serialize = serialize; -/** - * Serializes an AST element node to an HTML string, including the element node. - * - * @example - * - * ```js - * const parse5 = require('parse5'); - * - * const document = parse5.parseFragment('<div>Hello, <b>world</b>!</div>'); - * - * // Serializes the <div> element. - * const html = parse5.serializeOuter(document.childNodes[0]); - * - * console.log(str); //> '<div>Hello, <b>world</b>!</div>' - * ``` - * - * @param node Node to serialize. - * @param options Serialization options. - */ -function serializeOuter(node, options) { -    const opts = Object.assign(Object.assign({}, defaultOpts), options); -    return serializeNode(node, opts); -} -exports.serializeOuter = serializeOuter; -function serializeChildNodes(parentNode, options) { -    let html = ''; -    // Get container of the child nodes -    const container = options.treeAdapter.isElementNode(parentNode) && -        options.treeAdapter.getTagName(parentNode) === html_js_1.TAG_NAMES.TEMPLATE && -        options.treeAdapter.getNamespaceURI(parentNode) === html_js_1.NS.HTML -        ? options.treeAdapter.getTemplateContent(parentNode) -        : parentNode; -    const childNodes = options.treeAdapter.getChildNodes(container); -    if (childNodes) { -        for (const currentNode of childNodes) { -            html += serializeNode(currentNode, options); -        } -    } -    return html; -} -function serializeNode(node, options) { -    if (options.treeAdapter.isElementNode(node)) { -        return serializeElement(node, options); -    } -    if (options.treeAdapter.isTextNode(node)) { -        return serializeTextNode(node, options); -    } -    if (options.treeAdapter.isCommentNode(node)) { -        return serializeCommentNode(node, options); -    } -    if (options.treeAdapter.isDocumentTypeNode(node)) { -        return serializeDocumentTypeNode(node, options); -    } -    // Return an empty string for unknown nodes -    return ''; -} -function serializeElement(node, options) { -    const tn = options.treeAdapter.getTagName(node); -    return `<${tn}${serializeAttributes(node, options)}>${isVoidElement(node, options) ? '' : `${serializeChildNodes(node, options)}</${tn}>`}`; -} -function serializeAttributes(node, { treeAdapter }) { -    let html = ''; -    for (const attr of treeAdapter.getAttrList(node)) { -        html += ' '; -        if (!attr.namespace) { -            html += attr.name; -        } -        else -            switch (attr.namespace) { -                case html_js_1.NS.XML: { -                    html += `xml:${attr.name}`; -                    break; -                } -                case html_js_1.NS.XMLNS: { -                    if (attr.name !== 'xmlns') { -                        html += 'xmlns:'; -                    } -                    html += attr.name; -                    break; -                } -                case html_js_1.NS.XLINK: { -                    html += `xlink:${attr.name}`; -                    break; -                } -                default: { -                    html += `${attr.prefix}:${attr.name}`; -                } -            } -        html += `="${(0, escape_js_1.escapeAttribute)(attr.value)}"`; -    } -    return html; -} -function serializeTextNode(node, options) { -    const { treeAdapter } = options; -    const content = treeAdapter.getTextNodeContent(node); -    const parent = treeAdapter.getParentNode(node); -    const parentTn = parent && treeAdapter.isElementNode(parent) && treeAdapter.getTagName(parent); -    return parentTn && -        treeAdapter.getNamespaceURI(parent) === html_js_1.NS.HTML && -        (0, html_js_1.hasUnescapedText)(parentTn, options.scriptingEnabled) -        ? content -        : (0, escape_js_1.escapeText)(content); -} -function serializeCommentNode(node, { treeAdapter }) { -    return `<!--${treeAdapter.getCommentNodeContent(node)}-->`; -} -function serializeDocumentTypeNode(node, { treeAdapter }) { -    return `<!DOCTYPE ${treeAdapter.getDocumentTypeNodeName(node)}>`; -} - -},{"../common/html.js":9,"../tree-adapters/default.js":19,"entities/lib/escape.js":3}],17:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Tokenizer = exports.TokenizerMode = void 0; -const preprocessor_js_1 = require("./preprocessor.js"); -const unicode_js_1 = require("../common/unicode.js"); -const token_js_1 = require("../common/token.js"); -const decode_js_1 = require("entities/lib/decode.js"); -const error_codes_js_1 = require("../common/error-codes.js"); -const html_js_1 = require("../common/html.js"); -//C1 Unicode control character reference replacements -const C1_CONTROLS_REFERENCE_REPLACEMENTS = new Map([ -    [0x80, 8364], -    [0x82, 8218], -    [0x83, 402], -    [0x84, 8222], -    [0x85, 8230], -    [0x86, 8224], -    [0x87, 8225], -    [0x88, 710], -    [0x89, 8240], -    [0x8a, 352], -    [0x8b, 8249], -    [0x8c, 338], -    [0x8e, 381], -    [0x91, 8216], -    [0x92, 8217], -    [0x93, 8220], -    [0x94, 8221], -    [0x95, 8226], -    [0x96, 8211], -    [0x97, 8212], -    [0x98, 732], -    [0x99, 8482], -    [0x9a, 353], -    [0x9b, 8250], -    [0x9c, 339], -    [0x9e, 382], -    [0x9f, 376], -]); -//States -var State; -(function (State) { -    State[State["DATA"] = 0] = "DATA"; -    State[State["RCDATA"] = 1] = "RCDATA"; -    State[State["RAWTEXT"] = 2] = "RAWTEXT"; -    State[State["SCRIPT_DATA"] = 3] = "SCRIPT_DATA"; -    State[State["PLAINTEXT"] = 4] = "PLAINTEXT"; -    State[State["TAG_OPEN"] = 5] = "TAG_OPEN"; -    State[State["END_TAG_OPEN"] = 6] = "END_TAG_OPEN"; -    State[State["TAG_NAME"] = 7] = "TAG_NAME"; -    State[State["RCDATA_LESS_THAN_SIGN"] = 8] = "RCDATA_LESS_THAN_SIGN"; -    State[State["RCDATA_END_TAG_OPEN"] = 9] = "RCDATA_END_TAG_OPEN"; -    State[State["RCDATA_END_TAG_NAME"] = 10] = "RCDATA_END_TAG_NAME"; -    State[State["RAWTEXT_LESS_THAN_SIGN"] = 11] = "RAWTEXT_LESS_THAN_SIGN"; -    State[State["RAWTEXT_END_TAG_OPEN"] = 12] = "RAWTEXT_END_TAG_OPEN"; -    State[State["RAWTEXT_END_TAG_NAME"] = 13] = "RAWTEXT_END_TAG_NAME"; -    State[State["SCRIPT_DATA_LESS_THAN_SIGN"] = 14] = "SCRIPT_DATA_LESS_THAN_SIGN"; -    State[State["SCRIPT_DATA_END_TAG_OPEN"] = 15] = "SCRIPT_DATA_END_TAG_OPEN"; -    State[State["SCRIPT_DATA_END_TAG_NAME"] = 16] = "SCRIPT_DATA_END_TAG_NAME"; -    State[State["SCRIPT_DATA_ESCAPE_START"] = 17] = "SCRIPT_DATA_ESCAPE_START"; -    State[State["SCRIPT_DATA_ESCAPE_START_DASH"] = 18] = "SCRIPT_DATA_ESCAPE_START_DASH"; -    State[State["SCRIPT_DATA_ESCAPED"] = 19] = "SCRIPT_DATA_ESCAPED"; -    State[State["SCRIPT_DATA_ESCAPED_DASH"] = 20] = "SCRIPT_DATA_ESCAPED_DASH"; -    State[State["SCRIPT_DATA_ESCAPED_DASH_DASH"] = 21] = "SCRIPT_DATA_ESCAPED_DASH_DASH"; -    State[State["SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN"] = 22] = "SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN"; -    State[State["SCRIPT_DATA_ESCAPED_END_TAG_OPEN"] = 23] = "SCRIPT_DATA_ESCAPED_END_TAG_OPEN"; -    State[State["SCRIPT_DATA_ESCAPED_END_TAG_NAME"] = 24] = "SCRIPT_DATA_ESCAPED_END_TAG_NAME"; -    State[State["SCRIPT_DATA_DOUBLE_ESCAPE_START"] = 25] = "SCRIPT_DATA_DOUBLE_ESCAPE_START"; -    State[State["SCRIPT_DATA_DOUBLE_ESCAPED"] = 26] = "SCRIPT_DATA_DOUBLE_ESCAPED"; -    State[State["SCRIPT_DATA_DOUBLE_ESCAPED_DASH"] = 27] = "SCRIPT_DATA_DOUBLE_ESCAPED_DASH"; -    State[State["SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH"] = 28] = "SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH"; -    State[State["SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN"] = 29] = "SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN"; -    State[State["SCRIPT_DATA_DOUBLE_ESCAPE_END"] = 30] = "SCRIPT_DATA_DOUBLE_ESCAPE_END"; -    State[State["BEFORE_ATTRIBUTE_NAME"] = 31] = "BEFORE_ATTRIBUTE_NAME"; -    State[State["ATTRIBUTE_NAME"] = 32] = "ATTRIBUTE_NAME"; -    State[State["AFTER_ATTRIBUTE_NAME"] = 33] = "AFTER_ATTRIBUTE_NAME"; -    State[State["BEFORE_ATTRIBUTE_VALUE"] = 34] = "BEFORE_ATTRIBUTE_VALUE"; -    State[State["ATTRIBUTE_VALUE_DOUBLE_QUOTED"] = 35] = "ATTRIBUTE_VALUE_DOUBLE_QUOTED"; -    State[State["ATTRIBUTE_VALUE_SINGLE_QUOTED"] = 36] = "ATTRIBUTE_VALUE_SINGLE_QUOTED"; -    State[State["ATTRIBUTE_VALUE_UNQUOTED"] = 37] = "ATTRIBUTE_VALUE_UNQUOTED"; -    State[State["AFTER_ATTRIBUTE_VALUE_QUOTED"] = 38] = "AFTER_ATTRIBUTE_VALUE_QUOTED"; -    State[State["SELF_CLOSING_START_TAG"] = 39] = "SELF_CLOSING_START_TAG"; -    State[State["BOGUS_COMMENT"] = 40] = "BOGUS_COMMENT"; -    State[State["MARKUP_DECLARATION_OPEN"] = 41] = "MARKUP_DECLARATION_OPEN"; -    State[State["COMMENT_START"] = 42] = "COMMENT_START"; -    State[State["COMMENT_START_DASH"] = 43] = "COMMENT_START_DASH"; -    State[State["COMMENT"] = 44] = "COMMENT"; -    State[State["COMMENT_LESS_THAN_SIGN"] = 45] = "COMMENT_LESS_THAN_SIGN"; -    State[State["COMMENT_LESS_THAN_SIGN_BANG"] = 46] = "COMMENT_LESS_THAN_SIGN_BANG"; -    State[State["COMMENT_LESS_THAN_SIGN_BANG_DASH"] = 47] = "COMMENT_LESS_THAN_SIGN_BANG_DASH"; -    State[State["COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH"] = 48] = "COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH"; -    State[State["COMMENT_END_DASH"] = 49] = "COMMENT_END_DASH"; -    State[State["COMMENT_END"] = 50] = "COMMENT_END"; -    State[State["COMMENT_END_BANG"] = 51] = "COMMENT_END_BANG"; -    State[State["DOCTYPE"] = 52] = "DOCTYPE"; -    State[State["BEFORE_DOCTYPE_NAME"] = 53] = "BEFORE_DOCTYPE_NAME"; -    State[State["DOCTYPE_NAME"] = 54] = "DOCTYPE_NAME"; -    State[State["AFTER_DOCTYPE_NAME"] = 55] = "AFTER_DOCTYPE_NAME"; -    State[State["AFTER_DOCTYPE_PUBLIC_KEYWORD"] = 56] = "AFTER_DOCTYPE_PUBLIC_KEYWORD"; -    State[State["BEFORE_DOCTYPE_PUBLIC_IDENTIFIER"] = 57] = "BEFORE_DOCTYPE_PUBLIC_IDENTIFIER"; -    State[State["DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED"] = 58] = "DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED"; -    State[State["DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED"] = 59] = "DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED"; -    State[State["AFTER_DOCTYPE_PUBLIC_IDENTIFIER"] = 60] = "AFTER_DOCTYPE_PUBLIC_IDENTIFIER"; -    State[State["BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS"] = 61] = "BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS"; -    State[State["AFTER_DOCTYPE_SYSTEM_KEYWORD"] = 62] = "AFTER_DOCTYPE_SYSTEM_KEYWORD"; -    State[State["BEFORE_DOCTYPE_SYSTEM_IDENTIFIER"] = 63] = "BEFORE_DOCTYPE_SYSTEM_IDENTIFIER"; -    State[State["DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED"] = 64] = "DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED"; -    State[State["DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED"] = 65] = "DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED"; -    State[State["AFTER_DOCTYPE_SYSTEM_IDENTIFIER"] = 66] = "AFTER_DOCTYPE_SYSTEM_IDENTIFIER"; -    State[State["BOGUS_DOCTYPE"] = 67] = "BOGUS_DOCTYPE"; -    State[State["CDATA_SECTION"] = 68] = "CDATA_SECTION"; -    State[State["CDATA_SECTION_BRACKET"] = 69] = "CDATA_SECTION_BRACKET"; -    State[State["CDATA_SECTION_END"] = 70] = "CDATA_SECTION_END"; -    State[State["CHARACTER_REFERENCE"] = 71] = "CHARACTER_REFERENCE"; -    State[State["NAMED_CHARACTER_REFERENCE"] = 72] = "NAMED_CHARACTER_REFERENCE"; -    State[State["AMBIGUOUS_AMPERSAND"] = 73] = "AMBIGUOUS_AMPERSAND"; -    State[State["NUMERIC_CHARACTER_REFERENCE"] = 74] = "NUMERIC_CHARACTER_REFERENCE"; -    State[State["HEXADEMICAL_CHARACTER_REFERENCE_START"] = 75] = "HEXADEMICAL_CHARACTER_REFERENCE_START"; -    State[State["HEXADEMICAL_CHARACTER_REFERENCE"] = 76] = "HEXADEMICAL_CHARACTER_REFERENCE"; -    State[State["DECIMAL_CHARACTER_REFERENCE"] = 77] = "DECIMAL_CHARACTER_REFERENCE"; -    State[State["NUMERIC_CHARACTER_REFERENCE_END"] = 78] = "NUMERIC_CHARACTER_REFERENCE_END"; -})(State || (State = {})); -//Tokenizer initial states for different modes -exports.TokenizerMode = { -    DATA: State.DATA, -    RCDATA: State.RCDATA, -    RAWTEXT: State.RAWTEXT, -    SCRIPT_DATA: State.SCRIPT_DATA, -    PLAINTEXT: State.PLAINTEXT, -    CDATA_SECTION: State.CDATA_SECTION, -}; -//Utils -//OPTIMIZATION: these utility functions should not be moved out of this module. V8 Crankshaft will not inline -//this functions if they will be situated in another module due to context switch. -//Always perform inlining check before modifying this functions ('node --trace-inlining'). -function isAsciiDigit(cp) { -    return cp >= unicode_js_1.CODE_POINTS.DIGIT_0 && cp <= unicode_js_1.CODE_POINTS.DIGIT_9; -} -function isAsciiUpper(cp) { -    return cp >= unicode_js_1.CODE_POINTS.LATIN_CAPITAL_A && cp <= unicode_js_1.CODE_POINTS.LATIN_CAPITAL_Z; -} -function isAsciiLower(cp) { -    return cp >= unicode_js_1.CODE_POINTS.LATIN_SMALL_A && cp <= unicode_js_1.CODE_POINTS.LATIN_SMALL_Z; -} -function isAsciiLetter(cp) { -    return isAsciiLower(cp) || isAsciiUpper(cp); -} -function isAsciiAlphaNumeric(cp) { -    return isAsciiLetter(cp) || isAsciiDigit(cp); -} -function isAsciiUpperHexDigit(cp) { -    return cp >= unicode_js_1.CODE_POINTS.LATIN_CAPITAL_A && cp <= unicode_js_1.CODE_POINTS.LATIN_CAPITAL_F; -} -function isAsciiLowerHexDigit(cp) { -    return cp >= unicode_js_1.CODE_POINTS.LATIN_SMALL_A && cp <= unicode_js_1.CODE_POINTS.LATIN_SMALL_F; -} -function isAsciiHexDigit(cp) { -    return isAsciiDigit(cp) || isAsciiUpperHexDigit(cp) || isAsciiLowerHexDigit(cp); -} -function toAsciiLower(cp) { -    return cp + 32; -} -function isWhitespace(cp) { -    return cp === unicode_js_1.CODE_POINTS.SPACE || cp === unicode_js_1.CODE_POINTS.LINE_FEED || cp === unicode_js_1.CODE_POINTS.TABULATION || cp === unicode_js_1.CODE_POINTS.FORM_FEED; -} -function isEntityInAttributeInvalidEnd(nextCp) { -    return nextCp === unicode_js_1.CODE_POINTS.EQUALS_SIGN || isAsciiAlphaNumeric(nextCp); -} -function isScriptDataDoubleEscapeSequenceEnd(cp) { -    return isWhitespace(cp) || cp === unicode_js_1.CODE_POINTS.SOLIDUS || cp === unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN; -} -//Tokenizer -class Tokenizer { -    constructor(options, handler) { -        this.options = options; -        this.handler = handler; -        this.paused = false; -        /** Ensures that the parsing loop isn't run multiple times at once. */ -        this.inLoop = false; -        /** -         * Indicates that the current adjusted node exists, is not an element in the HTML namespace, -         * and that it is not an integration point for either MathML or HTML. -         * -         * @see {@link https://html.spec.whatwg.org/multipage/parsing.html#tree-construction} -         */ -        this.inForeignNode = false; -        this.lastStartTagName = ''; -        this.active = false; -        this.state = State.DATA; -        this.returnState = State.DATA; -        this.charRefCode = -1; -        this.consumedAfterSnapshot = -1; -        this.currentCharacterToken = null; -        this.currentToken = null; -        this.currentAttr = { name: '', value: '' }; -        this.preprocessor = new preprocessor_js_1.Preprocessor(handler); -        this.currentLocation = this.getCurrentLocation(-1); -    } -    //Errors -    _err(code) { -        var _a, _b; -        (_b = (_a = this.handler).onParseError) === null || _b === void 0 ? void 0 : _b.call(_a, this.preprocessor.getError(code)); -    } -    // NOTE: `offset` may never run across line boundaries. -    getCurrentLocation(offset) { -        if (!this.options.sourceCodeLocationInfo) { -            return null; -        } -        return { -            startLine: this.preprocessor.line, -            startCol: this.preprocessor.col - offset, -            startOffset: this.preprocessor.offset - offset, -            endLine: -1, -            endCol: -1, -            endOffset: -1, -        }; -    } -    _runParsingLoop() { -        if (this.inLoop) -            return; -        this.inLoop = true; -        while (this.active && !this.paused) { -            this.consumedAfterSnapshot = 0; -            const cp = this._consume(); -            if (!this._ensureHibernation()) { -                this._callState(cp); -            } -        } -        this.inLoop = false; -    } -    //API -    pause() { -        this.paused = true; -    } -    resume(writeCallback) { -        if (!this.paused) { -            throw new Error('Parser was already resumed'); -        } -        this.paused = false; -        // Necessary for synchronous resume. -        if (this.inLoop) -            return; -        this._runParsingLoop(); -        if (!this.paused) { -            writeCallback === null || writeCallback === void 0 ? void 0 : writeCallback(); -        } -    } -    write(chunk, isLastChunk, writeCallback) { -        this.active = true; -        this.preprocessor.write(chunk, isLastChunk); -        this._runParsingLoop(); -        if (!this.paused) { -            writeCallback === null || writeCallback === void 0 ? void 0 : writeCallback(); -        } -    } -    insertHtmlAtCurrentPos(chunk) { -        this.active = true; -        this.preprocessor.insertHtmlAtCurrentPos(chunk); -        this._runParsingLoop(); -    } -    //Hibernation -    _ensureHibernation() { -        if (this.preprocessor.endOfChunkHit) { -            this._unconsume(this.consumedAfterSnapshot); -            this.active = false; -            return true; -        } -        return false; -    } -    //Consumption -    _consume() { -        this.consumedAfterSnapshot++; -        return this.preprocessor.advance(); -    } -    _unconsume(count) { -        this.consumedAfterSnapshot -= count; -        this.preprocessor.retreat(count); -    } -    _reconsumeInState(state, cp) { -        this.state = state; -        this._callState(cp); -    } -    _advanceBy(count) { -        this.consumedAfterSnapshot += count; -        for (let i = 0; i < count; i++) { -            this.preprocessor.advance(); -        } -    } -    _consumeSequenceIfMatch(pattern, caseSensitive) { -        if (this.preprocessor.startsWith(pattern, caseSensitive)) { -            // We will already have consumed one character before calling this method. -            this._advanceBy(pattern.length - 1); -            return true; -        } -        return false; -    } -    //Token creation -    _createStartTagToken() { -        this.currentToken = { -            type: token_js_1.TokenType.START_TAG, -            tagName: '', -            tagID: html_js_1.TAG_ID.UNKNOWN, -            selfClosing: false, -            ackSelfClosing: false, -            attrs: [], -            location: this.getCurrentLocation(1), -        }; -    } -    _createEndTagToken() { -        this.currentToken = { -            type: token_js_1.TokenType.END_TAG, -            tagName: '', -            tagID: html_js_1.TAG_ID.UNKNOWN, -            selfClosing: false, -            ackSelfClosing: false, -            attrs: [], -            location: this.getCurrentLocation(2), -        }; -    } -    _createCommentToken(offset) { -        this.currentToken = { -            type: token_js_1.TokenType.COMMENT, -            data: '', -            location: this.getCurrentLocation(offset), -        }; -    } -    _createDoctypeToken(initialName) { -        this.currentToken = { -            type: token_js_1.TokenType.DOCTYPE, -            name: initialName, -            forceQuirks: false, -            publicId: null, -            systemId: null, -            location: this.currentLocation, -        }; -    } -    _createCharacterToken(type, chars) { -        this.currentCharacterToken = { -            type, -            chars, -            location: this.currentLocation, -        }; -    } -    //Tag attributes -    _createAttr(attrNameFirstCh) { -        this.currentAttr = { -            name: attrNameFirstCh, -            value: '', -        }; -        this.currentLocation = this.getCurrentLocation(0); -    } -    _leaveAttrName() { -        var _a; -        var _b; -        const token = this.currentToken; -        if ((0, token_js_1.getTokenAttr)(token, this.currentAttr.name) === null) { -            token.attrs.push(this.currentAttr); -            if (token.location && this.currentLocation) { -                const attrLocations = ((_a = (_b = token.location).attrs) !== null && _a !== void 0 ? _a : (_b.attrs = Object.create(null))); -                attrLocations[this.currentAttr.name] = this.currentLocation; -                // Set end location -                this._leaveAttrValue(); -            } -        } -        else { -            this._err(error_codes_js_1.ERR.duplicateAttribute); -        } -    } -    _leaveAttrValue() { -        if (this.currentLocation) { -            this.currentLocation.endLine = this.preprocessor.line; -            this.currentLocation.endCol = this.preprocessor.col; -            this.currentLocation.endOffset = this.preprocessor.offset; -        } -    } -    //Token emission -    prepareToken(ct) { -        this._emitCurrentCharacterToken(ct.location); -        this.currentToken = null; -        if (ct.location) { -            ct.location.endLine = this.preprocessor.line; -            ct.location.endCol = this.preprocessor.col + 1; -            ct.location.endOffset = this.preprocessor.offset + 1; -        } -        this.currentLocation = this.getCurrentLocation(-1); -    } -    emitCurrentTagToken() { -        const ct = this.currentToken; -        this.prepareToken(ct); -        ct.tagID = (0, html_js_1.getTagID)(ct.tagName); -        if (ct.type === token_js_1.TokenType.START_TAG) { -            this.lastStartTagName = ct.tagName; -            this.handler.onStartTag(ct); -        } -        else { -            if (ct.attrs.length > 0) { -                this._err(error_codes_js_1.ERR.endTagWithAttributes); -            } -            if (ct.selfClosing) { -                this._err(error_codes_js_1.ERR.endTagWithTrailingSolidus); -            } -            this.handler.onEndTag(ct); -        } -        this.preprocessor.dropParsedChunk(); -    } -    emitCurrentComment(ct) { -        this.prepareToken(ct); -        this.handler.onComment(ct); -        this.preprocessor.dropParsedChunk(); -    } -    emitCurrentDoctype(ct) { -        this.prepareToken(ct); -        this.handler.onDoctype(ct); -        this.preprocessor.dropParsedChunk(); -    } -    _emitCurrentCharacterToken(nextLocation) { -        if (this.currentCharacterToken) { -            //NOTE: if we have a pending character token, make it's end location equal to the -            //current token's start location. -            if (nextLocation && this.currentCharacterToken.location) { -                this.currentCharacterToken.location.endLine = nextLocation.startLine; -                this.currentCharacterToken.location.endCol = nextLocation.startCol; -                this.currentCharacterToken.location.endOffset = nextLocation.startOffset; -            } -            switch (this.currentCharacterToken.type) { -                case token_js_1.TokenType.CHARACTER: { -                    this.handler.onCharacter(this.currentCharacterToken); -                    break; -                } -                case token_js_1.TokenType.NULL_CHARACTER: { -                    this.handler.onNullCharacter(this.currentCharacterToken); -                    break; -                } -                case token_js_1.TokenType.WHITESPACE_CHARACTER: { -                    this.handler.onWhitespaceCharacter(this.currentCharacterToken); -                    break; -                } -            } -            this.currentCharacterToken = null; -        } -    } -    _emitEOFToken() { -        const location = this.getCurrentLocation(0); -        if (location) { -            location.endLine = location.startLine; -            location.endCol = location.startCol; -            location.endOffset = location.startOffset; -        } -        this._emitCurrentCharacterToken(location); -        this.handler.onEof({ type: token_js_1.TokenType.EOF, location }); -        this.active = false; -    } -    //Characters emission -    //OPTIMIZATION: specification uses only one type of character tokens (one token per character). -    //This causes a huge memory overhead and a lot of unnecessary parser loops. parse5 uses 3 groups of characters. -    //If we have a sequence of characters that belong to the same group, the parser can process it -    //as a single solid character token. -    //So, there are 3 types of character tokens in parse5: -    //1)TokenType.NULL_CHARACTER - \u0000-character sequences (e.g. '\u0000\u0000\u0000') -    //2)TokenType.WHITESPACE_CHARACTER - any whitespace/new-line character sequences (e.g. '\n  \r\t   \f') -    //3)TokenType.CHARACTER - any character sequence which don't belong to groups 1 and 2 (e.g. 'abcdef1234@@#$%^') -    _appendCharToCurrentCharacterToken(type, ch) { -        if (this.currentCharacterToken) { -            if (this.currentCharacterToken.type !== type) { -                this.currentLocation = this.getCurrentLocation(0); -                this._emitCurrentCharacterToken(this.currentLocation); -                this.preprocessor.dropParsedChunk(); -            } -            else { -                this.currentCharacterToken.chars += ch; -                return; -            } -        } -        this._createCharacterToken(type, ch); -    } -    _emitCodePoint(cp) { -        const type = isWhitespace(cp) -            ? token_js_1.TokenType.WHITESPACE_CHARACTER -            : cp === unicode_js_1.CODE_POINTS.NULL -                ? token_js_1.TokenType.NULL_CHARACTER -                : token_js_1.TokenType.CHARACTER; -        this._appendCharToCurrentCharacterToken(type, String.fromCodePoint(cp)); -    } -    //NOTE: used when we emit characters explicitly. -    //This is always for non-whitespace and non-null characters, which allows us to avoid additional checks. -    _emitChars(ch) { -        this._appendCharToCurrentCharacterToken(token_js_1.TokenType.CHARACTER, ch); -    } -    // Character reference helpers -    _matchNamedCharacterReference(cp) { -        let result = null; -        let excess = 0; -        let withoutSemicolon = false; -        for (let i = 0, current = decode_js_1.htmlDecodeTree[0]; i >= 0; cp = this._consume()) { -            i = (0, decode_js_1.determineBranch)(decode_js_1.htmlDecodeTree, current, i + 1, cp); -            if (i < 0) -                break; -            excess += 1; -            current = decode_js_1.htmlDecodeTree[i]; -            const masked = current & decode_js_1.BinTrieFlags.VALUE_LENGTH; -            // If the branch is a value, store it and continue -            if (masked) { -                // The mask is the number of bytes of the value, including the current byte. -                const valueLength = (masked >> 14) - 1; -                // Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error. -                // See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state -                if (cp !== unicode_js_1.CODE_POINTS.SEMICOLON && -                    this._isCharacterReferenceInAttribute() && -                    isEntityInAttributeInvalidEnd(this.preprocessor.peek(1))) { -                    //NOTE: we don't flush all consumed code points here, and instead switch back to the original state after -                    //emitting an ampersand. This is fine, as alphanumeric characters won't be parsed differently in attributes. -                    result = [unicode_js_1.CODE_POINTS.AMPERSAND]; -                    // Skip over the value. -                    i += valueLength; -                } -                else { -                    // If this is a surrogate pair, consume the next two bytes. -                    result = -                        valueLength === 0 -                            ? [decode_js_1.htmlDecodeTree[i] & ~decode_js_1.BinTrieFlags.VALUE_LENGTH] -                            : valueLength === 1 -                                ? [decode_js_1.htmlDecodeTree[++i]] -                                : [decode_js_1.htmlDecodeTree[++i], decode_js_1.htmlDecodeTree[++i]]; -                    excess = 0; -                    withoutSemicolon = cp !== unicode_js_1.CODE_POINTS.SEMICOLON; -                } -                if (valueLength === 0) { -                    // If the value is zero-length, we're done. -                    this._consume(); -                    break; -                } -            } -        } -        this._unconsume(excess); -        if (withoutSemicolon && !this.preprocessor.endOfChunkHit) { -            this._err(error_codes_js_1.ERR.missingSemicolonAfterCharacterReference); -        } -        // We want to emit the error above on the code point after the entity. -        // We always consume one code point too many in the loop, and we wait to -        // unconsume it until after the error is emitted. -        this._unconsume(1); -        return result; -    } -    _isCharacterReferenceInAttribute() { -        return (this.returnState === State.ATTRIBUTE_VALUE_DOUBLE_QUOTED || -            this.returnState === State.ATTRIBUTE_VALUE_SINGLE_QUOTED || -            this.returnState === State.ATTRIBUTE_VALUE_UNQUOTED); -    } -    _flushCodePointConsumedAsCharacterReference(cp) { -        if (this._isCharacterReferenceInAttribute()) { -            this.currentAttr.value += String.fromCodePoint(cp); -        } -        else { -            this._emitCodePoint(cp); -        } -    } -    // Calling states this way turns out to be much faster than any other approach. -    _callState(cp) { -        switch (this.state) { -            case State.DATA: { -                this._stateData(cp); -                break; -            } -            case State.RCDATA: { -                this._stateRcdata(cp); -                break; -            } -            case State.RAWTEXT: { -                this._stateRawtext(cp); -                break; -            } -            case State.SCRIPT_DATA: { -                this._stateScriptData(cp); -                break; -            } -            case State.PLAINTEXT: { -                this._statePlaintext(cp); -                break; -            } -            case State.TAG_OPEN: { -                this._stateTagOpen(cp); -                break; -            } -            case State.END_TAG_OPEN: { -                this._stateEndTagOpen(cp); -                break; -            } -            case State.TAG_NAME: { -                this._stateTagName(cp); -                break; -            } -            case State.RCDATA_LESS_THAN_SIGN: { -                this._stateRcdataLessThanSign(cp); -                break; -            } -            case State.RCDATA_END_TAG_OPEN: { -                this._stateRcdataEndTagOpen(cp); -                break; -            } -            case State.RCDATA_END_TAG_NAME: { -                this._stateRcdataEndTagName(cp); -                break; -            } -            case State.RAWTEXT_LESS_THAN_SIGN: { -                this._stateRawtextLessThanSign(cp); -                break; -            } -            case State.RAWTEXT_END_TAG_OPEN: { -                this._stateRawtextEndTagOpen(cp); -                break; -            } -            case State.RAWTEXT_END_TAG_NAME: { -                this._stateRawtextEndTagName(cp); -                break; -            } -            case State.SCRIPT_DATA_LESS_THAN_SIGN: { -                this._stateScriptDataLessThanSign(cp); -                break; -            } -            case State.SCRIPT_DATA_END_TAG_OPEN: { -                this._stateScriptDataEndTagOpen(cp); -                break; -            } -            case State.SCRIPT_DATA_END_TAG_NAME: { -                this._stateScriptDataEndTagName(cp); -                break; -            } -            case State.SCRIPT_DATA_ESCAPE_START: { -                this._stateScriptDataEscapeStart(cp); -                break; -            } -            case State.SCRIPT_DATA_ESCAPE_START_DASH: { -                this._stateScriptDataEscapeStartDash(cp); -                break; -            } -            case State.SCRIPT_DATA_ESCAPED: { -                this._stateScriptDataEscaped(cp); -                break; -            } -            case State.SCRIPT_DATA_ESCAPED_DASH: { -                this._stateScriptDataEscapedDash(cp); -                break; -            } -            case State.SCRIPT_DATA_ESCAPED_DASH_DASH: { -                this._stateScriptDataEscapedDashDash(cp); -                break; -            } -            case State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN: { -                this._stateScriptDataEscapedLessThanSign(cp); -                break; -            } -            case State.SCRIPT_DATA_ESCAPED_END_TAG_OPEN: { -                this._stateScriptDataEscapedEndTagOpen(cp); -                break; -            } -            case State.SCRIPT_DATA_ESCAPED_END_TAG_NAME: { -                this._stateScriptDataEscapedEndTagName(cp); -                break; -            } -            case State.SCRIPT_DATA_DOUBLE_ESCAPE_START: { -                this._stateScriptDataDoubleEscapeStart(cp); -                break; -            } -            case State.SCRIPT_DATA_DOUBLE_ESCAPED: { -                this._stateScriptDataDoubleEscaped(cp); -                break; -            } -            case State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH: { -                this._stateScriptDataDoubleEscapedDash(cp); -                break; -            } -            case State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH: { -                this._stateScriptDataDoubleEscapedDashDash(cp); -                break; -            } -            case State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN: { -                this._stateScriptDataDoubleEscapedLessThanSign(cp); -                break; -            } -            case State.SCRIPT_DATA_DOUBLE_ESCAPE_END: { -                this._stateScriptDataDoubleEscapeEnd(cp); -                break; -            } -            case State.BEFORE_ATTRIBUTE_NAME: { -                this._stateBeforeAttributeName(cp); -                break; -            } -            case State.ATTRIBUTE_NAME: { -                this._stateAttributeName(cp); -                break; -            } -            case State.AFTER_ATTRIBUTE_NAME: { -                this._stateAfterAttributeName(cp); -                break; -            } -            case State.BEFORE_ATTRIBUTE_VALUE: { -                this._stateBeforeAttributeValue(cp); -                break; -            } -            case State.ATTRIBUTE_VALUE_DOUBLE_QUOTED: { -                this._stateAttributeValueDoubleQuoted(cp); -                break; -            } -            case State.ATTRIBUTE_VALUE_SINGLE_QUOTED: { -                this._stateAttributeValueSingleQuoted(cp); -                break; -            } -            case State.ATTRIBUTE_VALUE_UNQUOTED: { -                this._stateAttributeValueUnquoted(cp); -                break; -            } -            case State.AFTER_ATTRIBUTE_VALUE_QUOTED: { -                this._stateAfterAttributeValueQuoted(cp); -                break; -            } -            case State.SELF_CLOSING_START_TAG: { -                this._stateSelfClosingStartTag(cp); -                break; -            } -            case State.BOGUS_COMMENT: { -                this._stateBogusComment(cp); -                break; -            } -            case State.MARKUP_DECLARATION_OPEN: { -                this._stateMarkupDeclarationOpen(cp); -                break; -            } -            case State.COMMENT_START: { -                this._stateCommentStart(cp); -                break; -            } -            case State.COMMENT_START_DASH: { -                this._stateCommentStartDash(cp); -                break; -            } -            case State.COMMENT: { -                this._stateComment(cp); -                break; -            } -            case State.COMMENT_LESS_THAN_SIGN: { -                this._stateCommentLessThanSign(cp); -                break; -            } -            case State.COMMENT_LESS_THAN_SIGN_BANG: { -                this._stateCommentLessThanSignBang(cp); -                break; -            } -            case State.COMMENT_LESS_THAN_SIGN_BANG_DASH: { -                this._stateCommentLessThanSignBangDash(cp); -                break; -            } -            case State.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH: { -                this._stateCommentLessThanSignBangDashDash(cp); -                break; -            } -            case State.COMMENT_END_DASH: { -                this._stateCommentEndDash(cp); -                break; -            } -            case State.COMMENT_END: { -                this._stateCommentEnd(cp); -                break; -            } -            case State.COMMENT_END_BANG: { -                this._stateCommentEndBang(cp); -                break; -            } -            case State.DOCTYPE: { -                this._stateDoctype(cp); -                break; -            } -            case State.BEFORE_DOCTYPE_NAME: { -                this._stateBeforeDoctypeName(cp); -                break; -            } -            case State.DOCTYPE_NAME: { -                this._stateDoctypeName(cp); -                break; -            } -            case State.AFTER_DOCTYPE_NAME: { -                this._stateAfterDoctypeName(cp); -                break; -            } -            case State.AFTER_DOCTYPE_PUBLIC_KEYWORD: { -                this._stateAfterDoctypePublicKeyword(cp); -                break; -            } -            case State.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER: { -                this._stateBeforeDoctypePublicIdentifier(cp); -                break; -            } -            case State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED: { -                this._stateDoctypePublicIdentifierDoubleQuoted(cp); -                break; -            } -            case State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED: { -                this._stateDoctypePublicIdentifierSingleQuoted(cp); -                break; -            } -            case State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER: { -                this._stateAfterDoctypePublicIdentifier(cp); -                break; -            } -            case State.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS: { -                this._stateBetweenDoctypePublicAndSystemIdentifiers(cp); -                break; -            } -            case State.AFTER_DOCTYPE_SYSTEM_KEYWORD: { -                this._stateAfterDoctypeSystemKeyword(cp); -                break; -            } -            case State.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER: { -                this._stateBeforeDoctypeSystemIdentifier(cp); -                break; -            } -            case State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED: { -                this._stateDoctypeSystemIdentifierDoubleQuoted(cp); -                break; -            } -            case State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED: { -                this._stateDoctypeSystemIdentifierSingleQuoted(cp); -                break; -            } -            case State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER: { -                this._stateAfterDoctypeSystemIdentifier(cp); -                break; -            } -            case State.BOGUS_DOCTYPE: { -                this._stateBogusDoctype(cp); -                break; -            } -            case State.CDATA_SECTION: { -                this._stateCdataSection(cp); -                break; -            } -            case State.CDATA_SECTION_BRACKET: { -                this._stateCdataSectionBracket(cp); -                break; -            } -            case State.CDATA_SECTION_END: { -                this._stateCdataSectionEnd(cp); -                break; -            } -            case State.CHARACTER_REFERENCE: { -                this._stateCharacterReference(cp); -                break; -            } -            case State.NAMED_CHARACTER_REFERENCE: { -                this._stateNamedCharacterReference(cp); -                break; -            } -            case State.AMBIGUOUS_AMPERSAND: { -                this._stateAmbiguousAmpersand(cp); -                break; -            } -            case State.NUMERIC_CHARACTER_REFERENCE: { -                this._stateNumericCharacterReference(cp); -                break; -            } -            case State.HEXADEMICAL_CHARACTER_REFERENCE_START: { -                this._stateHexademicalCharacterReferenceStart(cp); -                break; -            } -            case State.HEXADEMICAL_CHARACTER_REFERENCE: { -                this._stateHexademicalCharacterReference(cp); -                break; -            } -            case State.DECIMAL_CHARACTER_REFERENCE: { -                this._stateDecimalCharacterReference(cp); -                break; -            } -            case State.NUMERIC_CHARACTER_REFERENCE_END: { -                this._stateNumericCharacterReferenceEnd(cp); -                break; -            } -            default: { -                throw new Error('Unknown state'); -            } -        } -    } -    // State machine -    // Data state -    //------------------------------------------------------------------ -    _stateData(cp) { -        switch (cp) { -            case unicode_js_1.CODE_POINTS.LESS_THAN_SIGN: { -                this.state = State.TAG_OPEN; -                break; -            } -            case unicode_js_1.CODE_POINTS.AMPERSAND: { -                this.returnState = State.DATA; -                this.state = State.CHARACTER_REFERENCE; -                break; -            } -            case unicode_js_1.CODE_POINTS.NULL: { -                this._err(error_codes_js_1.ERR.unexpectedNullCharacter); -                this._emitCodePoint(cp); -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._emitEOFToken(); -                break; -            } -            default: { -                this._emitCodePoint(cp); -            } -        } -    } -    //  RCDATA state -    //------------------------------------------------------------------ -    _stateRcdata(cp) { -        switch (cp) { -            case unicode_js_1.CODE_POINTS.AMPERSAND: { -                this.returnState = State.RCDATA; -                this.state = State.CHARACTER_REFERENCE; -                break; -            } -            case unicode_js_1.CODE_POINTS.LESS_THAN_SIGN: { -                this.state = State.RCDATA_LESS_THAN_SIGN; -                break; -            } -            case unicode_js_1.CODE_POINTS.NULL: { -                this._err(error_codes_js_1.ERR.unexpectedNullCharacter); -                this._emitChars(unicode_js_1.REPLACEMENT_CHARACTER); -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._emitEOFToken(); -                break; -            } -            default: { -                this._emitCodePoint(cp); -            } -        } -    } -    // RAWTEXT state -    //------------------------------------------------------------------ -    _stateRawtext(cp) { -        switch (cp) { -            case unicode_js_1.CODE_POINTS.LESS_THAN_SIGN: { -                this.state = State.RAWTEXT_LESS_THAN_SIGN; -                break; -            } -            case unicode_js_1.CODE_POINTS.NULL: { -                this._err(error_codes_js_1.ERR.unexpectedNullCharacter); -                this._emitChars(unicode_js_1.REPLACEMENT_CHARACTER); -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._emitEOFToken(); -                break; -            } -            default: { -                this._emitCodePoint(cp); -            } -        } -    } -    // Script data state -    //------------------------------------------------------------------ -    _stateScriptData(cp) { -        switch (cp) { -            case unicode_js_1.CODE_POINTS.LESS_THAN_SIGN: { -                this.state = State.SCRIPT_DATA_LESS_THAN_SIGN; -                break; -            } -            case unicode_js_1.CODE_POINTS.NULL: { -                this._err(error_codes_js_1.ERR.unexpectedNullCharacter); -                this._emitChars(unicode_js_1.REPLACEMENT_CHARACTER); -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._emitEOFToken(); -                break; -            } -            default: { -                this._emitCodePoint(cp); -            } -        } -    } -    // PLAINTEXT state -    //------------------------------------------------------------------ -    _statePlaintext(cp) { -        switch (cp) { -            case unicode_js_1.CODE_POINTS.NULL: { -                this._err(error_codes_js_1.ERR.unexpectedNullCharacter); -                this._emitChars(unicode_js_1.REPLACEMENT_CHARACTER); -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._emitEOFToken(); -                break; -            } -            default: { -                this._emitCodePoint(cp); -            } -        } -    } -    // Tag open state -    //------------------------------------------------------------------ -    _stateTagOpen(cp) { -        if (isAsciiLetter(cp)) { -            this._createStartTagToken(); -            this.state = State.TAG_NAME; -            this._stateTagName(cp); -        } -        else -            switch (cp) { -                case unicode_js_1.CODE_POINTS.EXCLAMATION_MARK: { -                    this.state = State.MARKUP_DECLARATION_OPEN; -                    break; -                } -                case unicode_js_1.CODE_POINTS.SOLIDUS: { -                    this.state = State.END_TAG_OPEN; -                    break; -                } -                case unicode_js_1.CODE_POINTS.QUESTION_MARK: { -                    this._err(error_codes_js_1.ERR.unexpectedQuestionMarkInsteadOfTagName); -                    this._createCommentToken(1); -                    this.state = State.BOGUS_COMMENT; -                    this._stateBogusComment(cp); -                    break; -                } -                case unicode_js_1.CODE_POINTS.EOF: { -                    this._err(error_codes_js_1.ERR.eofBeforeTagName); -                    this._emitChars('<'); -                    this._emitEOFToken(); -                    break; -                } -                default: { -                    this._err(error_codes_js_1.ERR.invalidFirstCharacterOfTagName); -                    this._emitChars('<'); -                    this.state = State.DATA; -                    this._stateData(cp); -                } -            } -    } -    // End tag open state -    //------------------------------------------------------------------ -    _stateEndTagOpen(cp) { -        if (isAsciiLetter(cp)) { -            this._createEndTagToken(); -            this.state = State.TAG_NAME; -            this._stateTagName(cp); -        } -        else -            switch (cp) { -                case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: { -                    this._err(error_codes_js_1.ERR.missingEndTagName); -                    this.state = State.DATA; -                    break; -                } -                case unicode_js_1.CODE_POINTS.EOF: { -                    this._err(error_codes_js_1.ERR.eofBeforeTagName); -                    this._emitChars('</'); -                    this._emitEOFToken(); -                    break; -                } -                default: { -                    this._err(error_codes_js_1.ERR.invalidFirstCharacterOfTagName); -                    this._createCommentToken(2); -                    this.state = State.BOGUS_COMMENT; -                    this._stateBogusComment(cp); -                } -            } -    } -    // Tag name state -    //------------------------------------------------------------------ -    _stateTagName(cp) { -        const token = this.currentToken; -        switch (cp) { -            case unicode_js_1.CODE_POINTS.SPACE: -            case unicode_js_1.CODE_POINTS.LINE_FEED: -            case unicode_js_1.CODE_POINTS.TABULATION: -            case unicode_js_1.CODE_POINTS.FORM_FEED: { -                this.state = State.BEFORE_ATTRIBUTE_NAME; -                break; -            } -            case unicode_js_1.CODE_POINTS.SOLIDUS: { -                this.state = State.SELF_CLOSING_START_TAG; -                break; -            } -            case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: { -                this.state = State.DATA; -                this.emitCurrentTagToken(); -                break; -            } -            case unicode_js_1.CODE_POINTS.NULL: { -                this._err(error_codes_js_1.ERR.unexpectedNullCharacter); -                token.tagName += unicode_js_1.REPLACEMENT_CHARACTER; -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._err(error_codes_js_1.ERR.eofInTag); -                this._emitEOFToken(); -                break; -            } -            default: { -                token.tagName += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp); -            } -        } -    } -    // RCDATA less-than sign state -    //------------------------------------------------------------------ -    _stateRcdataLessThanSign(cp) { -        if (cp === unicode_js_1.CODE_POINTS.SOLIDUS) { -            this.state = State.RCDATA_END_TAG_OPEN; -        } -        else { -            this._emitChars('<'); -            this.state = State.RCDATA; -            this._stateRcdata(cp); -        } -    } -    // RCDATA end tag open state -    //------------------------------------------------------------------ -    _stateRcdataEndTagOpen(cp) { -        if (isAsciiLetter(cp)) { -            this.state = State.RCDATA_END_TAG_NAME; -            this._stateRcdataEndTagName(cp); -        } -        else { -            this._emitChars('</'); -            this.state = State.RCDATA; -            this._stateRcdata(cp); -        } -    } -    handleSpecialEndTag(_cp) { -        if (!this.preprocessor.startsWith(this.lastStartTagName, false)) { -            return !this._ensureHibernation(); -        } -        this._createEndTagToken(); -        const token = this.currentToken; -        token.tagName = this.lastStartTagName; -        const cp = this.preprocessor.peek(this.lastStartTagName.length); -        switch (cp) { -            case unicode_js_1.CODE_POINTS.SPACE: -            case unicode_js_1.CODE_POINTS.LINE_FEED: -            case unicode_js_1.CODE_POINTS.TABULATION: -            case unicode_js_1.CODE_POINTS.FORM_FEED: { -                this._advanceBy(this.lastStartTagName.length); -                this.state = State.BEFORE_ATTRIBUTE_NAME; -                return false; -            } -            case unicode_js_1.CODE_POINTS.SOLIDUS: { -                this._advanceBy(this.lastStartTagName.length); -                this.state = State.SELF_CLOSING_START_TAG; -                return false; -            } -            case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: { -                this._advanceBy(this.lastStartTagName.length); -                this.emitCurrentTagToken(); -                this.state = State.DATA; -                return false; -            } -            default: { -                return !this._ensureHibernation(); -            } -        } -    } -    // RCDATA end tag name state -    //------------------------------------------------------------------ -    _stateRcdataEndTagName(cp) { -        if (this.handleSpecialEndTag(cp)) { -            this._emitChars('</'); -            this.state = State.RCDATA; -            this._stateRcdata(cp); -        } -    } -    // RAWTEXT less-than sign state -    //------------------------------------------------------------------ -    _stateRawtextLessThanSign(cp) { -        if (cp === unicode_js_1.CODE_POINTS.SOLIDUS) { -            this.state = State.RAWTEXT_END_TAG_OPEN; -        } -        else { -            this._emitChars('<'); -            this.state = State.RAWTEXT; -            this._stateRawtext(cp); -        } -    } -    // RAWTEXT end tag open state -    //------------------------------------------------------------------ -    _stateRawtextEndTagOpen(cp) { -        if (isAsciiLetter(cp)) { -            this.state = State.RAWTEXT_END_TAG_NAME; -            this._stateRawtextEndTagName(cp); -        } -        else { -            this._emitChars('</'); -            this.state = State.RAWTEXT; -            this._stateRawtext(cp); -        } -    } -    // RAWTEXT end tag name state -    //------------------------------------------------------------------ -    _stateRawtextEndTagName(cp) { -        if (this.handleSpecialEndTag(cp)) { -            this._emitChars('</'); -            this.state = State.RAWTEXT; -            this._stateRawtext(cp); -        } -    } -    // Script data less-than sign state -    //------------------------------------------------------------------ -    _stateScriptDataLessThanSign(cp) { -        switch (cp) { -            case unicode_js_1.CODE_POINTS.SOLIDUS: { -                this.state = State.SCRIPT_DATA_END_TAG_OPEN; -                break; -            } -            case unicode_js_1.CODE_POINTS.EXCLAMATION_MARK: { -                this.state = State.SCRIPT_DATA_ESCAPE_START; -                this._emitChars('<!'); -                break; -            } -            default: { -                this._emitChars('<'); -                this.state = State.SCRIPT_DATA; -                this._stateScriptData(cp); -            } -        } -    } -    // Script data end tag open state -    //------------------------------------------------------------------ -    _stateScriptDataEndTagOpen(cp) { -        if (isAsciiLetter(cp)) { -            this.state = State.SCRIPT_DATA_END_TAG_NAME; -            this._stateScriptDataEndTagName(cp); -        } -        else { -            this._emitChars('</'); -            this.state = State.SCRIPT_DATA; -            this._stateScriptData(cp); -        } -    } -    // Script data end tag name state -    //------------------------------------------------------------------ -    _stateScriptDataEndTagName(cp) { -        if (this.handleSpecialEndTag(cp)) { -            this._emitChars('</'); -            this.state = State.SCRIPT_DATA; -            this._stateScriptData(cp); -        } -    } -    // Script data escape start state -    //------------------------------------------------------------------ -    _stateScriptDataEscapeStart(cp) { -        if (cp === unicode_js_1.CODE_POINTS.HYPHEN_MINUS) { -            this.state = State.SCRIPT_DATA_ESCAPE_START_DASH; -            this._emitChars('-'); -        } -        else { -            this.state = State.SCRIPT_DATA; -            this._stateScriptData(cp); -        } -    } -    // Script data escape start dash state -    //------------------------------------------------------------------ -    _stateScriptDataEscapeStartDash(cp) { -        if (cp === unicode_js_1.CODE_POINTS.HYPHEN_MINUS) { -            this.state = State.SCRIPT_DATA_ESCAPED_DASH_DASH; -            this._emitChars('-'); -        } -        else { -            this.state = State.SCRIPT_DATA; -            this._stateScriptData(cp); -        } -    } -    // Script data escaped state -    //------------------------------------------------------------------ -    _stateScriptDataEscaped(cp) { -        switch (cp) { -            case unicode_js_1.CODE_POINTS.HYPHEN_MINUS: { -                this.state = State.SCRIPT_DATA_ESCAPED_DASH; -                this._emitChars('-'); -                break; -            } -            case unicode_js_1.CODE_POINTS.LESS_THAN_SIGN: { -                this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN; -                break; -            } -            case unicode_js_1.CODE_POINTS.NULL: { -                this._err(error_codes_js_1.ERR.unexpectedNullCharacter); -                this._emitChars(unicode_js_1.REPLACEMENT_CHARACTER); -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._err(error_codes_js_1.ERR.eofInScriptHtmlCommentLikeText); -                this._emitEOFToken(); -                break; -            } -            default: { -                this._emitCodePoint(cp); -            } -        } -    } -    // Script data escaped dash state -    //------------------------------------------------------------------ -    _stateScriptDataEscapedDash(cp) { -        switch (cp) { -            case unicode_js_1.CODE_POINTS.HYPHEN_MINUS: { -                this.state = State.SCRIPT_DATA_ESCAPED_DASH_DASH; -                this._emitChars('-'); -                break; -            } -            case unicode_js_1.CODE_POINTS.LESS_THAN_SIGN: { -                this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN; -                break; -            } -            case unicode_js_1.CODE_POINTS.NULL: { -                this._err(error_codes_js_1.ERR.unexpectedNullCharacter); -                this.state = State.SCRIPT_DATA_ESCAPED; -                this._emitChars(unicode_js_1.REPLACEMENT_CHARACTER); -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._err(error_codes_js_1.ERR.eofInScriptHtmlCommentLikeText); -                this._emitEOFToken(); -                break; -            } -            default: { -                this.state = State.SCRIPT_DATA_ESCAPED; -                this._emitCodePoint(cp); -            } -        } -    } -    // Script data escaped dash dash state -    //------------------------------------------------------------------ -    _stateScriptDataEscapedDashDash(cp) { -        switch (cp) { -            case unicode_js_1.CODE_POINTS.HYPHEN_MINUS: { -                this._emitChars('-'); -                break; -            } -            case unicode_js_1.CODE_POINTS.LESS_THAN_SIGN: { -                this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN; -                break; -            } -            case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: { -                this.state = State.SCRIPT_DATA; -                this._emitChars('>'); -                break; -            } -            case unicode_js_1.CODE_POINTS.NULL: { -                this._err(error_codes_js_1.ERR.unexpectedNullCharacter); -                this.state = State.SCRIPT_DATA_ESCAPED; -                this._emitChars(unicode_js_1.REPLACEMENT_CHARACTER); -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._err(error_codes_js_1.ERR.eofInScriptHtmlCommentLikeText); -                this._emitEOFToken(); -                break; -            } -            default: { -                this.state = State.SCRIPT_DATA_ESCAPED; -                this._emitCodePoint(cp); -            } -        } -    } -    // Script data escaped less-than sign state -    //------------------------------------------------------------------ -    _stateScriptDataEscapedLessThanSign(cp) { -        if (cp === unicode_js_1.CODE_POINTS.SOLIDUS) { -            this.state = State.SCRIPT_DATA_ESCAPED_END_TAG_OPEN; -        } -        else if (isAsciiLetter(cp)) { -            this._emitChars('<'); -            this.state = State.SCRIPT_DATA_DOUBLE_ESCAPE_START; -            this._stateScriptDataDoubleEscapeStart(cp); -        } -        else { -            this._emitChars('<'); -            this.state = State.SCRIPT_DATA_ESCAPED; -            this._stateScriptDataEscaped(cp); -        } -    } -    // Script data escaped end tag open state -    //------------------------------------------------------------------ -    _stateScriptDataEscapedEndTagOpen(cp) { -        if (isAsciiLetter(cp)) { -            this.state = State.SCRIPT_DATA_ESCAPED_END_TAG_NAME; -            this._stateScriptDataEscapedEndTagName(cp); -        } -        else { -            this._emitChars('</'); -            this.state = State.SCRIPT_DATA_ESCAPED; -            this._stateScriptDataEscaped(cp); -        } -    } -    // Script data escaped end tag name state -    //------------------------------------------------------------------ -    _stateScriptDataEscapedEndTagName(cp) { -        if (this.handleSpecialEndTag(cp)) { -            this._emitChars('</'); -            this.state = State.SCRIPT_DATA_ESCAPED; -            this._stateScriptDataEscaped(cp); -        } -    } -    // Script data double escape start state -    //------------------------------------------------------------------ -    _stateScriptDataDoubleEscapeStart(cp) { -        if (this.preprocessor.startsWith(unicode_js_1.SEQUENCES.SCRIPT, false) && -            isScriptDataDoubleEscapeSequenceEnd(this.preprocessor.peek(unicode_js_1.SEQUENCES.SCRIPT.length))) { -            this._emitCodePoint(cp); -            for (let i = 0; i < unicode_js_1.SEQUENCES.SCRIPT.length; i++) { -                this._emitCodePoint(this._consume()); -            } -            this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED; -        } -        else if (!this._ensureHibernation()) { -            this.state = State.SCRIPT_DATA_ESCAPED; -            this._stateScriptDataEscaped(cp); -        } -    } -    // Script data double escaped state -    //------------------------------------------------------------------ -    _stateScriptDataDoubleEscaped(cp) { -        switch (cp) { -            case unicode_js_1.CODE_POINTS.HYPHEN_MINUS: { -                this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH; -                this._emitChars('-'); -                break; -            } -            case unicode_js_1.CODE_POINTS.LESS_THAN_SIGN: { -                this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN; -                this._emitChars('<'); -                break; -            } -            case unicode_js_1.CODE_POINTS.NULL: { -                this._err(error_codes_js_1.ERR.unexpectedNullCharacter); -                this._emitChars(unicode_js_1.REPLACEMENT_CHARACTER); -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._err(error_codes_js_1.ERR.eofInScriptHtmlCommentLikeText); -                this._emitEOFToken(); -                break; -            } -            default: { -                this._emitCodePoint(cp); -            } -        } -    } -    // Script data double escaped dash state -    //------------------------------------------------------------------ -    _stateScriptDataDoubleEscapedDash(cp) { -        switch (cp) { -            case unicode_js_1.CODE_POINTS.HYPHEN_MINUS: { -                this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH; -                this._emitChars('-'); -                break; -            } -            case unicode_js_1.CODE_POINTS.LESS_THAN_SIGN: { -                this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN; -                this._emitChars('<'); -                break; -            } -            case unicode_js_1.CODE_POINTS.NULL: { -                this._err(error_codes_js_1.ERR.unexpectedNullCharacter); -                this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED; -                this._emitChars(unicode_js_1.REPLACEMENT_CHARACTER); -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._err(error_codes_js_1.ERR.eofInScriptHtmlCommentLikeText); -                this._emitEOFToken(); -                break; -            } -            default: { -                this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED; -                this._emitCodePoint(cp); -            } -        } -    } -    // Script data double escaped dash dash state -    //------------------------------------------------------------------ -    _stateScriptDataDoubleEscapedDashDash(cp) { -        switch (cp) { -            case unicode_js_1.CODE_POINTS.HYPHEN_MINUS: { -                this._emitChars('-'); -                break; -            } -            case unicode_js_1.CODE_POINTS.LESS_THAN_SIGN: { -                this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN; -                this._emitChars('<'); -                break; -            } -            case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: { -                this.state = State.SCRIPT_DATA; -                this._emitChars('>'); -                break; -            } -            case unicode_js_1.CODE_POINTS.NULL: { -                this._err(error_codes_js_1.ERR.unexpectedNullCharacter); -                this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED; -                this._emitChars(unicode_js_1.REPLACEMENT_CHARACTER); -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._err(error_codes_js_1.ERR.eofInScriptHtmlCommentLikeText); -                this._emitEOFToken(); -                break; -            } -            default: { -                this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED; -                this._emitCodePoint(cp); -            } -        } -    } -    // Script data double escaped less-than sign state -    //------------------------------------------------------------------ -    _stateScriptDataDoubleEscapedLessThanSign(cp) { -        if (cp === unicode_js_1.CODE_POINTS.SOLIDUS) { -            this.state = State.SCRIPT_DATA_DOUBLE_ESCAPE_END; -            this._emitChars('/'); -        } -        else { -            this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED; -            this._stateScriptDataDoubleEscaped(cp); -        } -    } -    // Script data double escape end state -    //------------------------------------------------------------------ -    _stateScriptDataDoubleEscapeEnd(cp) { -        if (this.preprocessor.startsWith(unicode_js_1.SEQUENCES.SCRIPT, false) && -            isScriptDataDoubleEscapeSequenceEnd(this.preprocessor.peek(unicode_js_1.SEQUENCES.SCRIPT.length))) { -            this._emitCodePoint(cp); -            for (let i = 0; i < unicode_js_1.SEQUENCES.SCRIPT.length; i++) { -                this._emitCodePoint(this._consume()); -            } -            this.state = State.SCRIPT_DATA_ESCAPED; -        } -        else if (!this._ensureHibernation()) { -            this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED; -            this._stateScriptDataDoubleEscaped(cp); -        } -    } -    // Before attribute name state -    //------------------------------------------------------------------ -    _stateBeforeAttributeName(cp) { -        switch (cp) { -            case unicode_js_1.CODE_POINTS.SPACE: -            case unicode_js_1.CODE_POINTS.LINE_FEED: -            case unicode_js_1.CODE_POINTS.TABULATION: -            case unicode_js_1.CODE_POINTS.FORM_FEED: { -                // Ignore whitespace -                break; -            } -            case unicode_js_1.CODE_POINTS.SOLIDUS: -            case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: -            case unicode_js_1.CODE_POINTS.EOF: { -                this.state = State.AFTER_ATTRIBUTE_NAME; -                this._stateAfterAttributeName(cp); -                break; -            } -            case unicode_js_1.CODE_POINTS.EQUALS_SIGN: { -                this._err(error_codes_js_1.ERR.unexpectedEqualsSignBeforeAttributeName); -                this._createAttr('='); -                this.state = State.ATTRIBUTE_NAME; -                break; -            } -            default: { -                this._createAttr(''); -                this.state = State.ATTRIBUTE_NAME; -                this._stateAttributeName(cp); -            } -        } -    } -    // Attribute name state -    //------------------------------------------------------------------ -    _stateAttributeName(cp) { -        switch (cp) { -            case unicode_js_1.CODE_POINTS.SPACE: -            case unicode_js_1.CODE_POINTS.LINE_FEED: -            case unicode_js_1.CODE_POINTS.TABULATION: -            case unicode_js_1.CODE_POINTS.FORM_FEED: -            case unicode_js_1.CODE_POINTS.SOLIDUS: -            case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: -            case unicode_js_1.CODE_POINTS.EOF: { -                this._leaveAttrName(); -                this.state = State.AFTER_ATTRIBUTE_NAME; -                this._stateAfterAttributeName(cp); -                break; -            } -            case unicode_js_1.CODE_POINTS.EQUALS_SIGN: { -                this._leaveAttrName(); -                this.state = State.BEFORE_ATTRIBUTE_VALUE; -                break; -            } -            case unicode_js_1.CODE_POINTS.QUOTATION_MARK: -            case unicode_js_1.CODE_POINTS.APOSTROPHE: -            case unicode_js_1.CODE_POINTS.LESS_THAN_SIGN: { -                this._err(error_codes_js_1.ERR.unexpectedCharacterInAttributeName); -                this.currentAttr.name += String.fromCodePoint(cp); -                break; -            } -            case unicode_js_1.CODE_POINTS.NULL: { -                this._err(error_codes_js_1.ERR.unexpectedNullCharacter); -                this.currentAttr.name += unicode_js_1.REPLACEMENT_CHARACTER; -                break; -            } -            default: { -                this.currentAttr.name += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp); -            } -        } -    } -    // After attribute name state -    //------------------------------------------------------------------ -    _stateAfterAttributeName(cp) { -        switch (cp) { -            case unicode_js_1.CODE_POINTS.SPACE: -            case unicode_js_1.CODE_POINTS.LINE_FEED: -            case unicode_js_1.CODE_POINTS.TABULATION: -            case unicode_js_1.CODE_POINTS.FORM_FEED: { -                // Ignore whitespace -                break; -            } -            case unicode_js_1.CODE_POINTS.SOLIDUS: { -                this.state = State.SELF_CLOSING_START_TAG; -                break; -            } -            case unicode_js_1.CODE_POINTS.EQUALS_SIGN: { -                this.state = State.BEFORE_ATTRIBUTE_VALUE; -                break; -            } -            case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: { -                this.state = State.DATA; -                this.emitCurrentTagToken(); -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._err(error_codes_js_1.ERR.eofInTag); -                this._emitEOFToken(); -                break; -            } -            default: { -                this._createAttr(''); -                this.state = State.ATTRIBUTE_NAME; -                this._stateAttributeName(cp); -            } -        } -    } -    // Before attribute value state -    //------------------------------------------------------------------ -    _stateBeforeAttributeValue(cp) { -        switch (cp) { -            case unicode_js_1.CODE_POINTS.SPACE: -            case unicode_js_1.CODE_POINTS.LINE_FEED: -            case unicode_js_1.CODE_POINTS.TABULATION: -            case unicode_js_1.CODE_POINTS.FORM_FEED: { -                // Ignore whitespace -                break; -            } -            case unicode_js_1.CODE_POINTS.QUOTATION_MARK: { -                this.state = State.ATTRIBUTE_VALUE_DOUBLE_QUOTED; -                break; -            } -            case unicode_js_1.CODE_POINTS.APOSTROPHE: { -                this.state = State.ATTRIBUTE_VALUE_SINGLE_QUOTED; -                break; -            } -            case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: { -                this._err(error_codes_js_1.ERR.missingAttributeValue); -                this.state = State.DATA; -                this.emitCurrentTagToken(); -                break; -            } -            default: { -                this.state = State.ATTRIBUTE_VALUE_UNQUOTED; -                this._stateAttributeValueUnquoted(cp); -            } -        } -    } -    // Attribute value (double-quoted) state -    //------------------------------------------------------------------ -    _stateAttributeValueDoubleQuoted(cp) { -        switch (cp) { -            case unicode_js_1.CODE_POINTS.QUOTATION_MARK: { -                this.state = State.AFTER_ATTRIBUTE_VALUE_QUOTED; -                break; -            } -            case unicode_js_1.CODE_POINTS.AMPERSAND: { -                this.returnState = State.ATTRIBUTE_VALUE_DOUBLE_QUOTED; -                this.state = State.CHARACTER_REFERENCE; -                break; -            } -            case unicode_js_1.CODE_POINTS.NULL: { -                this._err(error_codes_js_1.ERR.unexpectedNullCharacter); -                this.currentAttr.value += unicode_js_1.REPLACEMENT_CHARACTER; -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._err(error_codes_js_1.ERR.eofInTag); -                this._emitEOFToken(); -                break; -            } -            default: { -                this.currentAttr.value += String.fromCodePoint(cp); -            } -        } -    } -    // Attribute value (single-quoted) state -    //------------------------------------------------------------------ -    _stateAttributeValueSingleQuoted(cp) { -        switch (cp) { -            case unicode_js_1.CODE_POINTS.APOSTROPHE: { -                this.state = State.AFTER_ATTRIBUTE_VALUE_QUOTED; -                break; -            } -            case unicode_js_1.CODE_POINTS.AMPERSAND: { -                this.returnState = State.ATTRIBUTE_VALUE_SINGLE_QUOTED; -                this.state = State.CHARACTER_REFERENCE; -                break; -            } -            case unicode_js_1.CODE_POINTS.NULL: { -                this._err(error_codes_js_1.ERR.unexpectedNullCharacter); -                this.currentAttr.value += unicode_js_1.REPLACEMENT_CHARACTER; -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._err(error_codes_js_1.ERR.eofInTag); -                this._emitEOFToken(); -                break; -            } -            default: { -                this.currentAttr.value += String.fromCodePoint(cp); -            } -        } -    } -    // Attribute value (unquoted) state -    //------------------------------------------------------------------ -    _stateAttributeValueUnquoted(cp) { -        switch (cp) { -            case unicode_js_1.CODE_POINTS.SPACE: -            case unicode_js_1.CODE_POINTS.LINE_FEED: -            case unicode_js_1.CODE_POINTS.TABULATION: -            case unicode_js_1.CODE_POINTS.FORM_FEED: { -                this._leaveAttrValue(); -                this.state = State.BEFORE_ATTRIBUTE_NAME; -                break; -            } -            case unicode_js_1.CODE_POINTS.AMPERSAND: { -                this.returnState = State.ATTRIBUTE_VALUE_UNQUOTED; -                this.state = State.CHARACTER_REFERENCE; -                break; -            } -            case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: { -                this._leaveAttrValue(); -                this.state = State.DATA; -                this.emitCurrentTagToken(); -                break; -            } -            case unicode_js_1.CODE_POINTS.NULL: { -                this._err(error_codes_js_1.ERR.unexpectedNullCharacter); -                this.currentAttr.value += unicode_js_1.REPLACEMENT_CHARACTER; -                break; -            } -            case unicode_js_1.CODE_POINTS.QUOTATION_MARK: -            case unicode_js_1.CODE_POINTS.APOSTROPHE: -            case unicode_js_1.CODE_POINTS.LESS_THAN_SIGN: -            case unicode_js_1.CODE_POINTS.EQUALS_SIGN: -            case unicode_js_1.CODE_POINTS.GRAVE_ACCENT: { -                this._err(error_codes_js_1.ERR.unexpectedCharacterInUnquotedAttributeValue); -                this.currentAttr.value += String.fromCodePoint(cp); -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._err(error_codes_js_1.ERR.eofInTag); -                this._emitEOFToken(); -                break; -            } -            default: { -                this.currentAttr.value += String.fromCodePoint(cp); -            } -        } -    } -    // After attribute value (quoted) state -    //------------------------------------------------------------------ -    _stateAfterAttributeValueQuoted(cp) { -        switch (cp) { -            case unicode_js_1.CODE_POINTS.SPACE: -            case unicode_js_1.CODE_POINTS.LINE_FEED: -            case unicode_js_1.CODE_POINTS.TABULATION: -            case unicode_js_1.CODE_POINTS.FORM_FEED: { -                this._leaveAttrValue(); -                this.state = State.BEFORE_ATTRIBUTE_NAME; -                break; -            } -            case unicode_js_1.CODE_POINTS.SOLIDUS: { -                this._leaveAttrValue(); -                this.state = State.SELF_CLOSING_START_TAG; -                break; -            } -            case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: { -                this._leaveAttrValue(); -                this.state = State.DATA; -                this.emitCurrentTagToken(); -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._err(error_codes_js_1.ERR.eofInTag); -                this._emitEOFToken(); -                break; -            } -            default: { -                this._err(error_codes_js_1.ERR.missingWhitespaceBetweenAttributes); -                this.state = State.BEFORE_ATTRIBUTE_NAME; -                this._stateBeforeAttributeName(cp); -            } -        } -    } -    // Self-closing start tag state -    //------------------------------------------------------------------ -    _stateSelfClosingStartTag(cp) { -        switch (cp) { -            case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: { -                const token = this.currentToken; -                token.selfClosing = true; -                this.state = State.DATA; -                this.emitCurrentTagToken(); -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._err(error_codes_js_1.ERR.eofInTag); -                this._emitEOFToken(); -                break; -            } -            default: { -                this._err(error_codes_js_1.ERR.unexpectedSolidusInTag); -                this.state = State.BEFORE_ATTRIBUTE_NAME; -                this._stateBeforeAttributeName(cp); -            } -        } -    } -    // Bogus comment state -    //------------------------------------------------------------------ -    _stateBogusComment(cp) { -        const token = this.currentToken; -        switch (cp) { -            case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: { -                this.state = State.DATA; -                this.emitCurrentComment(token); -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this.emitCurrentComment(token); -                this._emitEOFToken(); -                break; -            } -            case unicode_js_1.CODE_POINTS.NULL: { -                this._err(error_codes_js_1.ERR.unexpectedNullCharacter); -                token.data += unicode_js_1.REPLACEMENT_CHARACTER; -                break; -            } -            default: { -                token.data += String.fromCodePoint(cp); -            } -        } -    } -    // Markup declaration open state -    //------------------------------------------------------------------ -    _stateMarkupDeclarationOpen(cp) { -        if (this._consumeSequenceIfMatch(unicode_js_1.SEQUENCES.DASH_DASH, true)) { -            this._createCommentToken(unicode_js_1.SEQUENCES.DASH_DASH.length + 1); -            this.state = State.COMMENT_START; -        } -        else if (this._consumeSequenceIfMatch(unicode_js_1.SEQUENCES.DOCTYPE, false)) { -            // NOTE: Doctypes tokens are created without fixed offsets. We keep track of the moment a doctype *might* start here. -            this.currentLocation = this.getCurrentLocation(unicode_js_1.SEQUENCES.DOCTYPE.length + 1); -            this.state = State.DOCTYPE; -        } -        else if (this._consumeSequenceIfMatch(unicode_js_1.SEQUENCES.CDATA_START, true)) { -            if (this.inForeignNode) { -                this.state = State.CDATA_SECTION; -            } -            else { -                this._err(error_codes_js_1.ERR.cdataInHtmlContent); -                this._createCommentToken(unicode_js_1.SEQUENCES.CDATA_START.length + 1); -                this.currentToken.data = '[CDATA['; -                this.state = State.BOGUS_COMMENT; -            } -        } -        //NOTE: Sequence lookups can be abrupted by hibernation. In that case, lookup -        //results are no longer valid and we will need to start over. -        else if (!this._ensureHibernation()) { -            this._err(error_codes_js_1.ERR.incorrectlyOpenedComment); -            this._createCommentToken(2); -            this.state = State.BOGUS_COMMENT; -            this._stateBogusComment(cp); -        } -    } -    // Comment start state -    //------------------------------------------------------------------ -    _stateCommentStart(cp) { -        switch (cp) { -            case unicode_js_1.CODE_POINTS.HYPHEN_MINUS: { -                this.state = State.COMMENT_START_DASH; -                break; -            } -            case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: { -                this._err(error_codes_js_1.ERR.abruptClosingOfEmptyComment); -                this.state = State.DATA; -                const token = this.currentToken; -                this.emitCurrentComment(token); -                break; -            } -            default: { -                this.state = State.COMMENT; -                this._stateComment(cp); -            } -        } -    } -    // Comment start dash state -    //------------------------------------------------------------------ -    _stateCommentStartDash(cp) { -        const token = this.currentToken; -        switch (cp) { -            case unicode_js_1.CODE_POINTS.HYPHEN_MINUS: { -                this.state = State.COMMENT_END; -                break; -            } -            case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: { -                this._err(error_codes_js_1.ERR.abruptClosingOfEmptyComment); -                this.state = State.DATA; -                this.emitCurrentComment(token); -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._err(error_codes_js_1.ERR.eofInComment); -                this.emitCurrentComment(token); -                this._emitEOFToken(); -                break; -            } -            default: { -                token.data += '-'; -                this.state = State.COMMENT; -                this._stateComment(cp); -            } -        } -    } -    // Comment state -    //------------------------------------------------------------------ -    _stateComment(cp) { -        const token = this.currentToken; -        switch (cp) { -            case unicode_js_1.CODE_POINTS.HYPHEN_MINUS: { -                this.state = State.COMMENT_END_DASH; -                break; -            } -            case unicode_js_1.CODE_POINTS.LESS_THAN_SIGN: { -                token.data += '<'; -                this.state = State.COMMENT_LESS_THAN_SIGN; -                break; -            } -            case unicode_js_1.CODE_POINTS.NULL: { -                this._err(error_codes_js_1.ERR.unexpectedNullCharacter); -                token.data += unicode_js_1.REPLACEMENT_CHARACTER; -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._err(error_codes_js_1.ERR.eofInComment); -                this.emitCurrentComment(token); -                this._emitEOFToken(); -                break; -            } -            default: { -                token.data += String.fromCodePoint(cp); -            } -        } -    } -    // Comment less-than sign state -    //------------------------------------------------------------------ -    _stateCommentLessThanSign(cp) { -        const token = this.currentToken; -        switch (cp) { -            case unicode_js_1.CODE_POINTS.EXCLAMATION_MARK: { -                token.data += '!'; -                this.state = State.COMMENT_LESS_THAN_SIGN_BANG; -                break; -            } -            case unicode_js_1.CODE_POINTS.LESS_THAN_SIGN: { -                token.data += '<'; -                break; -            } -            default: { -                this.state = State.COMMENT; -                this._stateComment(cp); -            } -        } -    } -    // Comment less-than sign bang state -    //------------------------------------------------------------------ -    _stateCommentLessThanSignBang(cp) { -        if (cp === unicode_js_1.CODE_POINTS.HYPHEN_MINUS) { -            this.state = State.COMMENT_LESS_THAN_SIGN_BANG_DASH; -        } -        else { -            this.state = State.COMMENT; -            this._stateComment(cp); -        } -    } -    // Comment less-than sign bang dash state -    //------------------------------------------------------------------ -    _stateCommentLessThanSignBangDash(cp) { -        if (cp === unicode_js_1.CODE_POINTS.HYPHEN_MINUS) { -            this.state = State.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH; -        } -        else { -            this.state = State.COMMENT_END_DASH; -            this._stateCommentEndDash(cp); -        } -    } -    // Comment less-than sign bang dash dash state -    //------------------------------------------------------------------ -    _stateCommentLessThanSignBangDashDash(cp) { -        if (cp !== unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN && cp !== unicode_js_1.CODE_POINTS.EOF) { -            this._err(error_codes_js_1.ERR.nestedComment); -        } -        this.state = State.COMMENT_END; -        this._stateCommentEnd(cp); -    } -    // Comment end dash state -    //------------------------------------------------------------------ -    _stateCommentEndDash(cp) { -        const token = this.currentToken; -        switch (cp) { -            case unicode_js_1.CODE_POINTS.HYPHEN_MINUS: { -                this.state = State.COMMENT_END; -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._err(error_codes_js_1.ERR.eofInComment); -                this.emitCurrentComment(token); -                this._emitEOFToken(); -                break; -            } -            default: { -                token.data += '-'; -                this.state = State.COMMENT; -                this._stateComment(cp); -            } -        } -    } -    // Comment end state -    //------------------------------------------------------------------ -    _stateCommentEnd(cp) { -        const token = this.currentToken; -        switch (cp) { -            case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: { -                this.state = State.DATA; -                this.emitCurrentComment(token); -                break; -            } -            case unicode_js_1.CODE_POINTS.EXCLAMATION_MARK: { -                this.state = State.COMMENT_END_BANG; -                break; -            } -            case unicode_js_1.CODE_POINTS.HYPHEN_MINUS: { -                token.data += '-'; -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._err(error_codes_js_1.ERR.eofInComment); -                this.emitCurrentComment(token); -                this._emitEOFToken(); -                break; -            } -            default: { -                token.data += '--'; -                this.state = State.COMMENT; -                this._stateComment(cp); -            } -        } -    } -    // Comment end bang state -    //------------------------------------------------------------------ -    _stateCommentEndBang(cp) { -        const token = this.currentToken; -        switch (cp) { -            case unicode_js_1.CODE_POINTS.HYPHEN_MINUS: { -                token.data += '--!'; -                this.state = State.COMMENT_END_DASH; -                break; -            } -            case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: { -                this._err(error_codes_js_1.ERR.incorrectlyClosedComment); -                this.state = State.DATA; -                this.emitCurrentComment(token); -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._err(error_codes_js_1.ERR.eofInComment); -                this.emitCurrentComment(token); -                this._emitEOFToken(); -                break; -            } -            default: { -                token.data += '--!'; -                this.state = State.COMMENT; -                this._stateComment(cp); -            } -        } -    } -    // DOCTYPE state -    //------------------------------------------------------------------ -    _stateDoctype(cp) { -        switch (cp) { -            case unicode_js_1.CODE_POINTS.SPACE: -            case unicode_js_1.CODE_POINTS.LINE_FEED: -            case unicode_js_1.CODE_POINTS.TABULATION: -            case unicode_js_1.CODE_POINTS.FORM_FEED: { -                this.state = State.BEFORE_DOCTYPE_NAME; -                break; -            } -            case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: { -                this.state = State.BEFORE_DOCTYPE_NAME; -                this._stateBeforeDoctypeName(cp); -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._err(error_codes_js_1.ERR.eofInDoctype); -                this._createDoctypeToken(null); -                const token = this.currentToken; -                token.forceQuirks = true; -                this.emitCurrentDoctype(token); -                this._emitEOFToken(); -                break; -            } -            default: { -                this._err(error_codes_js_1.ERR.missingWhitespaceBeforeDoctypeName); -                this.state = State.BEFORE_DOCTYPE_NAME; -                this._stateBeforeDoctypeName(cp); -            } -        } -    } -    // Before DOCTYPE name state -    //------------------------------------------------------------------ -    _stateBeforeDoctypeName(cp) { -        if (isAsciiUpper(cp)) { -            this._createDoctypeToken(String.fromCharCode(toAsciiLower(cp))); -            this.state = State.DOCTYPE_NAME; -        } -        else -            switch (cp) { -                case unicode_js_1.CODE_POINTS.SPACE: -                case unicode_js_1.CODE_POINTS.LINE_FEED: -                case unicode_js_1.CODE_POINTS.TABULATION: -                case unicode_js_1.CODE_POINTS.FORM_FEED: { -                    // Ignore whitespace -                    break; -                } -                case unicode_js_1.CODE_POINTS.NULL: { -                    this._err(error_codes_js_1.ERR.unexpectedNullCharacter); -                    this._createDoctypeToken(unicode_js_1.REPLACEMENT_CHARACTER); -                    this.state = State.DOCTYPE_NAME; -                    break; -                } -                case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: { -                    this._err(error_codes_js_1.ERR.missingDoctypeName); -                    this._createDoctypeToken(null); -                    const token = this.currentToken; -                    token.forceQuirks = true; -                    this.emitCurrentDoctype(token); -                    this.state = State.DATA; -                    break; -                } -                case unicode_js_1.CODE_POINTS.EOF: { -                    this._err(error_codes_js_1.ERR.eofInDoctype); -                    this._createDoctypeToken(null); -                    const token = this.currentToken; -                    token.forceQuirks = true; -                    this.emitCurrentDoctype(token); -                    this._emitEOFToken(); -                    break; -                } -                default: { -                    this._createDoctypeToken(String.fromCodePoint(cp)); -                    this.state = State.DOCTYPE_NAME; -                } -            } -    } -    // DOCTYPE name state -    //------------------------------------------------------------------ -    _stateDoctypeName(cp) { -        const token = this.currentToken; -        switch (cp) { -            case unicode_js_1.CODE_POINTS.SPACE: -            case unicode_js_1.CODE_POINTS.LINE_FEED: -            case unicode_js_1.CODE_POINTS.TABULATION: -            case unicode_js_1.CODE_POINTS.FORM_FEED: { -                this.state = State.AFTER_DOCTYPE_NAME; -                break; -            } -            case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: { -                this.state = State.DATA; -                this.emitCurrentDoctype(token); -                break; -            } -            case unicode_js_1.CODE_POINTS.NULL: { -                this._err(error_codes_js_1.ERR.unexpectedNullCharacter); -                token.name += unicode_js_1.REPLACEMENT_CHARACTER; -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._err(error_codes_js_1.ERR.eofInDoctype); -                token.forceQuirks = true; -                this.emitCurrentDoctype(token); -                this._emitEOFToken(); -                break; -            } -            default: { -                token.name += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp); -            } -        } -    } -    // After DOCTYPE name state -    //------------------------------------------------------------------ -    _stateAfterDoctypeName(cp) { -        const token = this.currentToken; -        switch (cp) { -            case unicode_js_1.CODE_POINTS.SPACE: -            case unicode_js_1.CODE_POINTS.LINE_FEED: -            case unicode_js_1.CODE_POINTS.TABULATION: -            case unicode_js_1.CODE_POINTS.FORM_FEED: { -                // Ignore whitespace -                break; -            } -            case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: { -                this.state = State.DATA; -                this.emitCurrentDoctype(token); -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._err(error_codes_js_1.ERR.eofInDoctype); -                token.forceQuirks = true; -                this.emitCurrentDoctype(token); -                this._emitEOFToken(); -                break; -            } -            default: { -                if (this._consumeSequenceIfMatch(unicode_js_1.SEQUENCES.PUBLIC, false)) { -                    this.state = State.AFTER_DOCTYPE_PUBLIC_KEYWORD; -                } -                else if (this._consumeSequenceIfMatch(unicode_js_1.SEQUENCES.SYSTEM, false)) { -                    this.state = State.AFTER_DOCTYPE_SYSTEM_KEYWORD; -                } -                //NOTE: sequence lookup can be abrupted by hibernation. In that case lookup -                //results are no longer valid and we will need to start over. -                else if (!this._ensureHibernation()) { -                    this._err(error_codes_js_1.ERR.invalidCharacterSequenceAfterDoctypeName); -                    token.forceQuirks = true; -                    this.state = State.BOGUS_DOCTYPE; -                    this._stateBogusDoctype(cp); -                } -            } -        } -    } -    // After DOCTYPE public keyword state -    //------------------------------------------------------------------ -    _stateAfterDoctypePublicKeyword(cp) { -        const token = this.currentToken; -        switch (cp) { -            case unicode_js_1.CODE_POINTS.SPACE: -            case unicode_js_1.CODE_POINTS.LINE_FEED: -            case unicode_js_1.CODE_POINTS.TABULATION: -            case unicode_js_1.CODE_POINTS.FORM_FEED: { -                this.state = State.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER; -                break; -            } -            case unicode_js_1.CODE_POINTS.QUOTATION_MARK: { -                this._err(error_codes_js_1.ERR.missingWhitespaceAfterDoctypePublicKeyword); -                token.publicId = ''; -                this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED; -                break; -            } -            case unicode_js_1.CODE_POINTS.APOSTROPHE: { -                this._err(error_codes_js_1.ERR.missingWhitespaceAfterDoctypePublicKeyword); -                token.publicId = ''; -                this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED; -                break; -            } -            case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: { -                this._err(error_codes_js_1.ERR.missingDoctypePublicIdentifier); -                token.forceQuirks = true; -                this.state = State.DATA; -                this.emitCurrentDoctype(token); -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._err(error_codes_js_1.ERR.eofInDoctype); -                token.forceQuirks = true; -                this.emitCurrentDoctype(token); -                this._emitEOFToken(); -                break; -            } -            default: { -                this._err(error_codes_js_1.ERR.missingQuoteBeforeDoctypePublicIdentifier); -                token.forceQuirks = true; -                this.state = State.BOGUS_DOCTYPE; -                this._stateBogusDoctype(cp); -            } -        } -    } -    // Before DOCTYPE public identifier state -    //------------------------------------------------------------------ -    _stateBeforeDoctypePublicIdentifier(cp) { -        const token = this.currentToken; -        switch (cp) { -            case unicode_js_1.CODE_POINTS.SPACE: -            case unicode_js_1.CODE_POINTS.LINE_FEED: -            case unicode_js_1.CODE_POINTS.TABULATION: -            case unicode_js_1.CODE_POINTS.FORM_FEED: { -                // Ignore whitespace -                break; -            } -            case unicode_js_1.CODE_POINTS.QUOTATION_MARK: { -                token.publicId = ''; -                this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED; -                break; -            } -            case unicode_js_1.CODE_POINTS.APOSTROPHE: { -                token.publicId = ''; -                this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED; -                break; -            } -            case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: { -                this._err(error_codes_js_1.ERR.missingDoctypePublicIdentifier); -                token.forceQuirks = true; -                this.state = State.DATA; -                this.emitCurrentDoctype(token); -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._err(error_codes_js_1.ERR.eofInDoctype); -                token.forceQuirks = true; -                this.emitCurrentDoctype(token); -                this._emitEOFToken(); -                break; -            } -            default: { -                this._err(error_codes_js_1.ERR.missingQuoteBeforeDoctypePublicIdentifier); -                token.forceQuirks = true; -                this.state = State.BOGUS_DOCTYPE; -                this._stateBogusDoctype(cp); -            } -        } -    } -    // DOCTYPE public identifier (double-quoted) state -    //------------------------------------------------------------------ -    _stateDoctypePublicIdentifierDoubleQuoted(cp) { -        const token = this.currentToken; -        switch (cp) { -            case unicode_js_1.CODE_POINTS.QUOTATION_MARK: { -                this.state = State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER; -                break; -            } -            case unicode_js_1.CODE_POINTS.NULL: { -                this._err(error_codes_js_1.ERR.unexpectedNullCharacter); -                token.publicId += unicode_js_1.REPLACEMENT_CHARACTER; -                break; -            } -            case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: { -                this._err(error_codes_js_1.ERR.abruptDoctypePublicIdentifier); -                token.forceQuirks = true; -                this.emitCurrentDoctype(token); -                this.state = State.DATA; -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._err(error_codes_js_1.ERR.eofInDoctype); -                token.forceQuirks = true; -                this.emitCurrentDoctype(token); -                this._emitEOFToken(); -                break; -            } -            default: { -                token.publicId += String.fromCodePoint(cp); -            } -        } -    } -    // DOCTYPE public identifier (single-quoted) state -    //------------------------------------------------------------------ -    _stateDoctypePublicIdentifierSingleQuoted(cp) { -        const token = this.currentToken; -        switch (cp) { -            case unicode_js_1.CODE_POINTS.APOSTROPHE: { -                this.state = State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER; -                break; -            } -            case unicode_js_1.CODE_POINTS.NULL: { -                this._err(error_codes_js_1.ERR.unexpectedNullCharacter); -                token.publicId += unicode_js_1.REPLACEMENT_CHARACTER; -                break; -            } -            case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: { -                this._err(error_codes_js_1.ERR.abruptDoctypePublicIdentifier); -                token.forceQuirks = true; -                this.emitCurrentDoctype(token); -                this.state = State.DATA; -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._err(error_codes_js_1.ERR.eofInDoctype); -                token.forceQuirks = true; -                this.emitCurrentDoctype(token); -                this._emitEOFToken(); -                break; -            } -            default: { -                token.publicId += String.fromCodePoint(cp); -            } -        } -    } -    // After DOCTYPE public identifier state -    //------------------------------------------------------------------ -    _stateAfterDoctypePublicIdentifier(cp) { -        const token = this.currentToken; -        switch (cp) { -            case unicode_js_1.CODE_POINTS.SPACE: -            case unicode_js_1.CODE_POINTS.LINE_FEED: -            case unicode_js_1.CODE_POINTS.TABULATION: -            case unicode_js_1.CODE_POINTS.FORM_FEED: { -                this.state = State.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS; -                break; -            } -            case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: { -                this.state = State.DATA; -                this.emitCurrentDoctype(token); -                break; -            } -            case unicode_js_1.CODE_POINTS.QUOTATION_MARK: { -                this._err(error_codes_js_1.ERR.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers); -                token.systemId = ''; -                this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED; -                break; -            } -            case unicode_js_1.CODE_POINTS.APOSTROPHE: { -                this._err(error_codes_js_1.ERR.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers); -                token.systemId = ''; -                this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED; -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._err(error_codes_js_1.ERR.eofInDoctype); -                token.forceQuirks = true; -                this.emitCurrentDoctype(token); -                this._emitEOFToken(); -                break; -            } -            default: { -                this._err(error_codes_js_1.ERR.missingQuoteBeforeDoctypeSystemIdentifier); -                token.forceQuirks = true; -                this.state = State.BOGUS_DOCTYPE; -                this._stateBogusDoctype(cp); -            } -        } -    } -    // Between DOCTYPE public and system identifiers state -    //------------------------------------------------------------------ -    _stateBetweenDoctypePublicAndSystemIdentifiers(cp) { -        const token = this.currentToken; -        switch (cp) { -            case unicode_js_1.CODE_POINTS.SPACE: -            case unicode_js_1.CODE_POINTS.LINE_FEED: -            case unicode_js_1.CODE_POINTS.TABULATION: -            case unicode_js_1.CODE_POINTS.FORM_FEED: { -                // Ignore whitespace -                break; -            } -            case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: { -                this.emitCurrentDoctype(token); -                this.state = State.DATA; -                break; -            } -            case unicode_js_1.CODE_POINTS.QUOTATION_MARK: { -                token.systemId = ''; -                this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED; -                break; -            } -            case unicode_js_1.CODE_POINTS.APOSTROPHE: { -                token.systemId = ''; -                this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED; -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._err(error_codes_js_1.ERR.eofInDoctype); -                token.forceQuirks = true; -                this.emitCurrentDoctype(token); -                this._emitEOFToken(); -                break; -            } -            default: { -                this._err(error_codes_js_1.ERR.missingQuoteBeforeDoctypeSystemIdentifier); -                token.forceQuirks = true; -                this.state = State.BOGUS_DOCTYPE; -                this._stateBogusDoctype(cp); -            } -        } -    } -    // After DOCTYPE system keyword state -    //------------------------------------------------------------------ -    _stateAfterDoctypeSystemKeyword(cp) { -        const token = this.currentToken; -        switch (cp) { -            case unicode_js_1.CODE_POINTS.SPACE: -            case unicode_js_1.CODE_POINTS.LINE_FEED: -            case unicode_js_1.CODE_POINTS.TABULATION: -            case unicode_js_1.CODE_POINTS.FORM_FEED: { -                this.state = State.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER; -                break; -            } -            case unicode_js_1.CODE_POINTS.QUOTATION_MARK: { -                this._err(error_codes_js_1.ERR.missingWhitespaceAfterDoctypeSystemKeyword); -                token.systemId = ''; -                this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED; -                break; -            } -            case unicode_js_1.CODE_POINTS.APOSTROPHE: { -                this._err(error_codes_js_1.ERR.missingWhitespaceAfterDoctypeSystemKeyword); -                token.systemId = ''; -                this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED; -                break; -            } -            case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: { -                this._err(error_codes_js_1.ERR.missingDoctypeSystemIdentifier); -                token.forceQuirks = true; -                this.state = State.DATA; -                this.emitCurrentDoctype(token); -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._err(error_codes_js_1.ERR.eofInDoctype); -                token.forceQuirks = true; -                this.emitCurrentDoctype(token); -                this._emitEOFToken(); -                break; -            } -            default: { -                this._err(error_codes_js_1.ERR.missingQuoteBeforeDoctypeSystemIdentifier); -                token.forceQuirks = true; -                this.state = State.BOGUS_DOCTYPE; -                this._stateBogusDoctype(cp); -            } -        } -    } -    // Before DOCTYPE system identifier state -    //------------------------------------------------------------------ -    _stateBeforeDoctypeSystemIdentifier(cp) { -        const token = this.currentToken; -        switch (cp) { -            case unicode_js_1.CODE_POINTS.SPACE: -            case unicode_js_1.CODE_POINTS.LINE_FEED: -            case unicode_js_1.CODE_POINTS.TABULATION: -            case unicode_js_1.CODE_POINTS.FORM_FEED: { -                // Ignore whitespace -                break; -            } -            case unicode_js_1.CODE_POINTS.QUOTATION_MARK: { -                token.systemId = ''; -                this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED; -                break; -            } -            case unicode_js_1.CODE_POINTS.APOSTROPHE: { -                token.systemId = ''; -                this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED; -                break; -            } -            case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: { -                this._err(error_codes_js_1.ERR.missingDoctypeSystemIdentifier); -                token.forceQuirks = true; -                this.state = State.DATA; -                this.emitCurrentDoctype(token); -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._err(error_codes_js_1.ERR.eofInDoctype); -                token.forceQuirks = true; -                this.emitCurrentDoctype(token); -                this._emitEOFToken(); -                break; -            } -            default: { -                this._err(error_codes_js_1.ERR.missingQuoteBeforeDoctypeSystemIdentifier); -                token.forceQuirks = true; -                this.state = State.BOGUS_DOCTYPE; -                this._stateBogusDoctype(cp); -            } -        } -    } -    // DOCTYPE system identifier (double-quoted) state -    //------------------------------------------------------------------ -    _stateDoctypeSystemIdentifierDoubleQuoted(cp) { -        const token = this.currentToken; -        switch (cp) { -            case unicode_js_1.CODE_POINTS.QUOTATION_MARK: { -                this.state = State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER; -                break; -            } -            case unicode_js_1.CODE_POINTS.NULL: { -                this._err(error_codes_js_1.ERR.unexpectedNullCharacter); -                token.systemId += unicode_js_1.REPLACEMENT_CHARACTER; -                break; -            } -            case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: { -                this._err(error_codes_js_1.ERR.abruptDoctypeSystemIdentifier); -                token.forceQuirks = true; -                this.emitCurrentDoctype(token); -                this.state = State.DATA; -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._err(error_codes_js_1.ERR.eofInDoctype); -                token.forceQuirks = true; -                this.emitCurrentDoctype(token); -                this._emitEOFToken(); -                break; -            } -            default: { -                token.systemId += String.fromCodePoint(cp); -            } -        } -    } -    // DOCTYPE system identifier (single-quoted) state -    //------------------------------------------------------------------ -    _stateDoctypeSystemIdentifierSingleQuoted(cp) { -        const token = this.currentToken; -        switch (cp) { -            case unicode_js_1.CODE_POINTS.APOSTROPHE: { -                this.state = State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER; -                break; -            } -            case unicode_js_1.CODE_POINTS.NULL: { -                this._err(error_codes_js_1.ERR.unexpectedNullCharacter); -                token.systemId += unicode_js_1.REPLACEMENT_CHARACTER; -                break; -            } -            case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: { -                this._err(error_codes_js_1.ERR.abruptDoctypeSystemIdentifier); -                token.forceQuirks = true; -                this.emitCurrentDoctype(token); -                this.state = State.DATA; -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._err(error_codes_js_1.ERR.eofInDoctype); -                token.forceQuirks = true; -                this.emitCurrentDoctype(token); -                this._emitEOFToken(); -                break; -            } -            default: { -                token.systemId += String.fromCodePoint(cp); -            } -        } -    } -    // After DOCTYPE system identifier state -    //------------------------------------------------------------------ -    _stateAfterDoctypeSystemIdentifier(cp) { -        const token = this.currentToken; -        switch (cp) { -            case unicode_js_1.CODE_POINTS.SPACE: -            case unicode_js_1.CODE_POINTS.LINE_FEED: -            case unicode_js_1.CODE_POINTS.TABULATION: -            case unicode_js_1.CODE_POINTS.FORM_FEED: { -                // Ignore whitespace -                break; -            } -            case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: { -                this.emitCurrentDoctype(token); -                this.state = State.DATA; -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._err(error_codes_js_1.ERR.eofInDoctype); -                token.forceQuirks = true; -                this.emitCurrentDoctype(token); -                this._emitEOFToken(); -                break; -            } -            default: { -                this._err(error_codes_js_1.ERR.unexpectedCharacterAfterDoctypeSystemIdentifier); -                this.state = State.BOGUS_DOCTYPE; -                this._stateBogusDoctype(cp); -            } -        } -    } -    // Bogus DOCTYPE state -    //------------------------------------------------------------------ -    _stateBogusDoctype(cp) { -        const token = this.currentToken; -        switch (cp) { -            case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: { -                this.emitCurrentDoctype(token); -                this.state = State.DATA; -                break; -            } -            case unicode_js_1.CODE_POINTS.NULL: { -                this._err(error_codes_js_1.ERR.unexpectedNullCharacter); -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this.emitCurrentDoctype(token); -                this._emitEOFToken(); -                break; -            } -            default: -            // Do nothing -        } -    } -    // CDATA section state -    //------------------------------------------------------------------ -    _stateCdataSection(cp) { -        switch (cp) { -            case unicode_js_1.CODE_POINTS.RIGHT_SQUARE_BRACKET: { -                this.state = State.CDATA_SECTION_BRACKET; -                break; -            } -            case unicode_js_1.CODE_POINTS.EOF: { -                this._err(error_codes_js_1.ERR.eofInCdata); -                this._emitEOFToken(); -                break; -            } -            default: { -                this._emitCodePoint(cp); -            } -        } -    } -    // CDATA section bracket state -    //------------------------------------------------------------------ -    _stateCdataSectionBracket(cp) { -        if (cp === unicode_js_1.CODE_POINTS.RIGHT_SQUARE_BRACKET) { -            this.state = State.CDATA_SECTION_END; -        } -        else { -            this._emitChars(']'); -            this.state = State.CDATA_SECTION; -            this._stateCdataSection(cp); -        } -    } -    // CDATA section end state -    //------------------------------------------------------------------ -    _stateCdataSectionEnd(cp) { -        switch (cp) { -            case unicode_js_1.CODE_POINTS.GREATER_THAN_SIGN: { -                this.state = State.DATA; -                break; -            } -            case unicode_js_1.CODE_POINTS.RIGHT_SQUARE_BRACKET: { -                this._emitChars(']'); -                break; -            } -            default: { -                this._emitChars(']]'); -                this.state = State.CDATA_SECTION; -                this._stateCdataSection(cp); -            } -        } -    } -    // Character reference state -    //------------------------------------------------------------------ -    _stateCharacterReference(cp) { -        if (cp === unicode_js_1.CODE_POINTS.NUMBER_SIGN) { -            this.state = State.NUMERIC_CHARACTER_REFERENCE; -        } -        else if (isAsciiAlphaNumeric(cp)) { -            this.state = State.NAMED_CHARACTER_REFERENCE; -            this._stateNamedCharacterReference(cp); -        } -        else { -            this._flushCodePointConsumedAsCharacterReference(unicode_js_1.CODE_POINTS.AMPERSAND); -            this._reconsumeInState(this.returnState, cp); -        } -    } -    // Named character reference state -    //------------------------------------------------------------------ -    _stateNamedCharacterReference(cp) { -        const matchResult = this._matchNamedCharacterReference(cp); -        //NOTE: Matching can be abrupted by hibernation. In that case, match -        //results are no longer valid and we will need to start over. -        if (this._ensureHibernation()) { -            // Stay in the state, try again. -        } -        else if (matchResult) { -            for (let i = 0; i < matchResult.length; i++) { -                this._flushCodePointConsumedAsCharacterReference(matchResult[i]); -            } -            this.state = this.returnState; -        } -        else { -            this._flushCodePointConsumedAsCharacterReference(unicode_js_1.CODE_POINTS.AMPERSAND); -            this.state = State.AMBIGUOUS_AMPERSAND; -        } -    } -    // Ambiguos ampersand state -    //------------------------------------------------------------------ -    _stateAmbiguousAmpersand(cp) { -        if (isAsciiAlphaNumeric(cp)) { -            this._flushCodePointConsumedAsCharacterReference(cp); -        } -        else { -            if (cp === unicode_js_1.CODE_POINTS.SEMICOLON) { -                this._err(error_codes_js_1.ERR.unknownNamedCharacterReference); -            } -            this._reconsumeInState(this.returnState, cp); -        } -    } -    // Numeric character reference state -    //------------------------------------------------------------------ -    _stateNumericCharacterReference(cp) { -        this.charRefCode = 0; -        if (cp === unicode_js_1.CODE_POINTS.LATIN_SMALL_X || cp === unicode_js_1.CODE_POINTS.LATIN_CAPITAL_X) { -            this.state = State.HEXADEMICAL_CHARACTER_REFERENCE_START; -        } -        // Inlined decimal character reference start state -        else if (isAsciiDigit(cp)) { -            this.state = State.DECIMAL_CHARACTER_REFERENCE; -            this._stateDecimalCharacterReference(cp); -        } -        else { -            this._err(error_codes_js_1.ERR.absenceOfDigitsInNumericCharacterReference); -            this._flushCodePointConsumedAsCharacterReference(unicode_js_1.CODE_POINTS.AMPERSAND); -            this._flushCodePointConsumedAsCharacterReference(unicode_js_1.CODE_POINTS.NUMBER_SIGN); -            this._reconsumeInState(this.returnState, cp); -        } -    } -    // Hexademical character reference start state -    //------------------------------------------------------------------ -    _stateHexademicalCharacterReferenceStart(cp) { -        if (isAsciiHexDigit(cp)) { -            this.state = State.HEXADEMICAL_CHARACTER_REFERENCE; -            this._stateHexademicalCharacterReference(cp); -        } -        else { -            this._err(error_codes_js_1.ERR.absenceOfDigitsInNumericCharacterReference); -            this._flushCodePointConsumedAsCharacterReference(unicode_js_1.CODE_POINTS.AMPERSAND); -            this._flushCodePointConsumedAsCharacterReference(unicode_js_1.CODE_POINTS.NUMBER_SIGN); -            this._unconsume(2); -            this.state = this.returnState; -        } -    } -    // Hexademical character reference state -    //------------------------------------------------------------------ -    _stateHexademicalCharacterReference(cp) { -        if (isAsciiUpperHexDigit(cp)) { -            this.charRefCode = this.charRefCode * 16 + cp - 0x37; -        } -        else if (isAsciiLowerHexDigit(cp)) { -            this.charRefCode = this.charRefCode * 16 + cp - 0x57; -        } -        else if (isAsciiDigit(cp)) { -            this.charRefCode = this.charRefCode * 16 + cp - 0x30; -        } -        else if (cp === unicode_js_1.CODE_POINTS.SEMICOLON) { -            this.state = State.NUMERIC_CHARACTER_REFERENCE_END; -        } -        else { -            this._err(error_codes_js_1.ERR.missingSemicolonAfterCharacterReference); -            this.state = State.NUMERIC_CHARACTER_REFERENCE_END; -            this._stateNumericCharacterReferenceEnd(cp); -        } -    } -    // Decimal character reference state -    //------------------------------------------------------------------ -    _stateDecimalCharacterReference(cp) { -        if (isAsciiDigit(cp)) { -            this.charRefCode = this.charRefCode * 10 + cp - 0x30; -        } -        else if (cp === unicode_js_1.CODE_POINTS.SEMICOLON) { -            this.state = State.NUMERIC_CHARACTER_REFERENCE_END; -        } -        else { -            this._err(error_codes_js_1.ERR.missingSemicolonAfterCharacterReference); -            this.state = State.NUMERIC_CHARACTER_REFERENCE_END; -            this._stateNumericCharacterReferenceEnd(cp); -        } -    } -    // Numeric character reference end state -    //------------------------------------------------------------------ -    _stateNumericCharacterReferenceEnd(cp) { -        if (this.charRefCode === unicode_js_1.CODE_POINTS.NULL) { -            this._err(error_codes_js_1.ERR.nullCharacterReference); -            this.charRefCode = unicode_js_1.CODE_POINTS.REPLACEMENT_CHARACTER; -        } -        else if (this.charRefCode > 1114111) { -            this._err(error_codes_js_1.ERR.characterReferenceOutsideUnicodeRange); -            this.charRefCode = unicode_js_1.CODE_POINTS.REPLACEMENT_CHARACTER; -        } -        else if ((0, unicode_js_1.isSurrogate)(this.charRefCode)) { -            this._err(error_codes_js_1.ERR.surrogateCharacterReference); -            this.charRefCode = unicode_js_1.CODE_POINTS.REPLACEMENT_CHARACTER; -        } -        else if ((0, unicode_js_1.isUndefinedCodePoint)(this.charRefCode)) { -            this._err(error_codes_js_1.ERR.noncharacterCharacterReference); -        } -        else if ((0, unicode_js_1.isControlCodePoint)(this.charRefCode) || this.charRefCode === unicode_js_1.CODE_POINTS.CARRIAGE_RETURN) { -            this._err(error_codes_js_1.ERR.controlCharacterReference); -            const replacement = C1_CONTROLS_REFERENCE_REPLACEMENTS.get(this.charRefCode); -            if (replacement !== undefined) { -                this.charRefCode = replacement; -            } -        } -        this._flushCodePointConsumedAsCharacterReference(this.charRefCode); -        this._reconsumeInState(this.returnState, cp); -    } -} -exports.Tokenizer = Tokenizer; - -},{"../common/error-codes.js":7,"../common/html.js":9,"../common/token.js":10,"../common/unicode.js":11,"./preprocessor.js":18,"entities/lib/decode.js":1}],18:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Preprocessor = void 0; -const unicode_js_1 = require("../common/unicode.js"); -const error_codes_js_1 = require("../common/error-codes.js"); -//Const -const DEFAULT_BUFFER_WATERLINE = 1 << 16; -//Preprocessor -//NOTE: HTML input preprocessing -//(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#preprocessing-the-input-stream) -class Preprocessor { -    constructor(handler) { -        this.handler = handler; -        this.html = ''; -        this.pos = -1; -        // NOTE: Initial `lastGapPos` is -2, to ensure `col` on initialisation is 0 -        this.lastGapPos = -2; -        this.gapStack = []; -        this.skipNextNewLine = false; -        this.lastChunkWritten = false; -        this.endOfChunkHit = false; -        this.bufferWaterline = DEFAULT_BUFFER_WATERLINE; -        this.isEol = false; -        this.lineStartPos = 0; -        this.droppedBufferSize = 0; -        this.line = 1; -        //NOTE: avoid reporting errors twice on advance/retreat -        this.lastErrOffset = -1; -    } -    /** The column on the current line. If we just saw a gap (eg. a surrogate pair), return the index before. */ -    get col() { -        return this.pos - this.lineStartPos + Number(this.lastGapPos !== this.pos); -    } -    get offset() { -        return this.droppedBufferSize + this.pos; -    } -    getError(code) { -        const { line, col, offset } = this; -        return { -            code, -            startLine: line, -            endLine: line, -            startCol: col, -            endCol: col, -            startOffset: offset, -            endOffset: offset, -        }; -    } -    _err(code) { -        if (this.handler.onParseError && this.lastErrOffset !== this.offset) { -            this.lastErrOffset = this.offset; -            this.handler.onParseError(this.getError(code)); -        } -    } -    _addGap() { -        this.gapStack.push(this.lastGapPos); -        this.lastGapPos = this.pos; -    } -    _processSurrogate(cp) { -        //NOTE: try to peek a surrogate pair -        if (this.pos !== this.html.length - 1) { -            const nextCp = this.html.charCodeAt(this.pos + 1); -            if ((0, unicode_js_1.isSurrogatePair)(nextCp)) { -                //NOTE: we have a surrogate pair. Peek pair character and recalculate code point. -                this.pos++; -                //NOTE: add a gap that should be avoided during retreat -                this._addGap(); -                return (0, unicode_js_1.getSurrogatePairCodePoint)(cp, nextCp); -            } -        } -        //NOTE: we are at the end of a chunk, therefore we can't infer the surrogate pair yet. -        else if (!this.lastChunkWritten) { -            this.endOfChunkHit = true; -            return unicode_js_1.CODE_POINTS.EOF; -        } -        //NOTE: isolated surrogate -        this._err(error_codes_js_1.ERR.surrogateInInputStream); -        return cp; -    } -    willDropParsedChunk() { -        return this.pos > this.bufferWaterline; -    } -    dropParsedChunk() { -        if (this.willDropParsedChunk()) { -            this.html = this.html.substring(this.pos); -            this.lineStartPos -= this.pos; -            this.droppedBufferSize += this.pos; -            this.pos = 0; -            this.lastGapPos = -2; -            this.gapStack.length = 0; -        } -    } -    write(chunk, isLastChunk) { -        if (this.html.length > 0) { -            this.html += chunk; -        } -        else { -            this.html = chunk; -        } -        this.endOfChunkHit = false; -        this.lastChunkWritten = isLastChunk; -    } -    insertHtmlAtCurrentPos(chunk) { -        this.html = this.html.substring(0, this.pos + 1) + chunk + this.html.substring(this.pos + 1); -        this.endOfChunkHit = false; -    } -    startsWith(pattern, caseSensitive) { -        // Check if our buffer has enough characters -        if (this.pos + pattern.length > this.html.length) { -            this.endOfChunkHit = !this.lastChunkWritten; -            return false; -        } -        if (caseSensitive) { -            return this.html.startsWith(pattern, this.pos); -        } -        for (let i = 0; i < pattern.length; i++) { -            const cp = this.html.charCodeAt(this.pos + i) | 0x20; -            if (cp !== pattern.charCodeAt(i)) { -                return false; -            } -        } -        return true; -    } -    peek(offset) { -        const pos = this.pos + offset; -        if (pos >= this.html.length) { -            this.endOfChunkHit = !this.lastChunkWritten; -            return unicode_js_1.CODE_POINTS.EOF; -        } -        const code = this.html.charCodeAt(pos); -        return code === unicode_js_1.CODE_POINTS.CARRIAGE_RETURN ? unicode_js_1.CODE_POINTS.LINE_FEED : code; -    } -    advance() { -        this.pos++; -        //NOTE: LF should be in the last column of the line -        if (this.isEol) { -            this.isEol = false; -            this.line++; -            this.lineStartPos = this.pos; -        } -        if (this.pos >= this.html.length) { -            this.endOfChunkHit = !this.lastChunkWritten; -            return unicode_js_1.CODE_POINTS.EOF; -        } -        let cp = this.html.charCodeAt(this.pos); -        //NOTE: all U+000D CARRIAGE RETURN (CR) characters must be converted to U+000A LINE FEED (LF) characters -        if (cp === unicode_js_1.CODE_POINTS.CARRIAGE_RETURN) { -            this.isEol = true; -            this.skipNextNewLine = true; -            return unicode_js_1.CODE_POINTS.LINE_FEED; -        } -        //NOTE: any U+000A LINE FEED (LF) characters that immediately follow a U+000D CARRIAGE RETURN (CR) character -        //must be ignored. -        if (cp === unicode_js_1.CODE_POINTS.LINE_FEED) { -            this.isEol = true; -            if (this.skipNextNewLine) { -                // `line` will be bumped again in the recursive call. -                this.line--; -                this.skipNextNewLine = false; -                this._addGap(); -                return this.advance(); -            } -        } -        this.skipNextNewLine = false; -        if ((0, unicode_js_1.isSurrogate)(cp)) { -            cp = this._processSurrogate(cp); -        } -        //OPTIMIZATION: first check if code point is in the common allowed -        //range (ASCII alphanumeric, whitespaces, big chunk of BMP) -        //before going into detailed performance cost validation. -        const isCommonValidRange = this.handler.onParseError === null || -            (cp > 0x1f && cp < 0x7f) || -            cp === unicode_js_1.CODE_POINTS.LINE_FEED || -            cp === unicode_js_1.CODE_POINTS.CARRIAGE_RETURN || -            (cp > 0x9f && cp < 64976); -        if (!isCommonValidRange) { -            this._checkForProblematicCharacters(cp); -        } -        return cp; -    } -    _checkForProblematicCharacters(cp) { -        if ((0, unicode_js_1.isControlCodePoint)(cp)) { -            this._err(error_codes_js_1.ERR.controlCharacterInInputStream); -        } -        else if ((0, unicode_js_1.isUndefinedCodePoint)(cp)) { -            this._err(error_codes_js_1.ERR.noncharacterInInputStream); -        } -    } -    retreat(count) { -        this.pos -= count; -        while (this.pos < this.lastGapPos) { -            this.lastGapPos = this.gapStack.pop(); -            this.pos--; -        } -        this.isEol = false; -    } -} -exports.Preprocessor = Preprocessor; - -},{"../common/error-codes.js":7,"../common/unicode.js":11}],19:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.defaultTreeAdapter = void 0; -const html_js_1 = require("../common/html.js"); -function createTextNode(value) { -    return { -        nodeName: '#text', -        value, -        parentNode: null, -    }; -} -exports.defaultTreeAdapter = { -    //Node construction -    createDocument() { -        return { -            nodeName: '#document', -            mode: html_js_1.DOCUMENT_MODE.NO_QUIRKS, -            childNodes: [], -        }; -    }, -    createDocumentFragment() { -        return { -            nodeName: '#document-fragment', -            childNodes: [], -        }; -    }, -    createElement(tagName, namespaceURI, attrs) { -        return { -            nodeName: tagName, -            tagName, -            attrs, -            namespaceURI, -            childNodes: [], -            parentNode: null, -        }; -    }, -    createCommentNode(data) { -        return { -            nodeName: '#comment', -            data, -            parentNode: null, -        }; -    }, -    //Tree mutation -    appendChild(parentNode, newNode) { -        parentNode.childNodes.push(newNode); -        newNode.parentNode = parentNode; -    }, -    insertBefore(parentNode, newNode, referenceNode) { -        const insertionIdx = parentNode.childNodes.indexOf(referenceNode); -        parentNode.childNodes.splice(insertionIdx, 0, newNode); -        newNode.parentNode = parentNode; -    }, -    setTemplateContent(templateElement, contentElement) { -        templateElement.content = contentElement; -    }, -    getTemplateContent(templateElement) { -        return templateElement.content; -    }, -    setDocumentType(document, name, publicId, systemId) { -        const doctypeNode = document.childNodes.find((node) => node.nodeName === '#documentType'); -        if (doctypeNode) { -            doctypeNode.name = name; -            doctypeNode.publicId = publicId; -            doctypeNode.systemId = systemId; -        } -        else { -            const node = { -                nodeName: '#documentType', -                name, -                publicId, -                systemId, -                parentNode: null, -            }; -            exports.defaultTreeAdapter.appendChild(document, node); -        } -    }, -    setDocumentMode(document, mode) { -        document.mode = mode; -    }, -    getDocumentMode(document) { -        return document.mode; -    }, -    detachNode(node) { -        if (node.parentNode) { -            const idx = node.parentNode.childNodes.indexOf(node); -            node.parentNode.childNodes.splice(idx, 1); -            node.parentNode = null; -        } -    }, -    insertText(parentNode, text) { -        if (parentNode.childNodes.length > 0) { -            const prevNode = parentNode.childNodes[parentNode.childNodes.length - 1]; -            if (exports.defaultTreeAdapter.isTextNode(prevNode)) { -                prevNode.value += text; -                return; -            } -        } -        exports.defaultTreeAdapter.appendChild(parentNode, createTextNode(text)); -    }, -    insertTextBefore(parentNode, text, referenceNode) { -        const prevNode = parentNode.childNodes[parentNode.childNodes.indexOf(referenceNode) - 1]; -        if (prevNode && exports.defaultTreeAdapter.isTextNode(prevNode)) { -            prevNode.value += text; -        } -        else { -            exports.defaultTreeAdapter.insertBefore(parentNode, createTextNode(text), referenceNode); -        } -    }, -    adoptAttributes(recipient, attrs) { -        const recipientAttrsMap = new Set(recipient.attrs.map((attr) => attr.name)); -        for (let j = 0; j < attrs.length; j++) { -            if (!recipientAttrsMap.has(attrs[j].name)) { -                recipient.attrs.push(attrs[j]); -            } -        } -    }, -    //Tree traversing -    getFirstChild(node) { -        return node.childNodes[0]; -    }, -    getChildNodes(node) { -        return node.childNodes; -    }, -    getParentNode(node) { -        return node.parentNode; -    }, -    getAttrList(element) { -        return element.attrs; -    }, -    //Node data -    getTagName(element) { -        return element.tagName; -    }, -    getNamespaceURI(element) { -        return element.namespaceURI; -    }, -    getTextNodeContent(textNode) { -        return textNode.value; -    }, -    getCommentNodeContent(commentNode) { -        return commentNode.data; -    }, -    getDocumentTypeNodeName(doctypeNode) { -        return doctypeNode.name; -    }, -    getDocumentTypeNodePublicId(doctypeNode) { -        return doctypeNode.publicId; -    }, -    getDocumentTypeNodeSystemId(doctypeNode) { -        return doctypeNode.systemId; -    }, -    //Node types -    isTextNode(node) { -        return node.nodeName === '#text'; -    }, -    isCommentNode(node) { -        return node.nodeName === '#comment'; -    }, -    isDocumentTypeNode(node) { -        return node.nodeName === '#documentType'; -    }, -    isElementNode(node) { -        return Object.prototype.hasOwnProperty.call(node, 'tagName'); -    }, -    // Source code location -    setNodeSourceCodeLocation(node, location) { -        node.sourceCodeLocation = location; -    }, -    getNodeSourceCodeLocation(node) { -        return node.sourceCodeLocation; -    }, -    updateNodeSourceCodeLocation(node, endLocation) { -        node.sourceCodeLocation = Object.assign(Object.assign({}, node.sourceCodeLocation), endLocation); -    }, -}; - -},{"../common/html.js":9}]},{},[12])(12) -}); - -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2Jyb3dzZXItcGFjay9fcHJlbHVkZS5qcyIsIi4uLy4uLy4uL2VudGl0aWVzL2xpYi9kZWNvZGUuanMiLCIuLi8uLi8uLi9lbnRpdGllcy9saWIvZGVjb2RlX2NvZGVwb2ludC5qcyIsIi4uLy4uLy4uL2VudGl0aWVzL2xpYi9lc2NhcGUuanMiLCIuLi8uLi8uLi9lbnRpdGllcy9saWIvZ2VuZXJhdGVkL2RlY29kZS1kYXRhLWh0bWwuanMiLCIuLi8uLi8uLi9lbnRpdGllcy9saWIvZ2VuZXJhdGVkL2RlY29kZS1kYXRhLXhtbC5qcyIsImNvbW1vbi9kb2N0eXBlLmpzIiwiY29tbW9uL2Vycm9yLWNvZGVzLmpzIiwiY29tbW9uL2ZvcmVpZ24tY29udGVudC5qcyIsImNvbW1vbi9odG1sLmpzIiwiY29tbW9uL3Rva2VuLmpzIiwiY29tbW9uL3VuaWNvZGUuanMiLCJpbmRleC5qcyIsInBhcnNlci9mb3JtYXR0aW5nLWVsZW1lbnQtbGlzdC5qcyIsInBhcnNlci9pbmRleC5qcyIsInBhcnNlci9vcGVuLWVsZW1lbnQtc3RhY2suanMiLCJzZXJpYWxpemVyL2luZGV4LmpzIiwidG9rZW5pemVyL2luZGV4LmpzIiwidG9rZW5pemVyL3ByZXByb2Nlc3Nvci5qcyIsInRyZWUtYWRhcHRlcnMvZGVmYXVsdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbExBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5T0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaGhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWxHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlY29kZVhNTCA9IGV4cG9ydHMuZGVjb2RlSFRNTFN0cmljdCA9IGV4cG9ydHMuZGVjb2RlSFRNTCA9IGV4cG9ydHMuZGV0ZXJtaW5lQnJhbmNoID0gZXhwb3J0cy5CaW5UcmllRmxhZ3MgPSBleHBvcnRzLmZyb21Db2RlUG9pbnQgPSBleHBvcnRzLnJlcGxhY2VDb2RlUG9pbnQgPSBleHBvcnRzLmRlY29kZUNvZGVQb2ludCA9IGV4cG9ydHMueG1sRGVjb2RlVHJlZSA9IGV4cG9ydHMuaHRtbERlY29kZVRyZWUgPSB2b2lkIDA7XG52YXIgZGVjb2RlX2RhdGFfaHRtbF9qc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9kZWNvZGUtZGF0YS1odG1sLmpzXCIpKTtcbmV4cG9ydHMuaHRtbERlY29kZVRyZWUgPSBkZWNvZGVfZGF0YV9odG1sX2pzXzEuZGVmYXVsdDtcbnZhciBkZWNvZGVfZGF0YV94bWxfanNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9nZW5lcmF0ZWQvZGVjb2RlLWRhdGEteG1sLmpzXCIpKTtcbmV4cG9ydHMueG1sRGVjb2RlVHJlZSA9IGRlY29kZV9kYXRhX3htbF9qc18xLmRlZmF1bHQ7XG52YXIgZGVjb2RlX2NvZGVwb2ludF9qc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL2RlY29kZV9jb2RlcG9pbnQuanNcIikpO1xuZXhwb3J0cy5kZWNvZGVDb2RlUG9pbnQgPSBkZWNvZGVfY29kZXBvaW50X2pzXzEuZGVmYXVsdDtcbnZhciBkZWNvZGVfY29kZXBvaW50X2pzXzIgPSByZXF1aXJlKFwiLi9kZWNvZGVfY29kZXBvaW50LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVwbGFjZUNvZGVQb2ludFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVjb2RlX2NvZGVwb2ludF9qc18yLnJlcGxhY2VDb2RlUG9pbnQ7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmcm9tQ29kZVBvaW50XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkZWNvZGVfY29kZXBvaW50X2pzXzIuZnJvbUNvZGVQb2ludDsgfSB9KTtcbnZhciBDaGFyQ29kZXM7XG4oZnVuY3Rpb24gKENoYXJDb2Rlcykge1xuICAgIENoYXJDb2Rlc1tDaGFyQ29kZXNbXCJOVU1cIl0gPSAzNV0gPSBcIk5VTVwiO1xuICAgIENoYXJDb2Rlc1tDaGFyQ29kZXNbXCJTRU1JXCJdID0gNTldID0gXCJTRU1JXCI7XG4gICAgQ2hhckNvZGVzW0NoYXJDb2Rlc1tcIlpFUk9cIl0gPSA0OF0gPSBcIlpFUk9cIjtcbiAgICBDaGFyQ29kZXNbQ2hhckNvZGVzW1wiTklORVwiXSA9IDU3XSA9IFwiTklORVwiO1xuICAgIENoYXJDb2Rlc1tDaGFyQ29kZXNbXCJMT1dFUl9BXCJdID0gOTddID0gXCJMT1dFUl9BXCI7XG4gICAgQ2hhckNvZGVzW0NoYXJDb2Rlc1tcIkxPV0VSX0ZcIl0gPSAxMDJdID0gXCJMT1dFUl9GXCI7XG4gICAgQ2hhckNvZGVzW0NoYXJDb2Rlc1tcIkxPV0VSX1hcIl0gPSAxMjBdID0gXCJMT1dFUl9YXCI7XG4gICAgLyoqIEJpdCB0aGF0IG5lZWRzIHRvIGJlIHNldCB0byBjb252ZXJ0IGFuIHVwcGVyIGNhc2UgQVNDSUkgY2hhcmFjdGVyIHRvIGxvd2VyIGNhc2UgKi9cbiAgICBDaGFyQ29kZXNbQ2hhckNvZGVzW1wiVG9fTE9XRVJfQklUXCJdID0gMzJdID0gXCJUb19MT1dFUl9CSVRcIjtcbn0pKENoYXJDb2RlcyB8fCAoQ2hhckNvZGVzID0ge30pKTtcbnZhciBCaW5UcmllRmxhZ3M7XG4oZnVuY3Rpb24gKEJpblRyaWVGbGFncykge1xuICAgIEJpblRyaWVGbGFnc1tCaW5UcmllRmxhZ3NbXCJWQUxVRV9MRU5HVEhcIl0gPSA0OTE1Ml0gPSBcIlZBTFVFX0xFTkdUSFwiO1xuICAgIEJpblRyaWVGbGFnc1tCaW5UcmllRmxhZ3NbXCJCUkFOQ0hfTEVOR1RIXCJdID0gMTYyNTZdID0gXCJCUkFOQ0hfTEVOR1RIXCI7XG4gICAgQmluVHJpZUZsYWdzW0JpblRyaWVGbGFnc1tcIkpVTVBfVEFCTEVcIl0gPSAxMjddID0gXCJKVU1QX1RBQkxFXCI7XG59KShCaW5UcmllRmxhZ3MgPSBleHBvcnRzLkJpblRyaWVGbGFncyB8fCAoZXhwb3J0cy5CaW5UcmllRmxhZ3MgPSB7fSkpO1xuZnVuY3Rpb24gZ2V0RGVjb2RlcihkZWNvZGVUcmVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGRlY29kZUhUTUxCaW5hcnkoc3RyLCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIHJldCA9IFwiXCI7XG4gICAgICAgIHZhciBsYXN0SWR4ID0gMDtcbiAgICAgICAgdmFyIHN0cklkeCA9IDA7XG4gICAgICAgIHdoaWxlICgoc3RySWR4ID0gc3RyLmluZGV4T2YoXCImXCIsIHN0cklkeCkpID49IDApIHtcbiAgICAgICAgICAgIHJldCArPSBzdHIuc2xpY2UobGFzdElkeCwgc3RySWR4KTtcbiAgICAgICAgICAgIGxhc3RJZHggPSBzdHJJZHg7XG4gICAgICAgICAgICAvLyBTa2lwIHRoZSBcIiZcIlxuICAgICAgICAgICAgc3RySWR4ICs9IDE7XG4gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgbnVtZXJpYyBlbnRpdHksIGhhbmRsZSB0aGlzIHNlcGFyYXRlbHkuXG4gICAgICAgICAgICBpZiAoc3RyLmNoYXJDb2RlQXQoc3RySWR4KSA9PT0gQ2hhckNvZGVzLk5VTSkge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgdGhlIGxlYWRpbmcgXCImI1wiLiBGb3IgaGV4IGVudGl0aWVzLCBhbHNvIHNraXAgdGhlIGxlYWRpbmcgXCJ4XCIuXG4gICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gc3RySWR4ICsgMTtcbiAgICAgICAgICAgICAgICB2YXIgYmFzZSA9IDEwO1xuICAgICAgICAgICAgICAgIHZhciBjcCA9IHN0ci5jaGFyQ29kZUF0KHN0YXJ0KTtcbiAgICAgICAgICAgICAgICBpZiAoKGNwIHwgQ2hhckNvZGVzLlRvX0xPV0VSX0JJVCkgPT09IENoYXJDb2Rlcy5MT1dFUl9YKSB7XG4gICAgICAgICAgICAgICAgICAgIGJhc2UgPSAxNjtcbiAgICAgICAgICAgICAgICAgICAgc3RySWR4ICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ICs9IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRvXG4gICAgICAgICAgICAgICAgICAgIGNwID0gc3RyLmNoYXJDb2RlQXQoKytzdHJJZHgpO1xuICAgICAgICAgICAgICAgIHdoaWxlICgoY3AgPj0gQ2hhckNvZGVzLlpFUk8gJiYgY3AgPD0gQ2hhckNvZGVzLk5JTkUpIHx8XG4gICAgICAgICAgICAgICAgICAgIChiYXNlID09PSAxNiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNwIHwgQ2hhckNvZGVzLlRvX0xPV0VSX0JJVCkgPj0gQ2hhckNvZGVzLkxPV0VSX0EgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChjcCB8IENoYXJDb2Rlcy5Ub19MT1dFUl9CSVQpIDw9IENoYXJDb2Rlcy5MT1dFUl9GKSk7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0ICE9PSBzdHJJZHgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVudGl0eSA9IHN0ci5zdWJzdHJpbmcoc3RhcnQsIHN0cklkeCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZWQgPSBwYXJzZUludChlbnRpdHksIGJhc2UpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RyLmNoYXJDb2RlQXQoc3RySWR4KSA9PT0gQ2hhckNvZGVzLlNFTUkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cklkeCArPSAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0ICs9ICgwLCBkZWNvZGVfY29kZXBvaW50X2pzXzEuZGVmYXVsdCkocGFyc2VkKTtcbiAgICAgICAgICAgICAgICAgICAgbGFzdElkeCA9IHN0cklkeDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcmVzdWx0SWR4ID0gMDtcbiAgICAgICAgICAgIHZhciBleGNlc3MgPSAxO1xuICAgICAgICAgICAgdmFyIHRyZWVJZHggPSAwO1xuICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBkZWNvZGVUcmVlW3RyZWVJZHhdO1xuICAgICAgICAgICAgZm9yICg7IHN0cklkeCA8IHN0ci5sZW5ndGg7IHN0cklkeCsrLCBleGNlc3MrKykge1xuICAgICAgICAgICAgICAgIHRyZWVJZHggPSBkZXRlcm1pbmVCcmFuY2goZGVjb2RlVHJlZSwgY3VycmVudCwgdHJlZUlkeCArIDEsIHN0ci5jaGFyQ29kZUF0KHN0cklkeCkpO1xuICAgICAgICAgICAgICAgIGlmICh0cmVlSWR4IDwgMClcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY3VycmVudCA9IGRlY29kZVRyZWVbdHJlZUlkeF07XG4gICAgICAgICAgICAgICAgdmFyIG1hc2tlZCA9IGN1cnJlbnQgJiBCaW5UcmllRmxhZ3MuVkFMVUVfTEVOR1RIO1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBicmFuY2ggaXMgYSB2YWx1ZSwgc3RvcmUgaXQgYW5kIGNvbnRpbnVlXG4gICAgICAgICAgICAgICAgaWYgKG1hc2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgbGVnYWN5IGVudGl0eSB3aGlsZSBwYXJzaW5nIHN0cmljdGx5LCBqdXN0IHNraXAgdGhlIG51bWJlciBvZiBieXRlc1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cmljdCB8fCBzdHIuY2hhckNvZGVBdChzdHJJZHgpID09PSBDaGFyQ29kZXMuU0VNSSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0SWR4ID0gdHJlZUlkeDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VzcyA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIG1hc2sgaXMgdGhlIG51bWJlciBvZiBieXRlcyBvZiB0aGUgdmFsdWUsIGluY2x1ZGluZyB0aGUgY3VycmVudCBieXRlLlxuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWVMZW5ndGggPSAobWFza2VkID4+IDE0KSAtIDE7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZUxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB0cmVlSWR4ICs9IHZhbHVlTGVuZ3RoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXN1bHRJZHggIT09IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWVMZW5ndGggPSAoZGVjb2RlVHJlZVtyZXN1bHRJZHhdICYgQmluVHJpZUZsYWdzLlZBTFVFX0xFTkdUSCkgPj4gMTQ7XG4gICAgICAgICAgICAgICAgcmV0ICs9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlTGVuZ3RoID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFN0cmluZy5mcm9tQ2hhckNvZGUoZGVjb2RlVHJlZVtyZXN1bHRJZHhdICYgfkJpblRyaWVGbGFncy5WQUxVRV9MRU5HVEgpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHZhbHVlTGVuZ3RoID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBTdHJpbmcuZnJvbUNoYXJDb2RlKGRlY29kZVRyZWVbcmVzdWx0SWR4ICsgMV0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGRlY29kZVRyZWVbcmVzdWx0SWR4ICsgMV0sIGRlY29kZVRyZWVbcmVzdWx0SWR4ICsgMl0pO1xuICAgICAgICAgICAgICAgIGxhc3RJZHggPSBzdHJJZHggLSBleGNlc3MgKyAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQgKyBzdHIuc2xpY2UobGFzdElkeCk7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGRldGVybWluZUJyYW5jaChkZWNvZGVUcmVlLCBjdXJyZW50LCBub2RlSWR4LCBjaGFyKSB7XG4gICAgdmFyIGJyYW5jaENvdW50ID0gKGN1cnJlbnQgJiBCaW5UcmllRmxhZ3MuQlJBTkNIX0xFTkdUSCkgPj4gNztcbiAgICB2YXIganVtcE9mZnNldCA9IGN1cnJlbnQgJiBCaW5UcmllRmxhZ3MuSlVNUF9UQUJMRTtcbiAgICAvLyBDYXNlIDE6IFNpbmdsZSBicmFuY2ggZW5jb2RlZCBpbiBqdW1wIG9mZnNldFxuICAgIGlmIChicmFuY2hDb3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4ganVtcE9mZnNldCAhPT0gMCAmJiBjaGFyID09PSBqdW1wT2Zmc2V0ID8gbm9kZUlkeCA6IC0xO1xuICAgIH1cbiAgICAvLyBDYXNlIDI6IE11bHRpcGxlIGJyYW5jaGVzIGVuY29kZWQgaW4ganVtcCB0YWJsZVxuICAgIGlmIChqdW1wT2Zmc2V0KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGNoYXIgLSBqdW1wT2Zmc2V0O1xuICAgICAgICByZXR1cm4gdmFsdWUgPCAwIHx8IHZhbHVlID49IGJyYW5jaENvdW50XG4gICAgICAgICAgICA/IC0xXG4gICAgICAgICAgICA6IGRlY29kZVRyZWVbbm9kZUlkeCArIHZhbHVlXSAtIDE7XG4gICAgfVxuICAgIC8vIENhc2UgMzogTXVsdGlwbGUgYnJhbmNoZXMgZW5jb2RlZCBpbiBkaWN0aW9uYXJ5XG4gICAgLy8gQmluYXJ5IHNlYXJjaCBmb3IgdGhlIGNoYXJhY3Rlci5cbiAgICB2YXIgbG8gPSBub2RlSWR4O1xuICAgIHZhciBoaSA9IGxvICsgYnJhbmNoQ291bnQgLSAxO1xuICAgIHdoaWxlIChsbyA8PSBoaSkge1xuICAgICAgICB2YXIgbWlkID0gKGxvICsgaGkpID4+PiAxO1xuICAgICAgICB2YXIgbWlkVmFsID0gZGVjb2RlVHJlZVttaWRdO1xuICAgICAgICBpZiAobWlkVmFsIDwgY2hhcikge1xuICAgICAgICAgICAgbG8gPSBtaWQgKyAxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1pZFZhbCA+IGNoYXIpIHtcbiAgICAgICAgICAgIGhpID0gbWlkIC0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBkZWNvZGVUcmVlW21pZCArIGJyYW5jaENvdW50XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5leHBvcnRzLmRldGVybWluZUJyYW5jaCA9IGRldGVybWluZUJyYW5jaDtcbnZhciBodG1sRGVjb2RlciA9IGdldERlY29kZXIoZGVjb2RlX2RhdGFfaHRtbF9qc18xLmRlZmF1bHQpO1xudmFyIHhtbERlY29kZXIgPSBnZXREZWNvZGVyKGRlY29kZV9kYXRhX3htbF9qc18xLmRlZmF1bHQpO1xuLyoqXG4gKiBEZWNvZGVzIGFuIEhUTUwgc3RyaW5nLCBhbGxvd2luZyBmb3IgZW50aXRpZXMgbm90IHRlcm1pbmF0ZWQgYnkgYSBzZW1pLWNvbG9uLlxuICpcbiAqIEBwYXJhbSBzdHIgVGhlIHN0cmluZyB0byBkZWNvZGUuXG4gKiBAcmV0dXJucyBUaGUgZGVjb2RlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGRlY29kZUhUTUwoc3RyKSB7XG4gICAgcmV0dXJuIGh0bWxEZWNvZGVyKHN0ciwgZmFsc2UpO1xufVxuZXhwb3J0cy5kZWNvZGVIVE1MID0gZGVjb2RlSFRNTDtcbi8qKlxuICogRGVjb2RlcyBhbiBIVE1MIHN0cmluZywgcmVxdWlyaW5nIGFsbCBlbnRpdGllcyB0byBiZSB0ZXJtaW5hdGVkIGJ5IGEgc2VtaS1jb2xvbi5cbiAqXG4gKiBAcGFyYW0gc3RyIFRoZSBzdHJpbmcgdG8gZGVjb2RlLlxuICogQHJldHVybnMgVGhlIGRlY29kZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBkZWNvZGVIVE1MU3RyaWN0KHN0cikge1xuICAgIHJldHVybiBodG1sRGVjb2RlcihzdHIsIHRydWUpO1xufVxuZXhwb3J0cy5kZWNvZGVIVE1MU3RyaWN0ID0gZGVjb2RlSFRNTFN0cmljdDtcbi8qKlxuICogRGVjb2RlcyBhbiBYTUwgc3RyaW5nLCByZXF1aXJpbmcgYWxsIGVudGl0aWVzIHRvIGJlIHRlcm1pbmF0ZWQgYnkgYSBzZW1pLWNvbG9uLlxuICpcbiAqIEBwYXJhbSBzdHIgVGhlIHN0cmluZyB0byBkZWNvZGUuXG4gKiBAcmV0dXJucyBUaGUgZGVjb2RlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGRlY29kZVhNTChzdHIpIHtcbiAgICByZXR1cm4geG1sRGVjb2RlcihzdHIsIHRydWUpO1xufVxuZXhwb3J0cy5kZWNvZGVYTUwgPSBkZWNvZGVYTUw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWNvZGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBBZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvaGUvYmxvYi8zNmFmZTE3OTM5MjIyNmNmMWI2Y2NkYjE2ZWJiYjdhNWE4NDRkOTNhL3NyYy9oZS5qcyNMMTA2LUwxMzRcbnZhciBfYTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucmVwbGFjZUNvZGVQb2ludCA9IGV4cG9ydHMuZnJvbUNvZGVQb2ludCA9IHZvaWQgMDtcbnZhciBkZWNvZGVNYXAgPSBuZXcgTWFwKFtcbiAgICBbMCwgNjU1MzNdLFxuICAgIFsxMjgsIDgzNjRdLFxuICAgIFsxMzAsIDgyMThdLFxuICAgIFsxMzEsIDQwMl0sXG4gICAgWzEzMiwgODIyMl0sXG4gICAgWzEzMywgODIzMF0sXG4gICAgWzEzNCwgODIyNF0sXG4gICAgWzEzNSwgODIyNV0sXG4gICAgWzEzNiwgNzEwXSxcbiAgICBbMTM3LCA4MjQwXSxcbiAgICBbMTM4LCAzNTJdLFxuICAgIFsxMzksIDgyNDldLFxuICAgIFsxNDAsIDMzOF0sXG4gICAgWzE0MiwgMzgxXSxcbiAgICBbMTQ1LCA4MjE2XSxcbiAgICBbMTQ2LCA4MjE3XSxcbiAgICBbMTQ3LCA4MjIwXSxcbiAgICBbMTQ4LCA4MjIxXSxcbiAgICBbMTQ5LCA4MjI2XSxcbiAgICBbMTUwLCA4MjExXSxcbiAgICBbMTUxLCA4MjEyXSxcbiAgICBbMTUyLCA3MzJdLFxuICAgIFsxNTMsIDg0ODJdLFxuICAgIFsxNTQsIDM1M10sXG4gICAgWzE1NSwgODI1MF0sXG4gICAgWzE1NiwgMzM5XSxcbiAgICBbMTU4LCAzODJdLFxuICAgIFsxNTksIDM3Nl0sXG5dKTtcbmV4cG9ydHMuZnJvbUNvZGVQb2ludCA9IFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb24sIG5vZGUvbm8tdW5zdXBwb3J0ZWQtZmVhdHVyZXMvZXMtYnVpbHRpbnNcbihfYSA9IFN0cmluZy5mcm9tQ29kZVBvaW50KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmdW5jdGlvbiAoY29kZVBvaW50KSB7XG4gICAgdmFyIG91dHB1dCA9IFwiXCI7XG4gICAgaWYgKGNvZGVQb2ludCA+IDB4ZmZmZikge1xuICAgICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMDtcbiAgICAgICAgb3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKChjb2RlUG9pbnQgPj4+IDEwKSAmIDB4M2ZmKSB8IDB4ZDgwMCk7XG4gICAgICAgIGNvZGVQb2ludCA9IDB4ZGMwMCB8IChjb2RlUG9pbnQgJiAweDNmZik7XG4gICAgfVxuICAgIG91dHB1dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGVQb2ludCk7XG4gICAgcmV0dXJuIG91dHB1dDtcbn07XG5mdW5jdGlvbiByZXBsYWNlQ29kZVBvaW50KGNvZGVQb2ludCkge1xuICAgIHZhciBfYTtcbiAgICBpZiAoKGNvZGVQb2ludCA+PSAweGQ4MDAgJiYgY29kZVBvaW50IDw9IDB4ZGZmZikgfHwgY29kZVBvaW50ID4gMHgxMGZmZmYpIHtcbiAgICAgICAgcmV0dXJuIDB4ZmZmZDtcbiAgICB9XG4gICAgcmV0dXJuIChfYSA9IGRlY29kZU1hcC5nZXQoY29kZVBvaW50KSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogY29kZVBvaW50O1xufVxuZXhwb3J0cy5yZXBsYWNlQ29kZVBvaW50ID0gcmVwbGFjZUNvZGVQb2ludDtcbmZ1bmN0aW9uIGRlY29kZUNvZGVQb2ludChjb2RlUG9pbnQpIHtcbiAgICByZXR1cm4gKDAsIGV4cG9ydHMuZnJvbUNvZGVQb2ludCkocmVwbGFjZUNvZGVQb2ludChjb2RlUG9pbnQpKTtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IGRlY29kZUNvZGVQb2ludDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlY29kZV9jb2RlcG9pbnQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmVzY2FwZVRleHQgPSBleHBvcnRzLmVzY2FwZUF0dHJpYnV0ZSA9IGV4cG9ydHMuZXNjYXBlVVRGOCA9IGV4cG9ydHMuZXNjYXBlID0gZXhwb3J0cy5lbmNvZGVYTUwgPSBleHBvcnRzLmdldENvZGVQb2ludCA9IGV4cG9ydHMueG1sUmVwbGFjZXIgPSB2b2lkIDA7XG5leHBvcnRzLnhtbFJlcGxhY2VyID0gL1tcIiYnPD4kXFx4ODAtXFx1RkZGRl0vZztcbnZhciB4bWxDb2RlTWFwID0gbmV3IE1hcChbXG4gICAgWzM0LCBcIiZxdW90O1wiXSxcbiAgICBbMzgsIFwiJmFtcDtcIl0sXG4gICAgWzM5LCBcIiZhcG9zO1wiXSxcbiAgICBbNjAsIFwiJmx0O1wiXSxcbiAgICBbNjIsIFwiJmd0O1wiXSxcbl0pO1xuLy8gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub2RlIDwgNCwgd2Ugd3JhcCBgY29kZVBvaW50QXRgXG5leHBvcnRzLmdldENvZGVQb2ludCA9IFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb25cblN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXQgIT0gbnVsbFxuICAgID8gZnVuY3Rpb24gKHN0ciwgaW5kZXgpIHsgcmV0dXJuIHN0ci5jb2RlUG9pbnRBdChpbmRleCk7IH1cbiAgICA6IC8vIGh0dHA6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmcjc3Vycm9nYXRlLWZvcm11bGFlXG4gICAgICAgIGZ1bmN0aW9uIChjLCBpbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIChjLmNoYXJDb2RlQXQoaW5kZXgpICYgMHhmYzAwKSA9PT0gMHhkODAwXG4gICAgICAgICAgICAgICAgPyAoYy5jaGFyQ29kZUF0KGluZGV4KSAtIDB4ZDgwMCkgKiAweDQwMCArXG4gICAgICAgICAgICAgICAgICAgIGMuY2hhckNvZGVBdChpbmRleCArIDEpIC1cbiAgICAgICAgICAgICAgICAgICAgMHhkYzAwICtcbiAgICAgICAgICAgICAgICAgICAgMHgxMDAwMFxuICAgICAgICAgICAgICAgIDogYy5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgfTtcbi8qKlxuICogRW5jb2RlcyBhbGwgbm9uLUFTQ0lJIGNoYXJhY3RlcnMsIGFzIHdlbGwgYXMgY2hhcmFjdGVycyBub3QgdmFsaWQgaW4gWE1MXG4gKiBkb2N1bWVudHMgdXNpbmcgWE1MIGVudGl0aWVzLlxuICpcbiAqIElmIGEgY2hhcmFjdGVyIGhhcyBubyBlcXVpdmFsZW50IGVudGl0eSwgYVxuICogbnVtZXJpYyBoZXhhZGVjaW1hbCByZWZlcmVuY2UgKGVnLiBgJiN4ZmM7YCkgd2lsbCBiZSB1c2VkLlxuICovXG5mdW5jdGlvbiBlbmNvZGVYTUwoc3RyKSB7XG4gICAgdmFyIHJldCA9IFwiXCI7XG4gICAgdmFyIGxhc3RJZHggPSAwO1xuICAgIHZhciBtYXRjaDtcbiAgICB3aGlsZSAoKG1hdGNoID0gZXhwb3J0cy54bWxSZXBsYWNlci5leGVjKHN0cikpICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXg7XG4gICAgICAgIHZhciBjaGFyID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIHZhciBuZXh0ID0geG1sQ29kZU1hcC5nZXQoY2hhcik7XG4gICAgICAgIGlmIChuZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldCArPSBzdHIuc3Vic3RyaW5nKGxhc3RJZHgsIGkpICsgbmV4dDtcbiAgICAgICAgICAgIGxhc3RJZHggPSBpICsgMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldCArPSBcIlwiLmNvbmNhdChzdHIuc3Vic3RyaW5nKGxhc3RJZHgsIGkpLCBcIiYjeFwiKS5jb25jYXQoKDAsIGV4cG9ydHMuZ2V0Q29kZVBvaW50KShzdHIsIGkpLnRvU3RyaW5nKDE2KSwgXCI7XCIpO1xuICAgICAgICAgICAgLy8gSW5jcmVhc2UgYnkgMSBpZiB3ZSBoYXZlIGEgc3Vycm9nYXRlIHBhaXJcbiAgICAgICAgICAgIGxhc3RJZHggPSBleHBvcnRzLnhtbFJlcGxhY2VyLmxhc3RJbmRleCArPSBOdW1iZXIoKGNoYXIgJiAweGZjMDApID09PSAweGQ4MDApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQgKyBzdHIuc3Vic3RyKGxhc3RJZHgpO1xufVxuZXhwb3J0cy5lbmNvZGVYTUwgPSBlbmNvZGVYTUw7XG4vKipcbiAqIEVuY29kZXMgYWxsIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLCBhcyB3ZWxsIGFzIGNoYXJhY3RlcnMgbm90IHZhbGlkIGluIFhNTFxuICogZG9jdW1lbnRzIHVzaW5nIG51bWVyaWMgaGV4YWRlY2ltYWwgcmVmZXJlbmNlIChlZy4gYCYjeGZjO2ApLlxuICpcbiAqIEhhdmUgYSBsb29rIGF0IGBlc2NhcGVVVEY4YCBpZiB5b3Ugd2FudCBhIG1vcmUgY29uY2lzZSBvdXRwdXQgYXQgdGhlIGV4cGVuc2VcbiAqIG9mIHJlZHVjZWQgdHJhbnNwb3J0YWJpbGl0eS5cbiAqXG4gKiBAcGFyYW0gZGF0YSBTdHJpbmcgdG8gZXNjYXBlLlxuICovXG5leHBvcnRzLmVzY2FwZSA9IGVuY29kZVhNTDtcbmZ1bmN0aW9uIGdldEVzY2FwZXIocmVnZXgsIG1hcCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBlc2NhcGUoZGF0YSkge1xuICAgICAgICB2YXIgbWF0Y2g7XG4gICAgICAgIHZhciBsYXN0SWR4ID0gMDtcbiAgICAgICAgdmFyIHJlc3VsdCA9IFwiXCI7XG4gICAgICAgIHdoaWxlICgobWF0Y2ggPSByZWdleC5leGVjKGRhdGEpKSkge1xuICAgICAgICAgICAgaWYgKGxhc3RJZHggIT09IG1hdGNoLmluZGV4KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGRhdGEuc3Vic3RyaW5nKGxhc3RJZHgsIG1hdGNoLmluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIGNoYXJhcmN0ZXIgd2lsbCBiZSBpbiB0aGUgbWFwLlxuICAgICAgICAgICAgcmVzdWx0ICs9IG1hcC5nZXQobWF0Y2hbMF0uY2hhckNvZGVBdCgwKSk7XG4gICAgICAgICAgICAvLyBFdmVyeSBtYXRjaCB3aWxsIGJlIG9mIGxlbmd0aCAxXG4gICAgICAgICAgICBsYXN0SWR4ID0gbWF0Y2guaW5kZXggKyAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQgKyBkYXRhLnN1YnN0cmluZyhsYXN0SWR4KTtcbiAgICB9O1xufVxuLyoqXG4gKiBFbmNvZGVzIGFsbCBjaGFyYWN0ZXJzIG5vdCB2YWxpZCBpbiBYTUwgZG9jdW1lbnRzIHVzaW5nIFhNTCBlbnRpdGllcy5cbiAqXG4gKiBOb3RlIHRoYXQgdGhlIG91dHB1dCB3aWxsIGJlIGNoYXJhY3Rlci1zZXQgZGVwZW5kZW50LlxuICpcbiAqIEBwYXJhbSBkYXRhIFN0cmluZyB0byBlc2NhcGUuXG4gKi9cbmV4cG9ydHMuZXNjYXBlVVRGOCA9IGdldEVzY2FwZXIoL1smPD4nXCJdL2csIHhtbENvZGVNYXApO1xuLyoqXG4gKiBFbmNvZGVzIGFsbCBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSB0byBiZSBlc2NhcGVkIGluIEhUTUwgYXR0cmlidXRlcyxcbiAqIGZvbGxvd2luZyB7QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvcGFyc2luZy5odG1sI2VzY2FwaW5nU3RyaW5nfS5cbiAqXG4gKiBAcGFyYW0gZGF0YSBTdHJpbmcgdG8gZXNjYXBlLlxuICovXG5leHBvcnRzLmVzY2FwZUF0dHJpYnV0ZSA9IGdldEVzY2FwZXIoL1tcIiZcXHUwMEEwXS9nLCBuZXcgTWFwKFtcbiAgICBbMzQsIFwiJnF1b3Q7XCJdLFxuICAgIFszOCwgXCImYW1wO1wiXSxcbiAgICBbMTYwLCBcIiZuYnNwO1wiXSxcbl0pKTtcbi8qKlxuICogRW5jb2RlcyBhbGwgY2hhcmFjdGVycyB0aGF0IGhhdmUgdG8gYmUgZXNjYXBlZCBpbiBIVE1MIHRleHQsXG4gKiBmb2xsb3dpbmcge0BsaW5rIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3BhcnNpbmcuaHRtbCNlc2NhcGluZ1N0cmluZ30uXG4gKlxuICogQHBhcmFtIGRhdGEgU3RyaW5nIHRvIGVzY2FwZS5cbiAqL1xuZXhwb3J0cy5lc2NhcGVUZXh0ID0gZ2V0RXNjYXBlcigvWyY8PlxcdTAwQTBdL2csIG5ldyBNYXAoW1xuICAgIFszOCwgXCImYW1wO1wiXSxcbiAgICBbNjAsIFwiJmx0O1wiXSxcbiAgICBbNjIsIFwiJmd0O1wiXSxcbiAgICBbMTYwLCBcIiZuYnNwO1wiXSxcbl0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVzY2FwZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbi8vIEdlbmVyYXRlZCB1c2luZyBzY3JpcHRzL3dyaXRlLWRlY29kZS1tYXAudHNcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmYXVsdCA9IG5ldyBVaW50MTZBcnJheShcbi8vIHByZXR0aWVyLWlnbm9yZVxuXCJcXHUxZDQxPFxceGQ1XFx1MDEzMVxcdTAyOGFcXHUwNDlkXFx1MDU3YlxcdTA1ZDBcXHUwNjc1XFx1MDZkZVxcdTA3YTJcXHUwN2Q2XFx1MDgwZlxcdTBhNGFcXHUwYTkxXFx1MGRhMVxcdTBlNmRcXHUwZjA5XFx1MGYyNlxcdTEwY2FcXHUxMjI4XFx1MTJlMVxcdTE0MTVcXHUxNDlkXFx1MTRjM1xcdTE0ZGZcXHUxNTI1XFwwXFwwXFwwXFwwXFwwXFwwXFx1MTU2YlxcdTE2Y2RcXHUxOThkXFx1MWMxMlxcdTFkZGRcXHUxZjdlXFx1MjA2MFxcdTIxYjBcXHUyMjhkXFx1MjNjMFxcdTIzZmJcXHUyNDQyXFx1MjgyNFxcdTI5MTJcXHUyZDA4XFx1MmU0OFxcdTJmY2VcXHUzMDE2XFx1MzJiYVxcdTM2MzlcXHUzN2FjXFx1MzhmZVxcdTNhMjhcXHUzYTcxXFx1M2FlMFxcdTNiMmVcXHUwODAwRU1hYmNmZ2xtbm9wcnN0dVxcXFxiZm1zXFx4N2ZcXHg4NFxceDhiXFx4OTBcXHg5NVxceDk4XFx4YTZcXHhiM1xceGI5XFx4YzhcXHhjZmxpZ1xcdTgwM2JcXHhjNlxcdTQwYzZQXFx1ODAzYiZcXHU0MDI2Y3V0ZVxcdTgwM2JcXHhjMVxcdTQwYzFyZXZlO1xcdTQxMDJcXHUwMTAwaXl4fXJjXFx1ODAzYlxceGMyXFx1NDBjMjtcXHU0NDEwcjtcXHVjMDAwXFx1ZDgzNVxcdWRkMDRyYXZlXFx1ODAzYlxceGMwXFx1NDBjMHBoYTtcXHU0MzkxYWNyO1xcdTQxMDBkO1xcdTZhNTNcXHUwMTAwZ3BcXHg5ZFxceGExb247XFx1NDEwNGY7XFx1YzAwMFxcdWQ4MzVcXHVkZDM4cGx5RnVuY3Rpb247XFx1NjA2MWluZ1xcdTgwM2JcXHhjNVxcdTQwYzVcXHUwMTAwY3NcXHhiZVxceGMzcjtcXHVjMDAwXFx1ZDgzNVxcdWRjOWNpZ247XFx1NjI1NGlsZGVcXHU4MDNiXFx4YzNcXHU0MGMzbWxcXHU4MDNiXFx4YzRcXHU0MGM0XFx1MDQwMGFjZWZvcnN1XFx4ZTVcXHhmYlxceGZlXFx1MDExN1xcdTAxMWNcXHUwMTIyXFx1MDEyN1xcdTAxMmFcXHUwMTAwY3JcXHhlYVxceGYya3NsYXNoO1xcdTYyMTZcXHUwMTc2XFx4ZjZcXHhmODtcXHU2YWU3ZWQ7XFx1NjMwNnk7XFx1NDQxMVxcdTAxODBjcnRcXHUwMTA1XFx1MDEwYlxcdTAxMTRhdXNlO1xcdTYyMzVub3VsbGlzO1xcdTYxMmNhO1xcdTQzOTJyO1xcdWMwMDBcXHVkODM1XFx1ZGQwNXBmO1xcdWMwMDBcXHVkODM1XFx1ZGQzOWV2ZTtcXHU0MmQ4Y1xceGYyXFx1MDExM21wZXE7XFx1NjI0ZVxcdTA3MDBIT2FjZGVmaGlsb3JzdVxcdTAxNGRcXHUwMTUxXFx1MDE1NlxcdTAxODBcXHUwMTllXFx1MDFhMlxcdTAxYjVcXHUwMWI3XFx1MDFiYVxcdTAxZGNcXHUwMjE1XFx1MDI3M1xcdTAyNzhcXHUwMjdlY3k7XFx1NDQyN1BZXFx1ODAzYlxceGE5XFx1NDBhOVxcdTAxODBjcHlcXHUwMTVkXFx1MDE2MlxcdTAxN2F1dGU7XFx1NDEwNlxcdTAxMDA7aVxcdTAxNjdcXHUwMTY4XFx1NjJkMnRhbERpZmZlcmVudGlhbEQ7XFx1NjE0NWxleXM7XFx1NjEyZFxcdTAyMDBhZWlvXFx1MDE4OVxcdTAxOGVcXHUwMTk0XFx1MDE5OHJvbjtcXHU0MTBjZGlsXFx1ODAzYlxceGM3XFx1NDBjN3JjO1xcdTQxMDhuaW50O1xcdTYyMzBvdDtcXHU0MTBhXFx1MDEwMGRuXFx1MDFhN1xcdTAxYWRpbGxhO1xcdTQwYjh0ZXJEb3Q7XFx1NDBiN1xceGYyXFx1MDE3Zmk7XFx1NDNhN3JjbGVcXHUwMjAwRE1QVFxcdTAxYzdcXHUwMWNiXFx1MDFkMVxcdTAxZDZvdDtcXHU2Mjk5aW51cztcXHU2Mjk2bHVzO1xcdTYyOTVpbWVzO1xcdTYyOTdvXFx1MDEwMGNzXFx1MDFlMlxcdTAxZjhrd2lzZUNvbnRvdXJJbnRlZ3JhbDtcXHU2MjMyZUN1cmx5XFx1MDEwMERRXFx1MDIwM1xcdTAyMGZvdWJsZVF1b3RlO1xcdTYwMWR1b3RlO1xcdTYwMTlcXHUwMjAwbG5wdVxcdTAyMWVcXHUwMjI4XFx1MDI0N1xcdTAyNTVvblxcdTAxMDA7ZVxcdTAyMjVcXHUwMjI2XFx1NjIzNztcXHU2YTc0XFx1MDE4MGdpdFxcdTAyMmZcXHUwMjM2XFx1MDIzYXJ1ZW50O1xcdTYyNjFudDtcXHU2MjJmb3VySW50ZWdyYWw7XFx1NjIyZVxcdTAxMDBmclxcdTAyNGNcXHUwMjRlO1xcdTYxMDJvZHVjdDtcXHU2MjEwbnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbDtcXHU2MjMzb3NzO1xcdTZhMmZjcjtcXHVjMDAwXFx1ZDgzNVxcdWRjOWVwXFx1MDEwMDtDXFx1MDI4NFxcdTAyODVcXHU2MmQzYXA7XFx1NjI0ZFxcdTA1ODBESlNaYWNlZmlvc1xcdTAyYTBcXHUwMmFjXFx1MDJiMFxcdTAyYjRcXHUwMmI4XFx1MDJjYlxcdTAyZDdcXHUwMmUxXFx1MDJlNlxcdTAzMzNcXHUwNDhkXFx1MDEwMDtvXFx1MDE3OVxcdTAyYTV0cmFoZDtcXHU2OTExY3k7XFx1NDQwMmN5O1xcdTQ0MDVjeTtcXHU0NDBmXFx1MDE4MGdyc1xcdTAyYmZcXHUwMmM0XFx1MDJjN2dlcjtcXHU2MDIxcjtcXHU2MWExaHY7XFx1NmFlNFxcdTAxMDBheVxcdTAyZDBcXHUwMmQ1cm9uO1xcdTQxMGU7XFx1NDQxNGxcXHUwMTAwO3RcXHUwMmRkXFx1MDJkZVxcdTYyMDdhO1xcdTQzOTRyO1xcdWMwMDBcXHVkODM1XFx1ZGQwN1xcdTAxMDBhZlxcdTAyZWJcXHUwMzI3XFx1MDEwMGNtXFx1MDJmMFxcdTAzMjJyaXRpY2FsXFx1MDIwMEFER1RcXHUwMzAwXFx1MDMwNlxcdTAzMTZcXHUwMzFjY3V0ZTtcXHU0MGI0b1xcdTAxNzRcXHUwMzBiXFx1MDMwZDtcXHU0MmQ5YmxlQWN1dGU7XFx1NDJkZHJhdmU7XFx1NDA2MGlsZGU7XFx1NDJkY29uZDtcXHU2MmM0ZmVyZW50aWFsRDtcXHU2MTQ2XFx1MDQ3MFxcdTAzM2RcXDBcXDBcXDBcXHUwMzQyXFx1MDM1NFxcMFxcdTA0MDVmO1xcdWMwMDBcXHVkODM1XFx1ZGQzYlxcdTAxODA7REVcXHUwMzQ4XFx1MDM0OVxcdTAzNGRcXHU0MGE4b3Q7XFx1NjBkY3F1YWw7XFx1NjI1MGJsZVxcdTAzMDBDRExSVVZcXHUwMzYzXFx1MDM3MlxcdTAzODJcXHUwM2NmXFx1MDNlMlxcdTAzZjhvbnRvdXJJbnRlZ3JhXFx4ZWNcXHUwMjM5b1xcdTAyNzRcXHUwMzc5XFwwXFwwXFx1MDM3YlxceGJiXFx1MDM0OW5BcnJvdztcXHU2MWQzXFx1MDEwMGVvXFx1MDM4N1xcdTAzYTRmdFxcdTAxODBBUlRcXHUwMzkwXFx1MDM5NlxcdTAzYTFycm93O1xcdTYxZDBpZ2h0QXJyb3c7XFx1NjFkNGVcXHhlNVxcdTAyY2FuZ1xcdTAxMDBMUlxcdTAzYWJcXHUwM2M0ZWZ0XFx1MDEwMEFSXFx1MDNiM1xcdTAzYjlycm93O1xcdTY3ZjhpZ2h0QXJyb3c7XFx1NjdmYWlnaHRBcnJvdztcXHU2N2Y5aWdodFxcdTAxMDBBVFxcdTAzZDhcXHUwM2RlcnJvdztcXHU2MWQyZWU7XFx1NjJhOHBcXHUwMjQxXFx1MDNlOVxcMFxcMFxcdTAzZWZycm93O1xcdTYxZDFvd25BcnJvdztcXHU2MWQ1ZXJ0aWNhbEJhcjtcXHU2MjI1blxcdTAzMDBBQkxSVGFcXHUwNDEyXFx1MDQyYVxcdTA0MzBcXHUwNDVlXFx1MDQ3ZlxcdTAzN2Nycm93XFx1MDE4MDtCVVxcdTA0MWRcXHUwNDFlXFx1MDQyMlxcdTYxOTNhcjtcXHU2OTEzcEFycm93O1xcdTYxZjVyZXZlO1xcdTQzMTFlZnRcXHUwMmQyXFx1MDQzYVxcMFxcdTA0NDZcXDBcXHUwNDUwaWdodFZlY3RvcjtcXHU2OTUwZWVWZWN0b3I7XFx1Njk1ZWVjdG9yXFx1MDEwMDtCXFx1MDQ1OVxcdTA0NWFcXHU2MWJkYXI7XFx1Njk1NmlnaHRcXHUwMWQ0XFx1MDQ2N1xcMFxcdTA0NzFlZVZlY3RvcjtcXHU2OTVmZWN0b3JcXHUwMTAwO0JcXHUwNDdhXFx1MDQ3YlxcdTYxYzFhcjtcXHU2OTU3ZWVcXHUwMTAwO0FcXHUwNDg2XFx1MDQ4N1xcdTYyYTRycm93O1xcdTYxYTdcXHUwMTAwY3RcXHUwNDkyXFx1MDQ5N3I7XFx1YzAwMFxcdWQ4MzVcXHVkYzlmcm9rO1xcdTQxMTBcXHUwODAwTlRhY2RmZ2xtb3Bxc3R1eFxcdTA0YmRcXHUwNGMwXFx1MDRjNFxcdTA0Y2JcXHUwNGRlXFx1MDRlMlxcdTA0ZTdcXHUwNGVlXFx1MDRmNVxcdTA1MjFcXHUwNTJmXFx1MDUzNlxcdTA1NTJcXHUwNTVkXFx1MDU2MFxcdTA1NjVHO1xcdTQxNGFIXFx1ODAzYlxceGQwXFx1NDBkMGN1dGVcXHU4MDNiXFx4YzlcXHU0MGM5XFx1MDE4MGFpeVxcdTA0ZDJcXHUwNGQ3XFx1MDRkY3JvbjtcXHU0MTFhcmNcXHU4MDNiXFx4Y2FcXHU0MGNhO1xcdTQ0MmRvdDtcXHU0MTE2cjtcXHVjMDAwXFx1ZDgzNVxcdWRkMDhyYXZlXFx1ODAzYlxceGM4XFx1NDBjOGVtZW50O1xcdTYyMDhcXHUwMTAwYXBcXHUwNGZhXFx1MDRmZWNyO1xcdTQxMTJ0eVxcdTAyNTNcXHUwNTA2XFwwXFwwXFx1MDUxMm1hbGxTcXVhcmU7XFx1NjVmYmVyeVNtYWxsU3F1YXJlO1xcdTY1YWJcXHUwMTAwZ3BcXHUwNTI2XFx1MDUyYW9uO1xcdTQxMThmO1xcdWMwMDBcXHVkODM1XFx1ZGQzY3NpbG9uO1xcdTQzOTV1XFx1MDEwMGFpXFx1MDUzY1xcdTA1NDlsXFx1MDEwMDtUXFx1MDU0MlxcdTA1NDNcXHU2YTc1aWxkZTtcXHU2MjQybGlicml1bTtcXHU2MWNjXFx1MDEwMGNpXFx1MDU1N1xcdTA1NWFyO1xcdTYxMzBtO1xcdTZhNzNhO1xcdTQzOTdtbFxcdTgwM2JcXHhjYlxcdTQwY2JcXHUwMTAwaXBcXHUwNTZhXFx1MDU2ZnN0cztcXHU2MjAzb25lbnRpYWxFO1xcdTYxNDdcXHUwMjgwY2Zpb3NcXHUwNTg1XFx1MDU4OFxcdTA1OGRcXHUwNWIyXFx1MDVjY3k7XFx1NDQyNHI7XFx1YzAwMFxcdWQ4MzVcXHVkZDA5bGxlZFxcdTAyNTNcXHUwNTk3XFwwXFwwXFx1MDVhM21hbGxTcXVhcmU7XFx1NjVmY2VyeVNtYWxsU3F1YXJlO1xcdTY1YWFcXHUwMzcwXFx1MDViYVxcMFxcdTA1YmZcXDBcXDBcXHUwNWM0ZjtcXHVjMDAwXFx1ZDgzNVxcdWRkM2RBbGw7XFx1NjIwMHJpZXJ0cmY7XFx1NjEzMWNcXHhmMlxcdTA1Y2JcXHUwNjAwSlRhYmNkZmdvcnN0XFx1MDVlOFxcdTA1ZWNcXHUwNWVmXFx1MDVmYVxcdTA2MDBcXHUwNjEyXFx1MDYxNlxcdTA2MWJcXHUwNjFkXFx1MDYyM1xcdTA2NmNcXHUwNjcyY3k7XFx1NDQwM1xcdTgwM2I+XFx1NDAzZW1tYVxcdTAxMDA7ZFxcdTA1ZjdcXHUwNWY4XFx1NDM5MztcXHU0M2RjcmV2ZTtcXHU0MTFlXFx1MDE4MGVpeVxcdTA2MDdcXHUwNjBjXFx1MDYxMGRpbDtcXHU0MTIycmM7XFx1NDExYztcXHU0NDEzb3Q7XFx1NDEyMHI7XFx1YzAwMFxcdWQ4MzVcXHVkZDBhO1xcdTYyZDlwZjtcXHVjMDAwXFx1ZDgzNVxcdWRkM2VlYXRlclxcdTAzMDBFRkdMU1RcXHUwNjM1XFx1MDY0NFxcdTA2NGVcXHUwNjU2XFx1MDY1YlxcdTA2NjZxdWFsXFx1MDEwMDtMXFx1MDYzZVxcdTA2M2ZcXHU2MjY1ZXNzO1xcdTYyZGJ1bGxFcXVhbDtcXHU2MjY3cmVhdGVyO1xcdTZhYTJlc3M7XFx1NjI3N2xhbnRFcXVhbDtcXHU2YTdlaWxkZTtcXHU2MjczY3I7XFx1YzAwMFxcdWQ4MzVcXHVkY2EyO1xcdTYyNmJcXHUwNDAwQWFjZmlvc3VcXHUwNjg1XFx1MDY4YlxcdTA2OTZcXHUwNjliXFx1MDY5ZVxcdTA2YWFcXHUwNmJlXFx1MDZjYVJEY3k7XFx1NDQyYVxcdTAxMDBjdFxcdTA2OTBcXHUwNjk0ZWs7XFx1NDJjNztcXHU0MDVlaXJjO1xcdTQxMjRyO1xcdTYxMGNsYmVydFNwYWNlO1xcdTYxMGJcXHUwMWYwXFx1MDZhZlxcMFxcdTA2YjJmO1xcdTYxMGRpem9udGFsTGluZTtcXHU2NTAwXFx1MDEwMGN0XFx1MDZjM1xcdTA2YzVcXHhmMlxcdTA2YTlyb2s7XFx1NDEyNm1wXFx1MDE0NFxcdTA2ZDBcXHUwNmQ4b3duSHVtXFx4ZjBcXHUwMTJmcXVhbDtcXHU2MjRmXFx1MDcwMEVKT2FjZGZnbW5vc3R1XFx1MDZmYVxcdTA2ZmVcXHUwNzAzXFx1MDcwN1xcdTA3MGVcXHUwNzFhXFx1MDcxZVxcdTA3MjFcXHUwNzI4XFx1MDc0NFxcdTA3NzhcXHUwNzhiXFx1MDc4ZlxcdTA3OTVjeTtcXHU0NDE1bGlnO1xcdTQxMzJjeTtcXHU0NDAxY3V0ZVxcdTgwM2JcXHhjZFxcdTQwY2RcXHUwMTAwaXlcXHUwNzEzXFx1MDcxOHJjXFx1ODAzYlxceGNlXFx1NDBjZTtcXHU0NDE4b3Q7XFx1NDEzMHI7XFx1NjExMXJhdmVcXHU4MDNiXFx4Y2NcXHU0MGNjXFx1MDE4MDthcFxcdTA3MjBcXHUwNzJmXFx1MDczZlxcdTAxMDBjZ1xcdTA3MzRcXHUwNzM3cjtcXHU0MTJhaW5hcnlJO1xcdTYxNDhsaWVcXHhmM1xcdTAzZGRcXHUwMWY0XFx1MDc0OVxcMFxcdTA3NjJcXHUwMTAwO2VcXHUwNzRkXFx1MDc0ZVxcdTYyMmNcXHUwMTAwZ3JcXHUwNzUzXFx1MDc1OHJhbDtcXHU2MjJic2VjdGlvbjtcXHU2MmMyaXNpYmxlXFx1MDEwMENUXFx1MDc2Y1xcdTA3NzJvbW1hO1xcdTYwNjNpbWVzO1xcdTYwNjJcXHUwMTgwZ3B0XFx1MDc3ZlxcdTA3ODNcXHUwNzg4b247XFx1NDEyZWY7XFx1YzAwMFxcdWQ4MzVcXHVkZDQwYTtcXHU0Mzk5Y3I7XFx1NjExMGlsZGU7XFx1NDEyOFxcdTAxZWJcXHUwNzlhXFwwXFx1MDc5ZWN5O1xcdTQ0MDZsXFx1ODAzYlxceGNmXFx1NDBjZlxcdTAyODBjZm9zdVxcdTA3YWNcXHUwN2I3XFx1MDdiY1xcdTA3YzJcXHUwN2QwXFx1MDEwMGl5XFx1MDdiMVxcdTA3YjVyYztcXHU0MTM0O1xcdTQ0MTlyO1xcdWMwMDBcXHVkODM1XFx1ZGQwZHBmO1xcdWMwMDBcXHVkODM1XFx1ZGQ0MVxcdTAxZTNcXHUwN2M3XFwwXFx1MDdjY3I7XFx1YzAwMFxcdWQ4MzVcXHVkY2E1cmN5O1xcdTQ0MDhrY3k7XFx1NDQwNFxcdTAzODBISmFjZm9zXFx1MDdlNFxcdTA3ZThcXHUwN2VjXFx1MDdmMVxcdTA3ZmRcXHUwODAyXFx1MDgwOGN5O1xcdTQ0MjVjeTtcXHU0NDBjcHBhO1xcdTQzOWFcXHUwMTAwZXlcXHUwN2Y2XFx1MDdmYmRpbDtcXHU0MTM2O1xcdTQ0MWFyO1xcdWMwMDBcXHVkODM1XFx1ZGQwZXBmO1xcdWMwMDBcXHVkODM1XFx1ZGQ0MmNyO1xcdWMwMDBcXHVkODM1XFx1ZGNhNlxcdTA1ODBKVGFjZWZsbW9zdFxcdTA4MjVcXHUwODI5XFx1MDgyY1xcdTA4NTBcXHUwODYzXFx1MDliM1xcdTA5YjhcXHUwOWM3XFx1MDljZFxcdTBhMzdcXHUwYTQ3Y3k7XFx1NDQwOVxcdTgwM2I8XFx1NDAzY1xcdTAyODBjbW5wclxcdTA4MzdcXHUwODNjXFx1MDg0MVxcdTA4NDRcXHUwODRkdXRlO1xcdTQxMzliZGE7XFx1NDM5Ymc7XFx1NjdlYWxhY2V0cmY7XFx1NjExMnI7XFx1NjE5ZVxcdTAxODBhZXlcXHUwODU3XFx1MDg1Y1xcdTA4NjFyb247XFx1NDEzZGRpbDtcXHU0MTNiO1xcdTQ0MWJcXHUwMTAwZnNcXHUwODY4XFx1MDk3MHRcXHUwNTAwQUNERlJUVVZhclxcdTA4N2VcXHUwOGE5XFx1MDhiMVxcdTA4ZTBcXHUwOGU2XFx1MDhmY1xcdTA5MmZcXHUwOTViXFx1MDM5MFxcdTA5NmFcXHUwMTAwbnJcXHUwODgzXFx1MDg4ZmdsZUJyYWNrZXQ7XFx1NjdlOHJvd1xcdTAxODA7QlJcXHUwODk5XFx1MDg5YVxcdTA4OWVcXHU2MTkwYXI7XFx1NjFlNGlnaHRBcnJvdztcXHU2MWM2ZWlsaW5nO1xcdTYzMDhvXFx1MDFmNVxcdTA4YjdcXDBcXHUwOGMzYmxlQnJhY2tldDtcXHU2N2U2blxcdTAxZDRcXHUwOGM4XFwwXFx1MDhkMmVlVmVjdG9yO1xcdTY5NjFlY3RvclxcdTAxMDA7QlxcdTA4ZGJcXHUwOGRjXFx1NjFjM2FyO1xcdTY5NTlsb29yO1xcdTYzMGFpZ2h0XFx1MDEwMEFWXFx1MDhlZlxcdTA4ZjVycm93O1xcdTYxOTRlY3RvcjtcXHU2OTRlXFx1MDEwMGVyXFx1MDkwMVxcdTA5MTdlXFx1MDE4MDtBVlxcdTA5MDlcXHUwOTBhXFx1MDkxMFxcdTYyYTNycm93O1xcdTYxYTRlY3RvcjtcXHU2OTVhaWFuZ2xlXFx1MDE4MDtCRVxcdTA5MjRcXHUwOTI1XFx1MDkyOVxcdTYyYjJhcjtcXHU2OWNmcXVhbDtcXHU2MmI0cFxcdTAxODBEVFZcXHUwOTM3XFx1MDk0MlxcdTA5NGNvd25WZWN0b3I7XFx1Njk1MWVlVmVjdG9yO1xcdTY5NjBlY3RvclxcdTAxMDA7QlxcdTA5NTZcXHUwOTU3XFx1NjFiZmFyO1xcdTY5NThlY3RvclxcdTAxMDA7QlxcdTA5NjVcXHUwOTY2XFx1NjFiY2FyO1xcdTY5NTJpZ2h0XFx4ZTFcXHUwMzljc1xcdTAzMDBFRkdMU1RcXHUwOTdlXFx1MDk4YlxcdTA5OTVcXHUwOTlkXFx1MDlhMlxcdTA5YWRxdWFsR3JlYXRlcjtcXHU2MmRhdWxsRXF1YWw7XFx1NjI2NnJlYXRlcjtcXHU2Mjc2ZXNzO1xcdTZhYTFsYW50RXF1YWw7XFx1NmE3ZGlsZGU7XFx1NjI3MnI7XFx1YzAwMFxcdWQ4MzVcXHVkZDBmXFx1MDEwMDtlXFx1MDliZFxcdTA5YmVcXHU2MmQ4ZnRhcnJvdztcXHU2MWRhaWRvdDtcXHU0MTNmXFx1MDE4MG5wd1xcdTA5ZDRcXHUwYTE2XFx1MGExYmdcXHUwMjAwTFJsclxcdTA5ZGVcXHUwOWY3XFx1MGEwMlxcdTBhMTBlZnRcXHUwMTAwQVJcXHUwOWU2XFx1MDllY3Jyb3c7XFx1NjdmNWlnaHRBcnJvdztcXHU2N2Y3aWdodEFycm93O1xcdTY3ZjZlZnRcXHUwMTAwYXJcXHUwM2IzXFx1MGEwYWlnaHRcXHhlMVxcdTAzYmZpZ2h0XFx4ZTFcXHUwM2NhZjtcXHVjMDAwXFx1ZDgzNVxcdWRkNDNlclxcdTAxMDBMUlxcdTBhMjJcXHUwYTJjZWZ0QXJyb3c7XFx1NjE5OWlnaHRBcnJvdztcXHU2MTk4XFx1MDE4MGNodFxcdTBhM2VcXHUwYTQwXFx1MGE0MlxceGYyXFx1MDg0YztcXHU2MWIwcm9rO1xcdTQxNDE7XFx1NjI2YVxcdTA0MDBhY2VmaW9zdVxcdTBhNWFcXHUwYTVkXFx1MGE2MFxcdTBhNzdcXHUwYTdjXFx1MGE4NVxcdTBhOGJcXHUwYThlcDtcXHU2OTA1eTtcXHU0NDFjXFx1MDEwMGRsXFx1MGE2NVxcdTBhNmZpdW1TcGFjZTtcXHU2MDVmbGludHJmO1xcdTYxMzNyO1xcdWMwMDBcXHVkODM1XFx1ZGQxMG51c1BsdXM7XFx1NjIxM3BmO1xcdWMwMDBcXHVkODM1XFx1ZGQ0NGNcXHhmMlxcdTBhNzY7XFx1NDM5Y1xcdTA0ODBKYWNlZm9zdHVcXHUwYWEzXFx1MGFhN1xcdTBhYWRcXHUwYWMwXFx1MGIxNFxcdTBiMTlcXHUwZDkxXFx1MGQ5N1xcdTBkOWVjeTtcXHU0NDBhY3V0ZTtcXHU0MTQzXFx1MDE4MGFleVxcdTBhYjRcXHUwYWI5XFx1MGFiZXJvbjtcXHU0MTQ3ZGlsO1xcdTQxNDU7XFx1NDQxZFxcdTAxODBnc3dcXHUwYWM3XFx1MGFmMFxcdTBiMGVhdGl2ZVxcdTAxODBNVFZcXHUwYWQzXFx1MGFkZlxcdTBhZThlZGl1bVNwYWNlO1xcdTYwMGJoaVxcdTAxMDBjblxcdTBhZTZcXHUwYWQ4XFx4ZWJcXHUwYWQ5ZXJ5VGhpXFx4ZWVcXHUwYWQ5dGVkXFx1MDEwMEdMXFx1MGFmOFxcdTBiMDZyZWF0ZXJHcmVhdGVcXHhmMlxcdTA2NzNlc3NMZXNcXHhmM1xcdTBhNDhMaW5lO1xcdTQwMGFyO1xcdWMwMDBcXHVkODM1XFx1ZGQxMVxcdTAyMDBCbnB0XFx1MGIyMlxcdTBiMjhcXHUwYjM3XFx1MGIzYXJlYWs7XFx1NjA2MEJyZWFraW5nU3BhY2U7XFx1NDBhMGY7XFx1NjExNVxcdTA2ODA7Q0RFR0hMTlBSU1RWXFx1MGI1NVxcdTBiNTZcXHUwYjZhXFx1MGI3Y1xcdTBiYTFcXHUwYmViXFx1MGMwNFxcdTBjNWVcXHUwYzg0XFx1MGNhNlxcdTBjZDhcXHUwZDYxXFx1MGQ4NVxcdTZhZWNcXHUwMTAwb3VcXHUwYjViXFx1MGI2NG5ncnVlbnQ7XFx1NjI2MnBDYXA7XFx1NjI2ZG91YmxlVmVydGljYWxCYXI7XFx1NjIyNlxcdTAxODBscXhcXHUwYjgzXFx1MGI4YVxcdTBiOWJlbWVudDtcXHU2MjA5dWFsXFx1MDEwMDtUXFx1MGI5MlxcdTBiOTNcXHU2MjYwaWxkZTtcXHVjMDAwXFx1MjI0MlxcdTAzMzhpc3RzO1xcdTYyMDRyZWF0ZXJcXHUwMzgwO0VGR0xTVFxcdTBiYjZcXHUwYmI3XFx1MGJiZFxcdTBiYzlcXHUwYmQzXFx1MGJkOFxcdTBiZTVcXHU2MjZmcXVhbDtcXHU2MjcxdWxsRXF1YWw7XFx1YzAwMFxcdTIyNjdcXHUwMzM4cmVhdGVyO1xcdWMwMDBcXHUyMjZiXFx1MDMzOGVzcztcXHU2Mjc5bGFudEVxdWFsO1xcdWMwMDBcXHUyYTdlXFx1MDMzOGlsZGU7XFx1NjI3NXVtcFxcdTAxNDRcXHUwYmYyXFx1MGJmZG93bkh1bXA7XFx1YzAwMFxcdTIyNGVcXHUwMzM4cXVhbDtcXHVjMDAwXFx1MjI0ZlxcdTAzMzhlXFx1MDEwMGZzXFx1MGMwYVxcdTBjMjd0VHJpYW5nbGVcXHUwMTgwO0JFXFx1MGMxYVxcdTBjMWJcXHUwYzIxXFx1NjJlYWFyO1xcdWMwMDBcXHUyOWNmXFx1MDMzOHF1YWw7XFx1NjJlY3NcXHUwMzAwO0VHTFNUXFx1MGMzNVxcdTBjMzZcXHUwYzNjXFx1MGM0NFxcdTBjNGJcXHUwYzU4XFx1NjI2ZXF1YWw7XFx1NjI3MHJlYXRlcjtcXHU2Mjc4ZXNzO1xcdWMwMDBcXHUyMjZhXFx1MDMzOGxhbnRFcXVhbDtcXHVjMDAwXFx1MmE3ZFxcdTAzMzhpbGRlO1xcdTYyNzRlc3RlZFxcdTAxMDBHTFxcdTBjNjhcXHUwYzc5cmVhdGVyR3JlYXRlcjtcXHVjMDAwXFx1MmFhMlxcdTAzMzhlc3NMZXNzO1xcdWMwMDBcXHUyYWExXFx1MDMzOHJlY2VkZXNcXHUwMTgwO0VTXFx1MGM5MlxcdTBjOTNcXHUwYzliXFx1NjI4MHF1YWw7XFx1YzAwMFxcdTJhYWZcXHUwMzM4bGFudEVxdWFsO1xcdTYyZTBcXHUwMTAwZWlcXHUwY2FiXFx1MGNiOXZlcnNlRWxlbWVudDtcXHU2MjBjZ2h0VHJpYW5nbGVcXHUwMTgwO0JFXFx1MGNjYlxcdTBjY2NcXHUwY2QyXFx1NjJlYmFyO1xcdWMwMDBcXHUyOWQwXFx1MDMzOHF1YWw7XFx1NjJlZFxcdTAxMDBxdVxcdTBjZGRcXHUwZDBjdWFyZVN1XFx1MDEwMGJwXFx1MGNlOFxcdTBjZjlzZXRcXHUwMTAwO0VcXHUwY2YwXFx1MGNmM1xcdWMwMDBcXHUyMjhmXFx1MDMzOHF1YWw7XFx1NjJlMmVyc2V0XFx1MDEwMDtFXFx1MGQwM1xcdTBkMDZcXHVjMDAwXFx1MjI5MFxcdTAzMzhxdWFsO1xcdTYyZTNcXHUwMTgwYmNwXFx1MGQxM1xcdTBkMjRcXHUwZDRlc2V0XFx1MDEwMDtFXFx1MGQxYlxcdTBkMWVcXHVjMDAwXFx1MjI4MlxcdTIwZDJxdWFsO1xcdTYyODhjZWVkc1xcdTAyMDA7RVNUXFx1MGQzMlxcdTBkMzNcXHUwZDNiXFx1MGQ0NlxcdTYyODFxdWFsO1xcdWMwMDBcXHUyYWIwXFx1MDMzOGxhbnRFcXVhbDtcXHU2MmUxaWxkZTtcXHVjMDAwXFx1MjI3ZlxcdTAzMzhlcnNldFxcdTAxMDA7RVxcdTBkNThcXHUwZDViXFx1YzAwMFxcdTIyODNcXHUyMGQycXVhbDtcXHU2Mjg5aWxkZVxcdTAyMDA7RUZUXFx1MGQ2ZVxcdTBkNmZcXHUwZDc1XFx1MGQ3ZlxcdTYyNDFxdWFsO1xcdTYyNDR1bGxFcXVhbDtcXHU2MjQ3aWxkZTtcXHU2MjQ5ZXJ0aWNhbEJhcjtcXHU2MjI0Y3I7XFx1YzAwMFxcdWQ4MzVcXHVkY2E5aWxkZVxcdTgwM2JcXHhkMVxcdTQwZDE7XFx1NDM5ZFxcdTA3MDBFYWNkZmdtb3Byc3R1dlxcdTBkYmRcXHUwZGMyXFx1MGRjOVxcdTBkZDVcXHUwZGRiXFx1MGRlMFxcdTBkZTdcXHUwZGZjXFx1MGUwMlxcdTBlMjBcXHUwZTIyXFx1MGUzMlxcdTBlM2ZcXHUwZTQ0bGlnO1xcdTQxNTJjdXRlXFx1ODAzYlxceGQzXFx1NDBkM1xcdTAxMDBpeVxcdTBkY2VcXHUwZGQzcmNcXHU4MDNiXFx4ZDRcXHU0MGQ0O1xcdTQ0MWVibGFjO1xcdTQxNTByO1xcdWMwMDBcXHVkODM1XFx1ZGQxMnJhdmVcXHU4MDNiXFx4ZDJcXHU0MGQyXFx1MDE4MGFlaVxcdTBkZWVcXHUwZGYyXFx1MGRmNmNyO1xcdTQxNGNnYTtcXHU0M2E5Y3JvbjtcXHU0MzlmcGY7XFx1YzAwMFxcdWQ4MzVcXHVkZDQ2ZW5DdXJseVxcdTAxMDBEUVxcdTBlMGVcXHUwZTFhb3VibGVRdW90ZTtcXHU2MDFjdW90ZTtcXHU2MDE4O1xcdTZhNTRcXHUwMTAwY2xcXHUwZTI3XFx1MGUyY3I7XFx1YzAwMFxcdWQ4MzVcXHVkY2FhYXNoXFx1ODAzYlxceGQ4XFx1NDBkOGlcXHUwMTZjXFx1MGUzN1xcdTBlM2NkZVxcdTgwM2JcXHhkNVxcdTQwZDVlcztcXHU2YTM3bWxcXHU4MDNiXFx4ZDZcXHU0MGQ2ZXJcXHUwMTAwQlBcXHUwZTRiXFx1MGU2MFxcdTAxMDBhclxcdTBlNTBcXHUwZTUzcjtcXHU2MDNlYWNcXHUwMTAwZWtcXHUwZTVhXFx1MGU1YztcXHU2M2RlZXQ7XFx1NjNiNGFyZW50aGVzaXM7XFx1NjNkY1xcdTA0ODBhY2ZoaWxvcnNcXHUwZTdmXFx1MGU4N1xcdTBlOGFcXHUwZThmXFx1MGU5MlxcdTBlOTRcXHUwZTlkXFx1MGViMFxcdTBlZmNydGlhbEQ7XFx1NjIwMnk7XFx1NDQxZnI7XFx1YzAwMFxcdWQ4MzVcXHVkZDEzaTtcXHU0M2E2O1xcdTQzYTB1c01pbnVzO1xcdTQwYjFcXHUwMTAwaXBcXHUwZWEyXFx1MGVhZG5jYXJlcGxhblxceGU1XFx1MDY5ZGY7XFx1NjExOVxcdTAyMDA7ZWlvXFx1MGViOVxcdTBlYmFcXHUwZWUwXFx1MGVlNFxcdTZhYmJjZWRlc1xcdTAyMDA7RVNUXFx1MGVjOFxcdTBlYzlcXHUwZWNmXFx1MGVkYVxcdTYyN2FxdWFsO1xcdTZhYWZsYW50RXF1YWw7XFx1NjI3Y2lsZGU7XFx1NjI3ZW1lO1xcdTYwMzNcXHUwMTAwZHBcXHUwZWU5XFx1MGVlZXVjdDtcXHU2MjBmb3J0aW9uXFx1MDEwMDthXFx1MDIyNVxcdTBlZjlsO1xcdTYyMWRcXHUwMTAwY2lcXHUwZjAxXFx1MGYwNnI7XFx1YzAwMFxcdWQ4MzVcXHVkY2FiO1xcdTQzYThcXHUwMjAwVWZvc1xcdTBmMTFcXHUwZjE2XFx1MGYxYlxcdTBmMWZPVFxcdTgwM2JcXFwiXFx1NDAyMnI7XFx1YzAwMFxcdWQ4MzVcXHVkZDE0cGY7XFx1NjExYWNyO1xcdWMwMDBcXHVkODM1XFx1ZGNhY1xcdTA2MDBCRWFjZWZoaW9yc3VcXHUwZjNlXFx1MGY0M1xcdTBmNDdcXHUwZjYwXFx1MGY3M1xcdTBmYTdcXHUwZmFhXFx1MGZhZFxcdTEwOTZcXHUxMGE5XFx1MTBiNFxcdTEwYmVhcnI7XFx1NjkxMEdcXHU4MDNiXFx4YWVcXHU0MGFlXFx1MDE4MGNuclxcdTBmNGVcXHUwZjUzXFx1MGY1NnV0ZTtcXHU0MTU0ZztcXHU2N2ViclxcdTAxMDA7dFxcdTBmNWNcXHUwZjVkXFx1NjFhMGw7XFx1NjkxNlxcdTAxODBhZXlcXHUwZjY3XFx1MGY2Y1xcdTBmNzFyb247XFx1NDE1OGRpbDtcXHU0MTU2O1xcdTQ0MjBcXHUwMTAwO3ZcXHUwZjc4XFx1MGY3OVxcdTYxMWNlcnNlXFx1MDEwMEVVXFx1MGY4MlxcdTBmOTlcXHUwMTAwbHFcXHUwZjg3XFx1MGY4ZWVtZW50O1xcdTYyMGJ1aWxpYnJpdW07XFx1NjFjYnBFcXVpbGlicml1bTtcXHU2OTZmclxceGJiXFx1MGY3OW87XFx1NDNhMWdodFxcdTA0MDBBQ0RGVFVWYVxcdTBmYzFcXHUwZmViXFx1MGZmM1xcdTEwMjJcXHUxMDI4XFx1MTA1YlxcdTEwODdcXHUwM2Q4XFx1MDEwMG5yXFx1MGZjNlxcdTBmZDJnbGVCcmFja2V0O1xcdTY3ZTlyb3dcXHUwMTgwO0JMXFx1MGZkY1xcdTBmZGRcXHUwZmUxXFx1NjE5MmFyO1xcdTYxZTVlZnRBcnJvdztcXHU2MWM0ZWlsaW5nO1xcdTYzMDlvXFx1MDFmNVxcdTBmZjlcXDBcXHUxMDA1YmxlQnJhY2tldDtcXHU2N2U3blxcdTAxZDRcXHUxMDBhXFwwXFx1MTAxNGVlVmVjdG9yO1xcdTY5NWRlY3RvclxcdTAxMDA7QlxcdTEwMWRcXHUxMDFlXFx1NjFjMmFyO1xcdTY5NTVsb29yO1xcdTYzMGJcXHUwMTAwZXJcXHUxMDJkXFx1MTA0M2VcXHUwMTgwO0FWXFx1MTAzNVxcdTEwMzZcXHUxMDNjXFx1NjJhMnJyb3c7XFx1NjFhNmVjdG9yO1xcdTY5NWJpYW5nbGVcXHUwMTgwO0JFXFx1MTA1MFxcdTEwNTFcXHUxMDU1XFx1NjJiM2FyO1xcdTY5ZDBxdWFsO1xcdTYyYjVwXFx1MDE4MERUVlxcdTEwNjNcXHUxMDZlXFx1MTA3OG93blZlY3RvcjtcXHU2OTRmZWVWZWN0b3I7XFx1Njk1Y2VjdG9yXFx1MDEwMDtCXFx1MTA4MlxcdTEwODNcXHU2MWJlYXI7XFx1Njk1NGVjdG9yXFx1MDEwMDtCXFx1MTA5MVxcdTEwOTJcXHU2MWMwYXI7XFx1Njk1M1xcdTAxMDBwdVxcdTEwOWJcXHUxMDllZjtcXHU2MTFkbmRJbXBsaWVzO1xcdTY5NzBpZ2h0YXJyb3c7XFx1NjFkYlxcdTAxMDBjaFxcdTEwYjlcXHUxMGJjcjtcXHU2MTFiO1xcdTYxYjFsZURlbGF5ZWQ7XFx1NjlmNFxcdTA2ODBIT2FjZmhpbW9xc3R1XFx1MTBlNFxcdTEwZjFcXHUxMGY3XFx1MTBmZFxcdTExMTlcXHUxMTFlXFx1MTE1MVxcdTExNTZcXHUxMTYxXFx1MTE2N1xcdTExYjVcXHUxMWJiXFx1MTFiZlxcdTAxMDBDY1xcdTEwZTlcXHUxMGVlSGN5O1xcdTQ0Mjl5O1xcdTQ0MjhGVGN5O1xcdTQ0MmNjdXRlO1xcdTQxNWFcXHUwMjgwO2FlaXlcXHUxMTA4XFx1MTEwOVxcdTExMGVcXHUxMTEzXFx1MTExN1xcdTZhYmNyb247XFx1NDE2MGRpbDtcXHU0MTVlcmM7XFx1NDE1YztcXHU0NDIxcjtcXHVjMDAwXFx1ZDgzNVxcdWRkMTZvcnRcXHUwMjAwRExSVVxcdTExMmFcXHUxMTM0XFx1MTEzZVxcdTExNDlvd25BcnJvd1xceGJiXFx1MDQxZWVmdEFycm93XFx4YmJcXHUwODlhaWdodEFycm93XFx4YmJcXHUwZmRkcEFycm93O1xcdTYxOTFnbWE7XFx1NDNhM2FsbENpcmNsZTtcXHU2MjE4cGY7XFx1YzAwMFxcdWQ4MzVcXHVkZDRhXFx1MDI3MlxcdTExNmRcXDBcXDBcXHUxMTcwdDtcXHU2MjFhYXJlXFx1MDIwMDtJU1VcXHUxMTdiXFx1MTE3Y1xcdTExODlcXHUxMWFmXFx1NjVhMW50ZXJzZWN0aW9uO1xcdTYyOTN1XFx1MDEwMGJwXFx1MTE4ZlxcdTExOWVzZXRcXHUwMTAwO0VcXHUxMTk3XFx1MTE5OFxcdTYyOGZxdWFsO1xcdTYyOTFlcnNldFxcdTAxMDA7RVxcdTExYThcXHUxMWE5XFx1NjI5MHF1YWw7XFx1NjI5Mm5pb247XFx1NjI5NGNyO1xcdWMwMDBcXHVkODM1XFx1ZGNhZWFyO1xcdTYyYzZcXHUwMjAwYmNtcFxcdTExYzhcXHUxMWRiXFx1MTIwOVxcdTEyMGJcXHUwMTAwO3NcXHUxMWNkXFx1MTFjZVxcdTYyZDBldFxcdTAxMDA7RVxcdTExY2RcXHUxMWQ1cXVhbDtcXHU2Mjg2XFx1MDEwMGNoXFx1MTFlMFxcdTEyMDVlZWRzXFx1MDIwMDtFU1RcXHUxMWVkXFx1MTFlZVxcdTExZjRcXHUxMWZmXFx1NjI3YnF1YWw7XFx1NmFiMGxhbnRFcXVhbDtcXHU2MjdkaWxkZTtcXHU2MjdmVGhcXHhlMVxcdTBmOGM7XFx1NjIxMVxcdTAxODA7ZXNcXHUxMjEyXFx1MTIxM1xcdTEyMjNcXHU2MmQxcnNldFxcdTAxMDA7RVxcdTEyMWNcXHUxMjFkXFx1NjI4M3F1YWw7XFx1NjI4N2V0XFx4YmJcXHUxMjEzXFx1MDU4MEhSU2FjZmhpb3JzXFx1MTIzZVxcdTEyNDRcXHUxMjQ5XFx1MTI1NVxcdTEyNWVcXHUxMjcxXFx1MTI3NlxcdTEyOWZcXHUxMmMyXFx1MTJjOFxcdTEyZDFPUk5cXHU4MDNiXFx4ZGVcXHU0MGRlQURFO1xcdTYxMjJcXHUwMTAwSGNcXHUxMjRlXFx1MTI1MmN5O1xcdTQ0MGJ5O1xcdTQ0MjZcXHUwMTAwYnVcXHUxMjVhXFx1MTI1YztcXHU0MDA5O1xcdTQzYTRcXHUwMTgwYWV5XFx1MTI2NVxcdTEyNmFcXHUxMjZmcm9uO1xcdTQxNjRkaWw7XFx1NDE2MjtcXHU0NDIycjtcXHVjMDAwXFx1ZDgzNVxcdWRkMTdcXHUwMTAwZWlcXHUxMjdiXFx1MTI4OVxcdTAxZjJcXHUxMjgwXFwwXFx1MTI4N2Vmb3JlO1xcdTYyMzRhO1xcdTQzOThcXHUwMTAwY25cXHUxMjhlXFx1MTI5OGtTcGFjZTtcXHVjMDAwXFx1MjA1ZlxcdTIwMGFTcGFjZTtcXHU2MDA5bGRlXFx1MDIwMDtFRlRcXHUxMmFiXFx1MTJhY1xcdTEyYjJcXHUxMmJjXFx1NjIzY3F1YWw7XFx1NjI0M3VsbEVxdWFsO1xcdTYyNDVpbGRlO1xcdTYyNDhwZjtcXHVjMDAwXFx1ZDgzNVxcdWRkNGJpcGxlRG90O1xcdTYwZGJcXHUwMTAwY3RcXHUxMmQ2XFx1MTJkYnI7XFx1YzAwMFxcdWQ4MzVcXHVkY2Fmcm9rO1xcdTQxNjZcXHUwYWUxXFx1MTJmN1xcdTEzMGVcXHUxMzFhXFx1MTMyNlxcMFxcdTEzMmNcXHUxMzMxXFwwXFwwXFwwXFwwXFwwXFx1MTMzOFxcdTEzM2RcXHUxMzc3XFx1MTM4NVxcMFxcdTEzZmZcXHUxNDA0XFx1MTQwYVxcdTE0MTBcXHUwMTAwY3JcXHUxMmZiXFx1MTMwMXV0ZVxcdTgwM2JcXHhkYVxcdTQwZGFyXFx1MDEwMDtvXFx1MTMwN1xcdTEzMDhcXHU2MTlmY2lyO1xcdTY5NDlyXFx1MDFlM1xcdTEzMTNcXDBcXHUxMzE2eTtcXHU0NDBldmU7XFx1NDE2Y1xcdTAxMDBpeVxcdTEzMWVcXHUxMzIzcmNcXHU4MDNiXFx4ZGJcXHU0MGRiO1xcdTQ0MjNibGFjO1xcdTQxNzByO1xcdWMwMDBcXHVkODM1XFx1ZGQxOHJhdmVcXHU4MDNiXFx4ZDlcXHU0MGQ5YWNyO1xcdTQxNmFcXHUwMTAwZGlcXHUxMzQxXFx1MTM2OWVyXFx1MDEwMEJQXFx1MTM0OFxcdTEzNWRcXHUwMTAwYXJcXHUxMzRkXFx1MTM1MHI7XFx1NDA1ZmFjXFx1MDEwMGVrXFx1MTM1N1xcdTEzNTk7XFx1NjNkZmV0O1xcdTYzYjVhcmVudGhlc2lzO1xcdTYzZGRvblxcdTAxMDA7UFxcdTEzNzBcXHUxMzcxXFx1NjJjM2x1cztcXHU2MjhlXFx1MDEwMGdwXFx1MTM3YlxcdTEzN2ZvbjtcXHU0MTcyZjtcXHVjMDAwXFx1ZDgzNVxcdWRkNGNcXHUwNDAwQURFVGFkcHNcXHUxMzk1XFx1MTNhZVxcdTEzYjhcXHUxM2M0XFx1MDNlOFxcdTEzZDJcXHUxM2Q3XFx1MTNmM3Jyb3dcXHUwMTgwO0JEXFx1MTE1MFxcdTEzYTBcXHUxM2E0YXI7XFx1NjkxMm93bkFycm93O1xcdTYxYzVvd25BcnJvdztcXHU2MTk1cXVpbGlicml1bTtcXHU2OTZlZWVcXHUwMTAwO0FcXHUxM2NiXFx1MTNjY1xcdTYyYTVycm93O1xcdTYxYTVvd25cXHhlMVxcdTAzZjNlclxcdTAxMDBMUlxcdTEzZGVcXHUxM2U4ZWZ0QXJyb3c7XFx1NjE5NmlnaHRBcnJvdztcXHU2MTk3aVxcdTAxMDA7bFxcdTEzZjlcXHUxM2ZhXFx1NDNkMm9uO1xcdTQzYTVpbmc7XFx1NDE2ZWNyO1xcdWMwMDBcXHVkODM1XFx1ZGNiMGlsZGU7XFx1NDE2OG1sXFx1ODAzYlxceGRjXFx1NDBkY1xcdTA0ODBEYmNkZWZvc3ZcXHUxNDI3XFx1MTQyY1xcdTE0MzBcXHUxNDMzXFx1MTQzZVxcdTE0ODVcXHUxNDhhXFx1MTQ5MFxcdTE0OTZhc2g7XFx1NjJhYmFyO1xcdTZhZWJ5O1xcdTQ0MTJhc2hcXHUwMTAwO2xcXHUxNDNiXFx1MTQzY1xcdTYyYTk7XFx1NmFlNlxcdTAxMDBlclxcdTE0NDNcXHUxNDQ1O1xcdTYyYzFcXHUwMTgwYnR5XFx1MTQ0Y1xcdTE0NTBcXHUxNDdhYXI7XFx1NjAxNlxcdTAxMDA7aVxcdTE0NGZcXHUxNDU1Y2FsXFx1MDIwMEJMU1RcXHUxNDYxXFx1MTQ2NVxcdTE0NmFcXHUxNDc0YXI7XFx1NjIyM2luZTtcXHU0MDdjZXBhcmF0b3I7XFx1Njc1OGlsZGU7XFx1NjI0MFRoaW5TcGFjZTtcXHU2MDBhcjtcXHVjMDAwXFx1ZDgzNVxcdWRkMTlwZjtcXHVjMDAwXFx1ZDgzNVxcdWRkNGRjcjtcXHVjMDAwXFx1ZDgzNVxcdWRjYjFkYXNoO1xcdTYyYWFcXHUwMjgwY2Vmb3NcXHUxNGE3XFx1MTRhY1xcdTE0YjFcXHUxNGI2XFx1MTRiY2lyYztcXHU0MTc0ZGdlO1xcdTYyYzByO1xcdWMwMDBcXHVkODM1XFx1ZGQxYXBmO1xcdWMwMDBcXHVkODM1XFx1ZGQ0ZWNyO1xcdWMwMDBcXHVkODM1XFx1ZGNiMlxcdTAyMDBmaW9zXFx1MTRjYlxcdTE0ZDBcXHUxNGQyXFx1MTRkOHI7XFx1YzAwMFxcdWQ4MzVcXHVkZDFiO1xcdTQzOWVwZjtcXHVjMDAwXFx1ZDgzNVxcdWRkNGZjcjtcXHVjMDAwXFx1ZDgzNVxcdWRjYjNcXHUwNDgwQUlVYWNmb3N1XFx1MTRmMVxcdTE0ZjVcXHUxNGY5XFx1MTRmZFxcdTE1MDRcXHUxNTBmXFx1MTUxNFxcdTE1MWFcXHUxNTIwY3k7XFx1NDQyZmN5O1xcdTQ0MDdjeTtcXHU0NDJlY3V0ZVxcdTgwM2JcXHhkZFxcdTQwZGRcXHUwMTAwaXlcXHUxNTA5XFx1MTUwZHJjO1xcdTQxNzY7XFx1NDQyYnI7XFx1YzAwMFxcdWQ4MzVcXHVkZDFjcGY7XFx1YzAwMFxcdWQ4MzVcXHVkZDUwY3I7XFx1YzAwMFxcdWQ4MzVcXHVkY2I0bWw7XFx1NDE3OFxcdTA0MDBIYWNkZWZvc1xcdTE1MzVcXHUxNTM5XFx1MTUzZlxcdTE1NGJcXHUxNTRmXFx1MTU1ZFxcdTE1NjBcXHUxNTY0Y3k7XFx1NDQxNmN1dGU7XFx1NDE3OVxcdTAxMDBheVxcdTE1NDRcXHUxNTQ5cm9uO1xcdTQxN2Q7XFx1NDQxN290O1xcdTQxN2JcXHUwMWYyXFx1MTU1NFxcMFxcdTE1NWJvV2lkdFxceGU4XFx1MGFkOWE7XFx1NDM5NnI7XFx1NjEyOHBmO1xcdTYxMjRjcjtcXHVjMDAwXFx1ZDgzNVxcdWRjYjVcXHUwYmUxXFx1MTU4M1xcdTE1OGFcXHUxNTkwXFwwXFx1MTViMFxcdTE1YjZcXHUxNWJmXFwwXFwwXFwwXFwwXFx1MTVjNlxcdTE1ZGJcXHUxNWViXFx1MTY1ZlxcdTE2NmRcXDBcXHUxNjk1XFx1MTY5YlxcdTE2YjJcXHUxNmI5XFwwXFx1MTZiZWN1dGVcXHU4MDNiXFx4ZTFcXHU0MGUxcmV2ZTtcXHU0MTAzXFx1MDMwMDtFZGl1eVxcdTE1OWNcXHUxNTlkXFx1MTVhMVxcdTE1YTNcXHUxNWE4XFx1MTVhZFxcdTYyM2U7XFx1YzAwMFxcdTIyM2VcXHUwMzMzO1xcdTYyM2ZyY1xcdTgwM2JcXHhlMlxcdTQwZTJ0ZVxcdTgwYmJcXHhiNFxcdTAzMDY7XFx1NDQzMGxpZ1xcdTgwM2JcXHhlNlxcdTQwZTZcXHUwMTAwO3JcXHhiMlxcdTE1YmE7XFx1YzAwMFxcdWQ4MzVcXHVkZDFlcmF2ZVxcdTgwM2JcXHhlMFxcdTQwZTBcXHUwMTAwZXBcXHUxNWNhXFx1MTVkNlxcdTAxMDBmcFxcdTE1Y2ZcXHUxNWQ0c3ltO1xcdTYxMzVcXHhlOFxcdTE1ZDNoYTtcXHU0M2IxXFx1MDEwMGFwXFx1MTVkZmNcXHUwMTAwY2xcXHUxNWU0XFx1MTVlN3I7XFx1NDEwMWc7XFx1NmEzZlxcdTAyNjRcXHUxNWYwXFwwXFwwXFx1MTYwYVxcdTAyODA7YWRzdlxcdTE1ZmFcXHUxNWZiXFx1MTVmZlxcdTE2MDFcXHUxNjA3XFx1NjIyN25kO1xcdTZhNTU7XFx1NmE1Y2xvcGU7XFx1NmE1ODtcXHU2YTVhXFx1MDM4MDtlbG1yc3pcXHUxNjE4XFx1MTYxOVxcdTE2MWJcXHUxNjFlXFx1MTYzZlxcdTE2NGZcXHUxNjU5XFx1NjIyMDtcXHU2OWE0ZVxceGJiXFx1MTYxOXNkXFx1MDEwMDthXFx1MTYyNVxcdTE2MjZcXHU2MjIxXFx1MDQ2MVxcdTE2MzBcXHUxNjMyXFx1MTYzNFxcdTE2MzZcXHUxNjM4XFx1MTYzYVxcdTE2M2NcXHUxNjNlO1xcdTY5YTg7XFx1NjlhOTtcXHU2OWFhO1xcdTY5YWI7XFx1NjlhYztcXHU2OWFkO1xcdTY5YWU7XFx1NjlhZnRcXHUwMTAwO3ZcXHUxNjQ1XFx1MTY0NlxcdTYyMWZiXFx1MDEwMDtkXFx1MTY0Y1xcdTE2NGRcXHU2MmJlO1xcdTY5OWRcXHUwMTAwcHRcXHUxNjU0XFx1MTY1N2g7XFx1NjIyMlxceGJiXFx4YjlhcnI7XFx1NjM3Y1xcdTAxMDBncFxcdTE2NjNcXHUxNjY3b247XFx1NDEwNWY7XFx1YzAwMFxcdWQ4MzVcXHVkZDUyXFx1MDM4MDtFYWVpb3BcXHUxMmMxXFx1MTY3YlxcdTE2N2RcXHUxNjgyXFx1MTY4NFxcdTE2ODdcXHUxNjhhO1xcdTZhNzBjaXI7XFx1NmE2ZjtcXHU2MjRhZDtcXHU2MjRicztcXHU0MDI3cm94XFx1MDEwMDtlXFx1MTJjMVxcdTE2OTJcXHhmMVxcdTE2ODNpbmdcXHU4MDNiXFx4ZTVcXHU0MGU1XFx1MDE4MGN0eVxcdTE2YTFcXHUxNmE2XFx1MTZhOHI7XFx1YzAwMFxcdWQ4MzVcXHVkY2I2O1xcdTQwMmFtcFxcdTAxMDA7ZVxcdTEyYzFcXHUxNmFmXFx4ZjFcXHUwMjg4aWxkZVxcdTgwM2JcXHhlM1xcdTQwZTNtbFxcdTgwM2JcXHhlNFxcdTQwZTRcXHUwMTAwY2lcXHUxNmMyXFx1MTZjOG9uaW5cXHhmNFxcdTAyNzJudDtcXHU2YTExXFx1MDgwME5hYmNkZWZpa2xub3Byc3VcXHUxNmVkXFx1MTZmMVxcdTE3MzBcXHUxNzNjXFx1MTc0M1xcdTE3NDhcXHUxNzc4XFx1MTc3ZFxcdTE3ZTBcXHUxN2U2XFx1MTgzOVxcdTE4NTBcXHUxNzBkXFx1MTkzZFxcdTE5NDhcXHUxOTcwb3Q7XFx1NmFlZFxcdTAxMDBjclxcdTE2ZjZcXHUxNzFla1xcdTAyMDBjZXBzXFx1MTcwMFxcdTE3MDVcXHUxNzBkXFx1MTcxM29uZztcXHU2MjRjcHNpbG9uO1xcdTQzZjZyaW1lO1xcdTYwMzVpbVxcdTAxMDA7ZVxcdTE3MWFcXHUxNzFiXFx1NjIzZHE7XFx1NjJjZFxcdTAxNzZcXHUxNzIyXFx1MTcyNmVlO1xcdTYyYmRlZFxcdTAxMDA7Z1xcdTE3MmNcXHUxNzJkXFx1NjMwNWVcXHhiYlxcdTE3MmRya1xcdTAxMDA7dFxcdTEzNWNcXHUxNzM3YnJrO1xcdTYzYjZcXHUwMTAwb3lcXHUxNzAxXFx1MTc0MTtcXHU0NDMxcXVvO1xcdTYwMWVcXHUwMjgwY21wcnRcXHUxNzUzXFx1MTc1YlxcdTE3NjFcXHUxNzY0XFx1MTc2OGF1c1xcdTAxMDA7ZVxcdTAxMGFcXHUwMTA5cHR5djtcXHU2OWIwc1xceGU5XFx1MTcwY25vXFx4ZjVcXHUwMTEzXFx1MDE4MGFod1xcdTE3NmZcXHUxNzcxXFx1MTc3MztcXHU0M2IyO1xcdTYxMzZlZW47XFx1NjI2Y3I7XFx1YzAwMFxcdWQ4MzVcXHVkZDFmZ1xcdTAzODBjb3N0dXZ3XFx1MTc4ZFxcdTE3OWRcXHUxN2IzXFx1MTdjMVxcdTE3ZDVcXHUxN2RiXFx1MTdkZVxcdTAxODBhaXVcXHUxNzk0XFx1MTc5NlxcdTE3OWFcXHhmMFxcdTA3NjByYztcXHU2NWVmcFxceGJiXFx1MTM3MVxcdTAxODBkcHRcXHUxN2E0XFx1MTdhOFxcdTE3YWRvdDtcXHU2YTAwbHVzO1xcdTZhMDFpbWVzO1xcdTZhMDJcXHUwMjcxXFx1MTdiOVxcMFxcMFxcdTE3YmVjdXA7XFx1NmEwNmFyO1xcdTY2MDVyaWFuZ2xlXFx1MDEwMGR1XFx1MTdjZFxcdTE3ZDJvd247XFx1NjViZHA7XFx1NjViM3BsdXM7XFx1NmEwNGVcXHhlNVxcdTE0NDRcXHhlNVxcdTE0YWRhcm93O1xcdTY5MGRcXHUwMTgwYWtvXFx1MTdlZFxcdTE4MjZcXHUxODM1XFx1MDEwMGNuXFx1MTdmMlxcdTE4MjNrXFx1MDE4MGxzdFxcdTE3ZmFcXHUwNWFiXFx1MTgwMm96ZW5nZTtcXHU2OWVicmlhbmdsZVxcdTAyMDA7ZGxyXFx1MTgxMlxcdTE4MTNcXHUxODE4XFx1MTgxZFxcdTY1YjRvd247XFx1NjViZWVmdDtcXHU2NWMyaWdodDtcXHU2NWI4aztcXHU2NDIzXFx1MDFiMVxcdTE4MmJcXDBcXHUxODMzXFx1MDFiMlxcdTE4MmZcXDBcXHUxODMxO1xcdTY1OTI7XFx1NjU5MTQ7XFx1NjU5M2NrO1xcdTY1ODhcXHUwMTAwZW9cXHUxODNlXFx1MTg0ZFxcdTAxMDA7cVxcdTE4NDNcXHUxODQ2XFx1YzAwMD1cXHUyMGU1dWl2O1xcdWMwMDBcXHUyMjYxXFx1MjBlNXQ7XFx1NjMxMFxcdTAyMDBwdHd4XFx1MTg1OVxcdTE4NWVcXHUxODY3XFx1MTg2Y2Y7XFx1YzAwMFxcdWQ4MzVcXHVkZDUzXFx1MDEwMDt0XFx1MTNjYlxcdTE4NjNvbVxceGJiXFx1MTNjY3RpZTtcXHU2MmM4XFx1MDYwMERIVVZiZGhtcHR1dlxcdTE4ODVcXHUxODk2XFx1MThhYVxcdTE4YmJcXHUxOGQ3XFx1MThkYlxcdTE4ZWNcXHUxOGZmXFx1MTkwNVxcdTE5MGFcXHUxOTEwXFx1MTkyMVxcdTAyMDBMUmxyXFx1MTg4ZVxcdTE4OTBcXHUxODkyXFx1MTg5NDtcXHU2NTU3O1xcdTY1NTQ7XFx1NjU1NjtcXHU2NTUzXFx1MDI4MDtEVWR1XFx1MThhMVxcdTE4YTJcXHUxOGE0XFx1MThhNlxcdTE4YThcXHU2NTUwO1xcdTY1NjY7XFx1NjU2OTtcXHU2NTY0O1xcdTY1NjdcXHUwMjAwTFJsclxcdTE4YjNcXHUxOGI1XFx1MThiN1xcdTE4Yjk7XFx1NjU1ZDtcXHU2NTVhO1xcdTY1NWM7XFx1NjU1OVxcdTAzODA7SExSaGxyXFx1MThjYVxcdTE4Y2JcXHUxOGNkXFx1MThjZlxcdTE4ZDFcXHUxOGQzXFx1MThkNVxcdTY1NTE7XFx1NjU2YztcXHU2NTYzO1xcdTY1NjA7XFx1NjU2YjtcXHU2NTYyO1xcdTY1NWZveDtcXHU2OWM5XFx1MDIwMExSbHJcXHUxOGU0XFx1MThlNlxcdTE4ZThcXHUxOGVhO1xcdTY1NTU7XFx1NjU1MjtcXHU2NTEwO1xcdTY1MGNcXHUwMjgwO0RVZHVcXHUwNmJkXFx1MThmN1xcdTE4ZjlcXHUxOGZiXFx1MThmZDtcXHU2NTY1O1xcdTY1Njg7XFx1NjUyYztcXHU2NTM0aW51cztcXHU2MjlmbHVzO1xcdTYyOWVpbWVzO1xcdTYyYTBcXHUwMjAwTFJsclxcdTE5MTlcXHUxOTFiXFx1MTkxZFxcdTE5MWY7XFx1NjU1YjtcXHU2NTU4O1xcdTY1MTg7XFx1NjUxNFxcdTAzODA7SExSaGxyXFx1MTkzMFxcdTE5MzFcXHUxOTMzXFx1MTkzNVxcdTE5MzdcXHUxOTM5XFx1MTkzYlxcdTY1MDI7XFx1NjU2YTtcXHU2NTYxO1xcdTY1NWU7XFx1NjUzYztcXHU2NTI0O1xcdTY1MWNcXHUwMTAwZXZcXHUwMTIzXFx1MTk0MmJhclxcdTgwM2JcXHhhNlxcdTQwYTZcXHUwMjAwY2Vpb1xcdTE5NTFcXHUxOTU2XFx1MTk1YVxcdTE5NjByO1xcdWMwMDBcXHVkODM1XFx1ZGNiN21pO1xcdTYwNGZtXFx1MDEwMDtlXFx1MTcxYVxcdTE3MWNsXFx1MDE4MDtiaFxcdTE5NjhcXHUxOTY5XFx1MTk2YlxcdTQwNWM7XFx1NjljNXN1YjtcXHU2N2M4XFx1MDE2Y1xcdTE5NzRcXHUxOTdlbFxcdTAxMDA7ZVxcdTE5NzlcXHUxOTdhXFx1NjAyMnRcXHhiYlxcdTE5N2FwXFx1MDE4MDtFZVxcdTAxMmZcXHUxOTg1XFx1MTk4NztcXHU2YWFlXFx1MDEwMDtxXFx1MDZkY1xcdTA2ZGJcXHUwY2UxXFx1MTlhN1xcMFxcdTE5ZThcXHUxYTExXFx1MWExNVxcdTFhMzJcXDBcXHUxYTM3XFx1MWE1MFxcMFxcMFxcdTFhYjRcXDBcXDBcXHUxYWMxXFwwXFwwXFx1MWIyMVxcdTFiMmVcXHUxYjRkXFx1MWI1MlxcMFxcdTFiZmRcXDBcXHUxYzBjXFx1MDE4MGNwclxcdTE5YWRcXHUxOWIyXFx1MTlkZHV0ZTtcXHU0MTA3XFx1MDMwMDthYmNkc1xcdTE5YmZcXHUxOWMwXFx1MTljNFxcdTE5Y2FcXHUxOWQ1XFx1MTlkOVxcdTYyMjluZDtcXHU2YTQ0cmN1cDtcXHU2YTQ5XFx1MDEwMGF1XFx1MTljZlxcdTE5ZDJwO1xcdTZhNGJwO1xcdTZhNDdvdDtcXHU2YTQwO1xcdWMwMDBcXHUyMjI5XFx1ZmUwMFxcdTAxMDBlb1xcdTE5ZTJcXHUxOWU1dDtcXHU2MDQxXFx4ZWVcXHUwNjkzXFx1MDIwMGFlaXVcXHUxOWYwXFx1MTlmYlxcdTFhMDFcXHUxYTA1XFx1MDFmMFxcdTE5ZjVcXDBcXHUxOWY4cztcXHU2YTRkb247XFx1NDEwZGRpbFxcdTgwM2JcXHhlN1xcdTQwZTdyYztcXHU0MTA5cHNcXHUwMTAwO3NcXHUxYTBjXFx1MWEwZFxcdTZhNGNtO1xcdTZhNTBvdDtcXHU0MTBiXFx1MDE4MGRtblxcdTFhMWJcXHUxYTIwXFx1MWEyNmlsXFx1ODBiYlxceGI4XFx1MDFhZHB0eXY7XFx1NjliMnRcXHU4MTAwXFx4YTI7ZVxcdTFhMmRcXHUxYTJlXFx1NDBhMnJcXHhlNFxcdTAxYjJyO1xcdWMwMDBcXHVkODM1XFx1ZGQyMFxcdTAxODBjZWlcXHUxYTNkXFx1MWE0MFxcdTFhNGR5O1xcdTQ0NDdja1xcdTAxMDA7bVxcdTFhNDdcXHUxYTQ4XFx1NjcxM2Fya1xceGJiXFx1MWE0ODtcXHU0M2M3clxcdTAzODA7RWNlZm1zXFx1MWE1ZlxcdTFhNjBcXHUxYTYyXFx1MWE2YlxcdTFhYTRcXHUxYWFhXFx1MWFhZVxcdTY1Y2I7XFx1NjljM1xcdTAxODA7ZWxcXHUxYTY5XFx1MWE2YVxcdTFhNmRcXHU0MmM2cTtcXHU2MjU3ZVxcdTAyNjFcXHUxYTc0XFwwXFwwXFx1MWE4OHJyb3dcXHUwMTAwbHJcXHUxYTdjXFx1MWE4MWVmdDtcXHU2MWJhaWdodDtcXHU2MWJiXFx1MDI4MFJTYWNkXFx1MWE5MlxcdTFhOTRcXHUxYTk2XFx1MWE5YVxcdTFhOWZcXHhiYlxcdTBmNDc7XFx1NjRjOHN0O1xcdTYyOWJpcmM7XFx1NjI5YWFzaDtcXHU2MjlkbmludDtcXHU2YTEwaWQ7XFx1NmFlZmNpcjtcXHU2OWMydWJzXFx1MDEwMDt1XFx1MWFiYlxcdTFhYmNcXHU2NjYzaXRcXHhiYlxcdTFhYmNcXHUwMmVjXFx1MWFjN1xcdTFhZDRcXHUxYWZhXFwwXFx1MWIwYW9uXFx1MDEwMDtlXFx1MWFjZFxcdTFhY2VcXHU0MDNhXFx1MDEwMDtxXFx4YzdcXHhjNlxcdTAyNmRcXHUxYWQ5XFwwXFwwXFx1MWFlMmFcXHUwMTAwO3RcXHUxYWRlXFx1MWFkZlxcdTQwMmM7XFx1NDA0MFxcdTAxODA7ZmxcXHUxYWU4XFx1MWFlOVxcdTFhZWJcXHU2MjAxXFx4ZWVcXHUxMTYwZVxcdTAxMDBteFxcdTFhZjFcXHUxYWY2ZW50XFx4YmJcXHUxYWU5ZVxceGYzXFx1MDI0ZFxcdTAxZTdcXHUxYWZlXFwwXFx1MWIwN1xcdTAxMDA7ZFxcdTEyYmJcXHUxYjAyb3Q7XFx1NmE2ZG5cXHhmNFxcdTAyNDZcXHUwMTgwZnJ5XFx1MWIxMFxcdTFiMTRcXHUxYjE3O1xcdWMwMDBcXHVkODM1XFx1ZGQ1NG9cXHhlNFxcdTAyNTRcXHU4MTAwXFx4YTk7c1xcdTAxNTVcXHUxYjFkcjtcXHU2MTE3XFx1MDEwMGFvXFx1MWIyNVxcdTFiMjlycjtcXHU2MWI1c3M7XFx1NjcxN1xcdTAxMDBjdVxcdTFiMzJcXHUxYjM3cjtcXHVjMDAwXFx1ZDgzNVxcdWRjYjhcXHUwMTAwYnBcXHUxYjNjXFx1MWI0NFxcdTAxMDA7ZVxcdTFiNDFcXHUxYjQyXFx1NmFjZjtcXHU2YWQxXFx1MDEwMDtlXFx1MWI0OVxcdTFiNGFcXHU2YWQwO1xcdTZhZDJkb3Q7XFx1NjJlZlxcdTAzODBkZWxwcnZ3XFx1MWI2MFxcdTFiNmNcXHUxYjc3XFx1MWI4MlxcdTFiYWNcXHUxYmQ0XFx1MWJmOWFyclxcdTAxMDBsclxcdTFiNjhcXHUxYjZhO1xcdTY5Mzg7XFx1NjkzNVxcdTAyNzBcXHUxYjcyXFwwXFwwXFx1MWI3NXI7XFx1NjJkZWM7XFx1NjJkZmFyclxcdTAxMDA7cFxcdTFiN2ZcXHUxYjgwXFx1NjFiNjtcXHU2OTNkXFx1MDMwMDtiY2Rvc1xcdTFiOGZcXHUxYjkwXFx1MWI5NlxcdTFiYTFcXHUxYmE1XFx1MWJhOFxcdTYyMmFyY2FwO1xcdTZhNDhcXHUwMTAwYXVcXHUxYjliXFx1MWI5ZXA7XFx1NmE0NnA7XFx1NmE0YW90O1xcdTYyOGRyO1xcdTZhNDU7XFx1YzAwMFxcdTIyMmFcXHVmZTAwXFx1MDIwMGFscnZcXHUxYmI1XFx1MWJiZlxcdTFiZGVcXHUxYmUzcnJcXHUwMTAwO21cXHUxYmJjXFx1MWJiZFxcdTYxYjc7XFx1NjkzY3lcXHUwMTgwZXZ3XFx1MWJjN1xcdTFiZDRcXHUxYmQ4cVxcdTAyNzBcXHUxYmNlXFwwXFwwXFx1MWJkMnJlXFx4ZTNcXHUxYjczdVxceGUzXFx1MWI3NWVlO1xcdTYyY2VlZGdlO1xcdTYyY2ZlblxcdTgwM2JcXHhhNFxcdTQwYTRlYXJyb3dcXHUwMTAwbHJcXHUxYmVlXFx1MWJmM2VmdFxceGJiXFx1MWI4MGlnaHRcXHhiYlxcdTFiYmRlXFx4ZTRcXHUxYmRkXFx1MDEwMGNpXFx1MWMwMVxcdTFjMDdvbmluXFx4ZjRcXHUwMWY3bnQ7XFx1NjIzMWxjdHk7XFx1NjMyZFxcdTA5ODBBSGFiY2RlZmhpamxvcnN0dXd6XFx1MWMzOFxcdTFjM2JcXHUxYzNmXFx1MWM1ZFxcdTFjNjlcXHUxYzc1XFx1MWM4YVxcdTFjOWVcXHUxY2FjXFx1MWNiN1xcdTFjZmJcXHUxY2ZmXFx1MWQwZFxcdTFkN2JcXHUxZDkxXFx1MWRhYlxcdTFkYmJcXHUxZGM2XFx1MWRjZHJcXHhmMlxcdTAzODFhcjtcXHU2OTY1XFx1MDIwMGdscnNcXHUxYzQ4XFx1MWM0ZFxcdTFjNTJcXHUxYzU0Z2VyO1xcdTYwMjBldGg7XFx1NjEzOFxceGYyXFx1MTEzM2hcXHUwMTAwO3ZcXHUxYzVhXFx1MWM1YlxcdTYwMTBcXHhiYlxcdTA5MGFcXHUwMTZiXFx1MWM2MVxcdTFjNjdhcm93O1xcdTY5MGZhXFx4ZTNcXHUwMzE1XFx1MDEwMGF5XFx1MWM2ZVxcdTFjNzNyb247XFx1NDEwZjtcXHU0NDM0XFx1MDE4MDthb1xcdTAzMzJcXHUxYzdjXFx1MWM4NFxcdTAxMDBnclxcdTAyYmZcXHUxYzgxcjtcXHU2MWNhdHNlcTtcXHU2YTc3XFx1MDE4MGdsbVxcdTFjOTFcXHUxYzk0XFx1MWM5OFxcdTgwM2JcXHhiMFxcdTQwYjB0YTtcXHU0M2I0cHR5djtcXHU2OWIxXFx1MDEwMGlyXFx1MWNhM1xcdTFjYThzaHQ7XFx1Njk3ZjtcXHVjMDAwXFx1ZDgzNVxcdWRkMjFhclxcdTAxMDBsclxcdTFjYjNcXHUxY2I1XFx4YmJcXHUwOGRjXFx4YmJcXHUxMDFlXFx1MDI4MGFlZ3N2XFx1MWNjMlxcdTAzNzhcXHUxY2Q2XFx1MWNkY1xcdTFjZTBtXFx1MDE4MDtvc1xcdTAzMjZcXHUxY2NhXFx1MWNkNG5kXFx1MDEwMDtzXFx1MDMyNlxcdTFjZDF1aXQ7XFx1NjY2NmFtbWE7XFx1NDNkZGluO1xcdTYyZjJcXHUwMTgwO2lvXFx1MWNlN1xcdTFjZThcXHUxY2Y4XFx1NDBmN2RlXFx1ODEwMFxceGY3O29cXHUxY2U3XFx1MWNmMG50aW1lcztcXHU2MmM3blxceGY4XFx1MWNmN2N5O1xcdTQ0NTJjXFx1MDI2ZlxcdTFkMDZcXDBcXDBcXHUxZDBhcm47XFx1NjMxZW9wO1xcdTYzMGRcXHUwMjgwbHB0dXdcXHUxZDE4XFx1MWQxZFxcdTFkMjJcXHUxZDQ5XFx1MWQ1NWxhcjtcXHU0MDI0ZjtcXHVjMDAwXFx1ZDgzNVxcdWRkNTVcXHUwMjgwO2VtcHNcXHUwMzBiXFx1MWQyZFxcdTFkMzdcXHUxZDNkXFx1MWQ0MnFcXHUwMTAwO2RcXHUwMzUyXFx1MWQzM290O1xcdTYyNTFpbnVzO1xcdTYyMzhsdXM7XFx1NjIxNHF1YXJlO1xcdTYyYTFibGViYXJ3ZWRnXFx4ZTVcXHhmYW5cXHUwMTgwYWRoXFx1MTEyZVxcdTFkNWRcXHUxZDY3b3duYXJyb3dcXHhmM1xcdTFjODNhcnBvb25cXHUwMTAwbHJcXHUxZDcyXFx1MWQ3NmVmXFx4ZjRcXHUxY2I0aWdoXFx4ZjRcXHUxY2I2XFx1MDE2MlxcdTFkN2ZcXHUxZDg1a2Fyb1xceGY3XFx1MGY0MlxcdTAyNmZcXHUxZDhhXFwwXFwwXFx1MWQ4ZXJuO1xcdTYzMWZvcDtcXHU2MzBjXFx1MDE4MGNvdFxcdTFkOThcXHUxZGEzXFx1MWRhNlxcdTAxMDByeVxcdTFkOWRcXHUxZGExO1xcdWMwMDBcXHVkODM1XFx1ZGNiOTtcXHU0NDU1bDtcXHU2OWY2cm9rO1xcdTQxMTFcXHUwMTAwZHJcXHUxZGIwXFx1MWRiNG90O1xcdTYyZjFpXFx1MDEwMDtmXFx1MWRiYVxcdTE4MTZcXHU2NWJmXFx1MDEwMGFoXFx1MWRjMFxcdTFkYzNyXFx4ZjJcXHUwNDI5YVxceGYyXFx1MGZhNmFuZ2xlO1xcdTY5YTZcXHUwMTAwY2lcXHUxZGQyXFx1MWRkNXk7XFx1NDQ1ZmdyYXJyO1xcdTY3ZmZcXHUwOTAwRGFjZGVmZ2xtbm9wcXJzdHV4XFx1MWUwMVxcdTFlMDlcXHUxZTE5XFx1MWUzOFxcdTA1NzhcXHUxZTNjXFx1MWU0OVxcdTFlNjFcXHUxZTdlXFx1MWVhNVxcdTFlYWZcXHUxZWJkXFx1MWVlMVxcdTFmMmFcXHUxZjM3XFx1MWY0NFxcdTFmNGVcXHUxZjVhXFx1MDEwMERvXFx1MWUwNlxcdTFkMzRvXFx4ZjRcXHUxYzg5XFx1MDEwMGNzXFx1MWUwZVxcdTFlMTR1dGVcXHU4MDNiXFx4ZTlcXHU0MGU5dGVyO1xcdTZhNmVcXHUwMjAwYWlveVxcdTFlMjJcXHUxZTI3XFx1MWUzMVxcdTFlMzZyb247XFx1NDExYnJcXHUwMTAwO2NcXHUxZTJkXFx1MWUyZVxcdTYyNTZcXHU4MDNiXFx4ZWFcXHU0MGVhbG9uO1xcdTYyNTU7XFx1NDQ0ZG90O1xcdTQxMTdcXHUwMTAwRHJcXHUxZTQxXFx1MWU0NW90O1xcdTYyNTI7XFx1YzAwMFxcdWQ4MzVcXHVkZDIyXFx1MDE4MDtyc1xcdTFlNTBcXHUxZTUxXFx1MWU1N1xcdTZhOWFhdmVcXHU4MDNiXFx4ZThcXHU0MGU4XFx1MDEwMDtkXFx1MWU1Y1xcdTFlNWRcXHU2YTk2b3Q7XFx1NmE5OFxcdTAyMDA7aWxzXFx1MWU2YVxcdTFlNmJcXHUxZTcyXFx1MWU3NFxcdTZhOTludGVycztcXHU2M2U3O1xcdTYxMTNcXHUwMTAwO2RcXHUxZTc5XFx1MWU3YVxcdTZhOTVvdDtcXHU2YTk3XFx1MDE4MGFwc1xcdTFlODVcXHUxZTg5XFx1MWU5N2NyO1xcdTQxMTN0eVxcdTAxODA7c3ZcXHUxZTkyXFx1MWU5M1xcdTFlOTVcXHU2MjA1ZXRcXHhiYlxcdTFlOTNwXFx1MDEwMDE7XFx1MWU5ZFxcdTFlYTRcXHUwMTMzXFx1MWVhMVxcdTFlYTM7XFx1NjAwNDtcXHU2MDA1XFx1NjAwM1xcdTAxMDBnc1xcdTFlYWFcXHUxZWFjO1xcdTQxNGJwO1xcdTYwMDJcXHUwMTAwZ3BcXHUxZWI0XFx1MWViOG9uO1xcdTQxMTlmO1xcdWMwMDBcXHVkODM1XFx1ZGQ1NlxcdTAxODBhbHNcXHUxZWM0XFx1MWVjZVxcdTFlZDJyXFx1MDEwMDtzXFx1MWVjYVxcdTFlY2JcXHU2MmQ1bDtcXHU2OWUzdXM7XFx1NmE3MWlcXHUwMTgwO2x2XFx1MWVkYVxcdTFlZGJcXHUxZWRmXFx1NDNiNW9uXFx4YmJcXHUxZWRiO1xcdTQzZjVcXHUwMjAwY3N1dlxcdTFlZWFcXHUxZWYzXFx1MWYwYlxcdTFmMjNcXHUwMTAwaW9cXHUxZWVmXFx1MWUzMXJjXFx4YmJcXHUxZTJlXFx1MDI2OVxcdTFlZjlcXDBcXDBcXHUxZWZiXFx4ZWRcXHUwNTQ4YW50XFx1MDEwMGdsXFx1MWYwMlxcdTFmMDZ0clxceGJiXFx1MWU1ZGVzc1xceGJiXFx1MWU3YVxcdTAxODBhZWlcXHUxZjEyXFx1MWYxNlxcdTFmMWFscztcXHU0MDNkc3Q7XFx1NjI1ZnZcXHUwMTAwO0RcXHUwMjM1XFx1MWYyMEQ7XFx1NmE3OHBhcnNsO1xcdTY5ZTVcXHUwMTAwRGFcXHUxZjJmXFx1MWYzM290O1xcdTYyNTNycjtcXHU2OTcxXFx1MDE4MGNkaVxcdTFmM2VcXHUxZjQxXFx1MWVmOHI7XFx1NjEyZm9cXHhmNFxcdTAzNTJcXHUwMTAwYWhcXHUxZjQ5XFx1MWY0YjtcXHU0M2I3XFx1ODAzYlxceGYwXFx1NDBmMFxcdTAxMDBtclxcdTFmNTNcXHUxZjU3bFxcdTgwM2JcXHhlYlxcdTQwZWJvO1xcdTYwYWNcXHUwMTgwY2lwXFx1MWY2MVxcdTFmNjRcXHUxZjY3bDtcXHU0MDIxc1xceGY0XFx1MDU2ZVxcdTAxMDBlb1xcdTFmNmNcXHUxZjc0Y3RhdGlvXFx4ZWVcXHUwNTU5bmVudGlhbFxceGU1XFx1MDU3OVxcdTA5ZTFcXHUxZjkyXFwwXFx1MWY5ZVxcMFxcdTFmYTFcXHUxZmE3XFwwXFwwXFx1MWZjNlxcdTFmY2NcXDBcXHUxZmQzXFwwXFx1MWZlNlxcdTFmZWFcXHUyMDAwXFwwXFx1MjAwOFxcdTIwNWFsbGluZ2RvdHNlXFx4ZjFcXHUxZTQ0eTtcXHU0NDQ0bWFsZTtcXHU2NjQwXFx1MDE4MGlsclxcdTFmYWRcXHUxZmIzXFx1MWZjMWxpZztcXHU4MDAwXFx1ZmIwM1xcdTAyNjlcXHUxZmI5XFwwXFwwXFx1MWZiZGc7XFx1ODAwMFxcdWZiMDBpZztcXHU4MDAwXFx1ZmIwNDtcXHVjMDAwXFx1ZDgzNVxcdWRkMjNsaWc7XFx1ODAwMFxcdWZiMDFsaWc7XFx1YzAwMGZqXFx1MDE4MGFsdFxcdTFmZDlcXHUxZmRjXFx1MWZlMXQ7XFx1NjY2ZGlnO1xcdTgwMDBcXHVmYjAybnM7XFx1NjViMW9mO1xcdTQxOTJcXHUwMWYwXFx1MWZlZVxcMFxcdTFmZjNmO1xcdWMwMDBcXHVkODM1XFx1ZGQ1N1xcdTAxMDBha1xcdTA1YmZcXHUxZmY3XFx1MDEwMDt2XFx1MWZmY1xcdTFmZmRcXHU2MmQ0O1xcdTZhZDlhcnRpbnQ7XFx1NmEwZFxcdTAxMDBhb1xcdTIwMGNcXHUyMDU1XFx1MDEwMGNzXFx1MjAxMVxcdTIwNTJcXHUwM2IxXFx1MjAxYVxcdTIwMzBcXHUyMDM4XFx1MjA0NVxcdTIwNDhcXDBcXHUyMDUwXFx1MDNiMlxcdTIwMjJcXHUyMDI1XFx1MjAyN1xcdTIwMmFcXHUyMDJjXFwwXFx1MjAyZVxcdTgwM2JcXHhiZFxcdTQwYmQ7XFx1NjE1M1xcdTgwM2JcXHhiY1xcdTQwYmM7XFx1NjE1NTtcXHU2MTU5O1xcdTYxNWJcXHUwMWIzXFx1MjAzNFxcMFxcdTIwMzY7XFx1NjE1NDtcXHU2MTU2XFx1MDJiNFxcdTIwM2VcXHUyMDQxXFwwXFwwXFx1MjA0M1xcdTgwM2JcXHhiZVxcdTQwYmU7XFx1NjE1NztcXHU2MTVjNTtcXHU2MTU4XFx1MDFiNlxcdTIwNGNcXDBcXHUyMDRlO1xcdTYxNWE7XFx1NjE1ZDg7XFx1NjE1ZWw7XFx1NjA0NHduO1xcdTYzMjJjcjtcXHVjMDAwXFx1ZDgzNVxcdWRjYmJcXHUwODgwRWFiY2RlZmdpamxub3JzdHZcXHUyMDgyXFx1MjA4OVxcdTIwOWZcXHUyMGE1XFx1MjBiMFxcdTIwYjRcXHUyMGYwXFx1MjBmNVxcdTIwZmFcXHUyMGZmXFx1MjEwM1xcdTIxMTJcXHUyMTM4XFx1MDMxN1xcdTIxM2VcXHUyMTUyXFx1MjE5ZVxcdTAxMDA7bFxcdTA2NGRcXHUyMDg3O1xcdTZhOGNcXHUwMTgwY21wXFx1MjA5MFxcdTIwOTVcXHUyMDlkdXRlO1xcdTQxZjVtYVxcdTAxMDA7ZFxcdTIwOWNcXHUxY2RhXFx1NDNiMztcXHU2YTg2cmV2ZTtcXHU0MTFmXFx1MDEwMGl5XFx1MjBhYVxcdTIwYWVyYztcXHU0MTFkO1xcdTQ0MzNvdDtcXHU0MTIxXFx1MDIwMDtscXNcXHUwNjNlXFx1MDY0MlxcdTIwYmRcXHUyMGM5XFx1MDE4MDtxc1xcdTA2M2VcXHUwNjRjXFx1MjBjNGxhblxceGY0XFx1MDY2NVxcdTAyMDA7Y2RsXFx1MDY2NVxcdTIwZDJcXHUyMGQ1XFx1MjBlNWM7XFx1NmFhOW90XFx1MDEwMDtvXFx1MjBkY1xcdTIwZGRcXHU2YTgwXFx1MDEwMDtsXFx1MjBlMlxcdTIwZTNcXHU2YTgyO1xcdTZhODRcXHUwMTAwO2VcXHUyMGVhXFx1MjBlZFxcdWMwMDBcXHUyMmRiXFx1ZmUwMHM7XFx1NmE5NHI7XFx1YzAwMFxcdWQ4MzVcXHVkZDI0XFx1MDEwMDtnXFx1MDY3M1xcdTA2MWJtZWw7XFx1NjEzN2N5O1xcdTQ0NTNcXHUwMjAwO0VhalxcdTA2NWFcXHUyMTBjXFx1MjEwZVxcdTIxMTA7XFx1NmE5MjtcXHU2YWE1O1xcdTZhYTRcXHUwMjAwRWFlc1xcdTIxMWJcXHUyMTFkXFx1MjEyOVxcdTIxMzQ7XFx1NjI2OXBcXHUwMTAwO3BcXHUyMTIzXFx1MjEyNFxcdTZhOGFyb3hcXHhiYlxcdTIxMjRcXHUwMTAwO3FcXHUyMTJlXFx1MjEyZlxcdTZhODhcXHUwMTAwO3FcXHUyMTJlXFx1MjExYmltO1xcdTYyZTdwZjtcXHVjMDAwXFx1ZDgzNVxcdWRkNThcXHUwMTAwY2lcXHUyMTQzXFx1MjE0NnI7XFx1NjEwYW1cXHUwMTgwO2VsXFx1MDY2YlxcdTIxNGVcXHUyMTUwO1xcdTZhOGU7XFx1NmE5MFxcdTgzMDA+O2NkbHFyXFx1MDVlZVxcdTIxNjBcXHUyMTZhXFx1MjE2ZVxcdTIxNzNcXHUyMTc5XFx1MDEwMGNpXFx1MjE2NVxcdTIxNjc7XFx1NmFhN3I7XFx1NmE3YW90O1xcdTYyZDdQYXI7XFx1Njk5NXVlc3Q7XFx1NmE3Y1xcdTAyODBhZGVsc1xcdTIxODRcXHUyMTZhXFx1MjE5MFxcdTA2NTZcXHUyMTliXFx1MDFmMFxcdTIxODlcXDBcXHUyMThlcHJvXFx4ZjhcXHUyMDllcjtcXHU2OTc4cVxcdTAxMDBscVxcdTA2M2ZcXHUyMTk2bGVzXFx4ZjNcXHUyMDg4aVxceGVkXFx1MDY2YlxcdTAxMDBlblxcdTIxYTNcXHUyMWFkcnRuZXFxO1xcdWMwMDBcXHUyMjY5XFx1ZmUwMFxceGM1XFx1MjFhYVxcdTA1MDBBYWJjZWZrb3N5XFx1MjFjNFxcdTIxYzdcXHUyMWYxXFx1MjFmNVxcdTIxZmFcXHUyMjE4XFx1MjIxZFxcdTIyMmZcXHUyMjY4XFx1MjI3ZHJcXHhmMlxcdTAzYTBcXHUwMjAwaWxtclxcdTIxZDBcXHUyMWQ0XFx1MjFkN1xcdTIxZGJyc1xceGYwXFx1MTQ4NGZcXHhiYlxcdTIwMjRpbFxceGY0XFx1MDZhOVxcdTAxMDBkclxcdTIxZTBcXHUyMWU0Y3k7XFx1NDQ0YVxcdTAxODA7Y3dcXHUwOGY0XFx1MjFlYlxcdTIxZWZpcjtcXHU2OTQ4O1xcdTYxYWRhcjtcXHU2MTBmaXJjO1xcdTQxMjVcXHUwMTgwYWxyXFx1MjIwMVxcdTIyMGVcXHUyMjEzcnRzXFx1MDEwMDt1XFx1MjIwOVxcdTIyMGFcXHU2NjY1aXRcXHhiYlxcdTIyMGFsaXA7XFx1NjAyNmNvbjtcXHU2MmI5cjtcXHVjMDAwXFx1ZDgzNVxcdWRkMjVzXFx1MDEwMGV3XFx1MjIyM1xcdTIyMjlhcm93O1xcdTY5MjVhcm93O1xcdTY5MjZcXHUwMjgwYW1vcHJcXHUyMjNhXFx1MjIzZVxcdTIyNDNcXHUyMjVlXFx1MjI2M3JyO1xcdTYxZmZ0aHQ7XFx1NjIzYmtcXHUwMTAwbHJcXHUyMjQ5XFx1MjI1M2VmdGFycm93O1xcdTYxYTlpZ2h0YXJyb3c7XFx1NjFhYWY7XFx1YzAwMFxcdWQ4MzVcXHVkZDU5YmFyO1xcdTYwMTVcXHUwMTgwY2x0XFx1MjI2ZlxcdTIyNzRcXHUyMjc4cjtcXHVjMDAwXFx1ZDgzNVxcdWRjYmRhc1xceGU4XFx1MjFmNHJvaztcXHU0MTI3XFx1MDEwMGJwXFx1MjI4MlxcdTIyODd1bGw7XFx1NjA0M2hlblxceGJiXFx1MWM1YlxcdTBhZTFcXHUyMmEzXFwwXFx1MjJhYVxcMFxcdTIyYjhcXHUyMmM1XFx1MjJjZVxcMFxcdTIyZDVcXHUyMmYzXFwwXFwwXFx1MjJmOFxcdTIzMjJcXHUyMzY3XFx1MjM2MlxcdTIzN2ZcXDBcXHUyMzg2XFx1MjNhYVxcdTIzYjRjdXRlXFx1ODAzYlxceGVkXFx1NDBlZFxcdTAxODA7aXlcXHUwNzcxXFx1MjJiMFxcdTIyYjVyY1xcdTgwM2JcXHhlZVxcdTQwZWU7XFx1NDQzOFxcdTAxMDBjeFxcdTIyYmNcXHUyMmJmeTtcXHU0NDM1Y2xcXHU4MDNiXFx4YTFcXHU0MGExXFx1MDEwMGZyXFx1MDM5ZlxcdTIyYzk7XFx1YzAwMFxcdWQ4MzVcXHVkZDI2cmF2ZVxcdTgwM2JcXHhlY1xcdTQwZWNcXHUwMjAwO2lub1xcdTA3M2VcXHUyMmRkXFx1MjJlOVxcdTIyZWVcXHUwMTAwaW5cXHUyMmUyXFx1MjJlNm50O1xcdTZhMGN0O1xcdTYyMmRmaW47XFx1NjlkY3RhO1xcdTYxMjlsaWc7XFx1NDEzM1xcdTAxODBhb3BcXHUyMmZlXFx1MjMxYVxcdTIzMWRcXHUwMTgwY2d0XFx1MjMwNVxcdTIzMDhcXHUyMzE3cjtcXHU0MTJiXFx1MDE4MGVscFxcdTA3MWZcXHUyMzBmXFx1MjMxM2luXFx4ZTVcXHUwNzhlYXJcXHhmNFxcdTA3MjBoO1xcdTQxMzFmO1xcdTYyYjdlZDtcXHU0MWI1XFx1MDI4MDtjZm90XFx1MDRmNFxcdTIzMmNcXHUyMzMxXFx1MjMzZFxcdTIzNDFhcmU7XFx1NjEwNWluXFx1MDEwMDt0XFx1MjMzOFxcdTIzMzlcXHU2MjFlaWU7XFx1NjlkZGRvXFx4ZjRcXHUyMzE5XFx1MDI4MDtjZWxwXFx1MDc1N1xcdTIzNGNcXHUyMzUwXFx1MjM1YlxcdTIzNjFhbDtcXHU2MmJhXFx1MDEwMGdyXFx1MjM1NVxcdTIzNTllclxceGYzXFx1MTU2M1xceGUzXFx1MjM0ZGFyaGs7XFx1NmExN3JvZDtcXHU2YTNjXFx1MDIwMGNncHRcXHUyMzZmXFx1MjM3MlxcdTIzNzZcXHUyMzdieTtcXHU0NDUxb247XFx1NDEyZmY7XFx1YzAwMFxcdWQ4MzVcXHVkZDVhYTtcXHU0M2I5dWVzdFxcdTgwM2JcXHhiZlxcdTQwYmZcXHUwMTAwY2lcXHUyMzhhXFx1MjM4ZnI7XFx1YzAwMFxcdWQ4MzVcXHVkY2JlblxcdTAyODA7RWRzdlxcdTA0ZjRcXHUyMzliXFx1MjM5ZFxcdTIzYTFcXHUwNGYzO1xcdTYyZjlvdDtcXHU2MmY1XFx1MDEwMDt2XFx1MjNhNlxcdTIzYTdcXHU2MmY0O1xcdTYyZjNcXHUwMTAwO2lcXHUwNzc3XFx1MjNhZWxkZTtcXHU0MTI5XFx1MDFlYlxcdTIzYjhcXDBcXHUyM2JjY3k7XFx1NDQ1NmxcXHU4MDNiXFx4ZWZcXHU0MGVmXFx1MDMwMGNmbW9zdVxcdTIzY2NcXHUyM2Q3XFx1MjNkY1xcdTIzZTFcXHUyM2U3XFx1MjNmNVxcdTAxMDBpeVxcdTIzZDFcXHUyM2Q1cmM7XFx1NDEzNTtcXHU0NDM5cjtcXHVjMDAwXFx1ZDgzNVxcdWRkMjdhdGg7XFx1NDIzN3BmO1xcdWMwMDBcXHVkODM1XFx1ZGQ1YlxcdTAxZTNcXHUyM2VjXFwwXFx1MjNmMXI7XFx1YzAwMFxcdWQ4MzVcXHVkY2JmcmN5O1xcdTQ0NThrY3k7XFx1NDQ1NFxcdTA0MDBhY2ZnaGpvc1xcdTI0MGJcXHUyNDE2XFx1MjQyMlxcdTI0MjdcXHUyNDJkXFx1MjQzMVxcdTI0MzVcXHUyNDNicHBhXFx1MDEwMDt2XFx1MjQxM1xcdTI0MTRcXHU0M2JhO1xcdTQzZjBcXHUwMTAwZXlcXHUyNDFiXFx1MjQyMGRpbDtcXHU0MTM3O1xcdTQ0M2FyO1xcdWMwMDBcXHVkODM1XFx1ZGQyOHJlZW47XFx1NDEzOGN5O1xcdTQ0NDVjeTtcXHU0NDVjcGY7XFx1YzAwMFxcdWQ4MzVcXHVkZDVjY3I7XFx1YzAwMFxcdWQ4MzVcXHVkY2MwXFx1MGI4MEFCRUhhYmNkZWZnaGpsbW5vcHJzdHV2XFx1MjQ3MFxcdTI0ODFcXHUyNDg2XFx1MjQ4ZFxcdTI0OTFcXHUyNTBlXFx1MjUzZFxcdTI1NWFcXHUyNTgwXFx1MjY0ZVxcdTI2NWVcXHUyNjY1XFx1MjY3OVxcdTI2N2RcXHUyNjlhXFx1MjZiMlxcdTI2ZDhcXHUyNzVkXFx1Mjc2OFxcdTI3OGJcXHUyN2MwXFx1MjgwMVxcdTI4MTJcXHUwMTgwYXJ0XFx1MjQ3N1xcdTI0N2FcXHUyNDdjclxceGYyXFx1MDljNlxceGYyXFx1MDM5NWFpbDtcXHU2OTFiYXJyO1xcdTY5MGVcXHUwMTAwO2dcXHUwOTk0XFx1MjQ4YjtcXHU2YThiYXI7XFx1Njk2MlxcdTA5NjNcXHUyNGE1XFwwXFx1MjRhYVxcMFxcdTI0YjFcXDBcXDBcXDBcXDBcXDBcXHUyNGI1XFx1MjRiYVxcMFxcdTI0YzZcXHUyNGM4XFx1MjRjZFxcMFxcdTI0Zjl1dGU7XFx1NDEzYW1wdHl2O1xcdTY5YjRyYVxceGVlXFx1MDg0Y2JkYTtcXHU0M2JiZ1xcdTAxODA7ZGxcXHUwODhlXFx1MjRjMVxcdTI0YzM7XFx1Njk5MVxceGU1XFx1MDg4ZTtcXHU2YTg1dW9cXHU4MDNiXFx4YWJcXHU0MGFiclxcdTA0MDA7YmZobHBzdFxcdTA4OTlcXHUyNGRlXFx1MjRlNlxcdTI0ZTlcXHUyNGViXFx1MjRlZVxcdTI0ZjFcXHUyNGY1XFx1MDEwMDtmXFx1MDg5ZFxcdTI0ZTNzO1xcdTY5MWZzO1xcdTY5MWRcXHhlYlxcdTIyNTJwO1xcdTYxYWJsO1xcdTY5MzlpbTtcXHU2OTczbDtcXHU2MWEyXFx1MDE4MDthZVxcdTI0ZmZcXHUyNTAwXFx1MjUwNFxcdTZhYWJpbDtcXHU2OTE5XFx1MDEwMDtzXFx1MjUwOVxcdTI1MGFcXHU2YWFkO1xcdWMwMDBcXHUyYWFkXFx1ZmUwMFxcdTAxODBhYnJcXHUyNTE1XFx1MjUxOVxcdTI1MWRycjtcXHU2OTBjcms7XFx1Njc3MlxcdTAxMDBha1xcdTI1MjJcXHUyNTJjY1xcdTAxMDBla1xcdTI1MjhcXHUyNTJhO1xcdTQwN2I7XFx1NDA1YlxcdTAxMDBlc1xcdTI1MzFcXHUyNTMzO1xcdTY5OGJsXFx1MDEwMGR1XFx1MjUzOVxcdTI1M2I7XFx1Njk4ZjtcXHU2OThkXFx1MDIwMGFldXlcXHUyNTQ2XFx1MjU0YlxcdTI1NTZcXHUyNTU4cm9uO1xcdTQxM2VcXHUwMTAwZGlcXHUyNTUwXFx1MjU1NGlsO1xcdTQxM2NcXHhlY1xcdTA4YjBcXHhlMlxcdTI1Mjk7XFx1NDQzYlxcdTAyMDBjcXJzXFx1MjU2M1xcdTI1NjZcXHUyNTZkXFx1MjU3ZGE7XFx1NjkzNnVvXFx1MDEwMDtyXFx1MGUxOVxcdTE3NDZcXHUwMTAwZHVcXHUyNTcyXFx1MjU3N2hhcjtcXHU2OTY3c2hhcjtcXHU2OTRiaDtcXHU2MWIyXFx1MDI4MDtmZ3FzXFx1MjU4YlxcdTI1OGNcXHUwOTg5XFx1MjVmM1xcdTI1ZmZcXHU2MjY0dFxcdTAyODBhaGxydFxcdTI1OThcXHUyNWE0XFx1MjViN1xcdTI1YzJcXHUyNWU4cnJvd1xcdTAxMDA7dFxcdTA4OTlcXHUyNWExYVxceGU5XFx1MjRmNmFycG9vblxcdTAxMDBkdVxcdTI1YWZcXHUyNWI0b3duXFx4YmJcXHUwNDVhcFxceGJiXFx1MDk2NmVmdGFycm93cztcXHU2MWM3aWdodFxcdTAxODBhaHNcXHUyNWNkXFx1MjVkNlxcdTI1ZGVycm93XFx1MDEwMDtzXFx1MDhmNFxcdTA4YTdhcnBvb25cXHhmM1xcdTBmOThxdWlnYXJyb1xceGY3XFx1MjFmMGhyZWV0aW1lcztcXHU2MmNiXFx1MDE4MDtxc1xcdTI1OGJcXHUwOTkzXFx1MjVmYWxhblxceGY0XFx1MDlhY1xcdTAyODA7Y2Rnc1xcdTA5YWNcXHUyNjBhXFx1MjYwZFxcdTI2MWRcXHUyNjI4YztcXHU2YWE4b3RcXHUwMTAwO29cXHUyNjE0XFx1MjYxNVxcdTZhN2ZcXHUwMTAwO3JcXHUyNjFhXFx1MjYxYlxcdTZhODE7XFx1NmE4M1xcdTAxMDA7ZVxcdTI2MjJcXHUyNjI1XFx1YzAwMFxcdTIyZGFcXHVmZTAwcztcXHU2YTkzXFx1MDI4MGFkZWdzXFx1MjYzM1xcdTI2MzlcXHUyNjNkXFx1MjY0OVxcdTI2NGJwcHJvXFx4ZjhcXHUyNGM2b3Q7XFx1NjJkNnFcXHUwMTAwZ3FcXHUyNjQzXFx1MjY0NVxceGY0XFx1MDk4OWd0XFx4ZjJcXHUyNDhjXFx4ZjRcXHUwOTliaVxceGVkXFx1MDliMlxcdTAxODBpbHJcXHUyNjU1XFx1MDhlMVxcdTI2NWFzaHQ7XFx1Njk3YztcXHVjMDAwXFx1ZDgzNVxcdWRkMjlcXHUwMTAwO0VcXHUwOTljXFx1MjY2MztcXHU2YTkxXFx1MDE2MVxcdTI2NjlcXHUyNjc2clxcdTAxMDBkdVxcdTI1YjJcXHUyNjZlXFx1MDEwMDtsXFx1MDk2NVxcdTI2NzM7XFx1Njk2YWxrO1xcdTY1ODRjeTtcXHU0NDU5XFx1MDI4MDthY2h0XFx1MGE0OFxcdTI2ODhcXHUyNjhiXFx1MjY5MVxcdTI2OTZyXFx4ZjJcXHUyNWMxb3JuZVxceGYyXFx1MWQwOGFyZDtcXHU2OTZicmk7XFx1NjVmYVxcdTAxMDBpb1xcdTI2OWZcXHUyNmE0ZG90O1xcdTQxNDB1c3RcXHUwMTAwO2FcXHUyNmFjXFx1MjZhZFxcdTYzYjBjaGVcXHhiYlxcdTI2YWRcXHUwMjAwRWFlc1xcdTI2YmJcXHUyNmJkXFx1MjZjOVxcdTI2ZDQ7XFx1NjI2OHBcXHUwMTAwO3BcXHUyNmMzXFx1MjZjNFxcdTZhODlyb3hcXHhiYlxcdTI2YzRcXHUwMTAwO3FcXHUyNmNlXFx1MjZjZlxcdTZhODdcXHUwMTAwO3FcXHUyNmNlXFx1MjZiYmltO1xcdTYyZTZcXHUwNDAwYWJub3B0d3pcXHUyNmU5XFx1MjZmNFxcdTI2ZjdcXHUyNzFhXFx1MjcyZlxcdTI3NDFcXHUyNzQ3XFx1Mjc1MFxcdTAxMDBuclxcdTI2ZWVcXHUyNmYxZztcXHU2N2VjcjtcXHU2MWZkclxceGViXFx1MDhjMWdcXHUwMTgwbG1yXFx1MjZmZlxcdTI3MGRcXHUyNzE0ZWZ0XFx1MDEwMGFyXFx1MDllNlxcdTI3MDdpZ2h0XFx4ZTFcXHUwOWYyYXBzdG87XFx1NjdmY2lnaHRcXHhlMVxcdTA5ZmRwYXJyb3dcXHUwMTAwbHJcXHUyNzI1XFx1MjcyOWVmXFx4ZjRcXHUyNGVkaWdodDtcXHU2MWFjXFx1MDE4MGFmbFxcdTI3MzZcXHUyNzM5XFx1MjczZHI7XFx1Njk4NTtcXHVjMDAwXFx1ZDgzNVxcdWRkNWR1cztcXHU2YTJkaW1lcztcXHU2YTM0XFx1MDE2MVxcdTI3NGJcXHUyNzRmc3Q7XFx1NjIxN1xceGUxXFx1MTM0ZVxcdTAxODA7ZWZcXHUyNzU3XFx1Mjc1OFxcdTE4MDBcXHU2NWNhbmdlXFx4YmJcXHUyNzU4YXJcXHUwMTAwO2xcXHUyNzY0XFx1Mjc2NVxcdTQwMjh0O1xcdTY5OTNcXHUwMjgwYWNobXRcXHUyNzczXFx1Mjc3NlxcdTI3N2NcXHUyNzg1XFx1Mjc4N3JcXHhmMlxcdTA4YThvcm5lXFx4ZjJcXHUxZDhjYXJcXHUwMTAwO2RcXHUwZjk4XFx1Mjc4MztcXHU2OTZkO1xcdTYwMGVyaTtcXHU2MmJmXFx1MDMwMGFjaGlxdFxcdTI3OThcXHUyNzlkXFx1MGE0MFxcdTI3YTJcXHUyN2FlXFx1MjdiYnF1bztcXHU2MDM5cjtcXHVjMDAwXFx1ZDgzNVxcdWRjYzFtXFx1MDE4MDtlZ1xcdTA5YjJcXHUyN2FhXFx1MjdhYztcXHU2YThkO1xcdTZhOGZcXHUwMTAwYnVcXHUyNTJhXFx1MjdiM29cXHUwMTAwO3JcXHUwZTFmXFx1MjdiOTtcXHU2MDFhcm9rO1xcdTQxNDJcXHU4NDAwPDtjZGhpbHFyXFx1MDgyYlxcdTI3ZDJcXHUyNjM5XFx1MjdkY1xcdTI3ZTBcXHUyN2U1XFx1MjdlYVxcdTI3ZjBcXHUwMTAwY2lcXHUyN2Q3XFx1MjdkOTtcXHU2YWE2cjtcXHU2YTc5cmVcXHhlNVxcdTI1ZjJtZXM7XFx1NjJjOWFycjtcXHU2OTc2dWVzdDtcXHU2YTdiXFx1MDEwMFBpXFx1MjdmNVxcdTI3ZjlhcjtcXHU2OTk2XFx1MDE4MDtlZlxcdTI4MDBcXHUwOTJkXFx1MTgxYlxcdTY1YzNyXFx1MDEwMGR1XFx1MjgwN1xcdTI4MGRzaGFyO1xcdTY5NGFoYXI7XFx1Njk2NlxcdTAxMDBlblxcdTI4MTdcXHUyODIxcnRuZXFxO1xcdWMwMDBcXHUyMjY4XFx1ZmUwMFxceGM1XFx1MjgxZVxcdTA3MDBEYWNkZWZoaWxub3BzdVxcdTI4NDBcXHUyODQ1XFx1Mjg4MlxcdTI4OGVcXHUyODkzXFx1MjhhMFxcdTI4YTVcXHUyOGE4XFx1MjhkYVxcdTI4ZTJcXHUyOGU0XFx1MGE4M1xcdTI4ZjNcXHUyOTAyRG90O1xcdTYyM2FcXHUwMjAwY2xwclxcdTI4NGVcXHUyODUyXFx1Mjg2M1xcdTI4N2RyXFx1ODAzYlxceGFmXFx1NDBhZlxcdTAxMDBldFxcdTI4NTdcXHUyODU5O1xcdTY2NDJcXHUwMTAwO2VcXHUyODVlXFx1Mjg1ZlxcdTY3MjBzZVxceGJiXFx1Mjg1ZlxcdTAxMDA7c1xcdTEwM2JcXHUyODY4dG9cXHUwMjAwO2RsdVxcdTEwM2JcXHUyODczXFx1Mjg3N1xcdTI4N2Jvd1xceGVlXFx1MDQ4Y2VmXFx4ZjRcXHUwOTBmXFx4ZjBcXHUxM2Qxa2VyO1xcdTY1YWVcXHUwMTAwb3lcXHUyODg3XFx1Mjg4Y21tYTtcXHU2YTI5O1xcdTQ0M2Nhc2g7XFx1NjAxNGFzdXJlZGFuZ2xlXFx4YmJcXHUxNjI2cjtcXHVjMDAwXFx1ZDgzNVxcdWRkMmFvO1xcdTYxMjdcXHUwMTgwY2RuXFx1MjhhZlxcdTI4YjRcXHUyOGM5cm9cXHU4MDNiXFx4YjVcXHU0MGI1XFx1MDIwMDthY2RcXHUxNDY0XFx1MjhiZFxcdTI4YzBcXHUyOGM0c1xceGY0XFx1MTZhN2lyO1xcdTZhZjBvdFxcdTgwYmJcXHhiN1xcdTAxYjV1c1xcdTAxODA7YmRcXHUyOGQyXFx1MTkwM1xcdTI4ZDNcXHU2MjEyXFx1MDEwMDt1XFx1MWQzY1xcdTI4ZDg7XFx1NmEyYVxcdTAxNjNcXHUyOGRlXFx1MjhlMXA7XFx1NmFkYlxceGYyXFx1MjIxMlxceGYwXFx1MGE4MVxcdTAxMDBkcFxcdTI4ZTlcXHUyOGVlZWxzO1xcdTYyYTdmO1xcdWMwMDBcXHVkODM1XFx1ZGQ1ZVxcdTAxMDBjdFxcdTI4ZjhcXHUyOGZkcjtcXHVjMDAwXFx1ZDgzNVxcdWRjYzJwb3NcXHhiYlxcdTE1OWRcXHUwMTgwO2xtXFx1MjkwOVxcdTI5MGFcXHUyOTBkXFx1NDNiY3RpbWFwO1xcdTYyYjhcXHUwYzAwR0xSVmFiY2RlZmdoaWpsbW9wcnN0dXZ3XFx1Mjk0MlxcdTI5NTNcXHUyOTdlXFx1Mjk4OVxcdTI5OThcXHUyOWRhXFx1MjllOVxcdTJhMTVcXHUyYTFhXFx1MmE1OFxcdTJhNWRcXHUyYTgzXFx1MmE5NVxcdTJhYTRcXHUyYWE4XFx1MmIwNFxcdTJiMDdcXHUyYjQ0XFx1MmI3ZlxcdTJiYWVcXHUyYzM0XFx1MmM2N1xcdTJjN2NcXHUyY2U5XFx1MDEwMGd0XFx1Mjk0N1xcdTI5NGI7XFx1YzAwMFxcdTIyZDlcXHUwMzM4XFx1MDEwMDt2XFx1Mjk1MFxcdTBiY2ZcXHVjMDAwXFx1MjI2YlxcdTIwZDJcXHUwMTgwZWx0XFx1Mjk1YVxcdTI5NzJcXHUyOTc2ZnRcXHUwMTAwYXJcXHUyOTYxXFx1Mjk2N3Jyb3c7XFx1NjFjZGlnaHRhcnJvdztcXHU2MWNlO1xcdWMwMDBcXHUyMmQ4XFx1MDMzOFxcdTAxMDA7dlxcdTI5N2JcXHUwYzQ3XFx1YzAwMFxcdTIyNmFcXHUyMGQyaWdodGFycm93O1xcdTYxY2ZcXHUwMTAwRGRcXHUyOThlXFx1Mjk5M2FzaDtcXHU2MmFmYXNoO1xcdTYyYWVcXHUwMjgwYmNucHRcXHUyOWEzXFx1MjlhN1xcdTI5YWNcXHUyOWIxXFx1MjljY2xhXFx4YmJcXHUwMmRldXRlO1xcdTQxNDRnO1xcdWMwMDBcXHUyMjIwXFx1MjBkMlxcdTAyODA7RWlvcFxcdTBkODRcXHUyOWJjXFx1MjljMFxcdTI5YzVcXHUyOWM4O1xcdWMwMDBcXHUyYTcwXFx1MDMzOGQ7XFx1YzAwMFxcdTIyNGJcXHUwMzM4cztcXHU0MTQ5cm9cXHhmOFxcdTBkODR1clxcdTAxMDA7YVxcdTI5ZDNcXHUyOWQ0XFx1NjY2ZWxcXHUwMTAwO3NcXHUyOWQzXFx1MGIzOFxcdTAxZjNcXHUyOWRmXFwwXFx1MjllM3BcXHU4MGJiXFx4YTBcXHUwYjM3bXBcXHUwMTAwO2VcXHUwYmY5XFx1MGMwMFxcdTAyODBhZW91eVxcdTI5ZjRcXHUyOWZlXFx1MmEwM1xcdTJhMTBcXHUyYTEzXFx1MDFmMFxcdTI5ZjlcXDBcXHUyOWZiO1xcdTZhNDNvbjtcXHU0MTQ4ZGlsO1xcdTQxNDZuZ1xcdTAxMDA7ZFxcdTBkN2VcXHUyYTBhb3Q7XFx1YzAwMFxcdTJhNmRcXHUwMzM4cDtcXHU2YTQyO1xcdTQ0M2Rhc2g7XFx1NjAxM1xcdTAzODA7QWFkcXN4XFx1MGI5MlxcdTJhMjlcXHUyYTJkXFx1MmEzYlxcdTJhNDFcXHUyYTQ1XFx1MmE1MHJyO1xcdTYxZDdyXFx1MDEwMGhyXFx1MmEzM1xcdTJhMzZrO1xcdTY5MjRcXHUwMTAwO29cXHUxM2YyXFx1MTNmMG90O1xcdWMwMDBcXHUyMjUwXFx1MDMzOHVpXFx4ZjZcXHUwYjYzXFx1MDEwMGVpXFx1MmE0YVxcdTJhNGVhcjtcXHU2OTI4XFx4ZWRcXHUwYjk4aXN0XFx1MDEwMDtzXFx1MGJhMFxcdTBiOWZyO1xcdWMwMDBcXHVkODM1XFx1ZGQyYlxcdTAyMDBFZXN0XFx1MGJjNVxcdTJhNjZcXHUyYTc5XFx1MmE3Y1xcdTAxODA7cXNcXHUwYmJjXFx1MmE2ZFxcdTBiZTFcXHUwMTgwO3FzXFx1MGJiY1xcdTBiYzVcXHUyYTc0bGFuXFx4ZjRcXHUwYmUyaVxceGVkXFx1MGJlYVxcdTAxMDA7clxcdTBiYjZcXHUyYTgxXFx4YmJcXHUwYmI3XFx1MDE4MEFhcFxcdTJhOGFcXHUyYThkXFx1MmE5MXJcXHhmMlxcdTI5NzFycjtcXHU2MWFlYXI7XFx1NmFmMlxcdTAxODA7c3ZcXHUwZjhkXFx1MmE5Y1xcdTBmOGNcXHUwMTAwO2RcXHUyYWExXFx1MmFhMlxcdTYyZmM7XFx1NjJmYWN5O1xcdTQ0NWFcXHUwMzgwQUVhZGVzdFxcdTJhYjdcXHUyYWJhXFx1MmFiZVxcdTJhYzJcXHUyYWM1XFx1MmFmNlxcdTJhZjlyXFx4ZjJcXHUyOTY2O1xcdWMwMDBcXHUyMjY2XFx1MDMzOHJyO1xcdTYxOWFyO1xcdTYwMjVcXHUwMjAwO2Zxc1xcdTBjM2JcXHUyYWNlXFx1MmFlM1xcdTJhZWZ0XFx1MDEwMGFyXFx1MmFkNFxcdTJhZDlycm9cXHhmN1xcdTJhYzFpZ2h0YXJyb1xceGY3XFx1MmE5MFxcdTAxODA7cXNcXHUwYzNiXFx1MmFiYVxcdTJhZWFsYW5cXHhmNFxcdTBjNTVcXHUwMTAwO3NcXHUwYzU1XFx1MmFmNFxceGJiXFx1MGMzNmlcXHhlZFxcdTBjNWRcXHUwMTAwO3JcXHUwYzM1XFx1MmFmZWlcXHUwMTAwO2VcXHUwYzFhXFx1MGMyNWlcXHhlNFxcdTBkOTBcXHUwMTAwcHRcXHUyYjBjXFx1MmIxMWY7XFx1YzAwMFxcdWQ4MzVcXHVkZDVmXFx1ODE4MFxceGFjO2luXFx1MmIxOVxcdTJiMWFcXHUyYjM2XFx1NDBhY25cXHUwMjAwO0VkdlxcdTBiODlcXHUyYjI0XFx1MmIyOFxcdTJiMmU7XFx1YzAwMFxcdTIyZjlcXHUwMzM4b3Q7XFx1YzAwMFxcdTIyZjVcXHUwMzM4XFx1MDFlMVxcdTBiODlcXHUyYjMzXFx1MmIzNTtcXHU2MmY3O1xcdTYyZjZpXFx1MDEwMDt2XFx1MGNiOFxcdTJiM2NcXHUwMWUxXFx1MGNiOFxcdTJiNDFcXHUyYjQzO1xcdTYyZmU7XFx1NjJmZFxcdTAxODBhb3JcXHUyYjRiXFx1MmI2M1xcdTJiNjlyXFx1MDIwMDthc3RcXHUwYjdiXFx1MmI1NVxcdTJiNWFcXHUyYjVmbGxlXFx4ZWNcXHUwYjdibDtcXHVjMDAwXFx1MmFmZFxcdTIwZTU7XFx1YzAwMFxcdTIyMDJcXHUwMzM4bGludDtcXHU2YTE0XFx1MDE4MDtjZVxcdTBjOTJcXHUyYjcwXFx1MmI3M3VcXHhlNVxcdTBjYTVcXHUwMTAwO2NcXHUwYzk4XFx1MmI3OFxcdTAxMDA7ZVxcdTBjOTJcXHUyYjdkXFx4ZjFcXHUwYzk4XFx1MDIwMEFhaXRcXHUyYjg4XFx1MmI4YlxcdTJiOWRcXHUyYmE3clxceGYyXFx1Mjk4OHJyXFx1MDE4MDtjd1xcdTJiOTRcXHUyYjk1XFx1MmI5OVxcdTYxOWI7XFx1YzAwMFxcdTI5MzNcXHUwMzM4O1xcdWMwMDBcXHUyMTlkXFx1MDMzOGdodGFycm93XFx4YmJcXHUyYjk1cmlcXHUwMTAwO2VcXHUwY2NiXFx1MGNkNlxcdTAzODBjaGltcHF1XFx1MmJiZFxcdTJiY2RcXHUyYmQ5XFx1MmIwNFxcdTBiNzhcXHUyYmU0XFx1MmJlZlxcdTAyMDA7Y2VyXFx1MGQzMlxcdTJiYzZcXHUwZDM3XFx1MmJjOXVcXHhlNVxcdTBkNDU7XFx1YzAwMFxcdWQ4MzVcXHVkY2Mzb3J0XFx1MDI2ZFxcdTJiMDVcXDBcXDBcXHUyYmQ2YXJcXHhlMVxcdTJiNTZtXFx1MDEwMDtlXFx1MGQ2ZVxcdTJiZGZcXHUwMTAwO3FcXHUwZDc0XFx1MGQ3M3N1XFx1MDEwMGJwXFx1MmJlYlxcdTJiZWRcXHhlNVxcdTBjZjhcXHhlNVxcdTBkMGJcXHUwMTgwYmNwXFx1MmJmNlxcdTJjMTFcXHUyYzE5XFx1MDIwMDtFZXNcXHUyYmZmXFx1MmMwMFxcdTBkMjJcXHUyYzA0XFx1NjI4NDtcXHVjMDAwXFx1MmFjNVxcdTAzMzhldFxcdTAxMDA7ZVxcdTBkMWJcXHUyYzBicVxcdTAxMDA7cVxcdTBkMjNcXHUyYzAwY1xcdTAxMDA7ZVxcdTBkMzJcXHUyYzE3XFx4ZjFcXHUwZDM4XFx1MDIwMDtFZXNcXHUyYzIyXFx1MmMyM1xcdTBkNWZcXHUyYzI3XFx1NjI4NTtcXHVjMDAwXFx1MmFjNlxcdTAzMzhldFxcdTAxMDA7ZVxcdTBkNThcXHUyYzJlcVxcdTAxMDA7cVxcdTBkNjBcXHUyYzIzXFx1MDIwMGdpbHJcXHUyYzNkXFx1MmMzZlxcdTJjNDVcXHUyYzQ3XFx4ZWNcXHUwYmQ3bGRlXFx1ODAzYlxceGYxXFx1NDBmMVxceGU3XFx1MGM0M2lhbmdsZVxcdTAxMDBsclxcdTJjNTJcXHUyYzVjZWZ0XFx1MDEwMDtlXFx1MGMxYVxcdTJjNWFcXHhmMVxcdTBjMjZpZ2h0XFx1MDEwMDtlXFx1MGNjYlxcdTJjNjVcXHhmMVxcdTBjZDdcXHUwMTAwO21cXHUyYzZjXFx1MmM2ZFxcdTQzYmRcXHUwMTgwO2VzXFx1MmM3NFxcdTJjNzVcXHUyYzc5XFx1NDAyM3JvO1xcdTYxMTZwO1xcdTYwMDdcXHUwNDgwREhhZGdpbHJzXFx1MmM4ZlxcdTJjOTRcXHUyYzk5XFx1MmM5ZVxcdTJjYTNcXHUyY2IwXFx1MmNiNlxcdTJjZDNcXHUyY2UzYXNoO1xcdTYyYWRhcnI7XFx1NjkwNHA7XFx1YzAwMFxcdTIyNGRcXHUyMGQyYXNoO1xcdTYyYWNcXHUwMTAwZXRcXHUyY2E4XFx1MmNhYztcXHVjMDAwXFx1MjI2NVxcdTIwZDI7XFx1YzAwMD5cXHUyMGQybmZpbjtcXHU2OWRlXFx1MDE4MEFldFxcdTJjYmRcXHUyY2MxXFx1MmNjNXJyO1xcdTY5MDI7XFx1YzAwMFxcdTIyNjRcXHUyMGQyXFx1MDEwMDtyXFx1MmNjYVxcdTJjY2RcXHVjMDAwPFxcdTIwZDJpZTtcXHVjMDAwXFx1MjJiNFxcdTIwZDJcXHUwMTAwQXRcXHUyY2Q4XFx1MmNkY3JyO1xcdTY5MDNyaWU7XFx1YzAwMFxcdTIyYjVcXHUyMGQyaW07XFx1YzAwMFxcdTIyM2NcXHUyMGQyXFx1MDE4MEFhblxcdTJjZjBcXHUyY2Y0XFx1MmQwMnJyO1xcdTYxZDZyXFx1MDEwMGhyXFx1MmNmYVxcdTJjZmRrO1xcdTY5MjNcXHUwMTAwO29cXHUxM2U3XFx1MTNlNWVhcjtcXHU2OTI3XFx1MTI1M1xcdTFhOTVcXDBcXDBcXDBcXDBcXDBcXDBcXDBcXDBcXDBcXDBcXDBcXDBcXDBcXHUyZDJkXFwwXFx1MmQzOFxcdTJkNDhcXHUyZDYwXFx1MmQ2NVxcdTJkNzJcXHUyZDg0XFx1MWIwN1xcMFxcMFxcdTJkOGRcXHUyZGFiXFwwXFx1MmRjOFxcdTJkY2VcXDBcXHUyZGRjXFx1MmUxOVxcdTJlMmJcXHUyZTNlXFx1MmU0M1xcdTAxMDBjc1xcdTJkMzFcXHUxYTk3dXRlXFx1ODAzYlxceGYzXFx1NDBmM1xcdTAxMDBpeVxcdTJkM2NcXHUyZDQ1clxcdTAxMDA7Y1xcdTFhOWVcXHUyZDQyXFx1ODAzYlxceGY0XFx1NDBmNDtcXHU0NDNlXFx1MDI4MGFiaW9zXFx1MWFhMFxcdTJkNTJcXHUyZDU3XFx1MDFjOFxcdTJkNWFsYWM7XFx1NDE1MXY7XFx1NmEzOG9sZDtcXHU2OWJjbGlnO1xcdTQxNTNcXHUwMTAwY3JcXHUyZDY5XFx1MmQ2ZGlyO1xcdTY5YmY7XFx1YzAwMFxcdWQ4MzVcXHVkZDJjXFx1MDM2ZlxcdTJkNzlcXDBcXDBcXHUyZDdjXFwwXFx1MmQ4Mm47XFx1NDJkYmF2ZVxcdTgwM2JcXHhmMlxcdTQwZjI7XFx1NjljMVxcdTAxMDBibVxcdTJkODhcXHUwZGY0YXI7XFx1NjliNVxcdTAyMDBhY2l0XFx1MmQ5NVxcdTJkOThcXHUyZGE1XFx1MmRhOHJcXHhmMlxcdTFhODBcXHUwMTAwaXJcXHUyZDlkXFx1MmRhMHI7XFx1NjliZW9zcztcXHU2OWJiblxceGU1XFx1MGU1MjtcXHU2OWMwXFx1MDE4MGFlaVxcdTJkYjFcXHUyZGI1XFx1MmRiOWNyO1xcdTQxNGRnYTtcXHU0M2M5XFx1MDE4MGNkblxcdTJkYzBcXHUyZGM1XFx1MDFjZHJvbjtcXHU0M2JmO1xcdTY5YjZwZjtcXHVjMDAwXFx1ZDgzNVxcdWRkNjBcXHUwMTgwYWVsXFx1MmRkNFxcdTJkZDdcXHUwMWQycjtcXHU2OWI3cnA7XFx1NjliOVxcdTAzODA7YWRpb3N2XFx1MmRlYVxcdTJkZWJcXHUyZGVlXFx1MmUwOFxcdTJlMGRcXHUyZTEwXFx1MmUxNlxcdTYyMjhyXFx4ZjJcXHUxYTg2XFx1MDIwMDtlZm1cXHUyZGY3XFx1MmRmOFxcdTJlMDJcXHUyZTA1XFx1NmE1ZHJcXHUwMTAwO29cXHUyZGZlXFx1MmRmZlxcdTYxMzRmXFx4YmJcXHUyZGZmXFx1ODAzYlxceGFhXFx1NDBhYVxcdTgwM2JcXHhiYVxcdTQwYmFnb2Y7XFx1NjJiNnI7XFx1NmE1NmxvcGU7XFx1NmE1NztcXHU2YTViXFx1MDE4MGNsb1xcdTJlMWZcXHUyZTIxXFx1MmUyN1xceGYyXFx1MmUwMWFzaFxcdTgwM2JcXHhmOFxcdTQwZjhsO1xcdTYyOThpXFx1MDE2Y1xcdTJlMmZcXHUyZTM0ZGVcXHU4MDNiXFx4ZjVcXHU0MGY1ZXNcXHUwMTAwO2FcXHUwMWRiXFx1MmUzYXM7XFx1NmEzNm1sXFx1ODAzYlxceGY2XFx1NDBmNmJhcjtcXHU2MzNkXFx1MGFlMVxcdTJlNWVcXDBcXHUyZTdkXFwwXFx1MmU4MFxcdTJlOWRcXDBcXHUyZWEyXFx1MmViOVxcMFxcMFxcdTJlY2JcXHUwZTljXFwwXFx1MmYxM1xcMFxcMFxcdTJmMmJcXHUyZmJjXFwwXFx1MmZjOHJcXHUwMjAwO2FzdFxcdTA0MDNcXHUyZTY3XFx1MmU3MlxcdTBlODVcXHU4MTAwXFx4YjY7bFxcdTJlNmRcXHUyZTZlXFx1NDBiNmxlXFx4ZWNcXHUwNDAzXFx1MDI2OVxcdTJlNzhcXDBcXDBcXHUyZTdibTtcXHU2YWYzO1xcdTZhZmR5O1xcdTQ0M2ZyXFx1MDI4MGNpbXB0XFx1MmU4YlxcdTJlOGZcXHUyZTkzXFx1MTg2NVxcdTJlOTdudDtcXHU0MDI1b2Q7XFx1NDAyZWlsO1xcdTYwMzBlbms7XFx1NjAzMXI7XFx1YzAwMFxcdWQ4MzVcXHVkZDJkXFx1MDE4MGltb1xcdTJlYThcXHUyZWIwXFx1MmViNFxcdTAxMDA7dlxcdTJlYWRcXHUyZWFlXFx1NDNjNjtcXHU0M2Q1bWFcXHhmNFxcdTBhNzZuZTtcXHU2NjBlXFx1MDE4MDt0dlxcdTJlYmZcXHUyZWMwXFx1MmVjOFxcdTQzYzBjaGZvcmtcXHhiYlxcdTFmZmQ7XFx1NDNkNlxcdTAxMDBhdVxcdTJlY2ZcXHUyZWRmblxcdTAxMDBja1xcdTJlZDVcXHUyZWRka1xcdTAxMDA7aFxcdTIxZjRcXHUyZWRiO1xcdTYxMGVcXHhmNlxcdTIxZjRzXFx1MDQ4MDthYmNkZW1zdFxcdTJlZjNcXHUyZWY0XFx1MTkwOFxcdTJlZjlcXHUyZWZkXFx1MmYwNFxcdTJmMDZcXHUyZjBhXFx1MmYwZVxcdTQwMmJjaXI7XFx1NmEyM2lyO1xcdTZhMjJcXHUwMTAwb3VcXHUxZDQwXFx1MmYwMjtcXHU2YTI1O1xcdTZhNzJuXFx1ODBiYlxceGIxXFx1MGU5ZGltO1xcdTZhMjZ3bztcXHU2YTI3XFx1MDE4MGlwdVxcdTJmMTlcXHUyZjIwXFx1MmYyNW50aW50O1xcdTZhMTVmO1xcdWMwMDBcXHVkODM1XFx1ZGQ2MW5kXFx1ODAzYlxceGEzXFx1NDBhM1xcdTA1MDA7RWFjZWlub3N1XFx1MGVjOFxcdTJmM2ZcXHUyZjQxXFx1MmY0NFxcdTJmNDdcXHUyZjgxXFx1MmY4OVxcdTJmOTJcXHUyZjdlXFx1MmZiNjtcXHU2YWIzcDtcXHU2YWI3dVxceGU1XFx1MGVkOVxcdTAxMDA7Y1xcdTBlY2VcXHUyZjRjXFx1MDMwMDthY2Vuc1xcdTBlYzhcXHUyZjU5XFx1MmY1ZlxcdTJmNjZcXHUyZjY4XFx1MmY3ZXBwcm9cXHhmOFxcdTJmNDN1cmx5ZVxceGYxXFx1MGVkOVxceGYxXFx1MGVjZVxcdTAxODBhZXNcXHUyZjZmXFx1MmY3NlxcdTJmN2FwcHJveDtcXHU2YWI5cXE7XFx1NmFiNWltO1xcdTYyZThpXFx4ZWRcXHUwZWRmbWVcXHUwMTAwO3NcXHUyZjg4XFx1MGVhZVxcdTYwMzJcXHUwMTgwRWFzXFx1MmY3OFxcdTJmOTBcXHUyZjdhXFx4ZjBcXHUyZjc1XFx1MDE4MGRmcFxcdTBlZWNcXHUyZjk5XFx1MmZhZlxcdTAxODBhbHNcXHUyZmEwXFx1MmZhNVxcdTJmYWFsYXI7XFx1NjMyZWluZTtcXHU2MzEydXJmO1xcdTYzMTNcXHUwMTAwO3RcXHUwZWZiXFx1MmZiNFxceGVmXFx1MGVmYnJlbDtcXHU2MmIwXFx1MDEwMGNpXFx1MmZjMFxcdTJmYzVyO1xcdWMwMDBcXHVkODM1XFx1ZGNjNTtcXHU0M2M4bmNzcDtcXHU2MDA4XFx1MDMwMGZpb3BzdVxcdTJmZGFcXHUyMmUyXFx1MmZkZlxcdTJmZTVcXHUyZmViXFx1MmZmMXI7XFx1YzAwMFxcdWQ4MzVcXHVkZDJlcGY7XFx1YzAwMFxcdWQ4MzVcXHVkZDYycmltZTtcXHU2MDU3Y3I7XFx1YzAwMFxcdWQ4MzVcXHVkY2M2XFx1MDE4MGFlb1xcdTJmZjhcXHUzMDA5XFx1MzAxM3RcXHUwMTAwZWlcXHUyZmZlXFx1MzAwNXJuaW9uXFx4ZjNcXHUwNmIwbnQ7XFx1NmExNnN0XFx1MDEwMDtlXFx1MzAxMFxcdTMwMTFcXHU0MDNmXFx4ZjFcXHUxZjE5XFx4ZjRcXHUwZjE0XFx1MGE4MEFCSGFiY2RlZmhpbG1ub3Byc3R1eFxcdTMwNDBcXHUzMDUxXFx1MzA1NVxcdTMwNTlcXHUzMGUwXFx1MzEwZVxcdTMxMmJcXHUzMTQ3XFx1MzE2MlxcdTMxNzJcXHUzMThlXFx1MzIwNlxcdTMyMTVcXHUzMjI0XFx1MzIyOVxcdTMyNThcXHUzMjZlXFx1MzI3MlxcdTMyOTBcXHUzMmIwXFx1MzJiN1xcdTAxODBhcnRcXHUzMDQ3XFx1MzA0YVxcdTMwNGNyXFx4ZjJcXHUxMGIzXFx4ZjJcXHUwM2RkYWlsO1xcdTY5MWNhclxceGYyXFx1MWM2NWFyO1xcdTY5NjRcXHUwMzgwY2RlbnFydFxcdTMwNjhcXHUzMDc1XFx1MzA3OFxcdTMwN2ZcXHUzMDhmXFx1MzA5NFxcdTMwY2NcXHUwMTAwZXVcXHUzMDZkXFx1MzA3MTtcXHVjMDAwXFx1MjIzZFxcdTAzMzF0ZTtcXHU0MTU1aVxceGUzXFx1MTE2ZW1wdHl2O1xcdTY5YjNnXFx1MDIwMDtkZWxcXHUwZmQxXFx1MzA4OVxcdTMwOGJcXHUzMDhkO1xcdTY5OTI7XFx1NjlhNVxceGU1XFx1MGZkMXVvXFx1ODAzYlxceGJiXFx1NDBiYnJcXHUwNTgwO2FiY2ZobHBzdHdcXHUwZmRjXFx1MzBhY1xcdTMwYWZcXHUzMGI3XFx1MzBiOVxcdTMwYmNcXHUzMGJlXFx1MzBjMFxcdTMwYzNcXHUzMGM3XFx1MzBjYXA7XFx1Njk3NVxcdTAxMDA7ZlxcdTBmZTBcXHUzMGI0cztcXHU2OTIwO1xcdTY5MzNzO1xcdTY5MWVcXHhlYlxcdTIyNWRcXHhmMFxcdTI3MmVsO1xcdTY5NDVpbTtcXHU2OTc0bDtcXHU2MWEzO1xcdTYxOWRcXHUwMTAwYWlcXHUzMGQxXFx1MzBkNWlsO1xcdTY5MWFvXFx1MDEwMDtuXFx1MzBkYlxcdTMwZGNcXHU2MjM2YWxcXHhmM1xcdTBmMWVcXHUwMTgwYWJyXFx1MzBlN1xcdTMwZWFcXHUzMGVlclxceGYyXFx1MTdlNXJrO1xcdTY3NzNcXHUwMTAwYWtcXHUzMGYzXFx1MzBmZGNcXHUwMTAwZWtcXHUzMGY5XFx1MzBmYjtcXHU0MDdkO1xcdTQwNWRcXHUwMTAwZXNcXHUzMTAyXFx1MzEwNDtcXHU2OThjbFxcdTAxMDBkdVxcdTMxMGFcXHUzMTBjO1xcdTY5OGU7XFx1Njk5MFxcdTAyMDBhZXV5XFx1MzExN1xcdTMxMWNcXHUzMTI3XFx1MzEyOXJvbjtcXHU0MTU5XFx1MDEwMGRpXFx1MzEyMVxcdTMxMjVpbDtcXHU0MTU3XFx4ZWNcXHUwZmYyXFx4ZTJcXHUzMGZhO1xcdTQ0NDBcXHUwMjAwY2xxc1xcdTMxMzRcXHUzMTM3XFx1MzEzZFxcdTMxNDRhO1xcdTY5MzdkaGFyO1xcdTY5Njl1b1xcdTAxMDA7clxcdTAyMGVcXHUwMjBkaDtcXHU2MWIzXFx1MDE4MGFjZ1xcdTMxNGVcXHUzMTVmXFx1MGY0NGxcXHUwMjAwO2lwc1xcdTBmNzhcXHUzMTU4XFx1MzE1YlxcdTEwOWNuXFx4ZTVcXHUxMGJiYXJcXHhmNFxcdTBmYTl0O1xcdTY1YWRcXHUwMTgwaWxyXFx1MzE2OVxcdTEwMjNcXHUzMTZlc2h0O1xcdTY5N2Q7XFx1YzAwMFxcdWQ4MzVcXHVkZDJmXFx1MDEwMGFvXFx1MzE3N1xcdTMxODZyXFx1MDEwMGR1XFx1MzE3ZFxcdTMxN2ZcXHhiYlxcdTA0N2JcXHUwMTAwO2xcXHUxMDkxXFx1MzE4NDtcXHU2OTZjXFx1MDEwMDt2XFx1MzE4YlxcdTMxOGNcXHU0M2MxO1xcdTQzZjFcXHUwMTgwZ25zXFx1MzE5NVxcdTMxZjlcXHUzMWZjaHRcXHUwMzAwYWhscnN0XFx1MzFhNFxcdTMxYjBcXHUzMWMyXFx1MzFkOFxcdTMxZTRcXHUzMWVlcnJvd1xcdTAxMDA7dFxcdTBmZGNcXHUzMWFkYVxceGU5XFx1MzBjOGFycG9vblxcdTAxMDBkdVxcdTMxYmJcXHUzMWJmb3dcXHhlZVxcdTMxN2VwXFx4YmJcXHUxMDkyZWZ0XFx1MDEwMGFoXFx1MzFjYVxcdTMxZDBycm93XFx4ZjNcXHUwZmVhYXJwb29uXFx4ZjNcXHUwNTUxaWdodGFycm93cztcXHU2MWM5cXVpZ2Fycm9cXHhmN1xcdTMwY2JocmVldGltZXM7XFx1NjJjY2c7XFx1NDJkYWluZ2RvdHNlXFx4ZjFcXHUxZjMyXFx1MDE4MGFobVxcdTMyMGRcXHUzMjEwXFx1MzIxM3JcXHhmMlxcdTBmZWFhXFx4ZjJcXHUwNTUxO1xcdTYwMGZvdXN0XFx1MDEwMDthXFx1MzIxZVxcdTMyMWZcXHU2M2IxY2hlXFx4YmJcXHUzMjFmbWlkO1xcdTZhZWVcXHUwMjAwYWJwdFxcdTMyMzJcXHUzMjNkXFx1MzI0MFxcdTMyNTJcXHUwMTAwbnJcXHUzMjM3XFx1MzIzYWc7XFx1NjdlZHI7XFx1NjFmZXJcXHhlYlxcdTEwMDNcXHUwMTgwYWZsXFx1MzI0N1xcdTMyNGFcXHUzMjRlcjtcXHU2OTg2O1xcdWMwMDBcXHVkODM1XFx1ZGQ2M3VzO1xcdTZhMmVpbWVzO1xcdTZhMzVcXHUwMTAwYXBcXHUzMjVkXFx1MzI2N3JcXHUwMTAwO2dcXHUzMjYzXFx1MzI2NFxcdTQwMjl0O1xcdTY5OTRvbGludDtcXHU2YTEyYXJcXHhmMlxcdTMxZTNcXHUwMjAwYWNocVxcdTMyN2JcXHUzMjgwXFx1MTBiY1xcdTMyODVxdW87XFx1NjAzYXI7XFx1YzAwMFxcdWQ4MzVcXHVkY2M3XFx1MDEwMGJ1XFx1MzBmYlxcdTMyOGFvXFx1MDEwMDtyXFx1MDIxNFxcdTAyMTNcXHUwMTgwaGlyXFx1MzI5N1xcdTMyOWJcXHUzMmEwcmVcXHhlNVxcdTMxZjhtZXM7XFx1NjJjYWlcXHUwMjAwO2VmbFxcdTMyYWFcXHUxMDU5XFx1MTgyMVxcdTMyYWJcXHU2NWI5dHJpO1xcdTY5Y2VsdWhhcjtcXHU2OTY4O1xcdTYxMWVcXHUwZDYxXFx1MzJkNVxcdTMyZGJcXHUzMmRmXFx1MzMyY1xcdTMzMzhcXHUzMzcxXFwwXFx1MzM3YVxcdTMzYTRcXDBcXDBcXHUzM2VjXFx1MzNmMFxcMFxcdTM0MjhcXHUzNDQ4XFx1MzQ1YVxcdTM0YWRcXHUzNGIxXFx1MzRjYVxcdTM0ZjFcXDBcXHUzNjE2XFwwXFwwXFx1MzYzM2N1dGU7XFx1NDE1YnF1XFx4ZWZcXHUyN2JhXFx1MDUwMDtFYWNlaW5wc3lcXHUxMWVkXFx1MzJmM1xcdTMyZjVcXHUzMmZmXFx1MzMwMlxcdTMzMGJcXHUzMzBmXFx1MzMxZlxcdTMzMjZcXHUzMzI5O1xcdTZhYjRcXHUwMWYwXFx1MzJmYVxcMFxcdTMyZmM7XFx1NmFiOG9uO1xcdTQxNjF1XFx4ZTVcXHUxMWZlXFx1MDEwMDtkXFx1MTFmM1xcdTMzMDdpbDtcXHU0MTVmcmM7XFx1NDE1ZFxcdTAxODBFYXNcXHUzMzE2XFx1MzMxOFxcdTMzMWI7XFx1NmFiNnA7XFx1NmFiYWltO1xcdTYyZTlvbGludDtcXHU2YTEzaVxceGVkXFx1MTIwNDtcXHU0NDQxb3RcXHUwMTgwO2JlXFx1MzMzNFxcdTFkNDdcXHUzMzM1XFx1NjJjNTtcXHU2YTY2XFx1MDM4MEFhY21zdHhcXHUzMzQ2XFx1MzM0YVxcdTMzNTdcXHUzMzViXFx1MzM1ZVxcdTMzNjNcXHUzMzZkcnI7XFx1NjFkOHJcXHUwMTAwaHJcXHUzMzUwXFx1MzM1MlxceGViXFx1MjIyOFxcdTAxMDA7b1xcdTBhMzZcXHUwYTM0dFxcdTgwM2JcXHhhN1xcdTQwYTdpO1xcdTQwM2J3YXI7XFx1NjkyOW1cXHUwMTAwaW5cXHUzMzY5XFx4ZjBudVxceGYzXFx4ZjF0O1xcdTY3MzZyXFx1MDEwMDtvXFx1MzM3NlxcdTIwNTVcXHVjMDAwXFx1ZDgzNVxcdWRkMzBcXHUwMjAwYWNveVxcdTMzODJcXHUzMzg2XFx1MzM5MVxcdTMzYTBycDtcXHU2NjZmXFx1MDEwMGh5XFx1MzM4YlxcdTMzOGZjeTtcXHU0NDQ5O1xcdTQ0NDhydFxcdTAyNmRcXHUzMzk5XFwwXFwwXFx1MzM5Y2lcXHhlNFxcdTE0NjRhcmFcXHhlY1xcdTJlNmZcXHU4MDNiXFx4YWRcXHU0MGFkXFx1MDEwMGdtXFx1MzNhOFxcdTMzYjRtYVxcdTAxODA7ZnZcXHUzM2IxXFx1MzNiMlxcdTMzYjJcXHU0M2MzO1xcdTQzYzJcXHUwNDAwO2RlZ2xucHJcXHUxMmFiXFx1MzNjNVxcdTMzYzlcXHUzM2NlXFx1MzNkNlxcdTMzZGVcXHUzM2UxXFx1MzNlNm90O1xcdTZhNmFcXHUwMTAwO3FcXHUxMmIxXFx1MTJiMFxcdTAxMDA7RVxcdTMzZDNcXHUzM2Q0XFx1NmE5ZTtcXHU2YWEwXFx1MDEwMDtFXFx1MzNkYlxcdTMzZGNcXHU2YTlkO1xcdTZhOWZlO1xcdTYyNDZsdXM7XFx1NmEyNGFycjtcXHU2OTcyYXJcXHhmMlxcdTExM2RcXHUwMjAwYWVpdFxcdTMzZjhcXHUzNDA4XFx1MzQwZlxcdTM0MTdcXHUwMTAwbHNcXHUzM2ZkXFx1MzQwNGxzZXRtXFx4ZTlcXHUzMzZhaHA7XFx1NmEzM3BhcnNsO1xcdTY5ZTRcXHUwMTAwZGxcXHUxNDYzXFx1MzQxNGU7XFx1NjMyM1xcdTAxMDA7ZVxcdTM0MWNcXHUzNDFkXFx1NmFhYVxcdTAxMDA7c1xcdTM0MjJcXHUzNDIzXFx1NmFhYztcXHVjMDAwXFx1MmFhY1xcdWZlMDBcXHUwMTgwZmxwXFx1MzQyZVxcdTM0MzNcXHUzNDQydGN5O1xcdTQ0NGNcXHUwMTAwO2JcXHUzNDM4XFx1MzQzOVxcdTQwMmZcXHUwMTAwO2FcXHUzNDNlXFx1MzQzZlxcdTY5YzRyO1xcdTYzM2ZmO1xcdWMwMDBcXHVkODM1XFx1ZGQ2NGFcXHUwMTAwZHJcXHUzNDRkXFx1MDQwMmVzXFx1MDEwMDt1XFx1MzQ1NFxcdTM0NTVcXHU2NjYwaXRcXHhiYlxcdTM0NTVcXHUwMTgwY3N1XFx1MzQ2MFxcdTM0NzlcXHUzNDlmXFx1MDEwMGF1XFx1MzQ2NVxcdTM0NmZwXFx1MDEwMDtzXFx1MTE4OFxcdTM0NmI7XFx1YzAwMFxcdTIyOTNcXHVmZTAwcFxcdTAxMDA7c1xcdTExYjRcXHUzNDc1O1xcdWMwMDBcXHUyMjk0XFx1ZmUwMHVcXHUwMTAwYnBcXHUzNDdmXFx1MzQ4ZlxcdTAxODA7ZXNcXHUxMTk3XFx1MTE5Y1xcdTM0ODZldFxcdTAxMDA7ZVxcdTExOTdcXHUzNDhkXFx4ZjFcXHUxMTlkXFx1MDE4MDtlc1xcdTExYThcXHUxMWFkXFx1MzQ5NmV0XFx1MDEwMDtlXFx1MTFhOFxcdTM0OWRcXHhmMVxcdTExYWVcXHUwMTgwO2FmXFx1MTE3YlxcdTM0YTZcXHUwNWIwclxcdTAxNjVcXHUzNGFiXFx1MDViMVxceGJiXFx1MTE3Y2FyXFx4ZjJcXHUxMTQ4XFx1MDIwMGNlbXRcXHUzNGI5XFx1MzRiZVxcdTM0YzJcXHUzNGM1cjtcXHVjMDAwXFx1ZDgzNVxcdWRjYzh0bVxceGVlXFx4ZjFpXFx4ZWNcXHUzNDE1YXJcXHhlNlxcdTExYmVcXHUwMTAwYXJcXHUzNGNlXFx1MzRkNXJcXHUwMTAwO2ZcXHUzNGQ0XFx1MTdiZlxcdTY2MDZcXHUwMTAwYW5cXHUzNGRhXFx1MzRlZGlnaHRcXHUwMTAwZXBcXHUzNGUzXFx1MzRlYXBzaWxvXFx4ZWVcXHUxZWUwaFxceGU5XFx1MmVhZnNcXHhiYlxcdTI4NTJcXHUwMjgwYmNtbnBcXHUzNGZiXFx1MzU1ZVxcdTEyMDlcXHUzNThiXFx1MzU4ZVxcdTA0ODA7RWRlbW5wcnNcXHUzNTBlXFx1MzUwZlxcdTM1MTFcXHUzNTE1XFx1MzUxZVxcdTM1MjNcXHUzNTJjXFx1MzUzMVxcdTM1MzZcXHU2MjgyO1xcdTZhYzVvdDtcXHU2YWJkXFx1MDEwMDtkXFx1MTFkYVxcdTM1MWFvdDtcXHU2YWMzdWx0O1xcdTZhYzFcXHUwMTAwRWVcXHUzNTI4XFx1MzUyYTtcXHU2YWNiO1xcdTYyOGFsdXM7XFx1NmFiZmFycjtcXHU2OTc5XFx1MDE4MGVpdVxcdTM1M2RcXHUzNTUyXFx1MzU1NXRcXHUwMTgwO2VuXFx1MzUwZVxcdTM1NDVcXHUzNTRicVxcdTAxMDA7cVxcdTExZGFcXHUzNTBmZXFcXHUwMTAwO3FcXHUzNTJiXFx1MzUyOG07XFx1NmFjN1xcdTAxMDBicFxcdTM1NWFcXHUzNTVjO1xcdTZhZDU7XFx1NmFkM2NcXHUwMzAwO2FjZW5zXFx1MTFlZFxcdTM1NmNcXHUzNTcyXFx1MzU3OVxcdTM1N2JcXHUzMzI2cHByb1xceGY4XFx1MzJmYXVybHllXFx4ZjFcXHUxMWZlXFx4ZjFcXHUxMWYzXFx1MDE4MGFlc1xcdTM1ODJcXHUzNTg4XFx1MzMxYnBwcm9cXHhmOFxcdTMzMWFxXFx4ZjFcXHUzMzE3ZztcXHU2NjZhXFx1MDY4MDEyMztFZGVobG1ucHNcXHUzNWE5XFx1MzVhY1xcdTM1YWZcXHUxMjFjXFx1MzViMlxcdTM1YjRcXHUzNWMwXFx1MzVjOVxcdTM1ZDVcXHUzNWRhXFx1MzVkZlxcdTM1ZThcXHUzNWVkXFx1ODAzYlxceGI5XFx1NDBiOVxcdTgwM2JcXHhiMlxcdTQwYjJcXHU4MDNiXFx4YjNcXHU0MGIzO1xcdTZhYzZcXHUwMTAwb3NcXHUzNWI5XFx1MzViY3Q7XFx1NmFiZXViO1xcdTZhZDhcXHUwMTAwO2RcXHUxMjIyXFx1MzVjNW90O1xcdTZhYzRzXFx1MDEwMG91XFx1MzVjZlxcdTM1ZDJsO1xcdTY3YzliO1xcdTZhZDdhcnI7XFx1Njk3YnVsdDtcXHU2YWMyXFx1MDEwMEVlXFx1MzVlNFxcdTM1ZTY7XFx1NmFjYztcXHU2MjhibHVzO1xcdTZhYzBcXHUwMTgwZWl1XFx1MzVmNFxcdTM2MDlcXHUzNjBjdFxcdTAxODA7ZW5cXHUxMjFjXFx1MzVmY1xcdTM2MDJxXFx1MDEwMDtxXFx1MTIyMlxcdTM1YjJlcVxcdTAxMDA7cVxcdTM1ZTdcXHUzNWU0bTtcXHU2YWM4XFx1MDEwMGJwXFx1MzYxMVxcdTM2MTM7XFx1NmFkNDtcXHU2YWQ2XFx1MDE4MEFhblxcdTM2MWNcXHUzNjIwXFx1MzYyZHJyO1xcdTYxZDlyXFx1MDEwMGhyXFx1MzYyNlxcdTM2MjhcXHhlYlxcdTIyMmVcXHUwMTAwO29cXHUwYTJiXFx1MGEyOXdhcjtcXHU2OTJhbGlnXFx1ODAzYlxceGRmXFx1NDBkZlxcdTBiZTFcXHUzNjUxXFx1MzY1ZFxcdTM2NjBcXHUxMmNlXFx1MzY3M1xcdTM2NzlcXDBcXHUzNjdlXFx1MzZjMlxcMFxcMFxcMFxcMFxcMFxcdTM2ZGJcXHUzNzAzXFwwXFx1MzcwOVxcdTM3NmNcXDBcXDBcXDBcXHUzNzg3XFx1MDI3MlxcdTM2NTZcXDBcXDBcXHUzNjViZ2V0O1xcdTYzMTY7XFx1NDNjNHJcXHhlYlxcdTBlNWZcXHUwMTgwYWV5XFx1MzY2NlxcdTM2NmJcXHUzNjcwcm9uO1xcdTQxNjVkaWw7XFx1NDE2MztcXHU0NDQybHJlYztcXHU2MzE1cjtcXHVjMDAwXFx1ZDgzNVxcdWRkMzFcXHUwMjAwZWlrb1xcdTM2ODZcXHUzNjlkXFx1MzZiNVxcdTM2YmNcXHUwMWYyXFx1MzY4YlxcMFxcdTM2OTFlXFx1MDEwMDRmXFx1MTI4NFxcdTEyODFhXFx1MDE4MDtzdlxcdTM2OThcXHUzNjk5XFx1MzY5YlxcdTQzYjh5bTtcXHU0M2QxXFx1MDEwMGNuXFx1MzZhMlxcdTM2YjJrXFx1MDEwMGFzXFx1MzZhOFxcdTM2YWVwcHJvXFx4ZjhcXHUxMmMxaW1cXHhiYlxcdTEyYWNzXFx4ZjBcXHUxMjllXFx1MDEwMGFzXFx1MzZiYVxcdTM2YWVcXHhmMFxcdTEyYzFyblxcdTgwM2JcXHhmZVxcdTQwZmVcXHUwMWVjXFx1MDMxZlxcdTM2YzZcXHUyMmU3ZXNcXHU4MTgwXFx4ZDc7YmRcXHUzNmNmXFx1MzZkMFxcdTM2ZDhcXHU0MGQ3XFx1MDEwMDthXFx1MTkwZlxcdTM2ZDVyO1xcdTZhMzE7XFx1NmEzMFxcdTAxODBlcHNcXHUzNmUxXFx1MzZlM1xcdTM3MDBcXHhlMVxcdTJhNGRcXHUwMjAwO2JjZlxcdTA0ODZcXHUzNmVjXFx1MzZmMFxcdTM2ZjRvdDtcXHU2MzM2aXI7XFx1NmFmMVxcdTAxMDA7b1xcdTM2ZjlcXHUzNmZjXFx1YzAwMFxcdWQ4MzVcXHVkZDY1cms7XFx1NmFkYVxceGUxXFx1MzM2MnJpbWU7XFx1NjAzNFxcdTAxODBhaXBcXHUzNzBmXFx1MzcxMlxcdTM3NjRkXFx4ZTVcXHUxMjQ4XFx1MDM4MGFkZW1wc3RcXHUzNzIxXFx1Mzc0ZFxcdTM3NDBcXHUzNzUxXFx1Mzc1N1xcdTM3NWNcXHUzNzVmbmdsZVxcdTAyODA7ZGxxclxcdTM3MzBcXHUzNzMxXFx1MzczNlxcdTM3NDBcXHUzNzQyXFx1NjViNW93blxceGJiXFx1MWRiYmVmdFxcdTAxMDA7ZVxcdTI4MDBcXHUzNzNlXFx4ZjFcXHUwOTJlO1xcdTYyNWNpZ2h0XFx1MDEwMDtlXFx1MzJhYVxcdTM3NGJcXHhmMVxcdTEwNWFvdDtcXHU2NWVjaW51cztcXHU2YTNhbHVzO1xcdTZhMzliO1xcdTY5Y2RpbWU7XFx1NmEzYmV6aXVtO1xcdTYzZTJcXHUwMTgwY2h0XFx1Mzc3MlxcdTM3N2RcXHUzNzgxXFx1MDEwMHJ5XFx1Mzc3N1xcdTM3N2I7XFx1YzAwMFxcdWQ4MzVcXHVkY2M5O1xcdTQ0NDZjeTtcXHU0NDVicm9rO1xcdTQxNjdcXHUwMTAwaW9cXHUzNzhiXFx1Mzc4ZXhcXHhmNFxcdTE3NzdoZWFkXFx1MDEwMGxyXFx1Mzc5N1xcdTM3YTBlZnRhcnJvXFx4ZjdcXHUwODRmaWdodGFycm93XFx4YmJcXHUwZjVkXFx1MDkwMEFIYWJjZGZnaGxtb3Byc3R1d1xcdTM3ZDBcXHUzN2QzXFx1MzdkN1xcdTM3ZTRcXHUzN2YwXFx1MzdmY1xcdTM4MGVcXHUzODFjXFx1MzgyM1xcdTM4MzRcXHUzODUxXFx1Mzg1ZFxcdTM4NmJcXHUzOGE5XFx1MzhjY1xcdTM4ZDJcXHUzOGVhXFx1MzhmNnJcXHhmMlxcdTAzZWRhcjtcXHU2OTYzXFx1MDEwMGNyXFx1MzdkY1xcdTM3ZTJ1dGVcXHU4MDNiXFx4ZmFcXHU0MGZhXFx4ZjJcXHUxMTUwclxcdTAxZTNcXHUzN2VhXFwwXFx1MzdlZHk7XFx1NDQ1ZXZlO1xcdTQxNmRcXHUwMTAwaXlcXHUzN2Y1XFx1MzdmYXJjXFx1ODAzYlxceGZiXFx1NDBmYjtcXHU0NDQzXFx1MDE4MGFiaFxcdTM4MDNcXHUzODA2XFx1MzgwYnJcXHhmMlxcdTEzYWRsYWM7XFx1NDE3MWFcXHhmMlxcdTEzYzNcXHUwMTAwaXJcXHUzODEzXFx1MzgxOHNodDtcXHU2OTdlO1xcdWMwMDBcXHVkODM1XFx1ZGQzMnJhdmVcXHU4MDNiXFx4ZjlcXHU0MGY5XFx1MDE2MVxcdTM4MjdcXHUzODMxclxcdTAxMDBsclxcdTM4MmNcXHUzODJlXFx4YmJcXHUwOTU3XFx4YmJcXHUxMDgzbGs7XFx1NjU4MFxcdTAxMDBjdFxcdTM4MzlcXHUzODRkXFx1MDI2ZlxcdTM4M2ZcXDBcXDBcXHUzODRhcm5cXHUwMTAwO2VcXHUzODQ1XFx1Mzg0NlxcdTYzMWNyXFx4YmJcXHUzODQ2b3A7XFx1NjMwZnJpO1xcdTY1ZjhcXHUwMTAwYWxcXHUzODU2XFx1Mzg1YWNyO1xcdTQxNmJcXHU4MGJiXFx4YThcXHUwMzQ5XFx1MDEwMGdwXFx1Mzg2MlxcdTM4NjZvbjtcXHU0MTczZjtcXHVjMDAwXFx1ZDgzNVxcdWRkNjZcXHUwMzAwYWRobHN1XFx1MTE0YlxcdTM4NzhcXHUzODdkXFx1MTM3MlxcdTM4OTFcXHUzOGEwb3duXFx4ZTFcXHUxM2IzYXJwb29uXFx1MDEwMGxyXFx1Mzg4OFxcdTM4OGNlZlxceGY0XFx1MzgyZGlnaFxceGY0XFx1MzgyZmlcXHUwMTgwO2hsXFx1Mzg5OVxcdTM4OWFcXHUzODljXFx1NDNjNVxceGJiXFx1MTNmYW9uXFx4YmJcXHUzODlhcGFycm93cztcXHU2MWM4XFx1MDE4MGNpdFxcdTM4YjBcXHUzOGM0XFx1MzhjOFxcdTAyNmZcXHUzOGI2XFwwXFwwXFx1MzhjMXJuXFx1MDEwMDtlXFx1MzhiY1xcdTM4YmRcXHU2MzFkclxceGJiXFx1MzhiZG9wO1xcdTYzMGVuZztcXHU0MTZmcmk7XFx1NjVmOWNyO1xcdWMwMDBcXHVkODM1XFx1ZGNjYVxcdTAxODBkaXJcXHUzOGQ5XFx1MzhkZFxcdTM4ZTJvdDtcXHU2MmYwbGRlO1xcdTQxNjlpXFx1MDEwMDtmXFx1MzczMFxcdTM4ZThcXHhiYlxcdTE4MTNcXHUwMTAwYW1cXHUzOGVmXFx1MzhmMnJcXHhmMlxcdTM4YThsXFx1ODAzYlxceGZjXFx1NDBmY2FuZ2xlO1xcdTY5YTdcXHUwNzgwQUJEYWNkZWZsbm9wcnN6XFx1MzkxY1xcdTM5MWZcXHUzOTI5XFx1MzkyZFxcdTM5YjVcXHUzOWI4XFx1MzliZFxcdTM5ZGZcXHUzOWU0XFx1MzllOFxcdTM5ZjNcXHUzOWY5XFx1MzlmZFxcdTNhMDFcXHUzYTIwclxceGYyXFx1MDNmN2FyXFx1MDEwMDt2XFx1MzkyNlxcdTM5MjdcXHU2YWU4O1xcdTZhZTlhc1xceGU4XFx1MDNlMVxcdTAxMDBuclxcdTM5MzJcXHUzOTM3Z3J0O1xcdTY5OWNcXHUwMzgwZWtucHJzdFxcdTM0ZTNcXHUzOTQ2XFx1Mzk0YlxcdTM5NTJcXHUzOTVkXFx1Mzk2NFxcdTM5OTZhcHBcXHhlMVxcdTI0MTVvdGhpblxceGU3XFx1MWU5NlxcdTAxODBoaXJcXHUzNGViXFx1MmVjOFxcdTM5NTlvcFxceGY0XFx1MmZiNVxcdTAxMDA7aFxcdTEzYjdcXHUzOTYyXFx4ZWZcXHUzMThkXFx1MDEwMGl1XFx1Mzk2OVxcdTM5NmRnbVxceGUxXFx1MzNiM1xcdTAxMDBicFxcdTM5NzJcXHUzOTg0c2V0bmVxXFx1MDEwMDtxXFx1Mzk3ZFxcdTM5ODBcXHVjMDAwXFx1MjI4YVxcdWZlMDA7XFx1YzAwMFxcdTJhY2JcXHVmZTAwc2V0bmVxXFx1MDEwMDtxXFx1Mzk4ZlxcdTM5OTJcXHVjMDAwXFx1MjI4YlxcdWZlMDA7XFx1YzAwMFxcdTJhY2NcXHVmZTAwXFx1MDEwMGhyXFx1Mzk5YlxcdTM5OWZldFxceGUxXFx1MzY5Y2lhbmdsZVxcdTAxMDBsclxcdTM5YWFcXHUzOWFmZWZ0XFx4YmJcXHUwOTI1aWdodFxceGJiXFx1MTA1MXk7XFx1NDQzMmFzaFxceGJiXFx1MTAzNlxcdTAxODBlbHJcXHUzOWM0XFx1MzlkMlxcdTM5ZDdcXHUwMTgwO2JlXFx1MmRlYVxcdTM5Y2JcXHUzOWNmYXI7XFx1NjJiYnE7XFx1NjI1YWxpcDtcXHU2MmVlXFx1MDEwMGJ0XFx1MzlkY1xcdTE0NjhhXFx4ZjJcXHUxNDY5cjtcXHVjMDAwXFx1ZDgzNVxcdWRkMzN0clxceGU5XFx1MzlhZXN1XFx1MDEwMGJwXFx1MzllZlxcdTM5ZjFcXHhiYlxcdTBkMWNcXHhiYlxcdTBkNTlwZjtcXHVjMDAwXFx1ZDgzNVxcdWRkNjdyb1xceGYwXFx1MGVmYnRyXFx4ZTlcXHUzOWI0XFx1MDEwMGN1XFx1M2EwNlxcdTNhMGJyO1xcdWMwMDBcXHVkODM1XFx1ZGNjYlxcdTAxMDBicFxcdTNhMTBcXHUzYTE4blxcdTAxMDBFZVxcdTM5ODBcXHUzYTE2XFx4YmJcXHUzOTdlblxcdTAxMDBFZVxcdTM5OTJcXHUzYTFlXFx4YmJcXHUzOTkwaWd6YWc7XFx1Njk5YVxcdTAzODBjZWZvcHJzXFx1M2EzNlxcdTNhM2JcXHUzYTU2XFx1M2E1YlxcdTNhNTRcXHUzYTYxXFx1M2E2YWlyYztcXHU0MTc1XFx1MDEwMGRpXFx1M2E0MFxcdTNhNTFcXHUwMTAwYmdcXHUzYTQ1XFx1M2E0OWFyO1xcdTZhNWZlXFx1MDEwMDtxXFx1MTVmYVxcdTNhNGY7XFx1NjI1OWVycDtcXHU2MTE4cjtcXHVjMDAwXFx1ZDgzNVxcdWRkMzRwZjtcXHVjMDAwXFx1ZDgzNVxcdWRkNjhcXHUwMTAwO2VcXHUxNDc5XFx1M2E2NmF0XFx4ZThcXHUxNDc5Y3I7XFx1YzAwMFxcdWQ4MzVcXHVkY2NjXFx1MGFlM1xcdTE3OGVcXHUzYTg3XFwwXFx1M2E4YlxcMFxcdTNhOTBcXHUzYTliXFwwXFwwXFx1M2E5ZFxcdTNhYThcXHUzYWFiXFx1M2FhZlxcMFxcMFxcdTNhYzNcXHUzYWNlXFwwXFx1M2FkOFxcdTE3ZGNcXHUxN2RmdHJcXHhlOVxcdTE3ZDFyO1xcdWMwMDBcXHVkODM1XFx1ZGQzNVxcdTAxMDBBYVxcdTNhOTRcXHUzYTk3clxceGYyXFx1MDNjM3JcXHhmMlxcdTA5ZjY7XFx1NDNiZVxcdTAxMDBBYVxcdTNhYTFcXHUzYWE0clxceGYyXFx1MDNiOHJcXHhmMlxcdTA5ZWJhXFx4ZjBcXHUyNzEzaXM7XFx1NjJmYlxcdTAxODBkcHRcXHUxN2E0XFx1M2FiNVxcdTNhYmVcXHUwMTAwZmxcXHUzYWJhXFx1MTdhOTtcXHVjMDAwXFx1ZDgzNVxcdWRkNjlpbVxceGU1XFx1MTdiMlxcdTAxMDBBYVxcdTNhYzdcXHUzYWNhclxceGYyXFx1MDNjZXJcXHhmMlxcdTBhMDFcXHUwMTAwY3FcXHUzYWQyXFx1MTdiOHI7XFx1YzAwMFxcdWQ4MzVcXHVkY2NkXFx1MDEwMHB0XFx1MTdkNlxcdTNhZGNyXFx4ZTlcXHUxN2Q0XFx1MDQwMGFjZWZpb3N1XFx1M2FmMFxcdTNhZmRcXHUzYjA4XFx1M2IwY1xcdTNiMTFcXHUzYjE1XFx1M2IxYlxcdTNiMjFjXFx1MDEwMHV5XFx1M2FmNlxcdTNhZmJ0ZVxcdTgwM2JcXHhmZFxcdTQwZmQ7XFx1NDQ0ZlxcdTAxMDBpeVxcdTNiMDJcXHUzYjA2cmM7XFx1NDE3NztcXHU0NDRiblxcdTgwM2JcXHhhNVxcdTQwYTVyO1xcdWMwMDBcXHVkODM1XFx1ZGQzNmN5O1xcdTQ0NTdwZjtcXHVjMDAwXFx1ZDgzNVxcdWRkNmFjcjtcXHVjMDAwXFx1ZDgzNVxcdWRjY2VcXHUwMTAwY21cXHUzYjI2XFx1M2IyOXk7XFx1NDQ0ZWxcXHU4MDNiXFx4ZmZcXHU0MGZmXFx1MDUwMGFjZGVmaGlvc3dcXHUzYjQyXFx1M2I0OFxcdTNiNTRcXHUzYjU4XFx1M2I2NFxcdTNiNjlcXHUzYjZkXFx1M2I3NFxcdTNiN2FcXHUzYjgwY3V0ZTtcXHU0MTdhXFx1MDEwMGF5XFx1M2I0ZFxcdTNiNTJyb247XFx1NDE3ZTtcXHU0NDM3b3Q7XFx1NDE3Y1xcdTAxMDBldFxcdTNiNWRcXHUzYjYxdHJcXHhlNlxcdTE1NWZhO1xcdTQzYjZyO1xcdWMwMDBcXHVkODM1XFx1ZGQzN2N5O1xcdTQ0MzZncmFycjtcXHU2MWRkcGY7XFx1YzAwMFxcdWQ4MzVcXHVkZDZiY3I7XFx1YzAwMFxcdWQ4MzVcXHVkY2NmXFx1MDEwMGpuXFx1M2I4NVxcdTNiODc7XFx1NjAwZGo7XFx1NjAwY1wiXG4gICAgLnNwbGl0KFwiXCIpXG4gICAgLm1hcChmdW5jdGlvbiAoYykgeyByZXR1cm4gYy5jaGFyQ29kZUF0KDApOyB9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWNvZGUtZGF0YS1odG1sLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuLy8gR2VuZXJhdGVkIHVzaW5nIHNjcmlwdHMvd3JpdGUtZGVjb2RlLW1hcC50c1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gbmV3IFVpbnQxNkFycmF5KFxuLy8gcHJldHRpZXItaWdub3JlXG5cIlxcdTAyMDBhZ2xxXFx0XFx4MTVcXHgxOFxceDFiXFx1MDI2ZFxceDBmXFwwXFwwXFx4MTJwO1xcdTQwMjZvcztcXHU0MDI3dDtcXHU0MDNldDtcXHU0MDNjdW90O1xcdTQwMjJcIlxuICAgIC5zcGxpdChcIlwiKVxuICAgIC5tYXAoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMuY2hhckNvZGVBdCgwKTsgfSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVjb2RlLWRhdGEteG1sLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXREb2N1bWVudE1vZGUgPSBleHBvcnRzLmlzQ29uZm9ybWluZyA9IHZvaWQgMDtcbmNvbnN0IGh0bWxfanNfMSA9IHJlcXVpcmUoXCIuL2h0bWwuanNcIik7XG4vL0NvbnN0XG5jb25zdCBWQUxJRF9ET0NUWVBFX05BTUUgPSAnaHRtbCc7XG5jb25zdCBWQUxJRF9TWVNURU1fSUQgPSAnYWJvdXQ6bGVnYWN5LWNvbXBhdCc7XG5jb25zdCBRVUlSS1NfTU9ERV9TWVNURU1fSUQgPSAnaHR0cDovL3d3dy5pYm0uY29tL2RhdGEvZHRkL3YxMS9pYm14aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCc7XG5jb25zdCBRVUlSS1NfTU9ERV9QVUJMSUNfSURfUFJFRklYRVMgPSBbXG4gICAgJysvL3NpbG1hcmlsLy9kdGQgaHRtbCBwcm8gdjByMTEgMTk5NzAxMDEvLycsXG4gICAgJy0vL2FzLy9kdGQgaHRtbCAzLjAgYXN3ZWRpdCArIGV4dGVuc2lvbnMvLycsXG4gICAgJy0vL2FkdmFzb2Z0IGx0ZC8vZHRkIGh0bWwgMy4wIGFzd2VkaXQgKyBleHRlbnNpb25zLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCAyLjAgbGV2ZWwgMS8vJyxcbiAgICAnLS8vaWV0Zi8vZHRkIGh0bWwgMi4wIGxldmVsIDIvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIDIuMCBzdHJpY3QgbGV2ZWwgMS8vJyxcbiAgICAnLS8vaWV0Zi8vZHRkIGh0bWwgMi4wIHN0cmljdCBsZXZlbCAyLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCAyLjAgc3RyaWN0Ly8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCAyLjAvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIDIuMWUvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIDMuMC8vJyxcbiAgICAnLS8vaWV0Zi8vZHRkIGh0bWwgMy4yIGZpbmFsLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCAzLjIvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIDMvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDAvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDEvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDIvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDMvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAwLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMS8vJyxcbiAgICAnLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0IGxldmVsIDIvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAzLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sLy8nLFxuICAgICctLy9tZXRyaXVzLy9kdGQgbWV0cml1cyBwcmVzZW50YXRpb25hbC8vJyxcbiAgICAnLS8vbWljcm9zb2Z0Ly9kdGQgaW50ZXJuZXQgZXhwbG9yZXIgMi4wIGh0bWwgc3RyaWN0Ly8nLFxuICAgICctLy9taWNyb3NvZnQvL2R0ZCBpbnRlcm5ldCBleHBsb3JlciAyLjAgaHRtbC8vJyxcbiAgICAnLS8vbWljcm9zb2Z0Ly9kdGQgaW50ZXJuZXQgZXhwbG9yZXIgMi4wIHRhYmxlcy8vJyxcbiAgICAnLS8vbWljcm9zb2Z0Ly9kdGQgaW50ZXJuZXQgZXhwbG9yZXIgMy4wIGh0bWwgc3RyaWN0Ly8nLFxuICAgICctLy9taWNyb3NvZnQvL2R0ZCBpbnRlcm5ldCBleHBsb3JlciAzLjAgaHRtbC8vJyxcbiAgICAnLS8vbWljcm9zb2Z0Ly9kdGQgaW50ZXJuZXQgZXhwbG9yZXIgMy4wIHRhYmxlcy8vJyxcbiAgICAnLS8vbmV0c2NhcGUgY29tbS4gY29ycC4vL2R0ZCBodG1sLy8nLFxuICAgICctLy9uZXRzY2FwZSBjb21tLiBjb3JwLi8vZHRkIHN0cmljdCBodG1sLy8nLFxuICAgIFwiLS8vbydyZWlsbHkgYW5kIGFzc29jaWF0ZXMvL2R0ZCBodG1sIDIuMC8vXCIsXG4gICAgXCItLy9vJ3JlaWxseSBhbmQgYXNzb2NpYXRlcy8vZHRkIGh0bWwgZXh0ZW5kZWQgMS4wLy9cIixcbiAgICBcIi0vL28ncmVpbGx5IGFuZCBhc3NvY2lhdGVzLy9kdGQgaHRtbCBleHRlbmRlZCByZWxheGVkIDEuMC8vXCIsXG4gICAgJy0vL3NxLy9kdGQgaHRtbCAyLjAgaG90bWV0YWwgKyBleHRlbnNpb25zLy8nLFxuICAgICctLy9zb2Z0cXVhZCBzb2Z0d2FyZS8vZHRkIGhvdG1ldGFsIHBybyA2LjA6OjE5OTkwNjAxOjpleHRlbnNpb25zIHRvIGh0bWwgNC4wLy8nLFxuICAgICctLy9zb2Z0cXVhZC8vZHRkIGhvdG1ldGFsIHBybyA0LjA6OjE5OTcxMDEwOjpleHRlbnNpb25zIHRvIGh0bWwgNC4wLy8nLFxuICAgICctLy9zcHlnbGFzcy8vZHRkIGh0bWwgMi4wIGV4dGVuZGVkLy8nLFxuICAgICctLy9zdW4gbWljcm9zeXN0ZW1zIGNvcnAuLy9kdGQgaG90amF2YSBodG1sLy8nLFxuICAgICctLy9zdW4gbWljcm9zeXN0ZW1zIGNvcnAuLy9kdGQgaG90amF2YSBzdHJpY3QgaHRtbC8vJyxcbiAgICAnLS8vdzNjLy9kdGQgaHRtbCAzIDE5OTUtMDMtMjQvLycsXG4gICAgJy0vL3czYy8vZHRkIGh0bWwgMy4yIGRyYWZ0Ly8nLFxuICAgICctLy93M2MvL2R0ZCBodG1sIDMuMiBmaW5hbC8vJyxcbiAgICAnLS8vdzNjLy9kdGQgaHRtbCAzLjIvLycsXG4gICAgJy0vL3czYy8vZHRkIGh0bWwgMy4ycyBkcmFmdC8vJyxcbiAgICAnLS8vdzNjLy9kdGQgaHRtbCA0LjAgZnJhbWVzZXQvLycsXG4gICAgJy0vL3czYy8vZHRkIGh0bWwgNC4wIHRyYW5zaXRpb25hbC8vJyxcbiAgICAnLS8vdzNjLy9kdGQgaHRtbCBleHBlcmltZW50YWwgMTk5NjA3MTIvLycsXG4gICAgJy0vL3czYy8vZHRkIGh0bWwgZXhwZXJpbWVudGFsIDk3MDQyMS8vJyxcbiAgICAnLS8vdzNjLy9kdGQgdzMgaHRtbC8vJyxcbiAgICAnLS8vdzNvLy9kdGQgdzMgaHRtbCAzLjAvLycsXG4gICAgJy0vL3dlYnRlY2hzLy9kdGQgbW96aWxsYSBodG1sIDIuMC8vJyxcbiAgICAnLS8vd2VidGVjaHMvL2R0ZCBtb3ppbGxhIGh0bWwvLycsXG5dO1xuY29uc3QgUVVJUktTX01PREVfTk9fU1lTVEVNX0lEX1BVQkxJQ19JRF9QUkVGSVhFUyA9IFtcbiAgICAuLi5RVUlSS1NfTU9ERV9QVUJMSUNfSURfUFJFRklYRVMsXG4gICAgJy0vL3czYy8vZHRkIGh0bWwgNC4wMSBmcmFtZXNldC8vJyxcbiAgICAnLS8vdzNjLy9kdGQgaHRtbCA0LjAxIHRyYW5zaXRpb25hbC8vJyxcbl07XG5jb25zdCBRVUlSS1NfTU9ERV9QVUJMSUNfSURTID0gbmV3IFNldChbXG4gICAgJy0vL3czby8vZHRkIHczIGh0bWwgc3RyaWN0IDMuMC8vZW4vLycsXG4gICAgJy0vdzNjL2R0ZCBodG1sIDQuMCB0cmFuc2l0aW9uYWwvZW4nLFxuICAgICdodG1sJyxcbl0pO1xuY29uc3QgTElNSVRFRF9RVUlSS1NfUFVCTElDX0lEX1BSRUZJWEVTID0gWyctLy93M2MvL2R0ZCB4aHRtbCAxLjAgZnJhbWVzZXQvLycsICctLy93M2MvL2R0ZCB4aHRtbCAxLjAgdHJhbnNpdGlvbmFsLy8nXTtcbmNvbnN0IExJTUlURURfUVVJUktTX1dJVEhfU1lTVEVNX0lEX1BVQkxJQ19JRF9QUkVGSVhFUyA9IFtcbiAgICAuLi5MSU1JVEVEX1FVSVJLU19QVUJMSUNfSURfUFJFRklYRVMsXG4gICAgJy0vL3czYy8vZHRkIGh0bWwgNC4wMSBmcmFtZXNldC8vJyxcbiAgICAnLS8vdzNjLy9kdGQgaHRtbCA0LjAxIHRyYW5zaXRpb25hbC8vJyxcbl07XG4vL1V0aWxzXG5mdW5jdGlvbiBoYXNQcmVmaXgocHVibGljSWQsIHByZWZpeGVzKSB7XG4gICAgcmV0dXJuIHByZWZpeGVzLnNvbWUoKHByZWZpeCkgPT4gcHVibGljSWQuc3RhcnRzV2l0aChwcmVmaXgpKTtcbn1cbi8vQVBJXG5mdW5jdGlvbiBpc0NvbmZvcm1pbmcodG9rZW4pIHtcbiAgICByZXR1cm4gKHRva2VuLm5hbWUgPT09IFZBTElEX0RPQ1RZUEVfTkFNRSAmJlxuICAgICAgICB0b2tlbi5wdWJsaWNJZCA9PT0gbnVsbCAmJlxuICAgICAgICAodG9rZW4uc3lzdGVtSWQgPT09IG51bGwgfHwgdG9rZW4uc3lzdGVtSWQgPT09IFZBTElEX1NZU1RFTV9JRCkpO1xufVxuZXhwb3J0cy5pc0NvbmZvcm1pbmcgPSBpc0NvbmZvcm1pbmc7XG5mdW5jdGlvbiBnZXREb2N1bWVudE1vZGUodG9rZW4pIHtcbiAgICBpZiAodG9rZW4ubmFtZSAhPT0gVkFMSURfRE9DVFlQRV9OQU1FKSB7XG4gICAgICAgIHJldHVybiBodG1sX2pzXzEuRE9DVU1FTlRfTU9ERS5RVUlSS1M7XG4gICAgfVxuICAgIGNvbnN0IHsgc3lzdGVtSWQgfSA9IHRva2VuO1xuICAgIGlmIChzeXN0ZW1JZCAmJiBzeXN0ZW1JZC50b0xvd2VyQ2FzZSgpID09PSBRVUlSS1NfTU9ERV9TWVNURU1fSUQpIHtcbiAgICAgICAgcmV0dXJuIGh0bWxfanNfMS5ET0NVTUVOVF9NT0RFLlFVSVJLUztcbiAgICB9XG4gICAgbGV0IHsgcHVibGljSWQgfSA9IHRva2VuO1xuICAgIGlmIChwdWJsaWNJZCAhPT0gbnVsbCkge1xuICAgICAgICBwdWJsaWNJZCA9IHB1YmxpY0lkLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChRVUlSS1NfTU9ERV9QVUJMSUNfSURTLmhhcyhwdWJsaWNJZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBodG1sX2pzXzEuRE9DVU1FTlRfTU9ERS5RVUlSS1M7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHByZWZpeGVzID0gc3lzdGVtSWQgPT09IG51bGwgPyBRVUlSS1NfTU9ERV9OT19TWVNURU1fSURfUFVCTElDX0lEX1BSRUZJWEVTIDogUVVJUktTX01PREVfUFVCTElDX0lEX1BSRUZJWEVTO1xuICAgICAgICBpZiAoaGFzUHJlZml4KHB1YmxpY0lkLCBwcmVmaXhlcykpIHtcbiAgICAgICAgICAgIHJldHVybiBodG1sX2pzXzEuRE9DVU1FTlRfTU9ERS5RVUlSS1M7XG4gICAgICAgIH1cbiAgICAgICAgcHJlZml4ZXMgPVxuICAgICAgICAgICAgc3lzdGVtSWQgPT09IG51bGwgPyBMSU1JVEVEX1FVSVJLU19QVUJMSUNfSURfUFJFRklYRVMgOiBMSU1JVEVEX1FVSVJLU19XSVRIX1NZU1RFTV9JRF9QVUJMSUNfSURfUFJFRklYRVM7XG4gICAgICAgIGlmIChoYXNQcmVmaXgocHVibGljSWQsIHByZWZpeGVzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGh0bWxfanNfMS5ET0NVTUVOVF9NT0RFLkxJTUlURURfUVVJUktTO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBodG1sX2pzXzEuRE9DVU1FTlRfTU9ERS5OT19RVUlSS1M7XG59XG5leHBvcnRzLmdldERvY3VtZW50TW9kZSA9IGdldERvY3VtZW50TW9kZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRvY3R5cGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkVSUiA9IHZvaWQgMDtcbnZhciBFUlI7XG4oZnVuY3Rpb24gKEVSUikge1xuICAgIEVSUltcImNvbnRyb2xDaGFyYWN0ZXJJbklucHV0U3RyZWFtXCJdID0gXCJjb250cm9sLWNoYXJhY3Rlci1pbi1pbnB1dC1zdHJlYW1cIjtcbiAgICBFUlJbXCJub25jaGFyYWN0ZXJJbklucHV0U3RyZWFtXCJdID0gXCJub25jaGFyYWN0ZXItaW4taW5wdXQtc3RyZWFtXCI7XG4gICAgRVJSW1wic3Vycm9nYXRlSW5JbnB1dFN0cmVhbVwiXSA9IFwic3Vycm9nYXRlLWluLWlucHV0LXN0cmVhbVwiO1xuICAgIEVSUltcIm5vblZvaWRIdG1sRWxlbWVudFN0YXJ0VGFnV2l0aFRyYWlsaW5nU29saWR1c1wiXSA9IFwibm9uLXZvaWQtaHRtbC1lbGVtZW50LXN0YXJ0LXRhZy13aXRoLXRyYWlsaW5nLXNvbGlkdXNcIjtcbiAgICBFUlJbXCJlbmRUYWdXaXRoQXR0cmlidXRlc1wiXSA9IFwiZW5kLXRhZy13aXRoLWF0dHJpYnV0ZXNcIjtcbiAgICBFUlJbXCJlbmRUYWdXaXRoVHJhaWxpbmdTb2xpZHVzXCJdID0gXCJlbmQtdGFnLXdpdGgtdHJhaWxpbmctc29saWR1c1wiO1xuICAgIEVSUltcInVuZXhwZWN0ZWRTb2xpZHVzSW5UYWdcIl0gPSBcInVuZXhwZWN0ZWQtc29saWR1cy1pbi10YWdcIjtcbiAgICBFUlJbXCJ1bmV4cGVjdGVkTnVsbENoYXJhY3RlclwiXSA9IFwidW5leHBlY3RlZC1udWxsLWNoYXJhY3RlclwiO1xuICAgIEVSUltcInVuZXhwZWN0ZWRRdWVzdGlvbk1hcmtJbnN0ZWFkT2ZUYWdOYW1lXCJdID0gXCJ1bmV4cGVjdGVkLXF1ZXN0aW9uLW1hcmstaW5zdGVhZC1vZi10YWctbmFtZVwiO1xuICAgIEVSUltcImludmFsaWRGaXJzdENoYXJhY3Rlck9mVGFnTmFtZVwiXSA9IFwiaW52YWxpZC1maXJzdC1jaGFyYWN0ZXItb2YtdGFnLW5hbWVcIjtcbiAgICBFUlJbXCJ1bmV4cGVjdGVkRXF1YWxzU2lnbkJlZm9yZUF0dHJpYnV0ZU5hbWVcIl0gPSBcInVuZXhwZWN0ZWQtZXF1YWxzLXNpZ24tYmVmb3JlLWF0dHJpYnV0ZS1uYW1lXCI7XG4gICAgRVJSW1wibWlzc2luZ0VuZFRhZ05hbWVcIl0gPSBcIm1pc3NpbmctZW5kLXRhZy1uYW1lXCI7XG4gICAgRVJSW1widW5leHBlY3RlZENoYXJhY3RlckluQXR0cmlidXRlTmFtZVwiXSA9IFwidW5leHBlY3RlZC1jaGFyYWN0ZXItaW4tYXR0cmlidXRlLW5hbWVcIjtcbiAgICBFUlJbXCJ1bmtub3duTmFtZWRDaGFyYWN0ZXJSZWZlcmVuY2VcIl0gPSBcInVua25vd24tbmFtZWQtY2hhcmFjdGVyLXJlZmVyZW5jZVwiO1xuICAgIEVSUltcIm1pc3NpbmdTZW1pY29sb25BZnRlckNoYXJhY3RlclJlZmVyZW5jZVwiXSA9IFwibWlzc2luZy1zZW1pY29sb24tYWZ0ZXItY2hhcmFjdGVyLXJlZmVyZW5jZVwiO1xuICAgIEVSUltcInVuZXhwZWN0ZWRDaGFyYWN0ZXJBZnRlckRvY3R5cGVTeXN0ZW1JZGVudGlmaWVyXCJdID0gXCJ1bmV4cGVjdGVkLWNoYXJhY3Rlci1hZnRlci1kb2N0eXBlLXN5c3RlbS1pZGVudGlmaWVyXCI7XG4gICAgRVJSW1widW5leHBlY3RlZENoYXJhY3RlckluVW5xdW90ZWRBdHRyaWJ1dGVWYWx1ZVwiXSA9IFwidW5leHBlY3RlZC1jaGFyYWN0ZXItaW4tdW5xdW90ZWQtYXR0cmlidXRlLXZhbHVlXCI7XG4gICAgRVJSW1wiZW9mQmVmb3JlVGFnTmFtZVwiXSA9IFwiZW9mLWJlZm9yZS10YWctbmFtZVwiO1xuICAgIEVSUltcImVvZkluVGFnXCJdID0gXCJlb2YtaW4tdGFnXCI7XG4gICAgRVJSW1wibWlzc2luZ0F0dHJpYnV0ZVZhbHVlXCJdID0gXCJtaXNzaW5nLWF0dHJpYnV0ZS12YWx1ZVwiO1xuICAgIEVSUltcIm1pc3NpbmdXaGl0ZXNwYWNlQmV0d2VlbkF0dHJpYnV0ZXNcIl0gPSBcIm1pc3Npbmctd2hpdGVzcGFjZS1iZXR3ZWVuLWF0dHJpYnV0ZXNcIjtcbiAgICBFUlJbXCJtaXNzaW5nV2hpdGVzcGFjZUFmdGVyRG9jdHlwZVB1YmxpY0tleXdvcmRcIl0gPSBcIm1pc3Npbmctd2hpdGVzcGFjZS1hZnRlci1kb2N0eXBlLXB1YmxpYy1rZXl3b3JkXCI7XG4gICAgRVJSW1wibWlzc2luZ1doaXRlc3BhY2VCZXR3ZWVuRG9jdHlwZVB1YmxpY0FuZFN5c3RlbUlkZW50aWZpZXJzXCJdID0gXCJtaXNzaW5nLXdoaXRlc3BhY2UtYmV0d2Vlbi1kb2N0eXBlLXB1YmxpYy1hbmQtc3lzdGVtLWlkZW50aWZpZXJzXCI7XG4gICAgRVJSW1wibWlzc2luZ1doaXRlc3BhY2VBZnRlckRvY3R5cGVTeXN0ZW1LZXl3b3JkXCJdID0gXCJtaXNzaW5nLXdoaXRlc3BhY2UtYWZ0ZXItZG9jdHlwZS1zeXN0ZW0ta2V5d29yZFwiO1xuICAgIEVSUltcIm1pc3NpbmdRdW90ZUJlZm9yZURvY3R5cGVQdWJsaWNJZGVudGlmaWVyXCJdID0gXCJtaXNzaW5nLXF1b3RlLWJlZm9yZS1kb2N0eXBlLXB1YmxpYy1pZGVudGlmaWVyXCI7XG4gICAgRVJSW1wibWlzc2luZ1F1b3RlQmVmb3JlRG9jdHlwZVN5c3RlbUlkZW50aWZpZXJcIl0gPSBcIm1pc3NpbmctcXVvdGUtYmVmb3JlLWRvY3R5cGUtc3lzdGVtLWlkZW50aWZpZXJcIjtcbiAgICBFUlJbXCJtaXNzaW5nRG9jdHlwZVB1YmxpY0lkZW50aWZpZXJcIl0gPSBcIm1pc3NpbmctZG9jdHlwZS1wdWJsaWMtaWRlbnRpZmllclwiO1xuICAgIEVSUltcIm1pc3NpbmdEb2N0eXBlU3lzdGVtSWRlbnRpZmllclwiXSA9IFwibWlzc2luZy1kb2N0eXBlLXN5c3RlbS1pZGVudGlmaWVyXCI7XG4gICAgRVJSW1wiYWJydXB0RG9jdHlwZVB1YmxpY0lkZW50aWZpZXJcIl0gPSBcImFicnVwdC1kb2N0eXBlLXB1YmxpYy1pZGVudGlmaWVyXCI7XG4gICAgRVJSW1wiYWJydXB0RG9jdHlwZVN5c3RlbUlkZW50aWZpZXJcIl0gPSBcImFicnVwdC1kb2N0eXBlLXN5c3RlbS1pZGVudGlmaWVyXCI7XG4gICAgRVJSW1wiY2RhdGFJbkh0bWxDb250ZW50XCJdID0gXCJjZGF0YS1pbi1odG1sLWNvbnRlbnRcIjtcbiAgICBFUlJbXCJpbmNvcnJlY3RseU9wZW5lZENvbW1lbnRcIl0gPSBcImluY29ycmVjdGx5LW9wZW5lZC1jb21tZW50XCI7XG4gICAgRVJSW1wiZW9mSW5TY3JpcHRIdG1sQ29tbWVudExpa2VUZXh0XCJdID0gXCJlb2YtaW4tc2NyaXB0LWh0bWwtY29tbWVudC1saWtlLXRleHRcIjtcbiAgICBFUlJbXCJlb2ZJbkRvY3R5cGVcIl0gPSBcImVvZi1pbi1kb2N0eXBlXCI7XG4gICAgRVJSW1wibmVzdGVkQ29tbWVudFwiXSA9IFwibmVzdGVkLWNvbW1lbnRcIjtcbiAgICBFUlJbXCJhYnJ1cHRDbG9zaW5nT2ZFbXB0eUNvbW1lbnRcIl0gPSBcImFicnVwdC1jbG9zaW5nLW9mLWVtcHR5LWNvbW1lbnRcIjtcbiAgICBFUlJbXCJlb2ZJbkNvbW1lbnRcIl0gPSBcImVvZi1pbi1jb21tZW50XCI7XG4gICAgRVJSW1wiaW5jb3JyZWN0bHlDbG9zZWRDb21tZW50XCJdID0gXCJpbmNvcnJlY3RseS1jbG9zZWQtY29tbWVudFwiO1xuICAgIEVSUltcImVvZkluQ2RhdGFcIl0gPSBcImVvZi1pbi1jZGF0YVwiO1xuICAgIEVSUltcImFic2VuY2VPZkRpZ2l0c0luTnVtZXJpY0NoYXJhY3RlclJlZmVyZW5jZVwiXSA9IFwiYWJzZW5jZS1vZi1kaWdpdHMtaW4tbnVtZXJpYy1jaGFyYWN0ZXItcmVmZXJlbmNlXCI7XG4gICAgRVJSW1wibnVsbENoYXJhY3RlclJlZmVyZW5jZVwiXSA9IFwibnVsbC1jaGFyYWN0ZXItcmVmZXJlbmNlXCI7XG4gICAgRVJSW1wic3Vycm9nYXRlQ2hhcmFjdGVyUmVmZXJlbmNlXCJdID0gXCJzdXJyb2dhdGUtY2hhcmFjdGVyLXJlZmVyZW5jZVwiO1xuICAgIEVSUltcImNoYXJhY3RlclJlZmVyZW5jZU91dHNpZGVVbmljb2RlUmFuZ2VcIl0gPSBcImNoYXJhY3Rlci1yZWZlcmVuY2Utb3V0c2lkZS11bmljb2RlLXJhbmdlXCI7XG4gICAgRVJSW1wiY29udHJvbENoYXJhY3RlclJlZmVyZW5jZVwiXSA9IFwiY29udHJvbC1jaGFyYWN0ZXItcmVmZXJlbmNlXCI7XG4gICAgRVJSW1wibm9uY2hhcmFjdGVyQ2hhcmFjdGVyUmVmZXJlbmNlXCJdID0gXCJub25jaGFyYWN0ZXItY2hhcmFjdGVyLXJlZmVyZW5jZVwiO1xuICAgIEVSUltcIm1pc3NpbmdXaGl0ZXNwYWNlQmVmb3JlRG9jdHlwZU5hbWVcIl0gPSBcIm1pc3Npbmctd2hpdGVzcGFjZS1iZWZvcmUtZG9jdHlwZS1uYW1lXCI7XG4gICAgRVJSW1wibWlzc2luZ0RvY3R5cGVOYW1lXCJdID0gXCJtaXNzaW5nLWRvY3R5cGUtbmFtZVwiO1xuICAgIEVSUltcImludmFsaWRDaGFyYWN0ZXJTZXF1ZW5jZUFmdGVyRG9jdHlwZU5hbWVcIl0gPSBcImludmFsaWQtY2hhcmFjdGVyLXNlcXVlbmNlLWFmdGVyLWRvY3R5cGUtbmFtZVwiO1xuICAgIEVSUltcImR1cGxpY2F0ZUF0dHJpYnV0ZVwiXSA9IFwiZHVwbGljYXRlLWF0dHJpYnV0ZVwiO1xuICAgIEVSUltcIm5vbkNvbmZvcm1pbmdEb2N0eXBlXCJdID0gXCJub24tY29uZm9ybWluZy1kb2N0eXBlXCI7XG4gICAgRVJSW1wibWlzc2luZ0RvY3R5cGVcIl0gPSBcIm1pc3NpbmctZG9jdHlwZVwiO1xuICAgIEVSUltcIm1pc3BsYWNlZERvY3R5cGVcIl0gPSBcIm1pc3BsYWNlZC1kb2N0eXBlXCI7XG4gICAgRVJSW1wiZW5kVGFnV2l0aG91dE1hdGNoaW5nT3BlbkVsZW1lbnRcIl0gPSBcImVuZC10YWctd2l0aG91dC1tYXRjaGluZy1vcGVuLWVsZW1lbnRcIjtcbiAgICBFUlJbXCJjbG9zaW5nT2ZFbGVtZW50V2l0aE9wZW5DaGlsZEVsZW1lbnRzXCJdID0gXCJjbG9zaW5nLW9mLWVsZW1lbnQtd2l0aC1vcGVuLWNoaWxkLWVsZW1lbnRzXCI7XG4gICAgRVJSW1wiZGlzYWxsb3dlZENvbnRlbnRJbk5vc2NyaXB0SW5IZWFkXCJdID0gXCJkaXNhbGxvd2VkLWNvbnRlbnQtaW4tbm9zY3JpcHQtaW4taGVhZFwiO1xuICAgIEVSUltcIm9wZW5FbGVtZW50c0xlZnRBZnRlckVvZlwiXSA9IFwib3Blbi1lbGVtZW50cy1sZWZ0LWFmdGVyLWVvZlwiO1xuICAgIEVSUltcImFiYW5kb25lZEhlYWRFbGVtZW50Q2hpbGRcIl0gPSBcImFiYW5kb25lZC1oZWFkLWVsZW1lbnQtY2hpbGRcIjtcbiAgICBFUlJbXCJtaXNwbGFjZWRTdGFydFRhZ0ZvckhlYWRFbGVtZW50XCJdID0gXCJtaXNwbGFjZWQtc3RhcnQtdGFnLWZvci1oZWFkLWVsZW1lbnRcIjtcbiAgICBFUlJbXCJuZXN0ZWROb3NjcmlwdEluSGVhZFwiXSA9IFwibmVzdGVkLW5vc2NyaXB0LWluLWhlYWRcIjtcbiAgICBFUlJbXCJlb2ZJbkVsZW1lbnRUaGF0Q2FuQ29udGFpbk9ubHlUZXh0XCJdID0gXCJlb2YtaW4tZWxlbWVudC10aGF0LWNhbi1jb250YWluLW9ubHktdGV4dFwiO1xufSkoRVJSID0gZXhwb3J0cy5FUlIgfHwgKGV4cG9ydHMuRVJSID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9yLWNvZGVzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pc0ludGVncmF0aW9uUG9pbnQgPSBleHBvcnRzLmFkanVzdFRva2VuU1ZHVGFnTmFtZSA9IGV4cG9ydHMuYWRqdXN0VG9rZW5YTUxBdHRycyA9IGV4cG9ydHMuYWRqdXN0VG9rZW5TVkdBdHRycyA9IGV4cG9ydHMuYWRqdXN0VG9rZW5NYXRoTUxBdHRycyA9IGV4cG9ydHMuY2F1c2VzRXhpdCA9IGV4cG9ydHMuU1ZHX1RBR19OQU1FU19BREpVU1RNRU5UX01BUCA9IHZvaWQgMDtcbmNvbnN0IGh0bWxfanNfMSA9IHJlcXVpcmUoXCIuL2h0bWwuanNcIik7XG4vL01JTUUgdHlwZXNcbmNvbnN0IE1JTUVfVFlQRVMgPSB7XG4gICAgVEVYVF9IVE1MOiAndGV4dC9odG1sJyxcbiAgICBBUFBMSUNBVElPTl9YTUw6ICdhcHBsaWNhdGlvbi94aHRtbCt4bWwnLFxufTtcbi8vQXR0cmlidXRlc1xuY29uc3QgREVGSU5JVElPTl9VUkxfQVRUUiA9ICdkZWZpbml0aW9udXJsJztcbmNvbnN0IEFESlVTVEVEX0RFRklOSVRJT05fVVJMX0FUVFIgPSAnZGVmaW5pdGlvblVSTCc7XG5jb25zdCBTVkdfQVRUUlNfQURKVVNUTUVOVF9NQVAgPSBuZXcgTWFwKFtcbiAgICAnYXR0cmlidXRlTmFtZScsXG4gICAgJ2F0dHJpYnV0ZVR5cGUnLFxuICAgICdiYXNlRnJlcXVlbmN5JyxcbiAgICAnYmFzZVByb2ZpbGUnLFxuICAgICdjYWxjTW9kZScsXG4gICAgJ2NsaXBQYXRoVW5pdHMnLFxuICAgICdkaWZmdXNlQ29uc3RhbnQnLFxuICAgICdlZGdlTW9kZScsXG4gICAgJ2ZpbHRlclVuaXRzJyxcbiAgICAnZ2x5cGhSZWYnLFxuICAgICdncmFkaWVudFRyYW5zZm9ybScsXG4gICAgJ2dyYWRpZW50VW5pdHMnLFxuICAgICdrZXJuZWxNYXRyaXgnLFxuICAgICdrZXJuZWxVbml0TGVuZ3RoJyxcbiAgICAna2V5UG9pbnRzJyxcbiAgICAna2V5U3BsaW5lcycsXG4gICAgJ2tleVRpbWVzJyxcbiAgICAnbGVuZ3RoQWRqdXN0JyxcbiAgICAnbGltaXRpbmdDb25lQW5nbGUnLFxuICAgICdtYXJrZXJIZWlnaHQnLFxuICAgICdtYXJrZXJVbml0cycsXG4gICAgJ21hcmtlcldpZHRoJyxcbiAgICAnbWFza0NvbnRlbnRVbml0cycsXG4gICAgJ21hc2tVbml0cycsXG4gICAgJ251bU9jdGF2ZXMnLFxuICAgICdwYXRoTGVuZ3RoJyxcbiAgICAncGF0dGVybkNvbnRlbnRVbml0cycsXG4gICAgJ3BhdHRlcm5UcmFuc2Zvcm0nLFxuICAgICdwYXR0ZXJuVW5pdHMnLFxuICAgICdwb2ludHNBdFgnLFxuICAgICdwb2ludHNBdFknLFxuICAgICdwb2ludHNBdFonLFxuICAgICdwcmVzZXJ2ZUFscGhhJyxcbiAgICAncHJlc2VydmVBc3BlY3RSYXRpbycsXG4gICAgJ3ByaW1pdGl2ZVVuaXRzJyxcbiAgICAncmVmWCcsXG4gICAgJ3JlZlknLFxuICAgICdyZXBlYXRDb3VudCcsXG4gICAgJ3JlcGVhdER1cicsXG4gICAgJ3JlcXVpcmVkRXh0ZW5zaW9ucycsXG4gICAgJ3JlcXVpcmVkRmVhdHVyZXMnLFxuICAgICdzcGVjdWxhckNvbnN0YW50JyxcbiAgICAnc3BlY3VsYXJFeHBvbmVudCcsXG4gICAgJ3NwcmVhZE1ldGhvZCcsXG4gICAgJ3N0YXJ0T2Zmc2V0JyxcbiAgICAnc3RkRGV2aWF0aW9uJyxcbiAgICAnc3RpdGNoVGlsZXMnLFxuICAgICdzdXJmYWNlU2NhbGUnLFxuICAgICdzeXN0ZW1MYW5ndWFnZScsXG4gICAgJ3RhYmxlVmFsdWVzJyxcbiAgICAndGFyZ2V0WCcsXG4gICAgJ3RhcmdldFknLFxuICAgICd0ZXh0TGVuZ3RoJyxcbiAgICAndmlld0JveCcsXG4gICAgJ3ZpZXdUYXJnZXQnLFxuICAgICd4Q2hhbm5lbFNlbGVjdG9yJyxcbiAgICAneUNoYW5uZWxTZWxlY3RvcicsXG4gICAgJ3pvb21BbmRQYW4nLFxuXS5tYXAoKGF0dHIpID0+IFthdHRyLnRvTG93ZXJDYXNlKCksIGF0dHJdKSk7XG5jb25zdCBYTUxfQVRUUlNfQURKVVNUTUVOVF9NQVAgPSBuZXcgTWFwKFtcbiAgICBbJ3hsaW5rOmFjdHVhdGUnLCB7IHByZWZpeDogJ3hsaW5rJywgbmFtZTogJ2FjdHVhdGUnLCBuYW1lc3BhY2U6IGh0bWxfanNfMS5OUy5YTElOSyB9XSxcbiAgICBbJ3hsaW5rOmFyY3JvbGUnLCB7IHByZWZpeDogJ3hsaW5rJywgbmFtZTogJ2FyY3JvbGUnLCBuYW1lc3BhY2U6IGh0bWxfanNfMS5OUy5YTElOSyB9XSxcbiAgICBbJ3hsaW5rOmhyZWYnLCB7IHByZWZpeDogJ3hsaW5rJywgbmFtZTogJ2hyZWYnLCBuYW1lc3BhY2U6IGh0bWxfanNfMS5OUy5YTElOSyB9XSxcbiAgICBbJ3hsaW5rOnJvbGUnLCB7IHByZWZpeDogJ3hsaW5rJywgbmFtZTogJ3JvbGUnLCBuYW1lc3BhY2U6IGh0bWxfanNfMS5OUy5YTElOSyB9XSxcbiAgICBbJ3hsaW5rOnNob3cnLCB7IHByZWZpeDogJ3hsaW5rJywgbmFtZTogJ3Nob3cnLCBuYW1lc3BhY2U6IGh0bWxfanNfMS5OUy5YTElOSyB9XSxcbiAgICBbJ3hsaW5rOnRpdGxlJywgeyBwcmVmaXg6ICd4bGluaycsIG5hbWU6ICd0aXRsZScsIG5hbWVzcGFjZTogaHRtbF9qc18xLk5TLlhMSU5LIH1dLFxuICAgIFsneGxpbms6dHlwZScsIHsgcHJlZml4OiAneGxpbmsnLCBuYW1lOiAndHlwZScsIG5hbWVzcGFjZTogaHRtbF9qc18xLk5TLlhMSU5LIH1dLFxuICAgIFsneG1sOmJhc2UnLCB7IHByZWZpeDogJ3htbCcsIG5hbWU6ICdiYXNlJywgbmFtZXNwYWNlOiBodG1sX2pzXzEuTlMuWE1MIH1dLFxuICAgIFsneG1sOmxhbmcnLCB7IHByZWZpeDogJ3htbCcsIG5hbWU6ICdsYW5nJywgbmFtZXNwYWNlOiBodG1sX2pzXzEuTlMuWE1MIH1dLFxuICAgIFsneG1sOnNwYWNlJywgeyBwcmVmaXg6ICd4bWwnLCBuYW1lOiAnc3BhY2UnLCBuYW1lc3BhY2U6IGh0bWxfanNfMS5OUy5YTUwgfV0sXG4gICAgWyd4bWxucycsIHsgcHJlZml4OiAnJywgbmFtZTogJ3htbG5zJywgbmFtZXNwYWNlOiBodG1sX2pzXzEuTlMuWE1MTlMgfV0sXG4gICAgWyd4bWxuczp4bGluaycsIHsgcHJlZml4OiAneG1sbnMnLCBuYW1lOiAneGxpbmsnLCBuYW1lc3BhY2U6IGh0bWxfanNfMS5OUy5YTUxOUyB9XSxcbl0pO1xuLy9TVkcgdGFnIG5hbWVzIGFkanVzdG1lbnQgbWFwXG5leHBvcnRzLlNWR19UQUdfTkFNRVNfQURKVVNUTUVOVF9NQVAgPSBuZXcgTWFwKFtcbiAgICAnYWx0R2x5cGgnLFxuICAgICdhbHRHbHlwaERlZicsXG4gICAgJ2FsdEdseXBoSXRlbScsXG4gICAgJ2FuaW1hdGVDb2xvcicsXG4gICAgJ2FuaW1hdGVNb3Rpb24nLFxuICAgICdhbmltYXRlVHJhbnNmb3JtJyxcbiAgICAnY2xpcFBhdGgnLFxuICAgICdmZUJsZW5kJyxcbiAgICAnZmVDb2xvck1hdHJpeCcsXG4gICAgJ2ZlQ29tcG9uZW50VHJhbnNmZXInLFxuICAgICdmZUNvbXBvc2l0ZScsXG4gICAgJ2ZlQ29udm9sdmVNYXRyaXgnLFxuICAgICdmZURpZmZ1c2VMaWdodGluZycsXG4gICAgJ2ZlRGlzcGxhY2VtZW50TWFwJyxcbiAgICAnZmVEaXN0YW50TGlnaHQnLFxuICAgICdmZUZsb29kJyxcbiAgICAnZmVGdW5jQScsXG4gICAgJ2ZlRnVuY0InLFxuICAgICdmZUZ1bmNHJyxcbiAgICAnZmVGdW5jUicsXG4gICAgJ2ZlR2F1c3NpYW5CbHVyJyxcbiAgICAnZmVJbWFnZScsXG4gICAgJ2ZlTWVyZ2UnLFxuICAgICdmZU1lcmdlTm9kZScsXG4gICAgJ2ZlTW9ycGhvbG9neScsXG4gICAgJ2ZlT2Zmc2V0JyxcbiAgICAnZmVQb2ludExpZ2h0JyxcbiAgICAnZmVTcGVjdWxhckxpZ2h0aW5nJyxcbiAgICAnZmVTcG90TGlnaHQnLFxuICAgICdmZVRpbGUnLFxuICAgICdmZVR1cmJ1bGVuY2UnLFxuICAgICdmb3JlaWduT2JqZWN0JyxcbiAgICAnZ2x5cGhSZWYnLFxuICAgICdsaW5lYXJHcmFkaWVudCcsXG4gICAgJ3JhZGlhbEdyYWRpZW50JyxcbiAgICAndGV4dFBhdGgnLFxuXS5tYXAoKHRuKSA9PiBbdG4udG9Mb3dlckNhc2UoKSwgdG5dKSk7XG4vL1RhZ3MgdGhhdCBjYXVzZXMgZXhpdCBmcm9tIGZvcmVpZ24gY29udGVudFxuY29uc3QgRVhJVFNfRk9SRUlHTl9DT05URU5UID0gbmV3IFNldChbXG4gICAgaHRtbF9qc18xLlRBR19JRC5CLFxuICAgIGh0bWxfanNfMS5UQUdfSUQuQklHLFxuICAgIGh0bWxfanNfMS5UQUdfSUQuQkxPQ0tRVU9URSxcbiAgICBodG1sX2pzXzEuVEFHX0lELkJPRFksXG4gICAgaHRtbF9qc18xLlRBR19JRC5CUixcbiAgICBodG1sX2pzXzEuVEFHX0lELkNFTlRFUixcbiAgICBodG1sX2pzXzEuVEFHX0lELkNPREUsXG4gICAgaHRtbF9qc18xLlRBR19JRC5ERCxcbiAgICBodG1sX2pzXzEuVEFHX0lELkRJVixcbiAgICBodG1sX2pzXzEuVEFHX0lELkRMLFxuICAgIGh0bWxfanNfMS5UQUdfSUQuRFQsXG4gICAgaHRtbF9qc18xLlRBR19JRC5FTSxcbiAgICBodG1sX2pzXzEuVEFHX0lELkVNQkVELFxuICAgIGh0bWxfanNfMS5UQUdfSUQuSDEsXG4gICAgaHRtbF9qc18xLlRBR19JRC5IMixcbiAgICBodG1sX2pzXzEuVEFHX0lELkgzLFxuICAgIGh0bWxfanNfMS5UQUdfSUQuSDQsXG4gICAgaHRtbF9qc18xLlRBR19JRC5INSxcbiAgICBodG1sX2pzXzEuVEFHX0lELkg2LFxuICAgIGh0bWxfanNfMS5UQUdfSUQuSEVBRCxcbiAgICBodG1sX2pzXzEuVEFHX0lELkhSLFxuICAgIGh0bWxfanNfMS5UQUdfSUQuSSxcbiAgICBodG1sX2pzXzEuVEFHX0lELklNRyxcbiAgICBodG1sX2pzXzEuVEFHX0lELkxJLFxuICAgIGh0bWxfanNfMS5UQUdfSUQuTElTVElORyxcbiAgICBodG1sX2pzXzEuVEFHX0lELk1FTlUsXG4gICAgaHRtbF9qc18xLlRBR19JRC5NRVRBLFxuICAgIGh0bWxfanNfMS5UQUdfSUQuTk9CUixcbiAgICBodG1sX2pzXzEuVEFHX0lELk9MLFxuICAgIGh0bWxfanNfMS5UQUdfSUQuUCxcbiAgICBodG1sX2pzXzEuVEFHX0lELlBSRSxcbiAgICBodG1sX2pzXzEuVEFHX0lELlJVQlksXG4gICAgaHRtbF9qc18xLlRBR19JRC5TLFxuICAgIGh0bWxfanNfMS5UQUdfSUQuU01BTEwsXG4gICAgaHRtbF9qc18xLlRBR19JRC5TUEFOLFxuICAgIGh0bWxfanNfMS5UQUdfSUQuU1RST05HLFxuICAgIGh0bWxfanNfMS5UQUdfSUQuU1RSSUtFLFxuICAgIGh0bWxfanNfMS5UQUdfSUQuU1VCLFxuICAgIGh0bWxfanNfMS5UQUdfSUQuU1VQLFxuICAgIGh0bWxfanNfMS5UQUdfSUQuVEFCTEUsXG4gICAgaHRtbF9qc18xLlRBR19JRC5UVCxcbiAgICBodG1sX2pzXzEuVEFHX0lELlUsXG4gICAgaHRtbF9qc18xLlRBR19JRC5VTCxcbiAgICBodG1sX2pzXzEuVEFHX0lELlZBUixcbl0pO1xuLy9DaGVjayBleGl0IGZyb20gZm9yZWlnbiBjb250ZW50XG5mdW5jdGlvbiBjYXVzZXNFeGl0KHN0YXJ0VGFnVG9rZW4pIHtcbiAgICBjb25zdCB0biA9IHN0YXJ0VGFnVG9rZW4udGFnSUQ7XG4gICAgY29uc3QgaXNGb250V2l0aEF0dHJzID0gdG4gPT09IGh0bWxfanNfMS5UQUdfSUQuRk9OVCAmJlxuICAgICAgICBzdGFydFRhZ1Rva2VuLmF0dHJzLnNvbWUoKHsgbmFtZSB9KSA9PiBuYW1lID09PSBodG1sX2pzXzEuQVRUUlMuQ09MT1IgfHwgbmFtZSA9PT0gaHRtbF9qc18xLkFUVFJTLlNJWkUgfHwgbmFtZSA9PT0gaHRtbF9qc18xLkFUVFJTLkZBQ0UpO1xuICAgIHJldHVybiBpc0ZvbnRXaXRoQXR0cnMgfHwgRVhJVFNfRk9SRUlHTl9DT05URU5ULmhhcyh0bik7XG59XG5leHBvcnRzLmNhdXNlc0V4aXQgPSBjYXVzZXNFeGl0O1xuLy9Ub2tlbiBhZGp1c3RtZW50c1xuZnVuY3Rpb24gYWRqdXN0VG9rZW5NYXRoTUxBdHRycyh0b2tlbikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW4uYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHRva2VuLmF0dHJzW2ldLm5hbWUgPT09IERFRklOSVRJT05fVVJMX0FUVFIpIHtcbiAgICAgICAgICAgIHRva2VuLmF0dHJzW2ldLm5hbWUgPSBBREpVU1RFRF9ERUZJTklUSU9OX1VSTF9BVFRSO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLmFkanVzdFRva2VuTWF0aE1MQXR0cnMgPSBhZGp1c3RUb2tlbk1hdGhNTEF0dHJzO1xuZnVuY3Rpb24gYWRqdXN0VG9rZW5TVkdBdHRycyh0b2tlbikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW4uYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgYWRqdXN0ZWRBdHRyTmFtZSA9IFNWR19BVFRSU19BREpVU1RNRU5UX01BUC5nZXQodG9rZW4uYXR0cnNbaV0ubmFtZSk7XG4gICAgICAgIGlmIChhZGp1c3RlZEF0dHJOYW1lICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRva2VuLmF0dHJzW2ldLm5hbWUgPSBhZGp1c3RlZEF0dHJOYW1lO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5hZGp1c3RUb2tlblNWR0F0dHJzID0gYWRqdXN0VG9rZW5TVkdBdHRycztcbmZ1bmN0aW9uIGFkanVzdFRva2VuWE1MQXR0cnModG9rZW4pIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2VuLmF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGFkanVzdGVkQXR0ckVudHJ5ID0gWE1MX0FUVFJTX0FESlVTVE1FTlRfTUFQLmdldCh0b2tlbi5hdHRyc1tpXS5uYW1lKTtcbiAgICAgICAgaWYgKGFkanVzdGVkQXR0ckVudHJ5KSB7XG4gICAgICAgICAgICB0b2tlbi5hdHRyc1tpXS5wcmVmaXggPSBhZGp1c3RlZEF0dHJFbnRyeS5wcmVmaXg7XG4gICAgICAgICAgICB0b2tlbi5hdHRyc1tpXS5uYW1lID0gYWRqdXN0ZWRBdHRyRW50cnkubmFtZTtcbiAgICAgICAgICAgIHRva2VuLmF0dHJzW2ldLm5hbWVzcGFjZSA9IGFkanVzdGVkQXR0ckVudHJ5Lm5hbWVzcGFjZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuYWRqdXN0VG9rZW5YTUxBdHRycyA9IGFkanVzdFRva2VuWE1MQXR0cnM7XG5mdW5jdGlvbiBhZGp1c3RUb2tlblNWR1RhZ05hbWUodG9rZW4pIHtcbiAgICBjb25zdCBhZGp1c3RlZFRhZ05hbWUgPSBleHBvcnRzLlNWR19UQUdfTkFNRVNfQURKVVNUTUVOVF9NQVAuZ2V0KHRva2VuLnRhZ05hbWUpO1xuICAgIGlmIChhZGp1c3RlZFRhZ05hbWUgIT0gbnVsbCkge1xuICAgICAgICB0b2tlbi50YWdOYW1lID0gYWRqdXN0ZWRUYWdOYW1lO1xuICAgICAgICB0b2tlbi50YWdJRCA9ICgwLCBodG1sX2pzXzEuZ2V0VGFnSUQpKHRva2VuLnRhZ05hbWUpO1xuICAgIH1cbn1cbmV4cG9ydHMuYWRqdXN0VG9rZW5TVkdUYWdOYW1lID0gYWRqdXN0VG9rZW5TVkdUYWdOYW1lO1xuLy9JbnRlZ3JhdGlvbiBwb2ludHNcbmZ1bmN0aW9uIGlzTWF0aE1MVGV4dEludGVncmF0aW9uUG9pbnQodG4sIG5zKSB7XG4gICAgcmV0dXJuIG5zID09PSBodG1sX2pzXzEuTlMuTUFUSE1MICYmICh0biA9PT0gaHRtbF9qc18xLlRBR19JRC5NSSB8fCB0biA9PT0gaHRtbF9qc18xLlRBR19JRC5NTyB8fCB0biA9PT0gaHRtbF9qc18xLlRBR19JRC5NTiB8fCB0biA9PT0gaHRtbF9qc18xLlRBR19JRC5NUyB8fCB0biA9PT0gaHRtbF9qc18xLlRBR19JRC5NVEVYVCk7XG59XG5mdW5jdGlvbiBpc0h0bWxJbnRlZ3JhdGlvblBvaW50KHRuLCBucywgYXR0cnMpIHtcbiAgICBpZiAobnMgPT09IGh0bWxfanNfMS5OUy5NQVRITUwgJiYgdG4gPT09IGh0bWxfanNfMS5UQUdfSUQuQU5OT1RBVElPTl9YTUwpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdHRycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGF0dHJzW2ldLm5hbWUgPT09IGh0bWxfanNfMS5BVFRSUy5FTkNPRElORykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXR0cnNbaV0udmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPT09IE1JTUVfVFlQRVMuVEVYVF9IVE1MIHx8IHZhbHVlID09PSBNSU1FX1RZUEVTLkFQUExJQ0FUSU9OX1hNTDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnMgPT09IGh0bWxfanNfMS5OUy5TVkcgJiYgKHRuID09PSBodG1sX2pzXzEuVEFHX0lELkZPUkVJR05fT0JKRUNUIHx8IHRuID09PSBodG1sX2pzXzEuVEFHX0lELkRFU0MgfHwgdG4gPT09IGh0bWxfanNfMS5UQUdfSUQuVElUTEUpO1xufVxuZnVuY3Rpb24gaXNJbnRlZ3JhdGlvblBvaW50KHRuLCBucywgYXR0cnMsIGZvcmVpZ25OUykge1xuICAgIHJldHVybiAoKCghZm9yZWlnbk5TIHx8IGZvcmVpZ25OUyA9PT0gaHRtbF9qc18xLk5TLkhUTUwpICYmIGlzSHRtbEludGVncmF0aW9uUG9pbnQodG4sIG5zLCBhdHRycykpIHx8XG4gICAgICAgICgoIWZvcmVpZ25OUyB8fCBmb3JlaWduTlMgPT09IGh0bWxfanNfMS5OUy5NQVRITUwpICYmIGlzTWF0aE1MVGV4dEludGVncmF0aW9uUG9pbnQodG4sIG5zKSkpO1xufVxuZXhwb3J0cy5pc0ludGVncmF0aW9uUG9pbnQgPSBpc0ludGVncmF0aW9uUG9pbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1mb3JlaWduLWNvbnRlbnQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmhhc1VuZXNjYXBlZFRleHQgPSBleHBvcnRzLmlzTnVtYmVyZWRIZWFkZXIgPSBleHBvcnRzLlNQRUNJQUxfRUxFTUVOVFMgPSBleHBvcnRzLmdldFRhZ0lEID0gZXhwb3J0cy5UQUdfSUQgPSBleHBvcnRzLlRBR19OQU1FUyA9IGV4cG9ydHMuRE9DVU1FTlRfTU9ERSA9IGV4cG9ydHMuQVRUUlMgPSBleHBvcnRzLk5TID0gdm9pZCAwO1xuLyoqIEFsbCB2YWxpZCBuYW1lc3BhY2VzIGluIEhUTUwuICovXG52YXIgTlM7XG4oZnVuY3Rpb24gKE5TKSB7XG4gICAgTlNbXCJIVE1MXCJdID0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI7XG4gICAgTlNbXCJNQVRITUxcIl0gPSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUxcIjtcbiAgICBOU1tcIlNWR1wiXSA9IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtcbiAgICBOU1tcIlhMSU5LXCJdID0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCI7XG4gICAgTlNbXCJYTUxcIl0gPSBcImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZVwiO1xuICAgIE5TW1wiWE1MTlNcIl0gPSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvXCI7XG59KShOUyA9IGV4cG9ydHMuTlMgfHwgKGV4cG9ydHMuTlMgPSB7fSkpO1xudmFyIEFUVFJTO1xuKGZ1bmN0aW9uIChBVFRSUykge1xuICAgIEFUVFJTW1wiVFlQRVwiXSA9IFwidHlwZVwiO1xuICAgIEFUVFJTW1wiQUNUSU9OXCJdID0gXCJhY3Rpb25cIjtcbiAgICBBVFRSU1tcIkVOQ09ESU5HXCJdID0gXCJlbmNvZGluZ1wiO1xuICAgIEFUVFJTW1wiUFJPTVBUXCJdID0gXCJwcm9tcHRcIjtcbiAgICBBVFRSU1tcIk5BTUVcIl0gPSBcIm5hbWVcIjtcbiAgICBBVFRSU1tcIkNPTE9SXCJdID0gXCJjb2xvclwiO1xuICAgIEFUVFJTW1wiRkFDRVwiXSA9IFwiZmFjZVwiO1xuICAgIEFUVFJTW1wiU0laRVwiXSA9IFwic2l6ZVwiO1xufSkoQVRUUlMgPSBleHBvcnRzLkFUVFJTIHx8IChleHBvcnRzLkFUVFJTID0ge30pKTtcbi8qKlxuICogVGhlIG1vZGUgb2YgdGhlIGRvY3VtZW50LlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1kb2N1bWVudC1saW1pdGVkLXF1aXJrc31cbiAqL1xudmFyIERPQ1VNRU5UX01PREU7XG4oZnVuY3Rpb24gKERPQ1VNRU5UX01PREUpIHtcbiAgICBET0NVTUVOVF9NT0RFW1wiTk9fUVVJUktTXCJdID0gXCJuby1xdWlya3NcIjtcbiAgICBET0NVTUVOVF9NT0RFW1wiUVVJUktTXCJdID0gXCJxdWlya3NcIjtcbiAgICBET0NVTUVOVF9NT0RFW1wiTElNSVRFRF9RVUlSS1NcIl0gPSBcImxpbWl0ZWQtcXVpcmtzXCI7XG59KShET0NVTUVOVF9NT0RFID0gZXhwb3J0cy5ET0NVTUVOVF9NT0RFIHx8IChleHBvcnRzLkRPQ1VNRU5UX01PREUgPSB7fSkpO1xudmFyIFRBR19OQU1FUztcbihmdW5jdGlvbiAoVEFHX05BTUVTKSB7XG4gICAgVEFHX05BTUVTW1wiQVwiXSA9IFwiYVwiO1xuICAgIFRBR19OQU1FU1tcIkFERFJFU1NcIl0gPSBcImFkZHJlc3NcIjtcbiAgICBUQUdfTkFNRVNbXCJBTk5PVEFUSU9OX1hNTFwiXSA9IFwiYW5ub3RhdGlvbi14bWxcIjtcbiAgICBUQUdfTkFNRVNbXCJBUFBMRVRcIl0gPSBcImFwcGxldFwiO1xuICAgIFRBR19OQU1FU1tcIkFSRUFcIl0gPSBcImFyZWFcIjtcbiAgICBUQUdfTkFNRVNbXCJBUlRJQ0xFXCJdID0gXCJhcnRpY2xlXCI7XG4gICAgVEFHX05BTUVTW1wiQVNJREVcIl0gPSBcImFzaWRlXCI7XG4gICAgVEFHX05BTUVTW1wiQlwiXSA9IFwiYlwiO1xuICAgIFRBR19OQU1FU1tcIkJBU0VcIl0gPSBcImJhc2VcIjtcbiAgICBUQUdfTkFNRVNbXCJCQVNFRk9OVFwiXSA9IFwiYmFzZWZvbnRcIjtcbiAgICBUQUdfTkFNRVNbXCJCR1NPVU5EXCJdID0gXCJiZ3NvdW5kXCI7XG4gICAgVEFHX05BTUVTW1wiQklHXCJdID0gXCJiaWdcIjtcbiAgICBUQUdfTkFNRVNbXCJCTE9DS1FVT1RFXCJdID0gXCJibG9ja3F1b3RlXCI7XG4gICAgVEFHX05BTUVTW1wiQk9EWVwiXSA9IFwiYm9keVwiO1xuICAgIFRBR19OQU1FU1tcIkJSXCJdID0gXCJiclwiO1xuICAgIFRBR19OQU1FU1tcIkJVVFRPTlwiXSA9IFwiYnV0dG9uXCI7XG4gICAgVEFHX05BTUVTW1wiQ0FQVElPTlwiXSA9IFwiY2FwdGlvblwiO1xuICAgIFRBR19OQU1FU1tcIkNFTlRFUlwiXSA9IFwiY2VudGVyXCI7XG4gICAgVEFHX05BTUVTW1wiQ09ERVwiXSA9IFwiY29kZVwiO1xuICAgIFRBR19OQU1FU1tcIkNPTFwiXSA9IFwiY29sXCI7XG4gICAgVEFHX05BTUVTW1wiQ09MR1JPVVBcIl0gPSBcImNvbGdyb3VwXCI7XG4gICAgVEFHX05BTUVTW1wiRERcIl0gPSBcImRkXCI7XG4gICAgVEFHX05BTUVTW1wiREVTQ1wiXSA9IFwiZGVzY1wiO1xuICAgIFRBR19OQU1FU1tcIkRFVEFJTFNcIl0gPSBcImRldGFpbHNcIjtcbiAgICBUQUdfTkFNRVNbXCJESUFMT0dcIl0gPSBcImRpYWxvZ1wiO1xuICAgIFRBR19OQU1FU1tcIkRJUlwiXSA9IFwiZGlyXCI7XG4gICAgVEFHX05BTUVTW1wiRElWXCJdID0gXCJkaXZcIjtcbiAgICBUQUdfTkFNRVNbXCJETFwiXSA9IFwiZGxcIjtcbiAgICBUQUdfTkFNRVNbXCJEVFwiXSA9IFwiZHRcIjtcbiAgICBUQUdfTkFNRVNbXCJFTVwiXSA9IFwiZW1cIjtcbiAgICBUQUdfTkFNRVNbXCJFTUJFRFwiXSA9IFwiZW1iZWRcIjtcbiAgICBUQUdfTkFNRVNbXCJGSUVMRFNFVFwiXSA9IFwiZmllbGRzZXRcIjtcbiAgICBUQUdfTkFNRVNbXCJGSUdDQVBUSU9OXCJdID0gXCJmaWdjYXB0aW9uXCI7XG4gICAgVEFHX05BTUVTW1wiRklHVVJFXCJdID0gXCJmaWd1cmVcIjtcbiAgICBUQUdfTkFNRVNbXCJGT05UXCJdID0gXCJmb250XCI7XG4gICAgVEFHX05BTUVTW1wiRk9PVEVSXCJdID0gXCJmb290ZXJcIjtcbiAgICBUQUdfTkFNRVNbXCJGT1JFSUdOX09CSkVDVFwiXSA9IFwiZm9yZWlnbk9iamVjdFwiO1xuICAgIFRBR19OQU1FU1tcIkZPUk1cIl0gPSBcImZvcm1cIjtcbiAgICBUQUdfTkFNRVNbXCJGUkFNRVwiXSA9IFwiZnJhbWVcIjtcbiAgICBUQUdfTkFNRVNbXCJGUkFNRVNFVFwiXSA9IFwiZnJhbWVzZXRcIjtcbiAgICBUQUdfTkFNRVNbXCJIMVwiXSA9IFwiaDFcIjtcbiAgICBUQUdfTkFNRVNbXCJIMlwiXSA9IFwiaDJcIjtcbiAgICBUQUdfTkFNRVNbXCJIM1wiXSA9IFwiaDNcIjtcbiAgICBUQUdfTkFNRVNbXCJINFwiXSA9IFwiaDRcIjtcbiAgICBUQUdfTkFNRVNbXCJINVwiXSA9IFwiaDVcIjtcbiAgICBUQUdfTkFNRVNbXCJINlwiXSA9IFwiaDZcIjtcbiAgICBUQUdfTkFNRVNbXCJIRUFEXCJdID0gXCJoZWFkXCI7XG4gICAgVEFHX05BTUVTW1wiSEVBREVSXCJdID0gXCJoZWFkZXJcIjtcbiAgICBUQUdfTkFNRVNbXCJIR1JPVVBcIl0gPSBcImhncm91cFwiO1xuICAgIFRBR19OQU1FU1tcIkhSXCJdID0gXCJoclwiO1xuICAgIFRBR19OQU1FU1tcIkhUTUxcIl0gPSBcImh0bWxcIjtcbiAgICBUQUdfTkFNRVNbXCJJXCJdID0gXCJpXCI7XG4gICAgVEFHX05BTUVTW1wiSU1HXCJdID0gXCJpbWdcIjtcbiAgICBUQUdfTkFNRVNbXCJJTUFHRVwiXSA9IFwiaW1hZ2VcIjtcbiAgICBUQUdfTkFNRVNbXCJJTlBVVFwiXSA9IFwiaW5wdXRcIjtcbiAgICBUQUdfTkFNRVNbXCJJRlJBTUVcIl0gPSBcImlmcmFtZVwiO1xuICAgIFRBR19OQU1FU1tcIktFWUdFTlwiXSA9IFwia2V5Z2VuXCI7XG4gICAgVEFHX05BTUVTW1wiTEFCRUxcIl0gPSBcImxhYmVsXCI7XG4gICAgVEFHX05BTUVTW1wiTElcIl0gPSBcImxpXCI7XG4gICAgVEFHX05BTUVTW1wiTElOS1wiXSA9IFwibGlua1wiO1xuICAgIFRBR19OQU1FU1tcIkxJU1RJTkdcIl0gPSBcImxpc3RpbmdcIjtcbiAgICBUQUdfTkFNRVNbXCJNQUlOXCJdID0gXCJtYWluXCI7XG4gICAgVEFHX05BTUVTW1wiTUFMSUdOTUFSS1wiXSA9IFwibWFsaWdubWFya1wiO1xuICAgIFRBR19OQU1FU1tcIk1BUlFVRUVcIl0gPSBcIm1hcnF1ZWVcIjtcbiAgICBUQUdfTkFNRVNbXCJNQVRIXCJdID0gXCJtYXRoXCI7XG4gICAgVEFHX05BTUVTW1wiTUVOVVwiXSA9IFwibWVudVwiO1xuICAgIFRBR19OQU1FU1tcIk1FVEFcIl0gPSBcIm1ldGFcIjtcbiAgICBUQUdfTkFNRVNbXCJNR0xZUEhcIl0gPSBcIm1nbHlwaFwiO1xuICAgIFRBR19OQU1FU1tcIk1JXCJdID0gXCJtaVwiO1xuICAgIFRBR19OQU1FU1tcIk1PXCJdID0gXCJtb1wiO1xuICAgIFRBR19OQU1FU1tcIk1OXCJdID0gXCJtblwiO1xuICAgIFRBR19OQU1FU1tcIk1TXCJdID0gXCJtc1wiO1xuICAgIFRBR19OQU1FU1tcIk1URVhUXCJdID0gXCJtdGV4dFwiO1xuICAgIFRBR19OQU1FU1tcIk5BVlwiXSA9IFwibmF2XCI7XG4gICAgVEFHX05BTUVTW1wiTk9CUlwiXSA9IFwibm9iclwiO1xuICAgIFRBR19OQU1FU1tcIk5PRlJBTUVTXCJdID0gXCJub2ZyYW1lc1wiO1xuICAgIFRBR19OQU1FU1tcIk5PRU1CRURcIl0gPSBcIm5vZW1iZWRcIjtcbiAgICBUQUdfTkFNRVNbXCJOT1NDUklQVFwiXSA9IFwibm9zY3JpcHRcIjtcbiAgICBUQUdfTkFNRVNbXCJPQkpFQ1RcIl0gPSBcIm9iamVjdFwiO1xuICAgIFRBR19OQU1FU1tcIk9MXCJdID0gXCJvbFwiO1xuICAgIFRBR19OQU1FU1tcIk9QVEdST1VQXCJdID0gXCJvcHRncm91cFwiO1xuICAgIFRBR19OQU1FU1tcIk9QVElPTlwiXSA9IFwib3B0aW9uXCI7XG4gICAgVEFHX05BTUVTW1wiUFwiXSA9IFwicFwiO1xuICAgIFRBR19OQU1FU1tcIlBBUkFNXCJdID0gXCJwYXJhbVwiO1xuICAgIFRBR19OQU1FU1tcIlBMQUlOVEVYVFwiXSA9IFwicGxhaW50ZXh0XCI7XG4gICAgVEFHX05BTUVTW1wiUFJFXCJdID0gXCJwcmVcIjtcbiAgICBUQUdfTkFNRVNbXCJSQlwiXSA9IFwicmJcIjtcbiAgICBUQUdfTkFNRVNbXCJSUFwiXSA9IFwicnBcIjtcbiAgICBUQUdfTkFNRVNbXCJSVFwiXSA9IFwicnRcIjtcbiAgICBUQUdfTkFNRVNbXCJSVENcIl0gPSBcInJ0Y1wiO1xuICAgIFRBR19OQU1FU1tcIlJVQllcIl0gPSBcInJ1YnlcIjtcbiAgICBUQUdfTkFNRVNbXCJTXCJdID0gXCJzXCI7XG4gICAgVEFHX05BTUVTW1wiU0NSSVBUXCJdID0gXCJzY3JpcHRcIjtcbiAgICBUQUdfTkFNRVNbXCJTRUNUSU9OXCJdID0gXCJzZWN0aW9uXCI7XG4gICAgVEFHX05BTUVTW1wiU0VMRUNUXCJdID0gXCJzZWxlY3RcIjtcbiAgICBUQUdfTkFNRVNbXCJTT1VSQ0VcIl0gPSBcInNvdXJjZVwiO1xuICAgIFRBR19OQU1FU1tcIlNNQUxMXCJdID0gXCJzbWFsbFwiO1xuICAgIFRBR19OQU1FU1tcIlNQQU5cIl0gPSBcInNwYW5cIjtcbiAgICBUQUdfTkFNRVNbXCJTVFJJS0VcIl0gPSBcInN0cmlrZVwiO1xuICAgIFRBR19OQU1FU1tcIlNUUk9OR1wiXSA9IFwic3Ryb25nXCI7XG4gICAgVEFHX05BTUVTW1wiU1RZTEVcIl0gPSBcInN0eWxlXCI7XG4gICAgVEFHX05BTUVTW1wiU1VCXCJdID0gXCJzdWJcIjtcbiAgICBUQUdfTkFNRVNbXCJTVU1NQVJZXCJdID0gXCJzdW1tYXJ5XCI7XG4gICAgVEFHX05BTUVTW1wiU1VQXCJdID0gXCJzdXBcIjtcbiAgICBUQUdfTkFNRVNbXCJUQUJMRVwiXSA9IFwidGFibGVcIjtcbiAgICBUQUdfTkFNRVNbXCJUQk9EWVwiXSA9IFwidGJvZHlcIjtcbiAgICBUQUdfTkFNRVNbXCJURU1QTEFURVwiXSA9IFwidGVtcGxhdGVcIjtcbiAgICBUQUdfTkFNRVNbXCJURVhUQVJFQVwiXSA9IFwidGV4dGFyZWFcIjtcbiAgICBUQUdfTkFNRVNbXCJURk9PVFwiXSA9IFwidGZvb3RcIjtcbiAgICBUQUdfTkFNRVNbXCJURFwiXSA9IFwidGRcIjtcbiAgICBUQUdfTkFNRVNbXCJUSFwiXSA9IFwidGhcIjtcbiAgICBUQUdfTkFNRVNbXCJUSEVBRFwiXSA9IFwidGhlYWRcIjtcbiAgICBUQUdfTkFNRVNbXCJUSVRMRVwiXSA9IFwidGl0bGVcIjtcbiAgICBUQUdfTkFNRVNbXCJUUlwiXSA9IFwidHJcIjtcbiAgICBUQUdfTkFNRVNbXCJUUkFDS1wiXSA9IFwidHJhY2tcIjtcbiAgICBUQUdfTkFNRVNbXCJUVFwiXSA9IFwidHRcIjtcbiAgICBUQUdfTkFNRVNbXCJVXCJdID0gXCJ1XCI7XG4gICAgVEFHX05BTUVTW1wiVUxcIl0gPSBcInVsXCI7XG4gICAgVEFHX05BTUVTW1wiU1ZHXCJdID0gXCJzdmdcIjtcbiAgICBUQUdfTkFNRVNbXCJWQVJcIl0gPSBcInZhclwiO1xuICAgIFRBR19OQU1FU1tcIldCUlwiXSA9IFwid2JyXCI7XG4gICAgVEFHX05BTUVTW1wiWE1QXCJdID0gXCJ4bXBcIjtcbn0pKFRBR19OQU1FUyA9IGV4cG9ydHMuVEFHX05BTUVTIHx8IChleHBvcnRzLlRBR19OQU1FUyA9IHt9KSk7XG4vKipcbiAqIFRhZyBJRHMgYXJlIG51bWVyaWMgSURzIGZvciBrbm93biB0YWcgbmFtZXMuXG4gKlxuICogV2UgdXNlIHRhZyBJRHMgdG8gaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2YgdGFnIG5hbWUgY29tcGFyaXNvbnMuXG4gKi9cbnZhciBUQUdfSUQ7XG4oZnVuY3Rpb24gKFRBR19JRCkge1xuICAgIFRBR19JRFtUQUdfSURbXCJVTktOT1dOXCJdID0gMF0gPSBcIlVOS05PV05cIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiQVwiXSA9IDFdID0gXCJBXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkFERFJFU1NcIl0gPSAyXSA9IFwiQUREUkVTU1wiO1xuICAgIFRBR19JRFtUQUdfSURbXCJBTk5PVEFUSU9OX1hNTFwiXSA9IDNdID0gXCJBTk5PVEFUSU9OX1hNTFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJBUFBMRVRcIl0gPSA0XSA9IFwiQVBQTEVUXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkFSRUFcIl0gPSA1XSA9IFwiQVJFQVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJBUlRJQ0xFXCJdID0gNl0gPSBcIkFSVElDTEVcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiQVNJREVcIl0gPSA3XSA9IFwiQVNJREVcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiQlwiXSA9IDhdID0gXCJCXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkJBU0VcIl0gPSA5XSA9IFwiQkFTRVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJCQVNFRk9OVFwiXSA9IDEwXSA9IFwiQkFTRUZPTlRcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiQkdTT1VORFwiXSA9IDExXSA9IFwiQkdTT1VORFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJCSUdcIl0gPSAxMl0gPSBcIkJJR1wiO1xuICAgIFRBR19JRFtUQUdfSURbXCJCTE9DS1FVT1RFXCJdID0gMTNdID0gXCJCTE9DS1FVT1RFXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkJPRFlcIl0gPSAxNF0gPSBcIkJPRFlcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiQlJcIl0gPSAxNV0gPSBcIkJSXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkJVVFRPTlwiXSA9IDE2XSA9IFwiQlVUVE9OXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkNBUFRJT05cIl0gPSAxN10gPSBcIkNBUFRJT05cIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiQ0VOVEVSXCJdID0gMThdID0gXCJDRU5URVJcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiQ09ERVwiXSA9IDE5XSA9IFwiQ09ERVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJDT0xcIl0gPSAyMF0gPSBcIkNPTFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJDT0xHUk9VUFwiXSA9IDIxXSA9IFwiQ09MR1JPVVBcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiRERcIl0gPSAyMl0gPSBcIkREXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkRFU0NcIl0gPSAyM10gPSBcIkRFU0NcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiREVUQUlMU1wiXSA9IDI0XSA9IFwiREVUQUlMU1wiO1xuICAgIFRBR19JRFtUQUdfSURbXCJESUFMT0dcIl0gPSAyNV0gPSBcIkRJQUxPR1wiO1xuICAgIFRBR19JRFtUQUdfSURbXCJESVJcIl0gPSAyNl0gPSBcIkRJUlwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJESVZcIl0gPSAyN10gPSBcIkRJVlwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJETFwiXSA9IDI4XSA9IFwiRExcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiRFRcIl0gPSAyOV0gPSBcIkRUXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkVNXCJdID0gMzBdID0gXCJFTVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJFTUJFRFwiXSA9IDMxXSA9IFwiRU1CRURcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiRklFTERTRVRcIl0gPSAzMl0gPSBcIkZJRUxEU0VUXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkZJR0NBUFRJT05cIl0gPSAzM10gPSBcIkZJR0NBUFRJT05cIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiRklHVVJFXCJdID0gMzRdID0gXCJGSUdVUkVcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiRk9OVFwiXSA9IDM1XSA9IFwiRk9OVFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJGT09URVJcIl0gPSAzNl0gPSBcIkZPT1RFUlwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJGT1JFSUdOX09CSkVDVFwiXSA9IDM3XSA9IFwiRk9SRUlHTl9PQkpFQ1RcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiRk9STVwiXSA9IDM4XSA9IFwiRk9STVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJGUkFNRVwiXSA9IDM5XSA9IFwiRlJBTUVcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiRlJBTUVTRVRcIl0gPSA0MF0gPSBcIkZSQU1FU0VUXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkgxXCJdID0gNDFdID0gXCJIMVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJIMlwiXSA9IDQyXSA9IFwiSDJcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiSDNcIl0gPSA0M10gPSBcIkgzXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkg0XCJdID0gNDRdID0gXCJINFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJINVwiXSA9IDQ1XSA9IFwiSDVcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiSDZcIl0gPSA0Nl0gPSBcIkg2XCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkhFQURcIl0gPSA0N10gPSBcIkhFQURcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiSEVBREVSXCJdID0gNDhdID0gXCJIRUFERVJcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiSEdST1VQXCJdID0gNDldID0gXCJIR1JPVVBcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiSFJcIl0gPSA1MF0gPSBcIkhSXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkhUTUxcIl0gPSA1MV0gPSBcIkhUTUxcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiSVwiXSA9IDUyXSA9IFwiSVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJJTUdcIl0gPSA1M10gPSBcIklNR1wiO1xuICAgIFRBR19JRFtUQUdfSURbXCJJTUFHRVwiXSA9IDU0XSA9IFwiSU1BR0VcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiSU5QVVRcIl0gPSA1NV0gPSBcIklOUFVUXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIklGUkFNRVwiXSA9IDU2XSA9IFwiSUZSQU1FXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIktFWUdFTlwiXSA9IDU3XSA9IFwiS0VZR0VOXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkxBQkVMXCJdID0gNThdID0gXCJMQUJFTFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJMSVwiXSA9IDU5XSA9IFwiTElcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiTElOS1wiXSA9IDYwXSA9IFwiTElOS1wiO1xuICAgIFRBR19JRFtUQUdfSURbXCJMSVNUSU5HXCJdID0gNjFdID0gXCJMSVNUSU5HXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIk1BSU5cIl0gPSA2Ml0gPSBcIk1BSU5cIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiTUFMSUdOTUFSS1wiXSA9IDYzXSA9IFwiTUFMSUdOTUFSS1wiO1xuICAgIFRBR19JRFtUQUdfSURbXCJNQVJRVUVFXCJdID0gNjRdID0gXCJNQVJRVUVFXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIk1BVEhcIl0gPSA2NV0gPSBcIk1BVEhcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiTUVOVVwiXSA9IDY2XSA9IFwiTUVOVVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJNRVRBXCJdID0gNjddID0gXCJNRVRBXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIk1HTFlQSFwiXSA9IDY4XSA9IFwiTUdMWVBIXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIk1JXCJdID0gNjldID0gXCJNSVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJNT1wiXSA9IDcwXSA9IFwiTU9cIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiTU5cIl0gPSA3MV0gPSBcIk1OXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIk1TXCJdID0gNzJdID0gXCJNU1wiO1xuICAgIFRBR19JRFtUQUdfSURbXCJNVEVYVFwiXSA9IDczXSA9IFwiTVRFWFRcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiTkFWXCJdID0gNzRdID0gXCJOQVZcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiTk9CUlwiXSA9IDc1XSA9IFwiTk9CUlwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJOT0ZSQU1FU1wiXSA9IDc2XSA9IFwiTk9GUkFNRVNcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiTk9FTUJFRFwiXSA9IDc3XSA9IFwiTk9FTUJFRFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJOT1NDUklQVFwiXSA9IDc4XSA9IFwiTk9TQ1JJUFRcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiT0JKRUNUXCJdID0gNzldID0gXCJPQkpFQ1RcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiT0xcIl0gPSA4MF0gPSBcIk9MXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIk9QVEdST1VQXCJdID0gODFdID0gXCJPUFRHUk9VUFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJPUFRJT05cIl0gPSA4Ml0gPSBcIk9QVElPTlwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJQXCJdID0gODNdID0gXCJQXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIlBBUkFNXCJdID0gODRdID0gXCJQQVJBTVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJQTEFJTlRFWFRcIl0gPSA4NV0gPSBcIlBMQUlOVEVYVFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJQUkVcIl0gPSA4Nl0gPSBcIlBSRVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJSQlwiXSA9IDg3XSA9IFwiUkJcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiUlBcIl0gPSA4OF0gPSBcIlJQXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIlJUXCJdID0gODldID0gXCJSVFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJSVENcIl0gPSA5MF0gPSBcIlJUQ1wiO1xuICAgIFRBR19JRFtUQUdfSURbXCJSVUJZXCJdID0gOTFdID0gXCJSVUJZXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIlNcIl0gPSA5Ml0gPSBcIlNcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiU0NSSVBUXCJdID0gOTNdID0gXCJTQ1JJUFRcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiU0VDVElPTlwiXSA9IDk0XSA9IFwiU0VDVElPTlwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJTRUxFQ1RcIl0gPSA5NV0gPSBcIlNFTEVDVFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJTT1VSQ0VcIl0gPSA5Nl0gPSBcIlNPVVJDRVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJTTUFMTFwiXSA9IDk3XSA9IFwiU01BTExcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiU1BBTlwiXSA9IDk4XSA9IFwiU1BBTlwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJTVFJJS0VcIl0gPSA5OV0gPSBcIlNUUklLRVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJTVFJPTkdcIl0gPSAxMDBdID0gXCJTVFJPTkdcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiU1RZTEVcIl0gPSAxMDFdID0gXCJTVFlMRVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJTVUJcIl0gPSAxMDJdID0gXCJTVUJcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiU1VNTUFSWVwiXSA9IDEwM10gPSBcIlNVTU1BUllcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiU1VQXCJdID0gMTA0XSA9IFwiU1VQXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIlRBQkxFXCJdID0gMTA1XSA9IFwiVEFCTEVcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiVEJPRFlcIl0gPSAxMDZdID0gXCJUQk9EWVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJURU1QTEFURVwiXSA9IDEwN10gPSBcIlRFTVBMQVRFXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIlRFWFRBUkVBXCJdID0gMTA4XSA9IFwiVEVYVEFSRUFcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiVEZPT1RcIl0gPSAxMDldID0gXCJURk9PVFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJURFwiXSA9IDExMF0gPSBcIlREXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIlRIXCJdID0gMTExXSA9IFwiVEhcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiVEhFQURcIl0gPSAxMTJdID0gXCJUSEVBRFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJUSVRMRVwiXSA9IDExM10gPSBcIlRJVExFXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIlRSXCJdID0gMTE0XSA9IFwiVFJcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiVFJBQ0tcIl0gPSAxMTVdID0gXCJUUkFDS1wiO1xuICAgIFRBR19JRFtUQUdfSURbXCJUVFwiXSA9IDExNl0gPSBcIlRUXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIlVcIl0gPSAxMTddID0gXCJVXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIlVMXCJdID0gMTE4XSA9IFwiVUxcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiU1ZHXCJdID0gMTE5XSA9IFwiU1ZHXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIlZBUlwiXSA9IDEyMF0gPSBcIlZBUlwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJXQlJcIl0gPSAxMjFdID0gXCJXQlJcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiWE1QXCJdID0gMTIyXSA9IFwiWE1QXCI7XG59KShUQUdfSUQgPSBleHBvcnRzLlRBR19JRCB8fCAoZXhwb3J0cy5UQUdfSUQgPSB7fSkpO1xuY29uc3QgVEFHX05BTUVfVE9fSUQgPSBuZXcgTWFwKFtcbiAgICBbVEFHX05BTUVTLkEsIFRBR19JRC5BXSxcbiAgICBbVEFHX05BTUVTLkFERFJFU1MsIFRBR19JRC5BRERSRVNTXSxcbiAgICBbVEFHX05BTUVTLkFOTk9UQVRJT05fWE1MLCBUQUdfSUQuQU5OT1RBVElPTl9YTUxdLFxuICAgIFtUQUdfTkFNRVMuQVBQTEVULCBUQUdfSUQuQVBQTEVUXSxcbiAgICBbVEFHX05BTUVTLkFSRUEsIFRBR19JRC5BUkVBXSxcbiAgICBbVEFHX05BTUVTLkFSVElDTEUsIFRBR19JRC5BUlRJQ0xFXSxcbiAgICBbVEFHX05BTUVTLkFTSURFLCBUQUdfSUQuQVNJREVdLFxuICAgIFtUQUdfTkFNRVMuQiwgVEFHX0lELkJdLFxuICAgIFtUQUdfTkFNRVMuQkFTRSwgVEFHX0lELkJBU0VdLFxuICAgIFtUQUdfTkFNRVMuQkFTRUZPTlQsIFRBR19JRC5CQVNFRk9OVF0sXG4gICAgW1RBR19OQU1FUy5CR1NPVU5ELCBUQUdfSUQuQkdTT1VORF0sXG4gICAgW1RBR19OQU1FUy5CSUcsIFRBR19JRC5CSUddLFxuICAgIFtUQUdfTkFNRVMuQkxPQ0tRVU9URSwgVEFHX0lELkJMT0NLUVVPVEVdLFxuICAgIFtUQUdfTkFNRVMuQk9EWSwgVEFHX0lELkJPRFldLFxuICAgIFtUQUdfTkFNRVMuQlIsIFRBR19JRC5CUl0sXG4gICAgW1RBR19OQU1FUy5CVVRUT04sIFRBR19JRC5CVVRUT05dLFxuICAgIFtUQUdfTkFNRVMuQ0FQVElPTiwgVEFHX0lELkNBUFRJT05dLFxuICAgIFtUQUdfTkFNRVMuQ0VOVEVSLCBUQUdfSUQuQ0VOVEVSXSxcbiAgICBbVEFHX05BTUVTLkNPREUsIFRBR19JRC5DT0RFXSxcbiAgICBbVEFHX05BTUVTLkNPTCwgVEFHX0lELkNPTF0sXG4gICAgW1RBR19OQU1FUy5DT0xHUk9VUCwgVEFHX0lELkNPTEdST1VQXSxcbiAgICBbVEFHX05BTUVTLkRELCBUQUdfSUQuRERdLFxuICAgIFtUQUdfTkFNRVMuREVTQywgVEFHX0lELkRFU0NdLFxuICAgIFtUQUdfTkFNRVMuREVUQUlMUywgVEFHX0lELkRFVEFJTFNdLFxuICAgIFtUQUdfTkFNRVMuRElBTE9HLCBUQUdfSUQuRElBTE9HXSxcbiAgICBbVEFHX05BTUVTLkRJUiwgVEFHX0lELkRJUl0sXG4gICAgW1RBR19OQU1FUy5ESVYsIFRBR19JRC5ESVZdLFxuICAgIFtUQUdfTkFNRVMuREwsIFRBR19JRC5ETF0sXG4gICAgW1RBR19OQU1FUy5EVCwgVEFHX0lELkRUXSxcbiAgICBbVEFHX05BTUVTLkVNLCBUQUdfSUQuRU1dLFxuICAgIFtUQUdfTkFNRVMuRU1CRUQsIFRBR19JRC5FTUJFRF0sXG4gICAgW1RBR19OQU1FUy5GSUVMRFNFVCwgVEFHX0lELkZJRUxEU0VUXSxcbiAgICBbVEFHX05BTUVTLkZJR0NBUFRJT04sIFRBR19JRC5GSUdDQVBUSU9OXSxcbiAgICBbVEFHX05BTUVTLkZJR1VSRSwgVEFHX0lELkZJR1VSRV0sXG4gICAgW1RBR19OQU1FUy5GT05ULCBUQUdfSUQuRk9OVF0sXG4gICAgW1RBR19OQU1FUy5GT09URVIsIFRBR19JRC5GT09URVJdLFxuICAgIFtUQUdfTkFNRVMuRk9SRUlHTl9PQkpFQ1QsIFRBR19JRC5GT1JFSUdOX09CSkVDVF0sXG4gICAgW1RBR19OQU1FUy5GT1JNLCBUQUdfSUQuRk9STV0sXG4gICAgW1RBR19OQU1FUy5GUkFNRSwgVEFHX0lELkZSQU1FXSxcbiAgICBbVEFHX05BTUVTLkZSQU1FU0VULCBUQUdfSUQuRlJBTUVTRVRdLFxuICAgIFtUQUdfTkFNRVMuSDEsIFRBR19JRC5IMV0sXG4gICAgW1RBR19OQU1FUy5IMiwgVEFHX0lELkgyXSxcbiAgICBbVEFHX05BTUVTLkgzLCBUQUdfSUQuSDNdLFxuICAgIFtUQUdfTkFNRVMuSDQsIFRBR19JRC5INF0sXG4gICAgW1RBR19OQU1FUy5INSwgVEFHX0lELkg1XSxcbiAgICBbVEFHX05BTUVTLkg2LCBUQUdfSUQuSDZdLFxuICAgIFtUQUdfTkFNRVMuSEVBRCwgVEFHX0lELkhFQURdLFxuICAgIFtUQUdfTkFNRVMuSEVBREVSLCBUQUdfSUQuSEVBREVSXSxcbiAgICBbVEFHX05BTUVTLkhHUk9VUCwgVEFHX0lELkhHUk9VUF0sXG4gICAgW1RBR19OQU1FUy5IUiwgVEFHX0lELkhSXSxcbiAgICBbVEFHX05BTUVTLkhUTUwsIFRBR19JRC5IVE1MXSxcbiAgICBbVEFHX05BTUVTLkksIFRBR19JRC5JXSxcbiAgICBbVEFHX05BTUVTLklNRywgVEFHX0lELklNR10sXG4gICAgW1RBR19OQU1FUy5JTUFHRSwgVEFHX0lELklNQUdFXSxcbiAgICBbVEFHX05BTUVTLklOUFVULCBUQUdfSUQuSU5QVVRdLFxuICAgIFtUQUdfTkFNRVMuSUZSQU1FLCBUQUdfSUQuSUZSQU1FXSxcbiAgICBbVEFHX05BTUVTLktFWUdFTiwgVEFHX0lELktFWUdFTl0sXG4gICAgW1RBR19OQU1FUy5MQUJFTCwgVEFHX0lELkxBQkVMXSxcbiAgICBbVEFHX05BTUVTLkxJLCBUQUdfSUQuTEldLFxuICAgIFtUQUdfTkFNRVMuTElOSywgVEFHX0lELkxJTktdLFxuICAgIFtUQUdfTkFNRVMuTElTVElORywgVEFHX0lELkxJU1RJTkddLFxuICAgIFtUQUdfTkFNRVMuTUFJTiwgVEFHX0lELk1BSU5dLFxuICAgIFtUQUdfTkFNRVMuTUFMSUdOTUFSSywgVEFHX0lELk1BTElHTk1BUktdLFxuICAgIFtUQUdfTkFNRVMuTUFSUVVFRSwgVEFHX0lELk1BUlFVRUVdLFxuICAgIFtUQUdfTkFNRVMuTUFUSCwgVEFHX0lELk1BVEhdLFxuICAgIFtUQUdfTkFNRVMuTUVOVSwgVEFHX0lELk1FTlVdLFxuICAgIFtUQUdfTkFNRVMuTUVUQSwgVEFHX0lELk1FVEFdLFxuICAgIFtUQUdfTkFNRVMuTUdMWVBILCBUQUdfSUQuTUdMWVBIXSxcbiAgICBbVEFHX05BTUVTLk1JLCBUQUdfSUQuTUldLFxuICAgIFtUQUdfTkFNRVMuTU8sIFRBR19JRC5NT10sXG4gICAgW1RBR19OQU1FUy5NTiwgVEFHX0lELk1OXSxcbiAgICBbVEFHX05BTUVTLk1TLCBUQUdfSUQuTVNdLFxuICAgIFtUQUdfTkFNRVMuTVRFWFQsIFRBR19JRC5NVEVYVF0sXG4gICAgW1RBR19OQU1FUy5OQVYsIFRBR19JRC5OQVZdLFxuICAgIFtUQUdfTkFNRVMuTk9CUiwgVEFHX0lELk5PQlJdLFxuICAgIFtUQUdfTkFNRVMuTk9GUkFNRVMsIFRBR19JRC5OT0ZSQU1FU10sXG4gICAgW1RBR19OQU1FUy5OT0VNQkVELCBUQUdfSUQuTk9FTUJFRF0sXG4gICAgW1RBR19OQU1FUy5OT1NDUklQVCwgVEFHX0lELk5PU0NSSVBUXSxcbiAgICBbVEFHX05BTUVTLk9CSkVDVCwgVEFHX0lELk9CSkVDVF0sXG4gICAgW1RBR19OQU1FUy5PTCwgVEFHX0lELk9MXSxcbiAgICBbVEFHX05BTUVTLk9QVEdST1VQLCBUQUdfSUQuT1BUR1JPVVBdLFxuICAgIFtUQUdfTkFNRVMuT1BUSU9OLCBUQUdfSUQuT1BUSU9OXSxcbiAgICBbVEFHX05BTUVTLlAsIFRBR19JRC5QXSxcbiAgICBbVEFHX05BTUVTLlBBUkFNLCBUQUdfSUQuUEFSQU1dLFxuICAgIFtUQUdfTkFNRVMuUExBSU5URVhULCBUQUdfSUQuUExBSU5URVhUXSxcbiAgICBbVEFHX05BTUVTLlBSRSwgVEFHX0lELlBSRV0sXG4gICAgW1RBR19OQU1FUy5SQiwgVEFHX0lELlJCXSxcbiAgICBbVEFHX05BTUVTLlJQLCBUQUdfSUQuUlBdLFxuICAgIFtUQUdfTkFNRVMuUlQsIFRBR19JRC5SVF0sXG4gICAgW1RBR19OQU1FUy5SVEMsIFRBR19JRC5SVENdLFxuICAgIFtUQUdfTkFNRVMuUlVCWSwgVEFHX0lELlJVQlldLFxuICAgIFtUQUdfTkFNRVMuUywgVEFHX0lELlNdLFxuICAgIFtUQUdfTkFNRVMuU0NSSVBULCBUQUdfSUQuU0NSSVBUXSxcbiAgICBbVEFHX05BTUVTLlNFQ1RJT04sIFRBR19JRC5TRUNUSU9OXSxcbiAgICBbVEFHX05BTUVTLlNFTEVDVCwgVEFHX0lELlNFTEVDVF0sXG4gICAgW1RBR19OQU1FUy5TT1VSQ0UsIFRBR19JRC5TT1VSQ0VdLFxuICAgIFtUQUdfTkFNRVMuU01BTEwsIFRBR19JRC5TTUFMTF0sXG4gICAgW1RBR19OQU1FUy5TUEFOLCBUQUdfSUQuU1BBTl0sXG4gICAgW1RBR19OQU1FUy5TVFJJS0UsIFRBR19JRC5TVFJJS0VdLFxuICAgIFtUQUdfTkFNRVMuU1RST05HLCBUQUdfSUQuU1RST05HXSxcbiAgICBbVEFHX05BTUVTLlNUWUxFLCBUQUdfSUQuU1RZTEVdLFxuICAgIFtUQUdfTkFNRVMuU1VCLCBUQUdfSUQuU1VCXSxcbiAgICBbVEFHX05BTUVTLlNVTU1BUlksIFRBR19JRC5TVU1NQVJZXSxcbiAgICBbVEFHX05BTUVTLlNVUCwgVEFHX0lELlNVUF0sXG4gICAgW1RBR19OQU1FUy5UQUJMRSwgVEFHX0lELlRBQkxFXSxcbiAgICBbVEFHX05BTUVTLlRCT0RZLCBUQUdfSUQuVEJPRFldLFxuICAgIFtUQUdfTkFNRVMuVEVNUExBVEUsIFRBR19JRC5URU1QTEFURV0sXG4gICAgW1RBR19OQU1FUy5URVhUQVJFQSwgVEFHX0lELlRFWFRBUkVBXSxcbiAgICBbVEFHX05BTUVTLlRGT09ULCBUQUdfSUQuVEZPT1RdLFxuICAgIFtUQUdfTkFNRVMuVEQsIFRBR19JRC5URF0sXG4gICAgW1RBR19OQU1FUy5USCwgVEFHX0lELlRIXSxcbiAgICBbVEFHX05BTUVTLlRIRUFELCBUQUdfSUQuVEhFQURdLFxuICAgIFtUQUdfTkFNRVMuVElUTEUsIFRBR19JRC5USVRMRV0sXG4gICAgW1RBR19OQU1FUy5UUiwgVEFHX0lELlRSXSxcbiAgICBbVEFHX05BTUVTLlRSQUNLLCBUQUdfSUQuVFJBQ0tdLFxuICAgIFtUQUdfTkFNRVMuVFQsIFRBR19JRC5UVF0sXG4gICAgW1RBR19OQU1FUy5VLCBUQUdfSUQuVV0sXG4gICAgW1RBR19OQU1FUy5VTCwgVEFHX0lELlVMXSxcbiAgICBbVEFHX05BTUVTLlNWRywgVEFHX0lELlNWR10sXG4gICAgW1RBR19OQU1FUy5WQVIsIFRBR19JRC5WQVJdLFxuICAgIFtUQUdfTkFNRVMuV0JSLCBUQUdfSUQuV0JSXSxcbiAgICBbVEFHX05BTUVTLlhNUCwgVEFHX0lELlhNUF0sXG5dKTtcbmZ1bmN0aW9uIGdldFRhZ0lEKHRhZ05hbWUpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChfYSA9IFRBR19OQU1FX1RPX0lELmdldCh0YWdOYW1lKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogVEFHX0lELlVOS05PV047XG59XG5leHBvcnRzLmdldFRhZ0lEID0gZ2V0VGFnSUQ7XG5jb25zdCAkID0gVEFHX0lEO1xuZXhwb3J0cy5TUEVDSUFMX0VMRU1FTlRTID0ge1xuICAgIFtOUy5IVE1MXTogbmV3IFNldChbXG4gICAgICAgICQuQUREUkVTUyxcbiAgICAgICAgJC5BUFBMRVQsXG4gICAgICAgICQuQVJFQSxcbiAgICAgICAgJC5BUlRJQ0xFLFxuICAgICAgICAkLkFTSURFLFxuICAgICAgICAkLkJBU0UsXG4gICAgICAgICQuQkFTRUZPTlQsXG4gICAgICAgICQuQkdTT1VORCxcbiAgICAgICAgJC5CTE9DS1FVT1RFLFxuICAgICAgICAkLkJPRFksXG4gICAgICAgICQuQlIsXG4gICAgICAgICQuQlVUVE9OLFxuICAgICAgICAkLkNBUFRJT04sXG4gICAgICAgICQuQ0VOVEVSLFxuICAgICAgICAkLkNPTCxcbiAgICAgICAgJC5DT0xHUk9VUCxcbiAgICAgICAgJC5ERCxcbiAgICAgICAgJC5ERVRBSUxTLFxuICAgICAgICAkLkRJUixcbiAgICAgICAgJC5ESVYsXG4gICAgICAgICQuREwsXG4gICAgICAgICQuRFQsXG4gICAgICAgICQuRU1CRUQsXG4gICAgICAgICQuRklFTERTRVQsXG4gICAgICAgICQuRklHQ0FQVElPTixcbiAgICAgICAgJC5GSUdVUkUsXG4gICAgICAgICQuRk9PVEVSLFxuICAgICAgICAkLkZPUk0sXG4gICAgICAgICQuRlJBTUUsXG4gICAgICAgICQuRlJBTUVTRVQsXG4gICAgICAgICQuSDEsXG4gICAgICAgICQuSDIsXG4gICAgICAgICQuSDMsXG4gICAgICAgICQuSDQsXG4gICAgICAgICQuSDUsXG4gICAgICAgICQuSDYsXG4gICAgICAgICQuSEVBRCxcbiAgICAgICAgJC5IRUFERVIsXG4gICAgICAgICQuSEdST1VQLFxuICAgICAgICAkLkhSLFxuICAgICAgICAkLkhUTUwsXG4gICAgICAgICQuSUZSQU1FLFxuICAgICAgICAkLklNRyxcbiAgICAgICAgJC5JTlBVVCxcbiAgICAgICAgJC5MSSxcbiAgICAgICAgJC5MSU5LLFxuICAgICAgICAkLkxJU1RJTkcsXG4gICAgICAgICQuTUFJTixcbiAgICAgICAgJC5NQVJRVUVFLFxuICAgICAgICAkLk1FTlUsXG4gICAgICAgICQuTUVUQSxcbiAgICAgICAgJC5OQVYsXG4gICAgICAgICQuTk9FTUJFRCxcbiAgICAgICAgJC5OT0ZSQU1FUyxcbiAgICAgICAgJC5OT1NDUklQVCxcbiAgICAgICAgJC5PQkpFQ1QsXG4gICAgICAgICQuT0wsXG4gICAgICAgICQuUCxcbiAgICAgICAgJC5QQVJBTSxcbiAgICAgICAgJC5QTEFJTlRFWFQsXG4gICAgICAgICQuUFJFLFxuICAgICAgICAkLlNDUklQVCxcbiAgICAgICAgJC5TRUNUSU9OLFxuICAgICAgICAkLlNFTEVDVCxcbiAgICAgICAgJC5TT1VSQ0UsXG4gICAgICAgICQuU1RZTEUsXG4gICAgICAgICQuU1VNTUFSWSxcbiAgICAgICAgJC5UQUJMRSxcbiAgICAgICAgJC5UQk9EWSxcbiAgICAgICAgJC5URCxcbiAgICAgICAgJC5URU1QTEFURSxcbiAgICAgICAgJC5URVhUQVJFQSxcbiAgICAgICAgJC5URk9PVCxcbiAgICAgICAgJC5USCxcbiAgICAgICAgJC5USEVBRCxcbiAgICAgICAgJC5USVRMRSxcbiAgICAgICAgJC5UUixcbiAgICAgICAgJC5UUkFDSyxcbiAgICAgICAgJC5VTCxcbiAgICAgICAgJC5XQlIsXG4gICAgICAgICQuWE1QLFxuICAgIF0pLFxuICAgIFtOUy5NQVRITUxdOiBuZXcgU2V0KFskLk1JLCAkLk1PLCAkLk1OLCAkLk1TLCAkLk1URVhULCAkLkFOTk9UQVRJT05fWE1MXSksXG4gICAgW05TLlNWR106IG5ldyBTZXQoWyQuVElUTEUsICQuRk9SRUlHTl9PQkpFQ1QsICQuREVTQ10pLFxuICAgIFtOUy5YTElOS106IG5ldyBTZXQoKSxcbiAgICBbTlMuWE1MXTogbmV3IFNldCgpLFxuICAgIFtOUy5YTUxOU106IG5ldyBTZXQoKSxcbn07XG5mdW5jdGlvbiBpc051bWJlcmVkSGVhZGVyKHRuKSB7XG4gICAgcmV0dXJuIHRuID09PSAkLkgxIHx8IHRuID09PSAkLkgyIHx8IHRuID09PSAkLkgzIHx8IHRuID09PSAkLkg0IHx8IHRuID09PSAkLkg1IHx8IHRuID09PSAkLkg2O1xufVxuZXhwb3J0cy5pc051bWJlcmVkSGVhZGVyID0gaXNOdW1iZXJlZEhlYWRlcjtcbmNvbnN0IFVORVNDQVBFRF9URVhUID0gbmV3IFNldChbXG4gICAgVEFHX05BTUVTLlNUWUxFLFxuICAgIFRBR19OQU1FUy5TQ1JJUFQsXG4gICAgVEFHX05BTUVTLlhNUCxcbiAgICBUQUdfTkFNRVMuSUZSQU1FLFxuICAgIFRBR19OQU1FUy5OT0VNQkVELFxuICAgIFRBR19OQU1FUy5OT0ZSQU1FUyxcbiAgICBUQUdfTkFNRVMuUExBSU5URVhULFxuXSk7XG5mdW5jdGlvbiBoYXNVbmVzY2FwZWRUZXh0KHRuLCBzY3JpcHRpbmdFbmFibGVkKSB7XG4gICAgcmV0dXJuIFVORVNDQVBFRF9URVhULmhhcyh0bikgfHwgKHNjcmlwdGluZ0VuYWJsZWQgJiYgdG4gPT09IFRBR19OQU1FUy5OT1NDUklQVCk7XG59XG5leHBvcnRzLmhhc1VuZXNjYXBlZFRleHQgPSBoYXNVbmVzY2FwZWRUZXh0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aHRtbC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0VG9rZW5BdHRyID0gZXhwb3J0cy5Ub2tlblR5cGUgPSB2b2lkIDA7XG52YXIgVG9rZW5UeXBlO1xuKGZ1bmN0aW9uIChUb2tlblR5cGUpIHtcbiAgICBUb2tlblR5cGVbVG9rZW5UeXBlW1wiQ0hBUkFDVEVSXCJdID0gMF0gPSBcIkNIQVJBQ1RFUlwiO1xuICAgIFRva2VuVHlwZVtUb2tlblR5cGVbXCJOVUxMX0NIQVJBQ1RFUlwiXSA9IDFdID0gXCJOVUxMX0NIQVJBQ1RFUlwiO1xuICAgIFRva2VuVHlwZVtUb2tlblR5cGVbXCJXSElURVNQQUNFX0NIQVJBQ1RFUlwiXSA9IDJdID0gXCJXSElURVNQQUNFX0NIQVJBQ1RFUlwiO1xuICAgIFRva2VuVHlwZVtUb2tlblR5cGVbXCJTVEFSVF9UQUdcIl0gPSAzXSA9IFwiU1RBUlRfVEFHXCI7XG4gICAgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIkVORF9UQUdcIl0gPSA0XSA9IFwiRU5EX1RBR1wiO1xuICAgIFRva2VuVHlwZVtUb2tlblR5cGVbXCJDT01NRU5UXCJdID0gNV0gPSBcIkNPTU1FTlRcIjtcbiAgICBUb2tlblR5cGVbVG9rZW5UeXBlW1wiRE9DVFlQRVwiXSA9IDZdID0gXCJET0NUWVBFXCI7XG4gICAgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIkVPRlwiXSA9IDddID0gXCJFT0ZcIjtcbiAgICBUb2tlblR5cGVbVG9rZW5UeXBlW1wiSElCRVJOQVRJT05cIl0gPSA4XSA9IFwiSElCRVJOQVRJT05cIjtcbn0pKFRva2VuVHlwZSA9IGV4cG9ydHMuVG9rZW5UeXBlIHx8IChleHBvcnRzLlRva2VuVHlwZSA9IHt9KSk7XG5mdW5jdGlvbiBnZXRUb2tlbkF0dHIodG9rZW4sIGF0dHJOYW1lKSB7XG4gICAgZm9yIChsZXQgaSA9IHRva2VuLmF0dHJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGlmICh0b2tlbi5hdHRyc1tpXS5uYW1lID09PSBhdHRyTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuLmF0dHJzW2ldLnZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuZXhwb3J0cy5nZXRUb2tlbkF0dHIgPSBnZXRUb2tlbkF0dHI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10b2tlbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuaXNVbmRlZmluZWRDb2RlUG9pbnQgPSBleHBvcnRzLmlzQ29udHJvbENvZGVQb2ludCA9IGV4cG9ydHMuZ2V0U3Vycm9nYXRlUGFpckNvZGVQb2ludCA9IGV4cG9ydHMuaXNTdXJyb2dhdGVQYWlyID0gZXhwb3J0cy5pc1N1cnJvZ2F0ZSA9IGV4cG9ydHMuU0VRVUVOQ0VTID0gZXhwb3J0cy5DT0RFX1BPSU5UUyA9IGV4cG9ydHMuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSID0gdm9pZCAwO1xuY29uc3QgVU5ERUZJTkVEX0NPREVfUE9JTlRTID0gbmV3IFNldChbXG4gICAgNjU1MzQsIDY1NTM1LCAxMzEwNzAsIDEzMTA3MSwgMTk2NjA2LCAxOTY2MDcsIDI2MjE0MiwgMjYyMTQzLCAzMjc2NzgsIDMyNzY3OSwgMzkzMjE0LFxuICAgIDM5MzIxNSwgNDU4NzUwLCA0NTg3NTEsIDUyNDI4NiwgNTI0Mjg3LCA1ODk4MjIsIDU4OTgyMywgNjU1MzU4LCA2NTUzNTksIDcyMDg5NCxcbiAgICA3MjA4OTUsIDc4NjQzMCwgNzg2NDMxLCA4NTE5NjYsIDg1MTk2NywgOTE3NTAyLCA5MTc1MDMsIDk4MzAzOCwgOTgzMDM5LCAxMDQ4NTc0LFxuICAgIDEwNDg1NzUsIDExMTQxMTAsIDExMTQxMTEsXG5dKTtcbmV4cG9ydHMuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSID0gJ1xcdUZGRkQnO1xudmFyIENPREVfUE9JTlRTO1xuKGZ1bmN0aW9uIChDT0RFX1BPSU5UUykge1xuICAgIENPREVfUE9JTlRTW0NPREVfUE9JTlRTW1wiRU9GXCJdID0gLTFdID0gXCJFT0ZcIjtcbiAgICBDT0RFX1BPSU5UU1tDT0RFX1BPSU5UU1tcIk5VTExcIl0gPSAwXSA9IFwiTlVMTFwiO1xuICAgIENPREVfUE9JTlRTW0NPREVfUE9JTlRTW1wiVEFCVUxBVElPTlwiXSA9IDldID0gXCJUQUJVTEFUSU9OXCI7XG4gICAgQ09ERV9QT0lOVFNbQ09ERV9QT0lOVFNbXCJDQVJSSUFHRV9SRVRVUk5cIl0gPSAxM10gPSBcIkNBUlJJQUdFX1JFVFVSTlwiO1xuICAgIENPREVfUE9JTlRTW0NPREVfUE9JTlRTW1wiTElORV9GRUVEXCJdID0gMTBdID0gXCJMSU5FX0ZFRURcIjtcbiAgICBDT0RFX1BPSU5UU1tDT0RFX1BPSU5UU1tcIkZPUk1fRkVFRFwiXSA9IDEyXSA9IFwiRk9STV9GRUVEXCI7XG4gICAgQ09ERV9QT0lOVFNbQ09ERV9QT0lOVFNbXCJTUEFDRVwiXSA9IDMyXSA9IFwiU1BBQ0VcIjtcbiAgICBDT0RFX1BPSU5UU1tDT0RFX1BPSU5UU1tcIkVYQ0xBTUFUSU9OX01BUktcIl0gPSAzM10gPSBcIkVYQ0xBTUFUSU9OX01BUktcIjtcbiAgICBDT0RFX1BPSU5UU1tDT0RFX1BPSU5UU1tcIlFVT1RBVElPTl9NQVJLXCJdID0gMzRdID0gXCJRVU9UQVRJT05fTUFSS1wiO1xuICAgIENPREVfUE9JTlRTW0NPREVfUE9JTlRTW1wiTlVNQkVSX1NJR05cIl0gPSAzNV0gPSBcIk5VTUJFUl9TSUdOXCI7XG4gICAgQ09ERV9QT0lOVFNbQ09ERV9QT0lOVFNbXCJBTVBFUlNBTkRcIl0gPSAzOF0gPSBcIkFNUEVSU0FORFwiO1xuICAgIENPREVfUE9JTlRTW0NPREVfUE9JTlRTW1wiQVBPU1RST1BIRVwiXSA9IDM5XSA9IFwiQVBPU1RST1BIRVwiO1xuICAgIENPREVfUE9JTlRTW0NPREVfUE9JTlRTW1wiSFlQSEVOX01JTlVTXCJdID0gNDVdID0gXCJIWVBIRU5fTUlOVVNcIjtcbiAgICBDT0RFX1BPSU5UU1tDT0RFX1BPSU5UU1tcIlNPTElEVVNcIl0gPSA0N10gPSBcIlNPTElEVVNcIjtcbiAgICBDT0RFX1BPSU5UU1tDT0RFX1BPSU5UU1tcIkRJR0lUXzBcIl0gPSA0OF0gPSBcIkRJR0lUXzBcIjtcbiAgICBDT0RFX1BPSU5UU1tDT0RFX1BPSU5UU1tcIkRJR0lUXzlcIl0gPSA1N10gPSBcIkRJR0lUXzlcIjtcbiAgICBDT0RFX1BPSU5UU1tDT0RFX1BPSU5UU1tcIlNFTUlDT0xPTlwiXSA9IDU5XSA9IFwiU0VNSUNPTE9OXCI7XG4gICAgQ09ERV9QT0lOVFNbQ09ERV9QT0lOVFNbXCJMRVNTX1RIQU5fU0lHTlwiXSA9IDYwXSA9IFwiTEVTU19USEFOX1NJR05cIjtcbiAgICBDT0RFX1BPSU5UU1tDT0RFX1BPSU5UU1tcIkVRVUFMU19TSUdOXCJdID0gNjFdID0gXCJFUVVBTFNfU0lHTlwiO1xuICAgIENPREVfUE9JTlRTW0NPREVfUE9JTlRTW1wiR1JFQVRFUl9USEFOX1NJR05cIl0gPSA2Ml0gPSBcIkdSRUFURVJfVEhBTl9TSUdOXCI7XG4gICAgQ09ERV9QT0lOVFNbQ09ERV9QT0lOVFNbXCJRVUVTVElPTl9NQVJLXCJdID0gNjNdID0gXCJRVUVTVElPTl9NQVJLXCI7XG4gICAgQ09ERV9QT0lOVFNbQ09ERV9QT0lOVFNbXCJMQVRJTl9DQVBJVEFMX0FcIl0gPSA2NV0gPSBcIkxBVElOX0NBUElUQUxfQVwiO1xuICAgIENPREVfUE9JTlRTW0NPREVfUE9JTlRTW1wiTEFUSU5fQ0FQSVRBTF9GXCJdID0gNzBdID0gXCJMQVRJTl9DQVBJVEFMX0ZcIjtcbiAgICBDT0RFX1BPSU5UU1tDT0RFX1BPSU5UU1tcIkxBVElOX0NBUElUQUxfWFwiXSA9IDg4XSA9IFwiTEFUSU5fQ0FQSVRBTF9YXCI7XG4gICAgQ09ERV9QT0lOVFNbQ09ERV9QT0lOVFNbXCJMQVRJTl9DQVBJVEFMX1pcIl0gPSA5MF0gPSBcIkxBVElOX0NBUElUQUxfWlwiO1xuICAgIENPREVfUE9JTlRTW0NPREVfUE9JTlRTW1wiUklHSFRfU1FVQVJFX0JSQUNLRVRcIl0gPSA5M10gPSBcIlJJR0hUX1NRVUFSRV9CUkFDS0VUXCI7XG4gICAgQ09ERV9QT0lOVFNbQ09ERV9QT0lOVFNbXCJHUkFWRV9BQ0NFTlRcIl0gPSA5Nl0gPSBcIkdSQVZFX0FDQ0VOVFwiO1xuICAgIENPREVfUE9JTlRTW0NPREVfUE9JTlRTW1wiTEFUSU5fU01BTExfQVwiXSA9IDk3XSA9IFwiTEFUSU5fU01BTExfQVwiO1xuICAgIENPREVfUE9JTlRTW0NPREVfUE9JTlRTW1wiTEFUSU5fU01BTExfRlwiXSA9IDEwMl0gPSBcIkxBVElOX1NNQUxMX0ZcIjtcbiAgICBDT0RFX1BPSU5UU1tDT0RFX1BPSU5UU1tcIkxBVElOX1NNQUxMX1hcIl0gPSAxMjBdID0gXCJMQVRJTl9TTUFMTF9YXCI7XG4gICAgQ09ERV9QT0lOVFNbQ09ERV9QT0lOVFNbXCJMQVRJTl9TTUFMTF9aXCJdID0gMTIyXSA9IFwiTEFUSU5fU01BTExfWlwiO1xuICAgIENPREVfUE9JTlRTW0NPREVfUE9JTlRTW1wiUkVQTEFDRU1FTlRfQ0hBUkFDVEVSXCJdID0gNjU1MzNdID0gXCJSRVBMQUNFTUVOVF9DSEFSQUNURVJcIjtcbn0pKENPREVfUE9JTlRTID0gZXhwb3J0cy5DT0RFX1BPSU5UUyB8fCAoZXhwb3J0cy5DT0RFX1BPSU5UUyA9IHt9KSk7XG5leHBvcnRzLlNFUVVFTkNFUyA9IHtcbiAgICBEQVNIX0RBU0g6ICctLScsXG4gICAgQ0RBVEFfU1RBUlQ6ICdbQ0RBVEFbJyxcbiAgICBET0NUWVBFOiAnZG9jdHlwZScsXG4gICAgU0NSSVBUOiAnc2NyaXB0JyxcbiAgICBQVUJMSUM6ICdwdWJsaWMnLFxuICAgIFNZU1RFTTogJ3N5c3RlbScsXG59O1xuLy9TdXJyb2dhdGVzXG5mdW5jdGlvbiBpc1N1cnJvZ2F0ZShjcCkge1xuICAgIHJldHVybiBjcCA+PSA1NTI5NiAmJiBjcCA8PSA1NzM0Mztcbn1cbmV4cG9ydHMuaXNTdXJyb2dhdGUgPSBpc1N1cnJvZ2F0ZTtcbmZ1bmN0aW9uIGlzU3Vycm9nYXRlUGFpcihjcCkge1xuICAgIHJldHVybiBjcCA+PSA1NjMyMCAmJiBjcCA8PSA1NzM0Mztcbn1cbmV4cG9ydHMuaXNTdXJyb2dhdGVQYWlyID0gaXNTdXJyb2dhdGVQYWlyO1xuZnVuY3Rpb24gZ2V0U3Vycm9nYXRlUGFpckNvZGVQb2ludChjcDEsIGNwMikge1xuICAgIHJldHVybiAoY3AxIC0gNTUyOTYpICogMTAyNCArIDkyMTYgKyBjcDI7XG59XG5leHBvcnRzLmdldFN1cnJvZ2F0ZVBhaXJDb2RlUG9pbnQgPSBnZXRTdXJyb2dhdGVQYWlyQ29kZVBvaW50O1xuLy9OT1RFOiBleGNsdWRpbmcgTlVMTCBhbmQgQVNDSUkgd2hpdGVzcGFjZVxuZnVuY3Rpb24gaXNDb250cm9sQ29kZVBvaW50KGNwKSB7XG4gICAgcmV0dXJuICgoY3AgIT09IDB4MjAgJiYgY3AgIT09IDB4MGEgJiYgY3AgIT09IDB4MGQgJiYgY3AgIT09IDB4MDkgJiYgY3AgIT09IDB4MGMgJiYgY3AgPj0gMHgwMSAmJiBjcCA8PSAweDFmKSB8fFxuICAgICAgICAoY3AgPj0gMHg3ZiAmJiBjcCA8PSAweDlmKSk7XG59XG5leHBvcnRzLmlzQ29udHJvbENvZGVQb2ludCA9IGlzQ29udHJvbENvZGVQb2ludDtcbmZ1bmN0aW9uIGlzVW5kZWZpbmVkQ29kZVBvaW50KGNwKSB7XG4gICAgcmV0dXJuIChjcCA+PSA2NDk3NiAmJiBjcCA8PSA2NTAwNykgfHwgVU5ERUZJTkVEX0NPREVfUE9JTlRTLmhhcyhjcCk7XG59XG5leHBvcnRzLmlzVW5kZWZpbmVkQ29kZVBvaW50ID0gaXNVbmRlZmluZWRDb2RlUG9pbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11bmljb2RlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wYXJzZUZyYWdtZW50ID0gZXhwb3J0cy5wYXJzZSA9IGV4cG9ydHMuVG9rZW5pemVyTW9kZSA9IGV4cG9ydHMuVG9rZW5pemVyID0gZXhwb3J0cy5Ub2tlbiA9IGV4cG9ydHMuaHRtbCA9IGV4cG9ydHMuZm9yZWlnbkNvbnRlbnQgPSBleHBvcnRzLkVycm9yQ29kZXMgPSBleHBvcnRzLnNlcmlhbGl6ZU91dGVyID0gZXhwb3J0cy5zZXJpYWxpemUgPSBleHBvcnRzLlBhcnNlciA9IGV4cG9ydHMuZGVmYXVsdFRyZWVBZGFwdGVyID0gdm9pZCAwO1xuY29uc3QgaW5kZXhfanNfMSA9IHJlcXVpcmUoXCIuL3BhcnNlci9pbmRleC5qc1wiKTtcbnZhciBkZWZhdWx0X2pzXzEgPSByZXF1aXJlKFwiLi90cmVlLWFkYXB0ZXJzL2RlZmF1bHQuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0VHJlZUFkYXB0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlZmF1bHRfanNfMS5kZWZhdWx0VHJlZUFkYXB0ZXI7IH0gfSk7XG52YXIgaW5kZXhfanNfMiA9IHJlcXVpcmUoXCIuL3BhcnNlci9pbmRleC5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBhcnNlclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaW5kZXhfanNfMi5QYXJzZXI7IH0gfSk7XG52YXIgaW5kZXhfanNfMyA9IHJlcXVpcmUoXCIuL3NlcmlhbGl6ZXIvaW5kZXguanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXJpYWxpemVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGluZGV4X2pzXzMuc2VyaWFsaXplOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2VyaWFsaXplT3V0ZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGluZGV4X2pzXzMuc2VyaWFsaXplT3V0ZXI7IH0gfSk7XG52YXIgZXJyb3JfY29kZXNfanNfMSA9IHJlcXVpcmUoXCIuL2NvbW1vbi9lcnJvci1jb2Rlcy5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkVycm9yQ29kZXNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVycm9yX2NvZGVzX2pzXzEuRVJSOyB9IH0pO1xuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0cy5mb3JlaWduQ29udGVudCA9IHJlcXVpcmUoXCIuL2NvbW1vbi9mb3JlaWduLWNvbnRlbnQuanNcIik7XG4vKiogQGludGVybmFsICovXG5leHBvcnRzLmh0bWwgPSByZXF1aXJlKFwiLi9jb21tb24vaHRtbC5qc1wiKTtcbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydHMuVG9rZW4gPSByZXF1aXJlKFwiLi9jb21tb24vdG9rZW4uanNcIik7XG4vKiogQGludGVybmFsICovXG52YXIgaW5kZXhfanNfNCA9IHJlcXVpcmUoXCIuL3Rva2VuaXplci9pbmRleC5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRva2VuaXplclwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gaW5kZXhfanNfNC5Ub2tlbml6ZXI7IH0gfSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUb2tlbml6ZXJNb2RlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBpbmRleF9qc180LlRva2VuaXplck1vZGU7IH0gfSk7XG4vLyBTaG9ydGhhbmRzXG4vKipcbiAqIFBhcnNlcyBhbiBIVE1MIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gaHRtbCBJbnB1dCBIVE1MIHN0cmluZy5cbiAqIEBwYXJhbSBvcHRpb25zIFBhcnNpbmcgb3B0aW9ucy5cbiAqIEByZXR1cm5zIERvY3VtZW50XG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcGFyc2U1ID0gcmVxdWlyZSgncGFyc2U1Jyk7XG4gKlxuICogY29uc3QgZG9jdW1lbnQgPSBwYXJzZTUucGFyc2UoJzwhRE9DVFlQRSBodG1sPjxodG1sPjxoZWFkPjwvaGVhZD48Ym9keT5IaSB0aGVyZSE8L2JvZHk+PC9odG1sPicpO1xuICpcbiAqIGNvbnNvbGUubG9nKGRvY3VtZW50LmNoaWxkTm9kZXNbMV0udGFnTmFtZSk7IC8vPiAnaHRtbCdcbiAqYGBgXG4gKi9cbmZ1bmN0aW9uIHBhcnNlKGh0bWwsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gaW5kZXhfanNfMS5QYXJzZXIucGFyc2UoaHRtbCwgb3B0aW9ucyk7XG59XG5leHBvcnRzLnBhcnNlID0gcGFyc2U7XG5mdW5jdGlvbiBwYXJzZUZyYWdtZW50KGZyYWdtZW50Q29udGV4dCwgaHRtbCwgb3B0aW9ucykge1xuICAgIGlmICh0eXBlb2YgZnJhZ21lbnRDb250ZXh0ID09PSAnc3RyaW5nJykge1xuICAgICAgICBvcHRpb25zID0gaHRtbDtcbiAgICAgICAgaHRtbCA9IGZyYWdtZW50Q29udGV4dDtcbiAgICAgICAgZnJhZ21lbnRDb250ZXh0ID0gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgcGFyc2VyID0gaW5kZXhfanNfMS5QYXJzZXIuZ2V0RnJhZ21lbnRQYXJzZXIoZnJhZ21lbnRDb250ZXh0LCBvcHRpb25zKTtcbiAgICBwYXJzZXIudG9rZW5pemVyLndyaXRlKGh0bWwsIHRydWUpO1xuICAgIHJldHVybiBwYXJzZXIuZ2V0RnJhZ21lbnQoKTtcbn1cbmV4cG9ydHMucGFyc2VGcmFnbWVudCA9IHBhcnNlRnJhZ21lbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRm9ybWF0dGluZ0VsZW1lbnRMaXN0ID0gZXhwb3J0cy5FbnRyeVR5cGUgPSB2b2lkIDA7XG4vL0NvbnN0XG5jb25zdCBOT0FIX0FSS19DQVBBQ0lUWSA9IDM7XG52YXIgRW50cnlUeXBlO1xuKGZ1bmN0aW9uIChFbnRyeVR5cGUpIHtcbiAgICBFbnRyeVR5cGVbRW50cnlUeXBlW1wiTWFya2VyXCJdID0gMF0gPSBcIk1hcmtlclwiO1xuICAgIEVudHJ5VHlwZVtFbnRyeVR5cGVbXCJFbGVtZW50XCJdID0gMV0gPSBcIkVsZW1lbnRcIjtcbn0pKEVudHJ5VHlwZSA9IGV4cG9ydHMuRW50cnlUeXBlIHx8IChleHBvcnRzLkVudHJ5VHlwZSA9IHt9KSk7XG5jb25zdCBNQVJLRVIgPSB7IHR5cGU6IEVudHJ5VHlwZS5NYXJrZXIgfTtcbi8vTGlzdCBvZiBmb3JtYXR0aW5nIGVsZW1lbnRzXG5jbGFzcyBGb3JtYXR0aW5nRWxlbWVudExpc3Qge1xuICAgIGNvbnN0cnVjdG9yKHRyZWVBZGFwdGVyKSB7XG4gICAgICAgIHRoaXMudHJlZUFkYXB0ZXIgPSB0cmVlQWRhcHRlcjtcbiAgICAgICAgdGhpcy5lbnRyaWVzID0gW107XG4gICAgICAgIHRoaXMuYm9va21hcmsgPSBudWxsO1xuICAgIH1cbiAgICAvL05vYWggQXJrJ3MgY29uZGl0aW9uXG4gICAgLy9PUFRJTUlaQVRJT046IGF0IGZpcnN0IHdlIHRyeSB0byBmaW5kIHBvc3NpYmxlIGNhbmRpZGF0ZXMgZm9yIGV4Y2x1c2lvbiB1c2luZ1xuICAgIC8vbGlnaHR3ZWlnaHQgaGV1cmlzdGljcyB3aXRob3V0IHRob3JvdWdoIGF0dHJpYnV0ZXMgY2hlY2suXG4gICAgX2dldE5vYWhBcmtDb25kaXRpb25DYW5kaWRhdGVzKG5ld0VsZW1lbnQsIG5lQXR0cnMpIHtcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlcyA9IFtdO1xuICAgICAgICBjb25zdCBuZUF0dHJzTGVuZ3RoID0gbmVBdHRycy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IG5lVGFnTmFtZSA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShuZXdFbGVtZW50KTtcbiAgICAgICAgY29uc3QgbmVOYW1lc3BhY2VVUkkgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShuZXdFbGVtZW50KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmVudHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5lbnRyaWVzW2ldO1xuICAgICAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IEVudHJ5VHlwZS5NYXJrZXIpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHsgZWxlbWVudCB9ID0gZW50cnk7XG4gICAgICAgICAgICBpZiAodGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpID09PSBuZVRhZ05hbWUgJiZcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShlbGVtZW50KSA9PT0gbmVOYW1lc3BhY2VVUkkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50QXR0cnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldEF0dHJMaXN0KGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50QXR0cnMubGVuZ3RoID09PSBuZUF0dHJzTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaCh7IGlkeDogaSwgYXR0cnM6IGVsZW1lbnRBdHRycyB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZXM7XG4gICAgfVxuICAgIF9lbnN1cmVOb2FoQXJrQ29uZGl0aW9uKG5ld0VsZW1lbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZW50cmllcy5sZW5ndGggPCBOT0FIX0FSS19DQVBBQ0lUWSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgbmVBdHRycyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0QXR0ckxpc3QobmV3RWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSB0aGlzLl9nZXROb2FoQXJrQ29uZGl0aW9uQ2FuZGlkYXRlcyhuZXdFbGVtZW50LCBuZUF0dHJzKTtcbiAgICAgICAgaWYgKGNhbmRpZGF0ZXMubGVuZ3RoIDwgTk9BSF9BUktfQ0FQQUNJVFkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8vTk9URTogYnVpbGQgYXR0cnMgbWFwIGZvciB0aGUgbmV3IGVsZW1lbnQsIHNvIHdlIGNhbiBwZXJmb3JtIGZhc3QgbG9va3Vwc1xuICAgICAgICBjb25zdCBuZUF0dHJzTWFwID0gbmV3IE1hcChuZUF0dHJzLm1hcCgobmVBdHRyKSA9PiBbbmVBdHRyLm5hbWUsIG5lQXR0ci52YWx1ZV0pKTtcbiAgICAgICAgbGV0IHZhbGlkQ2FuZGlkYXRlcyA9IDA7XG4gICAgICAgIC8vTk9URTogcmVtb3ZlIGJvdHRvbW1vc3QgY2FuZGlkYXRlcywgdW50aWwgTm9haCdzIEFyayBjb25kaXRpb24gd2lsbCBub3QgYmUgbWV0XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2FuZGlkYXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gY2FuZGlkYXRlc1tpXTtcbiAgICAgICAgICAgIC8vIFdlIGtub3cgdGhhdCBgY2FuZGlkYXRlLmF0dHJzLmxlbmd0aCA9PT0gbmVBdHRycy5sZW5ndGhgXG4gICAgICAgICAgICBpZiAoY2FuZGlkYXRlLmF0dHJzLmV2ZXJ5KChjQXR0cikgPT4gbmVBdHRyc01hcC5nZXQoY0F0dHIubmFtZSkgPT09IGNBdHRyLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbGlkQ2FuZGlkYXRlcyArPSAxO1xuICAgICAgICAgICAgICAgIGlmICh2YWxpZENhbmRpZGF0ZXMgPj0gTk9BSF9BUktfQ0FQQUNJVFkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRyaWVzLnNwbGljZShjYW5kaWRhdGUuaWR4LCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy9NdXRhdGlvbnNcbiAgICBpbnNlcnRNYXJrZXIoKSB7XG4gICAgICAgIHRoaXMuZW50cmllcy51bnNoaWZ0KE1BUktFUik7XG4gICAgfVxuICAgIHB1c2hFbGVtZW50KGVsZW1lbnQsIHRva2VuKSB7XG4gICAgICAgIHRoaXMuX2Vuc3VyZU5vYWhBcmtDb25kaXRpb24oZWxlbWVudCk7XG4gICAgICAgIHRoaXMuZW50cmllcy51bnNoaWZ0KHtcbiAgICAgICAgICAgIHR5cGU6IEVudHJ5VHlwZS5FbGVtZW50LFxuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIHRva2VuLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaW5zZXJ0RWxlbWVudEFmdGVyQm9va21hcmsoZWxlbWVudCwgdG9rZW4pIHtcbiAgICAgICAgY29uc3QgYm9va21hcmtJZHggPSB0aGlzLmVudHJpZXMuaW5kZXhPZih0aGlzLmJvb2ttYXJrKTtcbiAgICAgICAgdGhpcy5lbnRyaWVzLnNwbGljZShib29rbWFya0lkeCwgMCwge1xuICAgICAgICAgICAgdHlwZTogRW50cnlUeXBlLkVsZW1lbnQsXG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgdG9rZW4sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZW1vdmVFbnRyeShlbnRyeSkge1xuICAgICAgICBjb25zdCBlbnRyeUluZGV4ID0gdGhpcy5lbnRyaWVzLmluZGV4T2YoZW50cnkpO1xuICAgICAgICBpZiAoZW50cnlJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmVudHJpZXMuc3BsaWNlKGVudHJ5SW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENsZWFycyB0aGUgbGlzdCBvZiBmb3JtYXR0aW5nIGVsZW1lbnRzIHVwIHRvIHRoZSBsYXN0IG1hcmtlci5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvcGFyc2luZy5odG1sI2NsZWFyLXRoZS1saXN0LW9mLWFjdGl2ZS1mb3JtYXR0aW5nLWVsZW1lbnRzLXVwLXRvLXRoZS1sYXN0LW1hcmtlclxuICAgICAqL1xuICAgIGNsZWFyVG9MYXN0TWFya2VyKCkge1xuICAgICAgICBjb25zdCBtYXJrZXJJZHggPSB0aGlzLmVudHJpZXMuaW5kZXhPZihNQVJLRVIpO1xuICAgICAgICBpZiAobWFya2VySWR4ID49IDApIHtcbiAgICAgICAgICAgIHRoaXMuZW50cmllcy5zcGxpY2UoMCwgbWFya2VySWR4ICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVudHJpZXMubGVuZ3RoID0gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvL1NlYXJjaFxuICAgIGdldEVsZW1lbnRFbnRyeUluU2NvcGVXaXRoVGFnTmFtZSh0YWdOYW1lKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5lbnRyaWVzLmZpbmQoKGVudHJ5KSA9PiBlbnRyeS50eXBlID09PSBFbnRyeVR5cGUuTWFya2VyIHx8IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbnRyeS5lbGVtZW50KSA9PT0gdGFnTmFtZSk7XG4gICAgICAgIHJldHVybiBlbnRyeSAmJiBlbnRyeS50eXBlID09PSBFbnRyeVR5cGUuRWxlbWVudCA/IGVudHJ5IDogbnVsbDtcbiAgICB9XG4gICAgZ2V0RWxlbWVudEVudHJ5KGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllcy5maW5kKChlbnRyeSkgPT4gZW50cnkudHlwZSA9PT0gRW50cnlUeXBlLkVsZW1lbnQgJiYgZW50cnkuZWxlbWVudCA9PT0gZWxlbWVudCk7XG4gICAgfVxufVxuZXhwb3J0cy5Gb3JtYXR0aW5nRWxlbWVudExpc3QgPSBGb3JtYXR0aW5nRWxlbWVudExpc3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1mb3JtYXR0aW5nLWVsZW1lbnQtbGlzdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUGFyc2VyID0gdm9pZCAwO1xuY29uc3QgaW5kZXhfanNfMSA9IHJlcXVpcmUoXCIuLi90b2tlbml6ZXIvaW5kZXguanNcIik7XG5jb25zdCBvcGVuX2VsZW1lbnRfc3RhY2tfanNfMSA9IHJlcXVpcmUoXCIuL29wZW4tZWxlbWVudC1zdGFjay5qc1wiKTtcbmNvbnN0IGZvcm1hdHRpbmdfZWxlbWVudF9saXN0X2pzXzEgPSByZXF1aXJlKFwiLi9mb3JtYXR0aW5nLWVsZW1lbnQtbGlzdC5qc1wiKTtcbmNvbnN0IGRlZmF1bHRfanNfMSA9IHJlcXVpcmUoXCIuLi90cmVlLWFkYXB0ZXJzL2RlZmF1bHQuanNcIik7XG5jb25zdCBkb2N0eXBlID0gcmVxdWlyZShcIi4uL2NvbW1vbi9kb2N0eXBlLmpzXCIpO1xuY29uc3QgZm9yZWlnbkNvbnRlbnQgPSByZXF1aXJlKFwiLi4vY29tbW9uL2ZvcmVpZ24tY29udGVudC5qc1wiKTtcbmNvbnN0IGVycm9yX2NvZGVzX2pzXzEgPSByZXF1aXJlKFwiLi4vY29tbW9uL2Vycm9yLWNvZGVzLmpzXCIpO1xuY29uc3QgdW5pY29kZSA9IHJlcXVpcmUoXCIuLi9jb21tb24vdW5pY29kZS5qc1wiKTtcbmNvbnN0IGh0bWxfanNfMSA9IHJlcXVpcmUoXCIuLi9jb21tb24vaHRtbC5qc1wiKTtcbmNvbnN0IHRva2VuX2pzXzEgPSByZXF1aXJlKFwiLi4vY29tbW9uL3Rva2VuLmpzXCIpO1xuLy9NaXNjIGNvbnN0YW50c1xuY29uc3QgSElEREVOX0lOUFVUX1RZUEUgPSAnaGlkZGVuJztcbi8vQWRvcHRpb24gYWdlbmN5IGxvb3BzIGl0ZXJhdGlvbiBjb3VudFxuY29uc3QgQUFfT1VURVJfTE9PUF9JVEVSID0gODtcbmNvbnN0IEFBX0lOTkVSX0xPT1BfSVRFUiA9IDM7XG4vL0luc2VydGlvbiBtb2Rlc1xudmFyIEluc2VydGlvbk1vZGU7XG4oZnVuY3Rpb24gKEluc2VydGlvbk1vZGUpIHtcbiAgICBJbnNlcnRpb25Nb2RlW0luc2VydGlvbk1vZGVbXCJJTklUSUFMXCJdID0gMF0gPSBcIklOSVRJQUxcIjtcbiAgICBJbnNlcnRpb25Nb2RlW0luc2VydGlvbk1vZGVbXCJCRUZPUkVfSFRNTFwiXSA9IDFdID0gXCJCRUZPUkVfSFRNTFwiO1xuICAgIEluc2VydGlvbk1vZGVbSW5zZXJ0aW9uTW9kZVtcIkJFRk9SRV9IRUFEXCJdID0gMl0gPSBcIkJFRk9SRV9IRUFEXCI7XG4gICAgSW5zZXJ0aW9uTW9kZVtJbnNlcnRpb25Nb2RlW1wiSU5fSEVBRFwiXSA9IDNdID0gXCJJTl9IRUFEXCI7XG4gICAgSW5zZXJ0aW9uTW9kZVtJbnNlcnRpb25Nb2RlW1wiSU5fSEVBRF9OT19TQ1JJUFRcIl0gPSA0XSA9IFwiSU5fSEVBRF9OT19TQ1JJUFRcIjtcbiAgICBJbnNlcnRpb25Nb2RlW0luc2VydGlvbk1vZGVbXCJBRlRFUl9IRUFEXCJdID0gNV0gPSBcIkFGVEVSX0hFQURcIjtcbiAgICBJbnNlcnRpb25Nb2RlW0luc2VydGlvbk1vZGVbXCJJTl9CT0RZXCJdID0gNl0gPSBcIklOX0JPRFlcIjtcbiAgICBJbnNlcnRpb25Nb2RlW0luc2VydGlvbk1vZGVbXCJURVhUXCJdID0gN10gPSBcIlRFWFRcIjtcbiAgICBJbnNlcnRpb25Nb2RlW0luc2VydGlvbk1vZGVbXCJJTl9UQUJMRVwiXSA9IDhdID0gXCJJTl9UQUJMRVwiO1xuICAgIEluc2VydGlvbk1vZGVbSW5zZXJ0aW9uTW9kZVtcIklOX1RBQkxFX1RFWFRcIl0gPSA5XSA9IFwiSU5fVEFCTEVfVEVYVFwiO1xuICAgIEluc2VydGlvbk1vZGVbSW5zZXJ0aW9uTW9kZVtcIklOX0NBUFRJT05cIl0gPSAxMF0gPSBcIklOX0NBUFRJT05cIjtcbiAgICBJbnNlcnRpb25Nb2RlW0luc2VydGlvbk1vZGVbXCJJTl9DT0xVTU5fR1JPVVBcIl0gPSAxMV0gPSBcIklOX0NPTFVNTl9HUk9VUFwiO1xuICAgIEluc2VydGlvbk1vZGVbSW5zZXJ0aW9uTW9kZVtcIklOX1RBQkxFX0JPRFlcIl0gPSAxMl0gPSBcIklOX1RBQkxFX0JPRFlcIjtcbiAgICBJbnNlcnRpb25Nb2RlW0luc2VydGlvbk1vZGVbXCJJTl9ST1dcIl0gPSAxM10gPSBcIklOX1JPV1wiO1xuICAgIEluc2VydGlvbk1vZGVbSW5zZXJ0aW9uTW9kZVtcIklOX0NFTExcIl0gPSAxNF0gPSBcIklOX0NFTExcIjtcbiAgICBJbnNlcnRpb25Nb2RlW0luc2VydGlvbk1vZGVbXCJJTl9TRUxFQ1RcIl0gPSAxNV0gPSBcIklOX1NFTEVDVFwiO1xuICAgIEluc2VydGlvbk1vZGVbSW5zZXJ0aW9uTW9kZVtcIklOX1NFTEVDVF9JTl9UQUJMRVwiXSA9IDE2XSA9IFwiSU5fU0VMRUNUX0lOX1RBQkxFXCI7XG4gICAgSW5zZXJ0aW9uTW9kZVtJbnNlcnRpb25Nb2RlW1wiSU5fVEVNUExBVEVcIl0gPSAxN10gPSBcIklOX1RFTVBMQVRFXCI7XG4gICAgSW5zZXJ0aW9uTW9kZVtJbnNlcnRpb25Nb2RlW1wiQUZURVJfQk9EWVwiXSA9IDE4XSA9IFwiQUZURVJfQk9EWVwiO1xuICAgIEluc2VydGlvbk1vZGVbSW5zZXJ0aW9uTW9kZVtcIklOX0ZSQU1FU0VUXCJdID0gMTldID0gXCJJTl9GUkFNRVNFVFwiO1xuICAgIEluc2VydGlvbk1vZGVbSW5zZXJ0aW9uTW9kZVtcIkFGVEVSX0ZSQU1FU0VUXCJdID0gMjBdID0gXCJBRlRFUl9GUkFNRVNFVFwiO1xuICAgIEluc2VydGlvbk1vZGVbSW5zZXJ0aW9uTW9kZVtcIkFGVEVSX0FGVEVSX0JPRFlcIl0gPSAyMV0gPSBcIkFGVEVSX0FGVEVSX0JPRFlcIjtcbiAgICBJbnNlcnRpb25Nb2RlW0luc2VydGlvbk1vZGVbXCJBRlRFUl9BRlRFUl9GUkFNRVNFVFwiXSA9IDIyXSA9IFwiQUZURVJfQUZURVJfRlJBTUVTRVRcIjtcbn0pKEluc2VydGlvbk1vZGUgfHwgKEluc2VydGlvbk1vZGUgPSB7fSkpO1xuY29uc3QgQkFTRV9MT0MgPSB7XG4gICAgc3RhcnRMaW5lOiAtMSxcbiAgICBzdGFydENvbDogLTEsXG4gICAgc3RhcnRPZmZzZXQ6IC0xLFxuICAgIGVuZExpbmU6IC0xLFxuICAgIGVuZENvbDogLTEsXG4gICAgZW5kT2Zmc2V0OiAtMSxcbn07XG5jb25zdCBUQUJMRV9TVFJVQ1RVUkVfVEFHUyA9IG5ldyBTZXQoW2h0bWxfanNfMS5UQUdfSUQuVEFCTEUsIGh0bWxfanNfMS5UQUdfSUQuVEJPRFksIGh0bWxfanNfMS5UQUdfSUQuVEZPT1QsIGh0bWxfanNfMS5UQUdfSUQuVEhFQUQsIGh0bWxfanNfMS5UQUdfSUQuVFJdKTtcbmNvbnN0IGRlZmF1bHRQYXJzZXJPcHRpb25zID0ge1xuICAgIHNjcmlwdGluZ0VuYWJsZWQ6IHRydWUsXG4gICAgc291cmNlQ29kZUxvY2F0aW9uSW5mbzogZmFsc2UsXG4gICAgdHJlZUFkYXB0ZXI6IGRlZmF1bHRfanNfMS5kZWZhdWx0VHJlZUFkYXB0ZXIsXG4gICAgb25QYXJzZUVycm9yOiBudWxsLFxufTtcbi8vUGFyc2VyXG5jbGFzcyBQYXJzZXIge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGRvY3VtZW50LCBmcmFnbWVudENvbnRleHQgPSBudWxsLCBzY3JpcHRIYW5kbGVyID0gbnVsbCkge1xuICAgICAgICB0aGlzLmZyYWdtZW50Q29udGV4dCA9IGZyYWdtZW50Q29udGV4dDtcbiAgICAgICAgdGhpcy5zY3JpcHRIYW5kbGVyID0gc2NyaXB0SGFuZGxlcjtcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4gPSBudWxsO1xuICAgICAgICB0aGlzLnN0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTklUSUFMO1xuICAgICAgICB0aGlzLm9yaWdpbmFsSW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5JVElBTDtcbiAgICAgICAgdGhpcy5oZWFkRWxlbWVudCA9IG51bGw7XG4gICAgICAgIHRoaXMuZm9ybUVsZW1lbnQgPSBudWxsO1xuICAgICAgICAvKiogSW5kaWNhdGVzIHRoYXQgdGhlIGN1cnJlbnQgbm9kZSBpcyBub3QgYW4gZWxlbWVudCBpbiB0aGUgSFRNTCBuYW1lc3BhY2UgKi9cbiAgICAgICAgdGhpcy5jdXJyZW50Tm90SW5IVE1MID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgdGVtcGxhdGUgaW5zZXJ0aW9uIG1vZGUgc3RhY2sgaXMgbWFpbnRhaW5lZCBmcm9tIHRoZSBsZWZ0LlxuICAgICAgICAgKiBJZS4gdGhlIHRvcG1vc3QgZWxlbWVudCB3aWxsIGFsd2F5cyBoYXZlIGluZGV4IDAuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2sgPSBbXTtcbiAgICAgICAgdGhpcy5wZW5kaW5nQ2hhcmFjdGVyVG9rZW5zID0gW107XG4gICAgICAgIHRoaXMuaGFzTm9uV2hpdGVzcGFjZVBlbmRpbmdDaGFyYWN0ZXJUb2tlbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZyYW1lc2V0T2sgPSB0cnVlO1xuICAgICAgICB0aGlzLnNraXBOZXh0TmV3TGluZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZvc3RlclBhcmVudGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0UGFyc2VyT3B0aW9ucyksIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyID0gdGhpcy5vcHRpb25zLnRyZWVBZGFwdGVyO1xuICAgICAgICB0aGlzLm9uUGFyc2VFcnJvciA9IHRoaXMub3B0aW9ucy5vblBhcnNlRXJyb3I7XG4gICAgICAgIC8vIEFsd2F5cyBlbmFibGUgbG9jYXRpb24gaW5mbyBpZiB3ZSByZXBvcnQgcGFyc2UgZXJyb3JzLlxuICAgICAgICBpZiAodGhpcy5vblBhcnNlRXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zb3VyY2VDb2RlTG9jYXRpb25JbmZvID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRvY3VtZW50ID0gZG9jdW1lbnQgIT09IG51bGwgJiYgZG9jdW1lbnQgIT09IHZvaWQgMCA/IGRvY3VtZW50IDogdGhpcy50cmVlQWRhcHRlci5jcmVhdGVEb2N1bWVudCgpO1xuICAgICAgICB0aGlzLnRva2VuaXplciA9IG5ldyBpbmRleF9qc18xLlRva2VuaXplcih0aGlzLm9wdGlvbnMsIHRoaXMpO1xuICAgICAgICB0aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cyA9IG5ldyBmb3JtYXR0aW5nX2VsZW1lbnRfbGlzdF9qc18xLkZvcm1hdHRpbmdFbGVtZW50TGlzdCh0aGlzLnRyZWVBZGFwdGVyKTtcbiAgICAgICAgdGhpcy5mcmFnbWVudENvbnRleHRJRCA9IGZyYWdtZW50Q29udGV4dCA/ICgwLCBodG1sX2pzXzEuZ2V0VGFnSUQpKHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShmcmFnbWVudENvbnRleHQpKSA6IGh0bWxfanNfMS5UQUdfSUQuVU5LTk9XTjtcbiAgICAgICAgdGhpcy5fc2V0Q29udGV4dE1vZGVzKGZyYWdtZW50Q29udGV4dCAhPT0gbnVsbCAmJiBmcmFnbWVudENvbnRleHQgIT09IHZvaWQgMCA/IGZyYWdtZW50Q29udGV4dCA6IHRoaXMuZG9jdW1lbnQsIHRoaXMuZnJhZ21lbnRDb250ZXh0SUQpO1xuICAgICAgICB0aGlzLm9wZW5FbGVtZW50cyA9IG5ldyBvcGVuX2VsZW1lbnRfc3RhY2tfanNfMS5PcGVuRWxlbWVudFN0YWNrKHRoaXMuZG9jdW1lbnQsIHRoaXMudHJlZUFkYXB0ZXIsIHRoaXMpO1xuICAgIH1cbiAgICAvLyBBUElcbiAgICBzdGF0aWMgcGFyc2UoaHRtbCwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBwYXJzZXIgPSBuZXcgdGhpcyhvcHRpb25zKTtcbiAgICAgICAgcGFyc2VyLnRva2VuaXplci53cml0ZShodG1sLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlci5kb2N1bWVudDtcbiAgICB9XG4gICAgc3RhdGljIGdldEZyYWdtZW50UGFyc2VyKGZyYWdtZW50Q29udGV4dCwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBvcHRzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0UGFyc2VyT3B0aW9ucyksIG9wdGlvbnMpO1xuICAgICAgICAvL05PVEU6IHVzZSBhIDx0ZW1wbGF0ZT4gZWxlbWVudCBhcyB0aGUgZnJhZ21lbnQgY29udGV4dCBpZiBubyBjb250ZXh0IGVsZW1lbnQgd2FzIHByb3ZpZGVkLFxuICAgICAgICAvL3NvIHdlIHdpbGwgcGFyc2UgaW4gYSBcImZvcmdpdmluZ1wiIG1hbm5lclxuICAgICAgICBmcmFnbWVudENvbnRleHQgIT09IG51bGwgJiYgZnJhZ21lbnRDb250ZXh0ICE9PSB2b2lkIDAgPyBmcmFnbWVudENvbnRleHQgOiAoZnJhZ21lbnRDb250ZXh0ID0gb3B0cy50cmVlQWRhcHRlci5jcmVhdGVFbGVtZW50KGh0bWxfanNfMS5UQUdfTkFNRVMuVEVNUExBVEUsIGh0bWxfanNfMS5OUy5IVE1MLCBbXSkpO1xuICAgICAgICAvL05PVEU6IGNyZWF0ZSBhIGZha2UgZWxlbWVudCB3aGljaCB3aWxsIGJlIHVzZWQgYXMgdGhlIGBkb2N1bWVudGAgZm9yIGZyYWdtZW50IHBhcnNpbmcuXG4gICAgICAgIC8vVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGpzZG9tLCB3aGVyZSBhIG5ldyBgZG9jdW1lbnRgIGNhbm5vdCBiZSBjcmVhdGVkLiBUaGlzIGxlZCB0b1xuICAgICAgICAvL2ZyYWdtZW50IHBhcnNpbmcgbWVzc2luZyB3aXRoIHRoZSBtYWluIGBkb2N1bWVudGAuXG4gICAgICAgIGNvbnN0IGRvY3VtZW50TW9jayA9IG9wdHMudHJlZUFkYXB0ZXIuY3JlYXRlRWxlbWVudCgnZG9jdW1lbnRtb2NrJywgaHRtbF9qc18xLk5TLkhUTUwsIFtdKTtcbiAgICAgICAgY29uc3QgcGFyc2VyID0gbmV3IHRoaXMob3B0cywgZG9jdW1lbnRNb2NrLCBmcmFnbWVudENvbnRleHQpO1xuICAgICAgICBpZiAocGFyc2VyLmZyYWdtZW50Q29udGV4dElEID09PSBodG1sX2pzXzEuVEFHX0lELlRFTVBMQVRFKSB7XG4gICAgICAgICAgICBwYXJzZXIudG1wbEluc2VydGlvbk1vZGVTdGFjay51bnNoaWZ0KEluc2VydGlvbk1vZGUuSU5fVEVNUExBVEUpO1xuICAgICAgICB9XG4gICAgICAgIHBhcnNlci5faW5pdFRva2VuaXplckZvckZyYWdtZW50UGFyc2luZygpO1xuICAgICAgICBwYXJzZXIuX2luc2VydEZha2VSb290RWxlbWVudCgpO1xuICAgICAgICBwYXJzZXIuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xuICAgICAgICBwYXJzZXIuX2ZpbmRGb3JtSW5GcmFnbWVudENvbnRleHQoKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlcjtcbiAgICB9XG4gICAgZ2V0RnJhZ21lbnQoKSB7XG4gICAgICAgIGNvbnN0IHJvb3RFbGVtZW50ID0gdGhpcy50cmVlQWRhcHRlci5nZXRGaXJzdENoaWxkKHRoaXMuZG9jdW1lbnQpO1xuICAgICAgICBjb25zdCBmcmFnbWVudCA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgICB0aGlzLl9hZG9wdE5vZGVzKHJvb3RFbGVtZW50LCBmcmFnbWVudCk7XG4gICAgICAgIHJldHVybiBmcmFnbWVudDtcbiAgICB9XG4gICAgLy9FcnJvcnNcbiAgICBfZXJyKHRva2VuLCBjb2RlLCBiZWZvcmVUb2tlbikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghdGhpcy5vblBhcnNlRXJyb3IpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGxvYyA9IChfYSA9IHRva2VuLmxvY2F0aW9uKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBCQVNFX0xPQztcbiAgICAgICAgY29uc3QgZXJyID0ge1xuICAgICAgICAgICAgY29kZSxcbiAgICAgICAgICAgIHN0YXJ0TGluZTogbG9jLnN0YXJ0TGluZSxcbiAgICAgICAgICAgIHN0YXJ0Q29sOiBsb2Muc3RhcnRDb2wsXG4gICAgICAgICAgICBzdGFydE9mZnNldDogbG9jLnN0YXJ0T2Zmc2V0LFxuICAgICAgICAgICAgZW5kTGluZTogYmVmb3JlVG9rZW4gPyBsb2Muc3RhcnRMaW5lIDogbG9jLmVuZExpbmUsXG4gICAgICAgICAgICBlbmRDb2w6IGJlZm9yZVRva2VuID8gbG9jLnN0YXJ0Q29sIDogbG9jLmVuZENvbCxcbiAgICAgICAgICAgIGVuZE9mZnNldDogYmVmb3JlVG9rZW4gPyBsb2Muc3RhcnRPZmZzZXQgOiBsb2MuZW5kT2Zmc2V0LFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uUGFyc2VFcnJvcihlcnIpO1xuICAgIH1cbiAgICAvL1N0YWNrIGV2ZW50c1xuICAgIG9uSXRlbVB1c2gobm9kZSwgdGlkLCBpc1RvcCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLnRyZWVBZGFwdGVyKS5vbkl0ZW1QdXNoKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgbm9kZSk7XG4gICAgICAgIGlmIChpc1RvcCAmJiB0aGlzLm9wZW5FbGVtZW50cy5zdGFja1RvcCA+IDApXG4gICAgICAgICAgICB0aGlzLl9zZXRDb250ZXh0TW9kZXMobm9kZSwgdGlkKTtcbiAgICB9XG4gICAgb25JdGVtUG9wKG5vZGUsIGlzVG9wKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc291cmNlQ29kZUxvY2F0aW9uSW5mbykge1xuICAgICAgICAgICAgdGhpcy5fc2V0RW5kTG9jYXRpb24obm9kZSwgdGhpcy5jdXJyZW50VG9rZW4pO1xuICAgICAgICB9XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMudHJlZUFkYXB0ZXIpLm9uSXRlbVBvcCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIG5vZGUsIHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnQpO1xuICAgICAgICBpZiAoaXNUb3ApIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW50O1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRUYWdJZDtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wZW5FbGVtZW50cy5zdGFja1RvcCA9PT0gMCAmJiB0aGlzLmZyYWdtZW50Q29udGV4dCkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSB0aGlzLmZyYWdtZW50Q29udGV4dDtcbiAgICAgICAgICAgICAgICBjdXJyZW50VGFnSWQgPSB0aGlzLmZyYWdtZW50Q29udGV4dElEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgKHsgY3VycmVudCwgY3VycmVudFRhZ0lkIH0gPSB0aGlzLm9wZW5FbGVtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9zZXRDb250ZXh0TW9kZXMoY3VycmVudCwgY3VycmVudFRhZ0lkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfc2V0Q29udGV4dE1vZGVzKGN1cnJlbnQsIHRpZCkge1xuICAgICAgICBjb25zdCBpc0hUTUwgPSBjdXJyZW50ID09PSB0aGlzLmRvY3VtZW50IHx8IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGN1cnJlbnQpID09PSBodG1sX2pzXzEuTlMuSFRNTDtcbiAgICAgICAgdGhpcy5jdXJyZW50Tm90SW5IVE1MID0gIWlzSFRNTDtcbiAgICAgICAgdGhpcy50b2tlbml6ZXIuaW5Gb3JlaWduTm9kZSA9ICFpc0hUTUwgJiYgIXRoaXMuX2lzSW50ZWdyYXRpb25Qb2ludCh0aWQsIGN1cnJlbnQpO1xuICAgIH1cbiAgICBfc3dpdGNoVG9UZXh0UGFyc2luZyhjdXJyZW50VG9rZW4sIG5leHRUb2tlbml6ZXJTdGF0ZSkge1xuICAgICAgICB0aGlzLl9pbnNlcnRFbGVtZW50KGN1cnJlbnRUb2tlbiwgaHRtbF9qc18xLk5TLkhUTUwpO1xuICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IG5leHRUb2tlbml6ZXJTdGF0ZTtcbiAgICAgICAgdGhpcy5vcmlnaW5hbEluc2VydGlvbk1vZGUgPSB0aGlzLmluc2VydGlvbk1vZGU7XG4gICAgICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuVEVYVDtcbiAgICB9XG4gICAgc3dpdGNoVG9QbGFpbnRleHRQYXJzaW5nKCkge1xuICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLlRFWFQ7XG4gICAgICAgIHRoaXMub3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9CT0RZO1xuICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IGluZGV4X2pzXzEuVG9rZW5pemVyTW9kZS5QTEFJTlRFWFQ7XG4gICAgfVxuICAgIC8vRnJhZ21lbnQgcGFyc2luZ1xuICAgIF9nZXRBZGp1c3RlZEN1cnJlbnRFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcGVuRWxlbWVudHMuc3RhY2tUb3AgPT09IDAgJiYgdGhpcy5mcmFnbWVudENvbnRleHRcbiAgICAgICAgICAgID8gdGhpcy5mcmFnbWVudENvbnRleHRcbiAgICAgICAgICAgIDogdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudDtcbiAgICB9XG4gICAgX2ZpbmRGb3JtSW5GcmFnbWVudENvbnRleHQoKSB7XG4gICAgICAgIGxldCBub2RlID0gdGhpcy5mcmFnbWVudENvbnRleHQ7XG4gICAgICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKG5vZGUpID09PSBodG1sX2pzXzEuVEFHX05BTUVTLkZPUk0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1FbGVtZW50ID0gbm9kZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGUgPSB0aGlzLnRyZWVBZGFwdGVyLmdldFBhcmVudE5vZGUobm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2luaXRUb2tlbml6ZXJGb3JGcmFnbWVudFBhcnNpbmcoKSB7XG4gICAgICAgIGlmICghdGhpcy5mcmFnbWVudENvbnRleHQgfHwgdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5mcmFnbWVudENvbnRleHQpICE9PSBodG1sX2pzXzEuTlMuSFRNTCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAodGhpcy5mcmFnbWVudENvbnRleHRJRCkge1xuICAgICAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlRJVExFOlxuICAgICAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlRFWFRBUkVBOiB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBpbmRleF9qc18xLlRva2VuaXplck1vZGUuUkNEQVRBO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlNUWUxFOlxuICAgICAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlhNUDpcbiAgICAgICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5JRlJBTUU6XG4gICAgICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuTk9FTUJFRDpcbiAgICAgICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5OT0ZSQU1FUzpcbiAgICAgICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5OT1NDUklQVDoge1xuICAgICAgICAgICAgICAgIHRoaXMudG9rZW5pemVyLnN0YXRlID0gaW5kZXhfanNfMS5Ub2tlbml6ZXJNb2RlLlJBV1RFWFQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuU0NSSVBUOiB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBpbmRleF9qc18xLlRva2VuaXplck1vZGUuU0NSSVBUX0RBVEE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuUExBSU5URVhUOiB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBpbmRleF9qc18xLlRva2VuaXplck1vZGUuUExBSU5URVhUO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIERvIG5vdGhpbmdcbiAgICAgICAgfVxuICAgIH1cbiAgICAvL1RyZWUgbXV0YXRpb25cbiAgICBfc2V0RG9jdW1lbnRUeXBlKHRva2VuKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0b2tlbi5uYW1lIHx8ICcnO1xuICAgICAgICBjb25zdCBwdWJsaWNJZCA9IHRva2VuLnB1YmxpY0lkIHx8ICcnO1xuICAgICAgICBjb25zdCBzeXN0ZW1JZCA9IHRva2VuLnN5c3RlbUlkIHx8ICcnO1xuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLnNldERvY3VtZW50VHlwZSh0aGlzLmRvY3VtZW50LCBuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpO1xuICAgICAgICBpZiAodG9rZW4ubG9jYXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50Q2hpbGRyZW4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXModGhpcy5kb2N1bWVudCk7XG4gICAgICAgICAgICBjb25zdCBkb2NUeXBlTm9kZSA9IGRvY3VtZW50Q2hpbGRyZW4uZmluZCgobm9kZSkgPT4gdGhpcy50cmVlQWRhcHRlci5pc0RvY3VtZW50VHlwZU5vZGUobm9kZSkpO1xuICAgICAgICAgICAgaWYgKGRvY1R5cGVOb2RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlQWRhcHRlci5zZXROb2RlU291cmNlQ29kZUxvY2F0aW9uKGRvY1R5cGVOb2RlLCB0b2tlbi5sb2NhdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2F0dGFjaEVsZW1lbnRUb1RyZWUoZWxlbWVudCwgbG9jYXRpb24pIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zb3VyY2VDb2RlTG9jYXRpb25JbmZvKSB7XG4gICAgICAgICAgICBjb25zdCBsb2MgPSBsb2NhdGlvbiAmJiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGxvY2F0aW9uKSwgeyBzdGFydFRhZzogbG9jYXRpb24gfSk7XG4gICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLnNldE5vZGVTb3VyY2VDb2RlTG9jYXRpb24oZWxlbWVudCwgbG9jKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fc2hvdWxkRm9zdGVyUGFyZW50T25JbnNlcnRpb24oKSkge1xuICAgICAgICAgICAgdGhpcy5fZm9zdGVyUGFyZW50RWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnRUbXBsQ29udGVudE9yTm9kZTtcbiAgICAgICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuYXBwZW5kQ2hpbGQocGFyZW50LCBlbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfYXBwZW5kRWxlbWVudCh0b2tlbiwgbmFtZXNwYWNlVVJJKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQodG9rZW4udGFnTmFtZSwgbmFtZXNwYWNlVVJJLCB0b2tlbi5hdHRycyk7XG4gICAgICAgIHRoaXMuX2F0dGFjaEVsZW1lbnRUb1RyZWUoZWxlbWVudCwgdG9rZW4ubG9jYXRpb24pO1xuICAgIH1cbiAgICBfaW5zZXJ0RWxlbWVudCh0b2tlbiwgbmFtZXNwYWNlVVJJKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQodG9rZW4udGFnTmFtZSwgbmFtZXNwYWNlVVJJLCB0b2tlbi5hdHRycyk7XG4gICAgICAgIHRoaXMuX2F0dGFjaEVsZW1lbnRUb1RyZWUoZWxlbWVudCwgdG9rZW4ubG9jYXRpb24pO1xuICAgICAgICB0aGlzLm9wZW5FbGVtZW50cy5wdXNoKGVsZW1lbnQsIHRva2VuLnRhZ0lEKTtcbiAgICB9XG4gICAgX2luc2VydEZha2VFbGVtZW50KHRhZ05hbWUsIHRhZ0lEKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQodGFnTmFtZSwgaHRtbF9qc18xLk5TLkhUTUwsIFtdKTtcbiAgICAgICAgdGhpcy5fYXR0YWNoRWxlbWVudFRvVHJlZShlbGVtZW50LCBudWxsKTtcbiAgICAgICAgdGhpcy5vcGVuRWxlbWVudHMucHVzaChlbGVtZW50LCB0YWdJRCk7XG4gICAgfVxuICAgIF9pbnNlcnRUZW1wbGF0ZSh0b2tlbikge1xuICAgICAgICBjb25zdCB0bXBsID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVFbGVtZW50KHRva2VuLnRhZ05hbWUsIGh0bWxfanNfMS5OUy5IVE1MLCB0b2tlbi5hdHRycyk7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgdGhpcy50cmVlQWRhcHRlci5zZXRUZW1wbGF0ZUNvbnRlbnQodG1wbCwgY29udGVudCk7XG4gICAgICAgIHRoaXMuX2F0dGFjaEVsZW1lbnRUb1RyZWUodG1wbCwgdG9rZW4ubG9jYXRpb24pO1xuICAgICAgICB0aGlzLm9wZW5FbGVtZW50cy5wdXNoKHRtcGwsIHRva2VuLnRhZ0lEKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zb3VyY2VDb2RlTG9jYXRpb25JbmZvKVxuICAgICAgICAgICAgdGhpcy50cmVlQWRhcHRlci5zZXROb2RlU291cmNlQ29kZUxvY2F0aW9uKGNvbnRlbnQsIG51bGwpO1xuICAgIH1cbiAgICBfaW5zZXJ0RmFrZVJvb3RFbGVtZW50KCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVFbGVtZW50KGh0bWxfanNfMS5UQUdfTkFNRVMuSFRNTCwgaHRtbF9qc18xLk5TLkhUTUwsIFtdKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zb3VyY2VDb2RlTG9jYXRpb25JbmZvKVxuICAgICAgICAgICAgdGhpcy50cmVlQWRhcHRlci5zZXROb2RlU291cmNlQ29kZUxvY2F0aW9uKGVsZW1lbnQsIG51bGwpO1xuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnQsIGVsZW1lbnQpO1xuICAgICAgICB0aGlzLm9wZW5FbGVtZW50cy5wdXNoKGVsZW1lbnQsIGh0bWxfanNfMS5UQUdfSUQuSFRNTCk7XG4gICAgfVxuICAgIF9hcHBlbmRDb21tZW50Tm9kZSh0b2tlbiwgcGFyZW50KSB7XG4gICAgICAgIGNvbnN0IGNvbW1lbnROb2RlID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVDb21tZW50Tm9kZSh0b2tlbi5kYXRhKTtcbiAgICAgICAgdGhpcy50cmVlQWRhcHRlci5hcHBlbmRDaGlsZChwYXJlbnQsIGNvbW1lbnROb2RlKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zb3VyY2VDb2RlTG9jYXRpb25JbmZvKSB7XG4gICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLnNldE5vZGVTb3VyY2VDb2RlTG9jYXRpb24oY29tbWVudE5vZGUsIHRva2VuLmxvY2F0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfaW5zZXJ0Q2hhcmFjdGVycyh0b2tlbikge1xuICAgICAgICBsZXQgcGFyZW50O1xuICAgICAgICBsZXQgYmVmb3JlRWxlbWVudDtcbiAgICAgICAgaWYgKHRoaXMuX3Nob3VsZEZvc3RlclBhcmVudE9uSW5zZXJ0aW9uKCkpIHtcbiAgICAgICAgICAgICh7IHBhcmVudCwgYmVmb3JlRWxlbWVudCB9ID0gdGhpcy5fZmluZEZvc3RlclBhcmVudGluZ0xvY2F0aW9uKCkpO1xuICAgICAgICAgICAgaWYgKGJlZm9yZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmluc2VydFRleHRCZWZvcmUocGFyZW50LCB0b2tlbi5jaGFycywgYmVmb3JlRWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmluc2VydFRleHQocGFyZW50LCB0b2tlbi5jaGFycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwYXJlbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50VG1wbENvbnRlbnRPck5vZGU7XG4gICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmluc2VydFRleHQocGFyZW50LCB0b2tlbi5jaGFycyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0b2tlbi5sb2NhdGlvbilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3Qgc2libGluZ3MgPSB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXMocGFyZW50KTtcbiAgICAgICAgY29uc3QgdGV4dE5vZGVJZHggPSBiZWZvcmVFbGVtZW50ID8gc2libGluZ3MubGFzdEluZGV4T2YoYmVmb3JlRWxlbWVudCkgOiBzaWJsaW5ncy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHRleHROb2RlID0gc2libGluZ3NbdGV4dE5vZGVJZHggLSAxXTtcbiAgICAgICAgLy9OT1RFOiBpZiB3ZSBoYXZlIGEgbG9jYXRpb24gYXNzaWduZWQgYnkgYW5vdGhlciB0b2tlbiwgdGhlbiBqdXN0IHVwZGF0ZSB0aGUgZW5kIHBvc2l0aW9uXG4gICAgICAgIGNvbnN0IHRuTG9jID0gdGhpcy50cmVlQWRhcHRlci5nZXROb2RlU291cmNlQ29kZUxvY2F0aW9uKHRleHROb2RlKTtcbiAgICAgICAgaWYgKHRuTG9jKSB7XG4gICAgICAgICAgICBjb25zdCB7IGVuZExpbmUsIGVuZENvbCwgZW5kT2Zmc2V0IH0gPSB0b2tlbi5sb2NhdGlvbjtcbiAgICAgICAgICAgIHRoaXMudHJlZUFkYXB0ZXIudXBkYXRlTm9kZVNvdXJjZUNvZGVMb2NhdGlvbih0ZXh0Tm9kZSwgeyBlbmRMaW5lLCBlbmRDb2wsIGVuZE9mZnNldCB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMuc291cmNlQ29kZUxvY2F0aW9uSW5mbykge1xuICAgICAgICAgICAgdGhpcy50cmVlQWRhcHRlci5zZXROb2RlU291cmNlQ29kZUxvY2F0aW9uKHRleHROb2RlLCB0b2tlbi5sb2NhdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2Fkb3B0Tm9kZXMoZG9ub3IsIHJlY2lwaWVudCkge1xuICAgICAgICBmb3IgKGxldCBjaGlsZCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0Rmlyc3RDaGlsZChkb25vcik7IGNoaWxkOyBjaGlsZCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0Rmlyc3RDaGlsZChkb25vcikpIHtcbiAgICAgICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuZGV0YWNoTm9kZShjaGlsZCk7XG4gICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKHJlY2lwaWVudCwgY2hpbGQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9zZXRFbmRMb2NhdGlvbihlbGVtZW50LCBjbG9zaW5nVG9rZW4pIHtcbiAgICAgICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuZ2V0Tm9kZVNvdXJjZUNvZGVMb2NhdGlvbihlbGVtZW50KSAmJiBjbG9zaW5nVG9rZW4ubG9jYXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGN0TG9jID0gY2xvc2luZ1Rva2VuLmxvY2F0aW9uO1xuICAgICAgICAgICAgY29uc3QgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBlbmRMb2MgPSBcbiAgICAgICAgICAgIC8vIE5PVEU6IEZvciBjYXNlcyBsaWtlIDxwPiA8cD4gPC9wPiAtIEZpcnN0ICdwJyBjbG9zZXMgd2l0aG91dCBhIGNsb3NpbmdcbiAgICAgICAgICAgIC8vIHRhZyBhbmQgZm9yIGNhc2VzIGxpa2UgPHRkPiA8cD4gPC90ZD4gLSAncCcgY2xvc2VzIHdpdGhvdXQgYSBjbG9zaW5nIHRhZy5cbiAgICAgICAgICAgIGNsb3NpbmdUb2tlbi50eXBlID09PSB0b2tlbl9qc18xLlRva2VuVHlwZS5FTkRfVEFHICYmIHRuID09PSBjbG9zaW5nVG9rZW4udGFnTmFtZVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBlbmRUYWc6IE9iamVjdC5hc3NpZ24oe30sIGN0TG9jKSxcbiAgICAgICAgICAgICAgICAgICAgZW5kTGluZTogY3RMb2MuZW5kTGluZSxcbiAgICAgICAgICAgICAgICAgICAgZW5kQ29sOiBjdExvYy5lbmRDb2wsXG4gICAgICAgICAgICAgICAgICAgIGVuZE9mZnNldDogY3RMb2MuZW5kT2Zmc2V0LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgICAgZW5kTGluZTogY3RMb2Muc3RhcnRMaW5lLFxuICAgICAgICAgICAgICAgICAgICBlbmRDb2w6IGN0TG9jLnN0YXJ0Q29sLFxuICAgICAgICAgICAgICAgICAgICBlbmRPZmZzZXQ6IGN0TG9jLnN0YXJ0T2Zmc2V0LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLnVwZGF0ZU5vZGVTb3VyY2VDb2RlTG9jYXRpb24oZWxlbWVudCwgZW5kTG9jKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvL1Rva2VuIHByb2Nlc3NpbmdcbiAgICBzaG91bGRQcm9jZXNzU3RhcnRUYWdUb2tlbkluRm9yZWlnbkNvbnRlbnQodG9rZW4pIHtcbiAgICAgICAgLy8gQ2hlY2sgdGhhdCBuZWl0aGVyIGN1cnJlbnQgPT09IGRvY3VtZW50LCBvciBucyA9PT0gTlMuSFRNTFxuICAgICAgICBpZiAoIXRoaXMuY3VycmVudE5vdEluSFRNTClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgbGV0IGN1cnJlbnQ7XG4gICAgICAgIGxldCBjdXJyZW50VGFnSWQ7XG4gICAgICAgIGlmICh0aGlzLm9wZW5FbGVtZW50cy5zdGFja1RvcCA9PT0gMCAmJiB0aGlzLmZyYWdtZW50Q29udGV4dCkge1xuICAgICAgICAgICAgY3VycmVudCA9IHRoaXMuZnJhZ21lbnRDb250ZXh0O1xuICAgICAgICAgICAgY3VycmVudFRhZ0lkID0gdGhpcy5mcmFnbWVudENvbnRleHRJRDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICh7IGN1cnJlbnQsIGN1cnJlbnRUYWdJZCB9ID0gdGhpcy5vcGVuRWxlbWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbi50YWdJRCA9PT0gaHRtbF9qc18xLlRBR19JRC5TVkcgJiZcbiAgICAgICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShjdXJyZW50KSA9PT0gaHRtbF9qc18xLlRBR19OQU1FUy5BTk5PVEFUSU9OX1hNTCAmJlxuICAgICAgICAgICAgdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkoY3VycmVudCkgPT09IGh0bWxfanNfMS5OUy5NQVRITUwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAvLyBDaGVjayB0aGF0IGBjdXJyZW50YCBpcyBub3QgYW4gaW50ZWdyYXRpb24gcG9pbnQgZm9yIEhUTUwgb3IgTWF0aE1MIGVsZW1lbnRzLlxuICAgICAgICB0aGlzLnRva2VuaXplci5pbkZvcmVpZ25Ob2RlIHx8XG4gICAgICAgICAgICAvLyBJZiBpdCBfaXNfIGFuIGludGVncmF0aW9uIHBvaW50LCB0aGVuIHdlIG1pZ2h0IGhhdmUgdG8gY2hlY2sgdGhhdCBpdCBpcyBub3QgYW4gSFRNTFxuICAgICAgICAgICAgLy8gaW50ZWdyYXRpb24gcG9pbnQuXG4gICAgICAgICAgICAoKHRva2VuLnRhZ0lEID09PSBodG1sX2pzXzEuVEFHX0lELk1HTFlQSCB8fCB0b2tlbi50YWdJRCA9PT0gaHRtbF9qc18xLlRBR19JRC5NQUxJR05NQVJLKSAmJlxuICAgICAgICAgICAgICAgICF0aGlzLl9pc0ludGVncmF0aW9uUG9pbnQoY3VycmVudFRhZ0lkLCBjdXJyZW50LCBodG1sX2pzXzEuTlMuSFRNTCkpKTtcbiAgICB9XG4gICAgX3Byb2Nlc3NUb2tlbih0b2tlbikge1xuICAgICAgICBzd2l0Y2ggKHRva2VuLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgdG9rZW5fanNfMS5Ub2tlblR5cGUuQ0hBUkFDVEVSOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYXJhY3Rlcih0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHRva2VuX2pzXzEuVG9rZW5UeXBlLk5VTExfQ0hBUkFDVEVSOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbk51bGxDaGFyYWN0ZXIodG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB0b2tlbl9qc18xLlRva2VuVHlwZS5DT01NRU5UOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNvbW1lbnQodG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB0b2tlbl9qc18xLlRva2VuVHlwZS5ET0NUWVBFOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRvY3R5cGUodG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB0b2tlbl9qc18xLlRva2VuVHlwZS5TVEFSVF9UQUc6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9jZXNzU3RhcnRUYWcodG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB0b2tlbl9qc18xLlRva2VuVHlwZS5FTkRfVEFHOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkVuZFRhZyh0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHRva2VuX2pzXzEuVG9rZW5UeXBlLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMub25Fb2YodG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB0b2tlbl9qc18xLlRva2VuVHlwZS5XSElURVNQQUNFX0NIQVJBQ1RFUjoge1xuICAgICAgICAgICAgICAgIHRoaXMub25XaGl0ZXNwYWNlQ2hhcmFjdGVyKHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvL0ludGVncmF0aW9uIHBvaW50c1xuICAgIF9pc0ludGVncmF0aW9uUG9pbnQodGlkLCBlbGVtZW50LCBmb3JlaWduTlMpIHtcbiAgICAgICAgY29uc3QgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShlbGVtZW50KTtcbiAgICAgICAgY29uc3QgYXR0cnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldEF0dHJMaXN0KGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gZm9yZWlnbkNvbnRlbnQuaXNJbnRlZ3JhdGlvblBvaW50KHRpZCwgbnMsIGF0dHJzLCBmb3JlaWduTlMpO1xuICAgIH1cbiAgICAvL0FjdGl2ZSBmb3JtYXR0aW5nIGVsZW1lbnRzIHJlY29uc3RydWN0aW9uXG4gICAgX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCkge1xuICAgICAgICBjb25zdCBsaXN0TGVuZ3RoID0gdGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuZW50cmllcy5sZW5ndGg7XG4gICAgICAgIGlmIChsaXN0TGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBlbmRJbmRleCA9IHRoaXMuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmVudHJpZXMuZmluZEluZGV4KChlbnRyeSkgPT4gZW50cnkudHlwZSA9PT0gZm9ybWF0dGluZ19lbGVtZW50X2xpc3RfanNfMS5FbnRyeVR5cGUuTWFya2VyIHx8IHRoaXMub3BlbkVsZW1lbnRzLmNvbnRhaW5zKGVudHJ5LmVsZW1lbnQpKTtcbiAgICAgICAgICAgIGNvbnN0IHVub3BlbklkeCA9IGVuZEluZGV4IDwgMCA/IGxpc3RMZW5ndGggLSAxIDogZW5kSW5kZXggLSAxO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHVub3BlbklkeDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmVudHJpZXNbaV07XG4gICAgICAgICAgICAgICAgdGhpcy5faW5zZXJ0RWxlbWVudChlbnRyeS50b2tlbiwgdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkoZW50cnkuZWxlbWVudCkpO1xuICAgICAgICAgICAgICAgIGVudHJ5LmVsZW1lbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vQ2xvc2UgZWxlbWVudHNcbiAgICBfY2xvc2VUYWJsZUNlbGwoKSB7XG4gICAgICAgIHRoaXMub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcbiAgICAgICAgdGhpcy5vcGVuRWxlbWVudHMucG9wVW50aWxUYWJsZUNlbGxQb3BwZWQoKTtcbiAgICAgICAgdGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuY2xlYXJUb0xhc3RNYXJrZXIoKTtcbiAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9ST1c7XG4gICAgfVxuICAgIF9jbG9zZVBFbGVtZW50KCkge1xuICAgICAgICB0aGlzLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbihodG1sX2pzXzEuVEFHX0lELlApO1xuICAgICAgICB0aGlzLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoaHRtbF9qc18xLlRBR19JRC5QKTtcbiAgICB9XG4gICAgLy9JbnNlcnRpb24gbW9kZXNcbiAgICBfcmVzZXRJbnNlcnRpb25Nb2RlKCkge1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5vcGVuRWxlbWVudHMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAvL0luc2VydGlvbiBtb2RlIHJlc2V0IG1hcFxuICAgICAgICAgICAgc3dpdGNoIChpID09PSAwICYmIHRoaXMuZnJhZ21lbnRDb250ZXh0ID8gdGhpcy5mcmFnbWVudENvbnRleHRJRCA6IHRoaXMub3BlbkVsZW1lbnRzLnRhZ0lEc1tpXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5UUjoge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX1JPVztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuVEJPRFk6XG4gICAgICAgICAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlRIRUFEOlxuICAgICAgICAgICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5URk9PVDoge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFX0JPRFk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkNBUFRJT046IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9DQVBUSU9OO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5DT0xHUk9VUDoge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX0NPTFVNTl9HUk9VUDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuVEFCTEU6IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuQk9EWToge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX0JPRFk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkZSQU1FU0VUOiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fRlJBTUVTRVQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlNFTEVDVDoge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXNldEluc2VydGlvbk1vZGVGb3JTZWxlY3QoaSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlRFTVBMQVRFOiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFja1swXTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuSFRNTDoge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSB0aGlzLmhlYWRFbGVtZW50ID8gSW5zZXJ0aW9uTW9kZS5BRlRFUl9IRUFEIDogSW5zZXJ0aW9uTW9kZS5CRUZPUkVfSEVBRDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuVEQ6XG4gICAgICAgICAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlRIOiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9DRUxMO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuSEVBRDoge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fSEVBRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9CT0RZO1xuICAgIH1cbiAgICBfcmVzZXRJbnNlcnRpb25Nb2RlRm9yU2VsZWN0KHNlbGVjdElkeCkge1xuICAgICAgICBpZiAoc2VsZWN0SWR4ID4gMCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHNlbGVjdElkeCAtIDE7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0biA9IHRoaXMub3BlbkVsZW1lbnRzLnRhZ0lEc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAodG4gPT09IGh0bWxfanNfMS5UQUdfSUQuVEVNUExBVEUpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSBodG1sX2pzXzEuVEFHX0lELlRBQkxFKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fU0VMRUNUX0lOX1RBQkxFO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fU0VMRUNUO1xuICAgIH1cbiAgICAvL0Zvc3RlciBwYXJlbnRpbmdcbiAgICBfaXNFbGVtZW50Q2F1c2VzRm9zdGVyUGFyZW50aW5nKHRuKSB7XG4gICAgICAgIHJldHVybiBUQUJMRV9TVFJVQ1RVUkVfVEFHUy5oYXModG4pO1xuICAgIH1cbiAgICBfc2hvdWxkRm9zdGVyUGFyZW50T25JbnNlcnRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvc3RlclBhcmVudGluZ0VuYWJsZWQgJiYgdGhpcy5faXNFbGVtZW50Q2F1c2VzRm9zdGVyUGFyZW50aW5nKHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdJZCk7XG4gICAgfVxuICAgIF9maW5kRm9zdGVyUGFyZW50aW5nTG9jYXRpb24oKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLm9wZW5FbGVtZW50cy5zdGFja1RvcDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IG9wZW5FbGVtZW50ID0gdGhpcy5vcGVuRWxlbWVudHMuaXRlbXNbaV07XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMub3BlbkVsZW1lbnRzLnRhZ0lEc1tpXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5URU1QTEFURToge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkob3BlbkVsZW1lbnQpID09PSBodG1sX2pzXzEuTlMuSFRNTCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgcGFyZW50OiB0aGlzLnRyZWVBZGFwdGVyLmdldFRlbXBsYXRlQ29udGVudChvcGVuRWxlbWVudCksIGJlZm9yZUVsZW1lbnQ6IG51bGwgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlRBQkxFOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0UGFyZW50Tm9kZShvcGVuRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHBhcmVudCwgYmVmb3JlRWxlbWVudDogb3BlbkVsZW1lbnQgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBwYXJlbnQ6IHRoaXMub3BlbkVsZW1lbnRzLml0ZW1zW2kgLSAxXSwgYmVmb3JlRWxlbWVudDogbnVsbCB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIC8vIERvIG5vdGhpbmdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBwYXJlbnQ6IHRoaXMub3BlbkVsZW1lbnRzLml0ZW1zWzBdLCBiZWZvcmVFbGVtZW50OiBudWxsIH07XG4gICAgfVxuICAgIF9mb3N0ZXJQYXJlbnRFbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgbG9jYXRpb24gPSB0aGlzLl9maW5kRm9zdGVyUGFyZW50aW5nTG9jYXRpb24oKTtcbiAgICAgICAgaWYgKGxvY2F0aW9uLmJlZm9yZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuaW5zZXJ0QmVmb3JlKGxvY2F0aW9uLnBhcmVudCwgZWxlbWVudCwgbG9jYXRpb24uYmVmb3JlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKGxvY2F0aW9uLnBhcmVudCwgZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy9TcGVjaWFsIGVsZW1lbnRzXG4gICAgX2lzU3BlY2lhbEVsZW1lbnQoZWxlbWVudCwgaWQpIHtcbiAgICAgICAgY29uc3QgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGh0bWxfanNfMS5TUEVDSUFMX0VMRU1FTlRTW25zXS5oYXMoaWQpO1xuICAgIH1cbiAgICBvbkNoYXJhY3Rlcih0b2tlbikge1xuICAgICAgICB0aGlzLnNraXBOZXh0TmV3TGluZSA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy50b2tlbml6ZXIuaW5Gb3JlaWduTm9kZSkge1xuICAgICAgICAgICAgY2hhcmFjdGVySW5Gb3JlaWduQ29udGVudCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0aGlzLmluc2VydGlvbk1vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTklUSUFMOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5JbkluaXRpYWxNb2RlKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5CRUZPUkVfSFRNTDoge1xuICAgICAgICAgICAgICAgIHRva2VuQmVmb3JlSHRtbCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQkVGT1JFX0hFQUQ6IHtcbiAgICAgICAgICAgICAgICB0b2tlbkJlZm9yZUhlYWQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0hFQUQ6IHtcbiAgICAgICAgICAgICAgICB0b2tlbkluSGVhZCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fSEVBRF9OT19TQ1JJUFQ6IHtcbiAgICAgICAgICAgICAgICB0b2tlbkluSGVhZE5vU2NyaXB0KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9IRUFEOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5BZnRlckhlYWQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0JPRFk6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fQ0FQVElPTjpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9DRUxMOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1RFTVBMQVRFOiB7XG4gICAgICAgICAgICAgICAgY2hhcmFjdGVySW5Cb2R5KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5URVhUOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1NFTEVDVDpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9TRUxFQ1RfSU5fVEFCTEU6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnNlcnRDaGFyYWN0ZXJzKHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRTpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRV9CT0RZOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1JPVzoge1xuICAgICAgICAgICAgICAgIGNoYXJhY3RlckluVGFibGUodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFX1RFWFQ6IHtcbiAgICAgICAgICAgICAgICBjaGFyYWN0ZXJJblRhYmxlVGV4dCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fQ09MVU1OX0dST1VQOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5JbkNvbHVtbkdyb3VwKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9CT0RZOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5BZnRlckJvZHkodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkFGVEVSX0FGVEVSX0JPRFk6IHtcbiAgICAgICAgICAgICAgICB0b2tlbkFmdGVyQWZ0ZXJCb2R5KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvLyBEbyBub3RoaW5nXG4gICAgICAgIH1cbiAgICB9XG4gICAgb25OdWxsQ2hhcmFjdGVyKHRva2VuKSB7XG4gICAgICAgIHRoaXMuc2tpcE5leHROZXdMaW5lID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLnRva2VuaXplci5pbkZvcmVpZ25Ob2RlKSB7XG4gICAgICAgICAgICBudWxsQ2hhcmFjdGVySW5Gb3JlaWduQ29udGVudCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0aGlzLmluc2VydGlvbk1vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTklUSUFMOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5JbkluaXRpYWxNb2RlKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5CRUZPUkVfSFRNTDoge1xuICAgICAgICAgICAgICAgIHRva2VuQmVmb3JlSHRtbCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQkVGT1JFX0hFQUQ6IHtcbiAgICAgICAgICAgICAgICB0b2tlbkJlZm9yZUhlYWQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0hFQUQ6IHtcbiAgICAgICAgICAgICAgICB0b2tlbkluSGVhZCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fSEVBRF9OT19TQ1JJUFQ6IHtcbiAgICAgICAgICAgICAgICB0b2tlbkluSGVhZE5vU2NyaXB0KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9IRUFEOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5BZnRlckhlYWQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLlRFWFQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnNlcnRDaGFyYWN0ZXJzKHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRTpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRV9CT0RZOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1JPVzoge1xuICAgICAgICAgICAgICAgIGNoYXJhY3RlckluVGFibGUodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0NPTFVNTl9HUk9VUDoge1xuICAgICAgICAgICAgICAgIHRva2VuSW5Db2x1bW5Hcm91cCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQUZURVJfQk9EWToge1xuICAgICAgICAgICAgICAgIHRva2VuQWZ0ZXJCb2R5KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9BRlRFUl9CT0RZOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5BZnRlckFmdGVyQm9keSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgLy8gRG8gbm90aGluZ1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uQ29tbWVudCh0b2tlbikge1xuICAgICAgICB0aGlzLnNraXBOZXh0TmV3TGluZSA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50Tm90SW5IVE1MKSB7XG4gICAgICAgICAgICBhcHBlbmRDb21tZW50KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHRoaXMuaW5zZXJ0aW9uTW9kZSkge1xuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOSVRJQUw6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQkVGT1JFX0hUTUw6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQkVGT1JFX0hFQUQ6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fSEVBRDpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9IRUFEX05PX1NDUklQVDpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9IRUFEOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0JPRFk6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fVEFCTEU6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fQ0FQVElPTjpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9DT0xVTU5fR1JPVVA6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fVEFCTEVfQk9EWTpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9ST1c6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fQ0VMTDpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9TRUxFQ1Q6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fU0VMRUNUX0lOX1RBQkxFOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1RFTVBMQVRFOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0ZSQU1FU0VUOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkFGVEVSX0ZSQU1FU0VUOiB7XG4gICAgICAgICAgICAgICAgYXBwZW5kQ29tbWVudCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fVEFCTEVfVEVYVDoge1xuICAgICAgICAgICAgICAgIHRva2VuSW5UYWJsZVRleHQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkFGVEVSX0JPRFk6IHtcbiAgICAgICAgICAgICAgICBhcHBlbmRDb21tZW50VG9Sb290SHRtbEVsZW1lbnQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkFGVEVSX0FGVEVSX0JPRFk6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQUZURVJfQUZURVJfRlJBTUVTRVQ6IHtcbiAgICAgICAgICAgICAgICBhcHBlbmRDb21tZW50VG9Eb2N1bWVudCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgLy8gRG8gbm90aGluZ1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uRG9jdHlwZSh0b2tlbikge1xuICAgICAgICB0aGlzLnNraXBOZXh0TmV3TGluZSA9IGZhbHNlO1xuICAgICAgICBzd2l0Y2ggKHRoaXMuaW5zZXJ0aW9uTW9kZSkge1xuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOSVRJQUw6IHtcbiAgICAgICAgICAgICAgICBkb2N0eXBlSW5Jbml0aWFsTW9kZSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQkVGT1JFX0hFQUQ6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fSEVBRDpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9IRUFEX05PX1NDUklQVDpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9IRUFEOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKHRva2VuLCBlcnJvcl9jb2Rlc19qc18xLkVSUi5taXNwbGFjZWREb2N0eXBlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRV9URVhUOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5JblRhYmxlVGV4dCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgLy8gRG8gbm90aGluZ1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uU3RhcnRUYWcodG9rZW4pIHtcbiAgICAgICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4gPSB0b2tlbjtcbiAgICAgICAgdGhpcy5fcHJvY2Vzc1N0YXJ0VGFnKHRva2VuKTtcbiAgICAgICAgaWYgKHRva2VuLnNlbGZDbG9zaW5nICYmICF0b2tlbi5hY2tTZWxmQ2xvc2luZykge1xuICAgICAgICAgICAgdGhpcy5fZXJyKHRva2VuLCBlcnJvcl9jb2Rlc19qc18xLkVSUi5ub25Wb2lkSHRtbEVsZW1lbnRTdGFydFRhZ1dpdGhUcmFpbGluZ1NvbGlkdXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByb2Nlc3NlcyBhIGdpdmVuIHN0YXJ0IHRhZy5cbiAgICAgKlxuICAgICAqIGBvblN0YXJ0VGFnYCBjaGVja3MgaWYgYSBzZWxmLWNsb3NpbmcgdGFnIHdhcyByZWNvZ25pemVkLiBXaGVuIGEgdG9rZW5cbiAgICAgKiBpcyBtb3ZlZCBpbmJldHdlZW4gbXVsdGlwbGUgaW5zZXJ0aW9uIG1vZGVzLCB0aGlzIGNoZWNrIGZvciBzZWxmLWNsb3NpbmdcbiAgICAgKiBjb3VsZCBsZWFkIHRvIGZhbHNlIHBvc2l0aXZlcy4gVG8gYXZvaWQgdGhpcywgYF9wcm9jZXNzU3RhcnRUYWdgIGlzIHVzZWRcbiAgICAgKiBmb3IgbmVzdGVkIGNhbGxzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRva2VuIFRoZSB0b2tlbiB0byBwcm9jZXNzLlxuICAgICAqL1xuICAgIF9wcm9jZXNzU3RhcnRUYWcodG9rZW4pIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkUHJvY2Vzc1N0YXJ0VGFnVG9rZW5JbkZvcmVpZ25Db250ZW50KHRva2VuKSkge1xuICAgICAgICAgICAgc3RhcnRUYWdJbkZvcmVpZ25Db250ZW50KHRoaXMsIHRva2VuKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0VGFnT3V0c2lkZUZvcmVpZ25Db250ZW50KHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfc3RhcnRUYWdPdXRzaWRlRm9yZWlnbkNvbnRlbnQodG9rZW4pIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmluc2VydGlvbk1vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTklUSUFMOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5JbkluaXRpYWxNb2RlKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5CRUZPUkVfSFRNTDoge1xuICAgICAgICAgICAgICAgIHN0YXJ0VGFnQmVmb3JlSHRtbCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQkVGT1JFX0hFQUQ6IHtcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0JlZm9yZUhlYWQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0hFQUQ6IHtcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luSGVhZCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fSEVBRF9OT19TQ1JJUFQ6IHtcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luSGVhZE5vU2NyaXB0KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9IRUFEOiB7XG4gICAgICAgICAgICAgICAgc3RhcnRUYWdBZnRlckhlYWQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0JPRFk6IHtcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luQm9keSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fVEFCTEU6IHtcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luVGFibGUodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFX1RFWFQ6IHtcbiAgICAgICAgICAgICAgICB0b2tlbkluVGFibGVUZXh0KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9DQVBUSU9OOiB7XG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkNhcHRpb24odGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0NPTFVNTl9HUk9VUDoge1xuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5Db2x1bW5Hcm91cCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fVEFCTEVfQk9EWToge1xuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5UYWJsZUJvZHkodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1JPVzoge1xuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5Sb3codGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0NFTEw6IHtcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luQ2VsbCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fU0VMRUNUOiB7XG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJblNlbGVjdCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fU0VMRUNUX0lOX1RBQkxFOiB7XG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJblNlbGVjdEluVGFibGUodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1RFTVBMQVRFOiB7XG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJblRlbXBsYXRlKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9CT0RZOiB7XG4gICAgICAgICAgICAgICAgc3RhcnRUYWdBZnRlckJvZHkodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0ZSQU1FU0VUOiB7XG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkZyYW1lc2V0KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9GUkFNRVNFVDoge1xuICAgICAgICAgICAgICAgIHN0YXJ0VGFnQWZ0ZXJGcmFtZXNldCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQUZURVJfQUZURVJfQk9EWToge1xuICAgICAgICAgICAgICAgIHN0YXJ0VGFnQWZ0ZXJBZnRlckJvZHkodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkFGVEVSX0FGVEVSX0ZSQU1FU0VUOiB7XG4gICAgICAgICAgICAgICAgc3RhcnRUYWdBZnRlckFmdGVyRnJhbWVzZXQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIERvIG5vdGhpbmdcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkVuZFRhZyh0b2tlbikge1xuICAgICAgICB0aGlzLnNraXBOZXh0TmV3TGluZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IHRva2VuO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50Tm90SW5IVE1MKSB7XG4gICAgICAgICAgICBlbmRUYWdJbkZvcmVpZ25Db250ZW50KHRoaXMsIHRva2VuKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2VuZFRhZ091dHNpZGVGb3JlaWduQ29udGVudCh0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2VuZFRhZ091dHNpZGVGb3JlaWduQ29udGVudCh0b2tlbikge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuaW5zZXJ0aW9uTW9kZSkge1xuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOSVRJQUw6IHtcbiAgICAgICAgICAgICAgICB0b2tlbkluSW5pdGlhbE1vZGUodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkJFRk9SRV9IVE1MOiB7XG4gICAgICAgICAgICAgICAgZW5kVGFnQmVmb3JlSHRtbCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQkVGT1JFX0hFQUQ6IHtcbiAgICAgICAgICAgICAgICBlbmRUYWdCZWZvcmVIZWFkKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9IRUFEOiB7XG4gICAgICAgICAgICAgICAgZW5kVGFnSW5IZWFkKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9IRUFEX05PX1NDUklQVDoge1xuICAgICAgICAgICAgICAgIGVuZFRhZ0luSGVhZE5vU2NyaXB0KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9IRUFEOiB7XG4gICAgICAgICAgICAgICAgZW5kVGFnQWZ0ZXJIZWFkKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9CT0RZOiB7XG4gICAgICAgICAgICAgICAgZW5kVGFnSW5Cb2R5KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5URVhUOiB7XG4gICAgICAgICAgICAgICAgZW5kVGFnSW5UZXh0KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRToge1xuICAgICAgICAgICAgICAgIGVuZFRhZ0luVGFibGUodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFX1RFWFQ6IHtcbiAgICAgICAgICAgICAgICB0b2tlbkluVGFibGVUZXh0KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9DQVBUSU9OOiB7XG4gICAgICAgICAgICAgICAgZW5kVGFnSW5DYXB0aW9uKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9DT0xVTU5fR1JPVVA6IHtcbiAgICAgICAgICAgICAgICBlbmRUYWdJbkNvbHVtbkdyb3VwKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRV9CT0RZOiB7XG4gICAgICAgICAgICAgICAgZW5kVGFnSW5UYWJsZUJvZHkodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1JPVzoge1xuICAgICAgICAgICAgICAgIGVuZFRhZ0luUm93KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9DRUxMOiB7XG4gICAgICAgICAgICAgICAgZW5kVGFnSW5DZWxsKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9TRUxFQ1Q6IHtcbiAgICAgICAgICAgICAgICBlbmRUYWdJblNlbGVjdCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fU0VMRUNUX0lOX1RBQkxFOiB7XG4gICAgICAgICAgICAgICAgZW5kVGFnSW5TZWxlY3RJblRhYmxlKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9URU1QTEFURToge1xuICAgICAgICAgICAgICAgIGVuZFRhZ0luVGVtcGxhdGUodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkFGVEVSX0JPRFk6IHtcbiAgICAgICAgICAgICAgICBlbmRUYWdBZnRlckJvZHkodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0ZSQU1FU0VUOiB7XG4gICAgICAgICAgICAgICAgZW5kVGFnSW5GcmFtZXNldCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQUZURVJfRlJBTUVTRVQ6IHtcbiAgICAgICAgICAgICAgICBlbmRUYWdBZnRlckZyYW1lc2V0KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9BRlRFUl9CT0RZOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5BZnRlckFmdGVyQm9keSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgLy8gRG8gbm90aGluZ1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uRW9mKHRva2VuKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5pbnNlcnRpb25Nb2RlKSB7XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5JVElBTDoge1xuICAgICAgICAgICAgICAgIHRva2VuSW5Jbml0aWFsTW9kZSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQkVGT1JFX0hUTUw6IHtcbiAgICAgICAgICAgICAgICB0b2tlbkJlZm9yZUh0bWwodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkJFRk9SRV9IRUFEOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5CZWZvcmVIZWFkKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9IRUFEOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5JbkhlYWQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0hFQURfTk9fU0NSSVBUOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5JbkhlYWROb1NjcmlwdCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQUZURVJfSEVBRDoge1xuICAgICAgICAgICAgICAgIHRva2VuQWZ0ZXJIZWFkKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9CT0RZOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0NBUFRJT046XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fQ09MVU1OX0dST1VQOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFX0JPRFk6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fUk9XOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0NFTEw6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fU0VMRUNUOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1NFTEVDVF9JTl9UQUJMRToge1xuICAgICAgICAgICAgICAgIGVvZkluQm9keSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuVEVYVDoge1xuICAgICAgICAgICAgICAgIGVvZkluVGV4dCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fVEFCTEVfVEVYVDoge1xuICAgICAgICAgICAgICAgIHRva2VuSW5UYWJsZVRleHQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1RFTVBMQVRFOiB7XG4gICAgICAgICAgICAgICAgZW9mSW5UZW1wbGF0ZSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQUZURVJfQk9EWTpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9GUkFNRVNFVDpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9GUkFNRVNFVDpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9BRlRFUl9CT0RZOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkFGVEVSX0FGVEVSX0ZSQU1FU0VUOiB7XG4gICAgICAgICAgICAgICAgc3RvcFBhcnNpbmcodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIERvIG5vdGhpbmdcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbldoaXRlc3BhY2VDaGFyYWN0ZXIodG9rZW4pIHtcbiAgICAgICAgaWYgKHRoaXMuc2tpcE5leHROZXdMaW5lKSB7XG4gICAgICAgICAgICB0aGlzLnNraXBOZXh0TmV3TGluZSA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRva2VuLmNoYXJzLmNoYXJDb2RlQXQoMCkgPT09IHVuaWNvZGUuQ09ERV9QT0lOVFMuTElORV9GRUVEKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRva2VuLmNoYXJzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRva2VuLmNoYXJzID0gdG9rZW4uY2hhcnMuc3Vic3RyKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRva2VuaXplci5pbkZvcmVpZ25Ob2RlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnNlcnRDaGFyYWN0ZXJzKHRva2VuKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHRoaXMuaW5zZXJ0aW9uTW9kZSkge1xuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0hFQUQ6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fSEVBRF9OT19TQ1JJUFQ6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQUZURVJfSEVBRDpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5URVhUOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0NPTFVNTl9HUk9VUDpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9TRUxFQ1Q6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fU0VMRUNUX0lOX1RBQkxFOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0ZSQU1FU0VUOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkFGVEVSX0ZSQU1FU0VUOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5faW5zZXJ0Q2hhcmFjdGVycyh0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fQk9EWTpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9DQVBUSU9OOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0NFTEw6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fVEVNUExBVEU6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQUZURVJfQk9EWTpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9BRlRFUl9CT0RZOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkFGVEVSX0FGVEVSX0ZSQU1FU0VUOiB7XG4gICAgICAgICAgICAgICAgd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fVEFCTEU6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fVEFCTEVfQk9EWTpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9ST1c6IHtcbiAgICAgICAgICAgICAgICBjaGFyYWN0ZXJJblRhYmxlKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRV9URVhUOiB7XG4gICAgICAgICAgICAgICAgd2hpdGVzcGFjZUNoYXJhY3RlckluVGFibGVUZXh0KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvLyBEbyBub3RoaW5nXG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLlBhcnNlciA9IFBhcnNlcjtcbi8vQWRvcHRpb24gYWdlbmN5IGFsZ29yaXRobVxuLy8oc2VlOiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90cmVlLWNvbnN0cnVjdGlvbi5odG1sI2Fkb3B0aW9uQWdlbmN5KVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vU3RlcHMgNS04IG9mIHRoZSBhbGdvcml0aG1cbmZ1bmN0aW9uIGFhT2J0YWluRm9ybWF0dGluZ0VsZW1lbnRFbnRyeShwLCB0b2tlbikge1xuICAgIGxldCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5ID0gcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuZ2V0RWxlbWVudEVudHJ5SW5TY29wZVdpdGhUYWdOYW1lKHRva2VuLnRhZ05hbWUpO1xuICAgIGlmIChmb3JtYXR0aW5nRWxlbWVudEVudHJ5KSB7XG4gICAgICAgIGlmICghcC5vcGVuRWxlbWVudHMuY29udGFpbnMoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS5lbGVtZW50KSkge1xuICAgICAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucmVtb3ZlRW50cnkoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSk7XG4gICAgICAgICAgICBmb3JtYXR0aW5nRWxlbWVudEVudHJ5ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghcC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSh0b2tlbi50YWdJRCkpIHtcbiAgICAgICAgICAgIGZvcm1hdHRpbmdFbGVtZW50RW50cnkgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcm1hdHRpbmdFbGVtZW50RW50cnk7XG59XG4vL1N0ZXBzIDkgYW5kIDEwIG9mIHRoZSBhbGdvcml0aG1cbmZ1bmN0aW9uIGFhT2J0YWluRnVydGhlc3RCbG9jayhwLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5KSB7XG4gICAgbGV0IGZ1cnRoZXN0QmxvY2sgPSBudWxsO1xuICAgIGxldCBpZHggPSBwLm9wZW5FbGVtZW50cy5zdGFja1RvcDtcbiAgICBmb3IgKDsgaWR4ID49IDA7IGlkeC0tKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5pdGVtc1tpZHhdO1xuICAgICAgICBpZiAoZWxlbWVudCA9PT0gZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS5lbGVtZW50KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAocC5faXNTcGVjaWFsRWxlbWVudChlbGVtZW50LCBwLm9wZW5FbGVtZW50cy50YWdJRHNbaWR4XSkpIHtcbiAgICAgICAgICAgIGZ1cnRoZXN0QmxvY2sgPSBlbGVtZW50O1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICghZnVydGhlc3RCbG9jaykge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5zaG9ydGVuVG9MZW5ndGgoaWR4IDwgMCA/IDAgOiBpZHgpO1xuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5yZW1vdmVFbnRyeShmb3JtYXR0aW5nRWxlbWVudEVudHJ5KTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1cnRoZXN0QmxvY2s7XG59XG4vL1N0ZXAgMTMgb2YgdGhlIGFsZ29yaXRobVxuZnVuY3Rpb24gYWFJbm5lckxvb3AocCwgZnVydGhlc3RCbG9jaywgZm9ybWF0dGluZ0VsZW1lbnQpIHtcbiAgICBsZXQgbGFzdEVsZW1lbnQgPSBmdXJ0aGVzdEJsb2NrO1xuICAgIGxldCBuZXh0RWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLmdldENvbW1vbkFuY2VzdG9yKGZ1cnRoZXN0QmxvY2spO1xuICAgIGZvciAobGV0IGkgPSAwLCBlbGVtZW50ID0gbmV4dEVsZW1lbnQ7IGVsZW1lbnQgIT09IGZvcm1hdHRpbmdFbGVtZW50OyBpKyssIGVsZW1lbnQgPSBuZXh0RWxlbWVudCkge1xuICAgICAgICAvL05PVEU6IHN0b3JlIHRoZSBuZXh0IGVsZW1lbnQgZm9yIHRoZSBuZXh0IGxvb3AgaXRlcmF0aW9uIChpdCBtYXkgYmUgZGVsZXRlZCBmcm9tIHRoZSBzdGFjayBieSBzdGVwIDkuNSlcbiAgICAgICAgbmV4dEVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5nZXRDb21tb25BbmNlc3RvcihlbGVtZW50KTtcbiAgICAgICAgY29uc3QgZWxlbWVudEVudHJ5ID0gcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuZ2V0RWxlbWVudEVudHJ5KGVsZW1lbnQpO1xuICAgICAgICBjb25zdCBjb3VudGVyT3ZlcmZsb3cgPSBlbGVtZW50RW50cnkgJiYgaSA+PSBBQV9JTk5FUl9MT09QX0lURVI7XG4gICAgICAgIGNvbnN0IHNob3VsZFJlbW92ZUZyb21PcGVuRWxlbWVudHMgPSAhZWxlbWVudEVudHJ5IHx8IGNvdW50ZXJPdmVyZmxvdztcbiAgICAgICAgaWYgKHNob3VsZFJlbW92ZUZyb21PcGVuRWxlbWVudHMpIHtcbiAgICAgICAgICAgIGlmIChjb3VudGVyT3ZlcmZsb3cpIHtcbiAgICAgICAgICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5yZW1vdmVFbnRyeShlbGVtZW50RW50cnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucmVtb3ZlKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZWxlbWVudCA9IGFhUmVjcmVhdGVFbGVtZW50RnJvbUVudHJ5KHAsIGVsZW1lbnRFbnRyeSk7XG4gICAgICAgICAgICBpZiAobGFzdEVsZW1lbnQgPT09IGZ1cnRoZXN0QmxvY2spIHtcbiAgICAgICAgICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5ib29rbWFyayA9IGVsZW1lbnRFbnRyeTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHAudHJlZUFkYXB0ZXIuZGV0YWNoTm9kZShsYXN0RWxlbWVudCk7XG4gICAgICAgICAgICBwLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKGVsZW1lbnQsIGxhc3RFbGVtZW50KTtcbiAgICAgICAgICAgIGxhc3RFbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbGFzdEVsZW1lbnQ7XG59XG4vL1N0ZXAgMTMuNyBvZiB0aGUgYWxnb3JpdGhtXG5mdW5jdGlvbiBhYVJlY3JlYXRlRWxlbWVudEZyb21FbnRyeShwLCBlbGVtZW50RW50cnkpIHtcbiAgICBjb25zdCBucyA9IHAudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVsZW1lbnRFbnRyeS5lbGVtZW50KTtcbiAgICBjb25zdCBuZXdFbGVtZW50ID0gcC50cmVlQWRhcHRlci5jcmVhdGVFbGVtZW50KGVsZW1lbnRFbnRyeS50b2tlbi50YWdOYW1lLCBucywgZWxlbWVudEVudHJ5LnRva2VuLmF0dHJzKTtcbiAgICBwLm9wZW5FbGVtZW50cy5yZXBsYWNlKGVsZW1lbnRFbnRyeS5lbGVtZW50LCBuZXdFbGVtZW50KTtcbiAgICBlbGVtZW50RW50cnkuZWxlbWVudCA9IG5ld0VsZW1lbnQ7XG4gICAgcmV0dXJuIG5ld0VsZW1lbnQ7XG59XG4vL1N0ZXAgMTQgb2YgdGhlIGFsZ29yaXRobVxuZnVuY3Rpb24gYWFJbnNlcnRMYXN0Tm9kZUluQ29tbW9uQW5jZXN0b3IocCwgY29tbW9uQW5jZXN0b3IsIGxhc3RFbGVtZW50KSB7XG4gICAgY29uc3QgdG4gPSBwLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoY29tbW9uQW5jZXN0b3IpO1xuICAgIGNvbnN0IHRpZCA9ICgwLCBodG1sX2pzXzEuZ2V0VGFnSUQpKHRuKTtcbiAgICBpZiAocC5faXNFbGVtZW50Q2F1c2VzRm9zdGVyUGFyZW50aW5nKHRpZCkpIHtcbiAgICAgICAgcC5fZm9zdGVyUGFyZW50RWxlbWVudChsYXN0RWxlbWVudCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBucyA9IHAudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGNvbW1vbkFuY2VzdG9yKTtcbiAgICAgICAgaWYgKHRpZCA9PT0gaHRtbF9qc18xLlRBR19JRC5URU1QTEFURSAmJiBucyA9PT0gaHRtbF9qc18xLk5TLkhUTUwpIHtcbiAgICAgICAgICAgIGNvbW1vbkFuY2VzdG9yID0gcC50cmVlQWRhcHRlci5nZXRUZW1wbGF0ZUNvbnRlbnQoY29tbW9uQW5jZXN0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHAudHJlZUFkYXB0ZXIuYXBwZW5kQ2hpbGQoY29tbW9uQW5jZXN0b3IsIGxhc3RFbGVtZW50KTtcbiAgICB9XG59XG4vL1N0ZXBzIDE1LTE5IG9mIHRoZSBhbGdvcml0aG1cbmZ1bmN0aW9uIGFhUmVwbGFjZUZvcm1hdHRpbmdFbGVtZW50KHAsIGZ1cnRoZXN0QmxvY2ssIGZvcm1hdHRpbmdFbGVtZW50RW50cnkpIHtcbiAgICBjb25zdCBucyA9IHAudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGZvcm1hdHRpbmdFbGVtZW50RW50cnkuZWxlbWVudCk7XG4gICAgY29uc3QgeyB0b2tlbiB9ID0gZm9ybWF0dGluZ0VsZW1lbnRFbnRyeTtcbiAgICBjb25zdCBuZXdFbGVtZW50ID0gcC50cmVlQWRhcHRlci5jcmVhdGVFbGVtZW50KHRva2VuLnRhZ05hbWUsIG5zLCB0b2tlbi5hdHRycyk7XG4gICAgcC5fYWRvcHROb2RlcyhmdXJ0aGVzdEJsb2NrLCBuZXdFbGVtZW50KTtcbiAgICBwLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKGZ1cnRoZXN0QmxvY2ssIG5ld0VsZW1lbnQpO1xuICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmluc2VydEVsZW1lbnRBZnRlckJvb2ttYXJrKG5ld0VsZW1lbnQsIHRva2VuKTtcbiAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5yZW1vdmVFbnRyeShmb3JtYXR0aW5nRWxlbWVudEVudHJ5KTtcbiAgICBwLm9wZW5FbGVtZW50cy5yZW1vdmUoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS5lbGVtZW50KTtcbiAgICBwLm9wZW5FbGVtZW50cy5pbnNlcnRBZnRlcihmdXJ0aGVzdEJsb2NrLCBuZXdFbGVtZW50LCB0b2tlbi50YWdJRCk7XG59XG4vL0FsZ29yaXRobSBlbnRyeSBwb2ludFxuZnVuY3Rpb24gY2FsbEFkb3B0aW9uQWdlbmN5KHAsIHRva2VuKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBBQV9PVVRFUl9MT09QX0lURVI7IGkrKykge1xuICAgICAgICBjb25zdCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5ID0gYWFPYnRhaW5Gb3JtYXR0aW5nRWxlbWVudEVudHJ5KHAsIHRva2VuKTtcbiAgICAgICAgaWYgKCFmb3JtYXR0aW5nRWxlbWVudEVudHJ5KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmdXJ0aGVzdEJsb2NrID0gYWFPYnRhaW5GdXJ0aGVzdEJsb2NrKHAsIGZvcm1hdHRpbmdFbGVtZW50RW50cnkpO1xuICAgICAgICBpZiAoIWZ1cnRoZXN0QmxvY2spIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmJvb2ttYXJrID0gZm9ybWF0dGluZ0VsZW1lbnRFbnRyeTtcbiAgICAgICAgY29uc3QgbGFzdEVsZW1lbnQgPSBhYUlubmVyTG9vcChwLCBmdXJ0aGVzdEJsb2NrLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5LmVsZW1lbnQpO1xuICAgICAgICBjb25zdCBjb21tb25BbmNlc3RvciA9IHAub3BlbkVsZW1lbnRzLmdldENvbW1vbkFuY2VzdG9yKGZvcm1hdHRpbmdFbGVtZW50RW50cnkuZWxlbWVudCk7XG4gICAgICAgIHAudHJlZUFkYXB0ZXIuZGV0YWNoTm9kZShsYXN0RWxlbWVudCk7XG4gICAgICAgIGlmIChjb21tb25BbmNlc3RvcilcbiAgICAgICAgICAgIGFhSW5zZXJ0TGFzdE5vZGVJbkNvbW1vbkFuY2VzdG9yKHAsIGNvbW1vbkFuY2VzdG9yLCBsYXN0RWxlbWVudCk7XG4gICAgICAgIGFhUmVwbGFjZUZvcm1hdHRpbmdFbGVtZW50KHAsIGZ1cnRoZXN0QmxvY2ssIGZvcm1hdHRpbmdFbGVtZW50RW50cnkpO1xuICAgIH1cbn1cbi8vR2VuZXJpYyB0b2tlbiBoYW5kbGVyc1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIGFwcGVuZENvbW1lbnQocCwgdG9rZW4pIHtcbiAgICBwLl9hcHBlbmRDb21tZW50Tm9kZSh0b2tlbiwgcC5vcGVuRWxlbWVudHMuY3VycmVudFRtcGxDb250ZW50T3JOb2RlKTtcbn1cbmZ1bmN0aW9uIGFwcGVuZENvbW1lbnRUb1Jvb3RIdG1sRWxlbWVudChwLCB0b2tlbikge1xuICAgIHAuX2FwcGVuZENvbW1lbnROb2RlKHRva2VuLCBwLm9wZW5FbGVtZW50cy5pdGVtc1swXSk7XG59XG5mdW5jdGlvbiBhcHBlbmRDb21tZW50VG9Eb2N1bWVudChwLCB0b2tlbikge1xuICAgIHAuX2FwcGVuZENvbW1lbnROb2RlKHRva2VuLCBwLmRvY3VtZW50KTtcbn1cbmZ1bmN0aW9uIHN0b3BQYXJzaW5nKHAsIHRva2VuKSB7XG4gICAgcC5zdG9wcGVkID0gdHJ1ZTtcbiAgICAvLyBOT1RFOiBTZXQgZW5kIGxvY2F0aW9ucyBmb3IgZWxlbWVudHMgdGhhdCByZW1haW4gb24gdGhlIG9wZW4gZWxlbWVudCBzdGFjay5cbiAgICBpZiAodG9rZW4ubG9jYXRpb24pIHtcbiAgICAgICAgLy8gTk9URTogSWYgd2UgYXJlIG5vdCBpbiBhIGZyYWdtZW50LCBgaHRtbGAgYW5kIGBib2R5YCB3aWxsIHN0YXkgb24gdGhlIHN0YWNrLlxuICAgICAgICAvLyBUaGlzIGlzIGEgcHJvYmxlbSwgYXMgd2UgbWlnaHQgb3ZlcndyaXRlIHRoZWlyIGVuZCBwb3NpdGlvbiBoZXJlLlxuICAgICAgICBjb25zdCB0YXJnZXQgPSBwLmZyYWdtZW50Q29udGV4dCA/IDAgOiAyO1xuICAgICAgICBmb3IgKGxldCBpID0gcC5vcGVuRWxlbWVudHMuc3RhY2tUb3A7IGkgPj0gdGFyZ2V0OyBpLS0pIHtcbiAgICAgICAgICAgIHAuX3NldEVuZExvY2F0aW9uKHAub3BlbkVsZW1lbnRzLml0ZW1zW2ldLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSGFuZGxlIGBodG1sYCBhbmQgYGJvZHlgXG4gICAgICAgIGlmICghcC5mcmFnbWVudENvbnRleHQgJiYgcC5vcGVuRWxlbWVudHMuc3RhY2tUb3AgPj0gMCkge1xuICAgICAgICAgICAgY29uc3QgaHRtbEVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5pdGVtc1swXTtcbiAgICAgICAgICAgIGNvbnN0IGh0bWxMb2NhdGlvbiA9IHAudHJlZUFkYXB0ZXIuZ2V0Tm9kZVNvdXJjZUNvZGVMb2NhdGlvbihodG1sRWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoaHRtbExvY2F0aW9uICYmICFodG1sTG9jYXRpb24uZW5kVGFnKSB7XG4gICAgICAgICAgICAgICAgcC5fc2V0RW5kTG9jYXRpb24oaHRtbEVsZW1lbnQsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuc3RhY2tUb3AgPj0gMSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5RWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLml0ZW1zWzFdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5TG9jYXRpb24gPSBwLnRyZWVBZGFwdGVyLmdldE5vZGVTb3VyY2VDb2RlTG9jYXRpb24oYm9keUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYm9keUxvY2F0aW9uICYmICFib2R5TG9jYXRpb24uZW5kVGFnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwLl9zZXRFbmRMb2NhdGlvbihib2R5RWxlbWVudCwgdG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuLy8gVGhlIFwiaW5pdGlhbFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gZG9jdHlwZUluSW5pdGlhbE1vZGUocCwgdG9rZW4pIHtcbiAgICBwLl9zZXREb2N1bWVudFR5cGUodG9rZW4pO1xuICAgIGNvbnN0IG1vZGUgPSB0b2tlbi5mb3JjZVF1aXJrcyA/IGh0bWxfanNfMS5ET0NVTUVOVF9NT0RFLlFVSVJLUyA6IGRvY3R5cGUuZ2V0RG9jdW1lbnRNb2RlKHRva2VuKTtcbiAgICBpZiAoIWRvY3R5cGUuaXNDb25mb3JtaW5nKHRva2VuKSkge1xuICAgICAgICBwLl9lcnIodG9rZW4sIGVycm9yX2NvZGVzX2pzXzEuRVJSLm5vbkNvbmZvcm1pbmdEb2N0eXBlKTtcbiAgICB9XG4gICAgcC50cmVlQWRhcHRlci5zZXREb2N1bWVudE1vZGUocC5kb2N1bWVudCwgbW9kZSk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5CRUZPUkVfSFRNTDtcbn1cbmZ1bmN0aW9uIHRva2VuSW5Jbml0aWFsTW9kZShwLCB0b2tlbikge1xuICAgIHAuX2Vycih0b2tlbiwgZXJyb3JfY29kZXNfanNfMS5FUlIubWlzc2luZ0RvY3R5cGUsIHRydWUpO1xuICAgIHAudHJlZUFkYXB0ZXIuc2V0RG9jdW1lbnRNb2RlKHAuZG9jdW1lbnQsIGh0bWxfanNfMS5ET0NVTUVOVF9NT0RFLlFVSVJLUyk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5CRUZPUkVfSFRNTDtcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xufVxuLy8gVGhlIFwiYmVmb3JlIGh0bWxcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnQmVmb3JlSHRtbChwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdJRCA9PT0gaHRtbF9qc18xLlRBR19JRC5IVE1MKSB7XG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIGh0bWxfanNfMS5OUy5IVE1MKTtcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5CRUZPUkVfSEVBRDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRva2VuQmVmb3JlSHRtbChwLCB0b2tlbik7XG4gICAgfVxufVxuZnVuY3Rpb24gZW5kVGFnQmVmb3JlSHRtbChwLCB0b2tlbikge1xuICAgIGNvbnN0IHRuID0gdG9rZW4udGFnSUQ7XG4gICAgaWYgKHRuID09PSBodG1sX2pzXzEuVEFHX0lELkhUTUwgfHwgdG4gPT09IGh0bWxfanNfMS5UQUdfSUQuSEVBRCB8fCB0biA9PT0gaHRtbF9qc18xLlRBR19JRC5CT0RZIHx8IHRuID09PSBodG1sX2pzXzEuVEFHX0lELkJSKSB7XG4gICAgICAgIHRva2VuQmVmb3JlSHRtbChwLCB0b2tlbik7XG4gICAgfVxufVxuZnVuY3Rpb24gdG9rZW5CZWZvcmVIdG1sKHAsIHRva2VuKSB7XG4gICAgcC5faW5zZXJ0RmFrZVJvb3RFbGVtZW50KCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5CRUZPUkVfSEVBRDtcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xufVxuLy8gVGhlIFwiYmVmb3JlIGhlYWRcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnQmVmb3JlSGVhZChwLCB0b2tlbikge1xuICAgIHN3aXRjaCAodG9rZW4udGFnSUQpIHtcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkhUTUw6IHtcbiAgICAgICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5IRUFEOiB7XG4gICAgICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBodG1sX2pzXzEuTlMuSFRNTCk7XG4gICAgICAgICAgICBwLmhlYWRFbGVtZW50ID0gcC5vcGVuRWxlbWVudHMuY3VycmVudDtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fSEVBRDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIHRva2VuQmVmb3JlSGVhZChwLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBlbmRUYWdCZWZvcmVIZWFkKHAsIHRva2VuKSB7XG4gICAgY29uc3QgdG4gPSB0b2tlbi50YWdJRDtcbiAgICBpZiAodG4gPT09IGh0bWxfanNfMS5UQUdfSUQuSEVBRCB8fCB0biA9PT0gaHRtbF9qc18xLlRBR19JRC5CT0RZIHx8IHRuID09PSBodG1sX2pzXzEuVEFHX0lELkhUTUwgfHwgdG4gPT09IGh0bWxfanNfMS5UQUdfSUQuQlIpIHtcbiAgICAgICAgdG9rZW5CZWZvcmVIZWFkKHAsIHRva2VuKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHAuX2Vycih0b2tlbiwgZXJyb3JfY29kZXNfanNfMS5FUlIuZW5kVGFnV2l0aG91dE1hdGNoaW5nT3BlbkVsZW1lbnQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHRva2VuQmVmb3JlSGVhZChwLCB0b2tlbikge1xuICAgIHAuX2luc2VydEZha2VFbGVtZW50KGh0bWxfanNfMS5UQUdfTkFNRVMuSEVBRCwgaHRtbF9qc18xLlRBR19JRC5IRUFEKTtcbiAgICBwLmhlYWRFbGVtZW50ID0gcC5vcGVuRWxlbWVudHMuY3VycmVudDtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX0hFQUQ7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cbi8vIFRoZSBcImluIGhlYWRcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKSB7XG4gICAgc3dpdGNoICh0b2tlbi50YWdJRCkge1xuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuSFRNTDoge1xuICAgICAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkJBU0U6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5CQVNFRk9OVDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkJHU09VTkQ6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5MSU5LOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuTUVUQToge1xuICAgICAgICAgICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgaHRtbF9qc18xLk5TLkhUTUwpO1xuICAgICAgICAgICAgdG9rZW4uYWNrU2VsZkNsb3NpbmcgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlRJVExFOiB7XG4gICAgICAgICAgICBwLl9zd2l0Y2hUb1RleHRQYXJzaW5nKHRva2VuLCBpbmRleF9qc18xLlRva2VuaXplck1vZGUuUkNEQVRBKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5OT1NDUklQVDoge1xuICAgICAgICAgICAgaWYgKHAub3B0aW9ucy5zY3JpcHRpbmdFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgcC5fc3dpdGNoVG9UZXh0UGFyc2luZyh0b2tlbiwgaW5kZXhfanNfMS5Ub2tlbml6ZXJNb2RlLlJBV1RFWFQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgaHRtbF9qc18xLk5TLkhUTUwpO1xuICAgICAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fSEVBRF9OT19TQ1JJUFQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuTk9GUkFNRVM6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5TVFlMRToge1xuICAgICAgICAgICAgcC5fc3dpdGNoVG9UZXh0UGFyc2luZyh0b2tlbiwgaW5kZXhfanNfMS5Ub2tlbml6ZXJNb2RlLlJBV1RFWFQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlNDUklQVDoge1xuICAgICAgICAgICAgcC5fc3dpdGNoVG9UZXh0UGFyc2luZyh0b2tlbiwgaW5kZXhfanNfMS5Ub2tlbml6ZXJNb2RlLlNDUklQVF9EQVRBKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5URU1QTEFURToge1xuICAgICAgICAgICAgcC5faW5zZXJ0VGVtcGxhdGUodG9rZW4pO1xuICAgICAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuaW5zZXJ0TWFya2VyKCk7XG4gICAgICAgICAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fVEVNUExBVEU7XG4gICAgICAgICAgICBwLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2sudW5zaGlmdChJbnNlcnRpb25Nb2RlLklOX1RFTVBMQVRFKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5IRUFEOiB7XG4gICAgICAgICAgICBwLl9lcnIodG9rZW4sIGVycm9yX2NvZGVzX2pzXzEuRVJSLm1pc3BsYWNlZFN0YXJ0VGFnRm9ySGVhZEVsZW1lbnQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgdG9rZW5JbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gZW5kVGFnSW5IZWFkKHAsIHRva2VuKSB7XG4gICAgc3dpdGNoICh0b2tlbi50YWdJRCkge1xuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuSEVBRDoge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLkFGVEVSX0hFQUQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuQk9EWTpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkJSOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuSFRNTDoge1xuICAgICAgICAgICAgdG9rZW5JbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlRFTVBMQVRFOiB7XG4gICAgICAgICAgICB0ZW1wbGF0ZUVuZFRhZ0luSGVhZChwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBwLl9lcnIodG9rZW4sIGVycm9yX2NvZGVzX2pzXzEuRVJSLmVuZFRhZ1dpdGhvdXRNYXRjaGluZ09wZW5FbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHRlbXBsYXRlRW5kVGFnSW5IZWFkKHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA+IDApIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1Rob3JvdWdobHkoKTtcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdJZCAhPT0gaHRtbF9qc18xLlRBR19JRC5URU1QTEFURSkge1xuICAgICAgICAgICAgcC5fZXJyKHRva2VuLCBlcnJvcl9jb2Rlc19qc18xLkVSUi5jbG9zaW5nT2ZFbGVtZW50V2l0aE9wZW5DaGlsZEVsZW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoaHRtbF9qc18xLlRBR19JRC5URU1QTEFURSk7XG4gICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmNsZWFyVG9MYXN0TWFya2VyKCk7XG4gICAgICAgIHAudG1wbEluc2VydGlvbk1vZGVTdGFjay5zaGlmdCgpO1xuICAgICAgICBwLl9yZXNldEluc2VydGlvbk1vZGUoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHAuX2Vycih0b2tlbiwgZXJyb3JfY29kZXNfanNfMS5FUlIuZW5kVGFnV2l0aG91dE1hdGNoaW5nT3BlbkVsZW1lbnQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHRva2VuSW5IZWFkKHAsIHRva2VuKSB7XG4gICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5BRlRFUl9IRUFEO1xuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG4vLyBUaGUgXCJpbiBoZWFkIG5vIHNjcmlwdFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdJbkhlYWROb1NjcmlwdChwLCB0b2tlbikge1xuICAgIHN3aXRjaCAodG9rZW4udGFnSUQpIHtcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkhUTUw6IHtcbiAgICAgICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5CQVNFRk9OVDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkJHU09VTkQ6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5IRUFEOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuTElOSzpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELk1FVEE6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5OT0ZSQU1FUzpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlNUWUxFOiB7XG4gICAgICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuTk9TQ1JJUFQ6IHtcbiAgICAgICAgICAgIHAuX2Vycih0b2tlbiwgZXJyb3JfY29kZXNfanNfMS5FUlIubmVzdGVkTm9zY3JpcHRJbkhlYWQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgdG9rZW5JbkhlYWROb1NjcmlwdChwLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBlbmRUYWdJbkhlYWROb1NjcmlwdChwLCB0b2tlbikge1xuICAgIHN3aXRjaCAodG9rZW4udGFnSUQpIHtcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELk5PU0NSSVBUOiB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fSEVBRDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5CUjoge1xuICAgICAgICAgICAgdG9rZW5JbkhlYWROb1NjcmlwdChwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBwLl9lcnIodG9rZW4sIGVycm9yX2NvZGVzX2pzXzEuRVJSLmVuZFRhZ1dpdGhvdXRNYXRjaGluZ09wZW5FbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHRva2VuSW5IZWFkTm9TY3JpcHQocCwgdG9rZW4pIHtcbiAgICBjb25zdCBlcnJDb2RlID0gdG9rZW4udHlwZSA9PT0gdG9rZW5fanNfMS5Ub2tlblR5cGUuRU9GID8gZXJyb3JfY29kZXNfanNfMS5FUlIub3BlbkVsZW1lbnRzTGVmdEFmdGVyRW9mIDogZXJyb3JfY29kZXNfanNfMS5FUlIuZGlzYWxsb3dlZENvbnRlbnRJbk5vc2NyaXB0SW5IZWFkO1xuICAgIHAuX2Vycih0b2tlbiwgZXJyQ29kZSk7XG4gICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9IRUFEO1xuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG4vLyBUaGUgXCJhZnRlciBoZWFkXCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0FmdGVySGVhZChwLCB0b2tlbikge1xuICAgIHN3aXRjaCAodG9rZW4udGFnSUQpIHtcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkhUTUw6IHtcbiAgICAgICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5CT0RZOiB7XG4gICAgICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBodG1sX2pzXzEuTlMuSFRNTCk7XG4gICAgICAgICAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fQk9EWTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5GUkFNRVNFVDoge1xuICAgICAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgaHRtbF9qc18xLk5TLkhUTUwpO1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9GUkFNRVNFVDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5CQVNFOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuQkFTRUZPTlQ6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5CR1NPVU5EOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuTElOSzpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELk1FVEE6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5OT0ZSQU1FUzpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlNDUklQVDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlNUWUxFOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuVEVNUExBVEU6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5USVRMRToge1xuICAgICAgICAgICAgcC5fZXJyKHRva2VuLCBlcnJvcl9jb2Rlc19qc18xLkVSUi5hYmFuZG9uZWRIZWFkRWxlbWVudENoaWxkKTtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnB1c2gocC5oZWFkRWxlbWVudCwgaHRtbF9qc18xLlRBR19JRC5IRUFEKTtcbiAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnJlbW92ZShwLmhlYWRFbGVtZW50KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5IRUFEOiB7XG4gICAgICAgICAgICBwLl9lcnIodG9rZW4sIGVycm9yX2NvZGVzX2pzXzEuRVJSLm1pc3BsYWNlZFN0YXJ0VGFnRm9ySGVhZEVsZW1lbnQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgdG9rZW5BZnRlckhlYWQocCwgdG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gZW5kVGFnQWZ0ZXJIZWFkKHAsIHRva2VuKSB7XG4gICAgc3dpdGNoICh0b2tlbi50YWdJRCkge1xuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuQk9EWTpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkhUTUw6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5CUjoge1xuICAgICAgICAgICAgdG9rZW5BZnRlckhlYWQocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlRFTVBMQVRFOiB7XG4gICAgICAgICAgICB0ZW1wbGF0ZUVuZFRhZ0luSGVhZChwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBwLl9lcnIodG9rZW4sIGVycm9yX2NvZGVzX2pzXzEuRVJSLmVuZFRhZ1dpdGhvdXRNYXRjaGluZ09wZW5FbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHRva2VuQWZ0ZXJIZWFkKHAsIHRva2VuKSB7XG4gICAgcC5faW5zZXJ0RmFrZUVsZW1lbnQoaHRtbF9qc18xLlRBR19OQU1FUy5CT0RZLCBodG1sX2pzXzEuVEFHX0lELkJPRFkpO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fQk9EWTtcbiAgICBtb2RlSW5Cb2R5KHAsIHRva2VuKTtcbn1cbi8vIFRoZSBcImluIGJvZHlcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIG1vZGVJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBzd2l0Y2ggKHRva2VuLnR5cGUpIHtcbiAgICAgICAgY2FzZSB0b2tlbl9qc18xLlRva2VuVHlwZS5DSEFSQUNURVI6IHtcbiAgICAgICAgICAgIGNoYXJhY3RlckluQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIHRva2VuX2pzXzEuVG9rZW5UeXBlLldISVRFU1BBQ0VfQ0hBUkFDVEVSOiB7XG4gICAgICAgICAgICB3aGl0ZXNwYWNlQ2hhcmFjdGVySW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgdG9rZW5fanNfMS5Ub2tlblR5cGUuQ09NTUVOVDoge1xuICAgICAgICAgICAgYXBwZW5kQ29tbWVudChwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIHRva2VuX2pzXzEuVG9rZW5UeXBlLlNUQVJUX1RBRzoge1xuICAgICAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSB0b2tlbl9qc18xLlRva2VuVHlwZS5FTkRfVEFHOiB7XG4gICAgICAgICAgICBlbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSB0b2tlbl9qc18xLlRva2VuVHlwZS5FT0Y6IHtcbiAgICAgICAgICAgIGVvZkluQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBEbyBub3RoaW5nXG4gICAgfVxufVxuZnVuY3Rpb24gd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keShwLCB0b2tlbikge1xuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5faW5zZXJ0Q2hhcmFjdGVycyh0b2tlbik7XG59XG5mdW5jdGlvbiBjaGFyYWN0ZXJJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuX2luc2VydENoYXJhY3RlcnModG9rZW4pO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xufVxuZnVuY3Rpb24gaHRtbFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA9PT0gMCkge1xuICAgICAgICBwLnRyZWVBZGFwdGVyLmFkb3B0QXR0cmlidXRlcyhwLm9wZW5FbGVtZW50cy5pdGVtc1swXSwgdG9rZW4uYXR0cnMpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGJvZHlTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGNvbnN0IGJvZHlFbGVtZW50ID0gcC5vcGVuRWxlbWVudHMudHJ5UGVla1Byb3Blcmx5TmVzdGVkQm9keUVsZW1lbnQoKTtcbiAgICBpZiAoYm9keUVsZW1lbnQgJiYgcC5vcGVuRWxlbWVudHMudG1wbENvdW50ID09PSAwKSB7XG4gICAgICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgICAgICBwLnRyZWVBZGFwdGVyLmFkb3B0QXR0cmlidXRlcyhib2R5RWxlbWVudCwgdG9rZW4uYXR0cnMpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGZyYW1lc2V0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBjb25zdCBib2R5RWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLnRyeVBlZWtQcm9wZXJseU5lc3RlZEJvZHlFbGVtZW50KCk7XG4gICAgaWYgKHAuZnJhbWVzZXRPayAmJiBib2R5RWxlbWVudCkge1xuICAgICAgICBwLnRyZWVBZGFwdGVyLmRldGFjaE5vZGUoYm9keUVsZW1lbnQpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BBbGxVcFRvSHRtbEVsZW1lbnQoKTtcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgaHRtbF9qc18xLk5TLkhUTUwpO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX0ZSQU1FU0VUO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKGh0bWxfanNfMS5UQUdfSUQuUCkpIHtcbiAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xuICAgIH1cbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBodG1sX2pzXzEuTlMuSFRNTCk7XG59XG5mdW5jdGlvbiBudW1iZXJlZEhlYWRlclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoaHRtbF9qc18xLlRBR19JRC5QKSkge1xuICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XG4gICAgfVxuICAgIGlmICgoMCwgaHRtbF9qc18xLmlzTnVtYmVyZWRIZWFkZXIpKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdJZCkpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgfVxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIGh0bWxfanNfMS5OUy5IVE1MKTtcbn1cbmZ1bmN0aW9uIHByZVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoaHRtbF9qc18xLlRBR19JRC5QKSkge1xuICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XG4gICAgfVxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIGh0bWxfanNfMS5OUy5IVE1MKTtcbiAgICAvL05PVEU6IElmIHRoZSBuZXh0IHRva2VuIGlzIGEgVSswMDBBIExJTkUgRkVFRCAoTEYpIGNoYXJhY3RlciB0b2tlbiwgdGhlbiBpZ25vcmUgdGhhdCB0b2tlbiBhbmQgbW92ZVxuICAgIC8vb24gdG8gdGhlIG5leHQgb25lLiAoTmV3bGluZXMgYXQgdGhlIHN0YXJ0IG9mIHByZSBibG9ja3MgYXJlIGlnbm9yZWQgYXMgYW4gYXV0aG9yaW5nIGNvbnZlbmllbmNlLilcbiAgICBwLnNraXBOZXh0TmV3TGluZSA9IHRydWU7XG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG59XG5mdW5jdGlvbiBmb3JtU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBjb25zdCBpblRlbXBsYXRlID0gcC5vcGVuRWxlbWVudHMudG1wbENvdW50ID4gMDtcbiAgICBpZiAoIXAuZm9ybUVsZW1lbnQgfHwgaW5UZW1wbGF0ZSkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZShodG1sX2pzXzEuVEFHX0lELlApKSB7XG4gICAgICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgaHRtbF9qc18xLk5TLkhUTUwpO1xuICAgICAgICBpZiAoIWluVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHAuZm9ybUVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5jdXJyZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gbGlzdEl0ZW1TdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgIGNvbnN0IHRuID0gdG9rZW4udGFnSUQ7XG4gICAgZm9yIChsZXQgaSA9IHAub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCBlbGVtZW50SWQgPSBwLm9wZW5FbGVtZW50cy50YWdJRHNbaV07XG4gICAgICAgIGlmICgodG4gPT09IGh0bWxfanNfMS5UQUdfSUQuTEkgJiYgZWxlbWVudElkID09PSBodG1sX2pzXzEuVEFHX0lELkxJKSB8fFxuICAgICAgICAgICAgKCh0biA9PT0gaHRtbF9qc18xLlRBR19JRC5ERCB8fCB0biA9PT0gaHRtbF9qc18xLlRBR19JRC5EVCkgJiYgKGVsZW1lbnRJZCA9PT0gaHRtbF9qc18xLlRBR19JRC5ERCB8fCBlbGVtZW50SWQgPT09IGh0bWxfanNfMS5UQUdfSUQuRFQpKSkge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24oZWxlbWVudElkKTtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZChlbGVtZW50SWQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnRJZCAhPT0gaHRtbF9qc18xLlRBR19JRC5BRERSRVNTICYmXG4gICAgICAgICAgICBlbGVtZW50SWQgIT09IGh0bWxfanNfMS5UQUdfSUQuRElWICYmXG4gICAgICAgICAgICBlbGVtZW50SWQgIT09IGh0bWxfanNfMS5UQUdfSUQuUCAmJlxuICAgICAgICAgICAgcC5faXNTcGVjaWFsRWxlbWVudChwLm9wZW5FbGVtZW50cy5pdGVtc1tpXSwgZWxlbWVudElkKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoaHRtbF9qc18xLlRBR19JRC5QKSkge1xuICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XG4gICAgfVxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIGh0bWxfanNfMS5OUy5IVE1MKTtcbn1cbmZ1bmN0aW9uIHBsYWludGV4dFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoaHRtbF9qc18xLlRBR19JRC5QKSkge1xuICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XG4gICAgfVxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIGh0bWxfanNfMS5OUy5IVE1MKTtcbiAgICBwLnRva2VuaXplci5zdGF0ZSA9IGluZGV4X2pzXzEuVG9rZW5pemVyTW9kZS5QTEFJTlRFWFQ7XG59XG5mdW5jdGlvbiBidXR0b25TdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKGh0bWxfanNfMS5UQUdfSUQuQlVUVE9OKSkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCk7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZChodG1sX2pzXzEuVEFHX0lELkJVVFRPTik7XG4gICAgfVxuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgaHRtbF9qc18xLk5TLkhUTUwpO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xufVxuZnVuY3Rpb24gYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgY29uc3QgYWN0aXZlRWxlbWVudEVudHJ5ID0gcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuZ2V0RWxlbWVudEVudHJ5SW5TY29wZVdpdGhUYWdOYW1lKGh0bWxfanNfMS5UQUdfTkFNRVMuQSk7XG4gICAgaWYgKGFjdGl2ZUVsZW1lbnRFbnRyeSkge1xuICAgICAgICBjYWxsQWRvcHRpb25BZ2VuY3kocCwgdG9rZW4pO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5yZW1vdmUoYWN0aXZlRWxlbWVudEVudHJ5LmVsZW1lbnQpO1xuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5yZW1vdmVFbnRyeShhY3RpdmVFbGVtZW50RW50cnkpO1xuICAgIH1cbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIGh0bWxfanNfMS5OUy5IVE1MKTtcbiAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5wdXNoRWxlbWVudChwLm9wZW5FbGVtZW50cy5jdXJyZW50LCB0b2tlbik7XG59XG5mdW5jdGlvbiBiU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIGh0bWxfanNfMS5OUy5IVE1MKTtcbiAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5wdXNoRWxlbWVudChwLm9wZW5FbGVtZW50cy5jdXJyZW50LCB0b2tlbik7XG59XG5mdW5jdGlvbiBub2JyU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKGh0bWxfanNfMS5UQUdfSUQuTk9CUikpIHtcbiAgICAgICAgY2FsbEFkb3B0aW9uQWdlbmN5KHAsIHRva2VuKTtcbiAgICAgICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICB9XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgaHRtbF9qc18xLk5TLkhUTUwpO1xuICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnB1c2hFbGVtZW50KHAub3BlbkVsZW1lbnRzLmN1cnJlbnQsIHRva2VuKTtcbn1cbmZ1bmN0aW9uIGFwcGxldFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBodG1sX2pzXzEuTlMuSFRNTCk7XG4gICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuaW5zZXJ0TWFya2VyKCk7XG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG59XG5mdW5jdGlvbiB0YWJsZVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAudHJlZUFkYXB0ZXIuZ2V0RG9jdW1lbnRNb2RlKHAuZG9jdW1lbnQpICE9PSBodG1sX2pzXzEuRE9DVU1FTlRfTU9ERS5RVUlSS1MgJiYgcC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZShodG1sX2pzXzEuVEFHX0lELlApKSB7XG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcbiAgICB9XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgaHRtbF9qc18xLk5TLkhUTUwpO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fVEFCTEU7XG59XG5mdW5jdGlvbiBhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIGh0bWxfanNfMS5OUy5IVE1MKTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbiAgICB0b2tlbi5hY2tTZWxmQ2xvc2luZyA9IHRydWU7XG59XG5mdW5jdGlvbiBpc0hpZGRlbklucHV0KHRva2VuKSB7XG4gICAgY29uc3QgaW5wdXRUeXBlID0gKDAsIHRva2VuX2pzXzEuZ2V0VG9rZW5BdHRyKSh0b2tlbiwgaHRtbF9qc18xLkFUVFJTLlRZUEUpO1xuICAgIHJldHVybiBpbnB1dFR5cGUgIT0gbnVsbCAmJiBpbnB1dFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gSElEREVOX0lOUFVUX1RZUEU7XG59XG5mdW5jdGlvbiBpbnB1dFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBodG1sX2pzXzEuTlMuSFRNTCk7XG4gICAgaWYgKCFpc0hpZGRlbklucHV0KHRva2VuKSkge1xuICAgICAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbiAgICB9XG4gICAgdG9rZW4uYWNrU2VsZkNsb3NpbmcgPSB0cnVlO1xufVxuZnVuY3Rpb24gcGFyYW1TdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIGh0bWxfanNfMS5OUy5IVE1MKTtcbiAgICB0b2tlbi5hY2tTZWxmQ2xvc2luZyA9IHRydWU7XG59XG5mdW5jdGlvbiBoclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoaHRtbF9qc18xLlRBR19JRC5QKSkge1xuICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XG4gICAgfVxuICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIGh0bWxfanNfMS5OUy5IVE1MKTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbiAgICB0b2tlbi5hY2tTZWxmQ2xvc2luZyA9IHRydWU7XG59XG5mdW5jdGlvbiBpbWFnZVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgdG9rZW4udGFnTmFtZSA9IGh0bWxfanNfMS5UQUdfTkFNRVMuSU1HO1xuICAgIHRva2VuLnRhZ0lEID0gaHRtbF9qc18xLlRBR19JRC5JTUc7XG4gICAgYXJlYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbn1cbmZ1bmN0aW9uIHRleHRhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBodG1sX2pzXzEuTlMuSFRNTCk7XG4gICAgLy9OT1RFOiBJZiB0aGUgbmV4dCB0b2tlbiBpcyBhIFUrMDAwQSBMSU5FIEZFRUQgKExGKSBjaGFyYWN0ZXIgdG9rZW4sIHRoZW4gaWdub3JlIHRoYXQgdG9rZW4gYW5kIG1vdmVcbiAgICAvL29uIHRvIHRoZSBuZXh0IG9uZS4gKE5ld2xpbmVzIGF0IHRoZSBzdGFydCBvZiB0ZXh0YXJlYSBlbGVtZW50cyBhcmUgaWdub3JlZCBhcyBhbiBhdXRob3JpbmcgY29udmVuaWVuY2UuKVxuICAgIHAuc2tpcE5leHROZXdMaW5lID0gdHJ1ZTtcbiAgICBwLnRva2VuaXplci5zdGF0ZSA9IGluZGV4X2pzXzEuVG9rZW5pemVyTW9kZS5SQ0RBVEE7XG4gICAgcC5vcmlnaW5hbEluc2VydGlvbk1vZGUgPSBwLmluc2VydGlvbk1vZGU7XG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5URVhUO1xufVxuZnVuY3Rpb24geG1wU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZShodG1sX2pzXzEuVEFHX0lELlApKSB7XG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcbiAgICB9XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbiAgICBwLl9zd2l0Y2hUb1RleHRQYXJzaW5nKHRva2VuLCBpbmRleF9qc18xLlRva2VuaXplck1vZGUuUkFXVEVYVCk7XG59XG5mdW5jdGlvbiBpZnJhbWVTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIGluZGV4X2pzXzEuVG9rZW5pemVyTW9kZS5SQVdURVhUKTtcbn1cbi8vTk9URTogaGVyZSB3ZSBhc3N1bWUgdGhhdCB3ZSBhbHdheXMgYWN0IGFzIGFuIHVzZXIgYWdlbnQgd2l0aCBlbmFibGVkIHBsdWdpbnMsIHNvIHdlIHBhcnNlXG4vLzxub2VtYmVkPiBhcyByYXd0ZXh0LlxuZnVuY3Rpb24gbm9lbWJlZFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fc3dpdGNoVG9UZXh0UGFyc2luZyh0b2tlbiwgaW5kZXhfanNfMS5Ub2tlbml6ZXJNb2RlLlJBV1RFWFQpO1xufVxuZnVuY3Rpb24gc2VsZWN0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIGh0bWxfanNfMS5OUy5IVE1MKTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbiAgICBwLmluc2VydGlvbk1vZGUgPVxuICAgICAgICBwLmluc2VydGlvbk1vZGUgPT09IEluc2VydGlvbk1vZGUuSU5fVEFCTEUgfHxcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9PT0gSW5zZXJ0aW9uTW9kZS5JTl9DQVBUSU9OIHx8XG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPT09IEluc2VydGlvbk1vZGUuSU5fVEFCTEVfQk9EWSB8fFxuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID09PSBJbnNlcnRpb25Nb2RlLklOX1JPVyB8fFxuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID09PSBJbnNlcnRpb25Nb2RlLklOX0NFTExcbiAgICAgICAgICAgID8gSW5zZXJ0aW9uTW9kZS5JTl9TRUxFQ1RfSU5fVEFCTEVcbiAgICAgICAgICAgIDogSW5zZXJ0aW9uTW9kZS5JTl9TRUxFQ1Q7XG59XG5mdW5jdGlvbiBvcHRncm91cFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdJZCA9PT0gaHRtbF9qc18xLlRBR19JRC5PUFRJT04pIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgfVxuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgaHRtbF9qc18xLk5TLkhUTUwpO1xufVxuZnVuY3Rpb24gcmJTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKGh0bWxfanNfMS5UQUdfSUQuUlVCWSkpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgIH1cbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBodG1sX2pzXzEuTlMuSFRNTCk7XG59XG5mdW5jdGlvbiBydFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luU2NvcGUoaHRtbF9qc18xLlRBR19JRC5SVUJZKSkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbihodG1sX2pzXzEuVEFHX0lELlJUQyk7XG4gICAgfVxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIGh0bWxfanNfMS5OUy5IVE1MKTtcbn1cbmZ1bmN0aW9uIG1hdGhTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgZm9yZWlnbkNvbnRlbnQuYWRqdXN0VG9rZW5NYXRoTUxBdHRycyh0b2tlbik7XG4gICAgZm9yZWlnbkNvbnRlbnQuYWRqdXN0VG9rZW5YTUxBdHRycyh0b2tlbik7XG4gICAgaWYgKHRva2VuLnNlbGZDbG9zaW5nKSB7XG4gICAgICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIGh0bWxfanNfMS5OUy5NQVRITUwpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgaHRtbF9qc18xLk5TLk1BVEhNTCk7XG4gICAgfVxuICAgIHRva2VuLmFja1NlbGZDbG9zaW5nID0gdHJ1ZTtcbn1cbmZ1bmN0aW9uIHN2Z1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBmb3JlaWduQ29udGVudC5hZGp1c3RUb2tlblNWR0F0dHJzKHRva2VuKTtcbiAgICBmb3JlaWduQ29udGVudC5hZGp1c3RUb2tlblhNTEF0dHJzKHRva2VuKTtcbiAgICBpZiAodG9rZW4uc2VsZkNsb3NpbmcpIHtcbiAgICAgICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgaHRtbF9qc18xLk5TLlNWRyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBodG1sX2pzXzEuTlMuU1ZHKTtcbiAgICB9XG4gICAgdG9rZW4uYWNrU2VsZkNsb3NpbmcgPSB0cnVlO1xufVxuZnVuY3Rpb24gZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBodG1sX2pzXzEuTlMuSFRNTCk7XG59XG5mdW5jdGlvbiBzdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHN3aXRjaCAodG9rZW4udGFnSUQpIHtcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkk6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5TOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuQjpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlU6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5FTTpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlRUOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuQklHOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuQ09ERTpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkZPTlQ6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5TTUFMTDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlNUUklLRTpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlNUUk9ORzoge1xuICAgICAgICAgICAgYlN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5BOiB7XG4gICAgICAgICAgICBhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkgxOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuSDI6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5IMzpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkg0OlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuSDU6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5INjoge1xuICAgICAgICAgICAgbnVtYmVyZWRIZWFkZXJTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuUDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkRMOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuT0w6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5VTDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkRJVjpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkRJUjpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELk5BVjpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELk1BSU46XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5NRU5VOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuQVNJREU6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5DRU5URVI6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5GSUdVUkU6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5GT09URVI6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5IRUFERVI6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5IR1JPVVA6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5ESUFMT0c6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5ERVRBSUxTOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuQUREUkVTUzpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkFSVElDTEU6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5TRUNUSU9OOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuU1VNTUFSWTpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkZJRUxEU0VUOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuQkxPQ0tRVU9URTpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkZJR0NBUFRJT046IHtcbiAgICAgICAgICAgIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuTEk6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5ERDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkRUOiB7XG4gICAgICAgICAgICBsaXN0SXRlbVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5CUjpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELklNRzpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELldCUjpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkFSRUE6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5FTUJFRDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELktFWUdFTjoge1xuICAgICAgICAgICAgYXJlYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5IUjoge1xuICAgICAgICAgICAgaHJTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuUkI6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5SVEM6IHtcbiAgICAgICAgICAgIHJiU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlJUOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuUlA6IHtcbiAgICAgICAgICAgIHJ0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlBSRTpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkxJU1RJTkc6IHtcbiAgICAgICAgICAgIHByZVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5YTVA6IHtcbiAgICAgICAgICAgIHhtcFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5TVkc6IHtcbiAgICAgICAgICAgIHN2Z1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5IVE1MOiB7XG4gICAgICAgICAgICBodG1sU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkJBU0U6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5MSU5LOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuTUVUQTpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlNUWUxFOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuVElUTEU6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5TQ1JJUFQ6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5CR1NPVU5EOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuQkFTRUZPTlQ6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5URU1QTEFURToge1xuICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkJPRFk6IHtcbiAgICAgICAgICAgIGJvZHlTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuRk9STToge1xuICAgICAgICAgICAgZm9ybVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5OT0JSOiB7XG4gICAgICAgICAgICBub2JyU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELk1BVEg6IHtcbiAgICAgICAgICAgIG1hdGhTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuVEFCTEU6IHtcbiAgICAgICAgICAgIHRhYmxlU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELklOUFVUOiB7XG4gICAgICAgICAgICBpbnB1dFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5QQVJBTTpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlRSQUNLOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuU09VUkNFOiB7XG4gICAgICAgICAgICBwYXJhbVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5JTUFHRToge1xuICAgICAgICAgICAgaW1hZ2VTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuQlVUVE9OOiB7XG4gICAgICAgICAgICBidXR0b25TdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuQVBQTEVUOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuT0JKRUNUOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuTUFSUVVFRToge1xuICAgICAgICAgICAgYXBwbGV0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELklGUkFNRToge1xuICAgICAgICAgICAgaWZyYW1lU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlNFTEVDVDoge1xuICAgICAgICAgICAgc2VsZWN0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELk9QVElPTjpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELk9QVEdST1VQOiB7XG4gICAgICAgICAgICBvcHRncm91cFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5OT0VNQkVEOiB7XG4gICAgICAgICAgICBub2VtYmVkU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkZSQU1FU0VUOiB7XG4gICAgICAgICAgICBmcmFtZXNldFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5URVhUQVJFQToge1xuICAgICAgICAgICAgdGV4dGFyZWFTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuTk9TQ1JJUFQ6IHtcbiAgICAgICAgICAgIGlmIChwLm9wdGlvbnMuc2NyaXB0aW5nRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIG5vZW1iZWRTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlBMQUlOVEVYVDoge1xuICAgICAgICAgICAgcGxhaW50ZXh0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkNPTDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlRIOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuVEQ6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5UUjpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkhFQUQ6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5GUkFNRTpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlRCT0RZOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuVEZPT1Q6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5USEVBRDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkNBUFRJT046XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5DT0xHUk9VUDoge1xuICAgICAgICAgICAgLy8gSWdub3JlIHRva2VuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gYm9keUVuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKGh0bWxfanNfMS5UQUdfSUQuQk9EWSkpIHtcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5BRlRFUl9CT0RZO1xuICAgICAgICAvL05PVEU6IDxib2R5PiBpcyBuZXZlciBwb3BwZWQgZnJvbSB0aGUgc3RhY2ssIHNvIHdlIG5lZWQgdG8gdXBkYXRlZFxuICAgICAgICAvL3RoZSBlbmQgbG9jYXRpb24gZXhwbGljaXRseS5cbiAgICAgICAgaWYgKHAub3B0aW9ucy5zb3VyY2VDb2RlTG9jYXRpb25JbmZvKSB7XG4gICAgICAgICAgICBjb25zdCBib2R5RWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLnRyeVBlZWtQcm9wZXJseU5lc3RlZEJvZHlFbGVtZW50KCk7XG4gICAgICAgICAgICBpZiAoYm9keUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBwLl9zZXRFbmRMb2NhdGlvbihib2R5RWxlbWVudCwgdG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gaHRtbEVuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKGh0bWxfanNfMS5UQUdfSUQuQk9EWSkpIHtcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5BRlRFUl9CT0RZO1xuICAgICAgICBlbmRUYWdBZnRlckJvZHkocCwgdG9rZW4pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFkZHJlc3NFbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBjb25zdCB0biA9IHRva2VuLnRhZ0lEO1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKHRuKSkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCk7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCh0bik7XG4gICAgfVxufVxuZnVuY3Rpb24gZm9ybUVuZFRhZ0luQm9keShwKSB7XG4gICAgY29uc3QgaW5UZW1wbGF0ZSA9IHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA+IDA7XG4gICAgY29uc3QgeyBmb3JtRWxlbWVudCB9ID0gcDtcbiAgICBpZiAoIWluVGVtcGxhdGUpIHtcbiAgICAgICAgcC5mb3JtRWxlbWVudCA9IG51bGw7XG4gICAgfVxuICAgIGlmICgoZm9ybUVsZW1lbnQgfHwgaW5UZW1wbGF0ZSkgJiYgcC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZShodG1sX2pzXzEuVEFHX0lELkZPUk0pKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcbiAgICAgICAgaWYgKGluVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZChodG1sX2pzXzEuVEFHX0lELkZPUk0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGZvcm1FbGVtZW50KSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5yZW1vdmUoZm9ybUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gcEVuZFRhZ0luQm9keShwKSB7XG4gICAgaWYgKCFwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKGh0bWxfanNfMS5UQUdfSUQuUCkpIHtcbiAgICAgICAgcC5faW5zZXJ0RmFrZUVsZW1lbnQoaHRtbF9qc18xLlRBR19OQU1FUy5QLCBodG1sX2pzXzEuVEFHX0lELlApO1xuICAgIH1cbiAgICBwLl9jbG9zZVBFbGVtZW50KCk7XG59XG5mdW5jdGlvbiBsaUVuZFRhZ0luQm9keShwKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luTGlzdEl0ZW1TY29wZShodG1sX2pzXzEuVEFHX0lELkxJKSkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbihodG1sX2pzXzEuVEFHX0lELkxJKTtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKGh0bWxfanNfMS5UQUdfSUQuTEkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRkRW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgY29uc3QgdG4gPSB0b2tlbi50YWdJRDtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSh0bikpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24odG4pO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQodG4pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG51bWJlcmVkSGVhZGVyRW5kVGFnSW5Cb2R5KHApIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzTnVtYmVyZWRIZWFkZXJJblNjb3BlKCkpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbE51bWJlcmVkSGVhZGVyUG9wcGVkKCk7XG4gICAgfVxufVxuZnVuY3Rpb24gYXBwbGV0RW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgY29uc3QgdG4gPSB0b2tlbi50YWdJRDtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSh0bikpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQodG4pO1xuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5jbGVhclRvTGFzdE1hcmtlcigpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGJyRW5kVGFnSW5Cb2R5KHApIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuX2luc2VydEZha2VFbGVtZW50KGh0bWxfanNfMS5UQUdfTkFNRVMuQlIsIGh0bWxfanNfMS5UQUdfSUQuQlIpO1xuICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xufVxuZnVuY3Rpb24gZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGNvbnN0IHRuID0gdG9rZW4udGFnTmFtZTtcbiAgICBjb25zdCB0aWQgPSB0b2tlbi50YWdJRDtcbiAgICBmb3IgKGxldCBpID0gcC5vcGVuRWxlbWVudHMuc3RhY2tUb3A7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLml0ZW1zW2ldO1xuICAgICAgICBjb25zdCBlbGVtZW50SWQgPSBwLm9wZW5FbGVtZW50cy50YWdJRHNbaV07XG4gICAgICAgIC8vIENvbXBhcmUgdGhlIHRhZyBuYW1lIGhlcmUsIGFzIHRoZSB0YWcgbWlnaHQgbm90IGJlIGEga25vd24gdGFnIHdpdGggYW4gSUQuXG4gICAgICAgIGlmICh0aWQgPT09IGVsZW1lbnRJZCAmJiAodGlkICE9PSBodG1sX2pzXzEuVEFHX0lELlVOS05PV04gfHwgcC50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpID09PSB0bikpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3NXaXRoRXhjbHVzaW9uKHRpZCk7XG4gICAgICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuc3RhY2tUb3AgPj0gaSlcbiAgICAgICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5zaG9ydGVuVG9MZW5ndGgoaSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAocC5faXNTcGVjaWFsRWxlbWVudChlbGVtZW50LCBlbGVtZW50SWQpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGVuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHN3aXRjaCAodG9rZW4udGFnSUQpIHtcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkE6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5COlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuSTpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlM6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5VOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuRU06XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5UVDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkJJRzpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkNPREU6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5GT05UOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuTk9CUjpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlNNQUxMOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuU1RSSUtFOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuU1RST05HOiB7XG4gICAgICAgICAgICBjYWxsQWRvcHRpb25BZ2VuY3kocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlA6IHtcbiAgICAgICAgICAgIHBFbmRUYWdJbkJvZHkocCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuREw6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5VTDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELk9MOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuRElSOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuRElWOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuTkFWOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuUFJFOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuTUFJTjpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELk1FTlU6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5BU0lERTpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkJVVFRPTjpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkNFTlRFUjpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkZJR1VSRTpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkZPT1RFUjpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkhFQURFUjpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkhHUk9VUDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkRJQUxPRzpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkFERFJFU1M6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5BUlRJQ0xFOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuREVUQUlMUzpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlNFQ1RJT046XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5TVU1NQVJZOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuTElTVElORzpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkZJRUxEU0VUOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuQkxPQ0tRVU9URTpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkZJR0NBUFRJT046IHtcbiAgICAgICAgICAgIGFkZHJlc3NFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkxJOiB7XG4gICAgICAgICAgICBsaUVuZFRhZ0luQm9keShwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5ERDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkRUOiB7XG4gICAgICAgICAgICBkZEVuZFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuSDE6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5IMjpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkgzOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuSDQ6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5INTpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkg2OiB7XG4gICAgICAgICAgICBudW1iZXJlZEhlYWRlckVuZFRhZ0luQm9keShwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5CUjoge1xuICAgICAgICAgICAgYnJFbmRUYWdJbkJvZHkocCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuQk9EWToge1xuICAgICAgICAgICAgYm9keUVuZFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuSFRNTDoge1xuICAgICAgICAgICAgaHRtbEVuZFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuRk9STToge1xuICAgICAgICAgICAgZm9ybUVuZFRhZ0luQm9keShwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5BUFBMRVQ6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5PQkpFQ1Q6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5NQVJRVUVFOiB7XG4gICAgICAgICAgICBhcHBsZXRFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlRFTVBMQVRFOiB7XG4gICAgICAgICAgICB0ZW1wbGF0ZUVuZFRhZ0luSGVhZChwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGVvZkluQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICBlb2ZJblRlbXBsYXRlKHAsIHRva2VuKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHN0b3BQYXJzaW5nKHAsIHRva2VuKTtcbiAgICB9XG59XG4vLyBUaGUgXCJ0ZXh0XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBlbmRUYWdJblRleHQocCwgdG9rZW4pIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKHRva2VuLnRhZ0lEID09PSBodG1sX2pzXzEuVEFHX0lELlNDUklQVCkge1xuICAgICAgICAoX2EgPSBwLnNjcmlwdEhhbmRsZXIpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHAsIHAub3BlbkVsZW1lbnRzLmN1cnJlbnQpO1xuICAgIH1cbiAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBwLm9yaWdpbmFsSW5zZXJ0aW9uTW9kZTtcbn1cbmZ1bmN0aW9uIGVvZkluVGV4dChwLCB0b2tlbikge1xuICAgIHAuX2Vycih0b2tlbiwgZXJyb3JfY29kZXNfanNfMS5FUlIuZW9mSW5FbGVtZW50VGhhdENhbkNvbnRhaW5Pbmx5VGV4dCk7XG4gICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gcC5vcmlnaW5hbEluc2VydGlvbk1vZGU7XG4gICAgcC5vbkVvZih0b2tlbik7XG59XG4vLyBUaGUgXCJpbiB0YWJsZVwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gY2hhcmFjdGVySW5UYWJsZShwLCB0b2tlbikge1xuICAgIGlmIChUQUJMRV9TVFJVQ1RVUkVfVEFHUy5oYXMocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ0lkKSkge1xuICAgICAgICBwLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnMubGVuZ3RoID0gMDtcbiAgICAgICAgcC5oYXNOb25XaGl0ZXNwYWNlUGVuZGluZ0NoYXJhY3RlclRva2VuID0gZmFsc2U7XG4gICAgICAgIHAub3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gcC5pbnNlcnRpb25Nb2RlO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFX1RFWFQ7XG4gICAgICAgIHN3aXRjaCAodG9rZW4udHlwZSkge1xuICAgICAgICAgICAgY2FzZSB0b2tlbl9qc18xLlRva2VuVHlwZS5DSEFSQUNURVI6IHtcbiAgICAgICAgICAgICAgICBjaGFyYWN0ZXJJblRhYmxlVGV4dChwLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHRva2VuX2pzXzEuVG9rZW5UeXBlLldISVRFU1BBQ0VfQ0hBUkFDVEVSOiB7XG4gICAgICAgICAgICAgICAgd2hpdGVzcGFjZUNoYXJhY3RlckluVGFibGVUZXh0KHAsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElnbm9yZSBudWxsXG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XG4gICAgfVxufVxuZnVuY3Rpb24gY2FwdGlvblN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbikge1xuICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVDb250ZXh0KCk7XG4gICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuaW5zZXJ0TWFya2VyKCk7XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgaHRtbF9qc18xLk5TLkhUTUwpO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fQ0FQVElPTjtcbn1cbmZ1bmN0aW9uIGNvbGdyb3VwU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZUNvbnRleHQoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBodG1sX2pzXzEuTlMuSFRNTCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9DT0xVTU5fR1JPVVA7XG59XG5mdW5jdGlvbiBjb2xTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pIHtcbiAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlQ29udGV4dCgpO1xuICAgIHAuX2luc2VydEZha2VFbGVtZW50KGh0bWxfanNfMS5UQUdfTkFNRVMuQ09MR1JPVVAsIGh0bWxfanNfMS5UQUdfSUQuQ09MR1JPVVApO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fQ09MVU1OX0dST1VQO1xuICAgIHN0YXJ0VGFnSW5Db2x1bW5Hcm91cChwLCB0b2tlbik7XG59XG5mdW5jdGlvbiB0Ym9keVN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbikge1xuICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVDb250ZXh0KCk7XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgaHRtbF9qc18xLk5TLkhUTUwpO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fVEFCTEVfQk9EWTtcbn1cbmZ1bmN0aW9uIHRkU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZUNvbnRleHQoKTtcbiAgICBwLl9pbnNlcnRGYWtlRWxlbWVudChodG1sX2pzXzEuVEFHX05BTUVTLlRCT0RZLCBodG1sX2pzXzEuVEFHX0lELlRCT0RZKTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFX0JPRFk7XG4gICAgc3RhcnRUYWdJblRhYmxlQm9keShwLCB0b2tlbik7XG59XG5mdW5jdGlvbiB0YWJsZVN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoaHRtbF9qc18xLlRBR19JRC5UQUJMRSkpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKGh0bWxfanNfMS5UQUdfSUQuVEFCTEUpO1xuICAgICAgICBwLl9yZXNldEluc2VydGlvbk1vZGUoKTtcbiAgICAgICAgcC5fcHJvY2Vzc1N0YXJ0VGFnKHRva2VuKTtcbiAgICB9XG59XG5mdW5jdGlvbiBpbnB1dFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbikge1xuICAgIGlmIChpc0hpZGRlbklucHV0KHRva2VuKSkge1xuICAgICAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBodG1sX2pzXzEuTlMuSFRNTCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xuICAgIH1cbiAgICB0b2tlbi5hY2tTZWxmQ2xvc2luZyA9IHRydWU7XG59XG5mdW5jdGlvbiBmb3JtU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgaWYgKCFwLmZvcm1FbGVtZW50ICYmIHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA9PT0gMCkge1xuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBodG1sX2pzXzEuTlMuSFRNTCk7XG4gICAgICAgIHAuZm9ybUVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5jdXJyZW50O1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICB9XG59XG5mdW5jdGlvbiBzdGFydFRhZ0luVGFibGUocCwgdG9rZW4pIHtcbiAgICBzd2l0Y2ggKHRva2VuLnRhZ0lEKSB7XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5URDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlRIOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuVFI6IHtcbiAgICAgICAgICAgIHRkU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5TVFlMRTpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlNDUklQVDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlRFTVBMQVRFOiB7XG4gICAgICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuQ09MOiB7XG4gICAgICAgICAgICBjb2xTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkZPUk06IHtcbiAgICAgICAgICAgIGZvcm1TdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlRBQkxFOiB7XG4gICAgICAgICAgICB0YWJsZVN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuVEJPRFk6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5URk9PVDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlRIRUFEOiB7XG4gICAgICAgICAgICB0Ym9keVN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuSU5QVVQ6IHtcbiAgICAgICAgICAgIGlucHV0U3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5DQVBUSU9OOiB7XG4gICAgICAgICAgICBjYXB0aW9uU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5DT0xHUk9VUDoge1xuICAgICAgICAgICAgY29sZ3JvdXBTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgdG9rZW5JblRhYmxlKHAsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGVuZFRhZ0luVGFibGUocCwgdG9rZW4pIHtcbiAgICBzd2l0Y2ggKHRva2VuLnRhZ0lEKSB7XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5UQUJMRToge1xuICAgICAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZShodG1sX2pzXzEuVEFHX0lELlRBQkxFKSkge1xuICAgICAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZChodG1sX2pzXzEuVEFHX0lELlRBQkxFKTtcbiAgICAgICAgICAgICAgICBwLl9yZXNldEluc2VydGlvbk1vZGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5URU1QTEFURToge1xuICAgICAgICAgICAgdGVtcGxhdGVFbmRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkJPRFk6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5DQVBUSU9OOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuQ09MOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuQ09MR1JPVVA6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5IVE1MOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuVEJPRFk6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5URDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlRGT09UOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuVEg6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5USEVBRDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlRSOiB7XG4gICAgICAgICAgICAvLyBJZ25vcmUgdG9rZW5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiB0b2tlbkluVGFibGUocCwgdG9rZW4pIHtcbiAgICBjb25zdCBzYXZlZEZvc3RlclBhcmVudGluZ1N0YXRlID0gcC5mb3N0ZXJQYXJlbnRpbmdFbmFibGVkO1xuICAgIHAuZm9zdGVyUGFyZW50aW5nRW5hYmxlZCA9IHRydWU7XG4gICAgLy8gUHJvY2VzcyB0b2tlbiBpbiBgSW4gQm9keWAgbW9kZVxuICAgIG1vZGVJbkJvZHkocCwgdG9rZW4pO1xuICAgIHAuZm9zdGVyUGFyZW50aW5nRW5hYmxlZCA9IHNhdmVkRm9zdGVyUGFyZW50aW5nU3RhdGU7XG59XG4vLyBUaGUgXCJpbiB0YWJsZSB0ZXh0XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiB3aGl0ZXNwYWNlQ2hhcmFjdGVySW5UYWJsZVRleHQocCwgdG9rZW4pIHtcbiAgICBwLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnMucHVzaCh0b2tlbik7XG59XG5mdW5jdGlvbiBjaGFyYWN0ZXJJblRhYmxlVGV4dChwLCB0b2tlbikge1xuICAgIHAucGVuZGluZ0NoYXJhY3RlclRva2Vucy5wdXNoKHRva2VuKTtcbiAgICBwLmhhc05vbldoaXRlc3BhY2VQZW5kaW5nQ2hhcmFjdGVyVG9rZW4gPSB0cnVlO1xufVxuZnVuY3Rpb24gdG9rZW5JblRhYmxlVGV4dChwLCB0b2tlbikge1xuICAgIGxldCBpID0gMDtcbiAgICBpZiAocC5oYXNOb25XaGl0ZXNwYWNlUGVuZGluZ0NoYXJhY3RlclRva2VuKSB7XG4gICAgICAgIGZvciAoOyBpIDwgcC5wZW5kaW5nQ2hhcmFjdGVyVG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbkluVGFibGUocCwgcC5wZW5kaW5nQ2hhcmFjdGVyVG9rZW5zW2ldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZm9yICg7IGkgPCBwLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHAuX2luc2VydENoYXJhY3RlcnMocC5wZW5kaW5nQ2hhcmFjdGVyVG9rZW5zW2ldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwLmluc2VydGlvbk1vZGUgPSBwLm9yaWdpbmFsSW5zZXJ0aW9uTW9kZTtcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xufVxuLy8gVGhlIFwiaW4gY2FwdGlvblwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuY29uc3QgVEFCTEVfVk9JRF9FTEVNRU5UUyA9IG5ldyBTZXQoW2h0bWxfanNfMS5UQUdfSUQuQ0FQVElPTiwgaHRtbF9qc18xLlRBR19JRC5DT0wsIGh0bWxfanNfMS5UQUdfSUQuQ09MR1JPVVAsIGh0bWxfanNfMS5UQUdfSUQuVEJPRFksIGh0bWxfanNfMS5UQUdfSUQuVEQsIGh0bWxfanNfMS5UQUdfSUQuVEZPT1QsIGh0bWxfanNfMS5UQUdfSUQuVEgsIGh0bWxfanNfMS5UQUdfSUQuVEhFQUQsIGh0bWxfanNfMS5UQUdfSUQuVFJdKTtcbmZ1bmN0aW9uIHN0YXJ0VGFnSW5DYXB0aW9uKHAsIHRva2VuKSB7XG4gICAgY29uc3QgdG4gPSB0b2tlbi50YWdJRDtcbiAgICBpZiAoVEFCTEVfVk9JRF9FTEVNRU5UUy5oYXModG4pKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoaHRtbF9qc18xLlRBR19JRC5DQVBUSU9OKSkge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKGh0bWxfanNfMS5UQUdfSUQuQ0FQVElPTik7XG4gICAgICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5jbGVhclRvTGFzdE1hcmtlcigpO1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRTtcbiAgICAgICAgICAgIHN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICB9XG59XG5mdW5jdGlvbiBlbmRUYWdJbkNhcHRpb24ocCwgdG9rZW4pIHtcbiAgICBjb25zdCB0biA9IHRva2VuLnRhZ0lEO1xuICAgIHN3aXRjaCAodG4pIHtcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkNBUFRJT046XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5UQUJMRToge1xuICAgICAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZShodG1sX2pzXzEuVEFHX0lELkNBUFRJT04pKSB7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZChodG1sX2pzXzEuVEFHX0lELkNBUFRJT04pO1xuICAgICAgICAgICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmNsZWFyVG9MYXN0TWFya2VyKCk7XG4gICAgICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRTtcbiAgICAgICAgICAgICAgICBpZiAodG4gPT09IGh0bWxfanNfMS5UQUdfSUQuVEFCTEUpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kVGFnSW5UYWJsZShwLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkJPRFk6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5DT0w6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5DT0xHUk9VUDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkhUTUw6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5UQk9EWTpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlREOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuVEZPT1Q6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5USDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlRIRUFEOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuVFI6IHtcbiAgICAgICAgICAgIC8vIElnbm9yZSB0b2tlblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgZW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8vIFRoZSBcImluIGNvbHVtbiBncm91cFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdJbkNvbHVtbkdyb3VwKHAsIHRva2VuKSB7XG4gICAgc3dpdGNoICh0b2tlbi50YWdJRCkge1xuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuSFRNTDoge1xuICAgICAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkNPTDoge1xuICAgICAgICAgICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgaHRtbF9qc18xLk5TLkhUTUwpO1xuICAgICAgICAgICAgdG9rZW4uYWNrU2VsZkNsb3NpbmcgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlRFTVBMQVRFOiB7XG4gICAgICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICB0b2tlbkluQ29sdW1uR3JvdXAocCwgdG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gZW5kVGFnSW5Db2x1bW5Hcm91cChwLCB0b2tlbikge1xuICAgIHN3aXRjaCAodG9rZW4udGFnSUQpIHtcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkNPTEdST1VQOiB7XG4gICAgICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ0lkID09PSBodG1sX2pzXzEuVEFHX0lELkNPTEdST1VQKSB7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5URU1QTEFURToge1xuICAgICAgICAgICAgdGVtcGxhdGVFbmRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkNPTDoge1xuICAgICAgICAgICAgLy8gSWdub3JlIHRva2VuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICB0b2tlbkluQ29sdW1uR3JvdXAocCwgdG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gdG9rZW5JbkNvbHVtbkdyb3VwKHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdJZCA9PT0gaHRtbF9qc18xLlRBR19JRC5DT0xHUk9VUCkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRTtcbiAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICB9XG59XG4vLyBUaGUgXCJpbiB0YWJsZSBib2R5XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luVGFibGVCb2R5KHAsIHRva2VuKSB7XG4gICAgc3dpdGNoICh0b2tlbi50YWdJRCkge1xuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuVFI6IHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVCb2R5Q29udGV4dCgpO1xuICAgICAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgaHRtbF9qc18xLk5TLkhUTUwpO1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9ST1c7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuVEg6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5URDoge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZUJvZHlDb250ZXh0KCk7XG4gICAgICAgICAgICBwLl9pbnNlcnRGYWtlRWxlbWVudChodG1sX2pzXzEuVEFHX05BTUVTLlRSLCBodG1sX2pzXzEuVEFHX0lELlRSKTtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fUk9XO1xuICAgICAgICAgICAgc3RhcnRUYWdJblJvdyhwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuQ0FQVElPTjpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkNPTDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkNPTEdST1VQOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuVEJPRFk6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5URk9PVDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlRIRUFEOiB7XG4gICAgICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzVGFibGVCb2R5Q29udGV4dEluVGFibGVTY29wZSgpKSB7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZUJvZHlDb250ZXh0KCk7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRTtcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgc3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGVuZFRhZ0luVGFibGVCb2R5KHAsIHRva2VuKSB7XG4gICAgY29uc3QgdG4gPSB0b2tlbi50YWdJRDtcbiAgICBzd2l0Y2ggKHRva2VuLnRhZ0lEKSB7XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5UQk9EWTpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlRGT09UOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuVEhFQUQ6IHtcbiAgICAgICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUodG4pKSB7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZUJvZHlDb250ZXh0KCk7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5UQUJMRToge1xuICAgICAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc1RhYmxlQm9keUNvbnRleHRJblRhYmxlU2NvcGUoKSkge1xuICAgICAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVCb2R5Q29udGV4dCgpO1xuICAgICAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgICAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fVEFCTEU7XG4gICAgICAgICAgICAgICAgZW5kVGFnSW5UYWJsZShwLCB0b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuQk9EWTpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkNBUFRJT046XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5DT0w6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5DT0xHUk9VUDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkhUTUw6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5URDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlRIOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuVFI6IHtcbiAgICAgICAgICAgIC8vIElnbm9yZSB0b2tlblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgZW5kVGFnSW5UYWJsZShwLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyBUaGUgXCJpbiByb3dcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5Sb3cocCwgdG9rZW4pIHtcbiAgICBzd2l0Y2ggKHRva2VuLnRhZ0lEKSB7XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5USDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlREOiB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlUm93Q29udGV4dCgpO1xuICAgICAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgaHRtbF9qc18xLk5TLkhUTUwpO1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9DRUxMO1xuICAgICAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuaW5zZXJ0TWFya2VyKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuQ0FQVElPTjpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkNPTDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkNPTEdST1VQOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuVEJPRFk6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5URk9PVDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlRIRUFEOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuVFI6IHtcbiAgICAgICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoaHRtbF9qc18xLlRBR19JRC5UUikpIHtcbiAgICAgICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlUm93Q29udGV4dCgpO1xuICAgICAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgICAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fVEFCTEVfQk9EWTtcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luVGFibGVCb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIHN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBlbmRUYWdJblJvdyhwLCB0b2tlbikge1xuICAgIHN3aXRjaCAodG9rZW4udGFnSUQpIHtcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlRSOiB7XG4gICAgICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKGh0bWxfanNfMS5UQUdfSUQuVFIpKSB7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZVJvd0NvbnRleHQoKTtcbiAgICAgICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICAgICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFX0JPRFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuVEFCTEU6IHtcbiAgICAgICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoaHRtbF9qc18xLlRBR19JRC5UUikpIHtcbiAgICAgICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlUm93Q29udGV4dCgpO1xuICAgICAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgICAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fVEFCTEVfQk9EWTtcbiAgICAgICAgICAgICAgICBlbmRUYWdJblRhYmxlQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuVEJPRFk6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5URk9PVDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlRIRUFEOiB7XG4gICAgICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKHRva2VuLnRhZ0lEKSB8fCBwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoaHRtbF9qc18xLlRBR19JRC5UUikpIHtcbiAgICAgICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlUm93Q29udGV4dCgpO1xuICAgICAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgICAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fVEFCTEVfQk9EWTtcbiAgICAgICAgICAgICAgICBlbmRUYWdJblRhYmxlQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuQk9EWTpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkNBUFRJT046XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5DT0w6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5DT0xHUk9VUDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkhUTUw6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5URDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlRIOiB7XG4gICAgICAgICAgICAvLyBJZ25vcmUgZW5kIHRhZ1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgZW5kVGFnSW5UYWJsZShwLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyBUaGUgXCJpbiBjZWxsXCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luQ2VsbChwLCB0b2tlbikge1xuICAgIGNvbnN0IHRuID0gdG9rZW4udGFnSUQ7XG4gICAgaWYgKFRBQkxFX1ZPSURfRUxFTUVOVFMuaGFzKHRuKSkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKGh0bWxfanNfMS5UQUdfSUQuVEQpIHx8IHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZShodG1sX2pzXzEuVEFHX0lELlRIKSkge1xuICAgICAgICAgICAgcC5fY2xvc2VUYWJsZUNlbGwoKTtcbiAgICAgICAgICAgIHN0YXJ0VGFnSW5Sb3cocCwgdG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgfVxufVxuZnVuY3Rpb24gZW5kVGFnSW5DZWxsKHAsIHRva2VuKSB7XG4gICAgY29uc3QgdG4gPSB0b2tlbi50YWdJRDtcbiAgICBzd2l0Y2ggKHRuKSB7XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5URDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlRIOiB7XG4gICAgICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKHRuKSkge1xuICAgICAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcbiAgICAgICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQodG4pO1xuICAgICAgICAgICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmNsZWFyVG9MYXN0TWFya2VyKCk7XG4gICAgICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9ST1c7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuVEFCTEU6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5UQk9EWTpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlRGT09UOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuVEhFQUQ6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5UUjoge1xuICAgICAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSh0bikpIHtcbiAgICAgICAgICAgICAgICBwLl9jbG9zZVRhYmxlQ2VsbCgpO1xuICAgICAgICAgICAgICAgIGVuZFRhZ0luUm93KHAsIHRva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5CT0RZOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuQ0FQVElPTjpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkNPTDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkNPTEdST1VQOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuSFRNTDoge1xuICAgICAgICAgICAgLy8gSWdub3JlIHRva2VuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBlbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxufVxuLy8gVGhlIFwiaW4gc2VsZWN0XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luU2VsZWN0KHAsIHRva2VuKSB7XG4gICAgc3dpdGNoICh0b2tlbi50YWdJRCkge1xuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuSFRNTDoge1xuICAgICAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELk9QVElPTjoge1xuICAgICAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdJZCA9PT0gaHRtbF9qc18xLlRBR19JRC5PUFRJT04pIHtcbiAgICAgICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIGh0bWxfanNfMS5OUy5IVE1MKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5PUFRHUk9VUDoge1xuICAgICAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdJZCA9PT0gaHRtbF9qc18xLlRBR19JRC5PUFRJT04pIHtcbiAgICAgICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnSWQgPT09IGh0bWxfanNfMS5UQUdfSUQuT1BUR1JPVVApIHtcbiAgICAgICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIGh0bWxfanNfMS5OUy5IVE1MKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5JTlBVVDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELktFWUdFTjpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlRFWFRBUkVBOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuU0VMRUNUOiB7XG4gICAgICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TZWxlY3RTY29wZShodG1sX2pzXzEuVEFHX0lELlNFTEVDVCkpIHtcbiAgICAgICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoaHRtbF9qc18xLlRBR19JRC5TRUxFQ1QpO1xuICAgICAgICAgICAgICAgIHAuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xuICAgICAgICAgICAgICAgIGlmICh0b2tlbi50YWdJRCAhPT0gaHRtbF9qc18xLlRBR19JRC5TRUxFQ1QpIHtcbiAgICAgICAgICAgICAgICAgICAgcC5fcHJvY2Vzc1N0YXJ0VGFnKHRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuU0NSSVBUOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuVEVNUExBVEU6IHtcbiAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIERvIG5vdGhpbmdcbiAgICB9XG59XG5mdW5jdGlvbiBlbmRUYWdJblNlbGVjdChwLCB0b2tlbikge1xuICAgIHN3aXRjaCAodG9rZW4udGFnSUQpIHtcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELk9QVEdST1VQOiB7XG4gICAgICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuc3RhY2tUb3AgPiAwICYmXG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ0lkID09PSBodG1sX2pzXzEuVEFHX0lELk9QVElPTiAmJlxuICAgICAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnRhZ0lEc1twLm9wZW5FbGVtZW50cy5zdGFja1RvcCAtIDFdID09PSBodG1sX2pzXzEuVEFHX0lELk9QVEdST1VQKSB7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ0lkID09PSBodG1sX2pzXzEuVEFHX0lELk9QVEdST1VQKSB7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuT1BUSU9OOiB7XG4gICAgICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ0lkID09PSBodG1sX2pzXzEuVEFHX0lELk9QVElPTikge1xuICAgICAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlNFTEVDVDoge1xuICAgICAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luU2VsZWN0U2NvcGUoaHRtbF9qc18xLlRBR19JRC5TRUxFQ1QpKSB7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKGh0bWxfanNfMS5UQUdfSUQuU0VMRUNUKTtcbiAgICAgICAgICAgICAgICBwLl9yZXNldEluc2VydGlvbk1vZGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5URU1QTEFURToge1xuICAgICAgICAgICAgdGVtcGxhdGVFbmRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gRG8gbm90aGluZ1xuICAgIH1cbn1cbi8vIFRoZSBcImluIHNlbGVjdCBpbiB0YWJsZVwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdJblNlbGVjdEluVGFibGUocCwgdG9rZW4pIHtcbiAgICBjb25zdCB0biA9IHRva2VuLnRhZ0lEO1xuICAgIGlmICh0biA9PT0gaHRtbF9qc18xLlRBR19JRC5DQVBUSU9OIHx8XG4gICAgICAgIHRuID09PSBodG1sX2pzXzEuVEFHX0lELlRBQkxFIHx8XG4gICAgICAgIHRuID09PSBodG1sX2pzXzEuVEFHX0lELlRCT0RZIHx8XG4gICAgICAgIHRuID09PSBodG1sX2pzXzEuVEFHX0lELlRGT09UIHx8XG4gICAgICAgIHRuID09PSBodG1sX2pzXzEuVEFHX0lELlRIRUFEIHx8XG4gICAgICAgIHRuID09PSBodG1sX2pzXzEuVEFHX0lELlRSIHx8XG4gICAgICAgIHRuID09PSBodG1sX2pzXzEuVEFHX0lELlREIHx8XG4gICAgICAgIHRuID09PSBodG1sX2pzXzEuVEFHX0lELlRIKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZChodG1sX2pzXzEuVEFHX0lELlNFTEVDVCk7XG4gICAgICAgIHAuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xuICAgICAgICBwLl9wcm9jZXNzU3RhcnRUYWcodG9rZW4pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgc3RhcnRUYWdJblNlbGVjdChwLCB0b2tlbik7XG4gICAgfVxufVxuZnVuY3Rpb24gZW5kVGFnSW5TZWxlY3RJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgY29uc3QgdG4gPSB0b2tlbi50YWdJRDtcbiAgICBpZiAodG4gPT09IGh0bWxfanNfMS5UQUdfSUQuQ0FQVElPTiB8fFxuICAgICAgICB0biA9PT0gaHRtbF9qc18xLlRBR19JRC5UQUJMRSB8fFxuICAgICAgICB0biA9PT0gaHRtbF9qc18xLlRBR19JRC5UQk9EWSB8fFxuICAgICAgICB0biA9PT0gaHRtbF9qc18xLlRBR19JRC5URk9PVCB8fFxuICAgICAgICB0biA9PT0gaHRtbF9qc18xLlRBR19JRC5USEVBRCB8fFxuICAgICAgICB0biA9PT0gaHRtbF9qc18xLlRBR19JRC5UUiB8fFxuICAgICAgICB0biA9PT0gaHRtbF9qc18xLlRBR19JRC5URCB8fFxuICAgICAgICB0biA9PT0gaHRtbF9qc18xLlRBR19JRC5USCkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKHRuKSkge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKGh0bWxfanNfMS5UQUdfSUQuU0VMRUNUKTtcbiAgICAgICAgICAgIHAuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xuICAgICAgICAgICAgcC5vbkVuZFRhZyh0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGVuZFRhZ0luU2VsZWN0KHAsIHRva2VuKTtcbiAgICB9XG59XG4vLyBUaGUgXCJpbiB0ZW1wbGF0ZVwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdJblRlbXBsYXRlKHAsIHRva2VuKSB7XG4gICAgc3dpdGNoICh0b2tlbi50YWdJRCkge1xuICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIHRhZ3MgdGhhdCBjYW4gc3RhcnQgd2l0aG91dCBhIG1vZGUgY2hhbmdlXG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5CQVNFOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuQkFTRUZPTlQ6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5CR1NPVU5EOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuTElOSzpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELk1FVEE6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5OT0ZSQU1FUzpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlNDUklQVDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlNUWUxFOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuVEVNUExBVEU6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5USVRMRToge1xuICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmUtcHJvY2VzcyB0aGUgdG9rZW4gaW4gdGhlIGFwcHJvcHJpYXRlIG1vZGVcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkNBUFRJT046XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5DT0xHUk9VUDpcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlRCT0RZOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuVEZPT1Q6XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5USEVBRDoge1xuICAgICAgICAgICAgcC50bXBsSW5zZXJ0aW9uTW9kZVN0YWNrWzBdID0gSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRTtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fVEFCTEU7XG4gICAgICAgICAgICBzdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkNPTDoge1xuICAgICAgICAgICAgcC50bXBsSW5zZXJ0aW9uTW9kZVN0YWNrWzBdID0gSW5zZXJ0aW9uTW9kZS5JTl9DT0xVTU5fR1JPVVA7XG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX0NPTFVNTl9HUk9VUDtcbiAgICAgICAgICAgIHN0YXJ0VGFnSW5Db2x1bW5Hcm91cChwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuVFI6IHtcbiAgICAgICAgICAgIHAudG1wbEluc2VydGlvbk1vZGVTdGFja1swXSA9IEluc2VydGlvbk1vZGUuSU5fVEFCTEVfQk9EWTtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fVEFCTEVfQk9EWTtcbiAgICAgICAgICAgIHN0YXJ0VGFnSW5UYWJsZUJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELlREOlxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuVEg6IHtcbiAgICAgICAgICAgIHAudG1wbEluc2VydGlvbk1vZGVTdGFja1swXSA9IEluc2VydGlvbk1vZGUuSU5fUk9XO1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9ST1c7XG4gICAgICAgICAgICBzdGFydFRhZ0luUm93KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIHAudG1wbEluc2VydGlvbk1vZGVTdGFja1swXSA9IEluc2VydGlvbk1vZGUuSU5fQk9EWTtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fQk9EWTtcbiAgICAgICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGVuZFRhZ0luVGVtcGxhdGUocCwgdG9rZW4pIHtcbiAgICBpZiAodG9rZW4udGFnSUQgPT09IGh0bWxfanNfMS5UQUdfSUQuVEVNUExBVEUpIHtcbiAgICAgICAgdGVtcGxhdGVFbmRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGVvZkluVGVtcGxhdGUocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMudG1wbENvdW50ID4gMCkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoaHRtbF9qc18xLlRBR19JRC5URU1QTEFURSk7XG4gICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmNsZWFyVG9MYXN0TWFya2VyKCk7XG4gICAgICAgIHAudG1wbEluc2VydGlvbk1vZGVTdGFjay5zaGlmdCgpO1xuICAgICAgICBwLl9yZXNldEluc2VydGlvbk1vZGUoKTtcbiAgICAgICAgcC5vbkVvZih0b2tlbik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBzdG9wUGFyc2luZyhwLCB0b2tlbik7XG4gICAgfVxufVxuLy8gVGhlIFwiYWZ0ZXIgYm9keVwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdBZnRlckJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAodG9rZW4udGFnSUQgPT09IGh0bWxfanNfMS5UQUdfSUQuSFRNTCkge1xuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0b2tlbkFmdGVyQm9keShwLCB0b2tlbik7XG4gICAgfVxufVxuZnVuY3Rpb24gZW5kVGFnQWZ0ZXJCb2R5KHAsIHRva2VuKSB7XG4gICAgdmFyIF9hO1xuICAgIGlmICh0b2tlbi50YWdJRCA9PT0gaHRtbF9qc18xLlRBR19JRC5IVE1MKSB7XG4gICAgICAgIGlmICghcC5mcmFnbWVudENvbnRleHQpIHtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuQUZURVJfQUZURVJfQk9EWTtcbiAgICAgICAgfVxuICAgICAgICAvL05PVEU6IDxodG1sPiBpcyBuZXZlciBwb3BwZWQgZnJvbSB0aGUgc3RhY2ssIHNvIHdlIG5lZWQgdG8gdXBkYXRlZFxuICAgICAgICAvL3RoZSBlbmQgbG9jYXRpb24gZXhwbGljaXRseS5cbiAgICAgICAgaWYgKHAub3B0aW9ucy5zb3VyY2VDb2RlTG9jYXRpb25JbmZvICYmIHAub3BlbkVsZW1lbnRzLnRhZ0lEc1swXSA9PT0gaHRtbF9qc18xLlRBR19JRC5IVE1MKSB7XG4gICAgICAgICAgICBwLl9zZXRFbmRMb2NhdGlvbihwLm9wZW5FbGVtZW50cy5pdGVtc1swXSwgdG9rZW4pO1xuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBib2R5IGVsZW1lbnQsIGlmIGl0IGRvZXNuJ3QgaGF2ZSBhbiBlbmQgdGFnXG4gICAgICAgICAgICBjb25zdCBib2R5RWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLml0ZW1zWzFdO1xuICAgICAgICAgICAgaWYgKGJvZHlFbGVtZW50ICYmICEoKF9hID0gcC50cmVlQWRhcHRlci5nZXROb2RlU291cmNlQ29kZUxvY2F0aW9uKGJvZHlFbGVtZW50KSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmVuZFRhZykpIHtcbiAgICAgICAgICAgICAgICBwLl9zZXRFbmRMb2NhdGlvbihib2R5RWxlbWVudCwgdG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0b2tlbkFmdGVyQm9keShwLCB0b2tlbik7XG4gICAgfVxufVxuZnVuY3Rpb24gdG9rZW5BZnRlckJvZHkocCwgdG9rZW4pIHtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX0JPRFk7XG4gICAgbW9kZUluQm9keShwLCB0b2tlbik7XG59XG4vLyBUaGUgXCJpbiBmcmFtZXNldFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdJbkZyYW1lc2V0KHAsIHRva2VuKSB7XG4gICAgc3dpdGNoICh0b2tlbi50YWdJRCkge1xuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuSFRNTDoge1xuICAgICAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkZSQU1FU0VUOiB7XG4gICAgICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBodG1sX2pzXzEuTlMuSFRNTCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuRlJBTUU6IHtcbiAgICAgICAgICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIGh0bWxfanNfMS5OUy5IVE1MKTtcbiAgICAgICAgICAgIHRva2VuLmFja1NlbGZDbG9zaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5OT0ZSQU1FUzoge1xuICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gRG8gbm90aGluZ1xuICAgIH1cbn1cbmZ1bmN0aW9uIGVuZFRhZ0luRnJhbWVzZXQocCwgdG9rZW4pIHtcbiAgICBpZiAodG9rZW4udGFnSUQgPT09IGh0bWxfanNfMS5UQUdfSUQuRlJBTUVTRVQgJiYgIXAub3BlbkVsZW1lbnRzLmlzUm9vdEh0bWxFbGVtZW50Q3VycmVudCgpKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgICAgICBpZiAoIXAuZnJhZ21lbnRDb250ZXh0ICYmIHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdJZCAhPT0gaHRtbF9qc18xLlRBR19JRC5GUkFNRVNFVCkge1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5BRlRFUl9GUkFNRVNFVDtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8vIFRoZSBcImFmdGVyIGZyYW1lc2V0XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0FmdGVyRnJhbWVzZXQocCwgdG9rZW4pIHtcbiAgICBzd2l0Y2ggKHRva2VuLnRhZ0lEKSB7XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5IVE1MOiB7XG4gICAgICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIGh0bWxfanNfMS5UQUdfSUQuTk9GUkFNRVM6IHtcbiAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIERvIG5vdGhpbmdcbiAgICB9XG59XG5mdW5jdGlvbiBlbmRUYWdBZnRlckZyYW1lc2V0KHAsIHRva2VuKSB7XG4gICAgaWYgKHRva2VuLnRhZ0lEID09PSBodG1sX2pzXzEuVEFHX0lELkhUTUwpIHtcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5BRlRFUl9BRlRFUl9GUkFNRVNFVDtcbiAgICB9XG59XG4vLyBUaGUgXCJhZnRlciBhZnRlciBib2R5XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0FmdGVyQWZ0ZXJCb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHRva2VuLnRhZ0lEID09PSBodG1sX2pzXzEuVEFHX0lELkhUTUwpIHtcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdG9rZW5BZnRlckFmdGVyQm9keShwLCB0b2tlbik7XG4gICAgfVxufVxuZnVuY3Rpb24gdG9rZW5BZnRlckFmdGVyQm9keShwLCB0b2tlbikge1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fQk9EWTtcbiAgICBtb2RlSW5Cb2R5KHAsIHRva2VuKTtcbn1cbi8vIFRoZSBcImFmdGVyIGFmdGVyIGZyYW1lc2V0XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0FmdGVyQWZ0ZXJGcmFtZXNldChwLCB0b2tlbikge1xuICAgIHN3aXRjaCAodG9rZW4udGFnSUQpIHtcbiAgICAgICAgY2FzZSBodG1sX2pzXzEuVEFHX0lELkhUTUw6IHtcbiAgICAgICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgaHRtbF9qc18xLlRBR19JRC5OT0ZSQU1FUzoge1xuICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gRG8gbm90aGluZ1xuICAgIH1cbn1cbi8vIFRoZSBydWxlcyBmb3IgcGFyc2luZyB0b2tlbnMgaW4gZm9yZWlnbiBjb250ZW50XG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gbnVsbENoYXJhY3RlckluRm9yZWlnbkNvbnRlbnQocCwgdG9rZW4pIHtcbiAgICB0b2tlbi5jaGFycyA9IHVuaWNvZGUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xuICAgIHAuX2luc2VydENoYXJhY3RlcnModG9rZW4pO1xufVxuZnVuY3Rpb24gY2hhcmFjdGVySW5Gb3JlaWduQ29udGVudChwLCB0b2tlbikge1xuICAgIHAuX2luc2VydENoYXJhY3RlcnModG9rZW4pO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xufVxuZnVuY3Rpb24gcG9wVW50aWxIdG1sT3JJbnRlZ3JhdGlvblBvaW50KHApIHtcbiAgICB3aGlsZSAocC50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkocC5vcGVuRWxlbWVudHMuY3VycmVudCkgIT09IGh0bWxfanNfMS5OUy5IVE1MICYmXG4gICAgICAgICFwLl9pc0ludGVncmF0aW9uUG9pbnQocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ0lkLCBwLm9wZW5FbGVtZW50cy5jdXJyZW50KSkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICB9XG59XG5mdW5jdGlvbiBzdGFydFRhZ0luRm9yZWlnbkNvbnRlbnQocCwgdG9rZW4pIHtcbiAgICBpZiAoZm9yZWlnbkNvbnRlbnQuY2F1c2VzRXhpdCh0b2tlbikpIHtcbiAgICAgICAgcG9wVW50aWxIdG1sT3JJbnRlZ3JhdGlvblBvaW50KHApO1xuICAgICAgICBwLl9zdGFydFRhZ091dHNpZGVGb3JlaWduQ29udGVudCh0b2tlbik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gcC5fZ2V0QWRqdXN0ZWRDdXJyZW50RWxlbWVudCgpO1xuICAgICAgICBjb25zdCBjdXJyZW50TnMgPSBwLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShjdXJyZW50KTtcbiAgICAgICAgaWYgKGN1cnJlbnROcyA9PT0gaHRtbF9qc18xLk5TLk1BVEhNTCkge1xuICAgICAgICAgICAgZm9yZWlnbkNvbnRlbnQuYWRqdXN0VG9rZW5NYXRoTUxBdHRycyh0b2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY3VycmVudE5zID09PSBodG1sX2pzXzEuTlMuU1ZHKSB7XG4gICAgICAgICAgICBmb3JlaWduQ29udGVudC5hZGp1c3RUb2tlblNWR1RhZ05hbWUodG9rZW4pO1xuICAgICAgICAgICAgZm9yZWlnbkNvbnRlbnQuYWRqdXN0VG9rZW5TVkdBdHRycyh0b2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgZm9yZWlnbkNvbnRlbnQuYWRqdXN0VG9rZW5YTUxBdHRycyh0b2tlbik7XG4gICAgICAgIGlmICh0b2tlbi5zZWxmQ2xvc2luZykge1xuICAgICAgICAgICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgY3VycmVudE5zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIGN1cnJlbnROcyk7XG4gICAgICAgIH1cbiAgICAgICAgdG9rZW4uYWNrU2VsZkNsb3NpbmcgPSB0cnVlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGVuZFRhZ0luRm9yZWlnbkNvbnRlbnQocCwgdG9rZW4pIHtcbiAgICBpZiAodG9rZW4udGFnSUQgPT09IGh0bWxfanNfMS5UQUdfSUQuUCB8fCB0b2tlbi50YWdJRCA9PT0gaHRtbF9qc18xLlRBR19JRC5CUikge1xuICAgICAgICBwb3BVbnRpbEh0bWxPckludGVncmF0aW9uUG9pbnQocCk7XG4gICAgICAgIHAuX2VuZFRhZ091dHNpZGVGb3JlaWduQ29udGVudCh0b2tlbik7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IHAub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID4gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5pdGVtc1tpXTtcbiAgICAgICAgaWYgKHAudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVsZW1lbnQpID09PSBodG1sX2pzXzEuTlMuSFRNTCkge1xuICAgICAgICAgICAgcC5fZW5kVGFnT3V0c2lkZUZvcmVpZ25Db250ZW50KHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhZ05hbWUgPSBwLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCk7XG4gICAgICAgIGlmICh0YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHRva2VuLnRhZ05hbWUpIHtcbiAgICAgICAgICAgIC8vTk9URTogdXBkYXRlIHRoZSB0b2tlbiB0YWcgbmFtZSBmb3IgYF9zZXRFbmRMb2NhdGlvbmAuXG4gICAgICAgICAgICB0b2tlbi50YWdOYW1lID0gdGFnTmFtZTtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnNob3J0ZW5Ub0xlbmd0aChpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLk9wZW5FbGVtZW50U3RhY2sgPSB2b2lkIDA7XG5jb25zdCBodG1sX2pzXzEgPSByZXF1aXJlKFwiLi4vY29tbW9uL2h0bWwuanNcIik7XG4vL0VsZW1lbnQgdXRpbHNcbmNvbnN0IElNUExJQ0lUX0VORF9UQUdfUkVRVUlSRUQgPSBuZXcgU2V0KFtodG1sX2pzXzEuVEFHX0lELkRELCBodG1sX2pzXzEuVEFHX0lELkRULCBodG1sX2pzXzEuVEFHX0lELkxJLCBodG1sX2pzXzEuVEFHX0lELk9QVEdST1VQLCBodG1sX2pzXzEuVEFHX0lELk9QVElPTiwgaHRtbF9qc18xLlRBR19JRC5QLCBodG1sX2pzXzEuVEFHX0lELlJCLCBodG1sX2pzXzEuVEFHX0lELlJQLCBodG1sX2pzXzEuVEFHX0lELlJULCBodG1sX2pzXzEuVEFHX0lELlJUQ10pO1xuY29uc3QgSU1QTElDSVRfRU5EX1RBR19SRVFVSVJFRF9USE9ST1VHSExZID0gbmV3IFNldChbXG4gICAgLi4uSU1QTElDSVRfRU5EX1RBR19SRVFVSVJFRCxcbiAgICBodG1sX2pzXzEuVEFHX0lELkNBUFRJT04sXG4gICAgaHRtbF9qc18xLlRBR19JRC5DT0xHUk9VUCxcbiAgICBodG1sX2pzXzEuVEFHX0lELlRCT0RZLFxuICAgIGh0bWxfanNfMS5UQUdfSUQuVEQsXG4gICAgaHRtbF9qc18xLlRBR19JRC5URk9PVCxcbiAgICBodG1sX2pzXzEuVEFHX0lELlRILFxuICAgIGh0bWxfanNfMS5UQUdfSUQuVEhFQUQsXG4gICAgaHRtbF9qc18xLlRBR19JRC5UUixcbl0pO1xuY29uc3QgU0NPUElOR19FTEVNRU5UX05TID0gbmV3IE1hcChbXG4gICAgW2h0bWxfanNfMS5UQUdfSUQuQVBQTEVULCBodG1sX2pzXzEuTlMuSFRNTF0sXG4gICAgW2h0bWxfanNfMS5UQUdfSUQuQ0FQVElPTiwgaHRtbF9qc18xLk5TLkhUTUxdLFxuICAgIFtodG1sX2pzXzEuVEFHX0lELkhUTUwsIGh0bWxfanNfMS5OUy5IVE1MXSxcbiAgICBbaHRtbF9qc18xLlRBR19JRC5NQVJRVUVFLCBodG1sX2pzXzEuTlMuSFRNTF0sXG4gICAgW2h0bWxfanNfMS5UQUdfSUQuT0JKRUNULCBodG1sX2pzXzEuTlMuSFRNTF0sXG4gICAgW2h0bWxfanNfMS5UQUdfSUQuVEFCTEUsIGh0bWxfanNfMS5OUy5IVE1MXSxcbiAgICBbaHRtbF9qc18xLlRBR19JRC5URCwgaHRtbF9qc18xLk5TLkhUTUxdLFxuICAgIFtodG1sX2pzXzEuVEFHX0lELlRFTVBMQVRFLCBodG1sX2pzXzEuTlMuSFRNTF0sXG4gICAgW2h0bWxfanNfMS5UQUdfSUQuVEgsIGh0bWxfanNfMS5OUy5IVE1MXSxcbiAgICBbaHRtbF9qc18xLlRBR19JRC5BTk5PVEFUSU9OX1hNTCwgaHRtbF9qc18xLk5TLk1BVEhNTF0sXG4gICAgW2h0bWxfanNfMS5UQUdfSUQuTUksIGh0bWxfanNfMS5OUy5NQVRITUxdLFxuICAgIFtodG1sX2pzXzEuVEFHX0lELk1OLCBodG1sX2pzXzEuTlMuTUFUSE1MXSxcbiAgICBbaHRtbF9qc18xLlRBR19JRC5NTywgaHRtbF9qc18xLk5TLk1BVEhNTF0sXG4gICAgW2h0bWxfanNfMS5UQUdfSUQuTVMsIGh0bWxfanNfMS5OUy5NQVRITUxdLFxuICAgIFtodG1sX2pzXzEuVEFHX0lELk1URVhULCBodG1sX2pzXzEuTlMuTUFUSE1MXSxcbiAgICBbaHRtbF9qc18xLlRBR19JRC5ERVNDLCBodG1sX2pzXzEuTlMuU1ZHXSxcbiAgICBbaHRtbF9qc18xLlRBR19JRC5GT1JFSUdOX09CSkVDVCwgaHRtbF9qc18xLk5TLlNWR10sXG4gICAgW2h0bWxfanNfMS5UQUdfSUQuVElUTEUsIGh0bWxfanNfMS5OUy5TVkddLFxuXSk7XG5jb25zdCBOQU1FRF9IRUFERVJTID0gW2h0bWxfanNfMS5UQUdfSUQuSDEsIGh0bWxfanNfMS5UQUdfSUQuSDIsIGh0bWxfanNfMS5UQUdfSUQuSDMsIGh0bWxfanNfMS5UQUdfSUQuSDQsIGh0bWxfanNfMS5UQUdfSUQuSDUsIGh0bWxfanNfMS5UQUdfSUQuSDZdO1xuY29uc3QgVEFCTEVfUk9XX0NPTlRFWFQgPSBbaHRtbF9qc18xLlRBR19JRC5UUiwgaHRtbF9qc18xLlRBR19JRC5URU1QTEFURSwgaHRtbF9qc18xLlRBR19JRC5IVE1MXTtcbmNvbnN0IFRBQkxFX0JPRFlfQ09OVEVYVCA9IFtodG1sX2pzXzEuVEFHX0lELlRCT0RZLCBodG1sX2pzXzEuVEFHX0lELlRGT09ULCBodG1sX2pzXzEuVEFHX0lELlRIRUFELCBodG1sX2pzXzEuVEFHX0lELlRFTVBMQVRFLCBodG1sX2pzXzEuVEFHX0lELkhUTUxdO1xuY29uc3QgVEFCTEVfQ09OVEVYVCA9IFtodG1sX2pzXzEuVEFHX0lELlRBQkxFLCBodG1sX2pzXzEuVEFHX0lELlRFTVBMQVRFLCBodG1sX2pzXzEuVEFHX0lELkhUTUxdO1xuY29uc3QgVEFCTEVfQ0VMTFMgPSBbaHRtbF9qc18xLlRBR19JRC5URCwgaHRtbF9qc18xLlRBR19JRC5USF07XG4vL1N0YWNrIG9mIG9wZW4gZWxlbWVudHNcbmNsYXNzIE9wZW5FbGVtZW50U3RhY2sge1xuICAgIGdldCBjdXJyZW50VG1wbENvbnRlbnRPck5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0luVGVtcGxhdGUoKSA/IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGVtcGxhdGVDb250ZW50KHRoaXMuY3VycmVudCkgOiB0aGlzLmN1cnJlbnQ7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGRvY3VtZW50LCB0cmVlQWRhcHRlciwgaGFuZGxlcikge1xuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyID0gdHJlZUFkYXB0ZXI7XG4gICAgICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXI7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBbXTtcbiAgICAgICAgdGhpcy50YWdJRHMgPSBbXTtcbiAgICAgICAgdGhpcy5zdGFja1RvcCA9IC0xO1xuICAgICAgICB0aGlzLnRtcGxDb3VudCA9IDA7XG4gICAgICAgIHRoaXMuY3VycmVudFRhZ0lkID0gaHRtbF9qc18xLlRBR19JRC5VTktOT1dOO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSBkb2N1bWVudDtcbiAgICB9XG4gICAgLy9JbmRleCBvZiBlbGVtZW50XG4gICAgX2luZGV4T2YoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy5sYXN0SW5kZXhPZihlbGVtZW50LCB0aGlzLnN0YWNrVG9wKTtcbiAgICB9XG4gICAgLy9VcGRhdGUgY3VycmVudCBlbGVtZW50XG4gICAgX2lzSW5UZW1wbGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFRhZ0lkID09PSBodG1sX2pzXzEuVEFHX0lELlRFTVBMQVRFICYmIHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuY3VycmVudCkgPT09IGh0bWxfanNfMS5OUy5IVE1MO1xuICAgIH1cbiAgICBfdXBkYXRlQ3VycmVudEVsZW1lbnQoKSB7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHRoaXMuaXRlbXNbdGhpcy5zdGFja1RvcF07XG4gICAgICAgIHRoaXMuY3VycmVudFRhZ0lkID0gdGhpcy50YWdJRHNbdGhpcy5zdGFja1RvcF07XG4gICAgfVxuICAgIC8vTXV0YXRpb25zXG4gICAgcHVzaChlbGVtZW50LCB0YWdJRCkge1xuICAgICAgICB0aGlzLnN0YWNrVG9wKys7XG4gICAgICAgIHRoaXMuaXRlbXNbdGhpcy5zdGFja1RvcF0gPSBlbGVtZW50O1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLnRhZ0lEc1t0aGlzLnN0YWNrVG9wXSA9IHRhZ0lEO1xuICAgICAgICB0aGlzLmN1cnJlbnRUYWdJZCA9IHRhZ0lEO1xuICAgICAgICBpZiAodGhpcy5faXNJblRlbXBsYXRlKCkpIHtcbiAgICAgICAgICAgIHRoaXMudG1wbENvdW50Kys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oYW5kbGVyLm9uSXRlbVB1c2goZWxlbWVudCwgdGFnSUQsIHRydWUpO1xuICAgIH1cbiAgICBwb3AoKSB7XG4gICAgICAgIGNvbnN0IHBvcHBlZCA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgaWYgKHRoaXMudG1wbENvdW50ID4gMCAmJiB0aGlzLl9pc0luVGVtcGxhdGUoKSkge1xuICAgICAgICAgICAgdGhpcy50bXBsQ291bnQtLTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YWNrVG9wLS07XG4gICAgICAgIHRoaXMuX3VwZGF0ZUN1cnJlbnRFbGVtZW50KCk7XG4gICAgICAgIHRoaXMuaGFuZGxlci5vbkl0ZW1Qb3AocG9wcGVkLCB0cnVlKTtcbiAgICB9XG4gICAgcmVwbGFjZShvbGRFbGVtZW50LCBuZXdFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGlkeCA9IHRoaXMuX2luZGV4T2Yob2xkRWxlbWVudCk7XG4gICAgICAgIHRoaXMuaXRlbXNbaWR4XSA9IG5ld0VsZW1lbnQ7XG4gICAgICAgIGlmIChpZHggPT09IHRoaXMuc3RhY2tUb3ApIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IG5ld0VsZW1lbnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaW5zZXJ0QWZ0ZXIocmVmZXJlbmNlRWxlbWVudCwgbmV3RWxlbWVudCwgbmV3RWxlbWVudElEKSB7XG4gICAgICAgIGNvbnN0IGluc2VydGlvbklkeCA9IHRoaXMuX2luZGV4T2YocmVmZXJlbmNlRWxlbWVudCkgKyAxO1xuICAgICAgICB0aGlzLml0ZW1zLnNwbGljZShpbnNlcnRpb25JZHgsIDAsIG5ld0VsZW1lbnQpO1xuICAgICAgICB0aGlzLnRhZ0lEcy5zcGxpY2UoaW5zZXJ0aW9uSWR4LCAwLCBuZXdFbGVtZW50SUQpO1xuICAgICAgICB0aGlzLnN0YWNrVG9wKys7XG4gICAgICAgIGlmIChpbnNlcnRpb25JZHggPT09IHRoaXMuc3RhY2tUb3ApIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUN1cnJlbnRFbGVtZW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oYW5kbGVyLm9uSXRlbVB1c2godGhpcy5jdXJyZW50LCB0aGlzLmN1cnJlbnRUYWdJZCwgaW5zZXJ0aW9uSWR4ID09PSB0aGlzLnN0YWNrVG9wKTtcbiAgICB9XG4gICAgcG9wVW50aWxUYWdOYW1lUG9wcGVkKHRhZ05hbWUpIHtcbiAgICAgICAgbGV0IHRhcmdldElkeCA9IHRoaXMuc3RhY2tUb3AgKyAxO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICB0YXJnZXRJZHggPSB0aGlzLnRhZ0lEcy5sYXN0SW5kZXhPZih0YWdOYW1lLCB0YXJnZXRJZHggLSAxKTtcbiAgICAgICAgfSB3aGlsZSAodGFyZ2V0SWR4ID4gMCAmJiB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSSh0aGlzLml0ZW1zW3RhcmdldElkeF0pICE9PSBodG1sX2pzXzEuTlMuSFRNTCk7XG4gICAgICAgIHRoaXMuc2hvcnRlblRvTGVuZ3RoKHRhcmdldElkeCA8IDAgPyAwIDogdGFyZ2V0SWR4KTtcbiAgICB9XG4gICAgc2hvcnRlblRvTGVuZ3RoKGlkeCkge1xuICAgICAgICB3aGlsZSAodGhpcy5zdGFja1RvcCA+PSBpZHgpIHtcbiAgICAgICAgICAgIGNvbnN0IHBvcHBlZCA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgICAgIGlmICh0aGlzLnRtcGxDb3VudCA+IDAgJiYgdGhpcy5faXNJblRlbXBsYXRlKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRtcGxDb3VudCAtPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGFja1RvcC0tO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQ3VycmVudEVsZW1lbnQoKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlci5vbkl0ZW1Qb3AocG9wcGVkLCB0aGlzLnN0YWNrVG9wIDwgaWR4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwb3BVbnRpbEVsZW1lbnRQb3BwZWQoZWxlbWVudCkge1xuICAgICAgICBjb25zdCBpZHggPSB0aGlzLl9pbmRleE9mKGVsZW1lbnQpO1xuICAgICAgICB0aGlzLnNob3J0ZW5Ub0xlbmd0aChpZHggPCAwID8gMCA6IGlkeCk7XG4gICAgfVxuICAgIHBvcFVudGlsUG9wcGVkKHRhZ05hbWVzLCB0YXJnZXROUykge1xuICAgICAgICBjb25zdCBpZHggPSB0aGlzLl9pbmRleE9mVGFnTmFtZXModGFnTmFtZXMsIHRhcmdldE5TKTtcbiAgICAgICAgdGhpcy5zaG9ydGVuVG9MZW5ndGgoaWR4IDwgMCA/IDAgOiBpZHgpO1xuICAgIH1cbiAgICBwb3BVbnRpbE51bWJlcmVkSGVhZGVyUG9wcGVkKCkge1xuICAgICAgICB0aGlzLnBvcFVudGlsUG9wcGVkKE5BTUVEX0hFQURFUlMsIGh0bWxfanNfMS5OUy5IVE1MKTtcbiAgICB9XG4gICAgcG9wVW50aWxUYWJsZUNlbGxQb3BwZWQoKSB7XG4gICAgICAgIHRoaXMucG9wVW50aWxQb3BwZWQoVEFCTEVfQ0VMTFMsIGh0bWxfanNfMS5OUy5IVE1MKTtcbiAgICB9XG4gICAgcG9wQWxsVXBUb0h0bWxFbGVtZW50KCkge1xuICAgICAgICAvL05PVEU6IGhlcmUgd2UgYXNzdW1lIHRoYXQgdGhlIHJvb3QgPGh0bWw+IGVsZW1lbnQgaXMgYWx3YXlzIGZpcnN0IGluIHRoZSBvcGVuIGVsZW1lbnQgc3RhY2ssIHNvXG4gICAgICAgIC8vd2UgcGVyZm9ybSB0aGlzIGZhc3Qgc3RhY2sgY2xlYW4gdXAuXG4gICAgICAgIHRoaXMudG1wbENvdW50ID0gMDtcbiAgICAgICAgdGhpcy5zaG9ydGVuVG9MZW5ndGgoMSk7XG4gICAgfVxuICAgIF9pbmRleE9mVGFnTmFtZXModGFnTmFtZXMsIG5hbWVzcGFjZSkge1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5zdGFja1RvcDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGlmICh0YWdOYW1lcy5pbmNsdWRlcyh0aGlzLnRhZ0lEc1tpXSkgJiYgdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5pdGVtc1tpXSkgPT09IG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgY2xlYXJCYWNrVG8odGFnTmFtZXMsIHRhcmdldE5TKSB7XG4gICAgICAgIGNvbnN0IGlkeCA9IHRoaXMuX2luZGV4T2ZUYWdOYW1lcyh0YWdOYW1lcywgdGFyZ2V0TlMpO1xuICAgICAgICB0aGlzLnNob3J0ZW5Ub0xlbmd0aChpZHggKyAxKTtcbiAgICB9XG4gICAgY2xlYXJCYWNrVG9UYWJsZUNvbnRleHQoKSB7XG4gICAgICAgIHRoaXMuY2xlYXJCYWNrVG8oVEFCTEVfQ09OVEVYVCwgaHRtbF9qc18xLk5TLkhUTUwpO1xuICAgIH1cbiAgICBjbGVhckJhY2tUb1RhYmxlQm9keUNvbnRleHQoKSB7XG4gICAgICAgIHRoaXMuY2xlYXJCYWNrVG8oVEFCTEVfQk9EWV9DT05URVhULCBodG1sX2pzXzEuTlMuSFRNTCk7XG4gICAgfVxuICAgIGNsZWFyQmFja1RvVGFibGVSb3dDb250ZXh0KCkge1xuICAgICAgICB0aGlzLmNsZWFyQmFja1RvKFRBQkxFX1JPV19DT05URVhULCBodG1sX2pzXzEuTlMuSFRNTCk7XG4gICAgfVxuICAgIHJlbW92ZShlbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGlkeCA9IHRoaXMuX2luZGV4T2YoZWxlbWVudCk7XG4gICAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICAgICAgaWYgKGlkeCA9PT0gdGhpcy5zdGFja1RvcCkge1xuICAgICAgICAgICAgICAgIHRoaXMucG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLnNwbGljZShpZHgsIDEpO1xuICAgICAgICAgICAgICAgIHRoaXMudGFnSURzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhY2tUb3AtLTtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVDdXJyZW50RWxlbWVudCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlci5vbkl0ZW1Qb3AoZWxlbWVudCwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vU2VhcmNoXG4gICAgdHJ5UGVla1Byb3Blcmx5TmVzdGVkQm9keUVsZW1lbnQoKSB7XG4gICAgICAgIC8vUHJvcGVybHkgbmVzdGVkIDxib2R5PiBlbGVtZW50IChzaG91bGQgYmUgc2Vjb25kIGVsZW1lbnQgaW4gc3RhY2spLlxuICAgICAgICByZXR1cm4gdGhpcy5zdGFja1RvcCA+PSAxICYmIHRoaXMudGFnSURzWzFdID09PSBodG1sX2pzXzEuVEFHX0lELkJPRFkgPyB0aGlzLml0ZW1zWzFdIDogbnVsbDtcbiAgICB9XG4gICAgY29udGFpbnMoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5kZXhPZihlbGVtZW50KSA+IC0xO1xuICAgIH1cbiAgICBnZXRDb21tb25BbmNlc3RvcihlbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRJZHggPSB0aGlzLl9pbmRleE9mKGVsZW1lbnQpIC0gMTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRJZHggPj0gMCA/IHRoaXMuaXRlbXNbZWxlbWVudElkeF0gOiBudWxsO1xuICAgIH1cbiAgICBpc1Jvb3RIdG1sRWxlbWVudEN1cnJlbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YWNrVG9wID09PSAwICYmIHRoaXMudGFnSURzWzBdID09PSBodG1sX2pzXzEuVEFHX0lELkhUTUw7XG4gICAgfVxuICAgIC8vRWxlbWVudCBpbiBzY29wZVxuICAgIGhhc0luU2NvcGUodGFnTmFtZSkge1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5zdGFja1RvcDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHRuID0gdGhpcy50YWdJRHNbaV07XG4gICAgICAgICAgICBjb25zdCBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuaXRlbXNbaV0pO1xuICAgICAgICAgICAgaWYgKHRuID09PSB0YWdOYW1lICYmIG5zID09PSBodG1sX2pzXzEuTlMuSFRNTCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFNDT1BJTkdfRUxFTUVOVF9OUy5nZXQodG4pID09PSBucykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaGFzTnVtYmVyZWRIZWFkZXJJblNjb3BlKCkge1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5zdGFja1RvcDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHRuID0gdGhpcy50YWdJRHNbaV07XG4gICAgICAgICAgICBjb25zdCBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuaXRlbXNbaV0pO1xuICAgICAgICAgICAgaWYgKCgwLCBodG1sX2pzXzEuaXNOdW1iZXJlZEhlYWRlcikodG4pICYmIG5zID09PSBodG1sX2pzXzEuTlMuSFRNTCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFNDT1BJTkdfRUxFTUVOVF9OUy5nZXQodG4pID09PSBucykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaGFzSW5MaXN0SXRlbVNjb3BlKHRhZ05hbWUpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCB0biA9IHRoaXMudGFnSURzW2ldO1xuICAgICAgICAgICAgY29uc3QgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSSh0aGlzLml0ZW1zW2ldKTtcbiAgICAgICAgICAgIGlmICh0biA9PT0gdGFnTmFtZSAmJiBucyA9PT0gaHRtbF9qc18xLk5TLkhUTUwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoKHRuID09PSBodG1sX2pzXzEuVEFHX0lELlVMIHx8IHRuID09PSBodG1sX2pzXzEuVEFHX0lELk9MKSAmJiBucyA9PT0gaHRtbF9qc18xLk5TLkhUTUwpIHx8IFNDT1BJTkdfRUxFTUVOVF9OUy5nZXQodG4pID09PSBucykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaGFzSW5CdXR0b25TY29wZSh0YWdOYW1lKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgdG4gPSB0aGlzLnRhZ0lEc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5pdGVtc1tpXSk7XG4gICAgICAgICAgICBpZiAodG4gPT09IHRhZ05hbWUgJiYgbnMgPT09IGh0bWxfanNfMS5OUy5IVE1MKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKHRuID09PSBodG1sX2pzXzEuVEFHX0lELkJVVFRPTiAmJiBucyA9PT0gaHRtbF9qc18xLk5TLkhUTUwpIHx8IFNDT1BJTkdfRUxFTUVOVF9OUy5nZXQodG4pID09PSBucykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaGFzSW5UYWJsZVNjb3BlKHRhZ05hbWUpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCB0biA9IHRoaXMudGFnSURzW2ldO1xuICAgICAgICAgICAgY29uc3QgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSSh0aGlzLml0ZW1zW2ldKTtcbiAgICAgICAgICAgIGlmIChucyAhPT0gaHRtbF9qc18xLk5TLkhUTUwpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0biA9PT0gdGFnTmFtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRuID09PSBodG1sX2pzXzEuVEFHX0lELlRBQkxFIHx8IHRuID09PSBodG1sX2pzXzEuVEFHX0lELlRFTVBMQVRFIHx8IHRuID09PSBodG1sX2pzXzEuVEFHX0lELkhUTUwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGhhc1RhYmxlQm9keUNvbnRleHRJblRhYmxlU2NvcGUoKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgdG4gPSB0aGlzLnRhZ0lEc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5pdGVtc1tpXSk7XG4gICAgICAgICAgICBpZiAobnMgIT09IGh0bWxfanNfMS5OUy5IVE1MKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodG4gPT09IGh0bWxfanNfMS5UQUdfSUQuVEJPRFkgfHwgdG4gPT09IGh0bWxfanNfMS5UQUdfSUQuVEhFQUQgfHwgdG4gPT09IGh0bWxfanNfMS5UQUdfSUQuVEZPT1QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0biA9PT0gaHRtbF9qc18xLlRBR19JRC5UQUJMRSB8fCB0biA9PT0gaHRtbF9qc18xLlRBR19JRC5IVE1MKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBoYXNJblNlbGVjdFNjb3BlKHRhZ05hbWUpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCB0biA9IHRoaXMudGFnSURzW2ldO1xuICAgICAgICAgICAgY29uc3QgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSSh0aGlzLml0ZW1zW2ldKTtcbiAgICAgICAgICAgIGlmIChucyAhPT0gaHRtbF9qc18xLk5TLkhUTUwpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0biA9PT0gdGFnTmFtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRuICE9PSBodG1sX2pzXzEuVEFHX0lELk9QVElPTiAmJiB0biAhPT0gaHRtbF9qc18xLlRBR19JRC5PUFRHUk9VUCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLy9JbXBsaWVkIGVuZCB0YWdzXG4gICAgZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpIHtcbiAgICAgICAgd2hpbGUgKElNUExJQ0lUX0VORF9UQUdfUkVRVUlSRUQuaGFzKHRoaXMuY3VycmVudFRhZ0lkKSkge1xuICAgICAgICAgICAgdGhpcy5wb3AoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZW5lcmF0ZUltcGxpZWRFbmRUYWdzVGhvcm91Z2hseSgpIHtcbiAgICAgICAgd2hpbGUgKElNUExJQ0lUX0VORF9UQUdfUkVRVUlSRURfVEhPUk9VR0hMWS5oYXModGhpcy5jdXJyZW50VGFnSWQpKSB7XG4gICAgICAgICAgICB0aGlzLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdlbmVyYXRlSW1wbGllZEVuZFRhZ3NXaXRoRXhjbHVzaW9uKGV4Y2x1c2lvbklkKSB7XG4gICAgICAgIHdoaWxlICh0aGlzLmN1cnJlbnRUYWdJZCAhPT0gZXhjbHVzaW9uSWQgJiYgSU1QTElDSVRfRU5EX1RBR19SRVFVSVJFRF9USE9ST1VHSExZLmhhcyh0aGlzLmN1cnJlbnRUYWdJZCkpIHtcbiAgICAgICAgICAgIHRoaXMucG9wKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLk9wZW5FbGVtZW50U3RhY2sgPSBPcGVuRWxlbWVudFN0YWNrO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b3Blbi1lbGVtZW50LXN0YWNrLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zZXJpYWxpemVPdXRlciA9IGV4cG9ydHMuc2VyaWFsaXplID0gdm9pZCAwO1xuY29uc3QgaHRtbF9qc18xID0gcmVxdWlyZShcIi4uL2NvbW1vbi9odG1sLmpzXCIpO1xuY29uc3QgZXNjYXBlX2pzXzEgPSByZXF1aXJlKFwiZW50aXRpZXMvbGliL2VzY2FwZS5qc1wiKTtcbmNvbnN0IGRlZmF1bHRfanNfMSA9IHJlcXVpcmUoXCIuLi90cmVlLWFkYXB0ZXJzL2RlZmF1bHQuanNcIik7XG4vLyBTZXRzXG5jb25zdCBWT0lEX0VMRU1FTlRTID0gbmV3IFNldChbXG4gICAgaHRtbF9qc18xLlRBR19OQU1FUy5BUkVBLFxuICAgIGh0bWxfanNfMS5UQUdfTkFNRVMuQkFTRSxcbiAgICBodG1sX2pzXzEuVEFHX05BTUVTLkJBU0VGT05ULFxuICAgIGh0bWxfanNfMS5UQUdfTkFNRVMuQkdTT1VORCxcbiAgICBodG1sX2pzXzEuVEFHX05BTUVTLkJSLFxuICAgIGh0bWxfanNfMS5UQUdfTkFNRVMuQ09MLFxuICAgIGh0bWxfanNfMS5UQUdfTkFNRVMuRU1CRUQsXG4gICAgaHRtbF9qc18xLlRBR19OQU1FUy5GUkFNRSxcbiAgICBodG1sX2pzXzEuVEFHX05BTUVTLkhSLFxuICAgIGh0bWxfanNfMS5UQUdfTkFNRVMuSU1HLFxuICAgIGh0bWxfanNfMS5UQUdfTkFNRVMuSU5QVVQsXG4gICAgaHRtbF9qc18xLlRBR19OQU1FUy5LRVlHRU4sXG4gICAgaHRtbF9qc18xLlRBR19OQU1FUy5MSU5LLFxuICAgIGh0bWxfanNfMS5UQUdfTkFNRVMuTUVUQSxcbiAgICBodG1sX2pzXzEuVEFHX05BTUVTLlBBUkFNLFxuICAgIGh0bWxfanNfMS5UQUdfTkFNRVMuU09VUkNFLFxuICAgIGh0bWxfanNfMS5UQUdfTkFNRVMuVFJBQ0ssXG4gICAgaHRtbF9qc18xLlRBR19OQU1FUy5XQlIsXG5dKTtcbmZ1bmN0aW9uIGlzVm9pZEVsZW1lbnQobm9kZSwgb3B0aW9ucykge1xuICAgIHJldHVybiAob3B0aW9ucy50cmVlQWRhcHRlci5pc0VsZW1lbnROb2RlKG5vZGUpICYmXG4gICAgICAgIG9wdGlvbnMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKG5vZGUpID09PSBodG1sX2pzXzEuTlMuSFRNTCAmJlxuICAgICAgICBWT0lEX0VMRU1FTlRTLmhhcyhvcHRpb25zLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUobm9kZSkpKTtcbn1cbmNvbnN0IGRlZmF1bHRPcHRzID0geyB0cmVlQWRhcHRlcjogZGVmYXVsdF9qc18xLmRlZmF1bHRUcmVlQWRhcHRlciwgc2NyaXB0aW5nRW5hYmxlZDogdHJ1ZSB9O1xuLyoqXG4gKiBTZXJpYWxpemVzIGFuIEFTVCBub2RlIHRvIGFuIEhUTUwgc3RyaW5nLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHBhcnNlNSA9IHJlcXVpcmUoJ3BhcnNlNScpO1xuICpcbiAqIGNvbnN0IGRvY3VtZW50ID0gcGFyc2U1LnBhcnNlKCc8IURPQ1RZUEUgaHRtbD48aHRtbD48aGVhZD48L2hlYWQ+PGJvZHk+SGkgdGhlcmUhPC9ib2R5PjwvaHRtbD4nKTtcbiAqXG4gKiAvLyBTZXJpYWxpemVzIGEgZG9jdW1lbnQuXG4gKiBjb25zdCBodG1sID0gcGFyc2U1LnNlcmlhbGl6ZShkb2N1bWVudCk7XG4gKlxuICogLy8gU2VyaWFsaXplcyB0aGUgPGh0bWw+IGVsZW1lbnQgY29udGVudC5cbiAqIGNvbnN0IHN0ciA9IHBhcnNlNS5zZXJpYWxpemUoZG9jdW1lbnQuY2hpbGROb2Rlc1sxXSk7XG4gKlxuICogY29uc29sZS5sb2coc3RyKTsgLy8+ICc8aGVhZD48L2hlYWQ+PGJvZHk+SGkgdGhlcmUhPC9ib2R5PidcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBub2RlIE5vZGUgdG8gc2VyaWFsaXplLlxuICogQHBhcmFtIG9wdGlvbnMgU2VyaWFsaXphdGlvbiBvcHRpb25zLlxuICovXG5mdW5jdGlvbiBzZXJpYWxpemUobm9kZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IG9wdHMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRzKSwgb3B0aW9ucyk7XG4gICAgaWYgKGlzVm9pZEVsZW1lbnQobm9kZSwgb3B0cykpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gc2VyaWFsaXplQ2hpbGROb2Rlcyhub2RlLCBvcHRzKTtcbn1cbmV4cG9ydHMuc2VyaWFsaXplID0gc2VyaWFsaXplO1xuLyoqXG4gKiBTZXJpYWxpemVzIGFuIEFTVCBlbGVtZW50IG5vZGUgdG8gYW4gSFRNTCBzdHJpbmcsIGluY2x1ZGluZyB0aGUgZWxlbWVudCBub2RlLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHBhcnNlNSA9IHJlcXVpcmUoJ3BhcnNlNScpO1xuICpcbiAqIGNvbnN0IGRvY3VtZW50ID0gcGFyc2U1LnBhcnNlRnJhZ21lbnQoJzxkaXY+SGVsbG8sIDxiPndvcmxkPC9iPiE8L2Rpdj4nKTtcbiAqXG4gKiAvLyBTZXJpYWxpemVzIHRoZSA8ZGl2PiBlbGVtZW50LlxuICogY29uc3QgaHRtbCA9IHBhcnNlNS5zZXJpYWxpemVPdXRlcihkb2N1bWVudC5jaGlsZE5vZGVzWzBdKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhzdHIpOyAvLz4gJzxkaXY+SGVsbG8sIDxiPndvcmxkPC9iPiE8L2Rpdj4nXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gbm9kZSBOb2RlIHRvIHNlcmlhbGl6ZS5cbiAqIEBwYXJhbSBvcHRpb25zIFNlcmlhbGl6YXRpb24gb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gc2VyaWFsaXplT3V0ZXIobm9kZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IG9wdHMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRzKSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZU5vZGUobm9kZSwgb3B0cyk7XG59XG5leHBvcnRzLnNlcmlhbGl6ZU91dGVyID0gc2VyaWFsaXplT3V0ZXI7XG5mdW5jdGlvbiBzZXJpYWxpemVDaGlsZE5vZGVzKHBhcmVudE5vZGUsIG9wdGlvbnMpIHtcbiAgICBsZXQgaHRtbCA9ICcnO1xuICAgIC8vIEdldCBjb250YWluZXIgb2YgdGhlIGNoaWxkIG5vZGVzXG4gICAgY29uc3QgY29udGFpbmVyID0gb3B0aW9ucy50cmVlQWRhcHRlci5pc0VsZW1lbnROb2RlKHBhcmVudE5vZGUpICYmXG4gICAgICAgIG9wdGlvbnMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShwYXJlbnROb2RlKSA9PT0gaHRtbF9qc18xLlRBR19OQU1FUy5URU1QTEFURSAmJlxuICAgICAgICBvcHRpb25zLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShwYXJlbnROb2RlKSA9PT0gaHRtbF9qc18xLk5TLkhUTUxcbiAgICAgICAgPyBvcHRpb25zLnRyZWVBZGFwdGVyLmdldFRlbXBsYXRlQ29udGVudChwYXJlbnROb2RlKVxuICAgICAgICA6IHBhcmVudE5vZGU7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IG9wdGlvbnMudHJlZUFkYXB0ZXIuZ2V0Q2hpbGROb2Rlcyhjb250YWluZXIpO1xuICAgIGlmIChjaGlsZE5vZGVzKSB7XG4gICAgICAgIGZvciAoY29uc3QgY3VycmVudE5vZGUgb2YgY2hpbGROb2Rlcykge1xuICAgICAgICAgICAgaHRtbCArPSBzZXJpYWxpemVOb2RlKGN1cnJlbnROb2RlLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaHRtbDtcbn1cbmZ1bmN0aW9uIHNlcmlhbGl6ZU5vZGUobm9kZSwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLnRyZWVBZGFwdGVyLmlzRWxlbWVudE5vZGUobm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZUVsZW1lbnQobm9kZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnRyZWVBZGFwdGVyLmlzVGV4dE5vZGUobm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVRleHROb2RlKG5vZGUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy50cmVlQWRhcHRlci5pc0NvbW1lbnROb2RlKG5vZGUpKSB7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVDb21tZW50Tm9kZShub2RlLCBvcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudHJlZUFkYXB0ZXIuaXNEb2N1bWVudFR5cGVOb2RlKG5vZGUpKSB7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVEb2N1bWVudFR5cGVOb2RlKG5vZGUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvLyBSZXR1cm4gYW4gZW1wdHkgc3RyaW5nIGZvciB1bmtub3duIG5vZGVzXG4gICAgcmV0dXJuICcnO1xufVxuZnVuY3Rpb24gc2VyaWFsaXplRWxlbWVudChub2RlLCBvcHRpb25zKSB7XG4gICAgY29uc3QgdG4gPSBvcHRpb25zLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUobm9kZSk7XG4gICAgcmV0dXJuIGA8JHt0bn0ke3NlcmlhbGl6ZUF0dHJpYnV0ZXMobm9kZSwgb3B0aW9ucyl9PiR7aXNWb2lkRWxlbWVudChub2RlLCBvcHRpb25zKSA/ICcnIDogYCR7c2VyaWFsaXplQ2hpbGROb2Rlcyhub2RlLCBvcHRpb25zKX08LyR7dG59PmB9YDtcbn1cbmZ1bmN0aW9uIHNlcmlhbGl6ZUF0dHJpYnV0ZXMobm9kZSwgeyB0cmVlQWRhcHRlciB9KSB7XG4gICAgbGV0IGh0bWwgPSAnJztcbiAgICBmb3IgKGNvbnN0IGF0dHIgb2YgdHJlZUFkYXB0ZXIuZ2V0QXR0ckxpc3Qobm9kZSkpIHtcbiAgICAgICAgaHRtbCArPSAnICc7XG4gICAgICAgIGlmICghYXR0ci5uYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIGh0bWwgKz0gYXR0ci5uYW1lO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHN3aXRjaCAoYXR0ci5uYW1lc3BhY2UpIHtcbiAgICAgICAgICAgICAgICBjYXNlIGh0bWxfanNfMS5OUy5YTUw6IHtcbiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSBgeG1sOiR7YXR0ci5uYW1lfWA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIGh0bWxfanNfMS5OUy5YTUxOUzoge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXR0ci5uYW1lICE9PSAneG1sbnMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sICs9ICd4bWxuczonO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gYXR0ci5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBodG1sX2pzXzEuTlMuWExJTks6IHtcbiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSBgeGxpbms6JHthdHRyLm5hbWV9YDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSBgJHthdHRyLnByZWZpeH06JHthdHRyLm5hbWV9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIGh0bWwgKz0gYD1cIiR7KDAsIGVzY2FwZV9qc18xLmVzY2FwZUF0dHJpYnV0ZSkoYXR0ci52YWx1ZSl9XCJgO1xuICAgIH1cbiAgICByZXR1cm4gaHRtbDtcbn1cbmZ1bmN0aW9uIHNlcmlhbGl6ZVRleHROb2RlKG5vZGUsIG9wdGlvbnMpIHtcbiAgICBjb25zdCB7IHRyZWVBZGFwdGVyIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0cmVlQWRhcHRlci5nZXRUZXh0Tm9kZUNvbnRlbnQobm9kZSk7XG4gICAgY29uc3QgcGFyZW50ID0gdHJlZUFkYXB0ZXIuZ2V0UGFyZW50Tm9kZShub2RlKTtcbiAgICBjb25zdCBwYXJlbnRUbiA9IHBhcmVudCAmJiB0cmVlQWRhcHRlci5pc0VsZW1lbnROb2RlKHBhcmVudCkgJiYgdHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShwYXJlbnQpO1xuICAgIHJldHVybiBwYXJlbnRUbiAmJlxuICAgICAgICB0cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkocGFyZW50KSA9PT0gaHRtbF9qc18xLk5TLkhUTUwgJiZcbiAgICAgICAgKDAsIGh0bWxfanNfMS5oYXNVbmVzY2FwZWRUZXh0KShwYXJlbnRUbiwgb3B0aW9ucy5zY3JpcHRpbmdFbmFibGVkKVxuICAgICAgICA/IGNvbnRlbnRcbiAgICAgICAgOiAoMCwgZXNjYXBlX2pzXzEuZXNjYXBlVGV4dCkoY29udGVudCk7XG59XG5mdW5jdGlvbiBzZXJpYWxpemVDb21tZW50Tm9kZShub2RlLCB7IHRyZWVBZGFwdGVyIH0pIHtcbiAgICByZXR1cm4gYDwhLS0ke3RyZWVBZGFwdGVyLmdldENvbW1lbnROb2RlQ29udGVudChub2RlKX0tLT5gO1xufVxuZnVuY3Rpb24gc2VyaWFsaXplRG9jdW1lbnRUeXBlTm9kZShub2RlLCB7IHRyZWVBZGFwdGVyIH0pIHtcbiAgICByZXR1cm4gYDwhRE9DVFlQRSAke3RyZWVBZGFwdGVyLmdldERvY3VtZW50VHlwZU5vZGVOYW1lKG5vZGUpfT5gO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlRva2VuaXplciA9IGV4cG9ydHMuVG9rZW5pemVyTW9kZSA9IHZvaWQgMDtcbmNvbnN0IHByZXByb2Nlc3Nvcl9qc18xID0gcmVxdWlyZShcIi4vcHJlcHJvY2Vzc29yLmpzXCIpO1xuY29uc3QgdW5pY29kZV9qc18xID0gcmVxdWlyZShcIi4uL2NvbW1vbi91bmljb2RlLmpzXCIpO1xuY29uc3QgdG9rZW5fanNfMSA9IHJlcXVpcmUoXCIuLi9jb21tb24vdG9rZW4uanNcIik7XG5jb25zdCBkZWNvZGVfanNfMSA9IHJlcXVpcmUoXCJlbnRpdGllcy9saWIvZGVjb2RlLmpzXCIpO1xuY29uc3QgZXJyb3JfY29kZXNfanNfMSA9IHJlcXVpcmUoXCIuLi9jb21tb24vZXJyb3ItY29kZXMuanNcIik7XG5jb25zdCBodG1sX2pzXzEgPSByZXF1aXJlKFwiLi4vY29tbW9uL2h0bWwuanNcIik7XG4vL0MxIFVuaWNvZGUgY29udHJvbCBjaGFyYWN0ZXIgcmVmZXJlbmNlIHJlcGxhY2VtZW50c1xuY29uc3QgQzFfQ09OVFJPTFNfUkVGRVJFTkNFX1JFUExBQ0VNRU5UUyA9IG5ldyBNYXAoW1xuICAgIFsweDgwLCA4MzY0XSxcbiAgICBbMHg4MiwgODIxOF0sXG4gICAgWzB4ODMsIDQwMl0sXG4gICAgWzB4ODQsIDgyMjJdLFxuICAgIFsweDg1LCA4MjMwXSxcbiAgICBbMHg4NiwgODIyNF0sXG4gICAgWzB4ODcsIDgyMjVdLFxuICAgIFsweDg4LCA3MTBdLFxuICAgIFsweDg5LCA4MjQwXSxcbiAgICBbMHg4YSwgMzUyXSxcbiAgICBbMHg4YiwgODI0OV0sXG4gICAgWzB4OGMsIDMzOF0sXG4gICAgWzB4OGUsIDM4MV0sXG4gICAgWzB4OTEsIDgyMTZdLFxuICAgIFsweDkyLCA4MjE3XSxcbiAgICBbMHg5MywgODIyMF0sXG4gICAgWzB4OTQsIDgyMjFdLFxuICAgIFsweDk1LCA4MjI2XSxcbiAgICBbMHg5NiwgODIxMV0sXG4gICAgWzB4OTcsIDgyMTJdLFxuICAgIFsweDk4LCA3MzJdLFxuICAgIFsweDk5LCA4NDgyXSxcbiAgICBbMHg5YSwgMzUzXSxcbiAgICBbMHg5YiwgODI1MF0sXG4gICAgWzB4OWMsIDMzOV0sXG4gICAgWzB4OWUsIDM4Ml0sXG4gICAgWzB4OWYsIDM3Nl0sXG5dKTtcbi8vU3RhdGVzXG52YXIgU3RhdGU7XG4oZnVuY3Rpb24gKFN0YXRlKSB7XG4gICAgU3RhdGVbU3RhdGVbXCJEQVRBXCJdID0gMF0gPSBcIkRBVEFcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlJDREFUQVwiXSA9IDFdID0gXCJSQ0RBVEFcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlJBV1RFWFRcIl0gPSAyXSA9IFwiUkFXVEVYVFwiO1xuICAgIFN0YXRlW1N0YXRlW1wiU0NSSVBUX0RBVEFcIl0gPSAzXSA9IFwiU0NSSVBUX0RBVEFcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlBMQUlOVEVYVFwiXSA9IDRdID0gXCJQTEFJTlRFWFRcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlRBR19PUEVOXCJdID0gNV0gPSBcIlRBR19PUEVOXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJFTkRfVEFHX09QRU5cIl0gPSA2XSA9IFwiRU5EX1RBR19PUEVOXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJUQUdfTkFNRVwiXSA9IDddID0gXCJUQUdfTkFNRVwiO1xuICAgIFN0YXRlW1N0YXRlW1wiUkNEQVRBX0xFU1NfVEhBTl9TSUdOXCJdID0gOF0gPSBcIlJDREFUQV9MRVNTX1RIQU5fU0lHTlwiO1xuICAgIFN0YXRlW1N0YXRlW1wiUkNEQVRBX0VORF9UQUdfT1BFTlwiXSA9IDldID0gXCJSQ0RBVEFfRU5EX1RBR19PUEVOXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJSQ0RBVEFfRU5EX1RBR19OQU1FXCJdID0gMTBdID0gXCJSQ0RBVEFfRU5EX1RBR19OQU1FXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJSQVdURVhUX0xFU1NfVEhBTl9TSUdOXCJdID0gMTFdID0gXCJSQVdURVhUX0xFU1NfVEhBTl9TSUdOXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJSQVdURVhUX0VORF9UQUdfT1BFTlwiXSA9IDEyXSA9IFwiUkFXVEVYVF9FTkRfVEFHX09QRU5cIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlJBV1RFWFRfRU5EX1RBR19OQU1FXCJdID0gMTNdID0gXCJSQVdURVhUX0VORF9UQUdfTkFNRVwiO1xuICAgIFN0YXRlW1N0YXRlW1wiU0NSSVBUX0RBVEFfTEVTU19USEFOX1NJR05cIl0gPSAxNF0gPSBcIlNDUklQVF9EQVRBX0xFU1NfVEhBTl9TSUdOXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJTQ1JJUFRfREFUQV9FTkRfVEFHX09QRU5cIl0gPSAxNV0gPSBcIlNDUklQVF9EQVRBX0VORF9UQUdfT1BFTlwiO1xuICAgIFN0YXRlW1N0YXRlW1wiU0NSSVBUX0RBVEFfRU5EX1RBR19OQU1FXCJdID0gMTZdID0gXCJTQ1JJUFRfREFUQV9FTkRfVEFHX05BTUVcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlNDUklQVF9EQVRBX0VTQ0FQRV9TVEFSVFwiXSA9IDE3XSA9IFwiU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfREFTSFwiXSA9IDE4XSA9IFwiU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUX0RBU0hcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlNDUklQVF9EQVRBX0VTQ0FQRURcIl0gPSAxOV0gPSBcIlNDUklQVF9EQVRBX0VTQ0FQRURcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlNDUklQVF9EQVRBX0VTQ0FQRURfREFTSFwiXSA9IDIwXSA9IFwiU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJTQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfREFTSFwiXSA9IDIxXSA9IFwiU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIX0RBU0hcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlNDUklQVF9EQVRBX0VTQ0FQRURfTEVTU19USEFOX1NJR05cIl0gPSAyMl0gPSBcIlNDUklQVF9EQVRBX0VTQ0FQRURfTEVTU19USEFOX1NJR05cIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlNDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19PUEVOXCJdID0gMjNdID0gXCJTQ1JJUFRfREFUQV9FU0NBUEVEX0VORF9UQUdfT1BFTlwiO1xuICAgIFN0YXRlW1N0YXRlW1wiU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX05BTUVcIl0gPSAyNF0gPSBcIlNDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19OQU1FXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX1NUQVJUXCJdID0gMjVdID0gXCJTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX1NUQVJUXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRFwiXSA9IDI2XSA9IFwiU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0RBU0hcIl0gPSAyN10gPSBcIlNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0RBU0hcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0RBU0hfREFTSFwiXSA9IDI4XSA9IFwiU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSF9EQVNIXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTlwiXSA9IDI5XSA9IFwiU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfTEVTU19USEFOX1NJR05cIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfRU5EXCJdID0gMzBdID0gXCJTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX0VORFwiO1xuICAgIFN0YXRlW1N0YXRlW1wiQkVGT1JFX0FUVFJJQlVURV9OQU1FXCJdID0gMzFdID0gXCJCRUZPUkVfQVRUUklCVVRFX05BTUVcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkFUVFJJQlVURV9OQU1FXCJdID0gMzJdID0gXCJBVFRSSUJVVEVfTkFNRVwiO1xuICAgIFN0YXRlW1N0YXRlW1wiQUZURVJfQVRUUklCVVRFX05BTUVcIl0gPSAzM10gPSBcIkFGVEVSX0FUVFJJQlVURV9OQU1FXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJCRUZPUkVfQVRUUklCVVRFX1ZBTFVFXCJdID0gMzRdID0gXCJCRUZPUkVfQVRUUklCVVRFX1ZBTFVFXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJBVFRSSUJVVEVfVkFMVUVfRE9VQkxFX1FVT1RFRFwiXSA9IDM1XSA9IFwiQVRUUklCVVRFX1ZBTFVFX0RPVUJMRV9RVU9URURcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkFUVFJJQlVURV9WQUxVRV9TSU5HTEVfUVVPVEVEXCJdID0gMzZdID0gXCJBVFRSSUJVVEVfVkFMVUVfU0lOR0xFX1FVT1RFRFwiO1xuICAgIFN0YXRlW1N0YXRlW1wiQVRUUklCVVRFX1ZBTFVFX1VOUVVPVEVEXCJdID0gMzddID0gXCJBVFRSSUJVVEVfVkFMVUVfVU5RVU9URURcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkFGVEVSX0FUVFJJQlVURV9WQUxVRV9RVU9URURcIl0gPSAzOF0gPSBcIkFGVEVSX0FUVFJJQlVURV9WQUxVRV9RVU9URURcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlNFTEZfQ0xPU0lOR19TVEFSVF9UQUdcIl0gPSAzOV0gPSBcIlNFTEZfQ0xPU0lOR19TVEFSVF9UQUdcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkJPR1VTX0NPTU1FTlRcIl0gPSA0MF0gPSBcIkJPR1VTX0NPTU1FTlRcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIk1BUktVUF9ERUNMQVJBVElPTl9PUEVOXCJdID0gNDFdID0gXCJNQVJLVVBfREVDTEFSQVRJT05fT1BFTlwiO1xuICAgIFN0YXRlW1N0YXRlW1wiQ09NTUVOVF9TVEFSVFwiXSA9IDQyXSA9IFwiQ09NTUVOVF9TVEFSVFwiO1xuICAgIFN0YXRlW1N0YXRlW1wiQ09NTUVOVF9TVEFSVF9EQVNIXCJdID0gNDNdID0gXCJDT01NRU5UX1NUQVJUX0RBU0hcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkNPTU1FTlRcIl0gPSA0NF0gPSBcIkNPTU1FTlRcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkNPTU1FTlRfTEVTU19USEFOX1NJR05cIl0gPSA0NV0gPSBcIkNPTU1FTlRfTEVTU19USEFOX1NJR05cIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkNPTU1FTlRfTEVTU19USEFOX1NJR05fQkFOR1wiXSA9IDQ2XSA9IFwiQ09NTUVOVF9MRVNTX1RIQU5fU0lHTl9CQU5HXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJDT01NRU5UX0xFU1NfVEhBTl9TSUdOX0JBTkdfREFTSFwiXSA9IDQ3XSA9IFwiQ09NTUVOVF9MRVNTX1RIQU5fU0lHTl9CQU5HX0RBU0hcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkNPTU1FTlRfTEVTU19USEFOX1NJR05fQkFOR19EQVNIX0RBU0hcIl0gPSA0OF0gPSBcIkNPTU1FTlRfTEVTU19USEFOX1NJR05fQkFOR19EQVNIX0RBU0hcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkNPTU1FTlRfRU5EX0RBU0hcIl0gPSA0OV0gPSBcIkNPTU1FTlRfRU5EX0RBU0hcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkNPTU1FTlRfRU5EXCJdID0gNTBdID0gXCJDT01NRU5UX0VORFwiO1xuICAgIFN0YXRlW1N0YXRlW1wiQ09NTUVOVF9FTkRfQkFOR1wiXSA9IDUxXSA9IFwiQ09NTUVOVF9FTkRfQkFOR1wiO1xuICAgIFN0YXRlW1N0YXRlW1wiRE9DVFlQRVwiXSA9IDUyXSA9IFwiRE9DVFlQRVwiO1xuICAgIFN0YXRlW1N0YXRlW1wiQkVGT1JFX0RPQ1RZUEVfTkFNRVwiXSA9IDUzXSA9IFwiQkVGT1JFX0RPQ1RZUEVfTkFNRVwiO1xuICAgIFN0YXRlW1N0YXRlW1wiRE9DVFlQRV9OQU1FXCJdID0gNTRdID0gXCJET0NUWVBFX05BTUVcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkFGVEVSX0RPQ1RZUEVfTkFNRVwiXSA9IDU1XSA9IFwiQUZURVJfRE9DVFlQRV9OQU1FXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJBRlRFUl9ET0NUWVBFX1BVQkxJQ19LRVlXT1JEXCJdID0gNTZdID0gXCJBRlRFUl9ET0NUWVBFX1BVQkxJQ19LRVlXT1JEXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJCRUZPUkVfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUlwiXSA9IDU3XSA9IFwiQkVGT1JFX0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkRPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRFwiXSA9IDU4XSA9IFwiRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NJTkdMRV9RVU9URURcIl0gPSA1OV0gPSBcIkRPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRFwiO1xuICAgIFN0YXRlW1N0YXRlW1wiQUZURVJfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUlwiXSA9IDYwXSA9IFwiQUZURVJfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUlwiO1xuICAgIFN0YXRlW1N0YXRlW1wiQkVUV0VFTl9ET0NUWVBFX1BVQkxJQ19BTkRfU1lTVEVNX0lERU5USUZJRVJTXCJdID0gNjFdID0gXCJCRVRXRUVOX0RPQ1RZUEVfUFVCTElDX0FORF9TWVNURU1fSURFTlRJRklFUlNcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkFGVEVSX0RPQ1RZUEVfU1lTVEVNX0tFWVdPUkRcIl0gPSA2Ml0gPSBcIkFGVEVSX0RPQ1RZUEVfU1lTVEVNX0tFWVdPUkRcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkJFRk9SRV9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSXCJdID0gNjNdID0gXCJCRUZPUkVfRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUlwiO1xuICAgIFN0YXRlW1N0YXRlW1wiRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEXCJdID0gNjRdID0gXCJET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX0RPVUJMRV9RVU9URURcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkRPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRFwiXSA9IDY1XSA9IFwiRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJBRlRFUl9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSXCJdID0gNjZdID0gXCJBRlRFUl9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJCT0dVU19ET0NUWVBFXCJdID0gNjddID0gXCJCT0dVU19ET0NUWVBFXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJDREFUQV9TRUNUSU9OXCJdID0gNjhdID0gXCJDREFUQV9TRUNUSU9OXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJDREFUQV9TRUNUSU9OX0JSQUNLRVRcIl0gPSA2OV0gPSBcIkNEQVRBX1NFQ1RJT05fQlJBQ0tFVFwiO1xuICAgIFN0YXRlW1N0YXRlW1wiQ0RBVEFfU0VDVElPTl9FTkRcIl0gPSA3MF0gPSBcIkNEQVRBX1NFQ1RJT05fRU5EXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJDSEFSQUNURVJfUkVGRVJFTkNFXCJdID0gNzFdID0gXCJDSEFSQUNURVJfUkVGRVJFTkNFXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJOQU1FRF9DSEFSQUNURVJfUkVGRVJFTkNFXCJdID0gNzJdID0gXCJOQU1FRF9DSEFSQUNURVJfUkVGRVJFTkNFXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJBTUJJR1VPVVNfQU1QRVJTQU5EXCJdID0gNzNdID0gXCJBTUJJR1VPVVNfQU1QRVJTQU5EXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJOVU1FUklDX0NIQVJBQ1RFUl9SRUZFUkVOQ0VcIl0gPSA3NF0gPSBcIk5VTUVSSUNfQ0hBUkFDVEVSX1JFRkVSRU5DRVwiO1xuICAgIFN0YXRlW1N0YXRlW1wiSEVYQURFTUlDQUxfQ0hBUkFDVEVSX1JFRkVSRU5DRV9TVEFSVFwiXSA9IDc1XSA9IFwiSEVYQURFTUlDQUxfQ0hBUkFDVEVSX1JFRkVSRU5DRV9TVEFSVFwiO1xuICAgIFN0YXRlW1N0YXRlW1wiSEVYQURFTUlDQUxfQ0hBUkFDVEVSX1JFRkVSRU5DRVwiXSA9IDc2XSA9IFwiSEVYQURFTUlDQUxfQ0hBUkFDVEVSX1JFRkVSRU5DRVwiO1xuICAgIFN0YXRlW1N0YXRlW1wiREVDSU1BTF9DSEFSQUNURVJfUkVGRVJFTkNFXCJdID0gNzddID0gXCJERUNJTUFMX0NIQVJBQ1RFUl9SRUZFUkVOQ0VcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIk5VTUVSSUNfQ0hBUkFDVEVSX1JFRkVSRU5DRV9FTkRcIl0gPSA3OF0gPSBcIk5VTUVSSUNfQ0hBUkFDVEVSX1JFRkVSRU5DRV9FTkRcIjtcbn0pKFN0YXRlIHx8IChTdGF0ZSA9IHt9KSk7XG4vL1Rva2VuaXplciBpbml0aWFsIHN0YXRlcyBmb3IgZGlmZmVyZW50IG1vZGVzXG5leHBvcnRzLlRva2VuaXplck1vZGUgPSB7XG4gICAgREFUQTogU3RhdGUuREFUQSxcbiAgICBSQ0RBVEE6IFN0YXRlLlJDREFUQSxcbiAgICBSQVdURVhUOiBTdGF0ZS5SQVdURVhULFxuICAgIFNDUklQVF9EQVRBOiBTdGF0ZS5TQ1JJUFRfREFUQSxcbiAgICBQTEFJTlRFWFQ6IFN0YXRlLlBMQUlOVEVYVCxcbiAgICBDREFUQV9TRUNUSU9OOiBTdGF0ZS5DREFUQV9TRUNUSU9OLFxufTtcbi8vVXRpbHNcbi8vT1BUSU1JWkFUSU9OOiB0aGVzZSB1dGlsaXR5IGZ1bmN0aW9ucyBzaG91bGQgbm90IGJlIG1vdmVkIG91dCBvZiB0aGlzIG1vZHVsZS4gVjggQ3JhbmtzaGFmdCB3aWxsIG5vdCBpbmxpbmVcbi8vdGhpcyBmdW5jdGlvbnMgaWYgdGhleSB3aWxsIGJlIHNpdHVhdGVkIGluIGFub3RoZXIgbW9kdWxlIGR1ZSB0byBjb250ZXh0IHN3aXRjaC5cbi8vQWx3YXlzIHBlcmZvcm0gaW5saW5pbmcgY2hlY2sgYmVmb3JlIG1vZGlmeWluZyB0aGlzIGZ1bmN0aW9ucyAoJ25vZGUgLS10cmFjZS1pbmxpbmluZycpLlxuZnVuY3Rpb24gaXNBc2NpaURpZ2l0KGNwKSB7XG4gICAgcmV0dXJuIGNwID49IHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5ESUdJVF8wICYmIGNwIDw9IHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5ESUdJVF85O1xufVxuZnVuY3Rpb24gaXNBc2NpaVVwcGVyKGNwKSB7XG4gICAgcmV0dXJuIGNwID49IHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5MQVRJTl9DQVBJVEFMX0EgJiYgY3AgPD0gdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkxBVElOX0NBUElUQUxfWjtcbn1cbmZ1bmN0aW9uIGlzQXNjaWlMb3dlcihjcCkge1xuICAgIHJldHVybiBjcCA+PSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuTEFUSU5fU01BTExfQSAmJiBjcCA8PSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuTEFUSU5fU01BTExfWjtcbn1cbmZ1bmN0aW9uIGlzQXNjaWlMZXR0ZXIoY3ApIHtcbiAgICByZXR1cm4gaXNBc2NpaUxvd2VyKGNwKSB8fCBpc0FzY2lpVXBwZXIoY3ApO1xufVxuZnVuY3Rpb24gaXNBc2NpaUFscGhhTnVtZXJpYyhjcCkge1xuICAgIHJldHVybiBpc0FzY2lpTGV0dGVyKGNwKSB8fCBpc0FzY2lpRGlnaXQoY3ApO1xufVxuZnVuY3Rpb24gaXNBc2NpaVVwcGVySGV4RGlnaXQoY3ApIHtcbiAgICByZXR1cm4gY3AgPj0gdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkxBVElOX0NBUElUQUxfQSAmJiBjcCA8PSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuTEFUSU5fQ0FQSVRBTF9GO1xufVxuZnVuY3Rpb24gaXNBc2NpaUxvd2VySGV4RGlnaXQoY3ApIHtcbiAgICByZXR1cm4gY3AgPj0gdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkxBVElOX1NNQUxMX0EgJiYgY3AgPD0gdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkxBVElOX1NNQUxMX0Y7XG59XG5mdW5jdGlvbiBpc0FzY2lpSGV4RGlnaXQoY3ApIHtcbiAgICByZXR1cm4gaXNBc2NpaURpZ2l0KGNwKSB8fCBpc0FzY2lpVXBwZXJIZXhEaWdpdChjcCkgfHwgaXNBc2NpaUxvd2VySGV4RGlnaXQoY3ApO1xufVxuZnVuY3Rpb24gdG9Bc2NpaUxvd2VyKGNwKSB7XG4gICAgcmV0dXJuIGNwICsgMzI7XG59XG5mdW5jdGlvbiBpc1doaXRlc3BhY2UoY3ApIHtcbiAgICByZXR1cm4gY3AgPT09IHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5TUEFDRSB8fCBjcCA9PT0gdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkxJTkVfRkVFRCB8fCBjcCA9PT0gdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLlRBQlVMQVRJT04gfHwgY3AgPT09IHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5GT1JNX0ZFRUQ7XG59XG5mdW5jdGlvbiBpc0VudGl0eUluQXR0cmlidXRlSW52YWxpZEVuZChuZXh0Q3ApIHtcbiAgICByZXR1cm4gbmV4dENwID09PSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuRVFVQUxTX1NJR04gfHwgaXNBc2NpaUFscGhhTnVtZXJpYyhuZXh0Q3ApO1xufVxuZnVuY3Rpb24gaXNTY3JpcHREYXRhRG91YmxlRXNjYXBlU2VxdWVuY2VFbmQoY3ApIHtcbiAgICByZXR1cm4gaXNXaGl0ZXNwYWNlKGNwKSB8fCBjcCA9PT0gdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLlNPTElEVVMgfHwgY3AgPT09IHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5HUkVBVEVSX1RIQU5fU0lHTjtcbn1cbi8vVG9rZW5pemVyXG5jbGFzcyBUb2tlbml6ZXIge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlcjtcbiAgICAgICAgdGhpcy5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgLyoqIEVuc3VyZXMgdGhhdCB0aGUgcGFyc2luZyBsb29wIGlzbid0IHJ1biBtdWx0aXBsZSB0aW1lcyBhdCBvbmNlLiAqL1xuICAgICAgICB0aGlzLmluTG9vcCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGN1cnJlbnQgYWRqdXN0ZWQgbm9kZSBleGlzdHMsIGlzIG5vdCBhbiBlbGVtZW50IGluIHRoZSBIVE1MIG5hbWVzcGFjZSxcbiAgICAgICAgICogYW5kIHRoYXQgaXQgaXMgbm90IGFuIGludGVncmF0aW9uIHBvaW50IGZvciBlaXRoZXIgTWF0aE1MIG9yIEhUTUwuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3BhcnNpbmcuaHRtbCN0cmVlLWNvbnN0cnVjdGlvbn1cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaW5Gb3JlaWduTm9kZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxhc3RTdGFydFRhZ05hbWUgPSAnJztcbiAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgIHRoaXMucmV0dXJuU3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICB0aGlzLmNoYXJSZWZDb2RlID0gLTE7XG4gICAgICAgIHRoaXMuY29uc3VtZWRBZnRlclNuYXBzaG90ID0gLTE7XG4gICAgICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuID0gbnVsbDtcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4gPSBudWxsO1xuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyID0geyBuYW1lOiAnJywgdmFsdWU6ICcnIH07XG4gICAgICAgIHRoaXMucHJlcHJvY2Vzc29yID0gbmV3IHByZXByb2Nlc3Nvcl9qc18xLlByZXByb2Nlc3NvcihoYW5kbGVyKTtcbiAgICAgICAgdGhpcy5jdXJyZW50TG9jYXRpb24gPSB0aGlzLmdldEN1cnJlbnRMb2NhdGlvbigtMSk7XG4gICAgfVxuICAgIC8vRXJyb3JzXG4gICAgX2Vycihjb2RlKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuaGFuZGxlcikub25QYXJzZUVycm9yKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgdGhpcy5wcmVwcm9jZXNzb3IuZ2V0RXJyb3IoY29kZSkpO1xuICAgIH1cbiAgICAvLyBOT1RFOiBgb2Zmc2V0YCBtYXkgbmV2ZXIgcnVuIGFjcm9zcyBsaW5lIGJvdW5kYXJpZXMuXG4gICAgZ2V0Q3VycmVudExvY2F0aW9uKG9mZnNldCkge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5zb3VyY2VDb2RlTG9jYXRpb25JbmZvKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhcnRMaW5lOiB0aGlzLnByZXByb2Nlc3Nvci5saW5lLFxuICAgICAgICAgICAgc3RhcnRDb2w6IHRoaXMucHJlcHJvY2Vzc29yLmNvbCAtIG9mZnNldCxcbiAgICAgICAgICAgIHN0YXJ0T2Zmc2V0OiB0aGlzLnByZXByb2Nlc3Nvci5vZmZzZXQgLSBvZmZzZXQsXG4gICAgICAgICAgICBlbmRMaW5lOiAtMSxcbiAgICAgICAgICAgIGVuZENvbDogLTEsXG4gICAgICAgICAgICBlbmRPZmZzZXQ6IC0xLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBfcnVuUGFyc2luZ0xvb3AoKSB7XG4gICAgICAgIGlmICh0aGlzLmluTG9vcClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5pbkxvb3AgPSB0cnVlO1xuICAgICAgICB3aGlsZSAodGhpcy5hY3RpdmUgJiYgIXRoaXMucGF1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnN1bWVkQWZ0ZXJTbmFwc2hvdCA9IDA7XG4gICAgICAgICAgICBjb25zdCBjcCA9IHRoaXMuX2NvbnN1bWUoKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5fZW5zdXJlSGliZXJuYXRpb24oKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxTdGF0ZShjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbkxvb3AgPSBmYWxzZTtcbiAgICB9XG4gICAgLy9BUElcbiAgICBwYXVzZSgpIHtcbiAgICAgICAgdGhpcy5wYXVzZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXN1bWUod3JpdGVDYWxsYmFjaykge1xuICAgICAgICBpZiAoIXRoaXMucGF1c2VkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcnNlciB3YXMgYWxyZWFkeSByZXN1bWVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgLy8gTmVjZXNzYXJ5IGZvciBzeW5jaHJvbm91cyByZXN1bWUuXG4gICAgICAgIGlmICh0aGlzLmluTG9vcClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5fcnVuUGFyc2luZ0xvb3AoKTtcbiAgICAgICAgaWYgKCF0aGlzLnBhdXNlZCkge1xuICAgICAgICAgICAgd3JpdGVDYWxsYmFjayA9PT0gbnVsbCB8fCB3cml0ZUNhbGxiYWNrID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3cml0ZUNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgd3JpdGUoY2h1bmssIGlzTGFzdENodW5rLCB3cml0ZUNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzb3Iud3JpdGUoY2h1bmssIGlzTGFzdENodW5rKTtcbiAgICAgICAgdGhpcy5fcnVuUGFyc2luZ0xvb3AoKTtcbiAgICAgICAgaWYgKCF0aGlzLnBhdXNlZCkge1xuICAgICAgICAgICAgd3JpdGVDYWxsYmFjayA9PT0gbnVsbCB8fCB3cml0ZUNhbGxiYWNrID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3cml0ZUNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaW5zZXJ0SHRtbEF0Q3VycmVudFBvcyhjaHVuaykge1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMucHJlcHJvY2Vzc29yLmluc2VydEh0bWxBdEN1cnJlbnRQb3MoY2h1bmspO1xuICAgICAgICB0aGlzLl9ydW5QYXJzaW5nTG9vcCgpO1xuICAgIH1cbiAgICAvL0hpYmVybmF0aW9uXG4gICAgX2Vuc3VyZUhpYmVybmF0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5wcmVwcm9jZXNzb3IuZW5kT2ZDaHVua0hpdCkge1xuICAgICAgICAgICAgdGhpcy5fdW5jb25zdW1lKHRoaXMuY29uc3VtZWRBZnRlclNuYXBzaG90KTtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vQ29uc3VtcHRpb25cbiAgICBfY29uc3VtZSgpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lZEFmdGVyU25hcHNob3QrKztcbiAgICAgICAgcmV0dXJuIHRoaXMucHJlcHJvY2Vzc29yLmFkdmFuY2UoKTtcbiAgICB9XG4gICAgX3VuY29uc3VtZShjb3VudCkge1xuICAgICAgICB0aGlzLmNvbnN1bWVkQWZ0ZXJTbmFwc2hvdCAtPSBjb3VudDtcbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzb3IucmV0cmVhdChjb3VudCk7XG4gICAgfVxuICAgIF9yZWNvbnN1bWVJblN0YXRlKHN0YXRlLCBjcCkge1xuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIHRoaXMuX2NhbGxTdGF0ZShjcCk7XG4gICAgfVxuICAgIF9hZHZhbmNlQnkoY291bnQpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lZEFmdGVyU25hcHNob3QgKz0gY291bnQ7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5wcmVwcm9jZXNzb3IuYWR2YW5jZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9jb25zdW1lU2VxdWVuY2VJZk1hdGNoKHBhdHRlcm4sIGNhc2VTZW5zaXRpdmUpIHtcbiAgICAgICAgaWYgKHRoaXMucHJlcHJvY2Vzc29yLnN0YXJ0c1dpdGgocGF0dGVybiwgY2FzZVNlbnNpdGl2ZSkpIHtcbiAgICAgICAgICAgIC8vIFdlIHdpbGwgYWxyZWFkeSBoYXZlIGNvbnN1bWVkIG9uZSBjaGFyYWN0ZXIgYmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRob2QuXG4gICAgICAgICAgICB0aGlzLl9hZHZhbmNlQnkocGF0dGVybi5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy9Ub2tlbiBjcmVhdGlvblxuICAgIF9jcmVhdGVTdGFydFRhZ1Rva2VuKCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IHtcbiAgICAgICAgICAgIHR5cGU6IHRva2VuX2pzXzEuVG9rZW5UeXBlLlNUQVJUX1RBRyxcbiAgICAgICAgICAgIHRhZ05hbWU6ICcnLFxuICAgICAgICAgICAgdGFnSUQ6IGh0bWxfanNfMS5UQUdfSUQuVU5LTk9XTixcbiAgICAgICAgICAgIHNlbGZDbG9zaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGFja1NlbGZDbG9zaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGF0dHJzOiBbXSxcbiAgICAgICAgICAgIGxvY2F0aW9uOiB0aGlzLmdldEN1cnJlbnRMb2NhdGlvbigxKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX2NyZWF0ZUVuZFRhZ1Rva2VuKCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IHtcbiAgICAgICAgICAgIHR5cGU6IHRva2VuX2pzXzEuVG9rZW5UeXBlLkVORF9UQUcsXG4gICAgICAgICAgICB0YWdOYW1lOiAnJyxcbiAgICAgICAgICAgIHRhZ0lEOiBodG1sX2pzXzEuVEFHX0lELlVOS05PV04sXG4gICAgICAgICAgICBzZWxmQ2xvc2luZzogZmFsc2UsXG4gICAgICAgICAgICBhY2tTZWxmQ2xvc2luZzogZmFsc2UsXG4gICAgICAgICAgICBhdHRyczogW10sXG4gICAgICAgICAgICBsb2NhdGlvbjogdGhpcy5nZXRDdXJyZW50TG9jYXRpb24oMiksXG4gICAgICAgIH07XG4gICAgfVxuICAgIF9jcmVhdGVDb21tZW50VG9rZW4ob2Zmc2V0KSB7XG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuID0ge1xuICAgICAgICAgICAgdHlwZTogdG9rZW5fanNfMS5Ub2tlblR5cGUuQ09NTUVOVCxcbiAgICAgICAgICAgIGRhdGE6ICcnLFxuICAgICAgICAgICAgbG9jYXRpb246IHRoaXMuZ2V0Q3VycmVudExvY2F0aW9uKG9mZnNldCksXG4gICAgICAgIH07XG4gICAgfVxuICAgIF9jcmVhdGVEb2N0eXBlVG9rZW4oaW5pdGlhbE5hbWUpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4gPSB7XG4gICAgICAgICAgICB0eXBlOiB0b2tlbl9qc18xLlRva2VuVHlwZS5ET0NUWVBFLFxuICAgICAgICAgICAgbmFtZTogaW5pdGlhbE5hbWUsXG4gICAgICAgICAgICBmb3JjZVF1aXJrczogZmFsc2UsXG4gICAgICAgICAgICBwdWJsaWNJZDogbnVsbCxcbiAgICAgICAgICAgIHN5c3RlbUlkOiBudWxsLFxuICAgICAgICAgICAgbG9jYXRpb246IHRoaXMuY3VycmVudExvY2F0aW9uLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBfY3JlYXRlQ2hhcmFjdGVyVG9rZW4odHlwZSwgY2hhcnMpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4gPSB7XG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgY2hhcnMsXG4gICAgICAgICAgICBsb2NhdGlvbjogdGhpcy5jdXJyZW50TG9jYXRpb24sXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vVGFnIGF0dHJpYnV0ZXNcbiAgICBfY3JlYXRlQXR0cihhdHRyTmFtZUZpcnN0Q2gpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ciA9IHtcbiAgICAgICAgICAgIG5hbWU6IGF0dHJOYW1lRmlyc3RDaCxcbiAgICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5jdXJyZW50TG9jYXRpb24gPSB0aGlzLmdldEN1cnJlbnRMb2NhdGlvbigwKTtcbiAgICB9XG4gICAgX2xlYXZlQXR0ck5hbWUoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdmFyIF9iO1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICBpZiAoKDAsIHRva2VuX2pzXzEuZ2V0VG9rZW5BdHRyKSh0b2tlbiwgdGhpcy5jdXJyZW50QXR0ci5uYW1lKSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdG9rZW4uYXR0cnMucHVzaCh0aGlzLmN1cnJlbnRBdHRyKTtcbiAgICAgICAgICAgIGlmICh0b2tlbi5sb2NhdGlvbiAmJiB0aGlzLmN1cnJlbnRMb2NhdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJMb2NhdGlvbnMgPSAoKF9hID0gKF9iID0gdG9rZW4ubG9jYXRpb24pLmF0dHJzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoX2IuYXR0cnMgPSBPYmplY3QuY3JlYXRlKG51bGwpKSk7XG4gICAgICAgICAgICAgICAgYXR0ckxvY2F0aW9uc1t0aGlzLmN1cnJlbnRBdHRyLm5hbWVdID0gdGhpcy5jdXJyZW50TG9jYXRpb247XG4gICAgICAgICAgICAgICAgLy8gU2V0IGVuZCBsb2NhdGlvblxuICAgICAgICAgICAgICAgIHRoaXMuX2xlYXZlQXR0clZhbHVlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIuZHVwbGljYXRlQXR0cmlidXRlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfbGVhdmVBdHRyVmFsdWUoKSB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRMb2NhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50TG9jYXRpb24uZW5kTGluZSA9IHRoaXMucHJlcHJvY2Vzc29yLmxpbmU7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMb2NhdGlvbi5lbmRDb2wgPSB0aGlzLnByZXByb2Nlc3Nvci5jb2w7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMb2NhdGlvbi5lbmRPZmZzZXQgPSB0aGlzLnByZXByb2Nlc3Nvci5vZmZzZXQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy9Ub2tlbiBlbWlzc2lvblxuICAgIHByZXBhcmVUb2tlbihjdCkge1xuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudENoYXJhY3RlclRva2VuKGN0LmxvY2F0aW9uKTtcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4gPSBudWxsO1xuICAgICAgICBpZiAoY3QubG9jYXRpb24pIHtcbiAgICAgICAgICAgIGN0LmxvY2F0aW9uLmVuZExpbmUgPSB0aGlzLnByZXByb2Nlc3Nvci5saW5lO1xuICAgICAgICAgICAgY3QubG9jYXRpb24uZW5kQ29sID0gdGhpcy5wcmVwcm9jZXNzb3IuY29sICsgMTtcbiAgICAgICAgICAgIGN0LmxvY2F0aW9uLmVuZE9mZnNldCA9IHRoaXMucHJlcHJvY2Vzc29yLm9mZnNldCArIDE7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50TG9jYXRpb24gPSB0aGlzLmdldEN1cnJlbnRMb2NhdGlvbigtMSk7XG4gICAgfVxuICAgIGVtaXRDdXJyZW50VGFnVG9rZW4oKSB7XG4gICAgICAgIGNvbnN0IGN0ID0gdGhpcy5jdXJyZW50VG9rZW47XG4gICAgICAgIHRoaXMucHJlcGFyZVRva2VuKGN0KTtcbiAgICAgICAgY3QudGFnSUQgPSAoMCwgaHRtbF9qc18xLmdldFRhZ0lEKShjdC50YWdOYW1lKTtcbiAgICAgICAgaWYgKGN0LnR5cGUgPT09IHRva2VuX2pzXzEuVG9rZW5UeXBlLlNUQVJUX1RBRykge1xuICAgICAgICAgICAgdGhpcy5sYXN0U3RhcnRUYWdOYW1lID0gY3QudGFnTmFtZTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlci5vblN0YXJ0VGFnKGN0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChjdC5hdHRycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLmVuZFRhZ1dpdGhBdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjdC5zZWxmQ2xvc2luZykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi5lbmRUYWdXaXRoVHJhaWxpbmdTb2xpZHVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaGFuZGxlci5vbkVuZFRhZyhjdCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzb3IuZHJvcFBhcnNlZENodW5rKCk7XG4gICAgfVxuICAgIGVtaXRDdXJyZW50Q29tbWVudChjdCkge1xuICAgICAgICB0aGlzLnByZXBhcmVUb2tlbihjdCk7XG4gICAgICAgIHRoaXMuaGFuZGxlci5vbkNvbW1lbnQoY3QpO1xuICAgICAgICB0aGlzLnByZXByb2Nlc3Nvci5kcm9wUGFyc2VkQ2h1bmsoKTtcbiAgICB9XG4gICAgZW1pdEN1cnJlbnREb2N0eXBlKGN0KSB7XG4gICAgICAgIHRoaXMucHJlcGFyZVRva2VuKGN0KTtcbiAgICAgICAgdGhpcy5oYW5kbGVyLm9uRG9jdHlwZShjdCk7XG4gICAgICAgIHRoaXMucHJlcHJvY2Vzc29yLmRyb3BQYXJzZWRDaHVuaygpO1xuICAgIH1cbiAgICBfZW1pdEN1cnJlbnRDaGFyYWN0ZXJUb2tlbihuZXh0TG9jYXRpb24pIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuKSB7XG4gICAgICAgICAgICAvL05PVEU6IGlmIHdlIGhhdmUgYSBwZW5kaW5nIGNoYXJhY3RlciB0b2tlbiwgbWFrZSBpdCdzIGVuZCBsb2NhdGlvbiBlcXVhbCB0byB0aGVcbiAgICAgICAgICAgIC8vY3VycmVudCB0b2tlbidzIHN0YXJ0IGxvY2F0aW9uLlxuICAgICAgICAgICAgaWYgKG5leHRMb2NhdGlvbiAmJiB0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbi5sb2NhdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuLmxvY2F0aW9uLmVuZExpbmUgPSBuZXh0TG9jYXRpb24uc3RhcnRMaW5lO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuLmxvY2F0aW9uLmVuZENvbCA9IG5leHRMb2NhdGlvbi5zdGFydENvbDtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbi5sb2NhdGlvbi5lbmRPZmZzZXQgPSBuZXh0TG9jYXRpb24uc3RhcnRPZmZzZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuLnR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIHRva2VuX2pzXzEuVG9rZW5UeXBlLkNIQVJBQ1RFUjoge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZXIub25DaGFyYWN0ZXIodGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSB0b2tlbl9qc18xLlRva2VuVHlwZS5OVUxMX0NIQVJBQ1RFUjoge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZXIub25OdWxsQ2hhcmFjdGVyKHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgdG9rZW5fanNfMS5Ub2tlblR5cGUuV0hJVEVTUEFDRV9DSEFSQUNURVI6IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVyLm9uV2hpdGVzcGFjZUNoYXJhY3Rlcih0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfZW1pdEVPRlRva2VuKCkge1xuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHRoaXMuZ2V0Q3VycmVudExvY2F0aW9uKDApO1xuICAgICAgICBpZiAobG9jYXRpb24pIHtcbiAgICAgICAgICAgIGxvY2F0aW9uLmVuZExpbmUgPSBsb2NhdGlvbi5zdGFydExpbmU7XG4gICAgICAgICAgICBsb2NhdGlvbi5lbmRDb2wgPSBsb2NhdGlvbi5zdGFydENvbDtcbiAgICAgICAgICAgIGxvY2F0aW9uLmVuZE9mZnNldCA9IGxvY2F0aW9uLnN0YXJ0T2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50Q2hhcmFjdGVyVG9rZW4obG9jYXRpb24pO1xuICAgICAgICB0aGlzLmhhbmRsZXIub25Fb2YoeyB0eXBlOiB0b2tlbl9qc18xLlRva2VuVHlwZS5FT0YsIGxvY2F0aW9uIH0pO1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgIH1cbiAgICAvL0NoYXJhY3RlcnMgZW1pc3Npb25cbiAgICAvL09QVElNSVpBVElPTjogc3BlY2lmaWNhdGlvbiB1c2VzIG9ubHkgb25lIHR5cGUgb2YgY2hhcmFjdGVyIHRva2VucyAob25lIHRva2VuIHBlciBjaGFyYWN0ZXIpLlxuICAgIC8vVGhpcyBjYXVzZXMgYSBodWdlIG1lbW9yeSBvdmVyaGVhZCBhbmQgYSBsb3Qgb2YgdW5uZWNlc3NhcnkgcGFyc2VyIGxvb3BzLiBwYXJzZTUgdXNlcyAzIGdyb3VwcyBvZiBjaGFyYWN0ZXJzLlxuICAgIC8vSWYgd2UgaGF2ZSBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgdGhhdCBiZWxvbmcgdG8gdGhlIHNhbWUgZ3JvdXAsIHRoZSBwYXJzZXIgY2FuIHByb2Nlc3MgaXRcbiAgICAvL2FzIGEgc2luZ2xlIHNvbGlkIGNoYXJhY3RlciB0b2tlbi5cbiAgICAvL1NvLCB0aGVyZSBhcmUgMyB0eXBlcyBvZiBjaGFyYWN0ZXIgdG9rZW5zIGluIHBhcnNlNTpcbiAgICAvLzEpVG9rZW5UeXBlLk5VTExfQ0hBUkFDVEVSIC0gXFx1MDAwMC1jaGFyYWN0ZXIgc2VxdWVuY2VzIChlLmcuICdcXHUwMDAwXFx1MDAwMFxcdTAwMDAnKVxuICAgIC8vMilUb2tlblR5cGUuV0hJVEVTUEFDRV9DSEFSQUNURVIgLSBhbnkgd2hpdGVzcGFjZS9uZXctbGluZSBjaGFyYWN0ZXIgc2VxdWVuY2VzIChlLmcuICdcXG4gIFxcclxcdCAgIFxcZicpXG4gICAgLy8zKVRva2VuVHlwZS5DSEFSQUNURVIgLSBhbnkgY2hhcmFjdGVyIHNlcXVlbmNlIHdoaWNoIGRvbid0IGJlbG9uZyB0byBncm91cHMgMSBhbmQgMiAoZS5nLiAnYWJjZGVmMTIzNEBAIyQlXicpXG4gICAgX2FwcGVuZENoYXJUb0N1cnJlbnRDaGFyYWN0ZXJUb2tlbih0eXBlLCBjaCkge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbi50eXBlICE9PSB0eXBlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TG9jYXRpb24gPSB0aGlzLmdldEN1cnJlbnRMb2NhdGlvbigwKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q3VycmVudENoYXJhY3RlclRva2VuKHRoaXMuY3VycmVudExvY2F0aW9uKTtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXByb2Nlc3Nvci5kcm9wUGFyc2VkQ2h1bmsoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuLmNoYXJzICs9IGNoO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jcmVhdGVDaGFyYWN0ZXJUb2tlbih0eXBlLCBjaCk7XG4gICAgfVxuICAgIF9lbWl0Q29kZVBvaW50KGNwKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBpc1doaXRlc3BhY2UoY3ApXG4gICAgICAgICAgICA/IHRva2VuX2pzXzEuVG9rZW5UeXBlLldISVRFU1BBQ0VfQ0hBUkFDVEVSXG4gICAgICAgICAgICA6IGNwID09PSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuTlVMTFxuICAgICAgICAgICAgICAgID8gdG9rZW5fanNfMS5Ub2tlblR5cGUuTlVMTF9DSEFSQUNURVJcbiAgICAgICAgICAgICAgICA6IHRva2VuX2pzXzEuVG9rZW5UeXBlLkNIQVJBQ1RFUjtcbiAgICAgICAgdGhpcy5fYXBwZW5kQ2hhclRvQ3VycmVudENoYXJhY3RlclRva2VuKHR5cGUsIFN0cmluZy5mcm9tQ29kZVBvaW50KGNwKSk7XG4gICAgfVxuICAgIC8vTk9URTogdXNlZCB3aGVuIHdlIGVtaXQgY2hhcmFjdGVycyBleHBsaWNpdGx5LlxuICAgIC8vVGhpcyBpcyBhbHdheXMgZm9yIG5vbi13aGl0ZXNwYWNlIGFuZCBub24tbnVsbCBjaGFyYWN0ZXJzLCB3aGljaCBhbGxvd3MgdXMgdG8gYXZvaWQgYWRkaXRpb25hbCBjaGVja3MuXG4gICAgX2VtaXRDaGFycyhjaCkge1xuICAgICAgICB0aGlzLl9hcHBlbmRDaGFyVG9DdXJyZW50Q2hhcmFjdGVyVG9rZW4odG9rZW5fanNfMS5Ub2tlblR5cGUuQ0hBUkFDVEVSLCBjaCk7XG4gICAgfVxuICAgIC8vIENoYXJhY3RlciByZWZlcmVuY2UgaGVscGVyc1xuICAgIF9tYXRjaE5hbWVkQ2hhcmFjdGVyUmVmZXJlbmNlKGNwKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xuICAgICAgICBsZXQgZXhjZXNzID0gMDtcbiAgICAgICAgbGV0IHdpdGhvdXRTZW1pY29sb24gPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGN1cnJlbnQgPSBkZWNvZGVfanNfMS5odG1sRGVjb2RlVHJlZVswXTsgaSA+PSAwOyBjcCA9IHRoaXMuX2NvbnN1bWUoKSkge1xuICAgICAgICAgICAgaSA9ICgwLCBkZWNvZGVfanNfMS5kZXRlcm1pbmVCcmFuY2gpKGRlY29kZV9qc18xLmh0bWxEZWNvZGVUcmVlLCBjdXJyZW50LCBpICsgMSwgY3ApO1xuICAgICAgICAgICAgaWYgKGkgPCAwKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZXhjZXNzICs9IDE7XG4gICAgICAgICAgICBjdXJyZW50ID0gZGVjb2RlX2pzXzEuaHRtbERlY29kZVRyZWVbaV07XG4gICAgICAgICAgICBjb25zdCBtYXNrZWQgPSBjdXJyZW50ICYgZGVjb2RlX2pzXzEuQmluVHJpZUZsYWdzLlZBTFVFX0xFTkdUSDtcbiAgICAgICAgICAgIC8vIElmIHRoZSBicmFuY2ggaXMgYSB2YWx1ZSwgc3RvcmUgaXQgYW5kIGNvbnRpbnVlXG4gICAgICAgICAgICBpZiAobWFza2VkKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIG1hc2sgaXMgdGhlIG51bWJlciBvZiBieXRlcyBvZiB0aGUgdmFsdWUsIGluY2x1ZGluZyB0aGUgY3VycmVudCBieXRlLlxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlTGVuZ3RoID0gKG1hc2tlZCA+PiAxNCkgLSAxO1xuICAgICAgICAgICAgICAgIC8vIEF0dHJpYnV0ZSB2YWx1ZXMgdGhhdCBhcmVuJ3QgdGVybWluYXRlZCBwcm9wZXJseSBhcmVuJ3QgcGFyc2VkLCBhbmQgc2hvdWxkbid0IGxlYWQgdG8gYSBwYXJzZXIgZXJyb3IuXG4gICAgICAgICAgICAgICAgLy8gU2VlIHRoZSBleGFtcGxlIGluIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3BhcnNpbmcuaHRtbCNuYW1lZC1jaGFyYWN0ZXItcmVmZXJlbmNlLXN0YXRlXG4gICAgICAgICAgICAgICAgaWYgKGNwICE9PSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuU0VNSUNPTE9OICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzQ2hhcmFjdGVyUmVmZXJlbmNlSW5BdHRyaWJ1dGUoKSAmJlxuICAgICAgICAgICAgICAgICAgICBpc0VudGl0eUluQXR0cmlidXRlSW52YWxpZEVuZCh0aGlzLnByZXByb2Nlc3Nvci5wZWVrKDEpKSkge1xuICAgICAgICAgICAgICAgICAgICAvL05PVEU6IHdlIGRvbid0IGZsdXNoIGFsbCBjb25zdW1lZCBjb2RlIHBvaW50cyBoZXJlLCBhbmQgaW5zdGVhZCBzd2l0Y2ggYmFjayB0byB0aGUgb3JpZ2luYWwgc3RhdGUgYWZ0ZXJcbiAgICAgICAgICAgICAgICAgICAgLy9lbWl0dGluZyBhbiBhbXBlcnNhbmQuIFRoaXMgaXMgZmluZSwgYXMgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgd29uJ3QgYmUgcGFyc2VkIGRpZmZlcmVudGx5IGluIGF0dHJpYnV0ZXMuXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFt1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuQU1QRVJTQU5EXTtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2tpcCBvdmVyIHRoZSB2YWx1ZS5cbiAgICAgICAgICAgICAgICAgICAgaSArPSB2YWx1ZUxlbmd0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBzdXJyb2dhdGUgcGFpciwgY29uc3VtZSB0aGUgbmV4dCB0d28gYnl0ZXMuXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gW2RlY29kZV9qc18xLmh0bWxEZWNvZGVUcmVlW2ldICYgfmRlY29kZV9qc18xLkJpblRyaWVGbGFncy5WQUxVRV9MRU5HVEhdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB2YWx1ZUxlbmd0aCA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFtkZWNvZGVfanNfMS5odG1sRGVjb2RlVHJlZVsrK2ldXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFtkZWNvZGVfanNfMS5odG1sRGVjb2RlVHJlZVsrK2ldLCBkZWNvZGVfanNfMS5odG1sRGVjb2RlVHJlZVsrK2ldXTtcbiAgICAgICAgICAgICAgICAgICAgZXhjZXNzID0gMDtcbiAgICAgICAgICAgICAgICAgICAgd2l0aG91dFNlbWljb2xvbiA9IGNwICE9PSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuU0VNSUNPTE9OO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodmFsdWVMZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHZhbHVlIGlzIHplcm8tbGVuZ3RoLCB3ZSdyZSBkb25lLlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb25zdW1lKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91bmNvbnN1bWUoZXhjZXNzKTtcbiAgICAgICAgaWYgKHdpdGhvdXRTZW1pY29sb24gJiYgIXRoaXMucHJlcHJvY2Vzc29yLmVuZE9mQ2h1bmtIaXQpIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi5taXNzaW5nU2VtaWNvbG9uQWZ0ZXJDaGFyYWN0ZXJSZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdlIHdhbnQgdG8gZW1pdCB0aGUgZXJyb3IgYWJvdmUgb24gdGhlIGNvZGUgcG9pbnQgYWZ0ZXIgdGhlIGVudGl0eS5cbiAgICAgICAgLy8gV2UgYWx3YXlzIGNvbnN1bWUgb25lIGNvZGUgcG9pbnQgdG9vIG1hbnkgaW4gdGhlIGxvb3AsIGFuZCB3ZSB3YWl0IHRvXG4gICAgICAgIC8vIHVuY29uc3VtZSBpdCB1bnRpbCBhZnRlciB0aGUgZXJyb3IgaXMgZW1pdHRlZC5cbiAgICAgICAgdGhpcy5fdW5jb25zdW1lKDEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBfaXNDaGFyYWN0ZXJSZWZlcmVuY2VJbkF0dHJpYnV0ZSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnJldHVyblN0YXRlID09PSBTdGF0ZS5BVFRSSUJVVEVfVkFMVUVfRE9VQkxFX1FVT1RFRCB8fFxuICAgICAgICAgICAgdGhpcy5yZXR1cm5TdGF0ZSA9PT0gU3RhdGUuQVRUUklCVVRFX1ZBTFVFX1NJTkdMRV9RVU9URUQgfHxcbiAgICAgICAgICAgIHRoaXMucmV0dXJuU3RhdGUgPT09IFN0YXRlLkFUVFJJQlVURV9WQUxVRV9VTlFVT1RFRCk7XG4gICAgfVxuICAgIF9mbHVzaENvZGVQb2ludENvbnN1bWVkQXNDaGFyYWN0ZXJSZWZlcmVuY2UoY3ApIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzQ2hhcmFjdGVyUmVmZXJlbmNlSW5BdHRyaWJ1dGUoKSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjcCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDYWxsaW5nIHN0YXRlcyB0aGlzIHdheSB0dXJucyBvdXQgdG8gYmUgbXVjaCBmYXN0ZXIgdGhhbiBhbnkgb3RoZXIgYXBwcm9hY2guXG4gICAgX2NhbGxTdGF0ZShjcCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuc3RhdGUpIHtcbiAgICAgICAgICAgIGNhc2UgU3RhdGUuREFUQToge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlRGF0YShjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLlJDREFUQToge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlUmNkYXRhKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuUkFXVEVYVDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlUmF3dGV4dChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLlNDUklQVF9EQVRBOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVTY3JpcHREYXRhKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuUExBSU5URVhUOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVQbGFpbnRleHQoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5UQUdfT1BFTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlVGFnT3BlbihjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkVORF9UQUdfT1BFTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlRW5kVGFnT3BlbihjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLlRBR19OQU1FOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVUYWdOYW1lKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuUkNEQVRBX0xFU1NfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVSY2RhdGFMZXNzVGhhblNpZ24oY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5SQ0RBVEFfRU5EX1RBR19PUEVOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVSY2RhdGFFbmRUYWdPcGVuKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuUkNEQVRBX0VORF9UQUdfTkFNRToge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlUmNkYXRhRW5kVGFnTmFtZShjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLlJBV1RFWFRfTEVTU19USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZVJhd3RleHRMZXNzVGhhblNpZ24oY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5SQVdURVhUX0VORF9UQUdfT1BFTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlUmF3dGV4dEVuZFRhZ09wZW4oY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5SQVdURVhUX0VORF9UQUdfTkFNRToge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlUmF3dGV4dEVuZFRhZ05hbWUoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5TQ1JJUFRfREFUQV9MRVNTX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlU2NyaXB0RGF0YUxlc3NUaGFuU2lnbihjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLlNDUklQVF9EQVRBX0VORF9UQUdfT1BFTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlU2NyaXB0RGF0YUVuZFRhZ09wZW4oY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5TQ1JJUFRfREFUQV9FTkRfVEFHX05BTUU6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZVNjcmlwdERhdGFFbmRUYWdOYW1lKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVTY3JpcHREYXRhRXNjYXBlU3RhcnQoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5TQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfREFTSDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlU2NyaXB0RGF0YUVzY2FwZVN0YXJ0RGFzaChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLlNDUklQVF9EQVRBX0VTQ0FQRUQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZVNjcmlwdERhdGFFc2NhcGVkKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVTY3JpcHREYXRhRXNjYXBlZERhc2goY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5TQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfREFTSDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlU2NyaXB0RGF0YUVzY2FwZWREYXNoRGFzaChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLlNDUklQVF9EQVRBX0VTQ0FQRURfTEVTU19USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZVNjcmlwdERhdGFFc2NhcGVkTGVzc1RoYW5TaWduKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX09QRU46IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZVNjcmlwdERhdGFFc2NhcGVkRW5kVGFnT3BlbihjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLlNDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19OQU1FOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVTY3JpcHREYXRhRXNjYXBlZEVuZFRhZ05hbWUoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5TQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX1NUQVJUOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVTY3JpcHREYXRhRG91YmxlRXNjYXBlU3RhcnQoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5TQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlU2NyaXB0RGF0YURvdWJsZUVzY2FwZWQoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5TQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9EQVNIOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVTY3JpcHREYXRhRG91YmxlRXNjYXBlZERhc2goY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5TQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9EQVNIX0RBU0g6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZVNjcmlwdERhdGFEb3VibGVFc2NhcGVkRGFzaERhc2goY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5TQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlU2NyaXB0RGF0YURvdWJsZUVzY2FwZWRMZXNzVGhhblNpZ24oY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5TQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX0VORDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlU2NyaXB0RGF0YURvdWJsZUVzY2FwZUVuZChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkJFRk9SRV9BVFRSSUJVVEVfTkFNRToge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQmVmb3JlQXR0cmlidXRlTmFtZShjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkFUVFJJQlVURV9OQU1FOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVBdHRyaWJ1dGVOYW1lKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQUZURVJfQVRUUklCVVRFX05BTUU6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUFmdGVyQXR0cmlidXRlTmFtZShjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkJFRk9SRV9BVFRSSUJVVEVfVkFMVUU6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUJlZm9yZUF0dHJpYnV0ZVZhbHVlKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQVRUUklCVVRFX1ZBTFVFX0RPVUJMRV9RVU9URUQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUF0dHJpYnV0ZVZhbHVlRG91YmxlUXVvdGVkKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQVRUUklCVVRFX1ZBTFVFX1NJTkdMRV9RVU9URUQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUF0dHJpYnV0ZVZhbHVlU2luZ2xlUXVvdGVkKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQVRUUklCVVRFX1ZBTFVFX1VOUVVPVEVEOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVBdHRyaWJ1dGVWYWx1ZVVucXVvdGVkKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQUZURVJfQVRUUklCVVRFX1ZBTFVFX1FVT1RFRDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQWZ0ZXJBdHRyaWJ1dGVWYWx1ZVF1b3RlZChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLlNFTEZfQ0xPU0lOR19TVEFSVF9UQUc6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZVNlbGZDbG9zaW5nU3RhcnRUYWcoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5CT0dVU19DT01NRU5UOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVCb2d1c0NvbW1lbnQoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5NQVJLVVBfREVDTEFSQVRJT05fT1BFTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlTWFya3VwRGVjbGFyYXRpb25PcGVuKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQ09NTUVOVF9TVEFSVDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQ29tbWVudFN0YXJ0KGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQ09NTUVOVF9TVEFSVF9EQVNIOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVDb21tZW50U3RhcnREYXNoKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQ09NTUVOVDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQ29tbWVudChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkNPTU1FTlRfTEVTU19USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUNvbW1lbnRMZXNzVGhhblNpZ24oY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5DT01NRU5UX0xFU1NfVEhBTl9TSUdOX0JBTkc6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUNvbW1lbnRMZXNzVGhhblNpZ25CYW5nKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQ09NTUVOVF9MRVNTX1RIQU5fU0lHTl9CQU5HX0RBU0g6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUNvbW1lbnRMZXNzVGhhblNpZ25CYW5nRGFzaChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkNPTU1FTlRfTEVTU19USEFOX1NJR05fQkFOR19EQVNIX0RBU0g6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUNvbW1lbnRMZXNzVGhhblNpZ25CYW5nRGFzaERhc2goY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5DT01NRU5UX0VORF9EQVNIOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVDb21tZW50RW5kRGFzaChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkNPTU1FTlRfRU5EOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVDb21tZW50RW5kKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQ09NTUVOVF9FTkRfQkFORzoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQ29tbWVudEVuZEJhbmcoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5ET0NUWVBFOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVEb2N0eXBlKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQkVGT1JFX0RPQ1RZUEVfTkFNRToge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQmVmb3JlRG9jdHlwZU5hbWUoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5ET0NUWVBFX05BTUU6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZURvY3R5cGVOYW1lKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQUZURVJfRE9DVFlQRV9OQU1FOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVBZnRlckRvY3R5cGVOYW1lKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQUZURVJfRE9DVFlQRV9QVUJMSUNfS0VZV09SRDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQWZ0ZXJEb2N0eXBlUHVibGljS2V5d29yZChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkJFRk9SRV9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVCZWZvcmVEb2N0eXBlUHVibGljSWRlbnRpZmllcihjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkRPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlRG9jdHlwZVB1YmxpY0lkZW50aWZpZXJEb3VibGVRdW90ZWQoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NJTkdMRV9RVU9URUQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZURvY3R5cGVQdWJsaWNJZGVudGlmaWVyU2luZ2xlUXVvdGVkKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQUZURVJfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQWZ0ZXJEb2N0eXBlUHVibGljSWRlbnRpZmllcihjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkJFVFdFRU5fRE9DVFlQRV9QVUJMSUNfQU5EX1NZU1RFTV9JREVOVElGSUVSUzoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQmV0d2VlbkRvY3R5cGVQdWJsaWNBbmRTeXN0ZW1JZGVudGlmaWVycyhjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkFGVEVSX0RPQ1RZUEVfU1lTVEVNX0tFWVdPUkQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUFmdGVyRG9jdHlwZVN5c3RlbUtleXdvcmQoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5CRUZPUkVfRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQmVmb3JlRG9jdHlwZVN5c3RlbUlkZW50aWZpZXIoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX0RPVUJMRV9RVU9URUQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZURvY3R5cGVTeXN0ZW1JZGVudGlmaWVyRG91YmxlUXVvdGVkKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVEb2N0eXBlU3lzdGVtSWRlbnRpZmllclNpbmdsZVF1b3RlZChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkFGVEVSX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVI6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUFmdGVyRG9jdHlwZVN5c3RlbUlkZW50aWZpZXIoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5CT0dVU19ET0NUWVBFOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVCb2d1c0RvY3R5cGUoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5DREFUQV9TRUNUSU9OOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVDZGF0YVNlY3Rpb24oY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5DREFUQV9TRUNUSU9OX0JSQUNLRVQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUNkYXRhU2VjdGlvbkJyYWNrZXQoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5DREFUQV9TRUNUSU9OX0VORDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQ2RhdGFTZWN0aW9uRW5kKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQ0hBUkFDVEVSX1JFRkVSRU5DRToge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQ2hhcmFjdGVyUmVmZXJlbmNlKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuTkFNRURfQ0hBUkFDVEVSX1JFRkVSRU5DRToge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlTmFtZWRDaGFyYWN0ZXJSZWZlcmVuY2UoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5BTUJJR1VPVVNfQU1QRVJTQU5EOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVBbWJpZ3VvdXNBbXBlcnNhbmQoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5OVU1FUklDX0NIQVJBQ1RFUl9SRUZFUkVOQ0U6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZU51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2UoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5IRVhBREVNSUNBTF9DSEFSQUNURVJfUkVGRVJFTkNFX1NUQVJUOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVIZXhhZGVtaWNhbENoYXJhY3RlclJlZmVyZW5jZVN0YXJ0KGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuSEVYQURFTUlDQUxfQ0hBUkFDVEVSX1JFRkVSRU5DRToge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlSGV4YWRlbWljYWxDaGFyYWN0ZXJSZWZlcmVuY2UoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5ERUNJTUFMX0NIQVJBQ1RFUl9SRUZFUkVOQ0U6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZURlY2ltYWxDaGFyYWN0ZXJSZWZlcmVuY2UoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5OVU1FUklDX0NIQVJBQ1RFUl9SRUZFUkVOQ0VfRU5EOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVOdW1lcmljQ2hhcmFjdGVyUmVmZXJlbmNlRW5kKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gc3RhdGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBTdGF0ZSBtYWNoaW5lXG4gICAgLy8gRGF0YSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlRGF0YShjcCkge1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5MRVNTX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5UQUdfT1BFTjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkFNUEVSU0FORDoge1xuICAgICAgICAgICAgICAgIHRoaXMucmV0dXJuU3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5DSEFSQUNURVJfUkVGRVJFTkNFO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuTlVMTDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyAgUkNEQVRBIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVSY2RhdGEoY3ApIHtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuQU1QRVJTQU5EOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXR1cm5TdGF0ZSA9IFN0YXRlLlJDREFUQTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQ0hBUkFDVEVSX1JFRkVSRU5DRTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkxFU1NfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlJDREFUQV9MRVNTX1RIQU5fU0lHTjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLk5VTEw6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIudW5leHBlY3RlZE51bGxDaGFyYWN0ZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycyh1bmljb2RlX2pzXzEuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFJBV1RFWFQgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZVJhd3RleHQoY3ApIHtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuTEVTU19USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuUkFXVEVYVF9MRVNTX1RIQU5fU0lHTjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLk5VTEw6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIudW5leHBlY3RlZE51bGxDaGFyYWN0ZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycyh1bmljb2RlX2pzXzEuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNjcmlwdCBkYXRhIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVTY3JpcHREYXRhKGNwKSB7XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkxFU1NfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0xFU1NfVEhBTl9TSUdOO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuTlVMTDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKHVuaWNvZGVfanNfMS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gUExBSU5URVhUIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVQbGFpbnRleHQoY3ApIHtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuTlVMTDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKHVuaWNvZGVfanNfMS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gVGFnIG9wZW4gc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZVRhZ09wZW4oY3ApIHtcbiAgICAgICAgaWYgKGlzQXNjaWlMZXR0ZXIoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVTdGFydFRhZ1Rva2VuKCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuVEFHX05BTUU7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZVRhZ05hbWUoY3ApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5FWENMQU1BVElPTl9NQVJLOiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5NQVJLVVBfREVDTEFSQVRJT05fT1BFTjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLlNPTElEVVM6IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkVORF9UQUdfT1BFTjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLlFVRVNUSU9OX01BUks6IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLnVuZXhwZWN0ZWRRdWVzdGlvbk1hcmtJbnN0ZWFkT2ZUYWdOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlQ29tbWVudFRva2VuKDEpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQk9HVVNfQ09NTUVOVDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVCb2d1c0NvbW1lbnQoY3ApO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuRU9GOiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi5lb2ZCZWZvcmVUYWdOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCc8Jyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIuaW52YWxpZEZpcnN0Q2hhcmFjdGVyT2ZUYWdOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCc8Jyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZURhdGEoY3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICB9XG4gICAgLy8gRW5kIHRhZyBvcGVuIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVFbmRUYWdPcGVuKGNwKSB7XG4gICAgICAgIGlmIChpc0FzY2lpTGV0dGVyKGNwKSkge1xuICAgICAgICAgICAgdGhpcy5fY3JlYXRlRW5kVGFnVG9rZW4oKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5UQUdfTkFNRTtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlVGFnTmFtZShjcCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi5taXNzaW5nRW5kVGFnTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuRU9GOiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi5lb2ZCZWZvcmVUYWdOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCc8LycpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLmludmFsaWRGaXJzdENoYXJhY3Rlck9mVGFnTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUNvbW1lbnRUb2tlbigyKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkJPR1VTX0NPTU1FTlQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQm9ndXNDb21tZW50KGNwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgfVxuICAgIC8vIFRhZyBuYW1lIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVUYWdOYW1lKGNwKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW47XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLlNQQUNFOlxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuTElORV9GRUVEOlxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuVEFCVUxBVElPTjpcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkZPUk1fRkVFRDoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CRUZPUkVfQVRUUklCVVRFX05BTUU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5TT0xJRFVTOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNFTEZfQ0xPU0lOR19TVEFSVF9UQUc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5HUkVBVEVSX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnRUYWdUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuTlVMTDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICAgICAgdG9rZW4udGFnTmFtZSArPSB1bmljb2RlX2pzXzEuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLmVvZkluVGFnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0b2tlbi50YWdOYW1lICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGlzQXNjaWlVcHBlcihjcCkgPyB0b0FzY2lpTG93ZXIoY3ApIDogY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFJDREFUQSBsZXNzLXRoYW4gc2lnbiBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlUmNkYXRhTGVzc1RoYW5TaWduKGNwKSB7XG4gICAgICAgIGlmIChjcCA9PT0gdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLlNPTElEVVMpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5SQ0RBVEFfRU5EX1RBR19PUEVOO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCc8Jyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuUkNEQVRBO1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVSY2RhdGEoY3ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFJDREFUQSBlbmQgdGFnIG9wZW4gc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZVJjZGF0YUVuZFRhZ09wZW4oY3ApIHtcbiAgICAgICAgaWYgKGlzQXNjaWlMZXR0ZXIoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuUkNEQVRBX0VORF9UQUdfTkFNRTtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlUmNkYXRhRW5kVGFnTmFtZShjcCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJzwvJyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuUkNEQVRBO1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVSY2RhdGEoY3ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGhhbmRsZVNwZWNpYWxFbmRUYWcoX2NwKSB7XG4gICAgICAgIGlmICghdGhpcy5wcmVwcm9jZXNzb3Iuc3RhcnRzV2l0aCh0aGlzLmxhc3RTdGFydFRhZ05hbWUsIGZhbHNlKSkge1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzLl9lbnN1cmVIaWJlcm5hdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKCk7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW47XG4gICAgICAgIHRva2VuLnRhZ05hbWUgPSB0aGlzLmxhc3RTdGFydFRhZ05hbWU7XG4gICAgICAgIGNvbnN0IGNwID0gdGhpcy5wcmVwcm9jZXNzb3IucGVlayh0aGlzLmxhc3RTdGFydFRhZ05hbWUubGVuZ3RoKTtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuU1BBQ0U6XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5MSU5FX0ZFRUQ6XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5UQUJVTEFUSU9OOlxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuRk9STV9GRUVEOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZUJ5KHRoaXMubGFzdFN0YXJ0VGFnTmFtZS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CRUZPUkVfQVRUUklCVVRFX05BTUU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuU09MSURVUzoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2VCeSh0aGlzLmxhc3RTdGFydFRhZ05hbWUubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0VMRl9DTE9TSU5HX1NUQVJUX1RBRztcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5HUkVBVEVSX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2VCeSh0aGlzLmxhc3RTdGFydFRhZ05hbWUubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50VGFnVG9rZW4oKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuREFUQTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICF0aGlzLl9lbnN1cmVIaWJlcm5hdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFJDREFUQSBlbmQgdGFnIG5hbWUgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZVJjZGF0YUVuZFRhZ05hbWUoY3ApIHtcbiAgICAgICAgaWYgKHRoaXMuaGFuZGxlU3BlY2lhbEVuZFRhZyhjcCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnPC8nKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5SQ0RBVEE7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZVJjZGF0YShjcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gUkFXVEVYVCBsZXNzLXRoYW4gc2lnbiBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlUmF3dGV4dExlc3NUaGFuU2lnbihjcCkge1xuICAgICAgICBpZiAoY3AgPT09IHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5TT0xJRFVTKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuUkFXVEVYVF9FTkRfVEFHX09QRU47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJzwnKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5SQVdURVhUO1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVSYXd0ZXh0KGNwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBSQVdURVhUIGVuZCB0YWcgb3BlbiBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlUmF3dGV4dEVuZFRhZ09wZW4oY3ApIHtcbiAgICAgICAgaWYgKGlzQXNjaWlMZXR0ZXIoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuUkFXVEVYVF9FTkRfVEFHX05BTUU7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZVJhd3RleHRFbmRUYWdOYW1lKGNwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnPC8nKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5SQVdURVhUO1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVSYXd0ZXh0KGNwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBSQVdURVhUIGVuZCB0YWcgbmFtZSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlUmF3dGV4dEVuZFRhZ05hbWUoY3ApIHtcbiAgICAgICAgaWYgKHRoaXMuaGFuZGxlU3BlY2lhbEVuZFRhZyhjcCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnPC8nKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5SQVdURVhUO1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVSYXd0ZXh0KGNwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBTY3JpcHQgZGF0YSBsZXNzLXRoYW4gc2lnbiBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlU2NyaXB0RGF0YUxlc3NUaGFuU2lnbihjcCkge1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5TT0xJRFVTOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0VORF9UQUdfT1BFTjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkVYQ0xBTUFUSU9OX01BUks6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnPCEnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJzwnKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEE7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVTY3JpcHREYXRhKGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBTY3JpcHQgZGF0YSBlbmQgdGFnIG9wZW4gc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZVNjcmlwdERhdGFFbmRUYWdPcGVuKGNwKSB7XG4gICAgICAgIGlmIChpc0FzY2lpTGV0dGVyKGNwKSkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0VORF9UQUdfTkFNRTtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlU2NyaXB0RGF0YUVuZFRhZ05hbWUoY3ApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCc8LycpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBO1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVTY3JpcHREYXRhKGNwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBTY3JpcHQgZGF0YSBlbmQgdGFnIG5hbWUgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZVNjcmlwdERhdGFFbmRUYWdOYW1lKGNwKSB7XG4gICAgICAgIGlmICh0aGlzLmhhbmRsZVNwZWNpYWxFbmRUYWcoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJzwvJyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEE7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZVNjcmlwdERhdGEoY3ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNjcmlwdCBkYXRhIGVzY2FwZSBzdGFydCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlU2NyaXB0RGF0YUVzY2FwZVN0YXJ0KGNwKSB7XG4gICAgICAgIGlmIChjcCA9PT0gdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkhZUEhFTl9NSU5VUykge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0VTQ0FQRV9TVEFSVF9EQVNIO1xuICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCctJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEE7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZVNjcmlwdERhdGEoY3ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNjcmlwdCBkYXRhIGVzY2FwZSBzdGFydCBkYXNoIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVTY3JpcHREYXRhRXNjYXBlU3RhcnREYXNoKGNwKSB7XG4gICAgICAgIGlmIChjcCA9PT0gdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkhZUEhFTl9NSU5VUykge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0VTQ0FQRURfREFTSF9EQVNIO1xuICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCctJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEE7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZVNjcmlwdERhdGEoY3ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNjcmlwdCBkYXRhIGVzY2FwZWQgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZVNjcmlwdERhdGFFc2NhcGVkKGNwKSB7XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkhZUEhFTl9NSU5VUzoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0g7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCctJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5MRVNTX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuTlVMTDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKHVuaWNvZGVfanNfMS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLmVvZkluU2NyaXB0SHRtbENvbW1lbnRMaWtlVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2NyaXB0IGRhdGEgZXNjYXBlZCBkYXNoIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVTY3JpcHREYXRhRXNjYXBlZERhc2goY3ApIHtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuSFlQSEVOX01JTlVTOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0VTQ0FQRURfREFTSF9EQVNIO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnLScpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuTEVTU19USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLk5VTEw6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIudW5leHBlY3RlZE51bGxDaGFyYWN0ZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9FU0NBUEVEO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycyh1bmljb2RlX2pzXzEuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi5lb2ZJblNjcmlwdEh0bWxDb21tZW50TGlrZVRleHQpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9FU0NBUEVEO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNjcmlwdCBkYXRhIGVzY2FwZWQgZGFzaCBkYXNoIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVTY3JpcHREYXRhRXNjYXBlZERhc2hEYXNoKGNwKSB7XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkhZUEhFTl9NSU5VUzoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnLScpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuTEVTU19USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnPicpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuTlVMTDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0VTQ0FQRUQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKHVuaWNvZGVfanNfMS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLmVvZkluU2NyaXB0SHRtbENvbW1lbnRMaWtlVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0VTQ0FQRUQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2NyaXB0IGRhdGEgZXNjYXBlZCBsZXNzLXRoYW4gc2lnbiBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlU2NyaXB0RGF0YUVzY2FwZWRMZXNzVGhhblNpZ24oY3ApIHtcbiAgICAgICAgaWYgKGNwID09PSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuU09MSURVUykge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19PUEVOO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzQXNjaWlMZXR0ZXIoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJzwnKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX1NUQVJUO1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVTY3JpcHREYXRhRG91YmxlRXNjYXBlU3RhcnQoY3ApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCc8Jyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRVNDQVBFRDtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlU2NyaXB0RGF0YUVzY2FwZWQoY3ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNjcmlwdCBkYXRhIGVzY2FwZWQgZW5kIHRhZyBvcGVuIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVTY3JpcHREYXRhRXNjYXBlZEVuZFRhZ09wZW4oY3ApIHtcbiAgICAgICAgaWYgKGlzQXNjaWlMZXR0ZXIoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX05BTUU7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZVNjcmlwdERhdGFFc2NhcGVkRW5kVGFnTmFtZShjcCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJzwvJyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRVNDQVBFRDtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlU2NyaXB0RGF0YUVzY2FwZWQoY3ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNjcmlwdCBkYXRhIGVzY2FwZWQgZW5kIHRhZyBuYW1lIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVTY3JpcHREYXRhRXNjYXBlZEVuZFRhZ05hbWUoY3ApIHtcbiAgICAgICAgaWYgKHRoaXMuaGFuZGxlU3BlY2lhbEVuZFRhZyhjcCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnPC8nKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9FU0NBUEVEO1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVTY3JpcHREYXRhRXNjYXBlZChjcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2NyaXB0IGRhdGEgZG91YmxlIGVzY2FwZSBzdGFydCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlU2NyaXB0RGF0YURvdWJsZUVzY2FwZVN0YXJ0KGNwKSB7XG4gICAgICAgIGlmICh0aGlzLnByZXByb2Nlc3Nvci5zdGFydHNXaXRoKHVuaWNvZGVfanNfMS5TRVFVRU5DRVMuU0NSSVBULCBmYWxzZSkgJiZcbiAgICAgICAgICAgIGlzU2NyaXB0RGF0YURvdWJsZUVzY2FwZVNlcXVlbmNlRW5kKHRoaXMucHJlcHJvY2Vzc29yLnBlZWsodW5pY29kZV9qc18xLlNFUVVFTkNFUy5TQ1JJUFQubGVuZ3RoKSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB1bmljb2RlX2pzXzEuU0VRVUVOQ0VTLlNDUklQVC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQodGhpcy5fY29uc3VtZSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghdGhpcy5fZW5zdXJlSGliZXJuYXRpb24oKSkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0VTQ0FQRUQ7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZVNjcmlwdERhdGFFc2NhcGVkKGNwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBTY3JpcHQgZGF0YSBkb3VibGUgZXNjYXBlZCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlU2NyaXB0RGF0YURvdWJsZUVzY2FwZWQoY3ApIHtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuSFlQSEVOX01JTlVTOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0RBU0g7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCctJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5MRVNTX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTjtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJzwnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLk5VTEw6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIudW5leHBlY3RlZE51bGxDaGFyYWN0ZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycyh1bmljb2RlX2pzXzEuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi5lb2ZJblNjcmlwdEh0bWxDb21tZW50TGlrZVRleHQpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNjcmlwdCBkYXRhIGRvdWJsZSBlc2NhcGVkIGRhc2ggc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZVNjcmlwdERhdGFEb3VibGVFc2NhcGVkRGFzaChjcCkge1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5IWVBIRU5fTUlOVVM6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSF9EQVNIO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnLScpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuTEVTU19USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfTEVTU19USEFOX1NJR047XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCc8Jyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5OVUxMOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRUQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKHVuaWNvZGVfanNfMS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLmVvZkluU2NyaXB0SHRtbENvbW1lbnRMaWtlVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNjcmlwdCBkYXRhIGRvdWJsZSBlc2NhcGVkIGRhc2ggZGFzaCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlU2NyaXB0RGF0YURvdWJsZUVzY2FwZWREYXNoRGFzaChjcCkge1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5IWVBIRU5fTUlOVVM6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJy0nKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkxFU1NfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnPCcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuR1JFQVRFUl9USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEE7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCc+Jyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5OVUxMOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRUQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKHVuaWNvZGVfanNfMS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLmVvZkluU2NyaXB0SHRtbENvbW1lbnRMaWtlVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNjcmlwdCBkYXRhIGRvdWJsZSBlc2NhcGVkIGxlc3MtdGhhbiBzaWduIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVTY3JpcHREYXRhRG91YmxlRXNjYXBlZExlc3NUaGFuU2lnbihjcCkge1xuICAgICAgICBpZiAoY3AgPT09IHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5TT0xJRFVTKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRV9FTkQ7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJy8nKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRDtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlU2NyaXB0RGF0YURvdWJsZUVzY2FwZWQoY3ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNjcmlwdCBkYXRhIGRvdWJsZSBlc2NhcGUgZW5kIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVTY3JpcHREYXRhRG91YmxlRXNjYXBlRW5kKGNwKSB7XG4gICAgICAgIGlmICh0aGlzLnByZXByb2Nlc3Nvci5zdGFydHNXaXRoKHVuaWNvZGVfanNfMS5TRVFVRU5DRVMuU0NSSVBULCBmYWxzZSkgJiZcbiAgICAgICAgICAgIGlzU2NyaXB0RGF0YURvdWJsZUVzY2FwZVNlcXVlbmNlRW5kKHRoaXMucHJlcHJvY2Vzc29yLnBlZWsodW5pY29kZV9qc18xLlNFUVVFTkNFUy5TQ1JJUFQubGVuZ3RoKSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB1bmljb2RlX2pzXzEuU0VRVUVOQ0VTLlNDUklQVC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQodGhpcy5fY29uc3VtZSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9FU0NBUEVEO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCF0aGlzLl9lbnN1cmVIaWJlcm5hdGlvbigpKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRUQ7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZVNjcmlwdERhdGFEb3VibGVFc2NhcGVkKGNwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBCZWZvcmUgYXR0cmlidXRlIG5hbWUgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUJlZm9yZUF0dHJpYnV0ZU5hbWUoY3ApIHtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuU1BBQ0U6XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5MSU5FX0ZFRUQ6XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5UQUJVTEFUSU9OOlxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuRk9STV9GRUVEOiB7XG4gICAgICAgICAgICAgICAgLy8gSWdub3JlIHdoaXRlc3BhY2VcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLlNPTElEVVM6XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5HUkVBVEVSX1RIQU5fU0lHTjpcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5BRlRFUl9BVFRSSUJVVEVfTkFNRTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUFmdGVyQXR0cmlidXRlTmFtZShjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5FUVVBTFNfU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi51bmV4cGVjdGVkRXF1YWxzU2lnbkJlZm9yZUF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUF0dHIoJz0nKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQVRUUklCVVRFX05BTUU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlQXR0cignJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkFUVFJJQlVURV9OQU1FO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQXR0cmlidXRlTmFtZShjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQXR0cmlidXRlIG5hbWUgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUF0dHJpYnV0ZU5hbWUoY3ApIHtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuU1BBQ0U6XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5MSU5FX0ZFRUQ6XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5UQUJVTEFUSU9OOlxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuRk9STV9GRUVEOlxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuU09MSURVUzpcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkdSRUFURVJfVEhBTl9TSUdOOlxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGVhdmVBdHRyTmFtZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5BRlRFUl9BVFRSSUJVVEVfTkFNRTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUFmdGVyQXR0cmlidXRlTmFtZShjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5FUVVBTFNfU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xlYXZlQXR0ck5hbWUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQkVGT1JFX0FUVFJJQlVURV9WQUxVRTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLlFVT1RBVElPTl9NQVJLOlxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuQVBPU1RST1BIRTpcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkxFU1NfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLnVuZXhwZWN0ZWRDaGFyYWN0ZXJJbkF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEF0dHIubmFtZSArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5OVUxMOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLm5hbWUgKz0gdW5pY29kZV9qc18xLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLm5hbWUgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoaXNBc2NpaVVwcGVyKGNwKSA/IHRvQXNjaWlMb3dlcihjcCkgOiBjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQWZ0ZXIgYXR0cmlidXRlIG5hbWUgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUFmdGVyQXR0cmlidXRlTmFtZShjcCkge1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5TUEFDRTpcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkxJTkVfRkVFRDpcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLlRBQlVMQVRJT046XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5GT1JNX0ZFRUQ6IHtcbiAgICAgICAgICAgICAgICAvLyBJZ25vcmUgd2hpdGVzcGFjZVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuU09MSURVUzoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TRUxGX0NMT1NJTkdfU1RBUlRfVEFHO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuRVFVQUxTX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQkVGT1JFX0FUVFJJQlVURV9WQUxVRTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudFRhZ1Rva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIuZW9mSW5UYWcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUF0dHIoJycpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5BVFRSSUJVVEVfTkFNRTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUF0dHJpYnV0ZU5hbWUoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEJlZm9yZSBhdHRyaWJ1dGUgdmFsdWUgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUJlZm9yZUF0dHJpYnV0ZVZhbHVlKGNwKSB7XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLlNQQUNFOlxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuTElORV9GRUVEOlxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuVEFCVUxBVElPTjpcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkZPUk1fRkVFRDoge1xuICAgICAgICAgICAgICAgIC8vIElnbm9yZSB3aGl0ZXNwYWNlXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5RVU9UQVRJT05fTUFSSzoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5BVFRSSUJVVEVfVkFMVUVfRE9VQkxFX1FVT1RFRDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkFQT1NUUk9QSEU6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQVRUUklCVVRFX1ZBTFVFX1NJTkdMRV9RVU9URUQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5HUkVBVEVSX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi5taXNzaW5nQXR0cmlidXRlVmFsdWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnRUYWdUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5BVFRSSUJVVEVfVkFMVUVfVU5RVU9URUQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVBdHRyaWJ1dGVWYWx1ZVVucXVvdGVkKGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBBdHRyaWJ1dGUgdmFsdWUgKGRvdWJsZS1xdW90ZWQpIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVBdHRyaWJ1dGVWYWx1ZURvdWJsZVF1b3RlZChjcCkge1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5RVU9UQVRJT05fTUFSSzoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5BRlRFUl9BVFRSSUJVVEVfVkFMVUVfUVVPVEVEO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuQU1QRVJTQU5EOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXR1cm5TdGF0ZSA9IFN0YXRlLkFUVFJJQlVURV9WQUxVRV9ET1VCTEVfUVVPVEVEO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5DSEFSQUNURVJfUkVGRVJFTkNFO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuTlVMTDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSB1bmljb2RlX2pzXzEuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLmVvZkluVGFnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBBdHRyaWJ1dGUgdmFsdWUgKHNpbmdsZS1xdW90ZWQpIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVBdHRyaWJ1dGVWYWx1ZVNpbmdsZVF1b3RlZChjcCkge1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5BUE9TVFJPUEhFOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkFGVEVSX0FUVFJJQlVURV9WQUxVRV9RVU9URUQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5BTVBFUlNBTkQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJldHVyblN0YXRlID0gU3RhdGUuQVRUUklCVVRFX1ZBTFVFX1NJTkdMRV9RVU9URUQ7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkNIQVJBQ1RFUl9SRUZFUkVOQ0U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5OVUxMOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IHVuaWNvZGVfanNfMS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIuZW9mSW5UYWcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEF0dHJpYnV0ZSB2YWx1ZSAodW5xdW90ZWQpIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVBdHRyaWJ1dGVWYWx1ZVVucXVvdGVkKGNwKSB7XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLlNQQUNFOlxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuTElORV9GRUVEOlxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuVEFCVUxBVElPTjpcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkZPUk1fRkVFRDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xlYXZlQXR0clZhbHVlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkJFRk9SRV9BVFRSSUJVVEVfTkFNRTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkFNUEVSU0FORDoge1xuICAgICAgICAgICAgICAgIHRoaXMucmV0dXJuU3RhdGUgPSBTdGF0ZS5BVFRSSUJVVEVfVkFMVUVfVU5RVU9URUQ7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkNIQVJBQ1RFUl9SRUZFUkVOQ0U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5HUkVBVEVSX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xlYXZlQXR0clZhbHVlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudFRhZ1Rva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5OVUxMOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IHVuaWNvZGVfanNfMS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5RVU9UQVRJT05fTUFSSzpcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkFQT1NUUk9QSEU6XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5MRVNTX1RIQU5fU0lHTjpcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkVRVUFMU19TSUdOOlxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuR1JBVkVfQUNDRU5UOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLnVuZXhwZWN0ZWRDaGFyYWN0ZXJJblVucXVvdGVkQXR0cmlidXRlVmFsdWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLmVvZkluVGFnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBBZnRlciBhdHRyaWJ1dGUgdmFsdWUgKHF1b3RlZCkgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUFmdGVyQXR0cmlidXRlVmFsdWVRdW90ZWQoY3ApIHtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuU1BBQ0U6XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5MSU5FX0ZFRUQ6XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5UQUJVTEFUSU9OOlxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuRk9STV9GRUVEOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGVhdmVBdHRyVmFsdWUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQkVGT1JFX0FUVFJJQlVURV9OQU1FO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuU09MSURVUzoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xlYXZlQXR0clZhbHVlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNFTEZfQ0xPU0lOR19TVEFSVF9UQUc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5HUkVBVEVSX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xlYXZlQXR0clZhbHVlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudFRhZ1Rva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIuZW9mSW5UYWcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi5taXNzaW5nV2hpdGVzcGFjZUJldHdlZW5BdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQkVGT1JFX0FUVFJJQlVURV9OQU1FO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQmVmb3JlQXR0cmlidXRlTmFtZShjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2VsZi1jbG9zaW5nIHN0YXJ0IHRhZyBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlU2VsZkNsb3NpbmdTdGFydFRhZyhjcCkge1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5HUkVBVEVSX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW47XG4gICAgICAgICAgICAgICAgdG9rZW4uc2VsZkNsb3NpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnRUYWdUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLmVvZkluVGFnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIudW5leHBlY3RlZFNvbGlkdXNJblRhZyk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkJFRk9SRV9BVFRSSUJVVEVfTkFNRTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUJlZm9yZUF0dHJpYnV0ZU5hbWUoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEJvZ3VzIGNvbW1lbnQgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUJvZ3VzQ29tbWVudChjcCkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5HUkVBVEVSX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnRDb21tZW50KHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnRDb21tZW50KHRva2VuKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLk5VTEw6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIudW5leHBlY3RlZE51bGxDaGFyYWN0ZXIpO1xuICAgICAgICAgICAgICAgIHRva2VuLmRhdGEgKz0gdW5pY29kZV9qc18xLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0b2tlbi5kYXRhICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBNYXJrdXAgZGVjbGFyYXRpb24gb3BlbiBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlTWFya3VwRGVjbGFyYXRpb25PcGVuKGNwKSB7XG4gICAgICAgIGlmICh0aGlzLl9jb25zdW1lU2VxdWVuY2VJZk1hdGNoKHVuaWNvZGVfanNfMS5TRVFVRU5DRVMuREFTSF9EQVNILCB0cnVlKSkge1xuICAgICAgICAgICAgdGhpcy5fY3JlYXRlQ29tbWVudFRva2VuKHVuaWNvZGVfanNfMS5TRVFVRU5DRVMuREFTSF9EQVNILmxlbmd0aCArIDEpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkNPTU1FTlRfU1RBUlQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5fY29uc3VtZVNlcXVlbmNlSWZNYXRjaCh1bmljb2RlX2pzXzEuU0VRVUVOQ0VTLkRPQ1RZUEUsIGZhbHNlKSkge1xuICAgICAgICAgICAgLy8gTk9URTogRG9jdHlwZXMgdG9rZW5zIGFyZSBjcmVhdGVkIHdpdGhvdXQgZml4ZWQgb2Zmc2V0cy4gV2Uga2VlcCB0cmFjayBvZiB0aGUgbW9tZW50IGEgZG9jdHlwZSAqbWlnaHQqIHN0YXJ0IGhlcmUuXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMb2NhdGlvbiA9IHRoaXMuZ2V0Q3VycmVudExvY2F0aW9uKHVuaWNvZGVfanNfMS5TRVFVRU5DRVMuRE9DVFlQRS5sZW5ndGggKyAxKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5ET0NUWVBFO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX2NvbnN1bWVTZXF1ZW5jZUlmTWF0Y2godW5pY29kZV9qc18xLlNFUVVFTkNFUy5DREFUQV9TVEFSVCwgdHJ1ZSkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmluRm9yZWlnbk5vZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQ0RBVEFfU0VDVElPTjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi5jZGF0YUluSHRtbENvbnRlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUNvbW1lbnRUb2tlbih1bmljb2RlX2pzXzEuU0VRVUVOQ0VTLkNEQVRBX1NUQVJULmxlbmd0aCArIDEpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgPSAnW0NEQVRBWyc7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkJPR1VTX0NPTU1FTlQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy9OT1RFOiBTZXF1ZW5jZSBsb29rdXBzIGNhbiBiZSBhYnJ1cHRlZCBieSBoaWJlcm5hdGlvbi4gSW4gdGhhdCBjYXNlLCBsb29rdXBcbiAgICAgICAgLy9yZXN1bHRzIGFyZSBubyBsb25nZXIgdmFsaWQgYW5kIHdlIHdpbGwgbmVlZCB0byBzdGFydCBvdmVyLlxuICAgICAgICBlbHNlIGlmICghdGhpcy5fZW5zdXJlSGliZXJuYXRpb24oKSkge1xuICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLmluY29ycmVjdGx5T3BlbmVkQ29tbWVudCk7XG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVDb21tZW50VG9rZW4oMik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQk9HVVNfQ09NTUVOVDtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlQm9ndXNDb21tZW50KGNwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDb21tZW50IHN0YXJ0IHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVDb21tZW50U3RhcnQoY3ApIHtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuSFlQSEVOX01JTlVTOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkNPTU1FTlRfU1RBUlRfREFTSDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLmFicnVwdENsb3NpbmdPZkVtcHR5Q29tbWVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50Q29tbWVudCh0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkNPTU1FTlQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVDb21tZW50KGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDb21tZW50IHN0YXJ0IGRhc2ggc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUNvbW1lbnRTdGFydERhc2goY3ApIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuSFlQSEVOX01JTlVTOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkNPTU1FTlRfRU5EO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuR1JFQVRFUl9USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIuYWJydXB0Q2xvc2luZ09mRW1wdHlDb21tZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuREFUQTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50Q29tbWVudCh0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIuZW9mSW5Db21tZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50Q29tbWVudCh0b2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdG9rZW4uZGF0YSArPSAnLSc7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkNPTU1FTlQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVDb21tZW50KGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDb21tZW50IHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVDb21tZW50KGNwKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW47XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkhZUEhFTl9NSU5VUzoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5DT01NRU5UX0VORF9EQVNIO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuTEVTU19USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0b2tlbi5kYXRhICs9ICc8JztcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQ09NTUVOVF9MRVNTX1RIQU5fU0lHTjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLk5VTEw6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIudW5leHBlY3RlZE51bGxDaGFyYWN0ZXIpO1xuICAgICAgICAgICAgICAgIHRva2VuLmRhdGEgKz0gdW5pY29kZV9qc18xLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi5lb2ZJbkNvbW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnRDb21tZW50KHRva2VuKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0b2tlbi5kYXRhICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDb21tZW50IGxlc3MtdGhhbiBzaWduIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVDb21tZW50TGVzc1RoYW5TaWduKGNwKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW47XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkVYQ0xBTUFUSU9OX01BUks6IHtcbiAgICAgICAgICAgICAgICB0b2tlbi5kYXRhICs9ICchJztcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQ09NTUVOVF9MRVNTX1RIQU5fU0lHTl9CQU5HO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuTEVTU19USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0b2tlbi5kYXRhICs9ICc8JztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQ09NTUVOVDtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUNvbW1lbnQoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIENvbW1lbnQgbGVzcy10aGFuIHNpZ24gYmFuZyBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlQ29tbWVudExlc3NUaGFuU2lnbkJhbmcoY3ApIHtcbiAgICAgICAgaWYgKGNwID09PSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuSFlQSEVOX01JTlVTKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQ09NTUVOVF9MRVNTX1RIQU5fU0lHTl9CQU5HX0RBU0g7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQ09NTUVOVDtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlQ29tbWVudChjcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQ29tbWVudCBsZXNzLXRoYW4gc2lnbiBiYW5nIGRhc2ggc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUNvbW1lbnRMZXNzVGhhblNpZ25CYW5nRGFzaChjcCkge1xuICAgICAgICBpZiAoY3AgPT09IHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5IWVBIRU5fTUlOVVMpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5DT01NRU5UX0xFU1NfVEhBTl9TSUdOX0JBTkdfREFTSF9EQVNIO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkNPTU1FTlRfRU5EX0RBU0g7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZUNvbW1lbnRFbmREYXNoKGNwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDb21tZW50IGxlc3MtdGhhbiBzaWduIGJhbmcgZGFzaCBkYXNoIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVDb21tZW50TGVzc1RoYW5TaWduQmFuZ0Rhc2hEYXNoKGNwKSB7XG4gICAgICAgIGlmIChjcCAhPT0gdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkdSRUFURVJfVEhBTl9TSUdOICYmIGNwICE9PSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuRU9GKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIubmVzdGVkQ29tbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkNPTU1FTlRfRU5EO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbW1lbnRFbmQoY3ApO1xuICAgIH1cbiAgICAvLyBDb21tZW50IGVuZCBkYXNoIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVDb21tZW50RW5kRGFzaChjcCkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5IWVBIRU5fTUlOVVM6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQ09NTUVOVF9FTkQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIuZW9mSW5Db21tZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50Q29tbWVudCh0b2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdG9rZW4uZGF0YSArPSAnLSc7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkNPTU1FTlQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVDb21tZW50KGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDb21tZW50IGVuZCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlQ29tbWVudEVuZChjcCkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5HUkVBVEVSX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnRDb21tZW50KHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkVYQ0xBTUFUSU9OX01BUks6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQ09NTUVOVF9FTkRfQkFORztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkhZUEhFTl9NSU5VUzoge1xuICAgICAgICAgICAgICAgIHRva2VuLmRhdGEgKz0gJy0nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLmVvZkluQ29tbWVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudENvbW1lbnQodG9rZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRva2VuLmRhdGEgKz0gJy0tJztcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQ09NTUVOVDtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUNvbW1lbnQoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIENvbW1lbnQgZW5kIGJhbmcgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUNvbW1lbnRFbmRCYW5nKGNwKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW47XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkhZUEhFTl9NSU5VUzoge1xuICAgICAgICAgICAgICAgIHRva2VuLmRhdGEgKz0gJy0tISc7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkNPTU1FTlRfRU5EX0RBU0g7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5HUkVBVEVSX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi5pbmNvcnJlY3RseUNsb3NlZENvbW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnRDb21tZW50KHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi5lb2ZJbkNvbW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnRDb21tZW50KHRva2VuKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0b2tlbi5kYXRhICs9ICctLSEnO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5DT01NRU5UO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQ29tbWVudChjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gRE9DVFlQRSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlRG9jdHlwZShjcCkge1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5TUEFDRTpcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkxJTkVfRkVFRDpcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLlRBQlVMQVRJT046XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5GT1JNX0ZFRUQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQkVGT1JFX0RPQ1RZUEVfTkFNRTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkJFRk9SRV9ET0NUWVBFX05BTUU7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVCZWZvcmVEb2N0eXBlTmFtZShjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIuZW9mSW5Eb2N0eXBlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVEb2N0eXBlVG9rZW4obnVsbCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudERvY3R5cGUodG9rZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi5taXNzaW5nV2hpdGVzcGFjZUJlZm9yZURvY3R5cGVOYW1lKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQkVGT1JFX0RPQ1RZUEVfTkFNRTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUJlZm9yZURvY3R5cGVOYW1lKGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBCZWZvcmUgRE9DVFlQRSBuYW1lIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVCZWZvcmVEb2N0eXBlTmFtZShjcCkge1xuICAgICAgICBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xuICAgICAgICAgICAgdGhpcy5fY3JlYXRlRG9jdHlwZVRva2VuKFN0cmluZy5mcm9tQ2hhckNvZGUodG9Bc2NpaUxvd2VyKGNwKSkpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRPQ1RZUEVfTkFNRTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuU1BBQ0U6XG4gICAgICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuTElORV9GRUVEOlxuICAgICAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLlRBQlVMQVRJT046XG4gICAgICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuRk9STV9GRUVEOiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSB3aGl0ZXNwYWNlXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5OVUxMOiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZURvY3R5cGVUb2tlbih1bmljb2RlX2pzXzEuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRPQ1RZUEVfTkFNRTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi5taXNzaW5nRG9jdHlwZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVEb2N0eXBlVG9rZW4obnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW47XG4gICAgICAgICAgICAgICAgICAgIHRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudERvY3R5cGUodG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuREFUQTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkVPRjoge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIuZW9mSW5Eb2N0eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlRG9jdHlwZVRva2VuKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnREb2N0eXBlKHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZURvY3R5cGVUb2tlbihTdHJpbmcuZnJvbUNvZGVQb2ludChjcCkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuRE9DVFlQRV9OQU1FO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICB9XG4gICAgLy8gRE9DVFlQRSBuYW1lIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVEb2N0eXBlTmFtZShjcCkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5TUEFDRTpcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkxJTkVfRkVFRDpcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLlRBQlVMQVRJT046XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5GT1JNX0ZFRUQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQUZURVJfRE9DVFlQRV9OQU1FO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuR1JFQVRFUl9USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuREFUQTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5OVUxMOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5uYW1lICs9IHVuaWNvZGVfanNfMS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIuZW9mSW5Eb2N0eXBlKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudERvY3R5cGUodG9rZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRva2VuLm5hbWUgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoaXNBc2NpaVVwcGVyKGNwKSA/IHRvQXNjaWlMb3dlcihjcCkgOiBjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQWZ0ZXIgRE9DVFlQRSBuYW1lIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVBZnRlckRvY3R5cGVOYW1lKGNwKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW47XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLlNQQUNFOlxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuTElORV9GRUVEOlxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuVEFCVUxBVElPTjpcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkZPUk1fRkVFRDoge1xuICAgICAgICAgICAgICAgIC8vIElnbm9yZSB3aGl0ZXNwYWNlXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5HUkVBVEVSX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnREb2N0eXBlKHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi5lb2ZJbkRvY3R5cGUpO1xuICAgICAgICAgICAgICAgIHRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NvbnN1bWVTZXF1ZW5jZUlmTWF0Y2godW5pY29kZV9qc18xLlNFUVVFTkNFUy5QVUJMSUMsIGZhbHNlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQUZURVJfRE9DVFlQRV9QVUJMSUNfS0VZV09SRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fY29uc3VtZVNlcXVlbmNlSWZNYXRjaCh1bmljb2RlX2pzXzEuU0VRVUVOQ0VTLlNZU1RFTSwgZmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5BRlRFUl9ET0NUWVBFX1NZU1RFTV9LRVlXT1JEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvL05PVEU6IHNlcXVlbmNlIGxvb2t1cCBjYW4gYmUgYWJydXB0ZWQgYnkgaGliZXJuYXRpb24uIEluIHRoYXQgY2FzZSBsb29rdXBcbiAgICAgICAgICAgICAgICAvL3Jlc3VsdHMgYXJlIG5vIGxvbmdlciB2YWxpZCBhbmQgd2Ugd2lsbCBuZWVkIHRvIHN0YXJ0IG92ZXIuXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXMuX2Vuc3VyZUhpYmVybmF0aW9uKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLmludmFsaWRDaGFyYWN0ZXJTZXF1ZW5jZUFmdGVyRG9jdHlwZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CT0dVU19ET0NUWVBFO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUJvZ3VzRG9jdHlwZShjcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEFmdGVyIERPQ1RZUEUgcHVibGljIGtleXdvcmQgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUFmdGVyRG9jdHlwZVB1YmxpY0tleXdvcmQoY3ApIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuU1BBQ0U6XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5MSU5FX0ZFRUQ6XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5UQUJVTEFUSU9OOlxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuRk9STV9GRUVEOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkJFRk9SRV9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuUVVPVEFUSU9OX01BUks6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIubWlzc2luZ1doaXRlc3BhY2VBZnRlckRvY3R5cGVQdWJsaWNLZXl3b3JkKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5wdWJsaWNJZCA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX0RPVUJMRV9RVU9URUQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5BUE9TVFJPUEhFOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLm1pc3NpbmdXaGl0ZXNwYWNlQWZ0ZXJEb2N0eXBlUHVibGljS2V5d29yZCk7XG4gICAgICAgICAgICAgICAgdG9rZW4ucHVibGljSWQgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuR1JFQVRFUl9USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIubWlzc2luZ0RvY3R5cGVQdWJsaWNJZGVudGlmaWVyKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudERvY3R5cGUodG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLmVvZkluRG9jdHlwZSk7XG4gICAgICAgICAgICAgICAgdG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnREb2N0eXBlKHRva2VuKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIubWlzc2luZ1F1b3RlQmVmb3JlRG9jdHlwZVB1YmxpY0lkZW50aWZpZXIpO1xuICAgICAgICAgICAgICAgIHRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQk9HVVNfRE9DVFlQRTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUJvZ3VzRG9jdHlwZShjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQmVmb3JlIERPQ1RZUEUgcHVibGljIGlkZW50aWZpZXIgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUJlZm9yZURvY3R5cGVQdWJsaWNJZGVudGlmaWVyKGNwKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW47XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLlNQQUNFOlxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuTElORV9GRUVEOlxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuVEFCVUxBVElPTjpcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkZPUk1fRkVFRDoge1xuICAgICAgICAgICAgICAgIC8vIElnbm9yZSB3aGl0ZXNwYWNlXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5RVU9UQVRJT05fTUFSSzoge1xuICAgICAgICAgICAgICAgIHRva2VuLnB1YmxpY0lkID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkFQT1NUUk9QSEU6IHtcbiAgICAgICAgICAgICAgICB0b2tlbi5wdWJsaWNJZCA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NJTkdMRV9RVU9URUQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5HUkVBVEVSX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi5taXNzaW5nRG9jdHlwZVB1YmxpY0lkZW50aWZpZXIpO1xuICAgICAgICAgICAgICAgIHRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuREFUQTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIuZW9mSW5Eb2N0eXBlKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudERvY3R5cGUodG9rZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi5taXNzaW5nUXVvdGVCZWZvcmVEb2N0eXBlUHVibGljSWRlbnRpZmllcik7XG4gICAgICAgICAgICAgICAgdG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CT0dVU19ET0NUWVBFO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQm9ndXNEb2N0eXBlKGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBET0NUWVBFIHB1YmxpYyBpZGVudGlmaWVyIChkb3VibGUtcXVvdGVkKSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlRG9jdHlwZVB1YmxpY0lkZW50aWZpZXJEb3VibGVRdW90ZWQoY3ApIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuUVVPVEFUSU9OX01BUks6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQUZURVJfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLk5VTEw6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIudW5leHBlY3RlZE51bGxDaGFyYWN0ZXIpO1xuICAgICAgICAgICAgICAgIHRva2VuLnB1YmxpY0lkICs9IHVuaWNvZGVfanNfMS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5HUkVBVEVSX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi5hYnJ1cHREb2N0eXBlUHVibGljSWRlbnRpZmllcik7XG4gICAgICAgICAgICAgICAgdG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnREb2N0eXBlKHRva2VuKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuREFUQTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi5lb2ZJbkRvY3R5cGUpO1xuICAgICAgICAgICAgICAgIHRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdG9rZW4ucHVibGljSWQgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIERPQ1RZUEUgcHVibGljIGlkZW50aWZpZXIgKHNpbmdsZS1xdW90ZWQpIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVEb2N0eXBlUHVibGljSWRlbnRpZmllclNpbmdsZVF1b3RlZChjcCkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5BUE9TVFJPUEhFOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkFGVEVSX0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5OVUxMOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5wdWJsaWNJZCArPSB1bmljb2RlX2pzXzEuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuR1JFQVRFUl9USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIuYWJydXB0RG9jdHlwZVB1YmxpY0lkZW50aWZpZXIpO1xuICAgICAgICAgICAgICAgIHRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIuZW9mSW5Eb2N0eXBlKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudERvY3R5cGUodG9rZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRva2VuLnB1YmxpY0lkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBBZnRlciBET0NUWVBFIHB1YmxpYyBpZGVudGlmaWVyIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVBZnRlckRvY3R5cGVQdWJsaWNJZGVudGlmaWVyKGNwKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW47XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLlNQQUNFOlxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuTElORV9GRUVEOlxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuVEFCVUxBVElPTjpcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkZPUk1fRkVFRDoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CRVRXRUVOX0RPQ1RZUEVfUFVCTElDX0FORF9TWVNURU1fSURFTlRJRklFUlM7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5HUkVBVEVSX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnREb2N0eXBlKHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLlFVT1RBVElPTl9NQVJLOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLm1pc3NpbmdXaGl0ZXNwYWNlQmV0d2VlbkRvY3R5cGVQdWJsaWNBbmRTeXN0ZW1JZGVudGlmaWVycyk7XG4gICAgICAgICAgICAgICAgdG9rZW4uc3lzdGVtSWQgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuQVBPU1RST1BIRToge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi5taXNzaW5nV2hpdGVzcGFjZUJldHdlZW5Eb2N0eXBlUHVibGljQW5kU3lzdGVtSWRlbnRpZmllcnMpO1xuICAgICAgICAgICAgICAgIHRva2VuLnN5c3RlbUlkID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi5lb2ZJbkRvY3R5cGUpO1xuICAgICAgICAgICAgICAgIHRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLm1pc3NpbmdRdW90ZUJlZm9yZURvY3R5cGVTeXN0ZW1JZGVudGlmaWVyKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkJPR1VTX0RPQ1RZUEU7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVCb2d1c0RvY3R5cGUoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEJldHdlZW4gRE9DVFlQRSBwdWJsaWMgYW5kIHN5c3RlbSBpZGVudGlmaWVycyBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlQmV0d2VlbkRvY3R5cGVQdWJsaWNBbmRTeXN0ZW1JZGVudGlmaWVycyhjcCkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5TUEFDRTpcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkxJTkVfRkVFRDpcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLlRBQlVMQVRJT046XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5GT1JNX0ZFRUQ6IHtcbiAgICAgICAgICAgICAgICAvLyBJZ25vcmUgd2hpdGVzcGFjZVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuR1JFQVRFUl9USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5RVU9UQVRJT05fTUFSSzoge1xuICAgICAgICAgICAgICAgIHRva2VuLnN5c3RlbUlkID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkFQT1NUUk9QSEU6IHtcbiAgICAgICAgICAgICAgICB0b2tlbi5zeXN0ZW1JZCA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NJTkdMRV9RVU9URUQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIuZW9mSW5Eb2N0eXBlKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudERvY3R5cGUodG9rZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi5taXNzaW5nUXVvdGVCZWZvcmVEb2N0eXBlU3lzdGVtSWRlbnRpZmllcik7XG4gICAgICAgICAgICAgICAgdG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CT0dVU19ET0NUWVBFO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQm9ndXNEb2N0eXBlKGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBBZnRlciBET0NUWVBFIHN5c3RlbSBrZXl3b3JkIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVBZnRlckRvY3R5cGVTeXN0ZW1LZXl3b3JkKGNwKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW47XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLlNQQUNFOlxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuTElORV9GRUVEOlxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuVEFCVUxBVElPTjpcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkZPUk1fRkVFRDoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CRUZPUkVfRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLlFVT1RBVElPTl9NQVJLOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLm1pc3NpbmdXaGl0ZXNwYWNlQWZ0ZXJEb2N0eXBlU3lzdGVtS2V5d29yZCk7XG4gICAgICAgICAgICAgICAgdG9rZW4uc3lzdGVtSWQgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuQVBPU1RST1BIRToge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi5taXNzaW5nV2hpdGVzcGFjZUFmdGVyRG9jdHlwZVN5c3RlbUtleXdvcmQpO1xuICAgICAgICAgICAgICAgIHRva2VuLnN5c3RlbUlkID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLm1pc3NpbmdEb2N0eXBlU3lzdGVtSWRlbnRpZmllcik7XG4gICAgICAgICAgICAgICAgdG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnREb2N0eXBlKHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi5lb2ZJbkRvY3R5cGUpO1xuICAgICAgICAgICAgICAgIHRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLm1pc3NpbmdRdW90ZUJlZm9yZURvY3R5cGVTeXN0ZW1JZGVudGlmaWVyKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkJPR1VTX0RPQ1RZUEU7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVCb2d1c0RvY3R5cGUoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEJlZm9yZSBET0NUWVBFIHN5c3RlbSBpZGVudGlmaWVyIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVCZWZvcmVEb2N0eXBlU3lzdGVtSWRlbnRpZmllcihjcCkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5TUEFDRTpcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkxJTkVfRkVFRDpcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLlRBQlVMQVRJT046XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5GT1JNX0ZFRUQ6IHtcbiAgICAgICAgICAgICAgICAvLyBJZ25vcmUgd2hpdGVzcGFjZVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuUVVPVEFUSU9OX01BUks6IHtcbiAgICAgICAgICAgICAgICB0b2tlbi5zeXN0ZW1JZCA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX0RPVUJMRV9RVU9URUQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5BUE9TVFJPUEhFOiB7XG4gICAgICAgICAgICAgICAgdG9rZW4uc3lzdGVtSWQgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuR1JFQVRFUl9USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIubWlzc2luZ0RvY3R5cGVTeXN0ZW1JZGVudGlmaWVyKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudERvY3R5cGUodG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLmVvZkluRG9jdHlwZSk7XG4gICAgICAgICAgICAgICAgdG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnREb2N0eXBlKHRva2VuKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIubWlzc2luZ1F1b3RlQmVmb3JlRG9jdHlwZVN5c3RlbUlkZW50aWZpZXIpO1xuICAgICAgICAgICAgICAgIHRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQk9HVVNfRE9DVFlQRTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUJvZ3VzRG9jdHlwZShjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gRE9DVFlQRSBzeXN0ZW0gaWRlbnRpZmllciAoZG91YmxlLXF1b3RlZCkgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZURvY3R5cGVTeXN0ZW1JZGVudGlmaWVyRG91YmxlUXVvdGVkKGNwKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW47XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLlFVT1RBVElPTl9NQVJLOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkFGVEVSX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5OVUxMOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5zeXN0ZW1JZCArPSB1bmljb2RlX2pzXzEuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuR1JFQVRFUl9USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIuYWJydXB0RG9jdHlwZVN5c3RlbUlkZW50aWZpZXIpO1xuICAgICAgICAgICAgICAgIHRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIuZW9mSW5Eb2N0eXBlKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudERvY3R5cGUodG9rZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRva2VuLnN5c3RlbUlkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBET0NUWVBFIHN5c3RlbSBpZGVudGlmaWVyIChzaW5nbGUtcXVvdGVkKSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlRG9jdHlwZVN5c3RlbUlkZW50aWZpZXJTaW5nbGVRdW90ZWQoY3ApIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuQVBPU1RST1BIRToge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5BRlRFUl9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuTlVMTDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICAgICAgdG9rZW4uc3lzdGVtSWQgKz0gdW5pY29kZV9qc18xLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLmFicnVwdERvY3R5cGVTeXN0ZW1JZGVudGlmaWVyKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudERvY3R5cGUodG9rZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLmVvZkluRG9jdHlwZSk7XG4gICAgICAgICAgICAgICAgdG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnREb2N0eXBlKHRva2VuKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0b2tlbi5zeXN0ZW1JZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQWZ0ZXIgRE9DVFlQRSBzeXN0ZW0gaWRlbnRpZmllciBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlQWZ0ZXJEb2N0eXBlU3lzdGVtSWRlbnRpZmllcihjcCkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5TUEFDRTpcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkxJTkVfRkVFRDpcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLlRBQlVMQVRJT046XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5GT1JNX0ZFRUQ6IHtcbiAgICAgICAgICAgICAgICAvLyBJZ25vcmUgd2hpdGVzcGFjZVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuR1JFQVRFUl9USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIuZW9mSW5Eb2N0eXBlKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudERvY3R5cGUodG9rZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi51bmV4cGVjdGVkQ2hhcmFjdGVyQWZ0ZXJEb2N0eXBlU3lzdGVtSWRlbnRpZmllcik7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkJPR1VTX0RPQ1RZUEU7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVCb2d1c0RvY3R5cGUoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEJvZ3VzIERPQ1RZUEUgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUJvZ3VzRG9jdHlwZShjcCkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5HUkVBVEVSX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnREb2N0eXBlKHRva2VuKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuREFUQTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLk5VTEw6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIudW5leHBlY3RlZE51bGxDaGFyYWN0ZXIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudERvY3R5cGUodG9rZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIERvIG5vdGhpbmdcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDREFUQSBzZWN0aW9uIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVDZGF0YVNlY3Rpb24oY3ApIHtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuUklHSFRfU1FVQVJFX0JSQUNLRVQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQ0RBVEFfU0VDVElPTl9CUkFDS0VUO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLmVvZkluQ2RhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIENEQVRBIHNlY3Rpb24gYnJhY2tldCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlQ2RhdGFTZWN0aW9uQnJhY2tldChjcCkge1xuICAgICAgICBpZiAoY3AgPT09IHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5SSUdIVF9TUVVBUkVfQlJBQ0tFVCkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkNEQVRBX1NFQ1RJT05fRU5EO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCddJyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQ0RBVEFfU0VDVElPTjtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlQ2RhdGFTZWN0aW9uKGNwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDREFUQSBzZWN0aW9uIGVuZCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlQ2RhdGFTZWN0aW9uRW5kKGNwKSB7XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5SSUdIVF9TUVVBUkVfQlJBQ0tFVDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnXScpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnXV0nKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQ0RBVEFfU0VDVElPTjtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUNkYXRhU2VjdGlvbihjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQ2hhcmFjdGVyIHJlZmVyZW5jZSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlQ2hhcmFjdGVyUmVmZXJlbmNlKGNwKSB7XG4gICAgICAgIGlmIChjcCA9PT0gdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLk5VTUJFUl9TSUdOKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuTlVNRVJJQ19DSEFSQUNURVJfUkVGRVJFTkNFO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzQXNjaWlBbHBoYU51bWVyaWMoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuTkFNRURfQ0hBUkFDVEVSX1JFRkVSRU5DRTtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlTmFtZWRDaGFyYWN0ZXJSZWZlcmVuY2UoY3ApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZmx1c2hDb2RlUG9pbnRDb25zdW1lZEFzQ2hhcmFjdGVyUmVmZXJlbmNlKHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5BTVBFUlNBTkQpO1xuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZSh0aGlzLnJldHVyblN0YXRlLCBjcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gTmFtZWQgY2hhcmFjdGVyIHJlZmVyZW5jZSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlTmFtZWRDaGFyYWN0ZXJSZWZlcmVuY2UoY3ApIHtcbiAgICAgICAgY29uc3QgbWF0Y2hSZXN1bHQgPSB0aGlzLl9tYXRjaE5hbWVkQ2hhcmFjdGVyUmVmZXJlbmNlKGNwKTtcbiAgICAgICAgLy9OT1RFOiBNYXRjaGluZyBjYW4gYmUgYWJydXB0ZWQgYnkgaGliZXJuYXRpb24uIEluIHRoYXQgY2FzZSwgbWF0Y2hcbiAgICAgICAgLy9yZXN1bHRzIGFyZSBubyBsb25nZXIgdmFsaWQgYW5kIHdlIHdpbGwgbmVlZCB0byBzdGFydCBvdmVyLlxuICAgICAgICBpZiAodGhpcy5fZW5zdXJlSGliZXJuYXRpb24oKSkge1xuICAgICAgICAgICAgLy8gU3RheSBpbiB0aGUgc3RhdGUsIHRyeSBhZ2Fpbi5cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFJlc3VsdCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRjaFJlc3VsdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZsdXNoQ29kZVBvaW50Q29uc3VtZWRBc0NoYXJhY3RlclJlZmVyZW5jZShtYXRjaFJlc3VsdFtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gdGhpcy5yZXR1cm5TdGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2ZsdXNoQ29kZVBvaW50Q29uc3VtZWRBc0NoYXJhY3RlclJlZmVyZW5jZSh1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuQU1QRVJTQU5EKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5BTUJJR1VPVVNfQU1QRVJTQU5EO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEFtYmlndW9zIGFtcGVyc2FuZCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlQW1iaWd1b3VzQW1wZXJzYW5kKGNwKSB7XG4gICAgICAgIGlmIChpc0FzY2lpQWxwaGFOdW1lcmljKGNwKSkge1xuICAgICAgICAgICAgdGhpcy5fZmx1c2hDb2RlUG9pbnRDb25zdW1lZEFzQ2hhcmFjdGVyUmVmZXJlbmNlKGNwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChjcCA9PT0gdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLlNFTUlDT0xPTikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi51bmtub3duTmFtZWRDaGFyYWN0ZXJSZWZlcmVuY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZSh0aGlzLnJldHVyblN0YXRlLCBjcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gTnVtZXJpYyBjaGFyYWN0ZXIgcmVmZXJlbmNlIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVOdW1lcmljQ2hhcmFjdGVyUmVmZXJlbmNlKGNwKSB7XG4gICAgICAgIHRoaXMuY2hhclJlZkNvZGUgPSAwO1xuICAgICAgICBpZiAoY3AgPT09IHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5MQVRJTl9TTUFMTF9YIHx8IGNwID09PSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuTEFUSU5fQ0FQSVRBTF9YKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuSEVYQURFTUlDQUxfQ0hBUkFDVEVSX1JFRkVSRU5DRV9TVEFSVDtcbiAgICAgICAgfVxuICAgICAgICAvLyBJbmxpbmVkIGRlY2ltYWwgY2hhcmFjdGVyIHJlZmVyZW5jZSBzdGFydCBzdGF0ZVxuICAgICAgICBlbHNlIGlmIChpc0FzY2lpRGlnaXQoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuREVDSU1BTF9DSEFSQUNURVJfUkVGRVJFTkNFO1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVEZWNpbWFsQ2hhcmFjdGVyUmVmZXJlbmNlKGNwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi5hYnNlbmNlT2ZEaWdpdHNJbk51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2UpO1xuICAgICAgICAgICAgdGhpcy5fZmx1c2hDb2RlUG9pbnRDb25zdW1lZEFzQ2hhcmFjdGVyUmVmZXJlbmNlKHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5BTVBFUlNBTkQpO1xuICAgICAgICAgICAgdGhpcy5fZmx1c2hDb2RlUG9pbnRDb25zdW1lZEFzQ2hhcmFjdGVyUmVmZXJlbmNlKHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5OVU1CRVJfU0lHTik7XG4gICAgICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKHRoaXMucmV0dXJuU3RhdGUsIGNwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBIZXhhZGVtaWNhbCBjaGFyYWN0ZXIgcmVmZXJlbmNlIHN0YXJ0IHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVIZXhhZGVtaWNhbENoYXJhY3RlclJlZmVyZW5jZVN0YXJ0KGNwKSB7XG4gICAgICAgIGlmIChpc0FzY2lpSGV4RGlnaXQoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuSEVYQURFTUlDQUxfQ0hBUkFDVEVSX1JFRkVSRU5DRTtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlSGV4YWRlbWljYWxDaGFyYWN0ZXJSZWZlcmVuY2UoY3ApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLmFic2VuY2VPZkRpZ2l0c0luTnVtZXJpY0NoYXJhY3RlclJlZmVyZW5jZSk7XG4gICAgICAgICAgICB0aGlzLl9mbHVzaENvZGVQb2ludENvbnN1bWVkQXNDaGFyYWN0ZXJSZWZlcmVuY2UodW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkFNUEVSU0FORCk7XG4gICAgICAgICAgICB0aGlzLl9mbHVzaENvZGVQb2ludENvbnN1bWVkQXNDaGFyYWN0ZXJSZWZlcmVuY2UodW5pY29kZV9qc18xLkNPREVfUE9JTlRTLk5VTUJFUl9TSUdOKTtcbiAgICAgICAgICAgIHRoaXMuX3VuY29uc3VtZSgyKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSB0aGlzLnJldHVyblN0YXRlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEhleGFkZW1pY2FsIGNoYXJhY3RlciByZWZlcmVuY2Ugc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUhleGFkZW1pY2FsQ2hhcmFjdGVyUmVmZXJlbmNlKGNwKSB7XG4gICAgICAgIGlmIChpc0FzY2lpVXBwZXJIZXhEaWdpdChjcCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhclJlZkNvZGUgPSB0aGlzLmNoYXJSZWZDb2RlICogMTYgKyBjcCAtIDB4Mzc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VySGV4RGlnaXQoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLmNoYXJSZWZDb2RlID0gdGhpcy5jaGFyUmVmQ29kZSAqIDE2ICsgY3AgLSAweDU3O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzQXNjaWlEaWdpdChjcCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhclJlZkNvZGUgPSB0aGlzLmNoYXJSZWZDb2RlICogMTYgKyBjcCAtIDB4MzA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY3AgPT09IHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5TRU1JQ09MT04pIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5OVU1FUklDX0NIQVJBQ1RFUl9SRUZFUkVOQ0VfRU5EO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLm1pc3NpbmdTZW1pY29sb25BZnRlckNoYXJhY3RlclJlZmVyZW5jZSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuTlVNRVJJQ19DSEFSQUNURVJfUkVGRVJFTkNFX0VORDtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlTnVtZXJpY0NoYXJhY3RlclJlZmVyZW5jZUVuZChjcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gRGVjaW1hbCBjaGFyYWN0ZXIgcmVmZXJlbmNlIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVEZWNpbWFsQ2hhcmFjdGVyUmVmZXJlbmNlKGNwKSB7XG4gICAgICAgIGlmIChpc0FzY2lpRGlnaXQoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLmNoYXJSZWZDb2RlID0gdGhpcy5jaGFyUmVmQ29kZSAqIDEwICsgY3AgLSAweDMwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNwID09PSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuU0VNSUNPTE9OKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuTlVNRVJJQ19DSEFSQUNURVJfUkVGRVJFTkNFX0VORDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi5taXNzaW5nU2VtaWNvbG9uQWZ0ZXJDaGFyYWN0ZXJSZWZlcmVuY2UpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLk5VTUVSSUNfQ0hBUkFDVEVSX1JFRkVSRU5DRV9FTkQ7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZU51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2VFbmQoY3ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIE51bWVyaWMgY2hhcmFjdGVyIHJlZmVyZW5jZSBlbmQgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZU51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2VFbmQoY3ApIHtcbiAgICAgICAgaWYgKHRoaXMuY2hhclJlZkNvZGUgPT09IHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5OVUxMKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIubnVsbENoYXJhY3RlclJlZmVyZW5jZSk7XG4gICAgICAgICAgICB0aGlzLmNoYXJSZWZDb2RlID0gdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNoYXJSZWZDb2RlID4gMTExNDExMSkge1xuICAgICAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLmNoYXJhY3RlclJlZmVyZW5jZU91dHNpZGVVbmljb2RlUmFuZ2UpO1xuICAgICAgICAgICAgdGhpcy5jaGFyUmVmQ29kZSA9IHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKDAsIHVuaWNvZGVfanNfMS5pc1N1cnJvZ2F0ZSkodGhpcy5jaGFyUmVmQ29kZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi5zdXJyb2dhdGVDaGFyYWN0ZXJSZWZlcmVuY2UpO1xuICAgICAgICAgICAgdGhpcy5jaGFyUmVmQ29kZSA9IHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKDAsIHVuaWNvZGVfanNfMS5pc1VuZGVmaW5lZENvZGVQb2ludCkodGhpcy5jaGFyUmVmQ29kZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi5ub25jaGFyYWN0ZXJDaGFyYWN0ZXJSZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCgwLCB1bmljb2RlX2pzXzEuaXNDb250cm9sQ29kZVBvaW50KSh0aGlzLmNoYXJSZWZDb2RlKSB8fCB0aGlzLmNoYXJSZWZDb2RlID09PSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuQ0FSUklBR0VfUkVUVVJOKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIuY29udHJvbENoYXJhY3RlclJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjb25zdCByZXBsYWNlbWVudCA9IEMxX0NPTlRST0xTX1JFRkVSRU5DRV9SRVBMQUNFTUVOVFMuZ2V0KHRoaXMuY2hhclJlZkNvZGUpO1xuICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYXJSZWZDb2RlID0gcmVwbGFjZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZmx1c2hDb2RlUG9pbnRDb25zdW1lZEFzQ2hhcmFjdGVyUmVmZXJlbmNlKHRoaXMuY2hhclJlZkNvZGUpO1xuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKHRoaXMucmV0dXJuU3RhdGUsIGNwKTtcbiAgICB9XG59XG5leHBvcnRzLlRva2VuaXplciA9IFRva2VuaXplcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5QcmVwcm9jZXNzb3IgPSB2b2lkIDA7XG5jb25zdCB1bmljb2RlX2pzXzEgPSByZXF1aXJlKFwiLi4vY29tbW9uL3VuaWNvZGUuanNcIik7XG5jb25zdCBlcnJvcl9jb2Rlc19qc18xID0gcmVxdWlyZShcIi4uL2NvbW1vbi9lcnJvci1jb2Rlcy5qc1wiKTtcbi8vQ29uc3RcbmNvbnN0IERFRkFVTFRfQlVGRkVSX1dBVEVSTElORSA9IDEgPDwgMTY7XG4vL1ByZXByb2Nlc3NvclxuLy9OT1RFOiBIVE1MIGlucHV0IHByZXByb2Nlc3Npbmdcbi8vKHNlZTogaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvcGFyc2luZy5odG1sI3ByZXByb2Nlc3NpbmctdGhlLWlucHV0LXN0cmVhbSlcbmNsYXNzIFByZXByb2Nlc3NvciB7XG4gICAgY29uc3RydWN0b3IoaGFuZGxlcikge1xuICAgICAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyO1xuICAgICAgICB0aGlzLmh0bWwgPSAnJztcbiAgICAgICAgdGhpcy5wb3MgPSAtMTtcbiAgICAgICAgLy8gTk9URTogSW5pdGlhbCBgbGFzdEdhcFBvc2AgaXMgLTIsIHRvIGVuc3VyZSBgY29sYCBvbiBpbml0aWFsaXNhdGlvbiBpcyAwXG4gICAgICAgIHRoaXMubGFzdEdhcFBvcyA9IC0yO1xuICAgICAgICB0aGlzLmdhcFN0YWNrID0gW107XG4gICAgICAgIHRoaXMuc2tpcE5leHROZXdMaW5lID0gZmFsc2U7XG4gICAgICAgIHRoaXMubGFzdENodW5rV3JpdHRlbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVuZE9mQ2h1bmtIaXQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5idWZmZXJXYXRlcmxpbmUgPSBERUZBVUxUX0JVRkZFUl9XQVRFUkxJTkU7XG4gICAgICAgIHRoaXMuaXNFb2wgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5saW5lU3RhcnRQb3MgPSAwO1xuICAgICAgICB0aGlzLmRyb3BwZWRCdWZmZXJTaXplID0gMDtcbiAgICAgICAgdGhpcy5saW5lID0gMTtcbiAgICAgICAgLy9OT1RFOiBhdm9pZCByZXBvcnRpbmcgZXJyb3JzIHR3aWNlIG9uIGFkdmFuY2UvcmV0cmVhdFxuICAgICAgICB0aGlzLmxhc3RFcnJPZmZzZXQgPSAtMTtcbiAgICB9XG4gICAgLyoqIFRoZSBjb2x1bW4gb24gdGhlIGN1cnJlbnQgbGluZS4gSWYgd2UganVzdCBzYXcgYSBnYXAgKGVnLiBhIHN1cnJvZ2F0ZSBwYWlyKSwgcmV0dXJuIHRoZSBpbmRleCBiZWZvcmUuICovXG4gICAgZ2V0IGNvbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zIC0gdGhpcy5saW5lU3RhcnRQb3MgKyBOdW1iZXIodGhpcy5sYXN0R2FwUG9zICE9PSB0aGlzLnBvcyk7XG4gICAgfVxuICAgIGdldCBvZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRyb3BwZWRCdWZmZXJTaXplICsgdGhpcy5wb3M7XG4gICAgfVxuICAgIGdldEVycm9yKGNvZGUpIHtcbiAgICAgICAgY29uc3QgeyBsaW5lLCBjb2wsIG9mZnNldCB9ID0gdGhpcztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvZGUsXG4gICAgICAgICAgICBzdGFydExpbmU6IGxpbmUsXG4gICAgICAgICAgICBlbmRMaW5lOiBsaW5lLFxuICAgICAgICAgICAgc3RhcnRDb2w6IGNvbCxcbiAgICAgICAgICAgIGVuZENvbDogY29sLFxuICAgICAgICAgICAgc3RhcnRPZmZzZXQ6IG9mZnNldCxcbiAgICAgICAgICAgIGVuZE9mZnNldDogb2Zmc2V0LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBfZXJyKGNvZGUpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFuZGxlci5vblBhcnNlRXJyb3IgJiYgdGhpcy5sYXN0RXJyT2Zmc2V0ICE9PSB0aGlzLm9mZnNldCkge1xuICAgICAgICAgICAgdGhpcy5sYXN0RXJyT2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZXIub25QYXJzZUVycm9yKHRoaXMuZ2V0RXJyb3IoY29kZSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9hZGRHYXAoKSB7XG4gICAgICAgIHRoaXMuZ2FwU3RhY2sucHVzaCh0aGlzLmxhc3RHYXBQb3MpO1xuICAgICAgICB0aGlzLmxhc3RHYXBQb3MgPSB0aGlzLnBvcztcbiAgICB9XG4gICAgX3Byb2Nlc3NTdXJyb2dhdGUoY3ApIHtcbiAgICAgICAgLy9OT1RFOiB0cnkgdG8gcGVlayBhIHN1cnJvZ2F0ZSBwYWlyXG4gICAgICAgIGlmICh0aGlzLnBvcyAhPT0gdGhpcy5odG1sLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRDcCA9IHRoaXMuaHRtbC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMSk7XG4gICAgICAgICAgICBpZiAoKDAsIHVuaWNvZGVfanNfMS5pc1N1cnJvZ2F0ZVBhaXIpKG5leHRDcCkpIHtcbiAgICAgICAgICAgICAgICAvL05PVEU6IHdlIGhhdmUgYSBzdXJyb2dhdGUgcGFpci4gUGVlayBwYWlyIGNoYXJhY3RlciBhbmQgcmVjYWxjdWxhdGUgY29kZSBwb2ludC5cbiAgICAgICAgICAgICAgICB0aGlzLnBvcysrO1xuICAgICAgICAgICAgICAgIC8vTk9URTogYWRkIGEgZ2FwIHRoYXQgc2hvdWxkIGJlIGF2b2lkZWQgZHVyaW5nIHJldHJlYXRcbiAgICAgICAgICAgICAgICB0aGlzLl9hZGRHYXAoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIHVuaWNvZGVfanNfMS5nZXRTdXJyb2dhdGVQYWlyQ29kZVBvaW50KShjcCwgbmV4dENwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL05PVEU6IHdlIGFyZSBhdCB0aGUgZW5kIG9mIGEgY2h1bmssIHRoZXJlZm9yZSB3ZSBjYW4ndCBpbmZlciB0aGUgc3Vycm9nYXRlIHBhaXIgeWV0LlxuICAgICAgICBlbHNlIGlmICghdGhpcy5sYXN0Q2h1bmtXcml0dGVuKSB7XG4gICAgICAgICAgICB0aGlzLmVuZE9mQ2h1bmtIaXQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5FT0Y7XG4gICAgICAgIH1cbiAgICAgICAgLy9OT1RFOiBpc29sYXRlZCBzdXJyb2dhdGVcbiAgICAgICAgdGhpcy5fZXJyKGVycm9yX2NvZGVzX2pzXzEuRVJSLnN1cnJvZ2F0ZUluSW5wdXRTdHJlYW0pO1xuICAgICAgICByZXR1cm4gY3A7XG4gICAgfVxuICAgIHdpbGxEcm9wUGFyc2VkQ2h1bmsoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBvcyA+IHRoaXMuYnVmZmVyV2F0ZXJsaW5lO1xuICAgIH1cbiAgICBkcm9wUGFyc2VkQ2h1bmsoKSB7XG4gICAgICAgIGlmICh0aGlzLndpbGxEcm9wUGFyc2VkQ2h1bmsoKSkge1xuICAgICAgICAgICAgdGhpcy5odG1sID0gdGhpcy5odG1sLnN1YnN0cmluZyh0aGlzLnBvcyk7XG4gICAgICAgICAgICB0aGlzLmxpbmVTdGFydFBvcyAtPSB0aGlzLnBvcztcbiAgICAgICAgICAgIHRoaXMuZHJvcHBlZEJ1ZmZlclNpemUgKz0gdGhpcy5wb3M7XG4gICAgICAgICAgICB0aGlzLnBvcyA9IDA7XG4gICAgICAgICAgICB0aGlzLmxhc3RHYXBQb3MgPSAtMjtcbiAgICAgICAgICAgIHRoaXMuZ2FwU3RhY2subGVuZ3RoID0gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICB3cml0ZShjaHVuaywgaXNMYXN0Q2h1bmspIHtcbiAgICAgICAgaWYgKHRoaXMuaHRtbC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmh0bWwgKz0gY2h1bms7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmh0bWwgPSBjaHVuaztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVuZE9mQ2h1bmtIaXQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5sYXN0Q2h1bmtXcml0dGVuID0gaXNMYXN0Q2h1bms7XG4gICAgfVxuICAgIGluc2VydEh0bWxBdEN1cnJlbnRQb3MoY2h1bmspIHtcbiAgICAgICAgdGhpcy5odG1sID0gdGhpcy5odG1sLnN1YnN0cmluZygwLCB0aGlzLnBvcyArIDEpICsgY2h1bmsgKyB0aGlzLmh0bWwuc3Vic3RyaW5nKHRoaXMucG9zICsgMSk7XG4gICAgICAgIHRoaXMuZW5kT2ZDaHVua0hpdCA9IGZhbHNlO1xuICAgIH1cbiAgICBzdGFydHNXaXRoKHBhdHRlcm4sIGNhc2VTZW5zaXRpdmUpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgb3VyIGJ1ZmZlciBoYXMgZW5vdWdoIGNoYXJhY3RlcnNcbiAgICAgICAgaWYgKHRoaXMucG9zICsgcGF0dGVybi5sZW5ndGggPiB0aGlzLmh0bWwubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmVuZE9mQ2h1bmtIaXQgPSAhdGhpcy5sYXN0Q2h1bmtXcml0dGVuO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYXNlU2Vuc2l0aXZlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5odG1sLnN0YXJ0c1dpdGgocGF0dGVybiwgdGhpcy5wb3MpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0dGVybi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY3AgPSB0aGlzLmh0bWwuY2hhckNvZGVBdCh0aGlzLnBvcyArIGkpIHwgMHgyMDtcbiAgICAgICAgICAgIGlmIChjcCAhPT0gcGF0dGVybi5jaGFyQ29kZUF0KGkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBwZWVrKG9mZnNldCkge1xuICAgICAgICBjb25zdCBwb3MgPSB0aGlzLnBvcyArIG9mZnNldDtcbiAgICAgICAgaWYgKHBvcyA+PSB0aGlzLmh0bWwubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmVuZE9mQ2h1bmtIaXQgPSAhdGhpcy5sYXN0Q2h1bmtXcml0dGVuO1xuICAgICAgICAgICAgcmV0dXJuIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5FT0Y7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29kZSA9IHRoaXMuaHRtbC5jaGFyQ29kZUF0KHBvcyk7XG4gICAgICAgIHJldHVybiBjb2RlID09PSB1bmljb2RlX2pzXzEuQ09ERV9QT0lOVFMuQ0FSUklBR0VfUkVUVVJOID8gdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkxJTkVfRkVFRCA6IGNvZGU7XG4gICAgfVxuICAgIGFkdmFuY2UoKSB7XG4gICAgICAgIHRoaXMucG9zKys7XG4gICAgICAgIC8vTk9URTogTEYgc2hvdWxkIGJlIGluIHRoZSBsYXN0IGNvbHVtbiBvZiB0aGUgbGluZVxuICAgICAgICBpZiAodGhpcy5pc0VvbCkge1xuICAgICAgICAgICAgdGhpcy5pc0VvbCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5saW5lKys7XG4gICAgICAgICAgICB0aGlzLmxpbmVTdGFydFBvcyA9IHRoaXMucG9zO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBvcyA+PSB0aGlzLmh0bWwubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmVuZE9mQ2h1bmtIaXQgPSAhdGhpcy5sYXN0Q2h1bmtXcml0dGVuO1xuICAgICAgICAgICAgcmV0dXJuIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5FT0Y7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNwID0gdGhpcy5odG1sLmNoYXJDb2RlQXQodGhpcy5wb3MpO1xuICAgICAgICAvL05PVEU6IGFsbCBVKzAwMEQgQ0FSUklBR0UgUkVUVVJOIChDUikgY2hhcmFjdGVycyBtdXN0IGJlIGNvbnZlcnRlZCB0byBVKzAwMEEgTElORSBGRUVEIChMRikgY2hhcmFjdGVyc1xuICAgICAgICBpZiAoY3AgPT09IHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5DQVJSSUFHRV9SRVRVUk4pIHtcbiAgICAgICAgICAgIHRoaXMuaXNFb2wgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5MSU5FX0ZFRUQ7XG4gICAgICAgIH1cbiAgICAgICAgLy9OT1RFOiBhbnkgVSswMDBBIExJTkUgRkVFRCAoTEYpIGNoYXJhY3RlcnMgdGhhdCBpbW1lZGlhdGVseSBmb2xsb3cgYSBVKzAwMEQgQ0FSUklBR0UgUkVUVVJOIChDUikgY2hhcmFjdGVyXG4gICAgICAgIC8vbXVzdCBiZSBpZ25vcmVkLlxuICAgICAgICBpZiAoY3AgPT09IHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5MSU5FX0ZFRUQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNFb2wgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2tpcE5leHROZXdMaW5lKSB7XG4gICAgICAgICAgICAgICAgLy8gYGxpbmVgIHdpbGwgYmUgYnVtcGVkIGFnYWluIGluIHRoZSByZWN1cnNpdmUgY2FsbC5cbiAgICAgICAgICAgICAgICB0aGlzLmxpbmUtLTtcbiAgICAgICAgICAgICAgICB0aGlzLnNraXBOZXh0TmV3TGluZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkZEdhcCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFkdmFuY2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNraXBOZXh0TmV3TGluZSA9IGZhbHNlO1xuICAgICAgICBpZiAoKDAsIHVuaWNvZGVfanNfMS5pc1N1cnJvZ2F0ZSkoY3ApKSB7XG4gICAgICAgICAgICBjcCA9IHRoaXMuX3Byb2Nlc3NTdXJyb2dhdGUoY3ApO1xuICAgICAgICB9XG4gICAgICAgIC8vT1BUSU1JWkFUSU9OOiBmaXJzdCBjaGVjayBpZiBjb2RlIHBvaW50IGlzIGluIHRoZSBjb21tb24gYWxsb3dlZFxuICAgICAgICAvL3JhbmdlIChBU0NJSSBhbHBoYW51bWVyaWMsIHdoaXRlc3BhY2VzLCBiaWcgY2h1bmsgb2YgQk1QKVxuICAgICAgICAvL2JlZm9yZSBnb2luZyBpbnRvIGRldGFpbGVkIHBlcmZvcm1hbmNlIGNvc3QgdmFsaWRhdGlvbi5cbiAgICAgICAgY29uc3QgaXNDb21tb25WYWxpZFJhbmdlID0gdGhpcy5oYW5kbGVyLm9uUGFyc2VFcnJvciA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgKGNwID4gMHgxZiAmJiBjcCA8IDB4N2YpIHx8XG4gICAgICAgICAgICBjcCA9PT0gdW5pY29kZV9qc18xLkNPREVfUE9JTlRTLkxJTkVfRkVFRCB8fFxuICAgICAgICAgICAgY3AgPT09IHVuaWNvZGVfanNfMS5DT0RFX1BPSU5UUy5DQVJSSUFHRV9SRVRVUk4gfHxcbiAgICAgICAgICAgIChjcCA+IDB4OWYgJiYgY3AgPCA2NDk3Nik7XG4gICAgICAgIGlmICghaXNDb21tb25WYWxpZFJhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLl9jaGVja0ZvclByb2JsZW1hdGljQ2hhcmFjdGVycyhjcCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNwO1xuICAgIH1cbiAgICBfY2hlY2tGb3JQcm9ibGVtYXRpY0NoYXJhY3RlcnMoY3ApIHtcbiAgICAgICAgaWYgKCgwLCB1bmljb2RlX2pzXzEuaXNDb250cm9sQ29kZVBvaW50KShjcCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihlcnJvcl9jb2Rlc19qc18xLkVSUi5jb250cm9sQ2hhcmFjdGVySW5JbnB1dFN0cmVhbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKDAsIHVuaWNvZGVfanNfMS5pc1VuZGVmaW5lZENvZGVQb2ludCkoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3JfY29kZXNfanNfMS5FUlIubm9uY2hhcmFjdGVySW5JbnB1dFN0cmVhbSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0cmVhdChjb3VudCkge1xuICAgICAgICB0aGlzLnBvcyAtPSBjb3VudDtcbiAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgdGhpcy5sYXN0R2FwUG9zKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RHYXBQb3MgPSB0aGlzLmdhcFN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgdGhpcy5wb3MtLTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzRW9sID0gZmFsc2U7XG4gICAgfVxufVxuZXhwb3J0cy5QcmVwcm9jZXNzb3IgPSBQcmVwcm9jZXNzb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcmVwcm9jZXNzb3IuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHRUcmVlQWRhcHRlciA9IHZvaWQgMDtcbmNvbnN0IGh0bWxfanNfMSA9IHJlcXVpcmUoXCIuLi9jb21tb24vaHRtbC5qc1wiKTtcbmZ1bmN0aW9uIGNyZWF0ZVRleHROb2RlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbm9kZU5hbWU6ICcjdGV4dCcsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBwYXJlbnROb2RlOiBudWxsLFxuICAgIH07XG59XG5leHBvcnRzLmRlZmF1bHRUcmVlQWRhcHRlciA9IHtcbiAgICAvL05vZGUgY29uc3RydWN0aW9uXG4gICAgY3JlYXRlRG9jdW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBub2RlTmFtZTogJyNkb2N1bWVudCcsXG4gICAgICAgICAgICBtb2RlOiBodG1sX2pzXzEuRE9DVU1FTlRfTU9ERS5OT19RVUlSS1MsXG4gICAgICAgICAgICBjaGlsZE5vZGVzOiBbXSxcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIGNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBub2RlTmFtZTogJyNkb2N1bWVudC1mcmFnbWVudCcsXG4gICAgICAgICAgICBjaGlsZE5vZGVzOiBbXSxcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIGNyZWF0ZUVsZW1lbnQodGFnTmFtZSwgbmFtZXNwYWNlVVJJLCBhdHRycykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbm9kZU5hbWU6IHRhZ05hbWUsXG4gICAgICAgICAgICB0YWdOYW1lLFxuICAgICAgICAgICAgYXR0cnMsXG4gICAgICAgICAgICBuYW1lc3BhY2VVUkksXG4gICAgICAgICAgICBjaGlsZE5vZGVzOiBbXSxcbiAgICAgICAgICAgIHBhcmVudE5vZGU6IG51bGwsXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBjcmVhdGVDb21tZW50Tm9kZShkYXRhKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBub2RlTmFtZTogJyNjb21tZW50JyxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBwYXJlbnROb2RlOiBudWxsLFxuICAgICAgICB9O1xuICAgIH0sXG4gICAgLy9UcmVlIG11dGF0aW9uXG4gICAgYXBwZW5kQ2hpbGQocGFyZW50Tm9kZSwgbmV3Tm9kZSkge1xuICAgICAgICBwYXJlbnROb2RlLmNoaWxkTm9kZXMucHVzaChuZXdOb2RlKTtcbiAgICAgICAgbmV3Tm9kZS5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcbiAgICB9LFxuICAgIGluc2VydEJlZm9yZShwYXJlbnROb2RlLCBuZXdOb2RlLCByZWZlcmVuY2VOb2RlKSB7XG4gICAgICAgIGNvbnN0IGluc2VydGlvbklkeCA9IHBhcmVudE5vZGUuY2hpbGROb2Rlcy5pbmRleE9mKHJlZmVyZW5jZU5vZGUpO1xuICAgICAgICBwYXJlbnROb2RlLmNoaWxkTm9kZXMuc3BsaWNlKGluc2VydGlvbklkeCwgMCwgbmV3Tm9kZSk7XG4gICAgICAgIG5ld05vZGUucGFyZW50Tm9kZSA9IHBhcmVudE5vZGU7XG4gICAgfSxcbiAgICBzZXRUZW1wbGF0ZUNvbnRlbnQodGVtcGxhdGVFbGVtZW50LCBjb250ZW50RWxlbWVudCkge1xuICAgICAgICB0ZW1wbGF0ZUVsZW1lbnQuY29udGVudCA9IGNvbnRlbnRFbGVtZW50O1xuICAgIH0sXG4gICAgZ2V0VGVtcGxhdGVDb250ZW50KHRlbXBsYXRlRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdGVtcGxhdGVFbGVtZW50LmNvbnRlbnQ7XG4gICAgfSxcbiAgICBzZXREb2N1bWVudFR5cGUoZG9jdW1lbnQsIG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkge1xuICAgICAgICBjb25zdCBkb2N0eXBlTm9kZSA9IGRvY3VtZW50LmNoaWxkTm9kZXMuZmluZCgobm9kZSkgPT4gbm9kZS5ub2RlTmFtZSA9PT0gJyNkb2N1bWVudFR5cGUnKTtcbiAgICAgICAgaWYgKGRvY3R5cGVOb2RlKSB7XG4gICAgICAgICAgICBkb2N0eXBlTm9kZS5uYW1lID0gbmFtZTtcbiAgICAgICAgICAgIGRvY3R5cGVOb2RlLnB1YmxpY0lkID0gcHVibGljSWQ7XG4gICAgICAgICAgICBkb2N0eXBlTm9kZS5zeXN0ZW1JZCA9IHN5c3RlbUlkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHtcbiAgICAgICAgICAgICAgICBub2RlTmFtZTogJyNkb2N1bWVudFR5cGUnLFxuICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgcHVibGljSWQsXG4gICAgICAgICAgICAgICAgc3lzdGVtSWQsXG4gICAgICAgICAgICAgICAgcGFyZW50Tm9kZTogbnVsbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBleHBvcnRzLmRlZmF1bHRUcmVlQWRhcHRlci5hcHBlbmRDaGlsZChkb2N1bWVudCwgbm9kZSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHNldERvY3VtZW50TW9kZShkb2N1bWVudCwgbW9kZSkge1xuICAgICAgICBkb2N1bWVudC5tb2RlID0gbW9kZTtcbiAgICB9LFxuICAgIGdldERvY3VtZW50TW9kZShkb2N1bWVudCkge1xuICAgICAgICByZXR1cm4gZG9jdW1lbnQubW9kZTtcbiAgICB9LFxuICAgIGRldGFjaE5vZGUobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSBub2RlLnBhcmVudE5vZGUuY2hpbGROb2Rlcy5pbmRleE9mKG5vZGUpO1xuICAgICAgICAgICAgbm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICBub2RlLnBhcmVudE5vZGUgPSBudWxsO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBpbnNlcnRUZXh0KHBhcmVudE5vZGUsIHRleHQpIHtcbiAgICAgICAgaWYgKHBhcmVudE5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBwcmV2Tm9kZSA9IHBhcmVudE5vZGUuY2hpbGROb2Rlc1twYXJlbnROb2RlLmNoaWxkTm9kZXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAoZXhwb3J0cy5kZWZhdWx0VHJlZUFkYXB0ZXIuaXNUZXh0Tm9kZShwcmV2Tm9kZSkpIHtcbiAgICAgICAgICAgICAgICBwcmV2Tm9kZS52YWx1ZSArPSB0ZXh0O1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBleHBvcnRzLmRlZmF1bHRUcmVlQWRhcHRlci5hcHBlbmRDaGlsZChwYXJlbnROb2RlLCBjcmVhdGVUZXh0Tm9kZSh0ZXh0KSk7XG4gICAgfSxcbiAgICBpbnNlcnRUZXh0QmVmb3JlKHBhcmVudE5vZGUsIHRleHQsIHJlZmVyZW5jZU5vZGUpIHtcbiAgICAgICAgY29uc3QgcHJldk5vZGUgPSBwYXJlbnROb2RlLmNoaWxkTm9kZXNbcGFyZW50Tm9kZS5jaGlsZE5vZGVzLmluZGV4T2YocmVmZXJlbmNlTm9kZSkgLSAxXTtcbiAgICAgICAgaWYgKHByZXZOb2RlICYmIGV4cG9ydHMuZGVmYXVsdFRyZWVBZGFwdGVyLmlzVGV4dE5vZGUocHJldk5vZGUpKSB7XG4gICAgICAgICAgICBwcmV2Tm9kZS52YWx1ZSArPSB0ZXh0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZXhwb3J0cy5kZWZhdWx0VHJlZUFkYXB0ZXIuaW5zZXJ0QmVmb3JlKHBhcmVudE5vZGUsIGNyZWF0ZVRleHROb2RlKHRleHQpLCByZWZlcmVuY2VOb2RlKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgYWRvcHRBdHRyaWJ1dGVzKHJlY2lwaWVudCwgYXR0cnMpIHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50QXR0cnNNYXAgPSBuZXcgU2V0KHJlY2lwaWVudC5hdHRycy5tYXAoKGF0dHIpID0+IGF0dHIubmFtZSkpO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGF0dHJzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBpZiAoIXJlY2lwaWVudEF0dHJzTWFwLmhhcyhhdHRyc1tqXS5uYW1lKSkge1xuICAgICAgICAgICAgICAgIHJlY2lwaWVudC5hdHRycy5wdXNoKGF0dHJzW2pdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgLy9UcmVlIHRyYXZlcnNpbmdcbiAgICBnZXRGaXJzdENoaWxkKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGROb2Rlc1swXTtcbiAgICB9LFxuICAgIGdldENoaWxkTm9kZXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5jaGlsZE5vZGVzO1xuICAgIH0sXG4gICAgZ2V0UGFyZW50Tm9kZShub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLnBhcmVudE5vZGU7XG4gICAgfSxcbiAgICBnZXRBdHRyTGlzdChlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LmF0dHJzO1xuICAgIH0sXG4gICAgLy9Ob2RlIGRhdGFcbiAgICBnZXRUYWdOYW1lKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQudGFnTmFtZTtcbiAgICB9LFxuICAgIGdldE5hbWVzcGFjZVVSSShlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50Lm5hbWVzcGFjZVVSSTtcbiAgICB9LFxuICAgIGdldFRleHROb2RlQ29udGVudCh0ZXh0Tm9kZSkge1xuICAgICAgICByZXR1cm4gdGV4dE5vZGUudmFsdWU7XG4gICAgfSxcbiAgICBnZXRDb21tZW50Tm9kZUNvbnRlbnQoY29tbWVudE5vZGUpIHtcbiAgICAgICAgcmV0dXJuIGNvbW1lbnROb2RlLmRhdGE7XG4gICAgfSxcbiAgICBnZXREb2N1bWVudFR5cGVOb2RlTmFtZShkb2N0eXBlTm9kZSkge1xuICAgICAgICByZXR1cm4gZG9jdHlwZU5vZGUubmFtZTtcbiAgICB9LFxuICAgIGdldERvY3VtZW50VHlwZU5vZGVQdWJsaWNJZChkb2N0eXBlTm9kZSkge1xuICAgICAgICByZXR1cm4gZG9jdHlwZU5vZGUucHVibGljSWQ7XG4gICAgfSxcbiAgICBnZXREb2N1bWVudFR5cGVOb2RlU3lzdGVtSWQoZG9jdHlwZU5vZGUpIHtcbiAgICAgICAgcmV0dXJuIGRvY3R5cGVOb2RlLnN5c3RlbUlkO1xuICAgIH0sXG4gICAgLy9Ob2RlIHR5cGVzXG4gICAgaXNUZXh0Tm9kZShub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLm5vZGVOYW1lID09PSAnI3RleHQnO1xuICAgIH0sXG4gICAgaXNDb21tZW50Tm9kZShub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLm5vZGVOYW1lID09PSAnI2NvbW1lbnQnO1xuICAgIH0sXG4gICAgaXNEb2N1bWVudFR5cGVOb2RlKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUubm9kZU5hbWUgPT09ICcjZG9jdW1lbnRUeXBlJztcbiAgICB9LFxuICAgIGlzRWxlbWVudE5vZGUobm9kZSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGUsICd0YWdOYW1lJyk7XG4gICAgfSxcbiAgICAvLyBTb3VyY2UgY29kZSBsb2NhdGlvblxuICAgIHNldE5vZGVTb3VyY2VDb2RlTG9jYXRpb24obm9kZSwgbG9jYXRpb24pIHtcbiAgICAgICAgbm9kZS5zb3VyY2VDb2RlTG9jYXRpb24gPSBsb2NhdGlvbjtcbiAgICB9LFxuICAgIGdldE5vZGVTb3VyY2VDb2RlTG9jYXRpb24obm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5zb3VyY2VDb2RlTG9jYXRpb247XG4gICAgfSxcbiAgICB1cGRhdGVOb2RlU291cmNlQ29kZUxvY2F0aW9uKG5vZGUsIGVuZExvY2F0aW9uKSB7XG4gICAgICAgIG5vZGUuc291cmNlQ29kZUxvY2F0aW9uID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBub2RlLnNvdXJjZUNvZGVMb2NhdGlvbiksIGVuZExvY2F0aW9uKTtcbiAgICB9LFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlZmF1bHQuanMubWFwIl19 diff --git a/ext/lib/ucs2length.js b/ext/lib/ucs2length.js deleted file mode 100644 index 120a64d4..00000000 --- a/ext/lib/ucs2length.js +++ /dev/null @@ -1,16 +0,0 @@ -export default function ucs2length(str) { -    const len = str.length; -    let length = 0; -    let pos = 0; -    let value; -    while (pos < len) { -        length++; -        value = str.charCodeAt(pos++); -        if (value >= 0xd800 && value <= 0xdbff && pos < len) { -            // high surrogate, and there is a next character -            value = str.charCodeAt(pos); -            if ((value & 0xfc00) === 0xdc00) pos++; // low surrogate -        } -    } -    return length; -} diff --git a/ext/lib/wanakana.min.js b/ext/lib/wanakana.min.js deleted file mode 100644 index 07b0d976..00000000 --- a/ext/lib/wanakana.min.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(t.wanakana={})}(this,function(t){"use strict";var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function n(t,e){return t(e={exports:{}},e.exports),e.exports}var r=n(function(t){var e=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=e)}),o=Object.freeze({default:r,__moduleExports:r}),i=n(function(t){var e=t.exports={version:"2.5.5"};"number"==typeof __e&&(__e=e)}),u=Object.freeze({default:i,__moduleExports:i,version:i.version}),a=function(t){return"object"==typeof t?null!==t:"function"==typeof t},c=Object.freeze({default:a,__moduleExports:a}),f=c&&a||c,s=function(t){if(!f(t))throw TypeError(t+" is not an object!");return t},l=Object.freeze({default:s,__moduleExports:s}),h=function(t){try{return!!t()}catch(t){return!0}},d=Object.freeze({default:h,__moduleExports:h}),v=d&&h||d,p=!v(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),y=Object.freeze({default:p,__moduleExports:p}),g=o&&r||o,_=g.document,m=f(_)&&f(_.createElement),b=function(t){return m?_.createElement(t):{}},E=Object.freeze({default:b,__moduleExports:b}),O=y&&p||y,j=E&&b||E,w=!O&&!v(function(){return 7!=Object.defineProperty(j("div"),"a",{get:function(){return 7}}).a}),x=Object.freeze({default:w,__moduleExports:w}),S=function(t,e){if(!f(t))return t;var n,r;if(e&&"function"==typeof(n=t.toString)&&!f(r=n.call(t)))return r;if("function"==typeof(n=t.valueOf)&&!f(r=n.call(t)))return r;if(!e&&"function"==typeof(n=t.toString)&&!f(r=n.call(t)))return r;throw TypeError("Can't convert object to primitive value")},A=Object.freeze({default:S,__moduleExports:S}),M=l&&s||l,z=x&&w||x,N=A&&S||A,P=Object.defineProperty,k=O?Object.defineProperty:function(t,e,n){if(M(t),e=N(e,!0),M(n),z)try{return P(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t},L={f:k},F=Object.freeze({default:L,__moduleExports:L,f:k}),I=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},R=Object.freeze({default:I,__moduleExports:I}),T=F&&L||F,C=R&&I||R,W=O?function(t,e,n){return T.f(t,e,C(1,n))}:function(t,e,n){return t[e]=n,t},U=Object.freeze({default:W,__moduleExports:W}),K={}.hasOwnProperty,B=function(t,e){return K.call(t,e)},D=Object.freeze({default:B,__moduleExports:B}),V=0,G=Math.random(),J=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++V+G).toString(36))},H=Object.freeze({default:J,__moduleExports:J}),Y=U&&W||U,q=D&&B||D,X=H&&J||H,$=u&&i||u,Q=n(function(t){var e=X("src"),n=Function.toString,r=(""+n).split("toString");$.inspectSource=function(t){return n.call(t)},(t.exports=function(t,n,o,i){var u="function"==typeof o;u&&(q(o,"name")||Y(o,"name",n)),t[n]!==o&&(u&&(q(o,e)||Y(o,e,t[n]?""+t[n]:r.join(n+""))),t===g?t[n]=o:i?t[n]?t[n]=o:Y(t,n,o):(delete t[n],Y(t,n,o)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[e]||n.call(this)})}),Z=Object.freeze({default:Q,__moduleExports:Q}),tt=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t},et=Object.freeze({default:tt,__moduleExports:tt}),nt=et&&tt||et,rt=function(t,e,n){if(nt(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,o){return t.call(e,n,r,o)}}return function(){return t.apply(e,arguments)}},ot=Object.freeze({default:rt,__moduleExports:rt}),it=Z&&Q||Z,ut=ot&&rt||ot,at=function(t,e,n){var r,o,i,u,a=t&at.F,c=t&at.G,f=t&at.P,s=t&at.B,l=c?g:t&at.S?g[e]||(g[e]={}):(g[e]||{}).prototype,h=c?$:$[e]||($[e]={}),d=h.prototype||(h.prototype={});for(r in c&&(n=e),n)i=((o=!a&&l&&void 0!==l[r])?l:n)[r],u=s&&o?ut(i,g):f&&"function"==typeof i?ut(Function.call,i):i,l&&it(l,r,i,t&at.U),h[r]!=i&&Y(h,r,u),f&&d[r]!=i&&(d[r]=i)};g.core=$,at.F=1,at.G=2,at.S=4,at.P=8,at.B=16,at.W=32,at.U=64,at.R=128;for(var ct,ft=at,st=Object.freeze({default:ft,__moduleExports:ft}),lt=X("typed_array"),ht=X("view"),dt=!(!g.ArrayBuffer||!g.DataView),vt=dt,pt=0,yt="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");9>pt;)(ct=g[yt[pt++]])?(Y(ct.prototype,lt,!0),Y(ct.prototype,ht,!0)):vt=!1;var gt={ABV:dt,CONSTR:vt,TYPED:lt,VIEW:ht},_t=Object.freeze({default:gt,__moduleExports:gt,ABV:gt.ABV,CONSTR:gt.CONSTR,TYPED:gt.TYPED,VIEW:gt.VIEW}),mt=Object.freeze({default:!1,__moduleExports:!1}),bt=function(t,e,n){for(var r in e)it(t,r,e[r],n);return t},Et=Object.freeze({default:bt,__moduleExports:bt}),Ot=function(t,e,n,r){if(!(t instanceof e)||void 0!==r&&r in t)throw TypeError(n+": incorrect invocation!");return t},jt=Object.freeze({default:Ot,__moduleExports:Ot}),wt=Math.ceil,xt=Math.floor,St=function(t){return isNaN(t=+t)?0:(t>0?xt:wt)(t)},At=Object.freeze({default:St,__moduleExports:St}),Mt=At&&St||At,zt=Math.min,Nt=function(t){return t>0?zt(Mt(t),9007199254740991):0},Pt=Object.freeze({default:Nt,__moduleExports:Nt}),kt=Pt&&Nt||Pt,Lt=function(t){if(void 0===t)return 0;var e=Mt(t),n=kt(e);if(e!==n)throw RangeError("Wrong length!");return n},Ft=Object.freeze({default:Lt,__moduleExports:Lt}),It={}.toString,Rt=function(t){return It.call(t).slice(8,-1)},Tt=Object.freeze({default:Rt,__moduleExports:Rt}),Ct=Tt&&Rt||Tt,Wt=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==Ct(t)?t.split(""):Object(t)},Ut=Object.freeze({default:Wt,__moduleExports:Wt}),Kt=function(t){if(void 0==t)throw TypeError("Can't call method on  "+t);return t},Bt=Object.freeze({default:Kt,__moduleExports:Kt}),Dt=Ut&&Wt||Ut,Vt=Bt&&Kt||Bt,Gt=function(t){return Dt(Vt(t))},Jt=Object.freeze({default:Gt,__moduleExports:Gt}),Ht=Math.max,Yt=Math.min,qt=function(t,e){return 0>(t=Mt(t))?Ht(t+e,0):Yt(t,e)},Xt=Object.freeze({default:qt,__moduleExports:qt}),$t=Jt&&Gt||Jt,Qt=Xt&&qt||Xt,Zt=function(t){return function(e,n,r){var o,i=$t(e),u=kt(i.length),a=Qt(r,u);if(t&&n!=n){for(;u>a;)if((o=i[a++])!=o)return!0}else for(;u>a;a++)if((t||a in i)&&i[a]===n)return t||a||0;return!t&&-1}},te=Object.freeze({default:Zt,__moduleExports:Zt}),ee=g["__core-js_shared__"]||(g["__core-js_shared__"]={}),ne=function(t){return ee[t]||(ee[t]={})},re=Object.freeze({default:ne,__moduleExports:ne}),oe=re&&ne||re,ie=oe("keys"),ue=function(t){return ie[t]||(ie[t]=X(t))},ae=Object.freeze({default:ue,__moduleExports:ue}),ce=te&&Zt||te,fe=ae&&ue||ae,se=ce(!1),le=fe("IE_PROTO"),he=function(t,e){var n,r=$t(t),o=0,i=[];for(n in r)n!=le&&q(r,n)&&i.push(n);for(;e.length>o;)q(r,n=e[o++])&&(~se(i,n)||i.push(n));return i},de=Object.freeze({default:he,__moduleExports:he}),ve="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),pe=Object.freeze({default:ve,__moduleExports:ve}),ye=de&&he||de,ge=pe&&ve||pe,_e=ge.concat("length","prototype"),me=Object.getOwnPropertyNames||function(t){return ye(t,_e)},be={f:me},Ee=Object.freeze({default:be,__moduleExports:be,f:me}),Oe=function(t){return Object(Vt(t))},je=Object.freeze({default:Oe,__moduleExports:Oe}),we=je&&Oe||je,xe=function(t){for(var e=we(this),n=kt(e.length),r=arguments.length,o=Qt(r>1?arguments[1]:void 0,n),i=r>2?arguments[2]:void 0,u=void 0===i?n:Qt(i,n);u>o;)e[o++]=t;return e},Se=Object.freeze({default:xe,__moduleExports:xe}),Ae=n(function(t){var e=oe("wks"),n=g.Symbol,r="function"==typeof n;(t.exports=function(t){return e[t]||(e[t]=r&&n[t]||(r?n:X)("Symbol."+t))}).store=e}),Me=Object.freeze({default:Ae,__moduleExports:Ae}),ze=Me&&Ae||Me,Ne=T.f,Pe=ze("toStringTag"),ke=function(t,e,n){t&&!q(t=n?t:t.prototype,Pe)&&Ne(t,Pe,{configurable:!0,value:e})},Le=Object.freeze({default:ke,__moduleExports:ke}),Fe=mt,Ie=_t&>||_t,Re=Et&&bt||Et,Te=jt&&Ot||jt,Ce=Ft&&Lt||Ft,We=Ee&&be||Ee,Ue=Se&&xe||Se,Ke=Le&&ke||Le,Be=n(function(t,e){var n=We.f,r=T.f,o="prototype",i="Wrong index!",u=g.ArrayBuffer,a=g.DataView,c=g.Math,f=g.RangeError,s=g.Infinity,l=u,h=c.abs,d=c.pow,p=c.floor,y=c.log,_=c.LN2,m=O?"_b":"buffer",b=O?"_l":"byteLength",E=O?"_o":"byteOffset";function j(t,e,n){var r,o,i,u=Array(n),a=8*n-e-1,c=(1<<a)-1,f=c>>1,l=23===e?d(2,-24)-d(2,-77):0,v=0,g=0>t||0===t&&0>1/t?1:0;for((t=h(t))!=t||t===s?(o=t!=t?1:0,r=c):(r=p(y(t)/_),1>t*(i=d(2,-r))&&(r--,i*=2),2>(t+=1>r+f?l*d(2,1-f):l/i)*i||(r++,i/=2),c>r+f?1>r+f?(o=t*d(2,f-1)*d(2,e),r=0):(o=(t*i-1)*d(2,e),r+=f):(o=0,r=c));e>=8;u[v++]=255&o,o/=256,e-=8);for(r=r<<e|o,a+=e;a>0;u[v++]=255&r,r/=256,a-=8);return u[--v]|=128*g,u}function w(t,e,n){var r,o=8*n-e-1,i=(1<<o)-1,u=i>>1,a=o-7,c=n-1,f=t[c--],l=127&f;for(f>>=7;a>0;l=256*l+t[c],c--,a-=8);for(r=l&(1<<-a)-1,l>>=-a,a+=e;a>0;r=256*r+t[c],c--,a-=8);if(0===l)l=1-u;else{if(l===i)return r?NaN:f?-s:s;r+=d(2,e),l-=u}return(f?-1:1)*r*d(2,l-e)}function x(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]}function S(t){return[255&t]}function A(t){return[255&t,t>>8&255]}function M(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]}function z(t){return j(t,52,8)}function N(t){return j(t,23,4)}function P(t,e,n){r(t[o],e,{get:function(){return this[n]}})}function k(t,e,n,r){var o=Ce(+n);if(o+e>t[b])throw f(i);var u=o+t[E],a=t[m]._b.slice(u,u+e);return r?a:a.reverse()}function L(t,e,n,r,o,u){var a=Ce(+n);if(a+e>t[b])throw f(i);for(var c=t[m]._b,s=a+t[E],l=r(+o),h=0;e>h;h++)c[s+h]=l[u?h:e-h-1]}if(Ie.ABV){if(!v(function(){u(1)})||!v(function(){new u(-1)})||v(function(){return new u,new u(1.5),new u(NaN),"ArrayBuffer"!=u.name})){for(var F,I=(u=function(t){return Te(this,u),new l(Ce(t))})[o]=l[o],R=n(l),C=0;R.length>C;)(F=R[C++])in u||Y(u,F,l[F]);Fe||(I.constructor=u)}var W=new a(new u(2)),U=a[o].setInt8;W.setInt8(0,2147483648),W.setInt8(1,2147483649),!W.getInt8(0)&&W.getInt8(1)||Re(a[o],{setInt8:function(t,e){U.call(this,t,e<<24>>24)},setUint8:function(t,e){U.call(this,t,e<<24>>24)}},!0)}else u=function(t){Te(this,u,"ArrayBuffer");var e=Ce(t);this._b=Ue.call(Array(e),0),this[b]=e},a=function(t,e,n){Te(this,a,"DataView"),Te(t,u,"DataView");var r=t[b],o=Mt(e);if(0>o||o>r)throw f("Wrong offset!");if(o+(n=void 0===n?r-o:kt(n))>r)throw f("Wrong length!");this[m]=t,this[E]=o,this[b]=n},O&&(P(u,"byteLength","_l"),P(a,"buffer","_b"),P(a,"byteLength","_l"),P(a,"byteOffset","_o")),Re(a[o],{getInt8:function(t){return k(this,1,t)[0]<<24>>24},getUint8:function(t){return k(this,1,t)[0]},getInt16:function(t){var e=k(this,2,t,arguments[1]);return(e[1]<<8|e[0])<<16>>16},getUint16:function(t){var e=k(this,2,t,arguments[1]);return e[1]<<8|e[0]},getInt32:function(t){return x(k(this,4,t,arguments[1]))},getUint32:function(t){return x(k(this,4,t,arguments[1]))>>>0},getFloat32:function(t){return w(k(this,4,t,arguments[1]),23,4)},getFloat64:function(t){return w(k(this,8,t,arguments[1]),52,8)},setInt8:function(t,e){L(this,1,t,S,e)},setUint8:function(t,e){L(this,1,t,S,e)},setInt16:function(t,e){L(this,2,t,A,e,arguments[2])},setUint16:function(t,e){L(this,2,t,A,e,arguments[2])},setInt32:function(t,e){L(this,4,t,M,e,arguments[2])},setUint32:function(t,e){L(this,4,t,M,e,arguments[2])},setFloat32:function(t,e){L(this,4,t,N,e,arguments[2])},setFloat64:function(t,e){L(this,8,t,z,e,arguments[2])}});Ke(u,"ArrayBuffer"),Ke(a,"DataView"),Y(a[o],Ie.VIEW,!0),e.ArrayBuffer=u,e.DataView=a}),De=Object.freeze({default:Be,__moduleExports:Be}),Ve=ze("species"),Ge=function(t,e){var n,r=M(t).constructor;return void 0===r||void 0==(n=M(r)[Ve])?e:nt(n)},Je=Object.freeze({default:Ge,__moduleExports:Ge}),He=ze("species"),Ye=function(t){var e=g[t];O&&e&&!e[He]&&T.f(e,He,{configurable:!0,get:function(){return this}})},qe=Object.freeze({default:Ye,__moduleExports:Ye}),Xe=st&&ft||st,$e=De&&Be||De,Qe=Je&&Ge||Je,Ze=qe&&Ye||qe,tn=g.ArrayBuffer,en=$e.ArrayBuffer,nn=$e.DataView,rn=Ie.ABV&&tn.isView,on=en.prototype.slice,un=Ie.VIEW;Xe(Xe.G+Xe.W+Xe.F*(tn!==en),{ArrayBuffer:en}),Xe(Xe.S+Xe.F*!Ie.CONSTR,"ArrayBuffer",{isView:function(t){return rn&&rn(t)||f(t)&&un in t}}),Xe(Xe.P+Xe.U+Xe.F*v(function(){return!new en(2).slice(1,void 0).byteLength}),"ArrayBuffer",{slice:function(t,e){if(void 0!==on&&void 0===e)return on.call(M(this),t);for(var n=M(this).byteLength,r=Qt(t,n),o=Qt(void 0===e?n:e,n),i=new(Qe(this,en))(kt(o-r)),u=new nn(this),a=new nn(i),c=0;o>r;)a.setUint8(c++,u.getUint8(r++));return i}}),Ze("ArrayBuffer");var an=ze("toStringTag"),cn="Arguments"==Ct(function(){return arguments}()),fn=function(t){var e,n,r;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),an))?n:cn?Ct(e):"Object"==(r=Ct(e))&&"function"==typeof e.callee?"Arguments":r},sn=Object.freeze({default:fn,__moduleExports:fn}),ln={},hn=Object.freeze({default:ln,__moduleExports:ln}),dn=hn&&ln||hn,vn=ze("iterator"),pn=Array.prototype,yn=function(t){return void 0!==t&&(dn.Array===t||pn[vn]===t)},gn=Object.freeze({default:yn,__moduleExports:yn}),_n=Object.keys||function(t){return ye(t,ge)},mn=Object.freeze({default:_n,__moduleExports:_n}),bn=mn&&_n||mn,En=O?Object.defineProperties:function(t,e){M(t);for(var n,r=bn(e),o=r.length,i=0;o>i;)T.f(t,n=r[i++],e[n]);return t},On=Object.freeze({default:En,__moduleExports:En}),jn=g.document,wn=jn&&jn.documentElement,xn=Object.freeze({default:wn,__moduleExports:wn}),Sn=On&&En||On,An=xn&&wn||xn,Mn=fe("IE_PROTO"),zn=function(){},Nn=function(){var t,e=j("iframe"),n=ge.length;for(e.style.display="none",An.appendChild(e),e.src="javascript:",(t=e.contentWindow.document).open(),t.write("<script>document.F=Object<\/script>"),t.close(),Nn=t.F;n--;)delete Nn.prototype[ge[n]];return Nn()},Pn=Object.create||function(t,e){var n;return null!==t?(zn.prototype=M(t),n=new zn,zn.prototype=null,n[Mn]=t):n=Nn(),void 0===e?n:Sn(n,e)},kn=Object.freeze({default:Pn,__moduleExports:Pn}),Ln=fe("IE_PROTO"),Fn=Object.prototype,In=Object.getPrototypeOf||function(t){return t=we(t),q(t,Ln)?t[Ln]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?Fn:null},Rn=Object.freeze({default:In,__moduleExports:In}),Tn=sn&&fn||sn,Cn=ze("iterator"),Wn=$.getIteratorMethod=function(t){if(void 0!=t)return t[Cn]||t["@@iterator"]||dn[Tn(t)]},Un=Object.freeze({default:Wn,__moduleExports:Wn}),Kn=Array.isArray||function(t){return"Array"==Ct(t)},Bn=Object.freeze({default:Kn,__moduleExports:Kn}),Dn=Bn&&Kn||Bn,Vn=ze("species"),Gn=function(t){var e;return Dn(t)&&("function"!=typeof(e=t.constructor)||e!==Array&&!Dn(e.prototype)||(e=void 0),f(e)&&null===(e=e[Vn])&&(e=void 0)),void 0===e?Array:e},Jn=Object.freeze({default:Gn,__moduleExports:Gn}),Hn=Jn&&Gn||Jn,Yn=function(t,e){return new(Hn(t))(e)},qn=Object.freeze({default:Yn,__moduleExports:Yn}),Xn=qn&&Yn||qn,$n=function(t,e){var n=1==t,r=2==t,o=3==t,i=4==t,u=6==t,a=5==t||u,c=e||Xn;return function(e,f,s){for(var l,h,d=we(e),v=Dt(d),p=ut(f,s,3),y=kt(v.length),g=0,_=n?c(e,y):r?c(e,0):void 0;y>g;g++)if((a||g in v)&&(h=p(l=v[g],g,d),t))if(n)_[g]=h;else if(h)switch(t){case 3:return!0;case 5:return l;case 6:return g;case 2:_.push(l)}else if(i)return!1;return u?-1:o||i?i:_}},Qn=Object.freeze({default:$n,__moduleExports:$n}),Zn=ze("unscopables"),tr=Array.prototype;void 0==tr[Zn]&&Y(tr,Zn,{});var er=function(t){tr[Zn][t]=!0},nr=Object.freeze({default:er,__moduleExports:er}),rr=function(t,e){return{value:e,done:!!t}},or=Object.freeze({default:rr,__moduleExports:rr}),ir=kn&&Pn||kn,ur={};Y(ur,ze("iterator"),function(){return this});var ar=function(t,e,n){t.prototype=ir(ur,{next:C(1,n)}),Ke(t,e+" Iterator")},cr=Object.freeze({default:ar,__moduleExports:ar}),fr=cr&&ar||cr,sr=Rn&&In||Rn,lr=ze("iterator"),hr=!([].keys&&"next"in[].keys()),dr=function(){return this},vr=function(t,e,n,r,o,i,u){fr(n,e,r);var a,c,f,s=function(t){if(!hr&&t in v)return v[t];switch(t){case"keys":case"values":return function(){return new n(this,t)}}return function(){return new n(this,t)}},l=e+" Iterator",h="values"==o,d=!1,v=t.prototype,p=v[lr]||v["@@iterator"]||o&&v[o],y=p||s(o),g=o?h?s("entries"):y:void 0,_="Array"==e&&v.entries||p;if(_&&(f=sr(_.call(new t)))!==Object.prototype&&f.next&&(Ke(f,l,!0),Fe||"function"==typeof f[lr]||Y(f,lr,dr)),h&&p&&"values"!==p.name&&(d=!0,y=function(){return p.call(this)}),Fe&&!u||!hr&&!d&&v[lr]||Y(v,lr,y),dn[e]=y,dn[l]=dr,o)if(a={values:h?y:s("values"),keys:i?y:s("keys"),entries:g},u)for(c in a)c in v||it(v,c,a[c]);else Xe(Xe.P+Xe.F*(hr||d),e,a);return a},pr=Object.freeze({default:vr,__moduleExports:vr}),yr=nr&&er||nr,gr=or&&rr||or,_r=pr&&vr||pr,mr=_r(Array,"Array",function(t,e){this._t=$t(t),this._i=0,this._k=e},function(){var t=this._t,e=this._k,n=this._i++;return t&&t.length>n?gr(0,"keys"==e?n:"values"==e?t[n]:[n,t[n]]):(this._t=void 0,gr(1))},"values");dn.Arguments=dn.Array,yr("keys"),yr("values"),yr("entries");var br=ze("iterator"),Er=!1;try{[7][br]().return=function(){Er=!0}}catch(t){}var Or=function(t,e){if(!e&&!Er)return!1;var n=!1;try{var r=[7],o=r[br]();o.next=function(){return{done:n=!0}},r[br]=function(){return o},t(r)}catch(t){}return n},jr=Object.freeze({default:Or,__moduleExports:Or}),wr=[].copyWithin||function(t,e){var n=we(this),r=kt(n.length),o=Qt(t,r),i=Qt(e,r),u=arguments.length>2?arguments[2]:void 0,a=Math.min((void 0===u?r:Qt(u,r))-i,r-o),c=1;for(o>i&&i+a>o&&(c=-1,i+=a-1,o+=a-1);a-- >0;)i in n?n[o]=n[i]:delete n[o],o+=c,i+=c;return n},xr=Object.freeze({default:wr,__moduleExports:wr}),Sr={}.propertyIsEnumerable,Ar={f:Sr},Mr=Object.freeze({default:Ar,__moduleExports:Ar,f:Sr}),zr=Mr&&Ar||Mr,Nr=Object.getOwnPropertyDescriptor,Pr=O?Nr:function(t,e){if(t=$t(t),e=N(e,!0),z)try{return Nr(t,e)}catch(t){}if(q(t,e))return C(!zr.f.call(t,e),t[e])},kr={f:Pr},Lr=Object.freeze({default:kr,__moduleExports:kr,f:Pr}),Fr=gn&&yn||gn,Ir=Un&&Wn||Un,Rr=Qn&&$n||Qn,Tr=jr&&Or||jr,Cr=xr&&wr||xr,Wr=Lr&&kr||Lr,Ur=n(function(t){if(O){var e=Fe,n=g,r=v,o=Xe,i=Ie,u=ut,a=Te,c=C,s=Y,l=Re,h=Mt,d=kt,p=Ce,y=Qt,_=N,m=q,b=Tn,E=f,j=we,w=Fr,x=ir,S=sr,A=We.f,M=Ir,z=X,P=ze,k=Rr,L=ce,F=Qe,I=mr,R=dn,W=Tr,U=Ze,K=Ue,B=Cr,D=T,V=Wr,G=D.f,J=V.f,H=n.RangeError,$=n.TypeError,Q=n.Uint8Array,Z=Array.prototype,tt=$e.ArrayBuffer,et=$e.DataView,nt=k(0),rt=k(2),ot=k(3),it=k(4),at=k(5),ct=k(6),ft=L(!0),st=L(!1),lt=I.values,ht=I.keys,dt=I.entries,vt=Z.lastIndexOf,pt=Z.reduce,yt=Z.reduceRight,gt=Z.join,_t=Z.sort,mt=Z.slice,bt=Z.toString,Et=Z.toLocaleString,Ot=P("iterator"),jt=P("toStringTag"),wt=z("typed_constructor"),xt=z("def_constructor"),St=i.CONSTR,At=i.TYPED,zt=i.VIEW,Nt=k(1,function(t,e){return Rt(F(t,t[xt]),e)}),Pt=r(function(){return 1===new Q(new Uint16Array([1]).buffer)[0]}),Lt=!!Q&&!!Q.prototype.set&&r(function(){new Q(1).set({})}),Ft=function(t,e){var n=h(t);if(0>n||n%e)throw H("Wrong offset!");return n},It=function(t){if(E(t)&&At in t)return t;throw $(t+" is not a typed array!")},Rt=function(t,e){if(!(E(t)&&wt in t))throw $("It is not a typed array constructor!");return new t(e)},Tt=function(t,e){return Ct(F(t,t[xt]),e)},Ct=function(t,e){for(var n=0,r=e.length,o=Rt(t,r);r>n;)o[n]=e[n++];return o},Wt=function(t,e,n){G(t,e,{get:function(){return this._d[n]}})},Ut=function(t){var e,n,r,o,i,a,c=j(t),f=arguments.length,s=f>1?arguments[1]:void 0,l=void 0!==s,h=M(c);if(void 0!=h&&!w(h)){for(a=h.call(c),r=[],e=0;!(i=a.next()).done;e++)r.push(i.value);c=r}for(l&&f>2&&(s=u(s,arguments[2],2)),e=0,n=d(c.length),o=Rt(this,n);n>e;e++)o[e]=l?s(c[e],e):c[e];return o},Kt=function(){for(var t=0,e=arguments.length,n=Rt(this,e);e>t;)n[t]=arguments[t++];return n},Bt=!!Q&&r(function(){Et.call(new Q(1))}),Dt=function(){return Et.apply(Bt?mt.call(It(this)):It(this),arguments)},Vt={copyWithin:function(t,e){return B.call(It(this),t,e,arguments.length>2?arguments[2]:void 0)},every:function(t){return it(It(this),t,arguments.length>1?arguments[1]:void 0)},fill:function(t){return K.apply(It(this),arguments)},filter:function(t){return Tt(this,rt(It(this),t,arguments.length>1?arguments[1]:void 0))},find:function(t){return at(It(this),t,arguments.length>1?arguments[1]:void 0)},findIndex:function(t){return ct(It(this),t,arguments.length>1?arguments[1]:void 0)},forEach:function(t){nt(It(this),t,arguments.length>1?arguments[1]:void 0)},indexOf:function(t){return st(It(this),t,arguments.length>1?arguments[1]:void 0)},includes:function(t){return ft(It(this),t,arguments.length>1?arguments[1]:void 0)},join:function(t){return gt.apply(It(this),arguments)},lastIndexOf:function(t){return vt.apply(It(this),arguments)},map:function(t){return Nt(It(this),t,arguments.length>1?arguments[1]:void 0)},reduce:function(t){return pt.apply(It(this),arguments)},reduceRight:function(t){return yt.apply(It(this),arguments)},reverse:function(){for(var t,e=It(this).length,n=Math.floor(e/2),r=0;n>r;)t=this[r],this[r++]=this[--e],this[e]=t;return this},some:function(t){return ot(It(this),t,arguments.length>1?arguments[1]:void 0)},sort:function(t){return _t.call(It(this),t)},subarray:function(t,e){var n=It(this),r=n.length,o=y(t,r);return new(F(n,n[xt]))(n.buffer,n.byteOffset+o*n.BYTES_PER_ELEMENT,d((void 0===e?r:y(e,r))-o))}},Gt=function(t,e){return Tt(this,mt.call(It(this),t,e))},Jt=function(t){It(this);var e=Ft(arguments[1],1),n=this.length,r=j(t),o=d(r.length),i=0;if(o+e>n)throw H("Wrong length!");for(;o>i;)this[e+i]=r[i++]},Ht={entries:function(){return dt.call(It(this))},keys:function(){return ht.call(It(this))},values:function(){return lt.call(It(this))}},Yt=function(t,e){return E(t)&&t[At]&&"symbol"!=typeof e&&e in t&&+e+""==e+""},qt=function(t,e){return Yt(t,e=_(e,!0))?c(2,t[e]):J(t,e)},Xt=function(t,e,n){return!(Yt(t,e=_(e,!0))&&E(n)&&m(n,"value"))||m(n,"get")||m(n,"set")||n.configurable||m(n,"writable")&&!n.writable||m(n,"enumerable")&&!n.enumerable?G(t,e,n):(t[e]=n.value,t)};St||(V.f=qt,D.f=Xt),o(o.S+o.F*!St,"Object",{getOwnPropertyDescriptor:qt,defineProperty:Xt}),r(function(){bt.call({})})&&(bt=Et=function(){return gt.call(this)});var $t=l({},Vt);l($t,Ht),s($t,Ot,Ht.values),l($t,{slice:Gt,set:Jt,constructor:function(){},toString:bt,toLocaleString:Dt}),Wt($t,"buffer","b"),Wt($t,"byteOffset","o"),Wt($t,"byteLength","l"),Wt($t,"length","e"),G($t,jt,{get:function(){return this[At]}}),t.exports=function(t,u,c,f){var l=t+((f=!!f)?"Clamped":"")+"Array",h="get"+t,v="set"+t,y=n[l],g=y||{},_=y&&S(y),m={},O=y&&y.prototype,j=function(t,e){G(t,e,{get:function(){return function(t,e){var n=t._d;return n.v[h](e*u+n.o,Pt)}(this,e)},set:function(t){return function(t,e,n){var r=t._d;f&&(n=0>(n=Math.round(n))?0:n>255?255:255&n),r.v[v](e*u+r.o,n,Pt)}(this,e,t)},enumerable:!0})};!y||!i.ABV?(y=c(function(t,e,n,r){a(t,y,l,"_d");var o,i,c,f,h=0,v=0;if(E(e)){if(!(e instanceof tt||"ArrayBuffer"==(f=b(e))||"SharedArrayBuffer"==f))return At in e?Ct(y,e):Ut.call(y,e);o=e,v=Ft(n,u);var g=e.byteLength;if(void 0===r){if(g%u)throw H("Wrong length!");if(0>(i=g-v))throw H("Wrong length!")}else if((i=d(r)*u)+v>g)throw H("Wrong length!");c=i/u}else c=p(e),o=new tt(i=c*u);for(s(t,"_d",{b:o,o:v,l:i,e:c,v:new et(o)});c>h;)j(t,h++)}),O=y.prototype=x($t),s(O,"constructor",y)):r(function(){y(1)})&&r(function(){new y(-1)})&&W(function(t){new y,new y(null),new y(1.5),new y(t)},!0)||(y=c(function(t,e,n,r){var o;return a(t,y,l),E(e)?e instanceof tt||"ArrayBuffer"==(o=b(e))||"SharedArrayBuffer"==o?void 0!==r?new g(e,Ft(n,u),r):void 0!==n?new g(e,Ft(n,u)):new g(e):At in e?Ct(y,e):Ut.call(y,e):new g(p(e))}),nt(_!==Function.prototype?A(g).concat(A(_)):A(g),function(t){t in y||s(y,t,g[t])}),y.prototype=O,e||(O.constructor=y));var w=O[Ot],M=!!w&&("values"==w.name||void 0==w.name),z=Ht.values;s(y,wt,!0),s(O,At,l),s(O,zt,!0),s(O,xt,y),(f?new y(1)[jt]==l:jt in O)||G(O,jt,{get:function(){return l}}),m[l]=y,o(o.G+o.W+o.F*(y!=g),m),o(o.S,l,{BYTES_PER_ELEMENT:u}),o(o.S+o.F*r(function(){g.of.call(y,1)}),l,{from:Ut,of:Kt}),"BYTES_PER_ELEMENT"in O||s(O,"BYTES_PER_ELEMENT",u),o(o.P,l,Vt),U(l),o(o.P+o.F*Lt,l,{set:Jt}),o(o.P+o.F*!M,l,Ht),e||O.toString==bt||(O.toString=bt),o(o.P+o.F*r(function(){new y(1).slice()}),l,{slice:Gt}),o(o.P+o.F*(r(function(){return[1,2].toLocaleString()!=new y([1,2]).toLocaleString()})||!r(function(){O.toLocaleString.call([1,2])})),l,{toLocaleString:Dt}),R[l]=M?w:z,e||M||s(O,Ot,z)}}else t.exports=function(){}}),Kr=Object.freeze({default:Ur,__moduleExports:Ur}),Br=Kr&&Ur||Kr;Br("Int8",1,function(t){return function(e,n,r){return t(this,e,n,r)}}),Br("Uint8",1,function(t){return function(e,n,r){return t(this,e,n,r)}}),Br("Uint8",1,function(t){return function(e,n,r){return t(this,e,n,r)}},!0),Br("Int16",2,function(t){return function(e,n,r){return t(this,e,n,r)}}),Br("Uint16",2,function(t){return function(e,n,r){return t(this,e,n,r)}}),Br("Int32",4,function(t){return function(e,n,r){return t(this,e,n,r)}}),Br("Uint32",4,function(t){return function(e,n,r){return t(this,e,n,r)}}),Br("Float32",4,function(t){return function(e,n,r){return t(this,e,n,r)}}),Br("Float64",8,function(t){return function(e,n,r){return t(this,e,n,r)}});var Dr=function(t,e,n,r){try{return r?e(M(n)[0],n[1]):e(n)}catch(e){var o=t.return;throw void 0!==o&&M(o.call(t)),e}},Vr=Object.freeze({default:Dr,__moduleExports:Dr}),Gr=Vr&&Dr||Vr,Jr=n(function(t){var e={},n={},r=t.exports=function(t,r,o,i,u){var a,c,f,s,l=u?function(){return t}:Ir(t),h=ut(o,i,r?2:1),d=0;if("function"!=typeof l)throw TypeError(t+" is not iterable!");if(Fr(l)){for(a=kt(t.length);a>d;d++)if((s=r?h(M(c=t[d])[0],c[1]):h(t[d]))===e||s===n)return s}else for(f=l.call(t);!(c=f.next()).done;)if((s=Gr(f,h,c.value,r))===e||s===n)return s};r.BREAK=e,r.RETURN=n}),Hr=Object.freeze({default:Jr,__moduleExports:Jr}),Yr=n(function(t){var e=X("meta"),n=T.f,r=0,o=Object.isExtensible||function(){return!0},i=!v(function(){return o(Object.preventExtensions({}))}),u=function(t){n(t,e,{value:{i:"O"+ ++r,w:{}}})},a=t.exports={KEY:e,NEED:!1,fastKey:function(t,n){if(!f(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!q(t,e)){if(!o(t))return"F";if(!n)return"E";u(t)}return t[e].i},getWeak:function(t,n){if(!q(t,e)){if(!o(t))return!0;if(!n)return!1;u(t)}return t[e].w},onFreeze:function(t){return i&&a.NEED&&o(t)&&!q(t,e)&&u(t),t}}}),qr=Object.freeze({default:Yr,__moduleExports:Yr,KEY:Yr.KEY,NEED:Yr.NEED,fastKey:Yr.fastKey,getWeak:Yr.getWeak,onFreeze:Yr.onFreeze}),Xr=function(t,e){if(!f(t)||t._t!==e)throw TypeError("Incompatible receiver, "+e+" required!");return t},$r=Object.freeze({default:Xr,__moduleExports:Xr}),Qr=Hr&&Jr||Hr,Zr=qr&&Yr||qr,to=$r&&Xr||$r,eo=T.f,no=Zr.fastKey,ro=O?"_s":"size",oo=function(t,e){var n,r=no(e);if("F"!==r)return t._i[r];for(n=t._f;n;n=n.n)if(n.k==e)return n},io={getConstructor:function(t,e,n,r){var o=t(function(t,i){Te(t,o,e,"_i"),t._t=e,t._i=ir(null),t._f=void 0,t._l=void 0,t[ro]=0,void 0!=i&&Qr(i,n,t[r],t)});return Re(o.prototype,{clear:function(){for(var t=to(this,e),n=t._i,r=t._f;r;r=r.n)r.r=!0,r.p&&(r.p=r.p.n=void 0),delete n[r.i];t._f=t._l=void 0,t[ro]=0},delete:function(t){var n=to(this,e),r=oo(n,t);if(r){var o=r.n,i=r.p;delete n._i[r.i],r.r=!0,i&&(i.n=o),o&&(o.p=i),n._f==r&&(n._f=o),n._l==r&&(n._l=i),n[ro]--}return!!r},forEach:function(t){to(this,e);for(var n,r=ut(t,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(r(n.v,n.k,this);n&&n.r;)n=n.p},has:function(t){return!!oo(to(this,e),t)}}),O&&eo(o.prototype,"size",{get:function(){return to(this,e)[ro]}}),o},def:function(t,e,n){var r,o,i=oo(t,e);return i?i.v=n:(t._l=i={i:o=no(e,!0),k:e,v:n,p:r=t._l,n:void 0,r:!1},t._f||(t._f=i),r&&(r.n=i),t[ro]++,"F"!==o&&(t._i[o]=i)),t},getEntry:oo,setStrong:function(t,e,n){_r(t,e,function(t,n){this._t=to(t,e),this._k=n,this._l=void 0},function(){for(var t=this._k,e=this._l;e&&e.r;)e=e.p;return this._t&&(this._l=e=e?e.n:this._t._f)?gr(0,"keys"==t?e.k:"values"==t?e.v:[e.k,e.v]):(this._t=void 0,gr(1))},n?"entries":"values",!n,!0),Ze(e)}},uo=Object.freeze({default:io,__moduleExports:io,getConstructor:io.getConstructor,def:io.def,getEntry:io.getEntry,setStrong:io.setStrong}),ao=function(t,e){if(M(t),!f(e)&&null!==e)throw TypeError(e+": can't set as prototype!")},co={set:Object.setPrototypeOf||("__proto__"in{}?function(t,e,n){try{(n=ut(Function.call,Wr.f(Object.prototype,"__proto__").set,2))(t,[]),e=!(t instanceof Array)}catch(t){e=!0}return function(t,r){return ao(t,r),e?t.__proto__=r:n(t,r),t}}({},!1):void 0),check:ao},fo=Object.freeze({default:co,__moduleExports:co,set:co.set,check:co.check}),so=fo&&co||fo,lo=so.set,ho=function(t,e,n){var r,o=e.constructor;return o!==n&&"function"==typeof o&&(r=o.prototype)!==n.prototype&&f(r)&&lo&&lo(t,r),t},vo=Object.freeze({default:ho,__moduleExports:ho}),po=vo&&ho||vo,yo=function(t,e,n,r,o,i){var u=g[t],a=u,c=o?"set":"add",s=a&&a.prototype,l={},h=function(t){var e=s[t];it(s,t,"delete"==t?function(t){return!(i&&!f(t))&&e.call(this,0===t?0:t)}:"has"==t?function(t){return!(i&&!f(t))&&e.call(this,0===t?0:t)}:"get"==t?function(t){return i&&!f(t)?void 0:e.call(this,0===t?0:t)}:"add"==t?function(t){return e.call(this,0===t?0:t),this}:function(t,n){return e.call(this,0===t?0:t,n),this})};if("function"==typeof a&&(i||s.forEach&&!v(function(){(new a).entries().next()}))){var d=new a,p=d[c](i?{}:-0,1)!=d,y=v(function(){d.has(1)}),_=Tr(function(t){new a(t)}),m=!i&&v(function(){for(var t=new a,e=5;e--;)t[c](e,e);return!t.has(-0)});_||((a=e(function(e,n){Te(e,a,t);var r=po(new u,e,a);return void 0!=n&&Qr(n,o,r[c],r),r})).prototype=s,s.constructor=a),(y||m)&&(h("delete"),h("has"),o&&h("get")),(m||p)&&h(c),i&&s.clear&&delete s.clear}else a=r.getConstructor(e,t,o,c),Re(a.prototype,n),Zr.NEED=!0;return Ke(a,t),l[t]=a,Xe(Xe.G+Xe.W+Xe.F*(a!=u),l),i||r.setStrong(a,t,o),a},go=Object.freeze({default:yo,__moduleExports:yo}),_o=uo&&io||uo,mo=go&&yo||go,bo=(mo("Map",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{get:function(t){var e=_o.getEntry(to(this,"Map"),t);return e&&e.v},set:function(t,e){return _o.def(to(this,"Map"),0===t?0:t,e)}},_o,!0),mo("Set",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return _o.def(to(this,"Set"),t=0===t?0:t,t)}},_o),Object.getOwnPropertySymbols),Eo={f:bo},Oo=Object.freeze({default:Eo,__moduleExports:Eo,f:bo}),jo=Oo&&Eo||Oo,wo=Object.assign,xo=!wo||v(function(){var t={},e={},n=Symbol(),r="abcdefghijklmnopqrst";return t[n]=7,r.split("").forEach(function(t){e[t]=t}),7!=wo({},t)[n]||Object.keys(wo({},e)).join("")!=r})?function(t,e){for(var n=we(t),r=arguments.length,o=1,i=jo.f,u=zr.f;r>o;)for(var a,c=Dt(arguments[o++]),f=i?bn(c).concat(i(c)):bn(c),s=f.length,l=0;s>l;)u.call(c,a=f[l++])&&(n[a]=c[a]);return n}:wo,So=Object.freeze({default:xo,__moduleExports:xo}),Ao=Zr.getWeak,Mo=Rr(5),zo=Rr(6),No=0,Po=function(t){return t._l||(t._l=new ko)},ko=function(){this.a=[]},Lo=function(t,e){return Mo(t.a,function(t){return t[0]===e})};ko.prototype={get:function(t){var e=Lo(this,t);if(e)return e[1]},has:function(t){return!!Lo(this,t)},set:function(t,e){var n=Lo(this,t);n?n[1]=e:this.a.push([t,e])},delete:function(t){var e=zo(this.a,function(e){return e[0]===t});return~e&&this.a.splice(e,1),!!~e}};var Fo={getConstructor:function(t,e,n,r){var o=t(function(t,i){Te(t,o,e,"_i"),t._t=e,t._i=No++,t._l=void 0,void 0!=i&&Qr(i,n,t[r],t)});return Re(o.prototype,{delete:function(t){if(!f(t))return!1;var n=Ao(t);return!0===n?Po(to(this,e)).delete(t):n&&q(n,this._i)&&delete n[this._i]},has:function(t){if(!f(t))return!1;var n=Ao(t);return!0===n?Po(to(this,e)).has(t):n&&q(n,this._i)}}),o},def:function(t,e,n){var r=Ao(M(e),!0);return!0===r?Po(t).set(e,n):r[t._i]=n,t},ufstore:Po},Io=Object.freeze({default:Fo,__moduleExports:Fo,getConstructor:Fo.getConstructor,def:Fo.def,ufstore:Fo.ufstore}),Ro=So&&xo||So,To=Io&&Fo||Io;n(function(t){var e,n=Rr(0),r=Zr.getWeak,o=Object.isExtensible,i=To.ufstore,u={},a=function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},c={get:function(t){if(f(t)){var e=r(t);return!0===e?i(to(this,"WeakMap")).get(t):e?e[this._i]:void 0}},set:function(t,e){return To.def(to(this,"WeakMap"),t,e)}},s=t.exports=mo("WeakMap",a,c,To,!0,!0);v(function(){return 7!=(new s).set((Object.freeze||Object)(u),7).get(u)})&&(e=To.getConstructor(a,"WeakMap"),Ro(e.prototype,c),Zr.NEED=!0,n(["delete","has","get","set"],function(t){var n=s.prototype,r=n[t];it(n,t,function(n,i){if(f(n)&&!o(n)){this._f||(this._f=new e);var u=this._f[t](n,i);return"set"==t?this:u}return r.call(this,n,i)})}))});mo("WeakSet",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return To.def(to(this,"WeakSet"),t,!0)}},To,!1,!0);var Co=(g.Reflect||{}).apply,Wo=Function.apply;Xe(Xe.S+Xe.F*!v(function(){Co(function(){})}),"Reflect",{apply:function(t,e,n){var r=nt(t),o=M(n);return Co?Co(r,e,o):Wo.call(r,e,o)}});var Uo=function(t,e,n){var r=void 0===n;switch(e.length){case 0:return r?t():t.call(n);case 1:return r?t(e[0]):t.call(n,e[0]);case 2:return r?t(e[0],e[1]):t.call(n,e[0],e[1]);case 3:return r?t(e[0],e[1],e[2]):t.call(n,e[0],e[1],e[2]);case 4:return r?t(e[0],e[1],e[2],e[3]):t.call(n,e[0],e[1],e[2],e[3])}return t.apply(n,e)},Ko=Object.freeze({default:Uo,__moduleExports:Uo}),Bo=Ko&&Uo||Ko,Do=[].slice,Vo={},Go=Function.bind||function(t){var e=nt(this),n=Do.call(arguments,1),r=function(){var o=n.concat(Do.call(arguments));return this instanceof r?function(t,e,n){if(!(e in Vo)){for(var r=[],o=0;e>o;o++)r[o]="a["+o+"]";Vo[e]=Function("F,a","return new F("+r.join(",")+")")}return Vo[e](t,n)}(e,o.length,o):Bo(e,o,t)};return f(e.prototype)&&(r.prototype=e.prototype),r},Jo=Object.freeze({default:Go,__moduleExports:Go}),Ho=Jo&&Go||Jo,Yo=(g.Reflect||{}).construct,qo=v(function(){function t(){}return!(Yo(function(){},[],t)instanceof t)}),Xo=!v(function(){Yo(function(){})});Xe(Xe.S+Xe.F*(qo||Xo),"Reflect",{construct:function(t,e){nt(t),M(e);var n=3>arguments.length?t:nt(arguments[2]);if(Xo&&!qo)return Yo(t,e,n);if(t==n){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var r=[null];return r.push.apply(r,e),new(Ho.apply(t,r))}var o=n.prototype,i=ir(f(o)?o:Object.prototype),u=Function.apply.call(t,i,e);return f(u)?u:i}}),Xe(Xe.S+Xe.F*v(function(){Reflect.defineProperty(T.f({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(t,e,n){M(t),e=N(e,!0),M(n);try{return T.f(t,e,n),!0}catch(t){return!1}}});var $o=Wr.f;Xe(Xe.S,"Reflect",{deleteProperty:function(t,e){var n=$o(M(t),e);return!(n&&!n.configurable)&&delete t[e]}}),Xe(Xe.S,"Reflect",{get:function t(e,n){var r,o,i=3>arguments.length?e:arguments[2];return M(e)===i?e[n]:(r=Wr.f(e,n))?q(r,"value")?r.value:void 0!==r.get?r.get.call(i):void 0:f(o=sr(e))?t(o,n,i):void 0}}),Xe(Xe.S,"Reflect",{getOwnPropertyDescriptor:function(t,e){return Wr.f(M(t),e)}}),Xe(Xe.S,"Reflect",{getPrototypeOf:function(t){return sr(M(t))}}),Xe(Xe.S,"Reflect",{has:function(t,e){return e in t}});var Qo=Object.isExtensible;Xe(Xe.S,"Reflect",{isExtensible:function(t){return M(t),!Qo||Qo(t)}});var Zo=g.Reflect,ti=Zo&&Zo.ownKeys||function(t){var e=We.f(M(t)),n=jo.f;return n?e.concat(n(t)):e},ei=Object.freeze({default:ti,__moduleExports:ti}),ni=ei&&ti||ei;Xe(Xe.S,"Reflect",{ownKeys:ni});var ri=Object.preventExtensions;Xe(Xe.S,"Reflect",{preventExtensions:function(t){M(t);try{return ri&&ri(t),!0}catch(t){return!1}}}),Xe(Xe.S,"Reflect",{set:function t(e,n,r){var o,i,u=4>arguments.length?e:arguments[3],a=Wr.f(M(e),n);if(!a){if(f(i=sr(e)))return t(i,n,r,u);a=C(0)}if(q(a,"value")){if(!1===a.writable||!f(u))return!1;if(o=Wr.f(u,n)){if(o.get||o.set||!1===o.writable)return!1;o.value=r,T.f(u,n,o)}else T.f(u,n,C(0,r));return!0}return void 0!==a.set&&(a.set.call(u,r),!0)}}),so&&Xe(Xe.S,"Reflect",{setPrototypeOf:function(t,e){so.check(t,e);try{return so.set(t,e),!0}catch(t){return!1}}});var oi,ii,ui,ai=g.process,ci=g.setImmediate,fi=g.clearImmediate,si=g.MessageChannel,li=g.Dispatch,hi=0,di={},vi=function(){var t=+this;if(di.hasOwnProperty(t)){var e=di[t];delete di[t],e()}},pi=function(t){vi.call(t.data)};ci&&fi||(ci=function(t){for(var e=[],n=1;arguments.length>n;)e.push(arguments[n++]);return di[++hi]=function(){Bo("function"==typeof t?t:Function(t),e)},oi(hi),hi},fi=function(t){delete di[t]},"process"==Ct(ai)?oi=function(t){ai.nextTick(ut(vi,t,1))}:li&&li.now?oi=function(t){li.now(ut(vi,t,1))}:si?(ui=(ii=new si).port2,ii.port1.onmessage=pi,oi=ut(ui.postMessage,ui,1)):g.addEventListener&&"function"==typeof postMessage&&!g.importScripts?(oi=function(t){g.postMessage(t+"","*")},g.addEventListener("message",pi,!1)):oi="onreadystatechange"in j("script")?function(t){An.appendChild(j("script")).onreadystatechange=function(){An.removeChild(this),vi.call(t)}}:function(t){setTimeout(ut(vi,t,1),0)});var yi={set:ci,clear:fi},gi=Object.freeze({default:yi,__moduleExports:yi,set:yi.set,clear:yi.clear}),_i=gi&&yi||gi,mi=_i.set,bi=g.MutationObserver||g.WebKitMutationObserver,Ei=g.process,Oi=g.Promise,ji="process"==Ct(Ei),wi=function(){var t,e,n,r=function(){var r,o;for(ji&&(r=Ei.domain)&&r.exit();t;){o=t.fn,t=t.next;try{o()}catch(r){throw t?n():e=void 0,r}}e=void 0,r&&r.enter()};if(ji)n=function(){Ei.nextTick(r)};else if(!bi||g.navigator&&g.navigator.standalone)if(Oi&&Oi.resolve){var o=Oi.resolve();n=function(){o.then(r)}}else n=function(){mi.call(g,r)};else{var i=!0,u=document.createTextNode("");new bi(r).observe(u,{characterData:!0}),n=function(){u.data=i=!i}}return function(r){var o={fn:r,next:void 0};e&&(e.next=o),t||(t=o,n()),e=o}},xi=Object.freeze({default:wi,__moduleExports:wi});var Si,Ai,Mi,zi,Ni=function(t){return new function(t){var e,n;this.promise=new t(function(t,r){if(void 0!==e||void 0!==n)throw TypeError("Bad Promise constructor");e=t,n=r}),this.resolve=nt(e),this.reject=nt(n)}(t)},Pi={f:Ni},ki=Object.freeze({default:Pi,__moduleExports:Pi,f:Ni}),Li=function(t){try{return{e:!1,v:t()}}catch(t){return{e:!0,v:t}}},Fi=Object.freeze({default:Li,__moduleExports:Li}),Ii=ki&&Pi||ki,Ri=function(t,e){if(M(t),f(e)&&e.constructor===t)return e;var n=Ii.f(t);return(0,n.resolve)(e),n.promise},Ti=Object.freeze({default:Ri,__moduleExports:Ri}),Ci=Fi&&Li||Fi,Wi=Ti&&Ri||Ti,Ui=_i.set,Ki=(xi&&wi||xi)(),Bi=g.TypeError,Di=g.process,Vi=g.Promise,Gi="process"==Tn(Di),Ji=function(){},Hi=Ai=Ii.f,Yi=!!function(){try{var t=Vi.resolve(1),e=(t.constructor={})[ze("species")]=function(t){t(Ji,Ji)};return(Gi||"function"==typeof PromiseRejectionEvent)&&t.then(Ji)instanceof e}catch(t){}}(),qi=function(t){var e;return!(!f(t)||"function"!=typeof(e=t.then))&&e},Xi=function(t,e){if(!t._n){t._n=!0;var n=t._c;Ki(function(){for(var r=t._v,o=1==t._s,i=0,u=function(e){var n,i,u,a=o?e.ok:e.fail,c=e.resolve,f=e.reject,s=e.domain;try{a?(o||(2==t._h&&Zi(t),t._h=1),!0===a?n=r:(s&&s.enter(),n=a(r),s&&(s.exit(),u=!0)),n===e.promise?f(Bi("Promise-chain cycle")):(i=qi(n))?i.call(n,c,f):c(n)):f(r)}catch(t){s&&!u&&s.exit(),f(t)}};n.length>i;)u(n[i++]);t._c=[],t._n=!1,e&&!t._h&&$i(t)})}},$i=function(t){Ui.call(g,function(){var e,n,r,o=t._v,i=Qi(t);if(i&&(e=Ci(function(){Gi?Di.emit("unhandledRejection",o,t):(n=g.onunhandledrejection)?n({promise:t,reason:o}):(r=g.console)&&r.error&&r.error("Unhandled promise rejection",o)}),t._h=Gi||Qi(t)?2:1),t._a=void 0,i&&e.e)throw e.v})},Qi=function(t){return 1!==t._h&&0===(t._a||t._c).length},Zi=function(t){Ui.call(g,function(){var e;Gi?Di.emit("rejectionHandled",t):(e=g.onrejectionhandled)&&e({promise:t,reason:t._v})})},tu=function(t){var e=this;e._d||(e._d=!0,(e=e._w||e)._v=t,e._s=2,e._a||(e._a=e._c.slice()),Xi(e,!0))},eu=function(t){var e,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===t)throw Bi("Promise can't be resolved itself");(e=qi(t))?Ki(function(){var r={_w:n,_d:!1};try{e.call(t,ut(eu,r,1),ut(tu,r,1))}catch(t){tu.call(r,t)}}):(n._v=t,n._s=1,Xi(n,!1))}catch(t){tu.call({_w:n,_d:!1},t)}}};Yi||(Vi=function(t){Te(this,Vi,"Promise","_h"),nt(t),Si.call(this);try{t(ut(eu,this,1),ut(tu,this,1))}catch(t){tu.call(this,t)}},(Si=function(t){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=Re(Vi.prototype,{then:function(t,e){var n=Hi(Qe(this,Vi));return n.ok="function"!=typeof t||t,n.fail="function"==typeof e&&e,n.domain=Gi?Di.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&Xi(this,!1),n.promise},catch:function(t){return this.then(void 0,t)}}),Mi=function(){var t=new Si;this.promise=t,this.resolve=ut(eu,t,1),this.reject=ut(tu,t,1)},Ii.f=Hi=function(t){return t===Vi||t===zi?new Mi(t):Ai(t)}),Xe(Xe.G+Xe.W+Xe.F*!Yi,{Promise:Vi}),Ke(Vi,"Promise"),Ze("Promise"),zi=$.Promise,Xe(Xe.S+Xe.F*!Yi,"Promise",{reject:function(t){var e=Hi(this);return(0,e.reject)(t),e.promise}}),Xe(Xe.S+Xe.F*(Fe||!Yi),"Promise",{resolve:function(t){return Wi(Fe&&this===zi?Vi:this,t)}}),Xe(Xe.S+Xe.F*!(Yi&&Tr(function(t){Vi.all(t).catch(Ji)})),"Promise",{all:function(t){var e=this,n=Hi(e),r=n.resolve,o=n.reject,i=Ci(function(){var n=[],i=0,u=1;Qr(t,!1,function(t){var a=i++,c=!1;n.push(void 0),u++,e.resolve(t).then(function(t){c||(c=!0,n[a]=t,--u||r(n))},o)}),--u||r(n)});return i.e&&o(i.v),n.promise},race:function(t){var e=this,n=Hi(e),r=n.reject,o=Ci(function(){Qr(t,!1,function(t){e.resolve(t).then(n.resolve,r)})});return o.e&&r(o.v),n.promise}});var nu={f:ze},ru=Object.freeze({default:nu,__moduleExports:nu,f:ze}),ou=ru&&nu||ru,iu=T.f,uu=function(t){var e=$.Symbol||($.Symbol=Fe?{}:g.Symbol||{});"_"==t.charAt(0)||t in e||iu(e,t,{value:ou.f(t)})},au=Object.freeze({default:uu,__moduleExports:uu}),cu=function(t){var e=bn(t),n=jo.f;if(n)for(var r,o=n(t),i=zr.f,u=0;o.length>u;)i.call(t,r=o[u++])&&e.push(r);return e},fu=Object.freeze({default:cu,__moduleExports:cu}),su=We.f,lu={}.toString,hu="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],du=function(t){return hu&&"[object Window]"==lu.call(t)?function(t){try{return su(t)}catch(t){return hu.slice()}}(t):su($t(t))},vu={f:du},pu=Object.freeze({default:vu,__moduleExports:vu,f:du}),yu=au&&uu||au,gu=fu&&cu||fu,_u=pu&&vu||pu,mu=Zr.KEY,bu=Wr.f,Eu=T.f,Ou=_u.f,ju=g.Symbol,wu=g.JSON,xu=wu&&wu.stringify,Su=ze("_hidden"),Au=ze("toPrimitive"),Mu={}.propertyIsEnumerable,zu=oe("symbol-registry"),Nu=oe("symbols"),Pu=oe("op-symbols"),ku=Object.prototype,Lu="function"==typeof ju,Fu=g.QObject,Iu=!Fu||!Fu.prototype||!Fu.prototype.findChild,Ru=O&&v(function(){return 7!=ir(Eu({},"a",{get:function(){return Eu(this,"a",{value:7}).a}})).a})?function(t,e,n){var r=bu(ku,e);r&&delete ku[e],Eu(t,e,n),r&&t!==ku&&Eu(ku,e,r)}:Eu,Tu=function(t){var e=Nu[t]=ir(ju.prototype);return e._k=t,e},Cu=Lu&&"symbol"==typeof ju.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof ju},Wu=function(t,e,n){return t===ku&&Wu(Pu,e,n),M(t),e=N(e,!0),M(n),q(Nu,e)?(n.enumerable?(q(t,Su)&&t[Su][e]&&(t[Su][e]=!1),n=ir(n,{enumerable:C(0,!1)})):(q(t,Su)||Eu(t,Su,C(1,{})),t[Su][e]=!0),Ru(t,e,n)):Eu(t,e,n)},Uu=function(t,e){M(t);for(var n,r=gu(e=$t(e)),o=0,i=r.length;i>o;)Wu(t,n=r[o++],e[n]);return t},Ku=function(t){var e=Mu.call(this,t=N(t,!0));return!(this===ku&&q(Nu,t)&&!q(Pu,t))&&(!(e||!q(this,t)||!q(Nu,t)||q(this,Su)&&this[Su][t])||e)},Bu=function(t,e){if(t=$t(t),e=N(e,!0),t!==ku||!q(Nu,e)||q(Pu,e)){var n=bu(t,e);return!n||!q(Nu,e)||q(t,Su)&&t[Su][e]||(n.enumerable=!0),n}},Du=function(t){for(var e,n=Ou($t(t)),r=[],o=0;n.length>o;)q(Nu,e=n[o++])||e==Su||e==mu||r.push(e);return r},Vu=function(t){for(var e,n=t===ku,r=Ou(n?Pu:$t(t)),o=[],i=0;r.length>i;)!q(Nu,e=r[i++])||n&&!q(ku,e)||o.push(Nu[e]);return o};Lu||(it((ju=function(){if(this instanceof ju)throw TypeError("Symbol is not a constructor!");var t=X(arguments.length>0?arguments[0]:void 0),e=function(n){this===ku&&e.call(Pu,n),q(this,Su)&&q(this[Su],t)&&(this[Su][t]=!1),Ru(this,t,C(1,n))};return O&&Iu&&Ru(ku,t,{configurable:!0,set:e}),Tu(t)}).prototype,"toString",function(){return this._k}),Wr.f=Bu,T.f=Wu,We.f=_u.f=Du,zr.f=Ku,jo.f=Vu,O&&!Fe&&it(ku,"propertyIsEnumerable",Ku,!0),ou.f=function(t){return Tu(ze(t))}),Xe(Xe.G+Xe.W+Xe.F*!Lu,{Symbol:ju});for(var Gu="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),Ju=0;Gu.length>Ju;)ze(Gu[Ju++]);for(var Hu=bn(ze.store),Yu=0;Hu.length>Yu;)yu(Hu[Yu++]);Xe(Xe.S+Xe.F*!Lu,"Symbol",{for:function(t){return q(zu,t+="")?zu[t]:zu[t]=ju(t)},keyFor:function(t){if(!Cu(t))throw TypeError(t+" is not a symbol!");for(var e in zu)if(zu[e]===t)return e},useSetter:function(){Iu=!0},useSimple:function(){Iu=!1}}),Xe(Xe.S+Xe.F*!Lu,"Object",{create:function(t,e){return void 0===e?ir(t):Uu(ir(t),e)},defineProperty:Wu,defineProperties:Uu,getOwnPropertyDescriptor:Bu,getOwnPropertyNames:Du,getOwnPropertySymbols:Vu}),wu&&Xe(Xe.S+Xe.F*(!Lu||v(function(){var t=ju();return"[null]"!=xu([t])||"{}"!=xu({a:t})||"{}"!=xu(Object(t))})),"JSON",{stringify:function(t){for(var e,n,r=[t],o=1;arguments.length>o;)r.push(arguments[o++]);if(n=e=r[1],(f(e)||void 0!==t)&&!Cu(t))return Dn(e)||(e=function(t,e){if("function"==typeof n&&(e=n.call(this,t,e)),!Cu(e))return e}),r[1]=e,xu.apply(wu,r)}}),ju.prototype[Au]||Y(ju.prototype,Au,ju.prototype.valueOf),Ke(ju,"Symbol"),Ke(Math,"Math",!0),Ke(g.JSON,"JSON",!0);var qu=function(t,e){var n=($.Object||{})[t]||Object[t],r={};r[t]=e(n),Xe(Xe.S+Xe.F*v(function(){n(1)}),"Object",r)},Xu=Object.freeze({default:qu,__moduleExports:qu}),$u=Xu&&qu||Xu,Qu=Zr.onFreeze;$u("freeze",function(t){return function(e){return t&&f(e)?t(Qu(e)):e}});var Zu=Zr.onFreeze;$u("seal",function(t){return function(e){return t&&f(e)?t(Zu(e)):e}});var ta=Zr.onFreeze;$u("preventExtensions",function(t){return function(e){return t&&f(e)?t(ta(e)):e}}),$u("isFrozen",function(t){return function(e){return!f(e)||!!t&&t(e)}}),$u("isSealed",function(t){return function(e){return!f(e)||!!t&&t(e)}}),$u("isExtensible",function(t){return function(e){return!!f(e)&&(!t||t(e))}});var ea=Wr.f;$u("getOwnPropertyDescriptor",function(){return function(t,e){return ea($t(t),e)}}),$u("getPrototypeOf",function(){return function(t){return sr(we(t))}}),$u("keys",function(){return function(t){return bn(we(t))}}),$u("getOwnPropertyNames",function(){return _u.f}),Xe(Xe.S+Xe.F,"Object",{assign:Ro});var na=Object.is||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e},ra=Object.freeze({default:na,__moduleExports:na});Xe(Xe.S,"Object",{is:ra&&na||ra}),Xe(Xe.S,"Object",{setPrototypeOf:so.set});var oa=Function.prototype,ia=/^\s*function ([^ (]*)/;"name"in oa||O&&(0,T.f)(oa,"name",{configurable:!0,get:function(){try{return(""+this).match(ia)[1]}catch(t){return""}}}),Xe(Xe.S,"String",{raw:function(t){for(var e=$t(t.raw),n=kt(e.length),r=arguments.length,o=[],i=0;n>i;)o.push(e[i++]+""),r>i&&o.push(arguments[i]+"");return o.join("")}});var ua=String.fromCharCode,aa=String.fromCodePoint;Xe(Xe.S+Xe.F*(!!aa&&1!=aa.length),"String",{fromCodePoint:function(t){for(var e,n=[],r=arguments.length,o=0;r>o;){if(e=+arguments[o++],Qt(e,1114111)!==e)throw RangeError(e+" is not a valid code point");n.push(65536>e?ua(e):ua(55296+((e-=65536)>>10),e%1024+56320))}return n.join("")}});var ca=function(t){return function(e,n){var r,o,i=Vt(e)+"",u=Mt(n),a=i.length;return 0>u||u>=a?t?"":void 0:55296>(r=i.charCodeAt(u))||r>56319||u+1===a||56320>(o=i.charCodeAt(u+1))||o>57343?t?i.charAt(u):r:t?i.slice(u,u+2):o-56320+(r-55296<<10)+65536}},fa=Object.freeze({default:ca,__moduleExports:ca}),sa=(fa&&ca||fa)(!1);Xe(Xe.P,"String",{codePointAt:function(t){return sa(this,t)}});var la=function(t){var e=Vt(this)+"",n="",r=Mt(t);if(0>r||r==1/0)throw RangeError("Count can't be negative");for(;r>0;(r>>>=1)&&(e+=e))1&r&&(n+=e);return n},ha=Object.freeze({default:la,__moduleExports:la}),da=ha&&la||ha;Xe(Xe.P,"String",{repeat:da});var va=ze("match"),pa=function(t){var e;return f(t)&&(void 0!==(e=t[va])?!!e:"RegExp"==Ct(t))},ya=Object.freeze({default:pa,__moduleExports:pa}),ga=ya&&pa||ya,_a=function(t,e,n){if(ga(e))throw TypeError("String#"+n+" doesn't accept regex!");return Vt(t)+""},ma=Object.freeze({default:_a,__moduleExports:_a}),ba=ze("match"),Ea=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[ba]=!1,!"/./"[t](e)}catch(t){}}return!0},Oa=Object.freeze({default:Ea,__moduleExports:Ea}),ja=ma&&_a||ma,wa=Oa&&Ea||Oa,xa="".startsWith;Xe(Xe.P+Xe.F*wa("startsWith"),"String",{startsWith:function(t){var e=ja(this,t,"startsWith"),n=kt(Math.min(arguments.length>1?arguments[1]:void 0,e.length)),r=t+"";return xa?xa.call(e,r,n):e.slice(n,n+r.length)===r}});var Sa="".endsWith;Xe(Xe.P+Xe.F*wa("endsWith"),"String",{endsWith:function(t){var e=ja(this,t,"endsWith"),n=arguments.length>1?arguments[1]:void 0,r=kt(e.length),o=void 0===n?r:Math.min(kt(n),r),i=t+"";return Sa?Sa.call(e,i,o):e.slice(o-i.length,o)===i}});Xe(Xe.P+Xe.F*wa("includes"),"String",{includes:function(t){return!!~ja(this,t,"includes").indexOf(t,arguments.length>1?arguments[1]:void 0)}});var Aa=function(){var t=M(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e},Ma=Object.freeze({default:Aa,__moduleExports:Aa});O&&"g"!=/./g.flags&&T.f(RegExp.prototype,"flags",{configurable:!0,get:Ma&&Aa||Ma});var za=function(t,e,n){var r=ze(t),o=n(Vt,r,""[t]),i=o[0],u=o[1];v(function(){var e={};return e[r]=function(){return 7},7!=""[t](e)})&&(it(String.prototype,t,i),Y(RegExp.prototype,r,2==e?function(t,e){return u.call(t,this,e)}:function(t){return u.call(t,this)}))},Na=Object.freeze({default:za,__moduleExports:za}),Pa=Na&&za||Na;Pa("match",1,function(t,e,n){return[function(n){var r=t(this),o=void 0==n?void 0:n[e];return void 0!==o?o.call(n,r):RegExp(n)[e](r+"")},n]}),Pa("replace",2,function(t,e,n){return[function(r,o){var i=t(this),u=void 0==r?void 0:r[e];return void 0!==u?u.call(r,i,o):n.call(i+"",r,o)},n]}),Pa("split",2,function(t,e,n){var r=ga,o=n,i=[].push;if("".split(/.?/).length){var u=void 0===/()??/.exec("")[1];n=function(t,e){var n=this+"";if(void 0===t&&0===e)return[];if(!r(t))return o.call(n,t,e);var a,c,f,s,l,h=[],d=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),v=0,p=void 0===e?4294967295:e>>>0,y=RegExp(t.source,d+"g");for(u||(a=RegExp("^"+y.source+"$(?!\\s)",d));(c=y.exec(n))&&((f=c.index+c[0].length)<=v||(h.push(n.slice(v,c.index)),!u&&c.length>1&&c[0].replace(a,function(){for(l=1;arguments.length-2>l;l++)void 0===arguments[l]&&(c[l]=void 0)}),c.length>1&&n.length>c.index&&i.apply(h,c.slice(1)),s=c[0].length,v=f,p>h.length));)y.lastIndex===c.index&&y.lastIndex++;return v===n.length?!s&&y.test("")||h.push(""):h.push(n.slice(v)),h.length>p?h.slice(0,p):h}}else 0;return[function(r,o){var i=t(this),u=void 0==r?void 0:r[e];return void 0!==u?u.call(r,i,o):n.call(i+"",r,o)},n]}),Pa("search",1,function(t,e,n){return[function(n){var r=t(this),o=void 0==n?void 0:n[e];return void 0!==o?o.call(n,r):RegExp(n)[e](r+"")},n]});var ka=function(t,e,n){e in t?T.f(t,e,C(0,n)):t[e]=n},La=Object.freeze({default:ka,__moduleExports:ka}),Fa=La&&ka||La;Xe(Xe.S+Xe.F*!Tr(function(t){}),"Array",{from:function(t){var e,n,r,o,i=we(t),u="function"==typeof this?this:Array,a=arguments.length,c=a>1?arguments[1]:void 0,f=void 0!==c,s=0,l=Ir(i);if(f&&(c=ut(c,a>2?arguments[2]:void 0,2)),void 0==l||u==Array&&Fr(l))for(n=new u(e=kt(i.length));e>s;s++)Fa(n,s,f?c(i[s],s):i[s]);else for(o=l.call(i),n=new u;!(r=o.next()).done;s++)Fa(n,s,f?Gr(o,c,[r.value,s],!0):r.value);return n.length=s,n}}),Xe(Xe.S+Xe.F*v(function(){function t(){}return!(Array.of.call(t)instanceof t)}),"Array",{of:function(){for(var t=0,e=arguments.length,n=new("function"==typeof this?this:Array)(e);e>t;)Fa(n,t,arguments[t++]);return n.length=e,n}}),Xe(Xe.P,"Array",{copyWithin:Cr}),yr("copyWithin");var Ia=Rr(5),Ra=!0;"find"in[]&&Array(1).find(function(){Ra=!1}),Xe(Xe.P+Xe.F*Ra,"Array",{find:function(t){return Ia(this,t,arguments.length>1?arguments[1]:void 0)}}),yr("find");var Ta=Rr(6),Ca=!0;"findIndex"in[]&&Array(1).findIndex(function(){Ca=!1}),Xe(Xe.P+Xe.F*Ca,"Array",{findIndex:function(t){return Ta(this,t,arguments.length>1?arguments[1]:void 0)}}),yr("findIndex"),Xe(Xe.P,"Array",{fill:Ue}),yr("fill");var Wa=g.isFinite;Xe(Xe.S,"Number",{isFinite:function(t){return"number"==typeof t&&Wa(t)}});var Ua=Math.floor,Ka=function(t){return!f(t)&&isFinite(t)&&Ua(t)===t},Ba=Object.freeze({default:Ka,__moduleExports:Ka}),Da=Ba&&Ka||Ba;Xe(Xe.S,"Number",{isInteger:Da});var Va=Math.abs;Xe(Xe.S,"Number",{isSafeInteger:function(t){return Da(t)&&9007199254740991>=Va(t)}}),Xe(Xe.S,"Number",{isNaN:function(t){return t!=t}}),Xe(Xe.S,"Number",{EPSILON:Math.pow(2,-52)}),Xe(Xe.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991}),Xe(Xe.S,"Number",{MAX_SAFE_INTEGER:9007199254740991});var Ga=Math.log1p||function(t){return(t=+t)>-1e-8&&1e-8>t?t-t*t/2:Math.log(1+t)},Ja=Object.freeze({default:Ga,__moduleExports:Ga}),Ha=Ja&&Ga||Ja,Ya=Math.sqrt,qa=Math.acosh;Xe(Xe.S+Xe.F*!(qa&&710==Math.floor(qa(Number.MAX_VALUE))&&qa(1/0)==1/0),"Math",{acosh:function(t){return 1>(t=+t)?NaN:t>94906265.62425156?Math.log(t)+Math.LN2:Ha(t-1+Ya(t-1)*Ya(t+1))}});var Xa=Math.asinh;Xe(Xe.S+Xe.F*!(Xa&&1/Xa(0)>0),"Math",{asinh:function t(e){return isFinite(e=+e)&&0!=e?0>e?-t(-e):Math.log(e+Math.sqrt(e*e+1)):e}});var $a=Math.atanh;Xe(Xe.S+Xe.F*!($a&&0>1/$a(-0)),"Math",{atanh:function(t){return 0==(t=+t)?t:Math.log((1+t)/(1-t))/2}});var Qa=Math.sign||function(t){return 0==(t=+t)||t!=t?t:0>t?-1:1},Za=Object.freeze({default:Qa,__moduleExports:Qa}),tc=Za&&Qa||Za;Xe(Xe.S,"Math",{cbrt:function(t){return tc(t=+t)*Math.pow(Math.abs(t),1/3)}}),Xe(Xe.S,"Math",{clz32:function(t){return(t>>>=0)?31-Math.floor(Math.log(t+.5)*Math.LOG2E):32}});var ec=Math.exp;Xe(Xe.S,"Math",{cosh:function(t){return(ec(t=+t)+ec(-t))/2}});var nc=Math.expm1,rc=!nc||nc(10)>22025.465794806718||22025.465794806718>nc(10)||-2e-17!=nc(-2e-17)?function(t){return 0==(t=+t)?t:t>-1e-6&&1e-6>t?t+t*t/2:Math.exp(t)-1}:nc,oc=Object.freeze({default:rc,__moduleExports:rc}),ic=oc&&rc||oc;Xe(Xe.S+Xe.F*(ic!=Math.expm1),"Math",{expm1:ic});var uc=Math.pow,ac=uc(2,-52),cc=uc(2,-23),fc=uc(2,127)*(2-cc),sc=uc(2,-126),lc=Math.fround||function(t){var e,n,r=Math.abs(t),o=tc(t);return sc>r?o*(r/sc/cc+1/ac-1/ac)*sc*cc:(n=(e=(1+cc/ac)*r)-(e-r))>fc||n!=n?o*(1/0):o*n},hc=Object.freeze({default:lc,__moduleExports:lc});Xe(Xe.S,"Math",{fround:hc&&lc||hc});var dc=Math.abs;Xe(Xe.S,"Math",{hypot:function(t,e){for(var n,r,o=0,i=0,u=arguments.length,a=0;u>i;)(n=dc(arguments[i++]))>a?(o=o*(r=a/n)*r+1,a=n):o+=n>0?(r=n/a)*r:n;return a===1/0?1/0:a*Math.sqrt(o)}});var vc=Math.imul;Xe(Xe.S+Xe.F*v(function(){return-5!=vc(4294967295,5)||2!=vc.length}),"Math",{imul:function(t,e){var n=+t,r=+e,o=65535&n,i=65535&r;return 0|o*i+((65535&n>>>16)*i+o*(65535&r>>>16)<<16>>>0)}}),Xe(Xe.S,"Math",{log1p:Ha}),Xe(Xe.S,"Math",{log10:function(t){return Math.log(t)*Math.LOG10E}}),Xe(Xe.S,"Math",{log2:function(t){return Math.log(t)/Math.LN2}}),Xe(Xe.S,"Math",{sign:tc});var pc=Math.exp;Xe(Xe.S+Xe.F*v(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(t){return 1>Math.abs(t=+t)?(ic(t)-ic(-t))/2:(pc(t-1)-pc(-t-1))*(Math.E/2)}});var yc=Math.exp;Xe(Xe.S,"Math",{tanh:function(t){var e=ic(t=+t),n=ic(-t);return e==1/0?1:n==1/0?-1:(e-n)/(yc(t)+yc(-t))}}),Xe(Xe.S,"Math",{trunc:function(t){return(t>0?Math.floor:Math.ceil)(t)}});var gc=ce(!0);Xe(Xe.P,"Array",{includes:function(t){return gc(this,t,arguments.length>1?arguments[1]:void 0)}}),yr("includes");var _c=zr.f,mc=function(t){return function(e){for(var n,r=$t(e),o=bn(r),i=o.length,u=0,a=[];i>u;)_c.call(r,n=o[u++])&&a.push(t?[n,r[n]]:r[n]);return a}},bc=Object.freeze({default:mc,__moduleExports:mc}),Ec=bc&&mc||bc,Oc=Ec(!1);Xe(Xe.S,"Object",{values:function(t){return Oc(t)}});var jc=Ec(!0);Xe(Xe.S,"Object",{entries:function(t){return jc(t)}}),Xe(Xe.S,"Object",{getOwnPropertyDescriptors:function(t){for(var e,n,r=$t(t),o=Wr.f,i=ni(r),u={},a=0;i.length>a;)void 0!==(n=o(r,e=i[a++]))&&Fa(u,e,n);return u}});var wc=function(t,e,n,r){var o=Vt(t)+"",i=o.length,u=void 0===n?" ":n+"",a=kt(e);if(i>=a||""==u)return o;var c=a-i,f=da.call(u,Math.ceil(c/u.length));return f.length>c&&(f=f.slice(0,c)),r?f+o:o+f},xc=Object.freeze({default:wc,__moduleExports:wc}),Sc=g.navigator,Ac=Sc&&Sc.userAgent||"",Mc=Object.freeze({default:Ac,__moduleExports:Ac}),zc=xc&&wc||xc,Nc=Mc&&Ac||Mc;Xe(Xe.P+Xe.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(Nc),"String",{padStart:function(t){return zc(this,t,arguments.length>1?arguments[1]:void 0,!0)}}),Xe(Xe.P+Xe.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(Nc),"String",{padEnd:function(t){return zc(this,t,arguments.length>1?arguments[1]:void 0,!1)}});var Pc=[].slice,kc=function(t){return function(e,n){var r=arguments.length>2,o=!!r&&Pc.call(arguments,2);return t(r?function(){("function"==typeof e?e:Function(e)).apply(this,o)}:e,n)}};Xe(Xe.G+Xe.B+Xe.F*/MSIE .\./.test(Nc),{setTimeout:kc(g.setTimeout),setInterval:kc(g.setInterval)}),Xe(Xe.G+Xe.B,{setImmediate:_i.set,clearImmediate:_i.clear});for(var Lc=ze("iterator"),Fc=ze("toStringTag"),Ic=dn.Array,Rc={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},Tc=bn(Rc),Cc=0;Tc.length>Cc;Cc++){var Wc,Uc=Tc[Cc],Kc=Rc[Uc],Bc=g[Uc],Dc=Bc&&Bc.prototype;if(Dc&&(Dc[Lc]||Y(Dc,Lc,Ic),Dc[Fc]||Y(Dc,Fc,Uc),dn[Uc]=Ic,Kc))for(Wc in mr)Dc[Wc]||it(Dc,Wc,mr[Wc],!0)}n(function(t){!function(e){var n,r=Object.prototype,o=r.hasOwnProperty,i="function"==typeof Symbol?Symbol:{},u=i.iterator||"@@iterator",a=i.asyncIterator||"@@asyncIterator",c=i.toStringTag||"@@toStringTag",f=e.regeneratorRuntime;if(f)t.exports=f;else{(f=e.regeneratorRuntime=t.exports).wrap=m;var s="suspendedStart",l="suspendedYield",h="executing",d="completed",v={},p={};p[u]=function(){return this};var y=Object.getPrototypeOf,g=y&&y(y(N([])));g&&g!==r&&o.call(g,u)&&(p=g);var _=j.prototype=E.prototype=Object.create(p);O.prototype=_.constructor=j,j.constructor=O,j[c]=O.displayName="GeneratorFunction",f.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===O||"GeneratorFunction"===(e.displayName||e.name))},f.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,j):(t.__proto__=j,c in t||(t[c]="GeneratorFunction")),t.prototype=Object.create(_),t},f.awrap=function(t){return{__await:t}},w(x.prototype),x.prototype[a]=function(){return this},f.AsyncIterator=x,f.async=function(t,e,n,r){var o=new x(m(t,e,n,r));return f.isGeneratorFunction(e)?o:o.next().then(function(t){return t.done?t.value:o.next()})},w(_),_[c]="Generator",_[u]=function(){return this},_.toString=function(){return"[object Generator]"},f.keys=function(t){var e=[];for(var n in t)e.push(n);return e.reverse(),function n(){for(;e.length;){var r=e.pop();if(r in t)return n.value=r,n.done=!1,n}return n.done=!0,n}},f.values=N,z.prototype={constructor:z,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=n,this.done=!1,this.delegate=null,this.method="next",this.arg=n,this.tryEntries.forEach(M),!t)for(var e in this)"t"===e.charAt(0)&&o.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=n)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var e=this;function r(r,o){return a.type="throw",a.arg=t,e.next=r,o&&(e.method="next",e.arg=n),!!o}for(var i=this.tryEntries.length-1;i>=0;--i){var u=this.tryEntries[i],a=u.completion;if("root"===u.tryLoc)return r("end");if(this.prev>=u.tryLoc){var c=o.call(u,"catchLoc"),f=o.call(u,"finallyLoc");if(c&&f){if(u.catchLoc>this.prev)return r(u.catchLoc,!0);if(u.finallyLoc>this.prev)return r(u.finallyLoc)}else if(c){if(u.catchLoc>this.prev)return r(u.catchLoc,!0)}else{if(!f)throw Error("try statement without catch or finally");if(u.finallyLoc>this.prev)return r(u.finallyLoc)}}}},abrupt:function(t,e){for(var n=this.tryEntries.length-1;n>=0;--n){var r=this.tryEntries[n];if(this.prev>=r.tryLoc&&o.call(r,"finallyLoc")&&r.finallyLoc>this.prev){var i=r;break}}!i||"break"!==t&&"continue"!==t||i.tryLoc>e||e>i.finallyLoc||(i=null);var u=i?i.completion:{};return u.type=t,u.arg=e,i?(this.method="next",this.next=i.finallyLoc,v):this.complete(u)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),v},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),M(n),v}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var o=r.arg;M(n)}return o}}throw Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:N(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=n),v}}}function m(t,e,n,r){var o=Object.create((e&&e.prototype instanceof E?e:E).prototype),i=new z(r||[]);return o._invoke=function(t,e,n){var r=s;return function(o,i){if(r===h)throw Error("Generator is already running");if(r===d){if("throw"===o)throw i;return P()}for(n.method=o,n.arg=i;;){var u=n.delegate;if(u){var a=S(u,n);if(a){if(a===v)continue;return a}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(r===s)throw r=d,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r=h;var c=b(t,e,n);if("normal"===c.type){if(r=n.done?d:l,c.arg===v)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r=d,n.method="throw",n.arg=c.arg)}}}(t,n,i),o}function b(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(t){return{type:"throw",arg:t}}}function E(){}function O(){}function j(){}function w(t){["next","throw","return"].forEach(function(e){t[e]=function(t){return this._invoke(e,t)}})}function x(t){function n(e,r,i,u){var a=b(t[e],t,r);if("throw"!==a.type){var c=a.arg,f=c.value;return f&&"object"==typeof f&&o.call(f,"__await")?Promise.resolve(f.__await).then(function(t){n("next",t,i,u)},function(t){n("throw",t,i,u)}):Promise.resolve(f).then(function(t){c.value=t,i(c)},u)}u(a.arg)}var r;"object"==typeof e.process&&e.process.domain&&(n=e.process.domain.bind(n)),this._invoke=function(t,e){function o(){return new Promise(function(r,o){n(t,e,r,o)})}return r=r?r.then(o,o):o()}}function S(t,e){var r=t.iterator[e.method];if(r===n){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=n,S(t,e),"throw"===e.method))return v;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return v}var o=b(r,t.iterator,e.arg);if("throw"===o.type)return e.method="throw",e.arg=o.arg,e.delegate=null,v;var i=o.arg;return i?i.done?(e[t.resultName]=i.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=n),e.delegate=null,v):i:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,v)}function A(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function M(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function z(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(A,this),this.reset(!0)}function N(t){if(t){var e=t[u];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var r=-1,i=function e(){for(;++r<t.length;)if(o.call(t,r))return e.value=t[r],e.done=!1,e;return e.value=n,e.done=!0,e};return i.next=i}}return{next:P}}function P(){return{value:n,done:!0}}}("object"==typeof e?e:"object"==typeof window?window:"object"==typeof self?self:e)});var Vc="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Gc=function(){return function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return function(t,e){var n=[],r=!0,o=!1,i=void 0;try{for(var u,a=t[Symbol.iterator]();!(r=(u=a.next()).done)&&(n.push(u.value),!e||n.length!==e);r=!0);}catch(t){o=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}(t,e);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Jc=function(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);t.length>e;e++)n[e]=t[e];return n}return Array.from(t)};function Hc(t){return null===t?"null":t!==Object(t)?void 0===t?"undefined":Vc(t):{}.toString.call(t).slice(8,-1).toLowerCase()}function Yc(t){return"string"!==Hc(t)||!t.length}function qc(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments[1],n=arguments[2];if(Yc(t))return!1;var r=t.charCodeAt(0);return r>=e&&n>=r}var Xc={HIRAGANA:"toHiragana",KATAKANA:"toKatakana"},$c={HEPBURN:"hepburn"},Qc={useObsoleteKana:!1,passRomaji:!1,upcaseKatakana:!1,ignoreCase:!1,IMEMode:!1,romanization:$c.HEPBURN},Zc=65,tf=90,ef=12353,nf=12438,rf=12449,of=12540,uf=19968,af=40879,cf=12540,ff=12539,sf=[65377,65381],lf=[[12288,12351],sf,[12539,12540],[65281,65295],[65306,65311],[65339,65343],[65371,65376],[65504,65518]],hf=[].concat([[12352,12447],[12448,12543],sf,[65382,65439]],lf,[[65313,65338],[65345,65370],[65296,65305],[19968,40959],[13312,19903]]),df=[[0,127]].concat([[256,257],[274,275],[298,299],[332,333],[362,363]]),vf=[[32,47],[58,63],[91,96],[123,126]].concat([[8216,8217],[8220,8221]]);function pf(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return hf.some(function(e){var n=Gc(e,2);return qc(t,n[0],n[1])})}function yf(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments[1],n="regexp"===Hc(e);return!Yc(t)&&[].concat(Jc(t)).every(function(t){var r=pf(t);return n?r||e.test(t):r})}var gf=function(){return Object.assign({},Qc,arguments.length>0&&void 0!==arguments[0]?arguments[0]:{})};function _f(t,e,n){var r=e;function o(t,e){var i=t.charAt(0);return function t(e,r,i,u){if(!r)return n||1===Object.keys(e).length?e[""]?[[i,u,e[""]]]:[]:[[i,u,null]];if(1===Object.keys(e).length)return[[i,u,e[""]]].concat(o(r,u));var a=function(t,e){if(void 0!==t[e])return Object.assign({"":t[""]+e},t[e])}(e,r.charAt(0));if(void 0===a)return[[i,u,e[""]]].concat(o(r,u));return t(a,r.slice(1),i,u+1)}(Object.assign({"":i},r[i]),t.slice(1),e,e+1)}return o(t,0)}function mf(t){return Object.entries(t).reduce(function(t,e){var n=Gc(e,2),r=n[0],o=n[1],i="string"===Hc(o);return t[r]=i?{"":o}:mf(o),t},{})}function bf(t,e){return e.split("").reduce(function(t,e){return void 0===t[e]&&(t[e]={}),t[e]},t)}function Ef(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e={};return"object"===Hc(t)&&Object.entries(t).forEach(function(t){var n=Gc(t,2),r=n[1],o=e;n[0].split("").forEach(function(t){void 0===o[t]&&(o[t]={}),o=o[t]}),o[""]=r}),function(t){return function t(e,n){return void 0===e||"string"===Hc(e)?n:Object.entries(n).reduce(function(n,r){var o=Gc(r,2),i=o[0];return n[i]=t(e[i],o[1]),n},e)}(JSON.parse(JSON.stringify(t)),e)}}function Of(t,e){return e?"function"===Hc(e)?e(t):Ef(e)(t):t}var jf={a:"あ",i:"い",u:"う",e:"え",o:"お",k:{a:"か",i:"き",u:"く",e:"け",o:"こ"},s:{a:"さ",i:"し",u:"す",e:"せ",o:"そ"},t:{a:"た",i:"ち",u:"つ",e:"て",o:"と"},n:{a:"な",i:"に",u:"ぬ",e:"ね",o:"の"},h:{a:"は",i:"ひ",u:"ふ",e:"へ",o:"ほ"},m:{a:"ま",i:"み",u:"む",e:"め",o:"も"},y:{a:"や",u:"ゆ",o:"よ"},r:{a:"ら",i:"り",u:"る",e:"れ",o:"ろ"},w:{a:"わ",i:"ゐ",e:"ゑ",o:"を"},g:{a:"が",i:"ぎ",u:"ぐ",e:"げ",o:"ご"},z:{a:"ざ",i:"じ",u:"ず",e:"ぜ",o:"ぞ"},d:{a:"だ",i:"ぢ",u:"づ",e:"で",o:"ど"},b:{a:"ば",i:"び",u:"ぶ",e:"べ",o:"ぼ"},p:{a:"ぱ",i:"ぴ",u:"ぷ",e:"ぺ",o:"ぽ"},v:{a:"ゔぁ",i:"ゔぃ",u:"ゔ",e:"ゔぇ",o:"ゔぉ"}},wf={".":"。",",":"、",":":":","/":"・","!":"!","?":"?","~":"〜","-":"ー","‘":"「","’":"」","“":"『","”":"』","[":"[","]":"]","(":"(",")":")","{":"{","}":"}"},xf={k:"き",s:"し",t:"ち",n:"に",h:"ひ",m:"み",r:"り",g:"ぎ",z:"じ",d:"ぢ",b:"び",p:"ぴ",v:"ゔ",q:"く",f:"ふ"},Sf={ya:"ゃ",yi:"ぃ",yu:"ゅ",ye:"ぇ",yo:"ょ"},Af={a:"ぁ",i:"ぃ",u:"ぅ",e:"ぇ",o:"ぉ"},Mf={sh:"sy",ch:"ty",cy:"ty",chy:"ty",shy:"sy",j:"zy",jy:"zy",shi:"si",chi:"ti",tsu:"tu",ji:"zi",fu:"hu"},zf=Object.assign({tu:"っ",wa:"ゎ",ka:"ヵ",ke:"ヶ"},Af,Sf),Nf={yi:"い",wu:"う",ye:"いぇ",wi:"うぃ",we:"うぇ",kwa:"くぁ",whu:"う",tha:"てゃ",thu:"てゅ",tho:"てょ",dha:"でゃ",dhu:"でゅ",dho:"でょ"},Pf={wh:"う",qw:"く",q:"く",gw:"ぐ",sw:"す",ts:"つ",th:"て",tw:"と",dh:"で",dw:"ど",fw:"ふ",f:"ふ"};function kf(){var t=mf(jf),e=function(e){return bf(t,e)};return Object.entries(xf).forEach(function(t){var n=Gc(t,2),r=n[0],o=n[1];Object.entries(Sf).forEach(function(t){var n=Gc(t,2),i=n[1];e(r+n[0])[""]=o+i})}),Object.entries(wf).forEach(function(t){var n=Gc(t,2),r=n[1];e(n[0])[""]=r}),Object.entries(Pf).forEach(function(t){var n=Gc(t,2),r=n[0],o=n[1];Object.entries(Af).forEach(function(t){var n=Gc(t,2),i=n[1];e(r+n[0])[""]=o+i})}),["n","n'","xn"].forEach(function(t){e(t)[""]="ん"}),t.c=JSON.parse(JSON.stringify(t.k)),Object.entries(Mf).forEach(function(t){var n=Gc(t,2),r=n[0],o=n[1],i=r.slice(0,r.length-1),u=r.charAt(r.length-1);e(i)[u]=JSON.parse(JSON.stringify(e(o)))}),Object.entries(zf).forEach(function(t){var n,r=Gc(t,2),o=r[0],i=r[1],u=function(t){return t.charAt(t.length-1)},a=function(t){return t.slice(0,t.length-1)},c=e("x"+o);c[""]=i,e("l"+a(o))[u(o)]=c,(n=o,[].concat(Jc(Object.entries(Mf)),[["c","k"]]).reduce(function(t,e){var r=Gc(e,2),o=r[0],i=r[1];return n.startsWith(i)?t.concat(n.replace(i,o)):t},[])).forEach(function(t){["l","x"].forEach(function(n){e(n+a(t))[u(t)]=e(n+o)})})}),Object.entries(Nf).forEach(function(t){var n=Gc(t,2),r=n[1];e(n[0])[""]=r}),[].concat(Jc(Object.keys(xf)),["c","y","w","j"]).forEach(function(e){var n=t[e];n[e]=function t(e){return Object.entries(e).reduce(function(e,n){var r=Gc(n,2),o=r[0],i=r[1];return e[o]=o?t(i):"っ"+i,e},{})}(n)}),delete t.n.n,Object.freeze(JSON.parse(JSON.stringify(t)))}var Lf=null;var Ff=Ef({wi:"ゐ",we:"ゑ"});function If(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return!Yc(t)&&qc(t,Zc,tf)}function Rf(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return!Yc(t)&&t.charCodeAt(0)===cf}function Tf(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return!Yc(t)&&t.charCodeAt(0)===ff}function Cf(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return!Yc(t)&&(!!Rf(t)||qc(t,ef,nf))}function Wf(){var t=[];return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").split("").forEach(function(e){if(Rf(e)||Tf(e))t.push(e);else if(Cf(e)){var n=e.charCodeAt(0)+(rf-ef);t.push(String.fromCharCode(n))}else t.push(e)}),t.join("")}function Uf(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0;return n?r=e:n=Bf(r=gf(e)),function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2];n||(n=Bf(e));return _f(t.toLowerCase(),n,!e.IMEMode)}(t,r,n).map(function(e){var n=Gc(e,3),o=n[0],i=n[1],u=n[2];if(null===u)return t.slice(o);var a=r.IMEMode===Xc.HIRAGANA,c=r.IMEMode===Xc.KATAKANA||[].concat(Jc(t.slice(o,i))).every(If);return a||!c?u:Wf(u)}).join("")}var Kf=null;function Bf(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=(null==Lf&&(Lf=kf()),Lf);return e=t.IMEMode?function(t){var e=JSON.parse(JSON.stringify(t));return e.n.n={"":"ん"},e.n[" "]={"":"ん"},e}(e):e,e=t.useObsoleteKana?Ff(e):e,t.customKanaMapping&&(null==Kf&&(Kf=Of(e,t.customKanaMapping)),e=Kf),e}var Df=[];function Vf(t){var e=Object.assign({},gf(t),{IMEMode:t.IMEMode||!0}),n=Bf(e),r=[].concat(Jc(Object.keys(n)),Jc(Object.keys(n).map(function(t){return t.toUpperCase()})));return function(t){var o=t.target;void 0!==o.value&&"true"!==o.dataset.ignoreComposition&&function(t,e,n,r,o){var i=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],r=void 0,o=void 0,i=void 0;if(0===e&&n.includes(t[0])){var u=function(t,e){return[""].concat(Jc(Jf(t,function(t){return e.includes(t)||!yf(t,/[0-9]/)})))}(t,n),a=Gc(u,3);r=a[0],o=a[1],i=a[2]}else if(e>0){var c=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=Jf([].concat(Jc(t.slice(0,e))).reverse(),function(t){return!yf(t)}),r=Gc(n,2),o=r[0];return[r[1].reverse().join(""),o.split("").reverse().join(""),t.slice(e)]}(t,e),f=Gc(c,3);r=f[0],o=f[1],i=f[2]}else{var s=Jf(t,function(t){return!n.includes(t)}),l=Gc(s,2);r=l[0];var h=Jf(o=l[1],function(t){return!yf(t)}),d=Gc(h,2);o=d[0],i=d[1]}return[r,o,i]}(t.value,t.selectionEnd,r),u=Gc(i,3),a=u[0],c=u[1],f=u[2],s=Uf(c,e,n);if(c!==s){var l=a.length+s.length,h=a+s+f;t.value=h,h,f.length?setTimeout(function(){return t.setSelectionRange(l,l)},1):t.setSelectionRange(l,l)}else t.value}(o,e,n,r)}}function Gf(t){var e=t.type,n=t.target,r=t.data;/Mac/.test(window.navigator&&window.navigator.platform)&&("compositionupdate"===e&&yf(r)&&(n.dataset.ignoreComposition="true"),"compositionend"===e&&(n.dataset.ignoreComposition="false"))}function Jf(){for(var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(t){return!!t},n=[],r=t.length,o=0;r>o&&e(t[o],o);)n.push(t[o]),o+=1;return[n.join(""),t.slice(o)]}var Hf={input:function(t){var e=t.target;return console.log("input:",{value:e.value,selectionStart:e.selectionStart,selectionEnd:e.selectionEnd})},compositionstart:function(){return console.log("compositionstart")},compositionupdate:function(t){var e=t.target;return console.log("compositionupdate",{data:t.data,value:e.value,selectionStart:e.selectionStart,selectionEnd:e.selectionEnd})},compositionend:function(){return console.log("compositionend")}},Yf=function(t){Object.entries(Hf).forEach(function(e){var n=Gc(e,2);return t.addEventListener(n[0],n[1])})},qf=function(t){Object.entries(Hf).forEach(function(e){var n=Gc(e,2);return t.removeEventListener(n[0],n[1])})},Xf=["TEXTAREA","INPUT"],$f=0,Qf=function(){return $f+=1,""+Date.now()+$f};function Zf(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return!Yc(t)&&df.some(function(e){var n=Gc(e,2);return qc(t,n[0],n[1])})}function ts(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments[1],n="regexp"===Hc(e);return!Yc(t)&&[].concat(Jc(t)).every(function(t){var r=Zf(t);return n?r||e.test(t):r})}function es(){return qc(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",rf,of)}function ns(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return!Yc(t)&&(Cf(t)||es(t))}function rs(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return!Yc(t)&&[].concat(Jc(t)).every(ns)}function os(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return!Yc(t)&&[].concat(Jc(t)).every(Cf)}function is(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return!Yc(t)&&[].concat(Jc(t)).every(es)}function us(){return qc(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",uf,af)}function as(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return!Yc(t)&&[].concat(Jc(t)).every(us)}function cs(){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{passKanji:!0},e=[].concat(Jc(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"")),n=!1;return t.passKanji||(n=e.some(as)),(e.some(os)||e.some(is))&&e.some(ts)&&!n}var fs=function(t,e){return Rf(t)&&1>e},ss=function(t,e){return Rf(t)&&e>0},ls=function(t){return["ヶ","ヵ"].includes(t)},hs={a:"あ",i:"い",u:"う",e:"え",o:"う"};function ds(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments[1],n=arguments[2],r="";return t.split("").reduce(function(o,i,u){if(Tf(i)||fs(i,u)||ls(i))return o.concat(i);if(r&&ss(i,u)){var a=e(r).slice(-1);return es(t[u-1])&&"o"===a&&n?o.concat("お"):o.concat(hs[a])}if(!Rf(i)&&es(i)){var c=i.charCodeAt(0)+(ef-rf),f=String.fromCharCode(c);return r=f,o.concat(f)}return r="",o.concat(i)},[]).join("")}var vs=null,ps={"あ":"a","い":"i","う":"u","え":"e","お":"o","か":"ka","き":"ki","く":"ku","け":"ke","こ":"ko","さ":"sa","し":"shi","す":"su","せ":"se","そ":"so","た":"ta","ち":"chi","つ":"tsu","て":"te","と":"to","な":"na","に":"ni","ぬ":"nu","ね":"ne","の":"no","は":"ha","ひ":"hi","ふ":"fu","へ":"he","ほ":"ho","ま":"ma","み":"mi","む":"mu","め":"me","も":"mo","ら":"ra","り":"ri","る":"ru","れ":"re","ろ":"ro","や":"ya","ゆ":"yu","よ":"yo","わ":"wa","ゐ":"wi","ゑ":"we","を":"wo","ん":"n","が":"ga","ぎ":"gi","ぐ":"gu","げ":"ge","ご":"go","ざ":"za","じ":"ji","ず":"zu","ぜ":"ze","ぞ":"zo","だ":"da","ぢ":"ji","づ":"zu","で":"de","ど":"do","ば":"ba","び":"bi","ぶ":"bu","べ":"be","ぼ":"bo","ぱ":"pa","ぴ":"pi","ぷ":"pu","ぺ":"pe","ぽ":"po","ゔぁ":"va","ゔぃ":"vi","ゔ":"vu","ゔぇ":"ve","ゔぉ":"vo"},ys={"。":".","、":",",":":":","・":"/","!":"!","?":"?","〜":"~","ー":"-","「":"‘","」":"’","『":"“","』":"”","[":"[","]":"]","(":"(",")":")","{":"{","}":"}"," ":" "},gs=["あ","い","う","え","お","や","ゆ","よ"],_s={"ゃ":"ya","ゅ":"yu","ょ":"yo"},ms={"ぃ":"yi","ぇ":"ye"},bs={"ぁ":"a","ぃ":"i","ぅ":"u","ぇ":"e","ぉ":"o"},Es=["き","に","ひ","み","り","ぎ","び","ぴ","ゔ","く","ふ"],Os={"し":"sh","ち":"ch","じ":"j","ぢ":"j"},js={"っ":"","ゃ":"ya","ゅ":"yu","ょ":"yo","ぁ":"a","ぃ":"i","ぅ":"u","ぇ":"e","ぉ":"o"},ws={b:"b",c:"t",d:"d",f:"f",g:"g",h:"h",j:"j",k:"k",m:"m",p:"p",q:"q",r:"r",s:"s",t:"t",v:"v",w:"w",x:"x",z:"z"};function xs(){var t,e,n;return null==vs&&(t=mf(ps),e=function(e){return bf(t,e)},n=function(t,n){e(t)[""]=n},Object.entries(ys).forEach(function(t){var n=Gc(t,2),r=n[1];e(n[0])[""]=r}),[].concat(Jc(Object.entries(_s)),Jc(Object.entries(bs))).forEach(function(t){var e=Gc(t,2);n(e[0],e[1])}),Es.forEach(function(t){var r=e(t)[""][0];Object.entries(_s).forEach(function(e){var o=Gc(e,2);n(t+o[0],r+o[1])}),Object.entries(ms).forEach(function(e){var o=Gc(e,2);n(t+o[0],r+o[1])})}),Object.entries(Os).forEach(function(t){var e=Gc(t,2),r=e[0],o=e[1];Object.entries(_s).forEach(function(t){var e=Gc(t,2);n(r+e[0],o+e[1][1])}),n(r+"ぃ",o+"yi"),n(r+"ぇ",o+"e")}),t["っ"]=function t(e){return Object.entries(e).reduce(function(e,n){var r=Gc(n,2),o=r[0],i=r[1];if(o)e[o]=t(i);else{var u=i.charAt(0);e[o]=Object.keys(ws).includes(u)?ws[u]+i:i}return e},{})}(t),Object.entries(js).forEach(function(t){var e=Gc(t,2);n(e[0],e[1])}),gs.forEach(function(t){n("ん"+t,"n'"+e(t)[""])}),vs=Object.freeze(JSON.parse(JSON.stringify(t)))),vs}function Ss(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=gf(e);return function(t,e){var n=function(t){switch(t.romanization){case $c.HEPBURN:return xs();default:return{}}}(e);e.customRomajiMapping&&(null==As&&(As=Of(n,e.customRomajiMapping)),n=As);return _f(ds(t,Ss,!0),n,!e.IMEMode)}(t,n).map(function(n){var r=Gc(n,3),o=r[2];return e.upcaseKatakana&&is(t.slice(r[0],r[1]))?o.toUpperCase():o}).join("")}var As=null;function Ms(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return!Yc(t)&&vf.some(function(e){var n=Gc(e,2);return qc(t,n[0],n[1])})}function zs(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return!Yc(t)&&lf.some(function(e){var n=Gc(e,2);return qc(t,n[0],n[1])})}var Ns=function(t){return" "===t},Ps=function(t){return" "===t},ks=function(t){return/[0-9]/.test(t)},Ls=function(t){return/[0-9]/.test(t)},Fs={EN:"en",JA:"ja",EN_NUM:"englishNumeral",JA_NUM:"japaneseNumeral",EN_PUNC:"englishPunctuation",JA_PUNC:"japanesePunctuation",KANJI:"kanji",HIRAGANA:"hiragana",KATAKANA:"katakana",SPACE:"space",OTHER:"other"};function Is(t){var e=Fs.EN,n=Fs.JA,r=Fs.EN_NUM,o=Fs.JA_NUM,i=Fs.EN_PUNC,u=Fs.JA_PUNC,a=Fs.KANJI,c=Fs.HIRAGANA,f=Fs.KATAKANA,s=Fs.SPACE,l=Fs.OTHER;if(arguments.length>1&&void 0!==arguments[1]&&arguments[1])switch(!0){case ks(t):case Ls(t):return l;case Ns(t):return e;case Ms(t):return l;case Ps(t):return n;case zs(t):return l;case pf(t):return n;case Zf(t):return e;default:return l}else switch(!0){case Ps(t):case Ns(t):return s;case ks(t):return o;case Ls(t):return r;case Ms(t):return i;case zs(t):return u;case us(t):return a;case Cf(t):return c;case es(t):return f;case pf(t):return n;case Zf(t):return e;default:return l}}function Rs(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.compact,r=void 0!==n&&n,o=e.detailed,i=void 0!==o&&o;if(null==t||Yc(t))return[];var u=[].concat(Jc(t)),a=u.shift(),c=Is(a,r);return u.reduce(function(t,e){var n=Is(e,r),o=n===c;c=n;var u=e;return o&&(u=(i?t.pop().value:t.pop())+u),t.concat(i?{type:n,value:u}:u)},[a=i?{type:c,value:a}:a])}var Ts=function(t,e){return e&&!rs(t[0])},Cs=function(t,e){return!e&&!rs(t[t.length-1])},Ws=function(t,e){return e&&![].concat(Jc(e)).some(as)||!e&&rs(t)};t.bind=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!Xf.includes(t.nodeName))throw Error("Element provided to Wanakana bind() was not a valid input or textarea element.\n Received: ("+JSON.stringify(t)+")");var r=Vf(e),o=Qf();t.setAttribute("data-wanakana-id",o),t.setAttribute("lang","ja"),t.setAttribute("autoCapitalize","none"),t.setAttribute("autoCorrect","off"),t.setAttribute("autoComplete","off"),t.setAttribute("spellCheck","false"),t.addEventListener("input",r),t.addEventListener("compositionupdate",Gf),t.addEventListener("compositionend",Gf),function(t,e,n){Df=Df.concat({id:t,inputHandler:e,compositionHandler:n})}(o,r,Gf),!0===n&&Yf(t)},t.unbind=function(t){var e,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=(e=t)&&Df.find(function(t){return t.id===e.getAttribute("data-wanakana-id")});if(null==r)throw Error("Element provided to Wanakana unbind() had no listener registered.\n Received: "+JSON.stringify(t));var o,i=r.inputHandler,u=r.compositionHandler;t.removeAttribute("data-wanakana-id"),t.removeAttribute("data-ignore-composition"),t.removeEventListener("input",i),t.removeEventListener("compositionstart",u),t.removeEventListener("compositionupdate",u),t.removeEventListener("compositionend",u),o=r.id,Df=Df.filter(function(t){return t.id!==o}),!0===n&&qf(t)},t.isRomaji=ts,t.isJapanese=yf,t.isKana=rs,t.isHiragana=os,t.isKatakana=is,t.isMixed=cs,t.isKanji=as,t.toRomaji=Ss,t.toKana=Uf,t.toHiragana=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=gf(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{});return e.passRomaji?ds(t,Ss):cs(t,{passKanji:!0})?Uf(ds(t,Ss).toLowerCase(),e):ts(t)||Ms(t)?Uf(t.toLowerCase(),e):ds(t,Ss)},t.toKatakana=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=gf(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{});return e.passRomaji?Wf(t):cs(t)||ts(t)||Ms(t)?Wf(Uf(t.toLowerCase(),e)):Wf(t)},t.stripOkurigana=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.leading,r=void 0!==n&&n,o=e.matchKanji,i=void 0===o?"":o;if(!yf(t)||Ts(t,r)||Cs(t,r)||Ws(t,i))return t;var u=i||t,a=RegExp(r?"^"+Rs(u).shift():Rs(u).pop()+"$");return t.replace(a,"")},t.tokenize=Rs,t.VERSION="4.0.2",t.TO_KANA_METHODS=Xc,t.ROMANIZATIONS=$c,Object.defineProperty(t,"__esModule",{value:!0})}); -//# sourceMappingURL=wanakana.min.js.map diff --git a/ext/lib/wanakana.min.js.map b/ext/lib/wanakana.min.js.map deleted file mode 100644 index 518174e1..00000000 --- a/ext/lib/wanakana.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"wanakana.min.js","sources":["../../node_modules/core-js/modules/_global.js","../../node_modules/core-js/modules/_core.js","../../node_modules/core-js/modules/_is-object.js","../../node_modules/core-js/modules/_an-object.js","../../node_modules/core-js/modules/_fails.js","../../node_modules/core-js/modules/_descriptors.js","../../node_modules/core-js/modules/_dom-create.js","../../node_modules/core-js/modules/_ie8-dom-define.js","../../node_modules/core-js/modules/_to-primitive.js","../../node_modules/core-js/modules/_object-dp.js","../../node_modules/core-js/modules/_property-desc.js","../../node_modules/core-js/modules/_hide.js","../../node_modules/core-js/modules/_has.js","../../node_modules/core-js/modules/_uid.js","../../node_modules/core-js/modules/_redefine.js","../../node_modules/core-js/modules/_a-function.js","../../node_modules/core-js/modules/_ctx.js","../../node_modules/core-js/modules/_export.js","../../node_modules/core-js/modules/_typed.js","../../node_modules/core-js/modules/_library.js","../../node_modules/core-js/modules/_redefine-all.js","../../node_modules/core-js/modules/_an-instance.js","../../node_modules/core-js/modules/_to-integer.js","../../node_modules/core-js/modules/_to-length.js","../../node_modules/core-js/modules/_to-index.js","../../node_modules/core-js/modules/_cof.js","../../node_modules/core-js/modules/_iobject.js","../../node_modules/core-js/modules/_defined.js","../../node_modules/core-js/modules/_to-iobject.js","../../node_modules/core-js/modules/_to-absolute-index.js","../../node_modules/core-js/modules/_array-includes.js","../../node_modules/core-js/modules/_shared.js","../../node_modules/core-js/modules/_shared-key.js","../../node_modules/core-js/modules/_object-keys-internal.js","../../node_modules/core-js/modules/_enum-bug-keys.js","../../node_modules/core-js/modules/_object-gopn.js","../../node_modules/core-js/modules/_to-object.js","../../node_modules/core-js/modules/_array-fill.js","../../node_modules/core-js/modules/_wks.js","../../node_modules/core-js/modules/_set-to-string-tag.js","../../node_modules/core-js/modules/_typed-buffer.js","../../node_modules/core-js/modules/_species-constructor.js","../../node_modules/core-js/modules/_set-species.js","../../node_modules/core-js/modules/es6.typed.array-buffer.js","../../node_modules/core-js/modules/_classof.js","../../node_modules/core-js/modules/_is-array-iter.js","../../node_modules/core-js/modules/_object-keys.js","../../node_modules/core-js/modules/_object-dps.js","../../node_modules/core-js/modules/_html.js","../../node_modules/core-js/modules/_object-create.js","../../node_modules/core-js/modules/_object-gpo.js","../../node_modules/core-js/modules/core.get-iterator-method.js","../../node_modules/core-js/modules/_is-array.js","../../node_modules/core-js/modules/_array-species-constructor.js","../../node_modules/core-js/modules/_array-species-create.js","../../node_modules/core-js/modules/_array-methods.js","../../node_modules/core-js/modules/_add-to-unscopables.js","../../node_modules/core-js/modules/_iter-step.js","../../node_modules/core-js/modules/_iter-create.js","../../node_modules/core-js/modules/_iter-define.js","../../node_modules/core-js/modules/es6.array.iterator.js","../../node_modules/core-js/modules/_iter-detect.js","../../node_modules/core-js/modules/_array-copy-within.js","../../node_modules/core-js/modules/_object-pie.js","../../node_modules/core-js/modules/_object-gopd.js","../../node_modules/core-js/modules/_typed-array.js","../../node_modules/core-js/modules/es6.typed.int8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","../../node_modules/core-js/modules/es6.typed.int16-array.js","../../node_modules/core-js/modules/es6.typed.uint16-array.js","../../node_modules/core-js/modules/es6.typed.int32-array.js","../../node_modules/core-js/modules/es6.typed.uint32-array.js","../../node_modules/core-js/modules/es6.typed.float32-array.js","../../node_modules/core-js/modules/es6.typed.float64-array.js","../../node_modules/core-js/modules/_iter-call.js","../../node_modules/core-js/modules/_for-of.js","../../node_modules/core-js/modules/_meta.js","../../node_modules/core-js/modules/_validate-collection.js","../../node_modules/core-js/modules/_collection-strong.js","../../node_modules/core-js/modules/_set-proto.js","../../node_modules/core-js/modules/_inherit-if-required.js","../../node_modules/core-js/modules/_collection.js","../../node_modules/core-js/modules/es6.map.js","../../node_modules/core-js/modules/es6.set.js","../../node_modules/core-js/modules/_object-gops.js","../../node_modules/core-js/modules/_object-assign.js","../../node_modules/core-js/modules/_collection-weak.js","../../node_modules/core-js/modules/es6.weak-map.js","../../node_modules/core-js/modules/es6.weak-set.js","../../node_modules/core-js/modules/es6.reflect.apply.js","../../node_modules/core-js/modules/_invoke.js","../../node_modules/core-js/modules/_bind.js","../../node_modules/core-js/modules/es6.reflect.construct.js","../../node_modules/core-js/modules/es6.reflect.define-property.js","../../node_modules/core-js/modules/es6.reflect.delete-property.js","../../node_modules/core-js/modules/es6.reflect.get.js","../../node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.reflect.get-prototype-of.js","../../node_modules/core-js/modules/es6.reflect.has.js","../../node_modules/core-js/modules/es6.reflect.is-extensible.js","../../node_modules/core-js/modules/_own-keys.js","../../node_modules/core-js/modules/es6.reflect.own-keys.js","../../node_modules/core-js/modules/es6.reflect.prevent-extensions.js","../../node_modules/core-js/modules/es6.reflect.set.js","../../node_modules/core-js/modules/es6.reflect.set-prototype-of.js","../../node_modules/core-js/modules/_task.js","../../node_modules/core-js/modules/_microtask.js","../../node_modules/core-js/modules/_new-promise-capability.js","../../node_modules/core-js/modules/es6.promise.js","../../node_modules/core-js/modules/_perform.js","../../node_modules/core-js/modules/_promise-resolve.js","../../node_modules/core-js/modules/_wks-ext.js","../../node_modules/core-js/modules/_wks-define.js","../../node_modules/core-js/modules/_enum-keys.js","../../node_modules/core-js/modules/_object-gopn-ext.js","../../node_modules/core-js/modules/es6.symbol.js","../../node_modules/core-js/modules/_object-sap.js","../../node_modules/core-js/modules/es6.object.freeze.js","../../node_modules/core-js/modules/es6.object.seal.js","../../node_modules/core-js/modules/es6.object.prevent-extensions.js","../../node_modules/core-js/modules/es6.object.is-frozen.js","../../node_modules/core-js/modules/es6.object.is-sealed.js","../../node_modules/core-js/modules/es6.object.is-extensible.js","../../node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.object.get-prototype-of.js","../../node_modules/core-js/modules/es6.object.keys.js","../../node_modules/core-js/modules/es6.object.get-own-property-names.js","../../node_modules/core-js/modules/es6.object.assign.js","../../node_modules/core-js/modules/_same-value.js","../../node_modules/core-js/modules/es6.object.is.js","../../node_modules/core-js/modules/es6.object.set-prototype-of.js","../../node_modules/core-js/modules/es6.function.name.js","../../node_modules/core-js/modules/es6.string.raw.js","../../node_modules/core-js/modules/es6.string.from-code-point.js","../../node_modules/core-js/modules/_string-at.js","../../node_modules/core-js/modules/es6.string.code-point-at.js","../../node_modules/core-js/modules/_string-repeat.js","../../node_modules/core-js/modules/es6.string.repeat.js","../../node_modules/core-js/modules/_is-regexp.js","../../node_modules/core-js/modules/_string-context.js","../../node_modules/core-js/modules/_fails-is-regexp.js","../../node_modules/core-js/modules/es6.string.starts-with.js","../../node_modules/core-js/modules/es6.string.ends-with.js","../../node_modules/core-js/modules/es6.string.includes.js","../../node_modules/core-js/modules/_flags.js","../../node_modules/core-js/modules/es6.regexp.flags.js","../../node_modules/core-js/modules/_fix-re-wks.js","../../node_modules/core-js/modules/es6.regexp.match.js","../../node_modules/core-js/modules/es6.regexp.replace.js","../../node_modules/core-js/modules/es6.regexp.split.js","../../node_modules/core-js/modules/es6.regexp.search.js","../../node_modules/core-js/modules/_create-property.js","../../node_modules/core-js/modules/es6.array.from.js","../../node_modules/core-js/modules/es6.array.of.js","../../node_modules/core-js/modules/es6.array.copy-within.js","../../node_modules/core-js/modules/es6.array.find.js","../../node_modules/core-js/modules/es6.array.find-index.js","../../node_modules/core-js/modules/es6.array.fill.js","../../node_modules/core-js/modules/es6.number.is-finite.js","../../node_modules/core-js/modules/_is-integer.js","../../node_modules/core-js/modules/es6.number.is-integer.js","../../node_modules/core-js/modules/es6.number.is-safe-integer.js","../../node_modules/core-js/modules/es6.number.is-nan.js","../../node_modules/core-js/modules/es6.number.epsilon.js","../../node_modules/core-js/modules/es6.number.min-safe-integer.js","../../node_modules/core-js/modules/es6.number.max-safe-integer.js","../../node_modules/core-js/modules/_math-log1p.js","../../node_modules/core-js/modules/es6.math.acosh.js","../../node_modules/core-js/modules/es6.math.asinh.js","../../node_modules/core-js/modules/es6.math.atanh.js","../../node_modules/core-js/modules/_math-sign.js","../../node_modules/core-js/modules/es6.math.cbrt.js","../../node_modules/core-js/modules/es6.math.clz32.js","../../node_modules/core-js/modules/es6.math.cosh.js","../../node_modules/core-js/modules/_math-expm1.js","../../node_modules/core-js/modules/es6.math.expm1.js","../../node_modules/core-js/modules/_math-fround.js","../../node_modules/core-js/modules/es6.math.fround.js","../../node_modules/core-js/modules/es6.math.hypot.js","../../node_modules/core-js/modules/es6.math.imul.js","../../node_modules/core-js/modules/es6.math.log1p.js","../../node_modules/core-js/modules/es6.math.log10.js","../../node_modules/core-js/modules/es6.math.log2.js","../../node_modules/core-js/modules/es6.math.sign.js","../../node_modules/core-js/modules/es6.math.sinh.js","../../node_modules/core-js/modules/es6.math.tanh.js","../../node_modules/core-js/modules/es6.math.trunc.js","../../node_modules/core-js/modules/es7.array.includes.js","../../node_modules/core-js/modules/_object-to-array.js","../../node_modules/core-js/modules/es7.object.values.js","../../node_modules/core-js/modules/es7.object.entries.js","../../node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","../../node_modules/core-js/modules/_string-pad.js","../../node_modules/core-js/modules/_user-agent.js","../../node_modules/core-js/modules/es7.string.pad-start.js","../../node_modules/core-js/modules/es7.string.pad-end.js","../../node_modules/core-js/modules/web.timers.js","../../node_modules/core-js/modules/web.immediate.js","../../node_modules/core-js/modules/web.dom.iterable.js","../../node_modules/regenerator-runtime/runtime.js","../../src/utils/typeOf.js","../../src/utils/isEmpty.js","../../src/utils/isCharInRange.js","../../src/constants.js","../../src/utils/isCharJapanese.js","../../src/isJapanese.js","../../src/utils/mergeWithDefaultOptions.js","../../src/utils/kanaMapping.js","../../src/utils/romajiToKanaMap.js","../../src/utils/isCharUpperCase.js","../../src/utils/isCharLongDash.js","../../src/utils/isCharSlashDot.js","../../src/utils/isCharHiragana.js","../../src/utils/hiraganaToKatakana.js","../../src/toKana.js","../../src/utils/dom.js","../../src/utils/logInputEvents.js","../../src/bind.js","../../src/utils/isCharRomaji.js","../../src/isRomaji.js","../../src/utils/isCharKatakana.js","../../src/utils/isCharKana.js","../../src/isKana.js","../../src/isHiragana.js","../../src/isKatakana.js","../../src/utils/isCharKanji.js","../../src/isKanji.js","../../src/isMixed.js","../../src/utils/katakanaToHiragana.js","../../src/utils/kanaToRomajiMap.js","../../src/toRomaji.js","../../src/utils/isCharEnglishPunctuation.js","../../src/utils/isCharJapanesePunctuation.js","../../src/tokenize.js","../../src/stripOkurigana.js","../../src/unbind.js","../../src/toHiragana.js","../../src/toKatakana.js"],"sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self\n  // eslint-disable-next-line no-new-func\n  : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.5' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n  if (!isObject(it)) throw TypeError(it + ' is not an object!');\n  return it;\n};\n","module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (e) {\n    return true;\n  }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n  return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n  if (!isObject(it)) return it;\n  var fn, val;\n  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return dP(O, P, Attributes);\n  } catch (e) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n","module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n  return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n  return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n  var isFunction = typeof val == 'function';\n  if (isFunction) has(val, 'name') || hide(val, 'name', key);\n  if (O[key] === val) return;\n  if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n  if (O === global) {\n    O[key] = val;\n  } else if (!safe) {\n    delete O[key];\n    hide(O, key, val);\n  } else if (O[key]) {\n    O[key] = val;\n  } else {\n    hide(O, key, val);\n  }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n  return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n  if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n  return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n  var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n  var key, own, out, exp;\n  if (IS_GLOBAL) source = name;\n  for (key in source) {\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    // export native or passed\n    out = (own ? target : source)[key];\n    // bind timers to global for call from export context\n    exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // extend global\n    if (target) redefine(target, key, out, type & $export.U);\n    // export\n    if (exports[key] != out) hide(exports, key, exp);\n    if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n  }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n  'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n  if (Typed = global[TypedArrayConstructors[i++]]) {\n    hide(Typed.prototype, TYPED, true);\n    hide(Typed.prototype, VIEW, true);\n  } else CONSTR = false;\n}\n\nmodule.exports = {\n  ABV: ABV,\n  CONSTR: CONSTR,\n  TYPED: TYPED,\n  VIEW: VIEW\n};\n","module.exports = false;\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n  for (var key in src) redefine(target, key, src[key], safe);\n  return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n  if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n    throw TypeError(name + ': incorrect invocation!');\n  } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n  if (it === undefined) return 0;\n  var number = toInteger(it);\n  var length = toLength(number);\n  if (number !== length) throw RangeError('Wrong length!');\n  return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n      if (O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n  return store[key] || (store[key] = {});\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n  return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n  var O = toIObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n  var O = toObject(this);\n  var length = toLength(O.length);\n  var aLen = arguments.length;\n  var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n  var end = aLen > 2 ? arguments[2] : undefined;\n  var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n  while (endPos > index) O[index++] = value;\n  return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n  var buffer = new Array(nBytes);\n  var eLen = nBytes * 8 - mLen - 1;\n  var eMax = (1 << eLen) - 1;\n  var eBias = eMax >> 1;\n  var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n  var i = 0;\n  var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n  var e, m, c;\n  value = abs(value);\n  // eslint-disable-next-line no-self-compare\n  if (value != value || value === Infinity) {\n    // eslint-disable-next-line no-self-compare\n    m = value != value ? 1 : 0;\n    e = eMax;\n  } else {\n    e = floor(log(value) / LN2);\n    if (value * (c = pow(2, -e)) < 1) {\n      e--;\n      c *= 2;\n    }\n    if (e + eBias >= 1) {\n      value += rt / c;\n    } else {\n      value += rt * pow(2, 1 - eBias);\n    }\n    if (value * c >= 2) {\n      e++;\n      c /= 2;\n    }\n    if (e + eBias >= eMax) {\n      m = 0;\n      e = eMax;\n    } else if (e + eBias >= 1) {\n      m = (value * c - 1) * pow(2, mLen);\n      e = e + eBias;\n    } else {\n      m = value * pow(2, eBias - 1) * pow(2, mLen);\n      e = 0;\n    }\n  }\n  for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n  e = e << mLen | m;\n  eLen += mLen;\n  for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n  buffer[--i] |= s * 128;\n  return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n  var eLen = nBytes * 8 - mLen - 1;\n  var eMax = (1 << eLen) - 1;\n  var eBias = eMax >> 1;\n  var nBits = eLen - 7;\n  var i = nBytes - 1;\n  var s = buffer[i--];\n  var e = s & 127;\n  var m;\n  s >>= 7;\n  for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n  m = e & (1 << -nBits) - 1;\n  e >>= -nBits;\n  nBits += mLen;\n  for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n  if (e === 0) {\n    e = 1 - eBias;\n  } else if (e === eMax) {\n    return m ? NaN : s ? -Infinity : Infinity;\n  } else {\n    m = m + pow(2, mLen);\n    e = e - eBias;\n  } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n  return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n  return [it & 0xff];\n}\nfunction packI16(it) {\n  return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n  return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n  return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n  return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n  dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n  var numIndex = +index;\n  var intIndex = toIndex(numIndex);\n  if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n  var store = view[$BUFFER]._b;\n  var start = intIndex + view[$OFFSET];\n  var pack = store.slice(start, start + bytes);\n  return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n  var numIndex = +index;\n  var intIndex = toIndex(numIndex);\n  if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n  var store = view[$BUFFER]._b;\n  var start = intIndex + view[$OFFSET];\n  var pack = conversion(+value);\n  for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n  $ArrayBuffer = function ArrayBuffer(length) {\n    anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n    var byteLength = toIndex(length);\n    this._b = arrayFill.call(new Array(byteLength), 0);\n    this[$LENGTH] = byteLength;\n  };\n\n  $DataView = function DataView(buffer, byteOffset, byteLength) {\n    anInstance(this, $DataView, DATA_VIEW);\n    anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n    var bufferLength = buffer[$LENGTH];\n    var offset = toInteger(byteOffset);\n    if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n    byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n    if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n    this[$BUFFER] = buffer;\n    this[$OFFSET] = offset;\n    this[$LENGTH] = byteLength;\n  };\n\n  if (DESCRIPTORS) {\n    addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n    addGetter($DataView, BUFFER, '_b');\n    addGetter($DataView, BYTE_LENGTH, '_l');\n    addGetter($DataView, BYTE_OFFSET, '_o');\n  }\n\n  redefineAll($DataView[PROTOTYPE], {\n    getInt8: function getInt8(byteOffset) {\n      return get(this, 1, byteOffset)[0] << 24 >> 24;\n    },\n    getUint8: function getUint8(byteOffset) {\n      return get(this, 1, byteOffset)[0];\n    },\n    getInt16: function getInt16(byteOffset /* , littleEndian */) {\n      var bytes = get(this, 2, byteOffset, arguments[1]);\n      return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n    },\n    getUint16: function getUint16(byteOffset /* , littleEndian */) {\n      var bytes = get(this, 2, byteOffset, arguments[1]);\n      return bytes[1] << 8 | bytes[0];\n    },\n    getInt32: function getInt32(byteOffset /* , littleEndian */) {\n      return unpackI32(get(this, 4, byteOffset, arguments[1]));\n    },\n    getUint32: function getUint32(byteOffset /* , littleEndian */) {\n      return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n    },\n    getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n      return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n    },\n    getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n      return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n    },\n    setInt8: function setInt8(byteOffset, value) {\n      set(this, 1, byteOffset, packI8, value);\n    },\n    setUint8: function setUint8(byteOffset, value) {\n      set(this, 1, byteOffset, packI8, value);\n    },\n    setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n      set(this, 2, byteOffset, packI16, value, arguments[2]);\n    },\n    setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n      set(this, 2, byteOffset, packI16, value, arguments[2]);\n    },\n    setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n      set(this, 4, byteOffset, packI32, value, arguments[2]);\n    },\n    setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n      set(this, 4, byteOffset, packI32, value, arguments[2]);\n    },\n    setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n      set(this, 4, byteOffset, packF32, value, arguments[2]);\n    },\n    setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n      set(this, 8, byteOffset, packF64, value, arguments[2]);\n    }\n  });\n} else {\n  if (!fails(function () {\n    $ArrayBuffer(1);\n  }) || !fails(function () {\n    new $ArrayBuffer(-1); // eslint-disable-line no-new\n  }) || fails(function () {\n    new $ArrayBuffer(); // eslint-disable-line no-new\n    new $ArrayBuffer(1.5); // eslint-disable-line no-new\n    new $ArrayBuffer(NaN); // eslint-disable-line no-new\n    return $ArrayBuffer.name != ARRAY_BUFFER;\n  })) {\n    $ArrayBuffer = function ArrayBuffer(length) {\n      anInstance(this, $ArrayBuffer);\n      return new BaseBuffer(toIndex(length));\n    };\n    var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n    for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n      if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n    }\n    if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n  }\n  // iOS Safari 7.x bug\n  var view = new $DataView(new $ArrayBuffer(2));\n  var $setInt8 = $DataView[PROTOTYPE].setInt8;\n  view.setInt8(0, 2147483648);\n  view.setInt8(1, 2147483649);\n  if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n    setInt8: function setInt8(byteOffset, value) {\n      $setInt8.call(this, byteOffset, value << 24 >> 24);\n    },\n    setUint8: function setUint8(byteOffset, value) {\n      $setInt8.call(this, byteOffset, value << 24 >> 24);\n    }\n  }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n  var C = anObject(O).constructor;\n  var S;\n  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n  var C = global[KEY];\n  if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n    configurable: true,\n    get: function () { return this; }\n  });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n  // 24.1.3.1 ArrayBuffer.isView(arg)\n  isView: function isView(it) {\n    return $isView && $isView(it) || isObject(it) && VIEW in it;\n  }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n  return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n  // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n  slice: function slice(start, end) {\n    if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n    var len = anObject(this).byteLength;\n    var first = toAbsoluteIndex(start, len);\n    var final = toAbsoluteIndex(end === undefined ? len : end, len);\n    var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n    var viewS = new $DataView(this);\n    var viewT = new $DataView(result);\n    var index = 0;\n    while (first < final) {\n      viewT.setUint8(index++, viewS.getUint8(first++));\n    } return result;\n  }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n  return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = getKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var P;\n  while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = require('./_dom-create')('iframe');\n  var i = enumBugKeys.length;\n  var lt = '<';\n  var gt = '>';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  require('./_html').appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n  if (it != undefined) return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n  return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n  var C;\n  if (isArray(original)) {\n    C = original.constructor;\n    // cross-realm fallback\n    if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n    if (isObject(C)) {\n      C = C[SPECIES];\n      if (C === null) C = undefined;\n    }\n  } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n  return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n  var IS_MAP = TYPE == 1;\n  var IS_FILTER = TYPE == 2;\n  var IS_SOME = TYPE == 3;\n  var IS_EVERY = TYPE == 4;\n  var IS_FIND_INDEX = TYPE == 6;\n  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n  var create = $create || asc;\n  return function ($this, callbackfn, that) {\n    var O = toObject($this);\n    var self = IObject(O);\n    var f = ctx(callbackfn, that, 3);\n    var length = toLength(self.length);\n    var index = 0;\n    var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n    var val, res;\n    for (;length > index; index++) if (NO_HOLES || index in self) {\n      val = self[index];\n      res = f(val, index, O);\n      if (TYPE) {\n        if (IS_MAP) result[index] = res;   // map\n        else if (res) switch (TYPE) {\n          case 3: return true;             // some\n          case 5: return val;              // find\n          case 6: return index;            // findIndex\n          case 2: result.push(val);        // filter\n        } else if (IS_EVERY) return false; // every\n      }\n    }\n    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n  };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n  ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n  return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function (kind) {\n    if (!BUGGY && kind in proto) return proto[kind];\n    switch (kind) {\n      case KEYS: return function keys() { return new Constructor(this, kind); };\n      case VALUES: return function values() { return new Constructor(this, kind); };\n    } return function entries() { return new Constructor(this, kind); };\n  };\n  var TAG = NAME + ' Iterator';\n  var DEF_VALUES = DEFAULT == VALUES;\n  var VALUES_BUG = false;\n  var proto = Base.prototype;\n  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n  var $default = $native || getMethod(DEFAULT);\n  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n  var methods, key, IteratorPrototype;\n  // Fix native\n  if ($anyNative) {\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEF_VALUES && $native && $native.name !== VALUES) {\n    VALUES_BUG = true;\n    $default = function values() { return $native.call(this); };\n  }\n  // Define iterator\n  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG] = returnThis;\n  if (DEFAULT) {\n    methods = {\n      values: DEF_VALUES ? $default : getMethod(VALUES),\n      keys: IS_SET ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if (FORCED) for (key in methods) {\n      if (!(key in proto)) redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var kind = this._k;\n  var index = this._i++;\n  if (!O || index >= O.length) {\n    this._t = undefined;\n    return step(1);\n  }\n  if (kind == 'keys') return step(0, index);\n  if (kind == 'values') return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n  var riter = [7][ITERATOR]();\n  riter['return'] = function () { SAFE_CLOSING = true; };\n  // eslint-disable-next-line no-throw-literal\n  Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n  if (!skipClosing && !SAFE_CLOSING) return false;\n  var safe = false;\n  try {\n    var arr = [7];\n    var iter = arr[ITERATOR]();\n    iter.next = function () { return { done: safe = true }; };\n    arr[ITERATOR] = function () { return iter; };\n    exec(arr);\n  } catch (e) { /* empty */ }\n  return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n  var O = toObject(this);\n  var len = toLength(O.length);\n  var to = toAbsoluteIndex(target, len);\n  var from = toAbsoluteIndex(start, len);\n  var end = arguments.length > 2 ? arguments[2] : undefined;\n  var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n  var inc = 1;\n  if (from < to && to < from + count) {\n    inc = -1;\n    from += count - 1;\n    to += count - 1;\n  }\n  while (count-- > 0) {\n    if (from in O) O[to] = O[from];\n    else delete O[to];\n    to += inc;\n    from += inc;\n  } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n  O = toIObject(O);\n  P = toPrimitive(P, true);\n  if (IE8_DOM_DEFINE) try {\n    return gOPD(O, P);\n  } catch (e) { /* empty */ }\n  if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n  var LIBRARY = require('./_library');\n  var global = require('./_global');\n  var fails = require('./_fails');\n  var $export = require('./_export');\n  var $typed = require('./_typed');\n  var $buffer = require('./_typed-buffer');\n  var ctx = require('./_ctx');\n  var anInstance = require('./_an-instance');\n  var propertyDesc = require('./_property-desc');\n  var hide = require('./_hide');\n  var redefineAll = require('./_redefine-all');\n  var toInteger = require('./_to-integer');\n  var toLength = require('./_to-length');\n  var toIndex = require('./_to-index');\n  var toAbsoluteIndex = require('./_to-absolute-index');\n  var toPrimitive = require('./_to-primitive');\n  var has = require('./_has');\n  var classof = require('./_classof');\n  var isObject = require('./_is-object');\n  var toObject = require('./_to-object');\n  var isArrayIter = require('./_is-array-iter');\n  var create = require('./_object-create');\n  var getPrototypeOf = require('./_object-gpo');\n  var gOPN = require('./_object-gopn').f;\n  var getIterFn = require('./core.get-iterator-method');\n  var uid = require('./_uid');\n  var wks = require('./_wks');\n  var createArrayMethod = require('./_array-methods');\n  var createArrayIncludes = require('./_array-includes');\n  var speciesConstructor = require('./_species-constructor');\n  var ArrayIterators = require('./es6.array.iterator');\n  var Iterators = require('./_iterators');\n  var $iterDetect = require('./_iter-detect');\n  var setSpecies = require('./_set-species');\n  var arrayFill = require('./_array-fill');\n  var arrayCopyWithin = require('./_array-copy-within');\n  var $DP = require('./_object-dp');\n  var $GOPD = require('./_object-gopd');\n  var dP = $DP.f;\n  var gOPD = $GOPD.f;\n  var RangeError = global.RangeError;\n  var TypeError = global.TypeError;\n  var Uint8Array = global.Uint8Array;\n  var ARRAY_BUFFER = 'ArrayBuffer';\n  var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n  var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n  var PROTOTYPE = 'prototype';\n  var ArrayProto = Array[PROTOTYPE];\n  var $ArrayBuffer = $buffer.ArrayBuffer;\n  var $DataView = $buffer.DataView;\n  var arrayForEach = createArrayMethod(0);\n  var arrayFilter = createArrayMethod(2);\n  var arraySome = createArrayMethod(3);\n  var arrayEvery = createArrayMethod(4);\n  var arrayFind = createArrayMethod(5);\n  var arrayFindIndex = createArrayMethod(6);\n  var arrayIncludes = createArrayIncludes(true);\n  var arrayIndexOf = createArrayIncludes(false);\n  var arrayValues = ArrayIterators.values;\n  var arrayKeys = ArrayIterators.keys;\n  var arrayEntries = ArrayIterators.entries;\n  var arrayLastIndexOf = ArrayProto.lastIndexOf;\n  var arrayReduce = ArrayProto.reduce;\n  var arrayReduceRight = ArrayProto.reduceRight;\n  var arrayJoin = ArrayProto.join;\n  var arraySort = ArrayProto.sort;\n  var arraySlice = ArrayProto.slice;\n  var arrayToString = ArrayProto.toString;\n  var arrayToLocaleString = ArrayProto.toLocaleString;\n  var ITERATOR = wks('iterator');\n  var TAG = wks('toStringTag');\n  var TYPED_CONSTRUCTOR = uid('typed_constructor');\n  var DEF_CONSTRUCTOR = uid('def_constructor');\n  var ALL_CONSTRUCTORS = $typed.CONSTR;\n  var TYPED_ARRAY = $typed.TYPED;\n  var VIEW = $typed.VIEW;\n  var WRONG_LENGTH = 'Wrong length!';\n\n  var $map = createArrayMethod(1, function (O, length) {\n    return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n  });\n\n  var LITTLE_ENDIAN = fails(function () {\n    // eslint-disable-next-line no-undef\n    return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n  });\n\n  var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n    new Uint8Array(1).set({});\n  });\n\n  var toOffset = function (it, BYTES) {\n    var offset = toInteger(it);\n    if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n    return offset;\n  };\n\n  var validate = function (it) {\n    if (isObject(it) && TYPED_ARRAY in it) return it;\n    throw TypeError(it + ' is not a typed array!');\n  };\n\n  var allocate = function (C, length) {\n    if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n      throw TypeError('It is not a typed array constructor!');\n    } return new C(length);\n  };\n\n  var speciesFromList = function (O, list) {\n    return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n  };\n\n  var fromList = function (C, list) {\n    var index = 0;\n    var length = list.length;\n    var result = allocate(C, length);\n    while (length > index) result[index] = list[index++];\n    return result;\n  };\n\n  var addGetter = function (it, key, internal) {\n    dP(it, key, { get: function () { return this._d[internal]; } });\n  };\n\n  var $from = function from(source /* , mapfn, thisArg */) {\n    var O = toObject(source);\n    var aLen = arguments.length;\n    var mapfn = aLen > 1 ? arguments[1] : undefined;\n    var mapping = mapfn !== undefined;\n    var iterFn = getIterFn(O);\n    var i, length, values, result, step, iterator;\n    if (iterFn != undefined && !isArrayIter(iterFn)) {\n      for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n        values.push(step.value);\n      } O = values;\n    }\n    if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n    for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n      result[i] = mapping ? mapfn(O[i], i) : O[i];\n    }\n    return result;\n  };\n\n  var $of = function of(/* ...items */) {\n    var index = 0;\n    var length = arguments.length;\n    var result = allocate(this, length);\n    while (length > index) result[index] = arguments[index++];\n    return result;\n  };\n\n  // iOS Safari 6.x fails here\n  var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n  var $toLocaleString = function toLocaleString() {\n    return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n  };\n\n  var proto = {\n    copyWithin: function copyWithin(target, start /* , end */) {\n      return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n    },\n    every: function every(callbackfn /* , thisArg */) {\n      return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n      return arrayFill.apply(validate(this), arguments);\n    },\n    filter: function filter(callbackfn /* , thisArg */) {\n      return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n        arguments.length > 1 ? arguments[1] : undefined));\n    },\n    find: function find(predicate /* , thisArg */) {\n      return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    findIndex: function findIndex(predicate /* , thisArg */) {\n      return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    forEach: function forEach(callbackfn /* , thisArg */) {\n      arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    indexOf: function indexOf(searchElement /* , fromIndex */) {\n      return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    includes: function includes(searchElement /* , fromIndex */) {\n      return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    join: function join(separator) { // eslint-disable-line no-unused-vars\n      return arrayJoin.apply(validate(this), arguments);\n    },\n    lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n      return arrayLastIndexOf.apply(validate(this), arguments);\n    },\n    map: function map(mapfn /* , thisArg */) {\n      return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n      return arrayReduce.apply(validate(this), arguments);\n    },\n    reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n      return arrayReduceRight.apply(validate(this), arguments);\n    },\n    reverse: function reverse() {\n      var that = this;\n      var length = validate(that).length;\n      var middle = Math.floor(length / 2);\n      var index = 0;\n      var value;\n      while (index < middle) {\n        value = that[index];\n        that[index++] = that[--length];\n        that[length] = value;\n      } return that;\n    },\n    some: function some(callbackfn /* , thisArg */) {\n      return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    sort: function sort(comparefn) {\n      return arraySort.call(validate(this), comparefn);\n    },\n    subarray: function subarray(begin, end) {\n      var O = validate(this);\n      var length = O.length;\n      var $begin = toAbsoluteIndex(begin, length);\n      return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n        O.buffer,\n        O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n        toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n      );\n    }\n  };\n\n  var $slice = function slice(start, end) {\n    return speciesFromList(this, arraySlice.call(validate(this), start, end));\n  };\n\n  var $set = function set(arrayLike /* , offset */) {\n    validate(this);\n    var offset = toOffset(arguments[1], 1);\n    var length = this.length;\n    var src = toObject(arrayLike);\n    var len = toLength(src.length);\n    var index = 0;\n    if (len + offset > length) throw RangeError(WRONG_LENGTH);\n    while (index < len) this[offset + index] = src[index++];\n  };\n\n  var $iterators = {\n    entries: function entries() {\n      return arrayEntries.call(validate(this));\n    },\n    keys: function keys() {\n      return arrayKeys.call(validate(this));\n    },\n    values: function values() {\n      return arrayValues.call(validate(this));\n    }\n  };\n\n  var isTAIndex = function (target, key) {\n    return isObject(target)\n      && target[TYPED_ARRAY]\n      && typeof key != 'symbol'\n      && key in target\n      && String(+key) == String(key);\n  };\n  var $getDesc = function getOwnPropertyDescriptor(target, key) {\n    return isTAIndex(target, key = toPrimitive(key, true))\n      ? propertyDesc(2, target[key])\n      : gOPD(target, key);\n  };\n  var $setDesc = function defineProperty(target, key, desc) {\n    if (isTAIndex(target, key = toPrimitive(key, true))\n      && isObject(desc)\n      && has(desc, 'value')\n      && !has(desc, 'get')\n      && !has(desc, 'set')\n      // TODO: add validation descriptor w/o calling accessors\n      && !desc.configurable\n      && (!has(desc, 'writable') || desc.writable)\n      && (!has(desc, 'enumerable') || desc.enumerable)\n    ) {\n      target[key] = desc.value;\n      return target;\n    } return dP(target, key, desc);\n  };\n\n  if (!ALL_CONSTRUCTORS) {\n    $GOPD.f = $getDesc;\n    $DP.f = $setDesc;\n  }\n\n  $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n    getOwnPropertyDescriptor: $getDesc,\n    defineProperty: $setDesc\n  });\n\n  if (fails(function () { arrayToString.call({}); })) {\n    arrayToString = arrayToLocaleString = function toString() {\n      return arrayJoin.call(this);\n    };\n  }\n\n  var $TypedArrayPrototype$ = redefineAll({}, proto);\n  redefineAll($TypedArrayPrototype$, $iterators);\n  hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n  redefineAll($TypedArrayPrototype$, {\n    slice: $slice,\n    set: $set,\n    constructor: function () { /* noop */ },\n    toString: arrayToString,\n    toLocaleString: $toLocaleString\n  });\n  addGetter($TypedArrayPrototype$, 'buffer', 'b');\n  addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n  addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n  addGetter($TypedArrayPrototype$, 'length', 'e');\n  dP($TypedArrayPrototype$, TAG, {\n    get: function () { return this[TYPED_ARRAY]; }\n  });\n\n  // eslint-disable-next-line max-statements\n  module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n    CLAMPED = !!CLAMPED;\n    var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n    var GETTER = 'get' + KEY;\n    var SETTER = 'set' + KEY;\n    var TypedArray = global[NAME];\n    var Base = TypedArray || {};\n    var TAC = TypedArray && getPrototypeOf(TypedArray);\n    var FORCED = !TypedArray || !$typed.ABV;\n    var O = {};\n    var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n    var getter = function (that, index) {\n      var data = that._d;\n      return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n    };\n    var setter = function (that, index, value) {\n      var data = that._d;\n      if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n      data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n    };\n    var addElement = function (that, index) {\n      dP(that, index, {\n        get: function () {\n          return getter(this, index);\n        },\n        set: function (value) {\n          return setter(this, index, value);\n        },\n        enumerable: true\n      });\n    };\n    if (FORCED) {\n      TypedArray = wrapper(function (that, data, $offset, $length) {\n        anInstance(that, TypedArray, NAME, '_d');\n        var index = 0;\n        var offset = 0;\n        var buffer, byteLength, length, klass;\n        if (!isObject(data)) {\n          length = toIndex(data);\n          byteLength = length * BYTES;\n          buffer = new $ArrayBuffer(byteLength);\n        } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n          buffer = data;\n          offset = toOffset($offset, BYTES);\n          var $len = data.byteLength;\n          if ($length === undefined) {\n            if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n            byteLength = $len - offset;\n            if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n          } else {\n            byteLength = toLength($length) * BYTES;\n            if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n          }\n          length = byteLength / BYTES;\n        } else if (TYPED_ARRAY in data) {\n          return fromList(TypedArray, data);\n        } else {\n          return $from.call(TypedArray, data);\n        }\n        hide(that, '_d', {\n          b: buffer,\n          o: offset,\n          l: byteLength,\n          e: length,\n          v: new $DataView(buffer)\n        });\n        while (index < length) addElement(that, index++);\n      });\n      TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n      hide(TypedArrayPrototype, 'constructor', TypedArray);\n    } else if (!fails(function () {\n      TypedArray(1);\n    }) || !fails(function () {\n      new TypedArray(-1); // eslint-disable-line no-new\n    }) || !$iterDetect(function (iter) {\n      new TypedArray(); // eslint-disable-line no-new\n      new TypedArray(null); // eslint-disable-line no-new\n      new TypedArray(1.5); // eslint-disable-line no-new\n      new TypedArray(iter); // eslint-disable-line no-new\n    }, true)) {\n      TypedArray = wrapper(function (that, data, $offset, $length) {\n        anInstance(that, TypedArray, NAME);\n        var klass;\n        // `ws` module bug, temporarily remove validation length for Uint8Array\n        // https://github.com/websockets/ws/pull/645\n        if (!isObject(data)) return new Base(toIndex(data));\n        if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n          return $length !== undefined\n            ? new Base(data, toOffset($offset, BYTES), $length)\n            : $offset !== undefined\n              ? new Base(data, toOffset($offset, BYTES))\n              : new Base(data);\n        }\n        if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n        return $from.call(TypedArray, data);\n      });\n      arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n        if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n      });\n      TypedArray[PROTOTYPE] = TypedArrayPrototype;\n      if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n    }\n    var $nativeIterator = TypedArrayPrototype[ITERATOR];\n    var CORRECT_ITER_NAME = !!$nativeIterator\n      && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n    var $iterator = $iterators.values;\n    hide(TypedArray, TYPED_CONSTRUCTOR, true);\n    hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n    hide(TypedArrayPrototype, VIEW, true);\n    hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n    if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n      dP(TypedArrayPrototype, TAG, {\n        get: function () { return NAME; }\n      });\n    }\n\n    O[NAME] = TypedArray;\n\n    $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n    $export($export.S, NAME, {\n      BYTES_PER_ELEMENT: BYTES\n    });\n\n    $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n      from: $from,\n      of: $of\n    });\n\n    if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n    $export($export.P, NAME, proto);\n\n    setSpecies(NAME);\n\n    $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n    $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n    if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n    $export($export.P + $export.F * fails(function () {\n      new TypedArray(1).slice();\n    }), NAME, { slice: $slice });\n\n    $export($export.P + $export.F * (fails(function () {\n      return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n    }) || !fails(function () {\n      TypedArrayPrototype.toLocaleString.call([1, 2]);\n    })), NAME, { toLocaleString: $toLocaleString });\n\n    Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n    if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n  };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n  return function Int8Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n  return function Uint8Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n  return function Uint8ClampedArray(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n  return function Int16Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n  return function Uint16Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n  return function Int32Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n  return function Uint32Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n  return function Float32Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n  return function Float64Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n  try {\n    return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n  // 7.4.6 IteratorClose(iterator, completion)\n  } catch (e) {\n    var ret = iterator['return'];\n    if (ret !== undefined) anObject(ret.call(iterator));\n    throw e;\n  }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n  var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n  var f = ctx(fn, that, entries ? 2 : 1);\n  var index = 0;\n  var length, step, iterator, result;\n  if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n  // fast case for arrays with default iterator\n  if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n    result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n    if (result === BREAK || result === RETURN) return result;\n  } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n    result = call(iterator, f, step.value, entries);\n    if (result === BREAK || result === RETURN) return result;\n  }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n  return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n  return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n  setDesc(it, META, { value: {\n    i: 'O' + ++id, // object ID\n    w: {}          // weak collections IDs\n  } });\n};\nvar fastKey = function (it, create) {\n  // return primitive with prefix\n  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return 'F';\n    // not necessary to add metadata\n    if (!create) return 'E';\n    // add missing metadata\n    setMeta(it);\n  // return object ID\n  } return it[META].i;\n};\nvar getWeak = function (it, create) {\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return true;\n    // not necessary to add metadata\n    if (!create) return false;\n    // add missing metadata\n    setMeta(it);\n  // return hash weak collections IDs\n  } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n  if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n  return it;\n};\nvar meta = module.exports = {\n  KEY: META,\n  NEED: false,\n  fastKey: fastKey,\n  getWeak: getWeak,\n  onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n  if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n  return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n  // fast case\n  var index = fastKey(key);\n  var entry;\n  if (index !== 'F') return that._i[index];\n  // frozen object case\n  for (entry = that._f; entry; entry = entry.n) {\n    if (entry.k == key) return entry;\n  }\n};\n\nmodule.exports = {\n  getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n    var C = wrapper(function (that, iterable) {\n      anInstance(that, C, NAME, '_i');\n      that._t = NAME;         // collection type\n      that._i = create(null); // index\n      that._f = undefined;    // first entry\n      that._l = undefined;    // last entry\n      that[SIZE] = 0;         // size\n      if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n    });\n    redefineAll(C.prototype, {\n      // 23.1.3.1 Map.prototype.clear()\n      // 23.2.3.2 Set.prototype.clear()\n      clear: function clear() {\n        for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n          entry.r = true;\n          if (entry.p) entry.p = entry.p.n = undefined;\n          delete data[entry.i];\n        }\n        that._f = that._l = undefined;\n        that[SIZE] = 0;\n      },\n      // 23.1.3.3 Map.prototype.delete(key)\n      // 23.2.3.4 Set.prototype.delete(value)\n      'delete': function (key) {\n        var that = validate(this, NAME);\n        var entry = getEntry(that, key);\n        if (entry) {\n          var next = entry.n;\n          var prev = entry.p;\n          delete that._i[entry.i];\n          entry.r = true;\n          if (prev) prev.n = next;\n          if (next) next.p = prev;\n          if (that._f == entry) that._f = next;\n          if (that._l == entry) that._l = prev;\n          that[SIZE]--;\n        } return !!entry;\n      },\n      // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n      // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n      forEach: function forEach(callbackfn /* , that = undefined */) {\n        validate(this, NAME);\n        var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n        var entry;\n        while (entry = entry ? entry.n : this._f) {\n          f(entry.v, entry.k, this);\n          // revert to the last existing entry\n          while (entry && entry.r) entry = entry.p;\n        }\n      },\n      // 23.1.3.7 Map.prototype.has(key)\n      // 23.2.3.7 Set.prototype.has(value)\n      has: function has(key) {\n        return !!getEntry(validate(this, NAME), key);\n      }\n    });\n    if (DESCRIPTORS) dP(C.prototype, 'size', {\n      get: function () {\n        return validate(this, NAME)[SIZE];\n      }\n    });\n    return C;\n  },\n  def: function (that, key, value) {\n    var entry = getEntry(that, key);\n    var prev, index;\n    // change existing entry\n    if (entry) {\n      entry.v = value;\n    // create new entry\n    } else {\n      that._l = entry = {\n        i: index = fastKey(key, true), // <- index\n        k: key,                        // <- key\n        v: value,                      // <- value\n        p: prev = that._l,             // <- previous entry\n        n: undefined,                  // <- next entry\n        r: false                       // <- removed\n      };\n      if (!that._f) that._f = entry;\n      if (prev) prev.n = entry;\n      that[SIZE]++;\n      // add to index\n      if (index !== 'F') that._i[index] = entry;\n    } return that;\n  },\n  getEntry: getEntry,\n  setStrong: function (C, NAME, IS_MAP) {\n    // add .keys, .values, .entries, [@@iterator]\n    // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n    $iterDefine(C, NAME, function (iterated, kind) {\n      this._t = validate(iterated, NAME); // target\n      this._k = kind;                     // kind\n      this._l = undefined;                // previous\n    }, function () {\n      var that = this;\n      var kind = that._k;\n      var entry = that._l;\n      // revert to the last existing entry\n      while (entry && entry.r) entry = entry.p;\n      // get next entry\n      if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n        // or finish the iteration\n        that._t = undefined;\n        return step(1);\n      }\n      // return step by kind\n      if (kind == 'keys') return step(0, entry.k);\n      if (kind == 'values') return step(0, entry.v);\n      return step(0, [entry.k, entry.v]);\n    }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n    // add [@@species], 23.1.2.2, 23.2.2.2\n    setSpecies(NAME);\n  }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n  anObject(O);\n  if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n    function (test, buggy, set) {\n      try {\n        set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n        set(test, []);\n        buggy = !(test instanceof Array);\n      } catch (e) { buggy = true; }\n      return function setPrototypeOf(O, proto) {\n        check(O, proto);\n        if (buggy) O.__proto__ = proto;\n        else set(O, proto);\n        return O;\n      };\n    }({}, false) : undefined),\n  check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n  var S = target.constructor;\n  var P;\n  if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n    setPrototypeOf(that, P);\n  } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n  var Base = global[NAME];\n  var C = Base;\n  var ADDER = IS_MAP ? 'set' : 'add';\n  var proto = C && C.prototype;\n  var O = {};\n  var fixMethod = function (KEY) {\n    var fn = proto[KEY];\n    redefine(proto, KEY,\n      KEY == 'delete' ? function (a) {\n        return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'has' ? function has(a) {\n        return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'get' ? function get(a) {\n        return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n        : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n    );\n  };\n  if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n    new C().entries().next();\n  }))) {\n    // create collection constructor\n    C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n    redefineAll(C.prototype, methods);\n    meta.NEED = true;\n  } else {\n    var instance = new C();\n    // early implementations not supports chaining\n    var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n    // V8 ~  Chromium 40- weak-collections throws on primitives, but should return false\n    var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n    // most early implementations doesn't supports iterables, most modern - not close it correctly\n    var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n    // for early implementations -0 and +0 not the same\n    var BUGGY_ZERO = !IS_WEAK && fails(function () {\n      // V8 ~ Chromium 42- fails only with 5+ elements\n      var $instance = new C();\n      var index = 5;\n      while (index--) $instance[ADDER](index, index);\n      return !$instance.has(-0);\n    });\n    if (!ACCEPT_ITERABLES) {\n      C = wrapper(function (target, iterable) {\n        anInstance(target, C, NAME);\n        var that = inheritIfRequired(new Base(), target, C);\n        if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n        return that;\n      });\n      C.prototype = proto;\n      proto.constructor = C;\n    }\n    if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n      fixMethod('delete');\n      fixMethod('has');\n      IS_MAP && fixMethod('get');\n    }\n    if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n    // weak collections should not contains .clear method\n    if (IS_WEAK && proto.clear) delete proto.clear;\n  }\n\n  setToStringTag(C, NAME);\n\n  O[NAME] = C;\n  $export($export.G + $export.W + $export.F * (C != Base), O);\n\n  if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n  return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n  return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n  // 23.1.3.6 Map.prototype.get(key)\n  get: function get(key) {\n    var entry = strong.getEntry(validate(this, MAP), key);\n    return entry && entry.v;\n  },\n  // 23.1.3.9 Map.prototype.set(key, value)\n  set: function set(key, value) {\n    return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n  }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n  return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n  // 23.2.3.1 Set.prototype.add(value)\n  add: function add(value) {\n    return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n  }\n}, strong);\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var S = Symbol();\n  var K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function (k) { B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var aLen = arguments.length;\n  var index = 1;\n  var getSymbols = gOPS.f;\n  var isEnum = pIE.f;\n  while (aLen > index) {\n    var S = IObject(arguments[index++]);\n    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n  } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n  return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n  this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n  return arrayFind(store.a, function (it) {\n    return it[0] === key;\n  });\n};\nUncaughtFrozenStore.prototype = {\n  get: function (key) {\n    var entry = findUncaughtFrozen(this, key);\n    if (entry) return entry[1];\n  },\n  has: function (key) {\n    return !!findUncaughtFrozen(this, key);\n  },\n  set: function (key, value) {\n    var entry = findUncaughtFrozen(this, key);\n    if (entry) entry[1] = value;\n    else this.a.push([key, value]);\n  },\n  'delete': function (key) {\n    var index = arrayFindIndex(this.a, function (it) {\n      return it[0] === key;\n    });\n    if (~index) this.a.splice(index, 1);\n    return !!~index;\n  }\n};\n\nmodule.exports = {\n  getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n    var C = wrapper(function (that, iterable) {\n      anInstance(that, C, NAME, '_i');\n      that._t = NAME;      // collection type\n      that._i = id++;      // collection id\n      that._l = undefined; // leak store for uncaught frozen objects\n      if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n    });\n    redefineAll(C.prototype, {\n      // 23.3.3.2 WeakMap.prototype.delete(key)\n      // 23.4.3.3 WeakSet.prototype.delete(value)\n      'delete': function (key) {\n        if (!isObject(key)) return false;\n        var data = getWeak(key);\n        if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n        return data && $has(data, this._i) && delete data[this._i];\n      },\n      // 23.3.3.4 WeakMap.prototype.has(key)\n      // 23.4.3.4 WeakSet.prototype.has(value)\n      has: function has(key) {\n        if (!isObject(key)) return false;\n        var data = getWeak(key);\n        if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n        return data && $has(data, this._i);\n      }\n    });\n    return C;\n  },\n  def: function (that, key, value) {\n    var data = getWeak(anObject(key), true);\n    if (data === true) uncaughtFrozenStore(that).set(key, value);\n    else data[that._i] = value;\n    return that;\n  },\n  ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n  return function WeakMap() {\n    return get(this, arguments.length > 0 ? arguments[0] : undefined);\n  };\n};\n\nvar methods = {\n  // 23.3.3.3 WeakMap.prototype.get(key)\n  get: function get(key) {\n    if (isObject(key)) {\n      var data = getWeak(key);\n      if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n      return data ? data[this._i] : undefined;\n    }\n  },\n  // 23.3.3.5 WeakMap.prototype.set(key, value)\n  set: function set(key, value) {\n    return weak.def(validate(this, WEAK_MAP), key, value);\n  }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n  InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n  assign(InternalMap.prototype, methods);\n  meta.NEED = true;\n  each(['delete', 'has', 'get', 'set'], function (key) {\n    var proto = $WeakMap.prototype;\n    var method = proto[key];\n    redefine(proto, key, function (a, b) {\n      // store frozen objects on internal weakmap shim\n      if (isObject(a) && !isExtensible(a)) {\n        if (!this._f) this._f = new InternalMap();\n        var result = this._f[key](a, b);\n        return key == 'set' ? this : result;\n      // store all the rest on native weakmap\n      } return method.call(this, a, b);\n    });\n  });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n  return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n  // 23.4.3.1 WeakSet.prototype.add(value)\n  add: function add(value) {\n    return weak.def(validate(this, WEAK_SET), value, true);\n  }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n  rApply(function () { /* empty */ });\n}), 'Reflect', {\n  apply: function apply(target, thisArgument, argumentsList) {\n    var T = aFunction(target);\n    var L = anObject(argumentsList);\n    return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n  }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n  var un = that === undefined;\n  switch (args.length) {\n    case 0: return un ? fn()\n                      : fn.call(that);\n    case 1: return un ? fn(args[0])\n                      : fn.call(that, args[0]);\n    case 2: return un ? fn(args[0], args[1])\n                      : fn.call(that, args[0], args[1]);\n    case 3: return un ? fn(args[0], args[1], args[2])\n                      : fn.call(that, args[0], args[1], args[2]);\n    case 4: return un ? fn(args[0], args[1], args[2], args[3])\n                      : fn.call(that, args[0], args[1], args[2], args[3]);\n  } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n  if (!(len in factories)) {\n    for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n    // eslint-disable-next-line no-new-func\n    factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n  } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n  var fn = aFunction(this);\n  var partArgs = arraySlice.call(arguments, 1);\n  var bound = function (/* args... */) {\n    var args = partArgs.concat(arraySlice.call(arguments));\n    return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n  };\n  if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n  return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n  function F() { /* empty */ }\n  return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n  rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n  construct: function construct(Target, args /* , newTarget */) {\n    aFunction(Target);\n    anObject(args);\n    var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n    if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n    if (Target == newTarget) {\n      // w/o altered newTarget, optimization for 0-4 arguments\n      switch (args.length) {\n        case 0: return new Target();\n        case 1: return new Target(args[0]);\n        case 2: return new Target(args[0], args[1]);\n        case 3: return new Target(args[0], args[1], args[2]);\n        case 4: return new Target(args[0], args[1], args[2], args[3]);\n      }\n      // w/o altered newTarget, lot of arguments case\n      var $args = [null];\n      $args.push.apply($args, args);\n      return new (bind.apply(Target, $args))();\n    }\n    // with altered newTarget, not support built-in constructors\n    var proto = newTarget.prototype;\n    var instance = create(isObject(proto) ? proto : Object.prototype);\n    var result = Function.apply.call(Target, instance, args);\n    return isObject(result) ? result : instance;\n  }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n  // eslint-disable-next-line no-undef\n  Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n  defineProperty: function defineProperty(target, propertyKey, attributes) {\n    anObject(target);\n    propertyKey = toPrimitive(propertyKey, true);\n    anObject(attributes);\n    try {\n      dP.f(target, propertyKey, attributes);\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n  deleteProperty: function deleteProperty(target, propertyKey) {\n    var desc = gOPD(anObject(target), propertyKey);\n    return desc && !desc.configurable ? false : delete target[propertyKey];\n  }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n  var receiver = arguments.length < 3 ? target : arguments[2];\n  var desc, proto;\n  if (anObject(target) === receiver) return target[propertyKey];\n  if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n    ? desc.value\n    : desc.get !== undefined\n      ? desc.get.call(receiver)\n      : undefined;\n  if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n  getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n    return gOPD.f(anObject(target), propertyKey);\n  }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n  getPrototypeOf: function getPrototypeOf(target) {\n    return getProto(anObject(target));\n  }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n  has: function has(target, propertyKey) {\n    return propertyKey in target;\n  }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n  isExtensible: function isExtensible(target) {\n    anObject(target);\n    return $isExtensible ? $isExtensible(target) : true;\n  }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n  var keys = gOPN.f(anObject(it));\n  var getSymbols = gOPS.f;\n  return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n  preventExtensions: function preventExtensions(target) {\n    anObject(target);\n    try {\n      if ($preventExtensions) $preventExtensions(target);\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n  var receiver = arguments.length < 4 ? target : arguments[3];\n  var ownDesc = gOPD.f(anObject(target), propertyKey);\n  var existingDescriptor, proto;\n  if (!ownDesc) {\n    if (isObject(proto = getPrototypeOf(target))) {\n      return set(proto, propertyKey, V, receiver);\n    }\n    ownDesc = createDesc(0);\n  }\n  if (has(ownDesc, 'value')) {\n    if (ownDesc.writable === false || !isObject(receiver)) return false;\n    if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n      if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n      existingDescriptor.value = V;\n      dP.f(receiver, propertyKey, existingDescriptor);\n    } else dP.f(receiver, propertyKey, createDesc(0, V));\n    return true;\n  }\n  return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n  setPrototypeOf: function setPrototypeOf(target, proto) {\n    setProto.check(target, proto);\n    try {\n      setProto.set(target, proto);\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n  var id = +this;\n  // eslint-disable-next-line no-prototype-builtins\n  if (queue.hasOwnProperty(id)) {\n    var fn = queue[id];\n    delete queue[id];\n    fn();\n  }\n};\nvar listener = function (event) {\n  run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n  setTask = function setImmediate(fn) {\n    var args = [];\n    var i = 1;\n    while (arguments.length > i) args.push(arguments[i++]);\n    queue[++counter] = function () {\n      // eslint-disable-next-line no-new-func\n      invoke(typeof fn == 'function' ? fn : Function(fn), args);\n    };\n    defer(counter);\n    return counter;\n  };\n  clearTask = function clearImmediate(id) {\n    delete queue[id];\n  };\n  // Node.js 0.8-\n  if (require('./_cof')(process) == 'process') {\n    defer = function (id) {\n      process.nextTick(ctx(run, id, 1));\n    };\n  // Sphere (JS game engine) Dispatch API\n  } else if (Dispatch && Dispatch.now) {\n    defer = function (id) {\n      Dispatch.now(ctx(run, id, 1));\n    };\n  // Browsers with MessageChannel, includes WebWorkers\n  } else if (MessageChannel) {\n    channel = new MessageChannel();\n    port = channel.port2;\n    channel.port1.onmessage = listener;\n    defer = ctx(port.postMessage, port, 1);\n  // Browsers with postMessage, skip WebWorkers\n  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n  } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n    defer = function (id) {\n      global.postMessage(id + '', '*');\n    };\n    global.addEventListener('message', listener, false);\n  // IE8-\n  } else if (ONREADYSTATECHANGE in cel('script')) {\n    defer = function (id) {\n      html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n        html.removeChild(this);\n        run.call(id);\n      };\n    };\n  // Rest old browsers\n  } else {\n    defer = function (id) {\n      setTimeout(ctx(run, id, 1), 0);\n    };\n  }\n}\nmodule.exports = {\n  set: setTask,\n  clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n  var head, last, notify;\n\n  var flush = function () {\n    var parent, fn;\n    if (isNode && (parent = process.domain)) parent.exit();\n    while (head) {\n      fn = head.fn;\n      head = head.next;\n      try {\n        fn();\n      } catch (e) {\n        if (head) notify();\n        else last = undefined;\n        throw e;\n      }\n    } last = undefined;\n    if (parent) parent.enter();\n  };\n\n  // Node.js\n  if (isNode) {\n    notify = function () {\n      process.nextTick(flush);\n    };\n  // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n  } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n    var toggle = true;\n    var node = document.createTextNode('');\n    new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n    notify = function () {\n      node.data = toggle = !toggle;\n    };\n  // environments with maybe non-completely correct, but existent Promise\n  } else if (Promise && Promise.resolve) {\n    var promise = Promise.resolve();\n    notify = function () {\n      promise.then(flush);\n    };\n  // for other environments - macrotask based on:\n  // - setImmediate\n  // - MessageChannel\n  // - window.postMessag\n  // - onreadystatechange\n  // - setTimeout\n  } else {\n    notify = function () {\n      // strange IE + webpack dev server bug - use .call(global)\n      macrotask.call(global, flush);\n    };\n  }\n\n  return function (fn) {\n    var task = { fn: fn, next: undefined };\n    if (last) last.next = task;\n    if (!head) {\n      head = task;\n      notify();\n    } last = task;\n  };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n  var resolve, reject;\n  this.promise = new C(function ($$resolve, $$reject) {\n    if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n    resolve = $$resolve;\n    reject = $$reject;\n  });\n  this.resolve = aFunction(resolve);\n  this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n  return new PromiseCapability(C);\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n  try {\n    // correct subclassing with @@species support\n    var promise = $Promise.resolve(1);\n    var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n      exec(empty, empty);\n    };\n    // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n    return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n  } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n  var then;\n  return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n  if (promise._n) return;\n  promise._n = true;\n  var chain = promise._c;\n  microtask(function () {\n    var value = promise._v;\n    var ok = promise._s == 1;\n    var i = 0;\n    var run = function (reaction) {\n      var handler = ok ? reaction.ok : reaction.fail;\n      var resolve = reaction.resolve;\n      var reject = reaction.reject;\n      var domain = reaction.domain;\n      var result, then, exited;\n      try {\n        if (handler) {\n          if (!ok) {\n            if (promise._h == 2) onHandleUnhandled(promise);\n            promise._h = 1;\n          }\n          if (handler === true) result = value;\n          else {\n            if (domain) domain.enter();\n            result = handler(value); // may throw\n            if (domain) {\n              domain.exit();\n              exited = true;\n            }\n          }\n          if (result === reaction.promise) {\n            reject(TypeError('Promise-chain cycle'));\n          } else if (then = isThenable(result)) {\n            then.call(result, resolve, reject);\n          } else resolve(result);\n        } else reject(value);\n      } catch (e) {\n        if (domain && !exited) domain.exit();\n        reject(e);\n      }\n    };\n    while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n    promise._c = [];\n    promise._n = false;\n    if (isReject && !promise._h) onUnhandled(promise);\n  });\n};\nvar onUnhandled = function (promise) {\n  task.call(global, function () {\n    var value = promise._v;\n    var unhandled = isUnhandled(promise);\n    var result, handler, console;\n    if (unhandled) {\n      result = perform(function () {\n        if (isNode) {\n          process.emit('unhandledRejection', value, promise);\n        } else if (handler = global.onunhandledrejection) {\n          handler({ promise: promise, reason: value });\n        } else if ((console = global.console) && console.error) {\n          console.error('Unhandled promise rejection', value);\n        }\n      });\n      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n      promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n    } promise._a = undefined;\n    if (unhandled && result.e) throw result.v;\n  });\n};\nvar isUnhandled = function (promise) {\n  return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n  task.call(global, function () {\n    var handler;\n    if (isNode) {\n      process.emit('rejectionHandled', promise);\n    } else if (handler = global.onrejectionhandled) {\n      handler({ promise: promise, reason: promise._v });\n    }\n  });\n};\nvar $reject = function (value) {\n  var promise = this;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  promise._v = value;\n  promise._s = 2;\n  if (!promise._a) promise._a = promise._c.slice();\n  notify(promise, true);\n};\nvar $resolve = function (value) {\n  var promise = this;\n  var then;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  try {\n    if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n    if (then = isThenable(value)) {\n      microtask(function () {\n        var wrapper = { _w: promise, _d: false }; // wrap\n        try {\n          then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n        } catch (e) {\n          $reject.call(wrapper, e);\n        }\n      });\n    } else {\n      promise._v = value;\n      promise._s = 1;\n      notify(promise, false);\n    }\n  } catch (e) {\n    $reject.call({ _w: promise, _d: false }, e); // wrap\n  }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n  // 25.4.3.1 Promise(executor)\n  $Promise = function Promise(executor) {\n    anInstance(this, $Promise, PROMISE, '_h');\n    aFunction(executor);\n    Internal.call(this);\n    try {\n      executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n    } catch (err) {\n      $reject.call(this, err);\n    }\n  };\n  // eslint-disable-next-line no-unused-vars\n  Internal = function Promise(executor) {\n    this._c = [];             // <- awaiting reactions\n    this._a = undefined;      // <- checked in isUnhandled reactions\n    this._s = 0;              // <- state\n    this._d = false;          // <- done\n    this._v = undefined;      // <- value\n    this._h = 0;              // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n    this._n = false;          // <- notify\n  };\n  Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n    // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n    then: function then(onFulfilled, onRejected) {\n      var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n      reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n      reaction.fail = typeof onRejected == 'function' && onRejected;\n      reaction.domain = isNode ? process.domain : undefined;\n      this._c.push(reaction);\n      if (this._a) this._a.push(reaction);\n      if (this._s) notify(this, false);\n      return reaction.promise;\n    },\n    // 25.4.5.1 Promise.prototype.catch(onRejected)\n    'catch': function (onRejected) {\n      return this.then(undefined, onRejected);\n    }\n  });\n  OwnPromiseCapability = function () {\n    var promise = new Internal();\n    this.promise = promise;\n    this.resolve = ctx($resolve, promise, 1);\n    this.reject = ctx($reject, promise, 1);\n  };\n  newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n    return C === $Promise || C === Wrapper\n      ? new OwnPromiseCapability(C)\n      : newGenericPromiseCapability(C);\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n  // 25.4.4.5 Promise.reject(r)\n  reject: function reject(r) {\n    var capability = newPromiseCapability(this);\n    var $$reject = capability.reject;\n    $$reject(r);\n    return capability.promise;\n  }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n  // 25.4.4.6 Promise.resolve(x)\n  resolve: function resolve(x) {\n    return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n  }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n  $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n  // 25.4.4.1 Promise.all(iterable)\n  all: function all(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var resolve = capability.resolve;\n    var reject = capability.reject;\n    var result = perform(function () {\n      var values = [];\n      var index = 0;\n      var remaining = 1;\n      forOf(iterable, false, function (promise) {\n        var $index = index++;\n        var alreadyCalled = false;\n        values.push(undefined);\n        remaining++;\n        C.resolve(promise).then(function (value) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[$index] = value;\n          --remaining || resolve(values);\n        }, reject);\n      });\n      --remaining || resolve(values);\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  },\n  // 25.4.4.4 Promise.race(iterable)\n  race: function race(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var reject = capability.reject;\n    var result = perform(function () {\n      forOf(iterable, false, function (promise) {\n        C.resolve(promise).then(capability.resolve, reject);\n      });\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  }\n});\n","module.exports = function (exec) {\n  try {\n    return { e: false, v: exec() };\n  } catch (e) {\n    return { e: true, v: e };\n  }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n  anObject(C);\n  if (isObject(x) && x.constructor === C) return x;\n  var promiseCapability = newPromiseCapability.f(C);\n  var resolve = promiseCapability.resolve;\n  resolve(x);\n  return promiseCapability.promise;\n};\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n  if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n  var result = getKeys(it);\n  var getSymbols = gOPS.f;\n  if (getSymbols) {\n    var symbols = getSymbols(it);\n    var isEnum = pIE.f;\n    var i = 0;\n    var key;\n    while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n  } return result;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n  ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n  try {\n    return gOPN(it);\n  } catch (e) {\n    return windowNames.slice();\n  }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n  return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n  return _create(dP({}, 'a', {\n    get: function () { return dP(this, 'a', { value: 7 }).a; }\n  })).a != 7;\n}) ? function (it, key, D) {\n  var protoDesc = gOPD(ObjectProto, key);\n  if (protoDesc) delete ObjectProto[key];\n  dP(it, key, D);\n  if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n  sym._k = tag;\n  return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n  if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n  anObject(it);\n  key = toPrimitive(key, true);\n  anObject(D);\n  if (has(AllSymbols, key)) {\n    if (!D.enumerable) {\n      if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n      it[HIDDEN][key] = true;\n    } else {\n      if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n      D = _create(D, { enumerable: createDesc(0, false) });\n    } return setSymbolDesc(it, key, D);\n  } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n  anObject(it);\n  var keys = enumKeys(P = toIObject(P));\n  var i = 0;\n  var l = keys.length;\n  var key;\n  while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n  return it;\n};\nvar $create = function create(it, P) {\n  return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n  var E = isEnum.call(this, key = toPrimitive(key, true));\n  if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n  it = toIObject(it);\n  key = toPrimitive(key, true);\n  if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n  var D = gOPD(it, key);\n  if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n  return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n  var names = gOPN(toIObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n  } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n  var IS_OP = it === ObjectProto;\n  var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n  } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n  $Symbol = function Symbol() {\n    if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n    var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n    var $set = function (value) {\n      if (this === ObjectProto) $set.call(OPSymbols, value);\n      if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n      setSymbolDesc(this, tag, createDesc(1, value));\n    };\n    if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n    return wrap(tag);\n  };\n  redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n    return this._k;\n  });\n\n  $GOPD.f = $getOwnPropertyDescriptor;\n  $DP.f = $defineProperty;\n  require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n  require('./_object-pie').f = $propertyIsEnumerable;\n  require('./_object-gops').f = $getOwnPropertySymbols;\n\n  if (DESCRIPTORS && !require('./_library')) {\n    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n  }\n\n  wksExt.f = function (name) {\n    return wrap(wks(name));\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n  // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n  // 19.4.2.1 Symbol.for(key)\n  'for': function (key) {\n    return has(SymbolRegistry, key += '')\n      ? SymbolRegistry[key]\n      : SymbolRegistry[key] = $Symbol(key);\n  },\n  // 19.4.2.5 Symbol.keyFor(sym)\n  keyFor: function keyFor(sym) {\n    if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n    for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n  },\n  useSetter: function () { setter = true; },\n  useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n  // 19.1.2.2 Object.create(O [, Properties])\n  create: $create,\n  // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n  defineProperty: $defineProperty,\n  // 19.1.2.3 Object.defineProperties(O, Properties)\n  defineProperties: $defineProperties,\n  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n  // 19.1.2.7 Object.getOwnPropertyNames(O)\n  getOwnPropertyNames: $getOwnPropertyNames,\n  // 19.1.2.8 Object.getOwnPropertySymbols(O)\n  getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n  var S = $Symbol();\n  // MS Edge converts symbol values to JSON as {}\n  // WebKit converts symbol values to JSON as null\n  // V8 throws on boxed symbols\n  return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n  stringify: function stringify(it) {\n    var args = [it];\n    var i = 1;\n    var replacer, $replacer;\n    while (arguments.length > i) args.push(arguments[i++]);\n    $replacer = replacer = args[1];\n    if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n    if (!isArray(replacer)) replacer = function (key, value) {\n      if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n      if (!isSymbol(value)) return value;\n    };\n    args[1] = replacer;\n    return _stringify.apply($JSON, args);\n  }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n  var fn = (core.Object || {})[KEY] || Object[KEY];\n  var exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n  return function freeze(it) {\n    return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n  };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n  return function seal(it) {\n    return $seal && isObject(it) ? $seal(meta(it)) : it;\n  };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n  return function preventExtensions(it) {\n    return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n  };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n  return function isFrozen(it) {\n    return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n  };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n  return function isSealed(it) {\n    return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n  };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n  return function isExtensible(it) {\n    return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n  };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n  return function getOwnPropertyDescriptor(it, key) {\n    return $getOwnPropertyDescriptor(toIObject(it), key);\n  };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n  return function getPrototypeOf(it) {\n    return $getPrototypeOf(toObject(it));\n  };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n  return function keys(it) {\n    return $keys(toObject(it));\n  };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n  return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n  // eslint-disable-next-line no-self-compare\n  return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n  configurable: true,\n  get: function () {\n    try {\n      return ('' + this).match(nameRE)[1];\n    } catch (e) {\n      return '';\n    }\n  }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n  // 21.1.2.4 String.raw(callSite, ...substitutions)\n  raw: function raw(callSite) {\n    var tpl = toIObject(callSite.raw);\n    var len = toLength(tpl.length);\n    var aLen = arguments.length;\n    var res = [];\n    var i = 0;\n    while (len > i) {\n      res.push(String(tpl[i++]));\n      if (i < aLen) res.push(String(arguments[i]));\n    } return res.join('');\n  }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n  // 21.1.2.2 String.fromCodePoint(...codePoints)\n  fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n    var res = [];\n    var aLen = arguments.length;\n    var i = 0;\n    var code;\n    while (aLen > i) {\n      code = +arguments[i++];\n      if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n      res.push(code < 0x10000\n        ? fromCharCode(code)\n        : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n      );\n    } return res.join('');\n  }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n  return function (that, pos) {\n    var s = String(defined(that));\n    var i = toInteger(pos);\n    var l = s.length;\n    var a, b;\n    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n  // 21.1.3.3 String.prototype.codePointAt(pos)\n  codePointAt: function codePointAt(pos) {\n    return $at(this, pos);\n  }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n  var str = String(defined(this));\n  var res = '';\n  var n = toInteger(count);\n  if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n  for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n  return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n  // 21.1.3.13 String.prototype.repeat(count)\n  repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n  var isRegExp;\n  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n  if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n  return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n  var re = /./;\n  try {\n    '/./'[KEY](re);\n  } catch (e) {\n    try {\n      re[MATCH] = false;\n      return !'/./'[KEY](re);\n    } catch (f) { /* empty */ }\n  } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n  startsWith: function startsWith(searchString /* , position = 0 */) {\n    var that = context(this, searchString, STARTS_WITH);\n    var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n    var search = String(searchString);\n    return $startsWith\n      ? $startsWith.call(that, search, index)\n      : that.slice(index, index + search.length) === search;\n  }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n  endsWith: function endsWith(searchString /* , endPosition = @length */) {\n    var that = context(this, searchString, ENDS_WITH);\n    var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n    var len = toLength(that.length);\n    var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n    var search = String(searchString);\n    return $endsWith\n      ? $endsWith.call(that, search, end)\n      : that.slice(end - search.length, end) === search;\n  }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n  includes: function includes(searchString /* , position = 0 */) {\n    return !!~context(this, searchString, INCLUDES)\n      .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n  var that = anObject(this);\n  var result = '';\n  if (that.global) result += 'g';\n  if (that.ignoreCase) result += 'i';\n  if (that.multiline) result += 'm';\n  if (that.unicode) result += 'u';\n  if (that.sticky) result += 'y';\n  return result;\n};\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n  configurable: true,\n  get: require('./_flags')\n});\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n  var SYMBOL = wks(KEY);\n  var fns = exec(defined, SYMBOL, ''[KEY]);\n  var strfn = fns[0];\n  var rxfn = fns[1];\n  if (fails(function () {\n    var O = {};\n    O[SYMBOL] = function () { return 7; };\n    return ''[KEY](O) != 7;\n  })) {\n    redefine(String.prototype, KEY, strfn);\n    hide(RegExp.prototype, SYMBOL, length == 2\n      // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n      // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n      ? function (string, arg) { return rxfn.call(string, this, arg); }\n      // 21.2.5.6 RegExp.prototype[@@match](string)\n      // 21.2.5.9 RegExp.prototype[@@search](string)\n      : function (string) { return rxfn.call(string, this); }\n    );\n  }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n  // 21.1.3.11 String.prototype.match(regexp)\n  return [function match(regexp) {\n    'use strict';\n    var O = defined(this);\n    var fn = regexp == undefined ? undefined : regexp[MATCH];\n    return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n  }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n  // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n  return [function replace(searchValue, replaceValue) {\n    'use strict';\n    var O = defined(this);\n    var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n    return fn !== undefined\n      ? fn.call(searchValue, O, replaceValue)\n      : $replace.call(String(O), searchValue, replaceValue);\n  }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n  'use strict';\n  var isRegExp = require('./_is-regexp');\n  var _split = $split;\n  var $push = [].push;\n  var $SPLIT = 'split';\n  var LENGTH = 'length';\n  var LAST_INDEX = 'lastIndex';\n  if (\n    'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n    'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n    'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n    '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n    '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n    ''[$SPLIT](/.?/)[LENGTH]\n  ) {\n    var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n    // based on es5-shim implementation, need to rework it\n    $split = function (separator, limit) {\n      var string = String(this);\n      if (separator === undefined && limit === 0) return [];\n      // If `separator` is not a regex, use native split\n      if (!isRegExp(separator)) return _split.call(string, separator, limit);\n      var output = [];\n      var flags = (separator.ignoreCase ? 'i' : '') +\n                  (separator.multiline ? 'm' : '') +\n                  (separator.unicode ? 'u' : '') +\n                  (separator.sticky ? 'y' : '');\n      var lastLastIndex = 0;\n      var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n      // Make `global` and avoid `lastIndex` issues by working with a copy\n      var separatorCopy = new RegExp(separator.source, flags + 'g');\n      var separator2, match, lastIndex, lastLength, i;\n      // Doesn't need flags gy, but they don't hurt\n      if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n      while (match = separatorCopy.exec(string)) {\n        // `separatorCopy.lastIndex` is not reliable cross-browser\n        lastIndex = match.index + match[0][LENGTH];\n        if (lastIndex > lastLastIndex) {\n          output.push(string.slice(lastLastIndex, match.index));\n          // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n          // eslint-disable-next-line no-loop-func\n          if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n            for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n          });\n          if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n          lastLength = match[0][LENGTH];\n          lastLastIndex = lastIndex;\n          if (output[LENGTH] >= splitLimit) break;\n        }\n        if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n      }\n      if (lastLastIndex === string[LENGTH]) {\n        if (lastLength || !separatorCopy.test('')) output.push('');\n      } else output.push(string.slice(lastLastIndex));\n      return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n    };\n  // Chakra, V8\n  } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n    $split = function (separator, limit) {\n      return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n    };\n  }\n  // 21.1.3.17 String.prototype.split(separator, limit)\n  return [function split(separator, limit) {\n    var O = defined(this);\n    var fn = separator == undefined ? undefined : separator[SPLIT];\n    return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n  }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n  // 21.1.3.15 String.prototype.search(regexp)\n  return [function search(regexp) {\n    'use strict';\n    var O = defined(this);\n    var fn = regexp == undefined ? undefined : regexp[SEARCH];\n    return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n  }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n  if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n  else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n  // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n  from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n    var O = toObject(arrayLike);\n    var C = typeof this == 'function' ? this : Array;\n    var aLen = arguments.length;\n    var mapfn = aLen > 1 ? arguments[1] : undefined;\n    var mapping = mapfn !== undefined;\n    var index = 0;\n    var iterFn = getIterFn(O);\n    var length, result, step, iterator;\n    if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n    // if object isn't iterable or it's array with default iterator - use simple case\n    if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n      for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n        createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n      }\n    } else {\n      length = toLength(O.length);\n      for (result = new C(length); length > index; index++) {\n        createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n      }\n    }\n    result.length = index;\n    return result;\n  }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n  function F() { /* empty */ }\n  return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n  // 22.1.2.3 Array.of( ...items)\n  of: function of(/* ...args */) {\n    var index = 0;\n    var aLen = arguments.length;\n    var result = new (typeof this == 'function' ? this : Array)(aLen);\n    while (aLen > index) createProperty(result, index, arguments[index++]);\n    result.length = aLen;\n    return result;\n  }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n  find: function find(callbackfn /* , that = undefined */) {\n    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n  findIndex: function findIndex(callbackfn /* , that = undefined */) {\n    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n  isFinite: function isFinite(it) {\n    return typeof it == 'number' && _isFinite(it);\n  }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n  return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n  isSafeInteger: function isSafeInteger(number) {\n    return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n  }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n  isNaN: function isNaN(number) {\n    // eslint-disable-next-line no-self-compare\n    return number != number;\n  }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n  return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n  // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n  && Math.floor($acosh(Number.MAX_VALUE)) == 710\n  // Tor Browser bug: Math.acosh(Infinity) -> NaN\n  && $acosh(Infinity) == Infinity\n), 'Math', {\n  acosh: function acosh(x) {\n    return (x = +x) < 1 ? NaN : x > 94906265.62425156\n      ? Math.log(x) + Math.LN2\n      : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n  }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n  return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n  atanh: function atanh(x) {\n    return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n  }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n  // eslint-disable-next-line no-self-compare\n  return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n  cbrt: function cbrt(x) {\n    return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n  }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  clz32: function clz32(x) {\n    return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n  }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n  cosh: function cosh(x) {\n    return (exp(x = +x) + exp(-x)) / 2;\n  }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n  // Old FF bug\n  || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n  // Tor Browser bug\n  || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n  return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n  return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n  var $abs = Math.abs(x);\n  var $sign = sign(x);\n  var a, result;\n  if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n  a = (1 + EPSILON32 / EPSILON) * $abs;\n  result = a - (a - $abs);\n  // eslint-disable-next-line no-self-compare\n  if (result > MAX32 || result != result) return $sign * Infinity;\n  return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n  hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n    var sum = 0;\n    var i = 0;\n    var aLen = arguments.length;\n    var larg = 0;\n    var arg, div;\n    while (i < aLen) {\n      arg = abs(arguments[i++]);\n      if (larg < arg) {\n        div = larg / arg;\n        sum = sum * div * div + 1;\n        larg = arg;\n      } else if (arg > 0) {\n        div = arg / larg;\n        sum += div * div;\n      } else sum += arg;\n    }\n    return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n  }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n  return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n  imul: function imul(x, y) {\n    var UINT16 = 0xffff;\n    var xn = +x;\n    var yn = +y;\n    var xl = UINT16 & xn;\n    var yl = UINT16 & yn;\n    return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n  }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  log10: function log10(x) {\n    return Math.log(x) * Math.LOG10E;\n  }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  log2: function log2(x) {\n    return Math.log(x) / Math.LN2;\n  }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n  return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n  sinh: function sinh(x) {\n    return Math.abs(x = +x) < 1\n      ? (expm1(x) - expm1(-x)) / 2\n      : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n  }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n  tanh: function tanh(x) {\n    var a = expm1(x = +x);\n    var b = expm1(-x);\n    return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n  }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  trunc: function trunc(it) {\n    return (it > 0 ? Math.floor : Math.ceil)(it);\n  }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n  includes: function includes(el /* , fromIndex = 0 */) {\n    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n  return function (it) {\n    var O = toIObject(it);\n    var keys = getKeys(O);\n    var length = keys.length;\n    var i = 0;\n    var result = [];\n    var key;\n    while (length > i) if (isEnum.call(O, key = keys[i++])) {\n      result.push(isEntries ? [key, O[key]] : O[key]);\n    } return result;\n  };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n  values: function values(it) {\n    return $values(it);\n  }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n  entries: function entries(it) {\n    return $entries(it);\n  }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n  getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n    var O = toIObject(object);\n    var getDesc = gOPD.f;\n    var keys = ownKeys(O);\n    var result = {};\n    var i = 0;\n    var key, desc;\n    while (keys.length > i) {\n      desc = getDesc(O, key = keys[i++]);\n      if (desc !== undefined) createProperty(result, key, desc);\n    }\n    return result;\n  }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n  var S = String(defined(that));\n  var stringLength = S.length;\n  var fillStr = fillString === undefined ? ' ' : String(fillString);\n  var intMaxLength = toLength(maxLength);\n  if (intMaxLength <= stringLength || fillStr == '') return S;\n  var fillLen = intMaxLength - stringLength;\n  var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n  if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n  return left ? stringFiller + S : S + stringFiller;\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n  padStart: function padStart(maxLength /* , fillString = ' ' */) {\n    return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n  }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n  padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n    return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n  }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n  return function (fn, time /* , ...args */) {\n    var boundArgs = arguments.length > 2;\n    var args = boundArgs ? slice.call(arguments, 2) : false;\n    return set(boundArgs ? function () {\n      // eslint-disable-next-line no-new-func\n      (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n    } : fn, time);\n  };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n  setTimeout: wrap(global.setTimeout),\n  setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n  setImmediate: $task.set,\n  clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n  CSSRuleList: true, // TODO: Not spec compliant, should be false.\n  CSSStyleDeclaration: false,\n  CSSValueList: false,\n  ClientRectList: false,\n  DOMRectList: false,\n  DOMStringList: false,\n  DOMTokenList: true,\n  DataTransferItemList: false,\n  FileList: false,\n  HTMLAllCollection: false,\n  HTMLCollection: false,\n  HTMLFormElement: false,\n  HTMLSelectElement: false,\n  MediaList: true, // TODO: Not spec compliant, should be false.\n  MimeTypeArray: false,\n  NamedNodeMap: false,\n  NodeList: true,\n  PaintRequestList: false,\n  Plugin: false,\n  PluginArray: false,\n  SVGLengthList: false,\n  SVGNumberList: false,\n  SVGPathSegList: false,\n  SVGPointList: false,\n  SVGStringList: false,\n  SVGTransformList: false,\n  SourceBufferList: false,\n  StyleSheetList: true, // TODO: Not spec compliant, should be false.\n  TextTrackCueList: false,\n  TextTrackList: false,\n  TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n  var NAME = collections[i];\n  var explicit = DOMIterables[NAME];\n  var Collection = global[NAME];\n  var proto = Collection && Collection.prototype;\n  var key;\n  if (proto) {\n    if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n    if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n    Iterators[NAME] = ArrayValues;\n    if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n  }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n  \"use strict\";\n\n  var Op = Object.prototype;\n  var hasOwn = Op.hasOwnProperty;\n  var undefined; // More compressible than void 0.\n  var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n  var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n  var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n  var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n  var inModule = typeof module === \"object\";\n  var runtime = global.regeneratorRuntime;\n  if (runtime) {\n    if (inModule) {\n      // If regeneratorRuntime is defined globally and we're in a module,\n      // make the exports object identical to regeneratorRuntime.\n      module.exports = runtime;\n    }\n    // Don't bother evaluating the rest of this file if the runtime was\n    // already defined globally.\n    return;\n  }\n\n  // Define the runtime globally (as expected by generated code) as either\n  // module.exports (if we're in a module) or a new, empty object.\n  runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n  function wrap(innerFn, outerFn, self, tryLocsList) {\n    // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n    var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n    var generator = Object.create(protoGenerator.prototype);\n    var context = new Context(tryLocsList || []);\n\n    // The ._invoke method unifies the implementations of the .next,\n    // .throw, and .return methods.\n    generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n    return generator;\n  }\n  runtime.wrap = wrap;\n\n  // Try/catch helper to minimize deoptimizations. Returns a completion\n  // record like context.tryEntries[i].completion. This interface could\n  // have been (and was previously) designed to take a closure to be\n  // invoked without arguments, but in all the cases we care about we\n  // already have an existing method we want to call, so there's no need\n  // to create a new function object. We can even get away with assuming\n  // the method takes exactly one argument, since that happens to be true\n  // in every case, so we don't have to touch the arguments object. The\n  // only additional allocation required is the completion record, which\n  // has a stable shape and so hopefully should be cheap to allocate.\n  function tryCatch(fn, obj, arg) {\n    try {\n      return { type: \"normal\", arg: fn.call(obj, arg) };\n    } catch (err) {\n      return { type: \"throw\", arg: err };\n    }\n  }\n\n  var GenStateSuspendedStart = \"suspendedStart\";\n  var GenStateSuspendedYield = \"suspendedYield\";\n  var GenStateExecuting = \"executing\";\n  var GenStateCompleted = \"completed\";\n\n  // Returning this object from the innerFn has the same effect as\n  // breaking out of the dispatch switch statement.\n  var ContinueSentinel = {};\n\n  // Dummy constructor functions that we use as the .constructor and\n  // .constructor.prototype properties for functions that return Generator\n  // objects. For full spec compliance, you may wish to configure your\n  // minifier not to mangle the names of these two functions.\n  function Generator() {}\n  function GeneratorFunction() {}\n  function GeneratorFunctionPrototype() {}\n\n  // This is a polyfill for %IteratorPrototype% for environments that\n  // don't natively support it.\n  var IteratorPrototype = {};\n  IteratorPrototype[iteratorSymbol] = function () {\n    return this;\n  };\n\n  var getProto = Object.getPrototypeOf;\n  var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n  if (NativeIteratorPrototype &&\n      NativeIteratorPrototype !== Op &&\n      hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n    // This environment has a native %IteratorPrototype%; use it instead\n    // of the polyfill.\n    IteratorPrototype = NativeIteratorPrototype;\n  }\n\n  var Gp = GeneratorFunctionPrototype.prototype =\n    Generator.prototype = Object.create(IteratorPrototype);\n  GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n  GeneratorFunctionPrototype.constructor = GeneratorFunction;\n  GeneratorFunctionPrototype[toStringTagSymbol] =\n    GeneratorFunction.displayName = \"GeneratorFunction\";\n\n  // Helper for defining the .next, .throw, and .return methods of the\n  // Iterator interface in terms of a single ._invoke method.\n  function defineIteratorMethods(prototype) {\n    [\"next\", \"throw\", \"return\"].forEach(function(method) {\n      prototype[method] = function(arg) {\n        return this._invoke(method, arg);\n      };\n    });\n  }\n\n  runtime.isGeneratorFunction = function(genFun) {\n    var ctor = typeof genFun === \"function\" && genFun.constructor;\n    return ctor\n      ? ctor === GeneratorFunction ||\n        // For the native GeneratorFunction constructor, the best we can\n        // do is to check its .name property.\n        (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n      : false;\n  };\n\n  runtime.mark = function(genFun) {\n    if (Object.setPrototypeOf) {\n      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n    } else {\n      genFun.__proto__ = GeneratorFunctionPrototype;\n      if (!(toStringTagSymbol in genFun)) {\n        genFun[toStringTagSymbol] = \"GeneratorFunction\";\n      }\n    }\n    genFun.prototype = Object.create(Gp);\n    return genFun;\n  };\n\n  // Within the body of any async function, `await x` is transformed to\n  // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n  // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n  // meant to be awaited.\n  runtime.awrap = function(arg) {\n    return { __await: arg };\n  };\n\n  function AsyncIterator(generator) {\n    function invoke(method, arg, resolve, reject) {\n      var record = tryCatch(generator[method], generator, arg);\n      if (record.type === \"throw\") {\n        reject(record.arg);\n      } else {\n        var result = record.arg;\n        var value = result.value;\n        if (value &&\n            typeof value === \"object\" &&\n            hasOwn.call(value, \"__await\")) {\n          return Promise.resolve(value.__await).then(function(value) {\n            invoke(\"next\", value, resolve, reject);\n          }, function(err) {\n            invoke(\"throw\", err, resolve, reject);\n          });\n        }\n\n        return Promise.resolve(value).then(function(unwrapped) {\n          // When a yielded Promise is resolved, its final value becomes\n          // the .value of the Promise<{value,done}> result for the\n          // current iteration. If the Promise is rejected, however, the\n          // result for this iteration will be rejected with the same\n          // reason. Note that rejections of yielded Promises are not\n          // thrown back into the generator function, as is the case\n          // when an awaited Promise is rejected. This difference in\n          // behavior between yield and await is important, because it\n          // allows the consumer to decide what to do with the yielded\n          // rejection (swallow it and continue, manually .throw it back\n          // into the generator, abandon iteration, whatever). With\n          // await, by contrast, there is no opportunity to examine the\n          // rejection reason outside the generator function, so the\n          // only option is to throw it from the await expression, and\n          // let the generator function handle the exception.\n          result.value = unwrapped;\n          resolve(result);\n        }, reject);\n      }\n    }\n\n    if (typeof global.process === \"object\" && global.process.domain) {\n      invoke = global.process.domain.bind(invoke);\n    }\n\n    var previousPromise;\n\n    function enqueue(method, arg) {\n      function callInvokeWithMethodAndArg() {\n        return new Promise(function(resolve, reject) {\n          invoke(method, arg, resolve, reject);\n        });\n      }\n\n      return previousPromise =\n        // If enqueue has been called before, then we want to wait until\n        // all previous Promises have been resolved before calling invoke,\n        // so that results are always delivered in the correct order. If\n        // enqueue has not been called before, then it is important to\n        // call invoke immediately, without waiting on a callback to fire,\n        // so that the async generator function has the opportunity to do\n        // any necessary setup in a predictable way. This predictability\n        // is why the Promise constructor synchronously invokes its\n        // executor callback, and why async functions synchronously\n        // execute code before the first await. Since we implement simple\n        // async functions in terms of async generators, it is especially\n        // important to get this right, even though it requires care.\n        previousPromise ? previousPromise.then(\n          callInvokeWithMethodAndArg,\n          // Avoid propagating failures to Promises returned by later\n          // invocations of the iterator.\n          callInvokeWithMethodAndArg\n        ) : callInvokeWithMethodAndArg();\n    }\n\n    // Define the unified helper method that is used to implement .next,\n    // .throw, and .return (see defineIteratorMethods).\n    this._invoke = enqueue;\n  }\n\n  defineIteratorMethods(AsyncIterator.prototype);\n  AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n    return this;\n  };\n  runtime.AsyncIterator = AsyncIterator;\n\n  // Note that simple async functions are implemented on top of\n  // AsyncIterator objects; they just return a Promise for the value of\n  // the final result produced by the iterator.\n  runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n    var iter = new AsyncIterator(\n      wrap(innerFn, outerFn, self, tryLocsList)\n    );\n\n    return runtime.isGeneratorFunction(outerFn)\n      ? iter // If outerFn is a generator, return the full iterator.\n      : iter.next().then(function(result) {\n          return result.done ? result.value : iter.next();\n        });\n  };\n\n  function makeInvokeMethod(innerFn, self, context) {\n    var state = GenStateSuspendedStart;\n\n    return function invoke(method, arg) {\n      if (state === GenStateExecuting) {\n        throw new Error(\"Generator is already running\");\n      }\n\n      if (state === GenStateCompleted) {\n        if (method === \"throw\") {\n          throw arg;\n        }\n\n        // Be forgiving, per 25.3.3.3.3 of the spec:\n        // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n        return doneResult();\n      }\n\n      context.method = method;\n      context.arg = arg;\n\n      while (true) {\n        var delegate = context.delegate;\n        if (delegate) {\n          var delegateResult = maybeInvokeDelegate(delegate, context);\n          if (delegateResult) {\n            if (delegateResult === ContinueSentinel) continue;\n            return delegateResult;\n          }\n        }\n\n        if (context.method === \"next\") {\n          // Setting context._sent for legacy support of Babel's\n          // function.sent implementation.\n          context.sent = context._sent = context.arg;\n\n        } else if (context.method === \"throw\") {\n          if (state === GenStateSuspendedStart) {\n            state = GenStateCompleted;\n            throw context.arg;\n          }\n\n          context.dispatchException(context.arg);\n\n        } else if (context.method === \"return\") {\n          context.abrupt(\"return\", context.arg);\n        }\n\n        state = GenStateExecuting;\n\n        var record = tryCatch(innerFn, self, context);\n        if (record.type === \"normal\") {\n          // If an exception is thrown from innerFn, we leave state ===\n          // GenStateExecuting and loop back for another invocation.\n          state = context.done\n            ? GenStateCompleted\n            : GenStateSuspendedYield;\n\n          if (record.arg === ContinueSentinel) {\n            continue;\n          }\n\n          return {\n            value: record.arg,\n            done: context.done\n          };\n\n        } else if (record.type === \"throw\") {\n          state = GenStateCompleted;\n          // Dispatch the exception by looping back around to the\n          // context.dispatchException(context.arg) call above.\n          context.method = \"throw\";\n          context.arg = record.arg;\n        }\n      }\n    };\n  }\n\n  // Call delegate.iterator[context.method](context.arg) and handle the\n  // result, either by returning a { value, done } result from the\n  // delegate iterator, or by modifying context.method and context.arg,\n  // setting context.delegate to null, and returning the ContinueSentinel.\n  function maybeInvokeDelegate(delegate, context) {\n    var method = delegate.iterator[context.method];\n    if (method === undefined) {\n      // A .throw or .return when the delegate iterator has no .throw\n      // method always terminates the yield* loop.\n      context.delegate = null;\n\n      if (context.method === \"throw\") {\n        if (delegate.iterator.return) {\n          // If the delegate iterator has a return method, give it a\n          // chance to clean up.\n          context.method = \"return\";\n          context.arg = undefined;\n          maybeInvokeDelegate(delegate, context);\n\n          if (context.method === \"throw\") {\n            // If maybeInvokeDelegate(context) changed context.method from\n            // \"return\" to \"throw\", let that override the TypeError below.\n            return ContinueSentinel;\n          }\n        }\n\n        context.method = \"throw\";\n        context.arg = new TypeError(\n          \"The iterator does not provide a 'throw' method\");\n      }\n\n      return ContinueSentinel;\n    }\n\n    var record = tryCatch(method, delegate.iterator, context.arg);\n\n    if (record.type === \"throw\") {\n      context.method = \"throw\";\n      context.arg = record.arg;\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    var info = record.arg;\n\n    if (! info) {\n      context.method = \"throw\";\n      context.arg = new TypeError(\"iterator result is not an object\");\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    if (info.done) {\n      // Assign the result of the finished delegate to the temporary\n      // variable specified by delegate.resultName (see delegateYield).\n      context[delegate.resultName] = info.value;\n\n      // Resume execution at the desired location (see delegateYield).\n      context.next = delegate.nextLoc;\n\n      // If context.method was \"throw\" but the delegate handled the\n      // exception, let the outer generator proceed normally. If\n      // context.method was \"next\", forget context.arg since it has been\n      // \"consumed\" by the delegate iterator. If context.method was\n      // \"return\", allow the original .return call to continue in the\n      // outer generator.\n      if (context.method !== \"return\") {\n        context.method = \"next\";\n        context.arg = undefined;\n      }\n\n    } else {\n      // Re-yield the result returned by the delegate method.\n      return info;\n    }\n\n    // The delegate iterator is finished, so forget it and continue with\n    // the outer generator.\n    context.delegate = null;\n    return ContinueSentinel;\n  }\n\n  // Define Generator.prototype.{next,throw,return} in terms of the\n  // unified ._invoke helper method.\n  defineIteratorMethods(Gp);\n\n  Gp[toStringTagSymbol] = \"Generator\";\n\n  // A Generator should always return itself as the iterator object when the\n  // @@iterator function is called on it. Some browsers' implementations of the\n  // iterator prototype chain incorrectly implement this, causing the Generator\n  // object to not be returned from this call. This ensures that doesn't happen.\n  // See https://github.com/facebook/regenerator/issues/274 for more details.\n  Gp[iteratorSymbol] = function() {\n    return this;\n  };\n\n  Gp.toString = function() {\n    return \"[object Generator]\";\n  };\n\n  function pushTryEntry(locs) {\n    var entry = { tryLoc: locs[0] };\n\n    if (1 in locs) {\n      entry.catchLoc = locs[1];\n    }\n\n    if (2 in locs) {\n      entry.finallyLoc = locs[2];\n      entry.afterLoc = locs[3];\n    }\n\n    this.tryEntries.push(entry);\n  }\n\n  function resetTryEntry(entry) {\n    var record = entry.completion || {};\n    record.type = \"normal\";\n    delete record.arg;\n    entry.completion = record;\n  }\n\n  function Context(tryLocsList) {\n    // The root entry object (effectively a try statement without a catch\n    // or a finally block) gives us a place to store values thrown from\n    // locations where there is no enclosing try statement.\n    this.tryEntries = [{ tryLoc: \"root\" }];\n    tryLocsList.forEach(pushTryEntry, this);\n    this.reset(true);\n  }\n\n  runtime.keys = function(object) {\n    var keys = [];\n    for (var key in object) {\n      keys.push(key);\n    }\n    keys.reverse();\n\n    // Rather than returning an object with a next method, we keep\n    // things simple and return the next function itself.\n    return function next() {\n      while (keys.length) {\n        var key = keys.pop();\n        if (key in object) {\n          next.value = key;\n          next.done = false;\n          return next;\n        }\n      }\n\n      // To avoid creating an additional object, we just hang the .value\n      // and .done properties off the next function object itself. This\n      // also ensures that the minifier will not anonymize the function.\n      next.done = true;\n      return next;\n    };\n  };\n\n  function values(iterable) {\n    if (iterable) {\n      var iteratorMethod = iterable[iteratorSymbol];\n      if (iteratorMethod) {\n        return iteratorMethod.call(iterable);\n      }\n\n      if (typeof iterable.next === \"function\") {\n        return iterable;\n      }\n\n      if (!isNaN(iterable.length)) {\n        var i = -1, next = function next() {\n          while (++i < iterable.length) {\n            if (hasOwn.call(iterable, i)) {\n              next.value = iterable[i];\n              next.done = false;\n              return next;\n            }\n          }\n\n          next.value = undefined;\n          next.done = true;\n\n          return next;\n        };\n\n        return next.next = next;\n      }\n    }\n\n    // Return an iterator with no values.\n    return { next: doneResult };\n  }\n  runtime.values = values;\n\n  function doneResult() {\n    return { value: undefined, done: true };\n  }\n\n  Context.prototype = {\n    constructor: Context,\n\n    reset: function(skipTempReset) {\n      this.prev = 0;\n      this.next = 0;\n      // Resetting context._sent for legacy support of Babel's\n      // function.sent implementation.\n      this.sent = this._sent = undefined;\n      this.done = false;\n      this.delegate = null;\n\n      this.method = \"next\";\n      this.arg = undefined;\n\n      this.tryEntries.forEach(resetTryEntry);\n\n      if (!skipTempReset) {\n        for (var name in this) {\n          // Not sure about the optimal order of these conditions:\n          if (name.charAt(0) === \"t\" &&\n              hasOwn.call(this, name) &&\n              !isNaN(+name.slice(1))) {\n            this[name] = undefined;\n          }\n        }\n      }\n    },\n\n    stop: function() {\n      this.done = true;\n\n      var rootEntry = this.tryEntries[0];\n      var rootRecord = rootEntry.completion;\n      if (rootRecord.type === \"throw\") {\n        throw rootRecord.arg;\n      }\n\n      return this.rval;\n    },\n\n    dispatchException: function(exception) {\n      if (this.done) {\n        throw exception;\n      }\n\n      var context = this;\n      function handle(loc, caught) {\n        record.type = \"throw\";\n        record.arg = exception;\n        context.next = loc;\n\n        if (caught) {\n          // If the dispatched exception was caught by a catch block,\n          // then let that catch block handle the exception normally.\n          context.method = \"next\";\n          context.arg = undefined;\n        }\n\n        return !! caught;\n      }\n\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        var record = entry.completion;\n\n        if (entry.tryLoc === \"root\") {\n          // Exception thrown outside of any try block that could handle\n          // it, so set the completion value of the entire function to\n          // throw the exception.\n          return handle(\"end\");\n        }\n\n        if (entry.tryLoc <= this.prev) {\n          var hasCatch = hasOwn.call(entry, \"catchLoc\");\n          var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n          if (hasCatch && hasFinally) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            } else if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else if (hasCatch) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            }\n\n          } else if (hasFinally) {\n            if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else {\n            throw new Error(\"try statement without catch or finally\");\n          }\n        }\n      }\n    },\n\n    abrupt: function(type, arg) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc <= this.prev &&\n            hasOwn.call(entry, \"finallyLoc\") &&\n            this.prev < entry.finallyLoc) {\n          var finallyEntry = entry;\n          break;\n        }\n      }\n\n      if (finallyEntry &&\n          (type === \"break\" ||\n           type === \"continue\") &&\n          finallyEntry.tryLoc <= arg &&\n          arg <= finallyEntry.finallyLoc) {\n        // Ignore the finally entry if control is not jumping to a\n        // location outside the try/catch block.\n        finallyEntry = null;\n      }\n\n      var record = finallyEntry ? finallyEntry.completion : {};\n      record.type = type;\n      record.arg = arg;\n\n      if (finallyEntry) {\n        this.method = \"next\";\n        this.next = finallyEntry.finallyLoc;\n        return ContinueSentinel;\n      }\n\n      return this.complete(record);\n    },\n\n    complete: function(record, afterLoc) {\n      if (record.type === \"throw\") {\n        throw record.arg;\n      }\n\n      if (record.type === \"break\" ||\n          record.type === \"continue\") {\n        this.next = record.arg;\n      } else if (record.type === \"return\") {\n        this.rval = this.arg = record.arg;\n        this.method = \"return\";\n        this.next = \"end\";\n      } else if (record.type === \"normal\" && afterLoc) {\n        this.next = afterLoc;\n      }\n\n      return ContinueSentinel;\n    },\n\n    finish: function(finallyLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.finallyLoc === finallyLoc) {\n          this.complete(entry.completion, entry.afterLoc);\n          resetTryEntry(entry);\n          return ContinueSentinel;\n        }\n      }\n    },\n\n    \"catch\": function(tryLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc === tryLoc) {\n          var record = entry.completion;\n          if (record.type === \"throw\") {\n            var thrown = record.arg;\n            resetTryEntry(entry);\n          }\n          return thrown;\n        }\n      }\n\n      // The context.catch method must only be called with a location\n      // argument that corresponds to a known catch block.\n      throw new Error(\"illegal catch attempt\");\n    },\n\n    delegateYield: function(iterable, resultName, nextLoc) {\n      this.delegate = {\n        iterator: values(iterable),\n        resultName: resultName,\n        nextLoc: nextLoc\n      };\n\n      if (this.method === \"next\") {\n        // Deliberately forget the last sent value so that we don't\n        // accidentally pass it on to the delegate.\n        this.arg = undefined;\n      }\n\n      return ContinueSentinel;\n    }\n  };\n})(\n  // Among the various tricks for obtaining a reference to the global\n  // object, this seems to be the most reliable technique that does not\n  // use indirect eval (which violates Content Security Policy).\n  typeof global === \"object\" ? global :\n  typeof window === \"object\" ? window :\n  typeof self === \"object\" ? self : this\n);\n","/**\n * Returns detailed type as string (instead of just 'object' for arrays etc)\n * @private\n * @param {any} value js value\n * @returns {String} type of value\n * @example\n * typeOf({}); // 'object'\n * typeOf([]); // 'array'\n * typeOf(function() {}); // 'function'\n * typeOf(/a/); // 'regexp'\n * typeOf(new Date()); // 'date'\n * typeOf(null); // 'null'\n * typeOf(undefined); // 'undefined'\n * typeOf('a'); // 'string'\n * typeOf(1); // 'number'\n * typeOf(true); // 'boolean'\n * typeOf(new Map()); // 'map'\n * typeOf(new Set()); // 'map'\n */\nfunction typeOf(value) {\n  if (value === null) {\n    return 'null';\n  }\n  if (value !== Object(value)) {\n    return typeof value;\n  }\n  return {}.toString\n    .call(value)\n    .slice(8, -1)\n    .toLowerCase();\n}\n\nexport default typeOf;\n","import typeOf from './typeOf';\n/**\n * Checks if input string is empty\n * @param  {String} input text input\n * @return {Boolean} true if no input\n */\nfunction isEmpty(input) {\n  if (typeOf(input) !== 'string') {\n    return true;\n  }\n  return !input.length;\n}\n\nexport default isEmpty;\n","import isEmpty from './isEmpty';\n\n/**\n * Takes a character and a unicode range. Returns true if the char is in the range.\n * @param  {String}  char  unicode character\n * @param  {Number}  start unicode start range\n * @param  {Number}  end   unicode end range\n * @return {Boolean}\n */\nfunction isCharInRange(char = '', start, end) {\n  if (isEmpty(char)) return false;\n  const code = char.charCodeAt(0);\n  return start <= code && code <= end;\n}\n\nexport default isCharInRange;\n","export const VERSION = '4.0.2';\n\nexport const TO_KANA_METHODS = {\n  HIRAGANA: 'toHiragana',\n  KATAKANA: 'toKatakana',\n};\n\nexport const ROMANIZATIONS = {\n  HEPBURN: 'hepburn',\n};\n\n/**\n * Default config for WanaKana, user passed options will be merged with these\n * @type {DefaultOptions}\n * @name defaultOptions\n * @property {Boolean} [useObsoleteKana=false] - Set to true to use obsolete characters, such as ゐ and ゑ.\n * @example\n * toHiragana('we', { useObsoleteKana: true })\n * // => 'ゑ'\n * @property {Boolean} [passRomaji=false] - Set to true to pass romaji when using mixed syllabaries with toKatakana() or toHiragana()\n * @example\n * toHiragana('only convert the katakana: ヒラガナ', { passRomaji: true })\n * // => \"only convert the katakana: ひらがな\"\n * @property {Boolean} [upcaseKatakana=false] - Set to true to convert katakana to uppercase using toRomaji()\n * @example\n * toRomaji('ひらがな カタカナ', { upcaseKatakana: true })\n * // => \"hiragana KATAKANA\"\n * @property {Boolean|String} [IMEMode=false] - Set to true, 'toHiragana', or 'toKatakana' to handle conversion while it is being typed.\n * @property {String} [romanization='hepburn'] - choose toRomaji() romanization map (currently only 'hepburn')\n * @property {Object} [customKanaMapping] - custom map will be merged with default conversion\n * @example\n * toKana('wanakana', { customKanaMapping: { na: 'に', ka: 'Bana' }) };\n * // => 'わにBanaに'\n * @property {Object} [customRomajiMapping] - custom map will be merged with default conversion\n * @example\n * toRomaji('つじぎり', { customRomajiMapping: { じ: 'zi', つ: 'tu', り: 'li' }) };\n * // => 'tuzigili'\n */\nexport const DEFAULT_OPTIONS = {\n  useObsoleteKana: false,\n  passRomaji: false,\n  upcaseKatakana: false,\n  ignoreCase: false,\n  IMEMode: false,\n  romanization: ROMANIZATIONS.HEPBURN,\n};\n\n// CharCode References\n// http://www.rikai.com/library/kanjitables/kanji_codes.unicode.shtml\n// http://unicode-table.com\n\nexport const LATIN_LOWERCASE_START = 0x61;\nexport const LATIN_LOWERCASE_END = 0x7a;\nexport const LATIN_UPPERCASE_START = 0x41;\nexport const LATIN_UPPERCASE_END = 0x5a;\nexport const LOWERCASE_ZENKAKU_START = 0xff41;\nexport const LOWERCASE_ZENKAKU_END = 0xff5a;\nexport const UPPERCASE_ZENKAKU_START = 0xff21;\nexport const UPPERCASE_ZENKAKU_END = 0xff3a;\nexport const HIRAGANA_START = 0x3041;\nexport const HIRAGANA_END = 0x3096;\nexport const KATAKANA_START = 0x30a1;\nexport const KATAKANA_END = 0x30fc;\nexport const KANJI_START = 0x4e00;\nexport const KANJI_END = 0x9faf;\nexport const PROLONGED_SOUND_MARK = 0x30fc;\nexport const KANA_SLASH_DOT = 0x30fb;\n\nconst ZENKAKU_NUMBERS = [0xff10, 0xff19];\nconst ZENKAKU_UPPERCASE = [UPPERCASE_ZENKAKU_START, UPPERCASE_ZENKAKU_END];\nconst ZENKAKU_LOWERCASE = [LOWERCASE_ZENKAKU_START, LOWERCASE_ZENKAKU_END];\nconst ZENKAKU_PUNCTUATION_1 = [0xff01, 0xff0f];\nconst ZENKAKU_PUNCTUATION_2 = [0xff1a, 0xff1f];\nconst ZENKAKU_PUNCTUATION_3 = [0xff3b, 0xff3f];\nconst ZENKAKU_PUNCTUATION_4 = [0xff5b, 0xff60];\nconst ZENKAKU_SYMBOLS_CURRENCY = [0xffe0, 0xffee];\n\nconst HIRAGANA_CHARS = [0x3040, 0x309f];\nconst KATAKANA_CHARS = [0x30a0, 0x30ff];\nconst HANKAKU_KATAKANA = [0xff66, 0xff9f];\nconst KATAKANA_PUNCTUATION = [0x30fb, 0x30fc];\nconst KANA_PUNCTUATION = [0xff61, 0xff65];\nconst CJK_SYMBOLS_PUNCTUATION = [0x3000, 0x303f];\nconst COMMON_CJK = [0x4e00, 0x9fff];\nconst RARE_CJK = [0x3400, 0x4dbf];\n\nexport const KANA_RANGES = [HIRAGANA_CHARS, KATAKANA_CHARS, KANA_PUNCTUATION, HANKAKU_KATAKANA];\n\nexport const JA_PUNCTUATION_RANGES = [\n  CJK_SYMBOLS_PUNCTUATION,\n  KANA_PUNCTUATION,\n  KATAKANA_PUNCTUATION,\n  ZENKAKU_PUNCTUATION_1,\n  ZENKAKU_PUNCTUATION_2,\n  ZENKAKU_PUNCTUATION_3,\n  ZENKAKU_PUNCTUATION_4,\n  ZENKAKU_SYMBOLS_CURRENCY,\n];\n\n// All Japanese unicode start and end ranges\n// Includes kanji, kana, zenkaku latin chars, punctuation, and number ranges.\nexport const JAPANESE_RANGES = [\n  ...KANA_RANGES,\n  ...JA_PUNCTUATION_RANGES,\n  ZENKAKU_UPPERCASE,\n  ZENKAKU_LOWERCASE,\n  ZENKAKU_NUMBERS,\n  COMMON_CJK,\n  RARE_CJK,\n];\n\nconst MODERN_ENGLISH = [0x0000, 0x007f];\nconst HEPBURN_MACRON_RANGES = [\n  [0x0100, 0x0101], // Ā ā\n  [0x0112, 0x0113], // Ē ē\n  [0x012a, 0x012b], // Ī ī\n  [0x014c, 0x014d], // Ō ō\n  [0x016a, 0x016b], // Ū ū\n];\nconst SMART_QUOTE_RANGES = [\n  [0x2018, 0x2019], // ‘ ’\n  [0x201c, 0x201d], // “ ”\n];\n\nexport const ROMAJI_RANGES = [MODERN_ENGLISH, ...HEPBURN_MACRON_RANGES];\n\nexport const EN_PUNCTUATION_RANGES = [\n  [0x20, 0x2f],\n  [0x3a, 0x3f],\n  [0x5b, 0x60],\n  [0x7b, 0x7e],\n  ...SMART_QUOTE_RANGES,\n];\n","import isCharInRange from './isCharInRange';\nimport { JAPANESE_RANGES } from '../constants';\n\n/**\n * Tests a character. Returns true if the character is [Katakana](https://en.wikipedia.org/wiki/Katakana).\n * @param  {String} char character string to test\n * @return {Boolean}\n */\nfunction isCharJapanese(char = '') {\n  return JAPANESE_RANGES.some(([start, end]) => isCharInRange(char, start, end));\n}\n\nexport default isCharJapanese;\n","import typeOf from './utils/typeOf';\nimport isEmpty from './utils/isEmpty';\nimport isCharJapanese from './utils/isCharJapanese';\n\n/**\n * Test if `input` only includes [Kanji](https://en.wikipedia.org/wiki/Kanji), [Kana](https://en.wikipedia.org/wiki/Kana), zenkaku numbers, and JA punctuation/symbols.”\n * @param  {String} [input=''] text\n * @param  {Regexp} [allowed] additional test allowed to pass for each char\n * @return {Boolean} true if passes checks\n * @example\n * isJapanese('泣き虫')\n * // => true\n * isJapanese('あア')\n * // => true\n * isJapanese('2月') // Zenkaku numbers allowed\n * // => true\n * isJapanese('泣き虫。!〜$') // Zenkaku/JA punctuation\n * // => true\n * isJapanese('泣き虫.!~$') // Latin punctuation fails\n * // => false\n * isJapanese('A泣き虫')\n * // => false\n * isJapanese('≪偽括弧≫', /[≪≫]/);\n * // => true\n */\nfunction isJapanese(input = '', allowed) {\n  const augmented = typeOf(allowed) === 'regexp';\n  return isEmpty(input)\n    ? false\n    : [...input].every((char) => {\n      const isJa = isCharJapanese(char);\n      return !augmented ? isJa : isJa || allowed.test(char);\n    });\n}\n\nexport default isJapanese;\n","import { DEFAULT_OPTIONS } from '../constants';\n/**\n * Easy re-use of merging with default options\n * @param {Object} opts user options\n * @returns user options merged over default options\n */\nconst mergeWithDefaultOptions = (opts = {}) => Object.assign({}, DEFAULT_OPTIONS, opts);\n\nexport default mergeWithDefaultOptions;\n","import typeOf from './typeOf';\n\nexport function applyMapping(string, mapping, convertEnding) {\n  const root = mapping;\n\n  function nextSubtree(tree, nextChar) {\n    const subtree = tree[nextChar];\n    if (subtree === undefined) {\n      return undefined;\n    }\n    // if the next child node does not have a node value, set its node value to the input\n    return Object.assign({ '': tree[''] + nextChar }, tree[nextChar]);\n  }\n\n  function newChunk(remaining, currentCursor) {\n    // start parsing a new chunk\n    const firstChar = remaining.charAt(0);\n\n    return parse(\n      Object.assign({ '': firstChar }, root[firstChar]),\n      remaining.slice(1),\n      currentCursor,\n      currentCursor + 1\n    );\n  }\n\n  function parse(tree, remaining, lastCursor, currentCursor) {\n    if (!remaining) {\n      if (convertEnding || Object.keys(tree).length === 1) {\n        // nothing more to consume, just commit the last chunk and return it\n        // so as to not have an empty element at the end of the result\n        return tree[''] ? [[lastCursor, currentCursor, tree['']]] : [];\n      }\n      // if we don't want to convert the ending, because there are still possible continuations\n      // return null as the final node value\n      return [[lastCursor, currentCursor, null]];\n    }\n\n    if (Object.keys(tree).length === 1) {\n      return [[lastCursor, currentCursor, tree['']]].concat(newChunk(remaining, currentCursor));\n    }\n\n    const subtree = nextSubtree(tree, remaining.charAt(0));\n\n    if (subtree === undefined) {\n      return [[lastCursor, currentCursor, tree['']]].concat(newChunk(remaining, currentCursor));\n    }\n    // continue current branch\n    return parse(subtree, remaining.slice(1), lastCursor, currentCursor + 1);\n  }\n\n  return newChunk(string, 0);\n}\n\n// transform the tree, so that for example hepburnTree['ゔ']['ぁ'][''] === 'va'\n// or kanaTree['k']['y']['a'][''] === 'きゃ'\nexport function transform(tree) {\n  return Object.entries(tree).reduce((map, [char, subtree]) => {\n    const endOfBranch = typeOf(subtree) === 'string';\n    map[char] = endOfBranch ? { '': subtree } : transform(subtree);\n    return map;\n  }, {});\n}\n\nexport function getSubTreeOf(tree, string) {\n  return string.split('').reduce((correctSubTree, char) => {\n    if (correctSubTree[char] === undefined) {\n      correctSubTree[char] = {};\n    }\n    return correctSubTree[char];\n  }, tree);\n}\n\n/**\n * Creates a custom mapping tree, returns a function that accepts a defaultMap which the newly created customMapping will be merged with and returned\n * (customMap) => (defaultMap) => mergedMap\n * @param  {Object} customMap { 'ka' : 'な' }\n * @return {Function} (defaultMap) => defaultMergedWithCustomMap\n * @example\n * const sillyMap = createCustomMapping({ 'ちゃ': 'time', '茎': 'cookie' });\n * // sillyMap is passed defaultMapping to merge with when called in toRomaji()\n * toRomaji(\"It's 茎 ちゃ よ\", { customRomajiMapping: sillyMap });\n * // => 'It's cookie time yo';\n */\nexport function createCustomMapping(customMap = {}) {\n  const customTree = {};\n\n  if (typeOf(customMap) === 'object') {\n    Object.entries(customMap).forEach(([roma, kana]) => {\n      let subTree = customTree;\n      roma.split('').forEach((char) => {\n        if (subTree[char] === undefined) {\n          subTree[char] = {};\n        }\n        subTree = subTree[char];\n      });\n      subTree[''] = kana;\n    });\n  }\n\n  return function makeMap(map) {\n    const mapCopy = JSON.parse(JSON.stringify(map));\n\n    function transformMap(mapSubtree, customSubtree) {\n      if (mapSubtree === undefined || typeOf(mapSubtree) === 'string') {\n        return customSubtree;\n      }\n      return Object.entries(customSubtree).reduce((newSubtree, [char, subtree]) => {\n        newSubtree[char] = transformMap(mapSubtree[char], subtree);\n        return newSubtree;\n      }, mapSubtree);\n    }\n\n    return transformMap(mapCopy, customTree);\n  };\n}\n\n// allow consumer to pass either function or object as customMapping\nexport function mergeCustomMapping(map, customMapping) {\n  if (!customMapping) {\n    return map;\n  }\n  return typeOf(customMapping) === 'function'\n    ? customMapping(map)\n    : createCustomMapping(customMapping)(map);\n}\n","import { transform, getSubTreeOf, createCustomMapping } from './kanaMapping';\n\n// NOTE: not exactly kunrei shiki, for example ぢゃ -> dya instead of zya, to avoid name clashing\n/* eslint-disable */\n// prettier-ignore\nconst BASIC_KUNREI = {\n  a: 'あ', i: 'い', u: 'う', e: 'え', o: 'お',\n  k: { a: 'か', i: 'き', u: 'く', e: 'け', o: 'こ', },\n  s: { a: 'さ', i: 'し', u: 'す', e: 'せ', o: 'そ', },\n  t: { a: 'た', i: 'ち', u: 'つ', e: 'て', o: 'と', },\n  n: { a: 'な', i: 'に', u: 'ぬ', e: 'ね', o: 'の', },\n  h: { a: 'は', i: 'ひ', u: 'ふ', e: 'へ', o: 'ほ', },\n  m: { a: 'ま', i: 'み', u: 'む', e: 'め', o: 'も', },\n  y: { a: 'や', u: 'ゆ', o: 'よ' },\n  r: { a: 'ら', i: 'り', u: 'る', e: 'れ', o: 'ろ', },\n  w: { a: 'わ', i: 'ゐ', e: 'ゑ', o: 'を', },\n  g: { a: 'が', i: 'ぎ', u: 'ぐ', e: 'げ', o: 'ご', },\n  z: { a: 'ざ', i: 'じ', u: 'ず', e: 'ぜ', o: 'ぞ', },\n  d: { a: 'だ', i: 'ぢ', u: 'づ', e: 'で', o: 'ど', },\n  b: { a: 'ば', i: 'び', u: 'ぶ', e: 'べ', o: 'ぼ', },\n  p: { a: 'ぱ', i: 'ぴ', u: 'ぷ', e: 'ぺ', o: 'ぽ', },\n  v: { a: 'ゔぁ', i: 'ゔぃ', u: 'ゔ', e: 'ゔぇ', o: 'ゔぉ', },\n};\n\nconst SPECIAL_SYMBOLS = {\n  '.': '。',\n  ',': '、',\n  ':': ':',\n  '/': '・',\n  '!': '!',\n  '?': '?',\n  '~': '〜',\n  '-': 'ー',\n  '‘': '「',\n  '’': '」',\n  '“': '『',\n  '”': '』',\n  '[': '[',\n  ']': ']',\n  '(': '(',\n  ')': ')',\n  '{': '{',\n  '}': '}',\n};\n\nconst CONSONANTS = {\n  k: 'き',\n  s: 'し',\n  t: 'ち',\n  n: 'に',\n  h: 'ひ',\n  m: 'み',\n  r: 'り',\n  g: 'ぎ',\n  z: 'じ',\n  d: 'ぢ',\n  b: 'び',\n  p: 'ぴ',\n  v: 'ゔ',\n  q: 'く',\n  f: 'ふ',\n};\nconst SMALL_Y = { ya: 'ゃ', yi: 'ぃ', yu: 'ゅ', ye: 'ぇ', yo: 'ょ' };\nconst SMALL_VOWELS = { a: 'ぁ', i: 'ぃ', u: 'ぅ', e: 'ぇ', o: 'ぉ' };\n\n// typing one should be the same as having typed the other instead\nconst ALIASES = {\n  sh: 'sy', // sha -> sya\n  ch: 'ty', // cho -> tyo\n  cy: 'ty', // cyo -> tyo\n  chy: 'ty', // chyu -> tyu\n  shy: 'sy', // shya -> sya\n  j: 'zy', // ja -> zya\n  jy: 'zy', // jye -> zye\n\n  // exceptions to above rules\n  shi: 'si',\n  chi: 'ti',\n  tsu: 'tu',\n  ji: 'zi',\n  fu: 'hu',\n};\n\n// xtu -> っ\nconst SMALL_LETTERS = Object.assign(\n  {\n    tu: 'っ',\n    wa: 'ゎ',\n    ka: 'ヵ',\n    ke: 'ヶ',\n  },\n  SMALL_VOWELS,\n  SMALL_Y\n);\n\n// don't follow any notable patterns\nconst SPECIAL_CASES = {\n  yi: 'い',\n  wu: 'う',\n  ye: 'いぇ',\n  wi: 'うぃ',\n  we: 'うぇ',\n  kwa: 'くぁ',\n  whu: 'う',\n  // because it's not thya for てゃ but tha\n  // and tha is not てぁ, but てゃ\n  tha: 'てゃ',\n  thu: 'てゅ',\n  tho: 'てょ',\n  dha: 'でゃ',\n  dhu: 'でゅ',\n  dho: 'でょ',\n};\n\nconst AIUEO_CONSTRUCTIONS = {\n  wh: 'う',\n  qw: 'く',\n  q: 'く',\n  gw: 'ぐ',\n  sw: 'す',\n  ts: 'つ',\n  th: 'て',\n  tw: 'と',\n  dh: 'で',\n  dw: 'ど',\n  fw: 'ふ',\n  f: 'ふ',\n};\n\n/* eslint-enable */\nfunction createRomajiToKanaMap() {\n  const kanaTree = transform(BASIC_KUNREI);\n  // pseudo partial application\n  const subtreeOf = (string) => getSubTreeOf(kanaTree, string);\n\n  // add tya, sya, etc.\n  Object.entries(CONSONANTS).forEach(([consonant, yKana]) => {\n    Object.entries(SMALL_Y).forEach(([roma, kana]) => {\n      // for example kyo -> き + ょ\n      subtreeOf(consonant + roma)[''] = yKana + kana;\n    });\n  });\n\n  Object.entries(SPECIAL_SYMBOLS).forEach(([symbol, jsymbol]) => {\n    subtreeOf(symbol)[''] = jsymbol;\n  });\n\n  // things like うぃ, くぃ, etc.\n  Object.entries(AIUEO_CONSTRUCTIONS).forEach(([consonant, aiueoKana]) => {\n    Object.entries(SMALL_VOWELS).forEach(([vowel, kana]) => {\n      const subtree = subtreeOf(consonant + vowel);\n      subtree[''] = aiueoKana + kana;\n    });\n  });\n\n  // different ways to write ん\n  ['n', \"n'\", 'xn'].forEach((nChar) => {\n    subtreeOf(nChar)[''] = 'ん';\n  });\n\n  // c is equivalent to k, but not for chi, cha, etc. that's why we have to make a copy of k\n  kanaTree.c = JSON.parse(JSON.stringify(kanaTree.k));\n\n  Object.entries(ALIASES).forEach(([string, alternative]) => {\n    const allExceptLast = string.slice(0, string.length - 1);\n    const last = string.charAt(string.length - 1);\n    const parentTree = subtreeOf(allExceptLast);\n    // copy to avoid recursive containment\n    parentTree[last] = JSON.parse(JSON.stringify(subtreeOf(alternative)));\n  });\n\n  function getAlternatives(string) {\n    return [...Object.entries(ALIASES), ...[['c', 'k']]].reduce(\n      (list, [alt, roma]) =>\n        (string.startsWith(roma) ? list.concat(string.replace(roma, alt)) : list),\n      []\n    );\n  }\n\n  Object.entries(SMALL_LETTERS).forEach(([kunreiRoma, kana]) => {\n    const last = (char) => char.charAt(char.length - 1);\n    const allExceptLast = (chars) => chars.slice(0, chars.length - 1);\n    const xRoma = `x${kunreiRoma}`;\n    const xSubtree = subtreeOf(xRoma);\n    xSubtree[''] = kana;\n\n    // ltu -> xtu -> っ\n    const parentTree = subtreeOf(`l${allExceptLast(kunreiRoma)}`);\n    parentTree[last(kunreiRoma)] = xSubtree;\n\n    // ltsu -> ltu -> っ\n    getAlternatives(kunreiRoma).forEach((altRoma) => {\n      ['l', 'x'].forEach((prefix) => {\n        const altParentTree = subtreeOf(prefix + allExceptLast(altRoma));\n        altParentTree[last(altRoma)] = subtreeOf(prefix + kunreiRoma);\n      });\n    });\n  });\n\n  Object.entries(SPECIAL_CASES).forEach(([string, kana]) => {\n    subtreeOf(string)[''] = kana;\n  });\n\n  // add kka, tta, etc.\n  function addTsu(tree) {\n    return Object.entries(tree).reduce((tsuTree, [key, value]) => {\n      if (!key) {\n        // we have reached the bottom of this branch\n        tsuTree[key] = `っ${value}`;\n      } else {\n        // more subtrees\n        tsuTree[key] = addTsu(value);\n      }\n      return tsuTree;\n    }, {});\n  }\n  // have to explicitly name c here, because we made it a copy of k, not a reference\n  [...Object.keys(CONSONANTS), 'c', 'y', 'w', 'j'].forEach((consonant) => {\n    const subtree = kanaTree[consonant];\n    subtree[consonant] = addTsu(subtree);\n  });\n  // nn should not be っん\n  delete kanaTree.n.n;\n  // solidify the results, so that there there is referential transparency within the tree\n  return Object.freeze(JSON.parse(JSON.stringify(kanaTree)));\n}\n\nlet romajiToKanaMap = null;\n\nexport function getRomajiToKanaTree() {\n  if (romajiToKanaMap == null) {\n    romajiToKanaMap = createRomajiToKanaMap();\n  }\n  return romajiToKanaMap;\n}\n\nexport const USE_OBSOLETE_KANA_MAP = createCustomMapping({ wi: 'ゐ', we: 'ゑ' });\n\nexport function IME_MODE_MAP(map) {\n  // in IME mode, we do not want to convert single ns\n  const mapCopy = JSON.parse(JSON.stringify(map));\n  mapCopy.n.n = { '': 'ん' };\n  mapCopy.n[' '] = { '': 'ん' };\n  return mapCopy;\n}\n","import isEmpty from './isEmpty';\nimport isCharInRange from './isCharInRange';\nimport { LATIN_UPPERCASE_START, LATIN_UPPERCASE_END } from '../constants';\n\n/**\n * Tests if char is in English unicode uppercase range\n * @param  {String} char\n * @return {Boolean}\n */\nfunction isCharUpperCase(char = '') {\n  if (isEmpty(char)) return false;\n  return isCharInRange(char, LATIN_UPPERCASE_START, LATIN_UPPERCASE_END);\n}\n\nexport default isCharUpperCase;\n","import isEmpty from './isEmpty';\nimport { PROLONGED_SOUND_MARK } from '../constants';\n\n/**\n * Returns true if char is 'ー'\n * @param  {String} char to test\n * @return {Boolean}\n */\nfunction isCharLongDash(char = '') {\n  if (isEmpty(char)) return false;\n  return char.charCodeAt(0) === PROLONGED_SOUND_MARK;\n}\n\nexport default isCharLongDash;\n","import isEmpty from './isEmpty';\nimport { KANA_SLASH_DOT } from '../constants';\n\n/**\n * Tests if char is '・'\n * @param  {String} char\n * @return {Boolean} true if '・'\n */\nfunction isCharSlashDot(char = '') {\n  if (isEmpty(char)) return false;\n  return char.charCodeAt(0) === KANA_SLASH_DOT;\n}\n\nexport default isCharSlashDot;\n","import isEmpty from './isEmpty';\nimport isCharLongDash from './isCharLongDash';\nimport isCharInRange from './isCharInRange';\nimport {\n  HIRAGANA_START,\n  HIRAGANA_END,\n} from '../constants';\n\n/**\n * Tests a character. Returns true if the character is [Hiragana](https://en.wikipedia.org/wiki/Hiragana).\n * @param  {String} char character string to test\n * @return {Boolean}\n */\nfunction isCharHiragana(char = '') {\n  if (isEmpty(char)) return false;\n  if (isCharLongDash(char)) return true;\n  return isCharInRange(char, HIRAGANA_START, HIRAGANA_END);\n}\n\nexport default isCharHiragana;\n","import { KATAKANA_START, HIRAGANA_START } from '../constants';\n\nimport isCharLongDash from './isCharLongDash';\nimport isCharSlashDot from './isCharSlashDot';\nimport isCharHiragana from './isCharHiragana';\n\n/**\n * Convert [Hiragana](https://en.wikipedia.org/wiki/Hiragana) to [Katakana](https://en.wikipedia.org/wiki/Katakana)\n * Passes through any non-hiragana chars\n * @private\n * @param  {String} [input=''] text input\n * @return {String} converted text\n * @example\n * hiraganaToKatakana('ひらがな')\n * // => \"ヒラガナ\"\n * hiraganaToKatakana('ひらがな is a type of kana')\n * // => \"ヒラガナ is a type of kana\"\n */\nfunction hiraganaToKatakana(input = '') {\n  const kata = [];\n  input.split('').forEach((char) => {\n    // Short circuit to avoid incorrect codeshift for 'ー' and '・'\n    if (isCharLongDash(char) || isCharSlashDot(char)) {\n      kata.push(char);\n    } else if (isCharHiragana(char)) {\n      // Shift charcode.\n      const code = char.charCodeAt(0) + (KATAKANA_START - HIRAGANA_START);\n      const kataChar = String.fromCharCode(code);\n      kata.push(kataChar);\n    } else {\n      // Pass non-hiragana chars through\n      kata.push(char);\n    }\n  });\n  return kata.join('');\n}\n\nexport default hiraganaToKatakana;\n","import { TO_KANA_METHODS } from './constants';\nimport mergeWithDefaultOptions from './utils/mergeWithDefaultOptions';\nimport { getRomajiToKanaTree, IME_MODE_MAP, USE_OBSOLETE_KANA_MAP } from './utils/romajiToKanaMap';\nimport { applyMapping, mergeCustomMapping } from './utils/kanaMapping';\nimport isCharUpperCase from './utils/isCharUpperCase';\nimport hiraganaToKatakana from './utils/hiraganaToKatakana';\n\n/**\n * Convert [Romaji](https://en.wikipedia.org/wiki/Romaji) to [Kana](https://en.wikipedia.org/wiki/Kana), lowercase text will result in [Hiragana](https://en.wikipedia.org/wiki/Hiragana) and uppercase text will result in [Katakana](https://en.wikipedia.org/wiki/Katakana).\n * @param  {String} [input=''] text\n * @param  {DefaultOptions} [options=defaultOptions]\n * @return {String} converted text\n * @example\n * toKana('onaji BUTTSUUJI')\n * // => 'おなじ ブッツウジ'\n * toKana('ONAJI buttsuuji')\n * // => 'オナジ ぶっつうじ'\n * toKana('座禅‘zazen’スタイル')\n * // => '座禅「ざぜん」スタイル'\n * toKana('batsuge-mu')\n * // => 'ばつげーむ'\n * toKana('!?.:/,~-‘’“”[](){}') // Punctuation conversion\n * // => '!?。:・、〜ー「」『』[](){}'\n * toKana('we', { useObsoleteKana: true })\n * // => 'ゑ'\n * toKana('wanakana', { customKanaMapping: { na: 'に', ka: 'bana' } });\n * // => 'わにbanaに'\n */\nexport function toKana(input = '', options = {}, map) {\n  let config;\n  if (!map) {\n    config = mergeWithDefaultOptions(options);\n    map = createRomajiToKanaMap(config);\n  } else {\n    config = options;\n  }\n\n  // throw away the substring index information and just concatenate all the kana\n  return splitIntoConvertedKana(input, config, map)\n    .map((kanaToken) => {\n      const [start, end, kana] = kanaToken;\n      if (kana === null) {\n        // haven't converted the end of the string, since we are in IME mode\n        return input.slice(start);\n      }\n      const enforceHiragana = config.IMEMode === TO_KANA_METHODS.HIRAGANA;\n      const enforceKatakana =\n        config.IMEMode === TO_KANA_METHODS.KATAKANA ||\n        [...input.slice(start, end)].every(isCharUpperCase);\n\n      return enforceHiragana || !enforceKatakana ? kana : hiraganaToKatakana(kana);\n    })\n    .join('');\n}\n\n/**\n *\n * @private\n * @param {String} [input=''] input text\n * @param {Object} [options={}] toKana options\n * @returns {Array[]} [[start, end, token]]\n * @example\n * splitIntoConvertedKana('buttsuuji')\n * // => [[0, 2, 'ぶ'], [2, 6, 'っつ'], [6, 7, 'う'], [7, 9, 'じ']]\n */\nexport function splitIntoConvertedKana(input = '', options = {}, map) {\n  if (!map) {\n    map = createRomajiToKanaMap(options);\n  }\n  return applyMapping(input.toLowerCase(), map, !options.IMEMode);\n}\n\nlet customMapping = null;\nexport function createRomajiToKanaMap(options = {}) {\n  let map = getRomajiToKanaTree();\n\n  map = options.IMEMode ? IME_MODE_MAP(map) : map;\n  map = options.useObsoleteKana ? USE_OBSOLETE_KANA_MAP(map) : map;\n\n  if (options.customKanaMapping) {\n    if (customMapping == null) {\n      customMapping = mergeCustomMapping(map, options.customKanaMapping);\n    }\n    map = customMapping;\n  }\n\n  return map;\n}\n\nexport default toKana;\n","import isJapanese from '../isJapanese';\nimport toKana, { createRomajiToKanaMap } from '../toKana';\nimport mergeWithDefaultOptions from './mergeWithDefaultOptions';\n\nlet LISTENERS = [];\n/**\n * Automagically replaces input values with converted text to kana\n * @param  {defaultOptions} [options] user config overrides, default conversion is toKana()\n * @return {Function} event handler with bound options\n * @private\n */\nexport function makeOnInput(options) {\n  let prevInput;\n  // Enforce IMEMode if not already specified\n  const mergedConfig = Object.assign({}, mergeWithDefaultOptions(options), {\n    IMEMode: options.IMEMode || true,\n  });\n  const preConfiguredMap = createRomajiToKanaMap(mergedConfig);\n  const triggers = [\n    ...Object.keys(preConfiguredMap),\n    ...Object.keys(preConfiguredMap).map((char) => char.toUpperCase()),\n  ];\n\n  return function onInput({ target }) {\n    if (target.value !== prevInput && target.dataset.ignoreComposition !== 'true') {\n      convertInput(target, mergedConfig, preConfiguredMap, triggers, prevInput);\n    }\n  };\n}\n\nexport function convertInput(target, options, map, triggers, prevInput) {\n  const [head, textToConvert, tail] = splitInput(target.value, target.selectionEnd, triggers);\n  const convertedText = toKana(textToConvert, options, map);\n  const changed = textToConvert !== convertedText;\n\n  if (changed) {\n    const newCursor = head.length + convertedText.length;\n    const newValue = head + convertedText + tail;\n    target.value = newValue;\n    prevInput = newValue;\n\n    if (tail.length) {\n      // push later on event loop (otherwise mid-text insertion can be 1 char too far to the right)\n      setTimeout(() => target.setSelectionRange(newCursor, newCursor), 1);\n    } else {\n      target.setSelectionRange(newCursor, newCursor);\n    }\n  } else {\n    prevInput = target.value;\n  }\n}\n\nexport function onComposition({ type, target, data }) {\n  // navigator.platform is not 100% reliable for singling out all OS,\n  // but for determining desktop \"Mac OS\" it is effective enough.\n  const isMacOS = /Mac/.test(window.navigator && window.navigator.platform);\n  // We don't want to ignore on Android:\n  // https://github.com/WaniKani/WanaKana/issues/82\n  // But MacOS IME auto-closes if we don't ignore:\n  // https://github.com/WaniKani/WanaKana/issues/71\n  // Other platform Japanese IMEs pass through happily\n  if (isMacOS) {\n    if (type === 'compositionupdate' && isJapanese(data)) {\n      target.dataset.ignoreComposition = 'true';\n    }\n\n    if (type === 'compositionend') {\n      target.dataset.ignoreComposition = 'false';\n    }\n  }\n}\n\nexport function trackListeners(id, inputHandler, compositionHandler) {\n  LISTENERS = LISTENERS.concat({\n    id,\n    inputHandler,\n    compositionHandler,\n  });\n}\n\nexport function untrackListeners({ id: targetId }) {\n  LISTENERS = LISTENERS.filter(({ id }) => id !== targetId);\n}\n\nexport function findListeners(el) {\n  return el && LISTENERS.find(({ id }) => id === el.getAttribute('data-wanakana-id'));\n}\n\n// Handle non-terminal inserted input conversion:\n// | -> わ| -> わび| -> わ|び -> わs|び -> わsh|び -> わshi|び -> わし|び\n// or multiple ambiguous positioning (to select which \"s\" to work from)\n// こsこs|こsこ -> こsこso|こsこ -> こsこそ|こsこ\nexport function splitInput(text = '', cursor = 0, triggers = []) {\n  let head;\n  let toConvert;\n  let tail;\n\n  if (cursor === 0 && triggers.includes(text[0])) {\n    [head, toConvert, tail] = workFromStart(text, triggers);\n  } else if (cursor > 0) {\n    [head, toConvert, tail] = workBackwards(text, cursor);\n  } else {\n    [head, toConvert] = takeWhileAndSlice(text, (char) => !triggers.includes(char));\n    [toConvert, tail] = takeWhileAndSlice(toConvert, (char) => !isJapanese(char));\n  }\n\n  return [head, toConvert, tail];\n}\n\nfunction workFromStart(text, catalystChars) {\n  return [\n    '',\n    ...takeWhileAndSlice(\n      text,\n      (char) => catalystChars.includes(char) || !isJapanese(char, /[0-9]/)\n    ),\n  ];\n}\n\nfunction workBackwards(text = '', startIndex = 0) {\n  const [toConvert, head] = takeWhileAndSlice(\n    [...text.slice(0, startIndex)].reverse(),\n    (char) => !isJapanese(char)\n  );\n  return [\n    head.reverse().join(''),\n    toConvert\n      .split('')\n      .reverse()\n      .join(''),\n    text.slice(startIndex),\n  ];\n}\n\nfunction takeWhileAndSlice(source = {}, predicate = (x) => !!x) {\n  const result = [];\n  const { length } = source;\n  let i = 0;\n  while (i < length && predicate(source[i], i)) {\n    result.push(source[i]);\n    i += 1;\n  }\n  return [result.join(''), source.slice(i)];\n}\n","/* eslint-disable no-console */\nconst onInput = ({ target: { value, selectionStart, selectionEnd } }) =>\n  console.log('input:', { value, selectionStart, selectionEnd });\nconst onCompositionStart = () => console.log('compositionstart');\nconst onCompositionUpdate = ({ target: { value, selectionStart, selectionEnd }, data }) =>\n  console.log('compositionupdate', {\n    data,\n    value,\n    selectionStart,\n    selectionEnd,\n  });\nconst onCompositionEnd = () => console.log('compositionend');\n\nconst events = {\n  input: onInput,\n  compositionstart: onCompositionStart,\n  compositionupdate: onCompositionUpdate,\n  compositionend: onCompositionEnd,\n};\n\nexport const addDebugListeners = (input) => {\n  Object.entries(events).forEach(([event, handler]) => input.addEventListener(event, handler));\n};\n\nexport const removeDebugListeners = (input) => {\n  Object.entries(events).forEach(([event, handler]) => input.removeEventListener(event, handler));\n};\n","import { makeOnInput, onComposition, trackListeners } from './utils/dom';\nimport { addDebugListeners } from './utils/logInputEvents';\n\nconst ELEMENTS = ['TEXTAREA', 'INPUT'];\n\nlet idCounter = 0;\nconst newId = () => {\n  idCounter += 1;\n  return `${Date.now()}${idCounter}`;\n};\n\n/**\n * Binds eventListener for 'input' events to an input field to automagically replace values with kana\n * Can pass `{ IMEMode: 'toHiragana' || 'toKatakana' }` to enforce kana conversion type\n * @param  {HTMLElement} element textarea, input[type=\"text\"] etc\n * @param  {DefaultOptions} [options=defaultOptions] defaults to { IMEMode: true } using `toKana`\n * @example\n * bind(document.querySelector('#myInput'));\n */\nfunction bind(element = {}, options = {}, debug = false) {\n  if (!ELEMENTS.includes(element.nodeName)) {\n    throw new Error(\n      `Element provided to Wanakana bind() was not a valid input or textarea element.\\n Received: (${JSON.stringify(\n        element\n      )})`\n    );\n  }\n  const onInput = makeOnInput(options);\n  const id = newId();\n  element.setAttribute('data-wanakana-id', id);\n  element.setAttribute('lang', 'ja');\n  element.setAttribute('autoCapitalize', 'none');\n  element.setAttribute('autoCorrect', 'off');\n  element.setAttribute('autoComplete', 'off');\n  element.setAttribute('spellCheck', 'false');\n  element.addEventListener('input', onInput);\n  element.addEventListener('compositionupdate', onComposition);\n  element.addEventListener('compositionend', onComposition);\n  trackListeners(id, onInput, onComposition);\n  if (debug === true) {\n    addDebugListeners(element);\n  }\n}\n\nexport default bind;\n","import isEmpty from './isEmpty';\nimport isCharInRange from './isCharInRange';\nimport { ROMAJI_RANGES } from '../constants';\n\n/**\n * Tests a character. Returns true if the character is [Romaji](https://en.wikipedia.org/wiki/Romaji) (allowing [Hepburn romanisation](https://en.wikipedia.org/wiki/Hepburn_romanization))\n * @param  {String} char character string to test\n * @return {Boolean}\n */\nfunction isCharRomaji(char = '') {\n  if (isEmpty(char)) return false;\n  return ROMAJI_RANGES.some(([start, end]) => isCharInRange(char, start, end));\n}\n\nexport default isCharRomaji;\n","import typeOf from './utils/typeOf';\nimport isEmpty from './utils/isEmpty';\nimport isCharRomaji from './utils/isCharRomaji';\n\n/**\n * Test if `input` is [Romaji](https://en.wikipedia.org/wiki/Romaji) (allowing [Hepburn romanisation](https://en.wikipedia.org/wiki/Hepburn_romanization))\n * @param  {String} [input=''] text\n * @param  {Regexp} [allowed] additional test allowed to pass for each char\n * @return {Boolean} true if [Romaji](https://en.wikipedia.org/wiki/Romaji)\n * @example\n * isRomaji('Tōkyō and Ōsaka')\n * // => true\n * isRomaji('12a*b&c-d')\n * // => true\n * isRomaji('あアA')\n * // => false\n * isRomaji('お願い')\n * // => false\n * isRomaji('a!b&cーd') // Zenkaku punctuation fails\n * // => false\n * isRomaji('a!b&cーd', /[!ー]/)\n * // => true\n */\nfunction isRomaji(input = '', allowed) {\n  const augmented = typeOf(allowed) === 'regexp';\n  return isEmpty(input)\n    ? false\n    : [...input].every((char) => {\n      const isRoma = isCharRomaji(char);\n      return !augmented ? isRoma : isRoma || allowed.test(char);\n    });\n}\n\nexport default isRomaji;\n","import {\n  KATAKANA_START,\n  KATAKANA_END,\n} from '../constants';\n\nimport isCharInRange from './isCharInRange';\n\n/**\n * Tests a character. Returns true if the character is [Katakana](https://en.wikipedia.org/wiki/Katakana).\n * @param  {String} char character string to test\n * @return {Boolean}\n */\nfunction isCharKatakana(char = '') {\n  return isCharInRange(char, KATAKANA_START, KATAKANA_END);\n}\n\nexport default isCharKatakana;\n","import isEmpty from './isEmpty';\nimport isCharHiragana from './isCharHiragana';\nimport isCharKatakana from './isCharKatakana';\n\n/**\n * Tests a character. Returns true if the character is [Hiragana](https://en.wikipedia.org/wiki/Hiragana) or [Katakana](https://en.wikipedia.org/wiki/Katakana).\n * @param  {String} char character string to test\n * @return {Boolean}\n */\nfunction isCharKana(char = '') {\n  if (isEmpty(char)) return false;\n  return isCharHiragana(char) || isCharKatakana(char);\n}\n\nexport default isCharKana;\n","import isEmpty from './utils/isEmpty';\nimport isCharKana from './utils/isCharKana';\n\n/**\n * Test if `input` is [Kana](https://en.wikipedia.org/wiki/Kana) ([Katakana](https://en.wikipedia.org/wiki/Katakana) and/or [Hiragana](https://en.wikipedia.org/wiki/Hiragana))\n * @param  {String} [input=''] text\n * @return {Boolean} true if all [Kana](https://en.wikipedia.org/wiki/Kana)\n * @example\n * isKana('あ')\n * // => true\n * isKana('ア')\n * // => true\n * isKana('あーア')\n * // => true\n * isKana('A')\n * // => false\n * isKana('あAア')\n * // => false\n */\nfunction isKana(input = '') {\n  if (isEmpty(input)) return false;\n  return [...input].every(isCharKana);\n}\n\nexport default isKana;\n","import isEmpty from './utils/isEmpty';\nimport isCharHiragana from './utils/isCharHiragana';\n\n/**\n * Test if `input` is [Hiragana](https://en.wikipedia.org/wiki/Hiragana)\n * @param  {String} [input=''] text\n * @return {Boolean} true if all [Hiragana](https://en.wikipedia.org/wiki/Hiragana)\n * @example\n * isHiragana('げーむ')\n * // => true\n * isHiragana('A')\n * // => false\n * isHiragana('あア')\n * // => false\n */\nfunction isHiragana(input = '') {\n  if (isEmpty(input)) return false;\n  return [...input].every(isCharHiragana);\n}\n\nexport default isHiragana;\n","import isEmpty from './utils/isEmpty';\nimport isCharKatakana from './utils/isCharKatakana';\n\n/**\n * Test if `input` is [Katakana](https://en.wikipedia.org/wiki/Katakana)\n * @param  {String} [input=''] text\n * @return {Boolean} true if all [Katakana](https://en.wikipedia.org/wiki/Katakana)\n * @example\n * isKatakana('ゲーム')\n * // => true\n * isKatakana('あ')\n * // => false\n * isKatakana('A')\n * // => false\n * isKatakana('あア')\n * // => false\n */\nfunction isKatakana(input = '') {\n  if (isEmpty(input)) return false;\n  return [...input].every(isCharKatakana);\n}\n\nexport default isKatakana;\n","import {\n  KANJI_START,\n  KANJI_END,\n} from '../constants';\n\nimport isCharInRange from './isCharInRange';\n/**\n * Tests a character. Returns true if the character is a CJK ideograph (kanji).\n * @param  {String} char character string to test\n * @return {Boolean}\n */\nfunction isCharKanji(char = '') {\n  return isCharInRange(char, KANJI_START, KANJI_END);\n}\n\nexport default isCharKanji;\n","import isEmpty from './utils/isEmpty';\nimport isCharKanji from './utils/isCharKanji';\n\n/**\n * Tests if `input` is [Kanji](https://en.wikipedia.org/wiki/Kanji) ([Japanese CJK ideographs](https://en.wikipedia.org/wiki/CJK_Unified_Ideographs))\n * @param  {String} [input=''] text\n * @return {Boolean} true if all [Kanji](https://en.wikipedia.org/wiki/Kanji)\n * @example\n * isKanji('刀')\n * // => true\n * isKanji('切腹')\n * // => true\n * isKanji('勢い')\n * // => false\n * isKanji('あAア')\n * // => false\n * isKanji('🐸')\n * // => false\n */\nfunction isKanji(input = '') {\n  if (isEmpty(input)) return false;\n  return [...input].every(isCharKanji);\n}\n\nexport default isKanji;\n","import isKanji from './isKanji';\nimport isHiragana from './isHiragana';\nimport isKatakana from './isKatakana';\nimport isRomaji from './isRomaji';\n\n/**\n * Test if `input` contains a mix of [Romaji](https://en.wikipedia.org/wiki/Romaji) *and* [Kana](https://en.wikipedia.org/wiki/Kana), defaults to pass through [Kanji](https://en.wikipedia.org/wiki/Kanji)\n * @param  {String} input text\n * @param  {Object} [options={ passKanji: true }] optional config to pass through kanji\n * @return {Boolean} true if mixed\n * @example\n * isMixed('Abあア'))\n * // => true\n * isMixed('お腹A')) // ignores kanji by default\n * // => true\n * isMixed('お腹A', { passKanji: false }))\n * // => false\n * isMixed('ab'))\n * // => false\n * isMixed('あア'))\n * // => false\n */\nfunction isMixed(input = '', options = { passKanji: true }) {\n  const chars = [...input];\n  let hasKanji = false;\n  if (!options.passKanji) {\n    hasKanji = chars.some(isKanji);\n  }\n  return (chars.some(isHiragana) || chars.some(isKatakana)) && chars.some(isRomaji) && !hasKanji;\n}\n\nexport default isMixed;\n","import { KATAKANA_START, HIRAGANA_START } from '../constants';\n\nimport isCharLongDash from './isCharLongDash';\nimport isCharSlashDot from './isCharSlashDot';\nimport isCharKatakana from './isCharKatakana';\nconst isCharInitialLongDash = (char, index) => isCharLongDash(char) && index < 1;\nconst isCharInnerLongDash = (char, index) => isCharLongDash(char) && index > 0;\nconst isKanaAsSymbol = (char) => ['ヶ', 'ヵ'].includes(char);\nconst LONG_VOWELS = {\n  a: 'あ',\n  i: 'い',\n  u: 'う',\n  e: 'え',\n  o: 'う',\n};\n\n// inject toRomaji to avoid circular dependency between toRomaji <-> katakanaToHiragana\nfunction katakanaToHiragana(input = '', toRomaji, isDestinationRomaji) {\n  let previousKana = '';\n\n  return input\n    .split('')\n    .reduce((hira, char, index) => {\n      // Short circuit to avoid incorrect codeshift for 'ー' and '・'\n      if (isCharSlashDot(char) || isCharInitialLongDash(char, index) || isKanaAsSymbol(char)) {\n        return hira.concat(char);\n        // Transform long vowels: 'オー' to 'おう'\n      } else if (previousKana && isCharInnerLongDash(char, index)) {\n        // Transform previousKana back to romaji, and slice off the vowel\n        const romaji = toRomaji(previousKana).slice(-1);\n        // However, ensure 'オー' => 'おお' => 'oo' if this is a transform on the way to romaji\n        if (isCharKatakana(input[index - 1]) && romaji === 'o' && isDestinationRomaji) {\n          return hira.concat('お');\n        }\n        return hira.concat(LONG_VOWELS[romaji]);\n      } else if (!isCharLongDash(char) && isCharKatakana(char)) {\n        // Shift charcode.\n        const code = char.charCodeAt(0) + (HIRAGANA_START - KATAKANA_START);\n        const hiraChar = String.fromCharCode(code);\n        previousKana = hiraChar;\n        return hira.concat(hiraChar);\n      }\n      // Pass non katakana chars through\n      previousKana = '';\n      return hira.concat(char);\n    }, [])\n    .join('');\n}\n\nexport default katakanaToHiragana;\n","import { transform, getSubTreeOf } from './kanaMapping';\nimport { ROMANIZATIONS } from '../constants';\n\nlet kanaToHepburnMap = null;\n\n/* eslint-disable */\n// prettier-ignore\nconst BASIC_ROMAJI = {\n  あ:'a',    い:'i',   う:'u',   え:'e',    お:'o',\n  か:'ka',   き:'ki',  く:'ku',  け:'ke',   こ:'ko',\n  さ:'sa',   し:'shi', す:'su',  せ:'se',   そ:'so',\n  た:'ta',   ち:'chi', つ:'tsu', て:'te',   と:'to',\n  な:'na',   に:'ni',  ぬ:'nu',  ね:'ne',   の:'no',\n  は:'ha',   ひ:'hi',  ふ:'fu',  へ:'he',   ほ:'ho',\n  ま:'ma',   み:'mi',  む:'mu',  め:'me',   も:'mo',\n  ら:'ra',   り:'ri',  る:'ru',  れ:'re',   ろ:'ro',\n  や:'ya',   ゆ:'yu',  よ:'yo',\n  わ:'wa',   ゐ:'wi',  ゑ:'we',  を:'wo',\n  ん: 'n',\n  が:'ga',   ぎ:'gi',  ぐ:'gu',  げ:'ge',   ご:'go',\n  ざ:'za',   じ:'ji',  ず:'zu',  ぜ:'ze',   ぞ:'zo',\n  だ:'da',   ぢ:'ji',  づ:'zu',  で:'de',   ど:'do',\n  ば:'ba',   び:'bi',  ぶ:'bu',  べ:'be',   ぼ:'bo',\n  ぱ:'pa',   ぴ:'pi',  ぷ:'pu',  ぺ:'pe',   ぽ:'po',\n  ゔぁ:'va', ゔぃ:'vi', ゔ:'vu',  ゔぇ:'ve', ゔぉ:'vo',\n};\n/* eslint-enable  */\n\nconst SPECIAL_SYMBOLS = {\n  '。': '.',\n  '、': ',',\n  ':': ':',\n  '・': '/',\n  '!': '!',\n  '?': '?',\n  '〜': '~',\n  'ー': '-',\n  '「': '‘',\n  '」': '’',\n  '『': '“',\n  '』': '”',\n  '[': '[',\n  ']': ']',\n  '(': '(',\n  ')': ')',\n  '{': '{',\n  '}': '}',\n  ' ': ' ',\n};\n\n// んい -> n'i\nconst AMBIGUOUS_VOWELS = ['あ', 'い', 'う', 'え', 'お', 'や', 'ゆ', 'よ'];\nconst SMALL_Y = { ゃ: 'ya', ゅ: 'yu', ょ: 'yo' };\nconst SMALL_Y_EXTRA = { ぃ: 'yi', ぇ: 'ye' };\nconst SMALL_AIUEO = {\n  ぁ: 'a',\n  ぃ: 'i',\n  ぅ: 'u',\n  ぇ: 'e',\n  ぉ: 'o',\n};\nconst YOON_KANA = ['き', 'に', 'ひ', 'み', 'り', 'ぎ', 'び', 'ぴ', 'ゔ', 'く', 'ふ'];\nconst YOON_EXCEPTIONS = {\n  し: 'sh',\n  ち: 'ch',\n  じ: 'j',\n  ぢ: 'j',\n};\nconst SMALL_KANA = {\n  っ: '',\n  ゃ: 'ya',\n  ゅ: 'yu',\n  ょ: 'yo',\n  ぁ: 'a',\n  ぃ: 'i',\n  ぅ: 'u',\n  ぇ: 'e',\n  ぉ: 'o',\n};\n\n// going with the intuitive (yet incorrect) solution where っや -> yya and っぃ -> ii\n// in other words, just assume the sokuon could have been applied to anything\nconst SOKUON_WHITELIST = {\n  b: 'b',\n  c: 't',\n  d: 'd',\n  f: 'f',\n  g: 'g',\n  h: 'h',\n  j: 'j',\n  k: 'k',\n  m: 'm',\n  p: 'p',\n  q: 'q',\n  r: 'r',\n  s: 's',\n  t: 't',\n  v: 'v',\n  w: 'w',\n  x: 'x',\n  z: 'z',\n};\n\nfunction getKanaToHepburnTree() {\n  if (kanaToHepburnMap == null) {\n    kanaToHepburnMap = createKanaToHepburnMap();\n  }\n  return kanaToHepburnMap;\n}\n\nexport function getKanaToRomajiTree(fullOptions) {\n  switch (fullOptions.romanization) {\n    case ROMANIZATIONS.HEPBURN:\n      return getKanaToHepburnTree(fullOptions);\n    default:\n      return {};\n  }\n}\n\nfunction createKanaToHepburnMap() {\n  const romajiTree = transform(BASIC_ROMAJI);\n\n  const subtreeOf = (string) => getSubTreeOf(romajiTree, string);\n  const setTrans = (string, transliteration) => {\n    subtreeOf(string)[''] = transliteration;\n  };\n\n  Object.entries(SPECIAL_SYMBOLS).forEach(([jsymbol, symbol]) => {\n    subtreeOf(jsymbol)[''] = symbol;\n  });\n\n  [...Object.entries(SMALL_Y), ...Object.entries(SMALL_AIUEO)].forEach(([roma, kana]) => {\n    setTrans(roma, kana);\n  });\n\n  // きゃ -> kya\n  YOON_KANA.forEach((kana) => {\n    const firstRomajiChar = subtreeOf(kana)[''][0];\n    Object.entries(SMALL_Y).forEach(([yKana, yRoma]) => {\n      setTrans(kana + yKana, firstRomajiChar + yRoma);\n    });\n    // きぃ -> kyi\n    Object.entries(SMALL_Y_EXTRA).forEach(([yKana, yRoma]) => {\n      setTrans(kana + yKana, firstRomajiChar + yRoma);\n    });\n  });\n\n  Object.entries(YOON_EXCEPTIONS).forEach(([kana, roma]) => {\n    // じゃ -> ja\n    Object.entries(SMALL_Y).forEach(([yKana, yRoma]) => {\n      setTrans(kana + yKana, roma + yRoma[1]);\n    });\n    // じぃ -> jyi, じぇ -> je\n    setTrans(`${kana}ぃ`, `${roma}yi`);\n    setTrans(`${kana}ぇ`, `${roma}e`);\n  });\n\n  romajiTree['っ'] = resolveTsu(romajiTree);\n\n  Object.entries(SMALL_KANA).forEach(([kana, roma]) => {\n    setTrans(kana, roma);\n  });\n\n  AMBIGUOUS_VOWELS.forEach((kana) => {\n    setTrans(`ん${kana}`, `n'${subtreeOf(kana)['']}`);\n  });\n\n  // NOTE: could be re-enabled with an option?\n  // // んば -> mbo\n  // const LABIAL = [\n  //   'ば', 'び', 'ぶ', 'べ', 'ぼ',\n  //   'ぱ', 'ぴ', 'ぷ', 'ぺ', 'ぽ',\n  //   'ま', 'み', 'む', 'め', 'も',\n  // ];\n  // LABIAL.forEach((kana) => {\n  //   setTrans(`ん${kana}`, `m${subtreeOf(kana)['']}`);\n  // });\n\n  return Object.freeze(JSON.parse(JSON.stringify(romajiTree)));\n}\n\nfunction resolveTsu(tree) {\n  return Object.entries(tree).reduce((tsuTree, [key, value]) => {\n    if (!key) {\n      // we have reached the bottom of this branch\n      const consonant = value.charAt(0);\n      tsuTree[key] = Object.keys(SOKUON_WHITELIST).includes(consonant)\n        ? SOKUON_WHITELIST[consonant] + value\n        : value;\n    } else {\n      // more subtrees\n      tsuTree[key] = resolveTsu(value);\n    }\n    return tsuTree;\n  }, {});\n}\n","import mergeWithDefaultOptions from './utils/mergeWithDefaultOptions';\nimport katakanaToHiragana from './utils/katakanaToHiragana';\nimport isKatakana from './isKatakana';\nimport { getKanaToRomajiTree } from './utils/kanaToRomajiMap';\nimport { applyMapping, mergeCustomMapping } from './utils/kanaMapping';\n\n/**\n * Convert kana to romaji\n * @param  {String} kana text input\n * @param  {DefaultOptions} [options=defaultOptions]\n * @return {String} converted text\n * @example\n * toRomaji('ひらがな カタカナ')\n * // => 'hiragana katakana'\n * toRomaji('げーむ ゲーム')\n * // => 'ge-mu geemu'\n * toRomaji('ひらがな カタカナ', { upcaseKatakana: true })\n * // => 'hiragana KATAKANA'\n * toRomaji('つじぎり', { customRomajiMapping: { じ: 'zi', つ: 'tu', り: 'li' } });\n * // => 'tuzigili'\n */\nexport function toRomaji(input = '', options = {}) {\n  const mergedOptions = mergeWithDefaultOptions(options);\n  // just throw away the substring index information and just concatenate all the kana\n  return splitIntoRomaji(input, mergedOptions)\n    .map((romajiToken) => {\n      const [start, end, romaji] = romajiToken;\n      const makeUpperCase = options.upcaseKatakana && isKatakana(input.slice(start, end));\n      return makeUpperCase ? romaji.toUpperCase() : romaji;\n    })\n    .join('');\n}\n\nlet customMapping = null;\nfunction splitIntoRomaji(input, options) {\n  let map = getKanaToRomajiTree(options);\n\n  if (options.customRomajiMapping) {\n    if (customMapping == null) {\n      customMapping = mergeCustomMapping(map, options.customRomajiMapping);\n    }\n    map = customMapping;\n  }\n\n  return applyMapping(katakanaToHiragana(input, toRomaji, true), map, !options.IMEMode);\n}\n\nexport default toRomaji;\n","import isEmpty from './isEmpty';\nimport { EN_PUNCTUATION_RANGES } from '../constants';\nimport isCharInRange from './isCharInRange';\n\n/**\n * Tests a character. Returns true if the character is considered English punctuation.\n * @param  {String} char character string to test\n * @return {Boolean}\n */\nfunction isCharEnglishPunctuation(char = '') {\n  if (isEmpty(char)) return false;\n  return EN_PUNCTUATION_RANGES.some(([start, end]) => isCharInRange(char, start, end));\n}\n\nexport default isCharEnglishPunctuation;\n","import isEmpty from './isEmpty';\nimport { JA_PUNCTUATION_RANGES } from '../constants';\nimport isCharInRange from './isCharInRange';\n\n/**\n * Tests a character. Returns true if the character is considered English punctuation.\n * @param  {String} char character string to test\n * @return {Boolean}\n */\nfunction isCharJapanesePunctuation(char = '') {\n  if (isEmpty(char)) return false;\n  return JA_PUNCTUATION_RANGES.some(([start, end]) => isCharInRange(char, start, end));\n}\n\nexport default isCharJapanesePunctuation;\n","import isEmpty from './utils/isEmpty';\nimport isCharEnglishPunctuation from './utils/isCharEnglishPunctuation';\nimport isCharJapanesePunctuation from './utils/isCharJapanesePunctuation';\nimport isCharRomaji from './utils/isCharRomaji';\nimport isCharKanji from './utils/isCharKanji';\nimport isCharHiragana from './utils/isCharHiragana';\nimport isCharKatakana from './utils/isCharKatakana';\nimport isCharJapanese from './utils/isCharJapanese';\n\nconst isCharEnSpace = (x) => x === ' ';\nconst isCharJaSpace = (x) => x === ' ';\nconst isCharJaNum = (x) => /[0-9]/.test(x);\nconst isCharEnNum = (x) => /[0-9]/.test(x);\n\nexport const TOKEN_TYPES = {\n  EN: 'en',\n  JA: 'ja',\n  EN_NUM: 'englishNumeral',\n  JA_NUM: 'japaneseNumeral',\n  EN_PUNC: 'englishPunctuation',\n  JA_PUNC: 'japanesePunctuation',\n  KANJI: 'kanji',\n  HIRAGANA: 'hiragana',\n  KATAKANA: 'katakana',\n  SPACE: 'space',\n  OTHER: 'other',\n};\n\n// prettier-ignore\nexport function getType(input, compact = false) {\n  const {\n    EN, JA, EN_NUM, JA_NUM, EN_PUNC, JA_PUNC, KANJI, HIRAGANA, KATAKANA, SPACE, OTHER,\n  } = TOKEN_TYPES;\n\n  if (compact) {\n    switch (true) {\n      case isCharJaNum(input): return OTHER;\n      case isCharEnNum(input): return OTHER;\n      case isCharEnSpace(input): return EN;\n      case isCharEnglishPunctuation(input): return OTHER;\n      case isCharJaSpace(input): return JA;\n      case isCharJapanesePunctuation(input): return OTHER;\n      case isCharJapanese(input): return JA;\n      case isCharRomaji(input): return EN;\n      default: return OTHER;\n    }\n  } else {\n    switch (true) {\n      case isCharJaSpace(input): return SPACE;\n      case isCharEnSpace(input): return SPACE;\n      case isCharJaNum(input): return JA_NUM;\n      case isCharEnNum(input): return EN_NUM;\n      case isCharEnglishPunctuation(input): return EN_PUNC;\n      case isCharJapanesePunctuation(input): return JA_PUNC;\n      case isCharKanji(input): return KANJI;\n      case isCharHiragana(input): return HIRAGANA;\n      case isCharKatakana(input): return KATAKANA;\n      case isCharJapanese(input): return JA;\n      case isCharRomaji(input): return EN;\n      default: return OTHER;\n    }\n  }\n}\n\n/**\n * Splits input into array of strings separated by opinionated token types\n * `'en', 'ja', 'englishNumeral', 'japaneseNumeral','englishPunctuation', 'japanesePunctuation','kanji', 'hiragana', 'katakana', 'space', 'other'`.\n * If `{ compact: true }` then many same-language tokens are combined (spaces + text, kanji + kana, numeral + punctuation).\n * If `{ detailed: true }` then return array will contain `{ type, value }` instead of `'value'`\n * @param  {String} input text\n * @param  {Object} [options={ compact: false, detailed: false}] options to modify output style\n * @return {String|Object[]} text split into tokens containing values, or detailed object\n * @example\n * tokenize('ふふフフ')\n * // ['ふふ', 'フフ']\n *\n * tokenize('感じ')\n * // ['感', 'じ']\n *\n * tokenize('truly 私は悲しい')\n * // ['truly', ' ', '私', 'は', '悲', 'しい']\n *\n * tokenize('truly 私は悲しい', { compact: true })\n * // ['truly ', '私は悲しい']\n *\n * tokenize('5romaji here...!?漢字ひらがな4カタ カナ「SHIO」。!')\n * // [ '5', 'romaji', ' ', 'here', '...!?', '漢字', 'ひらがな', 'カタ', ' ', 'カナ', '4', '「', 'SHIO', '」。!']\n *\n * tokenize('5romaji here...!?漢字ひらがな4カタ カナ「SHIO」。!', { compact: true })\n * // [ '5', 'romaji here', '...!?', '漢字ひらがなカタ カナ', '4「', 'SHIO', '」。!']\n *\n * tokenize('5romaji here...!?漢字ひらがなカタ カナ4「SHIO」。! لنذهب', { detailed: true })\n * // [\n *  { type: 'englishNumeral', value: '5' },\n *  { type: 'en', value: 'romaji' },\n *  { type: 'space', value: ' ' },\n *  { type: 'en', value: 'here' },\n *  { type: 'englishPunctuation', value: '...!?' },\n *  { type: 'kanji', value: '漢字' },\n *  { type: 'hiragana', value: 'ひらがな' },\n *  { type: 'katakana', value: 'カタ' },\n *  { type: 'space', value: ' ' },\n *  { type: 'katakana', value: 'カナ' },\n *  { type: 'japaneseNumeral', value: '4' },\n *  { type: 'japanesePunctuation', value: '「' },\n *  { type: 'ja', value: 'SHIO' },\n *  { type: 'japanesePunctuation', value: '」。!' },\n *  { type: 'space', value: ' ' },\n *  { type: 'other', value: 'لنذهب' },\n * ]\n *\n * tokenize('5romaji here...!?漢字ひらがなカタ カナ4「SHIO」。! لنذهب', { compact: true, detailed: true})\n * // [\n *  { type: 'other', value: '5' },\n *  { type: 'en', value: 'romaji here' },\n *  { type: 'other', value: '...!?' },\n *  { type: 'ja', value: '漢字ひらがなカタ カナ' },\n *  { type: 'other', value: '4「' },\n *  { type: 'ja', value: 'SHIO' },\n *  { type: 'other', value: '」。!' },\n *  { type: 'en', value: ' ' },\n *  { type: 'other', value: 'لنذهب' },\n *]\n */\nfunction tokenize(input, { compact = false, detailed = false } = {}) {\n  if (input == null || isEmpty(input)) {\n    return [];\n  }\n  const chars = [...input];\n  let initial = chars.shift();\n  let prevType = getType(initial, compact);\n  initial = detailed ? { type: prevType, value: initial } : initial;\n\n  const result = chars.reduce(\n    (tokens, char) => {\n      const currType = getType(char, compact);\n      const sameType = currType === prevType;\n      prevType = currType;\n      let newValue = char;\n\n      if (sameType) {\n        newValue = (detailed ? tokens.pop().value : tokens.pop()) + newValue;\n      }\n\n      return detailed\n        ? tokens.concat({ type: currType, value: newValue })\n        : tokens.concat(newValue);\n    },\n    [initial]\n  );\n  return result;\n}\n\nexport default tokenize;\n","import isJapanese from './isJapanese';\nimport isKana from './isKana';\nimport isKanji from './isKanji';\nimport tokenize from './tokenize';\n\nconst isLeadingWithoutInitialKana = (input, leading) => leading && !isKana(input[0]);\nconst isTrailingWithoutFinalKana = (input, leading) => !leading && !isKana(input[input.length - 1]);\nconst isInvalidMatcher = (input, matchKanji) =>\n  (matchKanji && ![...matchKanji].some(isKanji)) || (!matchKanji && isKana(input));\n\n/**\n * Strips [Okurigana](https://en.wikipedia.org/wiki/Okurigana)\n * @param  {String} input text\n * @param  {Object} [options={ leading: false, matchKanji: '' }] optional config\n * @return {String} text with okurigana removed\n * @example\n * stripOkurigana('踏み込む')\n * // => '踏み込'\n * stripOkurigana('お祝い')\n * // => 'お祝'\n * stripOkurigana('お腹', { leading: true });\n * // => '腹'\n * stripOkurigana('ふみこむ', { matchKanji: '踏み込む' });\n * // => 'ふみこ'\n * stripOkurigana('おみまい', { matchKanji: 'お祝い', leading: true });\n * // => 'みまい'\n */\nfunction stripOkurigana(input = '', { leading = false, matchKanji = '' } = {}) {\n  if (\n    !isJapanese(input) ||\n    isLeadingWithoutInitialKana(input, leading) ||\n    isTrailingWithoutFinalKana(input, leading) ||\n    isInvalidMatcher(input, matchKanji)\n  ) {\n    return input;\n  }\n\n  const chars = matchKanji || input;\n  const okuriganaRegex = new RegExp(\n    leading ? `^${tokenize(chars).shift()}` : `${tokenize(chars).pop()}$`\n  );\n  return input.replace(okuriganaRegex, '');\n}\n\nexport default stripOkurigana;\n","import { findListeners, untrackListeners } from './utils/dom';\nimport { removeDebugListeners } from './utils/logInputEvents';\n\n/**\n * Unbinds eventListener from input field\n * @param  {HTMLElement} element textarea, input\n */\nexport function unbind(element, debug = false) {\n  const listeners = findListeners(element);\n  if (listeners == null) {\n    throw new Error(\n      `Element provided to Wanakana unbind() had no listener registered.\\n Received: ${JSON.stringify(\n        element\n      )}`\n    );\n  }\n  const { inputHandler, compositionHandler } = listeners;\n  element.removeAttribute('data-wanakana-id');\n  element.removeAttribute('data-ignore-composition');\n  element.removeEventListener('input', inputHandler);\n  element.removeEventListener('compositionstart', compositionHandler);\n  element.removeEventListener('compositionupdate', compositionHandler);\n  element.removeEventListener('compositionend', compositionHandler);\n  untrackListeners(listeners);\n  if (debug === true) {\n    removeDebugListeners(element);\n  }\n}\n\nexport default unbind;\n","import mergeWithDefaultOptions from './utils/mergeWithDefaultOptions';\nimport katakanaToHiragana from './utils/katakanaToHiragana';\nimport isCharEnglishPunctuation from './utils/isCharEnglishPunctuation';\nimport isRomaji from './isRomaji';\nimport isMixed from './isMixed';\nimport toKana from './toKana';\nimport toRomaji from './toRomaji';\n\n/**\n * Convert input to [Hiragana](https://en.wikipedia.org/wiki/Hiragana)\n * @param  {String} [input=''] text\n * @param  {DefaultOptions} [options=defaultOptions]\n * @return {String} converted text\n * @example\n * toHiragana('toukyou, オオサカ')\n * // => 'とうきょう、 おおさか'\n * toHiragana('only カナ', { passRomaji: true })\n * // => 'only かな'\n * toHiragana('wi')\n * // => 'うぃ'\n * toHiragana('wi', { useObsoleteKana: true })\n * // => 'ゐ'\n */\nfunction toHiragana(input = '', options = {}) {\n  const config = mergeWithDefaultOptions(options);\n  if (config.passRomaji) {\n    return katakanaToHiragana(input, toRomaji);\n  }\n\n  if (isMixed(input, { passKanji: true })) {\n    const convertedKatakana = katakanaToHiragana(input, toRomaji);\n    return toKana(convertedKatakana.toLowerCase(), config);\n  }\n\n  if (isRomaji(input) || isCharEnglishPunctuation(input)) {\n    return toKana(input.toLowerCase(), config);\n  }\n\n  return katakanaToHiragana(input, toRomaji);\n}\n\nexport default toHiragana;\n","import mergeWithDefaultOptions from './utils/mergeWithDefaultOptions';\nimport hiraganaToKatakana from './utils/hiraganaToKatakana';\nimport isCharEnglishPunctuation from './utils/isCharEnglishPunctuation';\nimport toKana from './toKana';\nimport isRomaji from './isRomaji';\nimport isMixed from './isMixed';\n\n/**\n * Convert input to [Katakana](https://en.wikipedia.org/wiki/Katakana)\n * @param  {String} [input=''] text\n * @param  {DefaultOptions} [options=defaultOptions]\n * @return {String} converted text\n * @example\n * toKatakana('toukyou, おおさか')\n * // => 'トウキョウ、 オオサカ'\n * toKatakana('only かな', { passRomaji: true })\n * // => 'only カナ'\n * toKatakana('wi')\n * // => 'ウィ'\n * toKatakana('wi', { useObsoleteKana: true })\n * // => 'ヰ'\n */\nfunction toKatakana(input = '', options = {}) {\n  const mergedOptions = mergeWithDefaultOptions(options);\n  if (mergedOptions.passRomaji) {\n    return hiraganaToKatakana(input);\n  }\n\n  if (isMixed(input) || isRomaji(input) || isCharEnglishPunctuation(input)) {\n    const hiragana = toKana(input.toLowerCase(), mergedOptions);\n    return hiraganaToKatakana(hiragana);\n  }\n\n  return hiraganaToKatakana(input);\n}\n\nexport default toKatakana;\n"],"names":["global","module","window","Math","self","Function","__g","core","version","__e","it","isObject","TypeError","exec","e","require$$0","Object","defineProperty","get","a","document","is","createElement","require$$1","require$$2","S","fn","val","toString","call","valueOf","dP","O","P","Attributes","anObject","toPrimitive","IE8_DOM_DEFINE","value","bitmap","enumerable","configurable","writable","object","key","f","createDesc","hasOwnProperty","id","px","random","concat","undefined","SRC","$toString","TPL","split","inspectSource","safe","isFunction","has","hide","join","String","prototype","this","that","length","aFunction","b","c","apply","arguments","$export","type","name","source","own","out","exp","IS_FORCED","F","IS_GLOBAL","G","IS_PROTO","IS_BIND","B","target","exports","expProto","ctx","redefine","U","W","R","Typed","TYPED","uid","VIEW","ABV","ArrayBuffer","DataView","CONSTR","i","TypedArrayConstructors","src","Constructor","forbiddenField","ceil","floor","isNaN","min","toInteger","number","toLength","RangeError","slice","propertyIsEnumerable","cof","IObject","defined","max","index","IS_INCLUDES","$this","el","fromIndex","toIObject","toAbsoluteIndex","store","shared","arrayIndexOf","IE_PROTO","names","result","push","hiddenKeys","getOwnPropertyNames","$keys","toObject","aLen","end","endPos","Symbol","USE_SYMBOL","def","TAG","tag","stat","gOPN","PROTOTYPE","WRONG_INDEX","$ArrayBuffer","$DataView","Infinity","BaseBuffer","abs","pow","log","LN2","$BUFFER","DESCRIPTORS","$LENGTH","$OFFSET","packIEEE754","mLen","nBytes","m","buffer","Array","eLen","eMax","eBias","rt","s","unpackIEEE754","nBits","NaN","unpackI32","bytes","packI8","packI16","packI32","packF64","packF32","addGetter","C","internal","view","isLittleEndian","intIndex","toIndex","start","pack","_b","reverse","set","conversion","$typed","fails","ArrayBufferProto","anInstance","keys","j","LIBRARY","constructor","$setInt8","setInt8","getInt8","redefineAll","byteOffset","setUint8","byteLength","arrayFill","bufferLength","offset","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","setToStringTag","SPECIES","D","KEY","$isView","isView","$slice","len","first","final","speciesConstructor","viewS","viewT","ARG","T","tryGet","callee","ITERATOR","ArrayProto","Iterators","enumBugKeys","defineProperties","Properties","getKeys","documentElement","Empty","createDict","iframeDocument","iframe","style","display","appendChild","contentWindow","open","write","lt","close","create","dPs","ObjectProto","getPrototypeOf","getIteratorMethod","classof","isArray","arg","original","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","asc","callbackfn","res","UNSCOPABLES","done","IteratorPrototype","NAME","next","descriptor","BUGGY","returnThis","Base","DEFAULT","IS_SET","FORCED","$iterCreate","methods","getMethod","kind","proto","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","values","iterated","_t","_i","_k","step","Arguments","SAFE_CLOSING","skipClosing","arr","iter","copyWithin","to","from","count","inc","gOPD","getOwnPropertyDescriptor","pIE","require$$3","require$$4","require$$5","require$$7","require$$8","propertyDesc","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","isArrayIter","require$$21","require$$22","require$$23","require$$24","getIterFn","require$$25","require$$26","wks","require$$27","createArrayMethod","require$$28","createArrayIncludes","require$$29","require$$30","ArrayIterators","require$$31","require$$32","$iterDetect","require$$33","setSpecies","require$$34","require$$35","arrayCopyWithin","require$$36","$DP","require$$37","$GOPD","require$$38","Uint8Array","require$$6","arrayForEach","arrayFilter","arraySome","arrayEvery","arrayFind","arrayFindIndex","arrayIncludes","arrayValues","arrayKeys","arrayEntries","arrayLastIndexOf","lastIndexOf","arrayReduce","reduce","arrayReduceRight","reduceRight","arrayJoin","arraySort","sort","arraySlice","arrayToString","arrayToLocaleString","toLocaleString","TYPED_CONSTRUCTOR","DEF_CONSTRUCTOR","ALL_CONSTRUCTORS","TYPED_ARRAY","$map","allocate","LITTLE_ENDIAN","Uint16Array","FORCED_SET","toOffset","BYTES","validate","speciesFromList","list","fromList","_d","$from","iterator","mapfn","mapping","iterFn","$of","TO_LOCALE_BUG","$toLocaleString","every","fill","filter","find","predicate","findIndex","forEach","indexOf","searchElement","includes","separator","map","middle","some","comparefn","subarray","begin","$begin","BYTES_PER_ELEMENT","$set","arrayLike","$iterators","isTAIndex","$getDesc","$setDesc","desc","$TypedArrayPrototype$","wrapper","CLAMPED","GETTER","SETTER","TypedArray","TAC","TypedArrayPrototype","addElement","data","v","o","getter","round","setter","$offset","$length","klass","$len","l","$nativeIterator","CORRECT_ITER_NAME","$iterator","of","init","ret","BREAK","RETURN","iterable","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","meta","NEED","fastKey","getWeak","onFreeze","SIZE","getEntry","entry","_f","n","k","getConstructor","ADDER","_l","forOf","clear","r","p","delete","prev","setStrong","$iterDefine","check","setPrototypeOf","test","buggy","__proto__","common","IS_WEAK","fixMethod","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","inheritIfRequired","strong","add","getOwnPropertySymbols","$assign","assign","A","K","getSymbols","gOPS","isEnum","uncaughtFrozenStore","UncaughtFrozenStore","findUncaughtFrozen","splice","$has","ufstore","InternalMap","each","weak","tmp","$WeakMap","freeze","method","rApply","Reflect","fApply","thisArgument","argumentsList","L","args","un","factories","bind","partArgs","bound","construct","invoke","rConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","propertyKey","attributes","deleteProperty","receiver","getProto","$isExtensible","ownKeys","$preventExtensions","V","existingDescriptor","ownDesc","setProto","defer","channel","port","process","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","counter","queue","run","listener","event","nextTick","now","port2","port1","onmessage","postMessage","addEventListener","importScripts","cel","html","removeChild","setTimeout","macrotask","Observer","MutationObserver","WebKitMutationObserver","Promise","isNode","head","last","notify","flush","parent","domain","exit","enter","navigator","standalone","resolve","promise","then","toggle","node","createTextNode","observe","characterData","task","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","reject","$$resolve","$$reject","x","promiseCapability","newPromiseCapability","microtask","$Promise","empty","newPromiseCapabilityModule","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","isReject","_n","chain","_c","_v","ok","_s","reaction","exited","handler","fail","_h","onHandleUnhandled","onUnhandled","console","unhandled","isUnhandled","perform","emit","onunhandledrejection","reason","error","_a","onrejectionhandled","$reject","_w","$resolve","executor","err","onFulfilled","onRejected","catch","capability","promiseResolve","all","remaining","$index","alreadyCalled","race","$Symbol","charAt","wksExt","symbols","windowNames","getWindowNames","gOPNExt","$JSON","JSON","_stringify","stringify","HIDDEN","TO_PRIMITIVE","SymbolRegistry","AllSymbols","OPSymbols","QObject","findChild","setSymbolDesc","$fails","_create","protoDesc","wrap","sym","isSymbol","$defineProperty","$defineProperties","enumKeys","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","es6Symbols","wellKnownSymbols","wksDefine","for","keyFor","useSetter","useSimple","replacer","$replacer","$freeze","$seal","$isFrozen","$isSealed","$getPrototypeOf","y","FProto","nameRE","match","raw","callSite","tpl","fromCharCode","$fromCodePoint","fromCodePoint","code","TO_STRING","pos","charCodeAt","$at","codePointAt","str","repeat","MATCH","isRegExp","searchString","re","$startsWith","startsWith","context","search","$endsWith","endsWith","endPosition","ignoreCase","multiline","unicode","sticky","flags","RegExp","SYMBOL","fns","strfn","rxfn","string","$match","regexp","REPLACE","$replace","searchValue","replaceValue","SPLIT","$split","_split","$push","NPCG","limit","separator2","lastIndex","lastLength","output","lastLastIndex","splitLimit","separatorCopy","replace","SEARCH","$search","createProperty","$find","forced","_isFinite","isFinite","isInteger","isSafeInteger","EPSILON","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","log1p","sqrt","$acosh","acosh","Number","MAX_VALUE","$asinh","asinh","$atanh","atanh","sign","cbrt","clz32","LOG2E","cosh","$expm1","expm1","EPSILON32","MAX32","MIN32","fround","$abs","$sign","hypot","value1","value2","div","sum","larg","$imul","imul","xn","yn","xl","yl","log10","LOG10E","log2","sinh","tanh","trunc","$includes","isEntries","$values","getOwnPropertyDescriptors","getDesc","maxLength","fillString","left","stringLength","fillStr","intMaxLength","fillLen","stringFiller","userAgent","padStart","$pad","padEnd","time","boundArgs","setInterval","$task","TO_STRING_TAG","ArrayValues","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","collections","explicit","Collection","Op","hasOwn","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","runtime","regeneratorRuntime","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","NativeIteratorPrototype","Gp","GeneratorFunctionPrototype","Generator","GeneratorFunction","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","__await","defineIteratorMethods","AsyncIterator","async","innerFn","outerFn","tryLocsList","pop","Context","reset","skipTempReset","sent","_sent","delegate","tryEntries","resetTryEntry","stop","rootRecord","completion","rval","dispatchException","exception","handle","loc","caught","record","tryLoc","hasCatch","hasFinally","catchLoc","finallyLoc","Error","abrupt","finallyEntry","complete","afterLoc","finish","thrown","delegateYield","resultName","nextLoc","generator","_invoke","state","doneResult","delegateResult","maybeInvokeDelegate","tryCatch","makeInvokeMethod","obj","unwrapped","previousPromise","callInvokeWithMethodAndArg","return","info","pushTryEntry","locs","iteratorMethod","typeOf","toLowerCase","isEmpty","input","isCharInRange","char","TO_KANA_METHODS","ROMANIZATIONS","DEFAULT_OPTIONS","HEPBURN","LATIN_UPPERCASE_START","LATIN_UPPERCASE_END","HIRAGANA_START","HIRAGANA_END","KATAKANA_START","KATAKANA_END","KANJI_START","KANJI_END","PROLONGED_SOUND_MARK","KANA_SLASH_DOT","KANA_PUNCTUATION","JA_PUNCTUATION_RANGES","JAPANESE_RANGES","ROMAJI_RANGES","EN_PUNCTUATION_RANGES","isCharJapanese","isJapanese","allowed","augmented","isJa","mergeWithDefaultOptions","applyMapping","convertEnding","root","newChunk","currentCursor","firstChar","parse","tree","lastCursor","subtree","nextChar","nextSubtree","transform","endOfBranch","getSubTreeOf","correctSubTree","createCustomMapping","customMap","customTree","kana","subTree","transformMap","mapSubtree","customSubtree","newSubtree","mergeCustomMapping","customMapping","BASIC_KUNREI","u","SPECIAL_SYMBOLS","CONSONANTS","SMALL_Y","ya","yi","yu","ye","yo","SMALL_VOWELS","ALIASES","SMALL_LETTERS","SPECIAL_CASES","AIUEO_CONSTRUCTIONS","createRomajiToKanaMap","kanaTree","subtreeOf","consonant","yKana","jsymbol","aiueoKana","nChar","alternative","allExceptLast","kunreiRoma","chars","xSubtree","alt","roma","altRoma","prefix","addTsu","tsuTree","romajiToKanaMap","USE_OBSOLETE_KANA_MAP","wi","we","isCharUpperCase","isCharLongDash","isCharSlashDot","isCharHiragana","hiraganaToKatakana","kata","toKana","options","config","IMEMode","splitIntoConvertedKana","kanaToken","enforceHiragana","HIRAGANA","enforceKatakana","KATAKANA","mapCopy","IME_MODE_MAP","useObsoleteKana","customKanaMapping","LISTENERS","makeOnInput","mergedConfig","preConfiguredMap","triggers","toUpperCase","dataset","ignoreComposition","prevInput","text","cursor","toConvert","tail","catalystChars","takeWhileAndSlice","workFromStart","startIndex","workBackwards","splitInput","selectionEnd","textToConvert","convertedText","newCursor","newValue","setSelectionRange","onComposition","platform","events","selectionStart","addDebugListeners","removeDebugListeners","removeEventListener","ELEMENTS","idCounter","newId","Date","isCharRomaji","isRomaji","isRoma","isCharKatakana","isCharKana","isKana","isHiragana","isKatakana","isCharKanji","isKanji","isMixed","passKanji","hasKanji","isCharInitialLongDash","isCharInnerLongDash","isKanaAsSymbol","LONG_VOWELS","katakanaToHiragana","toRomaji","isDestinationRomaji","previousKana","hira","romaji","hiraChar","kanaToHepburnMap","BASIC_ROMAJI","い","う","え","お","き","く","け","こ","し","す","せ","そ","ち","つ","て","と","に","ぬ","ね","の","ひ","ふ","へ","ほ","み","む","め","も","り","る","れ","ろ","ゆ","よ","ゐ","ゑ","を","ぎ","ぐ","げ","ご","じ","ず","ぜ","ぞ","ぢ","づ","で","ど","び","ぶ","べ","ぼ","ぴ","ぷ","ぺ","ぽ","ゔぃ","ゔ","ゔぇ","ゔぉ","AMBIGUOUS_VOWELS","ゃ","ゅ","ょ","SMALL_Y_EXTRA","ぃ","ぇ","SMALL_AIUEO","YOON_KANA","YOON_EXCEPTIONS","SMALL_KANA","SOKUON_WHITELIST","getKanaToHepburnTree","romajiTree","setTrans","transliteration","symbol","firstRomajiChar","resolveTsu","mergedOptions","fullOptions","romanization","getKanaToRomajiTree","customRomajiMapping","splitIntoRomaji","romajiToken","upcaseKatakana","isCharEnglishPunctuation","isCharJapanesePunctuation","isCharEnSpace","isCharJaSpace","isCharJaNum","isCharEnNum","TOKEN_TYPES","getType","EN","JA","EN_NUM","JA_NUM","EN_PUNC","JA_PUNC","KANJI","SPACE","OTHER","tokenize","compact","detailed","initial","shift","prevType","tokens","currType","sameType","isLeadingWithoutInitialKana","leading","isTrailingWithoutFinalKana","isInvalidMatcher","matchKanji","element","debug","nodeName","onInput","setAttribute","inputHandler","compositionHandler","listeners","getAttribute","targetId","removeAttribute","passRomaji","okuriganaRegex"],"mappings":"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"}
\ No newline at end of file |