{"version":3,"sources":["../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/errors.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/valueToKey.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/cmp.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/FDBKeyRange.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/extractKey.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/FDBCursor.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/FDBCursorWithValue.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/FakeEventTarget.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/FDBRequest.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/enforceRange.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/FakeDOMStringList.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/valueToKeyRange.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/FDBIndex.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/canInjectKey.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/binarySearch.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/RecordStore.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/Index.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/validateKeyPath.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/FDBObjectStore.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/FakeEvent.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/scheduling.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/FDBTransaction.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/KeyGenerator.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/ObjectStore.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/FDBDatabase.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/FDBOpenDBRequest.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/FDBVersionChangeEvent.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/Database.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/FDBFactory.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/fakeIndexedDB.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/auto/index.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/esm/lib/errors.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/esm/lib/valueToKey.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/esm/lib/cmp.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/esm/FDBKeyRange.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/esm/lib/extractKey.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/esm/FDBCursor.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/esm/FDBCursorWithValue.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/esm/lib/FakeEventTarget.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/esm/FDBRequest.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/esm/lib/enforceRange.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/esm/lib/FakeDOMStringList.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/esm/lib/valueToKeyRange.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/esm/FDBIndex.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/esm/lib/canInjectKey.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/esm/lib/binarySearch.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/esm/lib/RecordStore.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/esm/lib/Index.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/esm/lib/validateKeyPath.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/esm/FDBObjectStore.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/esm/lib/FakeEvent.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/esm/lib/scheduling.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/esm/FDBTransaction.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/esm/lib/KeyGenerator.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/esm/lib/ObjectStore.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/esm/FDBDatabase.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/esm/FDBOpenDBRequest.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/esm/FDBVersionChangeEvent.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/esm/lib/Database.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/esm/FDBFactory.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/esm/fakeIndexedDB.js","../../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/auto/index.mjs","../src/testing.ts","../src/IndexedDBFileSystem.ts"],"sourcesContent":["\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.VersionError = exports.TransactionInactiveError = exports.ReadOnlyError = exports.NotFoundError = exports.InvalidStateError = exports.InvalidAccessError = exports.DataError = exports.DataCloneError = exports.ConstraintError = exports.AbortError = void 0;\nconst messages = {\n  AbortError: \"A request was aborted, for example through a call to IDBTransaction.abort.\",\n  ConstraintError: \"A mutation operation in the transaction failed because a constraint was not satisfied. For example, an object such as an object store or index already exists and a request attempted to create a new one.\",\n  DataCloneError: \"The data being stored could not be cloned by the internal structured cloning algorithm.\",\n  DataError: \"Data provided to an operation does not meet requirements.\",\n  InvalidAccessError: \"An invalid operation was performed on an object. For example transaction creation attempt was made, but an empty scope was provided.\",\n  InvalidStateError: \"An operation was called on an object on which it is not allowed or at a time when it is not allowed. Also occurs if a request is made on a source object that has been deleted or removed. Use TransactionInactiveError or ReadOnlyError when possible, as they are more specific variations of InvalidStateError.\",\n  NotFoundError: \"The operation failed because the requested database object could not be found. For example, an object store did not exist but was being opened.\",\n  ReadOnlyError: 'The mutating operation was attempted in a \"readonly\" transaction.',\n  TransactionInactiveError: \"A request was placed against a transaction which is currently not active, or which is finished.\",\n  VersionError: \"An attempt was made to open a database using a lower version than the existing version.\"\n};\nclass AbortError extends DOMException {\n  constructor(message = messages.AbortError) {\n    super(message, \"AbortError\");\n  }\n}\nexports.AbortError = AbortError;\nclass ConstraintError extends DOMException {\n  constructor(message = messages.ConstraintError) {\n    super(message, \"ConstraintError\");\n  }\n}\nexports.ConstraintError = ConstraintError;\nclass DataCloneError extends DOMException {\n  constructor(message = messages.DataCloneError) {\n    super(message, \"DataCloneError\");\n  }\n}\nexports.DataCloneError = DataCloneError;\nclass DataError extends DOMException {\n  constructor(message = messages.DataError) {\n    super(message, \"DataError\");\n  }\n}\nexports.DataError = DataError;\nclass InvalidAccessError extends DOMException {\n  constructor(message = messages.InvalidAccessError) {\n    super(message, \"InvalidAccessError\");\n  }\n}\nexports.InvalidAccessError = InvalidAccessError;\nclass InvalidStateError extends DOMException {\n  constructor(message = messages.InvalidStateError) {\n    super(message, \"InvalidStateError\");\n  }\n}\nexports.InvalidStateError = InvalidStateError;\nclass NotFoundError extends DOMException {\n  constructor(message = messages.NotFoundError) {\n    super(message, \"NotFoundError\");\n  }\n}\nexports.NotFoundError = NotFoundError;\nclass ReadOnlyError extends DOMException {\n  constructor(message = messages.ReadOnlyError) {\n    super(message, \"ReadOnlyError\");\n  }\n}\nexports.ReadOnlyError = ReadOnlyError;\nclass TransactionInactiveError extends DOMException {\n  constructor(message = messages.TransactionInactiveError) {\n    super(message, \"TransactionInactiveError\");\n  }\n}\nexports.TransactionInactiveError = TransactionInactiveError;\nclass VersionError extends DOMException {\n  constructor(message = messages.VersionError) {\n    super(message, \"VersionError\");\n  }\n}\nexports.VersionError = VersionError;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _errors = require(\"./errors.js\");\n// https://w3c.github.io/IndexedDB/#convert-value-to-key\nconst valueToKey = (input, seen) => {\n  if (typeof input === \"number\") {\n    if (isNaN(input)) {\n      throw new _errors.DataError();\n    }\n    return input;\n  } else if (Object.prototype.toString.call(input) === \"[object Date]\") {\n    const ms = input.valueOf();\n    if (isNaN(ms)) {\n      throw new _errors.DataError();\n    }\n    return new Date(ms);\n  } else if (typeof input === \"string\") {\n    return input;\n  } else if (input instanceof ArrayBuffer || typeof SharedArrayBuffer !== \"undefined\" && input instanceof SharedArrayBuffer || typeof ArrayBuffer !== \"undefined\" && ArrayBuffer.isView && ArrayBuffer.isView(input)) {\n    let arrayBuffer;\n    let offset = 0;\n    let length = 0;\n    if (input instanceof ArrayBuffer || typeof SharedArrayBuffer !== \"undefined\" && input instanceof SharedArrayBuffer) {\n      arrayBuffer = input;\n      length = input.byteLength;\n    } else {\n      arrayBuffer = input.buffer;\n      offset = input.byteOffset;\n      length = input.byteLength;\n    }\n    if (arrayBuffer.detached) {\n      return new ArrayBuffer(0);\n    }\n    return arrayBuffer.slice(offset, offset + length);\n  } else if (Array.isArray(input)) {\n    if (seen === undefined) {\n      seen = new Set();\n    } else if (seen.has(input)) {\n      throw new _errors.DataError();\n    }\n    seen.add(input);\n    const keys = [];\n    for (let i = 0; i < input.length; i++) {\n      const hop = Object.hasOwn(input, i);\n      if (!hop) {\n        throw new _errors.DataError();\n      }\n      const entry = input[i];\n      const key = valueToKey(entry, seen);\n      keys.push(key);\n    }\n    return keys;\n  } else {\n    throw new _errors.DataError();\n  }\n};\nvar _default = exports.default = valueToKey;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _errors = require(\"./errors.js\");\nvar _valueToKey = _interopRequireDefault(require(\"./valueToKey.js\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nconst getType = x => {\n  if (typeof x === \"number\") {\n    return \"Number\";\n  }\n  if (Object.prototype.toString.call(x) === \"[object Date]\") {\n    return \"Date\";\n  }\n  if (Array.isArray(x)) {\n    return \"Array\";\n  }\n  if (typeof x === \"string\") {\n    return \"String\";\n  }\n  if (x instanceof ArrayBuffer) {\n    return \"Binary\";\n  }\n  throw new _errors.DataError();\n};\n\n// https://w3c.github.io/IndexedDB/#compare-two-keys\nconst cmp = (first, second) => {\n  if (second === undefined) {\n    throw new TypeError();\n  }\n  first = (0, _valueToKey.default)(first);\n  second = (0, _valueToKey.default)(second);\n  const t1 = getType(first);\n  const t2 = getType(second);\n  if (t1 !== t2) {\n    if (t1 === \"Array\") {\n      return 1;\n    }\n    if (t1 === \"Binary\" && (t2 === \"String\" || t2 === \"Date\" || t2 === \"Number\")) {\n      return 1;\n    }\n    if (t1 === \"String\" && (t2 === \"Date\" || t2 === \"Number\")) {\n      return 1;\n    }\n    if (t1 === \"Date\" && t2 === \"Number\") {\n      return 1;\n    }\n    return -1;\n  }\n  if (t1 === \"Binary\") {\n    first = new Uint8Array(first);\n    second = new Uint8Array(second);\n  }\n  if (t1 === \"Array\" || t1 === \"Binary\") {\n    const length = Math.min(first.length, second.length);\n    for (let i = 0; i < length; i++) {\n      const result = cmp(first[i], second[i]);\n      if (result !== 0) {\n        return result;\n      }\n    }\n    if (first.length > second.length) {\n      return 1;\n    }\n    if (first.length < second.length) {\n      return -1;\n    }\n    return 0;\n  }\n  if (t1 === \"Date\") {\n    if (first.getTime() === second.getTime()) {\n      return 0;\n    }\n  } else {\n    if (first === second) {\n      return 0;\n    }\n  }\n  return first > second ? 1 : -1;\n};\nvar _default = exports.default = cmp;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _cmp = _interopRequireDefault(require(\"./lib/cmp.js\"));\nvar _errors = require(\"./lib/errors.js\");\nvar _valueToKey = _interopRequireDefault(require(\"./lib/valueToKey.js\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#range-concept\nclass FDBKeyRange {\n  static only(value) {\n    if (arguments.length === 0) {\n      throw new TypeError();\n    }\n    value = (0, _valueToKey.default)(value);\n    return new FDBKeyRange(value, value, false, false);\n  }\n  static lowerBound(lower, open = false) {\n    if (arguments.length === 0) {\n      throw new TypeError();\n    }\n    lower = (0, _valueToKey.default)(lower);\n    return new FDBKeyRange(lower, undefined, open, true);\n  }\n  static upperBound(upper, open = false) {\n    if (arguments.length === 0) {\n      throw new TypeError();\n    }\n    upper = (0, _valueToKey.default)(upper);\n    return new FDBKeyRange(undefined, upper, true, open);\n  }\n  static bound(lower, upper, lowerOpen = false, upperOpen = false) {\n    if (arguments.length < 2) {\n      throw new TypeError();\n    }\n    const cmpResult = (0, _cmp.default)(lower, upper);\n    if (cmpResult === 1 || cmpResult === 0 && (lowerOpen || upperOpen)) {\n      throw new _errors.DataError();\n    }\n    lower = (0, _valueToKey.default)(lower);\n    upper = (0, _valueToKey.default)(upper);\n    return new FDBKeyRange(lower, upper, lowerOpen, upperOpen);\n  }\n  constructor(lower, upper, lowerOpen, upperOpen) {\n    this.lower = lower;\n    this.upper = upper;\n    this.lowerOpen = lowerOpen;\n    this.upperOpen = upperOpen;\n  }\n\n  // https://w3c.github.io/IndexedDB/#dom-idbkeyrange-includes\n  includes(key) {\n    if (arguments.length === 0) {\n      throw new TypeError();\n    }\n    key = (0, _valueToKey.default)(key);\n    if (this.lower !== undefined) {\n      const cmpResult = (0, _cmp.default)(this.lower, key);\n      if (cmpResult === 1 || cmpResult === 0 && this.lowerOpen) {\n        return false;\n      }\n    }\n    if (this.upper !== undefined) {\n      const cmpResult = (0, _cmp.default)(this.upper, key);\n      if (cmpResult === -1 || cmpResult === 0 && this.upperOpen) {\n        return false;\n      }\n    }\n    return true;\n  }\n  toString() {\n    return \"[object IDBKeyRange]\";\n  }\n}\nvar _default = exports.default = FDBKeyRange;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _valueToKey = _interopRequireDefault(require(\"./valueToKey.js\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-extracting-a-key-from-a-value-using-a-key-path\nconst extractKey = (keyPath, value) => {\n  if (Array.isArray(keyPath)) {\n    const result = [];\n    for (let item of keyPath) {\n      // This doesn't make sense to me based on the spec, but it is needed to pass the W3C KeyPath tests (see same\n      // comment in validateKeyPath)\n      if (item !== undefined && item !== null && typeof item !== \"string\" && item.toString) {\n        item = item.toString();\n      }\n      const key = extractKey(item, value).key;\n      result.push((0, _valueToKey.default)(key));\n    }\n    return {\n      type: \"found\",\n      key: result\n    };\n  }\n  if (keyPath === \"\") {\n    return {\n      type: \"found\",\n      key: value\n    };\n  }\n  let remainingKeyPath = keyPath;\n  let object = value;\n  while (remainingKeyPath !== null) {\n    let identifier;\n    const i = remainingKeyPath.indexOf(\".\");\n    if (i >= 0) {\n      identifier = remainingKeyPath.slice(0, i);\n      remainingKeyPath = remainingKeyPath.slice(i + 1);\n    } else {\n      identifier = remainingKeyPath;\n      remainingKeyPath = null;\n    }\n    if (object === undefined || object === null || !Object.hasOwn(object, identifier)) {\n      return {\n        type: \"notFound\"\n      };\n    }\n    object = object[identifier];\n  }\n  return {\n    type: \"found\",\n    key: object\n  };\n};\nvar _default = exports.default = extractKey;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _FDBKeyRange = _interopRequireDefault(require(\"./FDBKeyRange.js\"));\nvar _FDBObjectStore = _interopRequireDefault(require(\"./FDBObjectStore.js\"));\nvar _cmp = _interopRequireDefault(require(\"./lib/cmp.js\"));\nvar _errors = require(\"./lib/errors.js\");\nvar _extractKey = _interopRequireDefault(require(\"./lib/extractKey.js\"));\nvar _valueToKey = _interopRequireDefault(require(\"./lib/valueToKey.js\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nconst getEffectiveObjectStore = cursor => {\n  if (cursor.source instanceof _FDBObjectStore.default) {\n    return cursor.source;\n  }\n  return cursor.source.objectStore;\n};\n\n// This takes a key range, a list of lower bounds, and a list of upper bounds and combines them all into a single key\n// range. It does not handle gt/gte distinctions, because it doesn't really matter much anyway, since for next/prev\n// cursor iteration it'd also have to look at values to be precise, which would be complicated. This should get us 99%\n// of the way there.\nconst makeKeyRange = (range, lowers, uppers) => {\n  // Start with bounds from range\n  let lower = range !== undefined ? range.lower : undefined;\n  let upper = range !== undefined ? range.upper : undefined;\n\n  // Augment with values from lowers and uppers\n  for (const lowerTemp of lowers) {\n    if (lowerTemp === undefined) {\n      continue;\n    }\n    if (lower === undefined || (0, _cmp.default)(lower, lowerTemp) === 1) {\n      lower = lowerTemp;\n    }\n  }\n  for (const upperTemp of uppers) {\n    if (upperTemp === undefined) {\n      continue;\n    }\n    if (upper === undefined || (0, _cmp.default)(upper, upperTemp) === -1) {\n      upper = upperTemp;\n    }\n  }\n  if (lower !== undefined && upper !== undefined) {\n    return _FDBKeyRange.default.bound(lower, upper);\n  }\n  if (lower !== undefined) {\n    return _FDBKeyRange.default.lowerBound(lower);\n  }\n  if (upper !== undefined) {\n    return _FDBKeyRange.default.upperBound(upper);\n  }\n};\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#cursor\nclass FDBCursor {\n  _gotValue = false;\n  _position = undefined; // Key of previously returned record\n  _objectStorePosition = undefined;\n  _keyOnly = false;\n  _key = undefined;\n  _primaryKey = undefined;\n  constructor(source, range, direction = \"next\", request, keyOnly = false) {\n    this._range = range;\n    this._source = source;\n    this._direction = direction;\n    this._request = request;\n    this._keyOnly = keyOnly;\n  }\n\n  // Read only properties\n  get source() {\n    return this._source;\n  }\n  set source(val) {\n    /* For babel */\n  }\n  get request() {\n    return this._request;\n  }\n  set request(val) {\n    /* For babel */\n  }\n  get direction() {\n    return this._direction;\n  }\n  set direction(val) {\n    /* For babel */\n  }\n  get key() {\n    return this._key;\n  }\n  set key(val) {\n    /* For babel */\n  }\n  get primaryKey() {\n    return this._primaryKey;\n  }\n  set primaryKey(val) {\n    /* For babel */\n  }\n\n  // https://w3c.github.io/IndexedDB/#iterate-a-cursor\n  _iterate(key, primaryKey) {\n    const sourceIsObjectStore = this.source instanceof _FDBObjectStore.default;\n\n    // Can't use sourceIsObjectStore because TypeScript\n    const records = this.source instanceof _FDBObjectStore.default ? this.source._rawObjectStore.records : this.source._rawIndex.records;\n    let foundRecord;\n    if (this.direction === \"next\") {\n      const range = makeKeyRange(this._range, [key, this._position], []);\n      for (const record of records.values(range)) {\n        const cmpResultKey = key !== undefined ? (0, _cmp.default)(record.key, key) : undefined;\n        const cmpResultPosition = this._position !== undefined ? (0, _cmp.default)(record.key, this._position) : undefined;\n        if (key !== undefined) {\n          if (cmpResultKey === -1) {\n            continue;\n          }\n        }\n        if (primaryKey !== undefined) {\n          if (cmpResultKey === -1) {\n            continue;\n          }\n          const cmpResultPrimaryKey = (0, _cmp.default)(record.value, primaryKey);\n          if (cmpResultKey === 0 && cmpResultPrimaryKey === -1) {\n            continue;\n          }\n        }\n        if (this._position !== undefined && sourceIsObjectStore) {\n          if (cmpResultPosition !== 1) {\n            continue;\n          }\n        }\n        if (this._position !== undefined && !sourceIsObjectStore) {\n          if (cmpResultPosition === -1) {\n            continue;\n          }\n          if (cmpResultPosition === 0 && (0, _cmp.default)(record.value, this._objectStorePosition) !== 1) {\n            continue;\n          }\n        }\n        if (this._range !== undefined) {\n          if (!this._range.includes(record.key)) {\n            continue;\n          }\n        }\n        foundRecord = record;\n        break;\n      }\n    } else if (this.direction === \"nextunique\") {\n      // This could be done without iterating, if the range was defined slightly better (to handle gt/gte cases).\n      // But the performance difference should be small, and that wouldn't work anyway for directions where the\n      // value needs to be used (like next and prev).\n      const range = makeKeyRange(this._range, [key, this._position], []);\n      for (const record of records.values(range)) {\n        if (key !== undefined) {\n          if ((0, _cmp.default)(record.key, key) === -1) {\n            continue;\n          }\n        }\n        if (this._position !== undefined) {\n          if ((0, _cmp.default)(record.key, this._position) !== 1) {\n            continue;\n          }\n        }\n        if (this._range !== undefined) {\n          if (!this._range.includes(record.key)) {\n            continue;\n          }\n        }\n        foundRecord = record;\n        break;\n      }\n    } else if (this.direction === \"prev\") {\n      const range = makeKeyRange(this._range, [], [key, this._position]);\n      for (const record of records.values(range, \"prev\")) {\n        const cmpResultKey = key !== undefined ? (0, _cmp.default)(record.key, key) : undefined;\n        const cmpResultPosition = this._position !== undefined ? (0, _cmp.default)(record.key, this._position) : undefined;\n        if (key !== undefined) {\n          if (cmpResultKey === 1) {\n            continue;\n          }\n        }\n        if (primaryKey !== undefined) {\n          if (cmpResultKey === 1) {\n            continue;\n          }\n          const cmpResultPrimaryKey = (0, _cmp.default)(record.value, primaryKey);\n          if (cmpResultKey === 0 && cmpResultPrimaryKey === 1) {\n            continue;\n          }\n        }\n        if (this._position !== undefined && sourceIsObjectStore) {\n          if (cmpResultPosition !== -1) {\n            continue;\n          }\n        }\n        if (this._position !== undefined && !sourceIsObjectStore) {\n          if (cmpResultPosition === 1) {\n            continue;\n          }\n          if (cmpResultPosition === 0 && (0, _cmp.default)(record.value, this._objectStorePosition) !== -1) {\n            continue;\n          }\n        }\n        if (this._range !== undefined) {\n          if (!this._range.includes(record.key)) {\n            continue;\n          }\n        }\n        foundRecord = record;\n        break;\n      }\n    } else if (this.direction === \"prevunique\") {\n      let tempRecord;\n      const range = makeKeyRange(this._range, [], [key, this._position]);\n      for (const record of records.values(range, \"prev\")) {\n        if (key !== undefined) {\n          if ((0, _cmp.default)(record.key, key) === 1) {\n            continue;\n          }\n        }\n        if (this._position !== undefined) {\n          if ((0, _cmp.default)(record.key, this._position) !== -1) {\n            continue;\n          }\n        }\n        if (this._range !== undefined) {\n          if (!this._range.includes(record.key)) {\n            continue;\n          }\n        }\n        tempRecord = record;\n        break;\n      }\n      if (tempRecord) {\n        foundRecord = records.get(tempRecord.key);\n      }\n    }\n    let result;\n    if (!foundRecord) {\n      this._key = undefined;\n      if (!sourceIsObjectStore) {\n        this._objectStorePosition = undefined;\n      }\n\n      // \"this instanceof FDBCursorWithValue\" would be better and not require (this as any), but causes runtime\n      // error due to circular dependency.\n      if (!this._keyOnly && this.toString() === \"[object IDBCursorWithValue]\") {\n        this.value = undefined;\n      }\n      result = null;\n    } else {\n      this._position = foundRecord.key;\n      if (!sourceIsObjectStore) {\n        this._objectStorePosition = foundRecord.value;\n      }\n      this._key = foundRecord.key;\n      if (sourceIsObjectStore) {\n        this._primaryKey = structuredClone(foundRecord.key);\n        if (!this._keyOnly && this.toString() === \"[object IDBCursorWithValue]\") {\n          this.value = structuredClone(foundRecord.value);\n        }\n      } else {\n        this._primaryKey = structuredClone(foundRecord.value);\n        if (!this._keyOnly && this.toString() === \"[object IDBCursorWithValue]\") {\n          if (this.source instanceof _FDBObjectStore.default) {\n            // Can't use sourceIsObjectStore because TypeScript\n            throw new Error(\"This should never happen\");\n          }\n          const value = this.source.objectStore._rawObjectStore.getValue(foundRecord.value);\n          this.value = structuredClone(value);\n        }\n      }\n      this._gotValue = true;\n      // eslint-disable-next-line @typescript-eslint/no-this-alias\n      result = this;\n    }\n    return result;\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBCursor-update-IDBRequest-any-value\n  update(value) {\n    if (value === undefined) {\n      throw new TypeError();\n    }\n    const effectiveObjectStore = getEffectiveObjectStore(this);\n    const effectiveKey = Object.hasOwn(this.source, \"_rawIndex\") ? this.primaryKey : this._position;\n    const transaction = effectiveObjectStore.transaction;\n    if (transaction._state !== \"active\") {\n      throw new _errors.TransactionInactiveError();\n    }\n    if (transaction.mode === \"readonly\") {\n      throw new _errors.ReadOnlyError();\n    }\n    if (effectiveObjectStore._rawObjectStore.deleted) {\n      throw new _errors.InvalidStateError();\n    }\n    if (!(this.source instanceof _FDBObjectStore.default) && this.source._rawIndex.deleted) {\n      throw new _errors.InvalidStateError();\n    }\n    if (!this._gotValue || !Object.hasOwn(this, \"value\")) {\n      throw new _errors.InvalidStateError();\n    }\n    const clone = structuredClone(value);\n    if (effectiveObjectStore.keyPath !== null) {\n      let tempKey;\n      try {\n        tempKey = (0, _extractKey.default)(effectiveObjectStore.keyPath, clone).key;\n      } catch (err) {\n        /* Handled immediately below */\n      }\n      if ((0, _cmp.default)(tempKey, effectiveKey) !== 0) {\n        throw new _errors.DataError();\n      }\n    }\n    const record = {\n      key: effectiveKey,\n      value: clone\n    };\n    return transaction._execRequestAsync({\n      operation: effectiveObjectStore._rawObjectStore.storeRecord.bind(effectiveObjectStore._rawObjectStore, record, false, transaction._rollbackLog),\n      source: this\n    });\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBCursor-advance-void-unsigned-long-count\n  advance(count) {\n    if (!Number.isInteger(count) || count <= 0) {\n      throw new TypeError();\n    }\n    const effectiveObjectStore = getEffectiveObjectStore(this);\n    const transaction = effectiveObjectStore.transaction;\n    if (transaction._state !== \"active\") {\n      throw new _errors.TransactionInactiveError();\n    }\n    if (effectiveObjectStore._rawObjectStore.deleted) {\n      throw new _errors.InvalidStateError();\n    }\n    if (!(this.source instanceof _FDBObjectStore.default) && this.source._rawIndex.deleted) {\n      throw new _errors.InvalidStateError();\n    }\n    if (!this._gotValue) {\n      throw new _errors.InvalidStateError();\n    }\n    if (this._request) {\n      this._request.readyState = \"pending\";\n    }\n    transaction._execRequestAsync({\n      operation: () => {\n        let result;\n        for (let i = 0; i < count; i++) {\n          result = this._iterate();\n\n          // Not sure why this is needed\n          if (!result) {\n            break;\n          }\n        }\n        return result;\n      },\n      request: this._request,\n      source: this.source\n    });\n    this._gotValue = false;\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBCursor-continue-void-any-key\n  continue(key) {\n    const effectiveObjectStore = getEffectiveObjectStore(this);\n    const transaction = effectiveObjectStore.transaction;\n    if (transaction._state !== \"active\") {\n      throw new _errors.TransactionInactiveError();\n    }\n    if (effectiveObjectStore._rawObjectStore.deleted) {\n      throw new _errors.InvalidStateError();\n    }\n    if (!(this.source instanceof _FDBObjectStore.default) && this.source._rawIndex.deleted) {\n      throw new _errors.InvalidStateError();\n    }\n    if (!this._gotValue) {\n      throw new _errors.InvalidStateError();\n    }\n    if (key !== undefined) {\n      key = (0, _valueToKey.default)(key);\n      const cmpResult = (0, _cmp.default)(key, this._position);\n      if (cmpResult <= 0 && (this.direction === \"next\" || this.direction === \"nextunique\") || cmpResult >= 0 && (this.direction === \"prev\" || this.direction === \"prevunique\")) {\n        throw new _errors.DataError();\n      }\n    }\n    if (this._request) {\n      this._request.readyState = \"pending\";\n    }\n    transaction._execRequestAsync({\n      operation: this._iterate.bind(this, key),\n      request: this._request,\n      source: this.source\n    });\n    this._gotValue = false;\n  }\n\n  // hthttps://w3c.github.io/IndexedDB/#dom-idbcursor-continueprimarykey\n  continuePrimaryKey(key, primaryKey) {\n    const effectiveObjectStore = getEffectiveObjectStore(this);\n    const transaction = effectiveObjectStore.transaction;\n    if (transaction._state !== \"active\") {\n      throw new _errors.TransactionInactiveError();\n    }\n    if (effectiveObjectStore._rawObjectStore.deleted) {\n      throw new _errors.InvalidStateError();\n    }\n    if (!(this.source instanceof _FDBObjectStore.default) && this.source._rawIndex.deleted) {\n      throw new _errors.InvalidStateError();\n    }\n    if (this.source instanceof _FDBObjectStore.default || this.direction !== \"next\" && this.direction !== \"prev\") {\n      throw new _errors.InvalidAccessError();\n    }\n    if (!this._gotValue) {\n      throw new _errors.InvalidStateError();\n    }\n\n    // Not sure about this\n    if (key === undefined || primaryKey === undefined) {\n      throw new _errors.DataError();\n    }\n    key = (0, _valueToKey.default)(key);\n    const cmpResult = (0, _cmp.default)(key, this._position);\n    if (cmpResult === -1 && this.direction === \"next\" || cmpResult === 1 && this.direction === \"prev\") {\n      throw new _errors.DataError();\n    }\n    const cmpResult2 = (0, _cmp.default)(primaryKey, this._objectStorePosition);\n    if (cmpResult === 0) {\n      if (cmpResult2 <= 0 && this.direction === \"next\" || cmpResult2 >= 0 && this.direction === \"prev\") {\n        throw new _errors.DataError();\n      }\n    }\n    if (this._request) {\n      this._request.readyState = \"pending\";\n    }\n    transaction._execRequestAsync({\n      operation: this._iterate.bind(this, key, primaryKey),\n      request: this._request,\n      source: this.source\n    });\n    this._gotValue = false;\n  }\n  delete() {\n    const effectiveObjectStore = getEffectiveObjectStore(this);\n    const effectiveKey = Object.hasOwn(this.source, \"_rawIndex\") ? this.primaryKey : this._position;\n    const transaction = effectiveObjectStore.transaction;\n    if (transaction._state !== \"active\") {\n      throw new _errors.TransactionInactiveError();\n    }\n    if (transaction.mode === \"readonly\") {\n      throw new _errors.ReadOnlyError();\n    }\n    if (effectiveObjectStore._rawObjectStore.deleted) {\n      throw new _errors.InvalidStateError();\n    }\n    if (!(this.source instanceof _FDBObjectStore.default) && this.source._rawIndex.deleted) {\n      throw new _errors.InvalidStateError();\n    }\n    if (!this._gotValue || !Object.hasOwn(this, \"value\")) {\n      throw new _errors.InvalidStateError();\n    }\n    return transaction._execRequestAsync({\n      operation: effectiveObjectStore._rawObjectStore.deleteRecord.bind(effectiveObjectStore._rawObjectStore, effectiveKey, transaction._rollbackLog),\n      source: this\n    });\n  }\n  toString() {\n    return \"[object IDBCursor]\";\n  }\n}\nvar _default = exports.default = FDBCursor;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _FDBCursor = _interopRequireDefault(require(\"./FDBCursor.js\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nclass FDBCursorWithValue extends _FDBCursor.default {\n  value = undefined;\n  constructor(source, range, direction, request) {\n    super(source, range, direction, request);\n  }\n  toString() {\n    return \"[object IDBCursorWithValue]\";\n  }\n}\nvar _default = exports.default = FDBCursorWithValue;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _errors = require(\"./errors.js\");\nconst stopped = (event, listener) => {\n  return event.immediatePropagationStopped || event.eventPhase === event.CAPTURING_PHASE && listener.capture === false || event.eventPhase === event.BUBBLING_PHASE && listener.capture === true;\n};\n\n// http://www.w3.org/TR/dom/#concept-event-listener-invoke\nconst invokeEventListeners = (event, obj) => {\n  event.currentTarget = obj;\n\n  // The callback might cause obj.listeners to mutate as we traverse it.\n  // Take a copy of the array so that nothing sneaks in and we don't lose\n  // our place.\n  for (const listener of obj.listeners.slice()) {\n    if (event.type !== listener.type || stopped(event, listener)) {\n      continue;\n    }\n\n    // @ts-ignore\n    listener.callback.call(event.currentTarget, event);\n  }\n  const typeToProp = {\n    abort: \"onabort\",\n    blocked: \"onblocked\",\n    complete: \"oncomplete\",\n    error: \"onerror\",\n    success: \"onsuccess\",\n    upgradeneeded: \"onupgradeneeded\",\n    versionchange: \"onversionchange\"\n  };\n  const prop = typeToProp[event.type];\n  if (prop === undefined) {\n    throw new Error(`Unknown event type: \"${event.type}\"`);\n  }\n  const callback = event.currentTarget[prop];\n  if (callback) {\n    const listener = {\n      callback,\n      capture: false,\n      type: event.type\n    };\n    if (!stopped(event, listener)) {\n      // @ts-ignore\n      listener.callback.call(event.currentTarget, event);\n    }\n  }\n};\nclass FakeEventTarget {\n  listeners = [];\n\n  // These will be overridden in individual subclasses and made not readonly\n\n  addEventListener(type, callback, capture = false) {\n    this.listeners.push({\n      callback,\n      capture,\n      type\n    });\n  }\n  removeEventListener(type, callback, capture = false) {\n    const i = this.listeners.findIndex(listener => {\n      return listener.type === type && listener.callback === callback && listener.capture === capture;\n    });\n    this.listeners.splice(i, 1);\n  }\n\n  // http://www.w3.org/TR/dom/#dispatching-events\n  dispatchEvent(event) {\n    if (event.dispatched || !event.initialized) {\n      throw new _errors.InvalidStateError(\"The object is in an invalid state.\");\n    }\n    event.isTrusted = false;\n    event.dispatched = true;\n    event.target = this;\n    // NOT SURE WHEN THIS SHOULD BE SET        event.eventPath = [];\n\n    event.eventPhase = event.CAPTURING_PHASE;\n    for (const obj of event.eventPath) {\n      if (!event.propagationStopped) {\n        invokeEventListeners(event, obj);\n      }\n    }\n    event.eventPhase = event.AT_TARGET;\n    if (!event.propagationStopped) {\n      invokeEventListeners(event, event.target);\n    }\n    if (event.bubbles) {\n      event.eventPath.reverse();\n      event.eventPhase = event.BUBBLING_PHASE;\n      for (const obj of event.eventPath) {\n        if (!event.propagationStopped) {\n          invokeEventListeners(event, obj);\n        }\n      }\n    }\n    event.dispatched = false;\n    event.eventPhase = event.NONE;\n    event.currentTarget = null;\n    if (event.canceled) {\n      return false;\n    }\n    return true;\n  }\n}\nvar _default = exports.default = FakeEventTarget;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _errors = require(\"./lib/errors.js\");\nvar _FakeEventTarget = _interopRequireDefault(require(\"./lib/FakeEventTarget.js\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nclass FDBRequest extends _FakeEventTarget.default {\n  _result = null;\n  _error = null;\n  source = null;\n  transaction = null;\n  readyState = \"pending\";\n  onsuccess = null;\n  onerror = null;\n  get error() {\n    if (this.readyState === \"pending\") {\n      throw new _errors.InvalidStateError();\n    }\n    return this._error;\n  }\n  set error(value) {\n    this._error = value;\n  }\n  get result() {\n    if (this.readyState === \"pending\") {\n      throw new _errors.InvalidStateError();\n    }\n    return this._result;\n  }\n  set result(value) {\n    this._result = value;\n  }\n  toString() {\n    return \"[object IDBRequest]\";\n  }\n}\nvar _default = exports.default = FDBRequest;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n// https://heycam.github.io/webidl/#EnforceRange\n\nconst enforceRange = (num, type) => {\n  const min = 0;\n  const max = type === \"unsigned long\" ? 4294967295 : 9007199254740991;\n  if (isNaN(num) || num < min || num > max) {\n    throw new TypeError();\n  }\n  if (num >= 0) {\n    return Math.floor(num);\n  }\n};\nvar _default = exports.default = enforceRange;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nclass FakeDOMStringList extends Array {\n  contains(value) {\n    for (const value2 of this) {\n      if (value === value2) {\n        return true;\n      }\n    }\n    return false;\n  }\n  item(i) {\n    if (i < 0 || i >= this.length) {\n      return null;\n    }\n    return this[i];\n  }\n\n  // Used internally, should not be used by others. I could maybe get rid of these and replace rather than mutate, but too lazy to check the spec.\n  _push(...values) {\n    return Array.prototype.push.call(this, ...values);\n  }\n  _sort(...values) {\n    return Array.prototype.sort.call(this, ...values);\n  }\n}\n\n// Would be nice to remove these properties to fix https://github.com/dumbmatter/fakeIndexedDB/issues/66 but for some reason it breaks Dexie - see test/dexie.js and FakeDOMStringList tests\n/*\n// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array\nconst arrayPropertiesToDelete = [\"from\", \"isArray\", \"of\"];\nconst arrayMethodsToDelete = [\n    \"at\",\n    \"concat\",\n    \"copyWithin\",\n    \"entries\",\n    \"every\",\n    \"fill\",\n    \"filter\",\n    \"find\",\n    \"findIndex\",\n    \"flat\",\n    \"flatMap\",\n    \"forEach\",\n    \"includes\",\n    \"indexOf\",\n    \"join\",\n    \"keys\",\n    \"lastIndexOf\",\n    \"map\",\n    \"pop\",\n    \"push\",\n    \"reduce\",\n    \"reduceRight\",\n    \"reverse\",\n    \"shift\",\n    \"slice\",\n    \"some\",\n    \"sort\",\n    \"splice\",\n    \"unshift\",\n    \"values\",\n];\n\n// Set to undefined rather than delete, so it doesn't go up the chain to Array. Not perfect, but good enough?\nfor (const property of arrayPropertiesToDelete) {\n    (FakeDOMStringList as any)[property] = undefined;\n}\nfor (const property of arrayMethodsToDelete) {\n    (FakeDOMStringList as any).prototype[property] = undefined;\n}\n*/\nvar _default = exports.default = FakeDOMStringList;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _FDBKeyRange = _interopRequireDefault(require(\"../FDBKeyRange.js\"));\nvar _errors = require(\"./errors.js\");\nvar _valueToKey = _interopRequireDefault(require(\"./valueToKey.js\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n// http://w3c.github.io/IndexedDB/#convert-a-value-to-a-key-range\nconst valueToKeyRange = (value, nullDisallowedFlag = false) => {\n  if (value instanceof _FDBKeyRange.default) {\n    return value;\n  }\n  if (value === null || value === undefined) {\n    if (nullDisallowedFlag) {\n      throw new _errors.DataError();\n    }\n    return new _FDBKeyRange.default(undefined, undefined, false, false);\n  }\n  const key = (0, _valueToKey.default)(value);\n  return _FDBKeyRange.default.only(key);\n};\nvar _default = exports.default = valueToKeyRange;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _FDBCursor = _interopRequireDefault(require(\"./FDBCursor.js\"));\nvar _FDBCursorWithValue = _interopRequireDefault(require(\"./FDBCursorWithValue.js\"));\nvar _FDBKeyRange = _interopRequireDefault(require(\"./FDBKeyRange.js\"));\nvar _FDBRequest = _interopRequireDefault(require(\"./FDBRequest.js\"));\nvar _enforceRange = _interopRequireDefault(require(\"./lib/enforceRange.js\"));\nvar _errors = require(\"./lib/errors.js\");\nvar _FakeDOMStringList = _interopRequireDefault(require(\"./lib/FakeDOMStringList.js\"));\nvar _valueToKey = _interopRequireDefault(require(\"./lib/valueToKey.js\"));\nvar _valueToKeyRange = _interopRequireDefault(require(\"./lib/valueToKeyRange.js\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nconst confirmActiveTransaction = index => {\n  if (index._rawIndex.deleted || index.objectStore._rawObjectStore.deleted) {\n    throw new _errors.InvalidStateError();\n  }\n  if (index.objectStore.transaction._state !== \"active\") {\n    throw new _errors.TransactionInactiveError();\n  }\n};\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#idl-def-IDBIndex\nclass FDBIndex {\n  constructor(objectStore, rawIndex) {\n    this._rawIndex = rawIndex;\n    this._name = rawIndex.name;\n    this.objectStore = objectStore;\n    this.keyPath = rawIndex.keyPath;\n    this.multiEntry = rawIndex.multiEntry;\n    this.unique = rawIndex.unique;\n  }\n  get name() {\n    return this._name;\n  }\n\n  // https://w3c.github.io/IndexedDB/#dom-idbindex-name\n  set name(name) {\n    const transaction = this.objectStore.transaction;\n    if (!transaction.db._runningVersionchangeTransaction) {\n      throw new _errors.InvalidStateError();\n    }\n    if (transaction._state !== \"active\") {\n      throw new _errors.TransactionInactiveError();\n    }\n    if (this._rawIndex.deleted || this.objectStore._rawObjectStore.deleted) {\n      throw new _errors.InvalidStateError();\n    }\n    name = String(name);\n    if (name === this._name) {\n      return;\n    }\n    if (this.objectStore.indexNames.contains(name)) {\n      throw new _errors.ConstraintError();\n    }\n    const oldName = this._name;\n    const oldIndexNames = [...this.objectStore.indexNames];\n    this._name = name;\n    this._rawIndex.name = name;\n    this.objectStore._indexesCache.delete(oldName);\n    this.objectStore._indexesCache.set(name, this);\n    this.objectStore._rawObjectStore.rawIndexes.delete(oldName);\n    this.objectStore._rawObjectStore.rawIndexes.set(name, this._rawIndex);\n    this.objectStore.indexNames = new _FakeDOMStringList.default(...Array.from(this.objectStore._rawObjectStore.rawIndexes.keys()).filter(indexName => {\n      const index = this.objectStore._rawObjectStore.rawIndexes.get(indexName);\n      return index && !index.deleted;\n    }).sort());\n    transaction._rollbackLog.push(() => {\n      this._name = oldName;\n      this._rawIndex.name = oldName;\n      this.objectStore._indexesCache.delete(name);\n      this.objectStore._indexesCache.set(oldName, this);\n      this.objectStore._rawObjectStore.rawIndexes.delete(name);\n      this.objectStore._rawObjectStore.rawIndexes.set(oldName, this._rawIndex);\n      this.objectStore.indexNames = new _FakeDOMStringList.default(...oldIndexNames);\n    });\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBIndex-openCursor-IDBRequest-any-range-IDBCursorDirection-direction\n  openCursor(range, direction) {\n    confirmActiveTransaction(this);\n    if (range === null) {\n      range = undefined;\n    }\n    if (range !== undefined && !(range instanceof _FDBKeyRange.default)) {\n      range = _FDBKeyRange.default.only((0, _valueToKey.default)(range));\n    }\n    const request = new _FDBRequest.default();\n    request.source = this;\n    request.transaction = this.objectStore.transaction;\n    const cursor = new _FDBCursorWithValue.default(this, range, direction, request);\n    return this.objectStore.transaction._execRequestAsync({\n      operation: cursor._iterate.bind(cursor),\n      request,\n      source: this\n    });\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBIndex-openKeyCursor-IDBRequest-any-range-IDBCursorDirection-direction\n  openKeyCursor(range, direction) {\n    confirmActiveTransaction(this);\n    if (range === null) {\n      range = undefined;\n    }\n    if (range !== undefined && !(range instanceof _FDBKeyRange.default)) {\n      range = _FDBKeyRange.default.only((0, _valueToKey.default)(range));\n    }\n    const request = new _FDBRequest.default();\n    request.source = this;\n    request.transaction = this.objectStore.transaction;\n    const cursor = new _FDBCursor.default(this, range, direction, request, true);\n    return this.objectStore.transaction._execRequestAsync({\n      operation: cursor._iterate.bind(cursor),\n      request,\n      source: this\n    });\n  }\n  get(key) {\n    confirmActiveTransaction(this);\n    if (!(key instanceof _FDBKeyRange.default)) {\n      key = (0, _valueToKey.default)(key);\n    }\n    return this.objectStore.transaction._execRequestAsync({\n      operation: this._rawIndex.getValue.bind(this._rawIndex, key),\n      source: this\n    });\n  }\n\n  // http://w3c.github.io/IndexedDB/#dom-idbindex-getall\n  getAll(query, count) {\n    if (arguments.length > 1 && count !== undefined) {\n      count = (0, _enforceRange.default)(count, \"unsigned long\");\n    }\n    confirmActiveTransaction(this);\n    const range = (0, _valueToKeyRange.default)(query);\n    return this.objectStore.transaction._execRequestAsync({\n      operation: this._rawIndex.getAllValues.bind(this._rawIndex, range, count),\n      source: this\n    });\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBIndex-getKey-IDBRequest-any-key\n  getKey(key) {\n    confirmActiveTransaction(this);\n    if (!(key instanceof _FDBKeyRange.default)) {\n      key = (0, _valueToKey.default)(key);\n    }\n    return this.objectStore.transaction._execRequestAsync({\n      operation: this._rawIndex.getKey.bind(this._rawIndex, key),\n      source: this\n    });\n  }\n\n  // http://w3c.github.io/IndexedDB/#dom-idbindex-getallkeys\n  getAllKeys(query, count) {\n    if (arguments.length > 1 && count !== undefined) {\n      count = (0, _enforceRange.default)(count, \"unsigned long\");\n    }\n    confirmActiveTransaction(this);\n    const range = (0, _valueToKeyRange.default)(query);\n    return this.objectStore.transaction._execRequestAsync({\n      operation: this._rawIndex.getAllKeys.bind(this._rawIndex, range, count),\n      source: this\n    });\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBIndex-count-IDBRequest-any-key\n  count(key) {\n    confirmActiveTransaction(this);\n    if (key === null) {\n      key = undefined;\n    }\n    if (key !== undefined && !(key instanceof _FDBKeyRange.default)) {\n      key = _FDBKeyRange.default.only((0, _valueToKey.default)(key));\n    }\n    return this.objectStore.transaction._execRequestAsync({\n      operation: () => {\n        return this._rawIndex.count(key);\n      },\n      source: this\n    });\n  }\n  toString() {\n    return \"[object IDBIndex]\";\n  }\n}\nvar _default = exports.default = FDBIndex;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n// http://w3c.github.io/IndexedDB/#check-that-a-key-could-be-injected-into-a-value\nconst canInjectKey = (keyPath, value) => {\n  if (Array.isArray(keyPath)) {\n    throw new Error(\"The key paths used in this section are always strings and never sequences, since it is not possible to create a object store which has a key generator and also has a key path that is a sequence.\");\n  }\n  const identifiers = keyPath.split(\".\");\n  if (identifiers.length === 0) {\n    throw new Error(\"Assert: identifiers is not empty\");\n  }\n  identifiers.pop();\n  for (const identifier of identifiers) {\n    if (typeof value !== \"object\" && !Array.isArray(value)) {\n      return false;\n    }\n    const hop = Object.hasOwn(value, identifier);\n    if (!hop) {\n      return true;\n    }\n    value = value[identifier];\n  }\n  return typeof value === \"object\" || Array.isArray(value);\n};\nvar _default = exports.default = canInjectKey;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.getByKey = getByKey;\nexports.getByKeyRange = getByKeyRange;\nexports.getIndexByKey = getIndexByKey;\nexports.getIndexByKeyGTE = getIndexByKeyGTE;\nexports.getIndexByKeyRange = getIndexByKeyRange;\nvar _cmp = _interopRequireDefault(require(\"./cmp.js\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n/**\n * Classic binary search implementation. Returns the index where the key\n * should be inserted, assuming the records list is ordered.\n */\nfunction binarySearch(records, key) {\n  let low = 0;\n  let high = records.length;\n  let mid;\n  while (low < high) {\n    mid = low + high >>> 1; // like Math.floor((low + high) / 2) but fast\n    if ((0, _cmp.default)(records[mid].key, key) < 0) {\n      low = mid + 1;\n    } else {\n      high = mid;\n    }\n  }\n  return low;\n}\n\n/**\n * Equivalent to `records.findIndex(record => cmp(record.key, key) === 0)`\n */\nfunction getIndexByKey(records, key) {\n  const idx = binarySearch(records, key);\n  const record = records[idx];\n  if (record && (0, _cmp.default)(record.key, key) === 0) {\n    return idx;\n  }\n  return -1;\n}\n\n/**\n * Equivalent to `records.find(record => cmp(record.key, key) === 0)`\n */\nfunction getByKey(records, key) {\n  const idx = getIndexByKey(records, key);\n  return records[idx];\n}\n\n/**\n * Equivalent to `records.findIndex(record => key.includes(record.key))`\n */\nfunction getIndexByKeyRange(records, keyRange) {\n  const lowerIdx = typeof keyRange.lower === \"undefined\" ? 0 : binarySearch(records, keyRange.lower);\n  const upperIdx = typeof keyRange.upper === \"undefined\" ? records.length - 1 : binarySearch(records, keyRange.upper);\n  for (let i = lowerIdx; i <= upperIdx; i++) {\n    const record = records[i];\n    if (record && keyRange.includes(record.key)) {\n      return i;\n    }\n  }\n  return -1;\n}\n\n/**\n * Equivalent to `records.find(record => key.includes(record.key))`\n */\nfunction getByKeyRange(records, keyRange) {\n  const idx = getIndexByKeyRange(records, keyRange);\n  return records[idx];\n}\n\n/**\n * Equivalent to `records.findIndex(record => cmp(record.key, key) >= 0)`\n */\nfunction getIndexByKeyGTE(records, key) {\n  const idx = binarySearch(records, key);\n  const record = records[idx];\n  if (record && (0, _cmp.default)(record.key, key) >= 0) {\n    return idx;\n  }\n  return -1;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _FDBKeyRange = _interopRequireDefault(require(\"../FDBKeyRange.js\"));\nvar _binarySearch = require(\"./binarySearch.js\");\nvar _cmp = _interopRequireDefault(require(\"./cmp.js\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nclass RecordStore {\n  records = [];\n  get(key) {\n    if (key instanceof _FDBKeyRange.default) {\n      return (0, _binarySearch.getByKeyRange)(this.records, key);\n    }\n    return (0, _binarySearch.getByKey)(this.records, key);\n  }\n  add(newRecord) {\n    // Find where to put it so it's sorted by key\n    let i;\n    if (this.records.length === 0) {\n      i = 0;\n    } else {\n      i = (0, _binarySearch.getIndexByKeyGTE)(this.records, newRecord.key);\n      if (i === -1) {\n        // If no matching key, add to end\n        i = this.records.length;\n      } else {\n        // If matching key, advance to appropriate position based on value (used in indexes)\n        while (i < this.records.length && (0, _cmp.default)(this.records[i].key, newRecord.key) === 0) {\n          if ((0, _cmp.default)(this.records[i].value, newRecord.value) !== -1) {\n            // Record value >= newRecord value, so insert here\n            break;\n          }\n          i += 1; // Look at next record\n        }\n      }\n    }\n    this.records.splice(i, 0, newRecord);\n  }\n  delete(key) {\n    const deletedRecords = [];\n    const isRange = key instanceof _FDBKeyRange.default;\n    while (true) {\n      const idx = isRange ? (0, _binarySearch.getIndexByKeyRange)(this.records, key) : (0, _binarySearch.getIndexByKey)(this.records, key);\n      if (idx === -1) {\n        break;\n      }\n      deletedRecords.push(this.records[idx]);\n      this.records.splice(idx, 1);\n    }\n    return deletedRecords;\n  }\n  deleteByValue(key) {\n    const range = key instanceof _FDBKeyRange.default ? key : _FDBKeyRange.default.only(key);\n    const deletedRecords = [];\n    this.records = this.records.filter(record => {\n      const shouldDelete = range.includes(record.value);\n      if (shouldDelete) {\n        deletedRecords.push(record);\n      }\n      return !shouldDelete;\n    });\n    return deletedRecords;\n  }\n  clear() {\n    const deletedRecords = this.records.slice();\n    this.records = [];\n    return deletedRecords;\n  }\n  values(range, direction = \"next\") {\n    return {\n      [Symbol.iterator]: () => {\n        let i;\n        if (direction === \"next\") {\n          i = 0;\n          if (range !== undefined && range.lower !== undefined) {\n            while (this.records[i] !== undefined) {\n              const cmpResult = (0, _cmp.default)(this.records[i].key, range.lower);\n              if (cmpResult === 1 || cmpResult === 0 && !range.lowerOpen) {\n                break;\n              }\n              i += 1;\n            }\n          }\n        } else {\n          i = this.records.length - 1;\n          if (range !== undefined && range.upper !== undefined) {\n            while (this.records[i] !== undefined) {\n              const cmpResult = (0, _cmp.default)(this.records[i].key, range.upper);\n              if (cmpResult === -1 || cmpResult === 0 && !range.upperOpen) {\n                break;\n              }\n              i -= 1;\n            }\n          }\n        }\n        return {\n          next: () => {\n            let done;\n            let value;\n            if (direction === \"next\") {\n              value = this.records[i];\n              done = i >= this.records.length;\n              i += 1;\n              if (!done && range !== undefined && range.upper !== undefined) {\n                const cmpResult = (0, _cmp.default)(value.key, range.upper);\n                done = cmpResult === 1 || cmpResult === 0 && range.upperOpen;\n                if (done) {\n                  value = undefined;\n                }\n              }\n            } else {\n              value = this.records[i];\n              done = i < 0;\n              i -= 1;\n              if (!done && range !== undefined && range.lower !== undefined) {\n                const cmpResult = (0, _cmp.default)(value.key, range.lower);\n                done = cmpResult === -1 || cmpResult === 0 && range.lowerOpen;\n                if (done) {\n                  value = undefined;\n                }\n              }\n            }\n\n            // The weird \"as IteratorResult<Record>\" is needed because of\n            // https://github.com/Microsoft/TypeScript/issues/11375 and\n            // https://github.com/Microsoft/TypeScript/issues/2983\n            return {\n              done,\n              value\n            };\n          }\n        };\n      }\n    };\n  }\n}\nvar _default = exports.default = RecordStore;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _errors = require(\"./errors.js\");\nvar _extractKey = _interopRequireDefault(require(\"./extractKey.js\"));\nvar _RecordStore = _interopRequireDefault(require(\"./RecordStore.js\"));\nvar _valueToKey = _interopRequireDefault(require(\"./valueToKey.js\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-index\nclass Index {\n  deleted = false;\n  // Initialized should be used to decide whether to throw an error or abort the versionchange transaction when there is a\n  // constraint\n  initialized = false;\n  records = new _RecordStore.default();\n  constructor(rawObjectStore, name, keyPath, multiEntry, unique) {\n    this.rawObjectStore = rawObjectStore;\n    this.name = name;\n    this.keyPath = keyPath;\n    this.multiEntry = multiEntry;\n    this.unique = unique;\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-retrieving-a-value-from-an-index\n  getKey(key) {\n    const record = this.records.get(key);\n    return record !== undefined ? record.value : undefined;\n  }\n\n  // http://w3c.github.io/IndexedDB/#retrieve-multiple-referenced-values-from-an-index\n  getAllKeys(range, count) {\n    if (count === undefined || count === 0) {\n      count = Infinity;\n    }\n    const records = [];\n    for (const record of this.records.values(range)) {\n      records.push(structuredClone(record.value));\n      if (records.length >= count) {\n        break;\n      }\n    }\n    return records;\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#index-referenced-value-retrieval-operation\n  getValue(key) {\n    const record = this.records.get(key);\n    return record !== undefined ? this.rawObjectStore.getValue(record.value) : undefined;\n  }\n\n  // http://w3c.github.io/IndexedDB/#retrieve-multiple-referenced-values-from-an-index\n  getAllValues(range, count) {\n    if (count === undefined || count === 0) {\n      count = Infinity;\n    }\n    const records = [];\n    for (const record of this.records.values(range)) {\n      records.push(this.rawObjectStore.getValue(record.value));\n      if (records.length >= count) {\n        break;\n      }\n    }\n    return records;\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-storing-a-record-into-an-object-store (step 7)\n  storeRecord(newRecord) {\n    let indexKey;\n    try {\n      indexKey = (0, _extractKey.default)(this.keyPath, newRecord.value).key;\n    } catch (err) {\n      if (err.name === \"DataError\") {\n        // Invalid key is not an actual error, just means we do not store an entry in this index\n        return;\n      }\n      throw err;\n    }\n    if (!this.multiEntry || !Array.isArray(indexKey)) {\n      try {\n        (0, _valueToKey.default)(indexKey);\n      } catch (e) {\n        return;\n      }\n    } else {\n      // remove any elements from index key that are not valid keys and remove any duplicate elements from index\n      // key such that only one instance of the duplicate value remains.\n      const keep = [];\n      for (const part of indexKey) {\n        if (keep.indexOf(part) < 0) {\n          try {\n            keep.push((0, _valueToKey.default)(part));\n          } catch (err) {\n            /* Do nothing */\n          }\n        }\n      }\n      indexKey = keep;\n    }\n    if (!this.multiEntry || !Array.isArray(indexKey)) {\n      if (this.unique) {\n        const existingRecord = this.records.get(indexKey);\n        if (existingRecord) {\n          throw new _errors.ConstraintError();\n        }\n      }\n    } else {\n      if (this.unique) {\n        for (const individualIndexKey of indexKey) {\n          const existingRecord = this.records.get(individualIndexKey);\n          if (existingRecord) {\n            throw new _errors.ConstraintError();\n          }\n        }\n      }\n    }\n    if (!this.multiEntry || !Array.isArray(indexKey)) {\n      this.records.add({\n        key: indexKey,\n        value: newRecord.key\n      });\n    } else {\n      for (const individualIndexKey of indexKey) {\n        this.records.add({\n          key: individualIndexKey,\n          value: newRecord.key\n        });\n      }\n    }\n  }\n  initialize(transaction) {\n    if (this.initialized) {\n      throw new Error(\"Index already initialized\");\n    }\n    transaction._execRequestAsync({\n      operation: () => {\n        try {\n          // Create index based on current value of objectstore\n          for (const record of this.rawObjectStore.records.values()) {\n            this.storeRecord(record);\n          }\n          this.initialized = true;\n        } catch (err) {\n          // console.error(err);\n          transaction._abort(err.name);\n        }\n      },\n      source: null\n    });\n  }\n  count(range) {\n    let count = 0;\n\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    for (const record of this.records.values(range)) {\n      count += 1;\n    }\n    return count;\n  }\n}\nvar _default = exports.default = Index;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-valid-key-path\nconst validateKeyPath = (keyPath, parent) => {\n  // This doesn't make sense to me based on the spec, but it is needed to pass the W3C KeyPath tests (see same\n  // comment in extractKey)\n  if (keyPath !== undefined && keyPath !== null && typeof keyPath !== \"string\" && keyPath.toString && (parent === \"array\" || !Array.isArray(keyPath))) {\n    keyPath = keyPath.toString();\n  }\n  if (typeof keyPath === \"string\") {\n    if (keyPath === \"\" && parent !== \"string\") {\n      return;\n    }\n    try {\n      // https://mathiasbynens.be/demo/javascript-identifier-regex for ECMAScript 5.1 / Unicode v7.0.0, with\n      // reserved words at beginning removed\n      const validIdentifierRegex =\n      // eslint-disable-next-line no-misleading-character-class\n      /^(?:[$A-Z_a-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])(?:[$0-9A-Z_a-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B2\\u08E4-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA69D\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2D\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])*$/;\n      if (keyPath.length >= 1 && validIdentifierRegex.test(keyPath)) {\n        return;\n      }\n    } catch (err) {\n      throw new SyntaxError(err.message);\n    }\n    if (keyPath.indexOf(\" \") >= 0) {\n      throw new SyntaxError(\"The keypath argument contains an invalid key path (no spaces allowed).\");\n    }\n  }\n  if (Array.isArray(keyPath) && keyPath.length > 0) {\n    if (parent) {\n      // No nested arrays\n      throw new SyntaxError(\"The keypath argument contains an invalid key path (nested arrays).\");\n    }\n    for (const part of keyPath) {\n      validateKeyPath(part, \"array\");\n    }\n    return;\n  } else if (typeof keyPath === \"string\" && keyPath.indexOf(\".\") >= 0) {\n    keyPath = keyPath.split(\".\");\n    for (const part of keyPath) {\n      validateKeyPath(part, \"string\");\n    }\n    return;\n  }\n  throw new SyntaxError();\n};\nvar _default = exports.default = validateKeyPath;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _FDBCursor = _interopRequireDefault(require(\"./FDBCursor.js\"));\nvar _FDBCursorWithValue = _interopRequireDefault(require(\"./FDBCursorWithValue.js\"));\nvar _FDBIndex = _interopRequireDefault(require(\"./FDBIndex.js\"));\nvar _FDBKeyRange = _interopRequireDefault(require(\"./FDBKeyRange.js\"));\nvar _FDBRequest = _interopRequireDefault(require(\"./FDBRequest.js\"));\nvar _canInjectKey = _interopRequireDefault(require(\"./lib/canInjectKey.js\"));\nvar _enforceRange = _interopRequireDefault(require(\"./lib/enforceRange.js\"));\nvar _errors = require(\"./lib/errors.js\");\nvar _extractKey = _interopRequireDefault(require(\"./lib/extractKey.js\"));\nvar _FakeDOMStringList = _interopRequireDefault(require(\"./lib/FakeDOMStringList.js\"));\nvar _Index = _interopRequireDefault(require(\"./lib/Index.js\"));\nvar _validateKeyPath = _interopRequireDefault(require(\"./lib/validateKeyPath.js\"));\nvar _valueToKey = _interopRequireDefault(require(\"./lib/valueToKey.js\"));\nvar _valueToKeyRange = _interopRequireDefault(require(\"./lib/valueToKeyRange.js\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nconst confirmActiveTransaction = objectStore => {\n  if (objectStore._rawObjectStore.deleted) {\n    throw new _errors.InvalidStateError();\n  }\n  if (objectStore.transaction._state !== \"active\") {\n    throw new _errors.TransactionInactiveError();\n  }\n};\nconst buildRecordAddPut = (objectStore, value, key) => {\n  confirmActiveTransaction(objectStore);\n  if (objectStore.transaction.mode === \"readonly\") {\n    throw new _errors.ReadOnlyError();\n  }\n  if (objectStore.keyPath !== null) {\n    if (key !== undefined) {\n      throw new _errors.DataError();\n    }\n  }\n  const clone = structuredClone(value);\n  if (objectStore.keyPath !== null) {\n    const tempKey = (0, _extractKey.default)(objectStore.keyPath, clone);\n    if (tempKey.type === \"found\") {\n      (0, _valueToKey.default)(tempKey.key);\n    } else {\n      if (!objectStore._rawObjectStore.keyGenerator) {\n        throw new _errors.DataError();\n      } else if (!(0, _canInjectKey.default)(objectStore.keyPath, clone)) {\n        throw new _errors.DataError();\n      }\n    }\n  }\n  if (objectStore.keyPath === null && objectStore._rawObjectStore.keyGenerator === null && key === undefined) {\n    throw new _errors.DataError();\n  }\n  if (key !== undefined) {\n    key = (0, _valueToKey.default)(key);\n  }\n  return {\n    key,\n    value: clone\n  };\n};\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#object-store\nclass FDBObjectStore {\n  _indexesCache = new Map();\n  constructor(transaction, rawObjectStore) {\n    this._rawObjectStore = rawObjectStore;\n    this._name = rawObjectStore.name;\n    this.keyPath = rawObjectStore.keyPath;\n    this.autoIncrement = rawObjectStore.autoIncrement;\n    this.transaction = transaction;\n    this.indexNames = new _FakeDOMStringList.default(...Array.from(rawObjectStore.rawIndexes.keys()).sort());\n  }\n  get name() {\n    return this._name;\n  }\n\n  // http://w3c.github.io/IndexedDB/#dom-idbobjectstore-name\n  set name(name) {\n    const transaction = this.transaction;\n    if (!transaction.db._runningVersionchangeTransaction) {\n      throw new _errors.InvalidStateError();\n    }\n    confirmActiveTransaction(this);\n    name = String(name);\n    if (name === this._name) {\n      return;\n    }\n    if (this._rawObjectStore.rawDatabase.rawObjectStores.has(name)) {\n      throw new _errors.ConstraintError();\n    }\n    const oldName = this._name;\n    const oldObjectStoreNames = [...transaction.db.objectStoreNames];\n    this._name = name;\n    this._rawObjectStore.name = name;\n    this.transaction._objectStoresCache.delete(oldName);\n    this.transaction._objectStoresCache.set(name, this);\n    this._rawObjectStore.rawDatabase.rawObjectStores.delete(oldName);\n    this._rawObjectStore.rawDatabase.rawObjectStores.set(name, this._rawObjectStore);\n    transaction.db.objectStoreNames = new _FakeDOMStringList.default(...Array.from(this._rawObjectStore.rawDatabase.rawObjectStores.keys()).filter(objectStoreName => {\n      const objectStore = this._rawObjectStore.rawDatabase.rawObjectStores.get(objectStoreName);\n      return objectStore && !objectStore.deleted;\n    }).sort());\n    const oldScope = new Set(transaction._scope);\n    const oldTransactionObjectStoreNames = [...transaction.objectStoreNames];\n    this.transaction._scope.delete(oldName);\n    transaction._scope.add(name);\n    transaction.objectStoreNames = new _FakeDOMStringList.default(...Array.from(transaction._scope).sort());\n    transaction._rollbackLog.push(() => {\n      this._name = oldName;\n      this._rawObjectStore.name = oldName;\n      this.transaction._objectStoresCache.delete(name);\n      this.transaction._objectStoresCache.set(oldName, this);\n      this._rawObjectStore.rawDatabase.rawObjectStores.delete(name);\n      this._rawObjectStore.rawDatabase.rawObjectStores.set(oldName, this._rawObjectStore);\n      transaction.db.objectStoreNames = new _FakeDOMStringList.default(...oldObjectStoreNames);\n      transaction._scope = oldScope;\n      transaction.objectStoreNames = new _FakeDOMStringList.default(...oldTransactionObjectStoreNames);\n    });\n  }\n  put(value, key) {\n    if (arguments.length === 0) {\n      throw new TypeError();\n    }\n    const record = buildRecordAddPut(this, value, key);\n    return this.transaction._execRequestAsync({\n      operation: this._rawObjectStore.storeRecord.bind(this._rawObjectStore, record, false, this.transaction._rollbackLog),\n      source: this\n    });\n  }\n  add(value, key) {\n    if (arguments.length === 0) {\n      throw new TypeError();\n    }\n    const record = buildRecordAddPut(this, value, key);\n    return this.transaction._execRequestAsync({\n      operation: this._rawObjectStore.storeRecord.bind(this._rawObjectStore, record, true, this.transaction._rollbackLog),\n      source: this\n    });\n  }\n  delete(key) {\n    if (arguments.length === 0) {\n      throw new TypeError();\n    }\n    confirmActiveTransaction(this);\n    if (this.transaction.mode === \"readonly\") {\n      throw new _errors.ReadOnlyError();\n    }\n    if (!(key instanceof _FDBKeyRange.default)) {\n      key = (0, _valueToKey.default)(key);\n    }\n    return this.transaction._execRequestAsync({\n      operation: this._rawObjectStore.deleteRecord.bind(this._rawObjectStore, key, this.transaction._rollbackLog),\n      source: this\n    });\n  }\n  get(key) {\n    if (arguments.length === 0) {\n      throw new TypeError();\n    }\n    confirmActiveTransaction(this);\n    if (!(key instanceof _FDBKeyRange.default)) {\n      key = (0, _valueToKey.default)(key);\n    }\n    return this.transaction._execRequestAsync({\n      operation: this._rawObjectStore.getValue.bind(this._rawObjectStore, key),\n      source: this\n    });\n  }\n\n  // http://w3c.github.io/IndexedDB/#dom-idbobjectstore-getall\n  getAll(query, count) {\n    if (arguments.length > 1 && count !== undefined) {\n      count = (0, _enforceRange.default)(count, \"unsigned long\");\n    }\n    confirmActiveTransaction(this);\n    const range = (0, _valueToKeyRange.default)(query);\n    return this.transaction._execRequestAsync({\n      operation: this._rawObjectStore.getAllValues.bind(this._rawObjectStore, range, count),\n      source: this\n    });\n  }\n\n  // http://w3c.github.io/IndexedDB/#dom-idbobjectstore-getkey\n  getKey(key) {\n    if (arguments.length === 0) {\n      throw new TypeError();\n    }\n    confirmActiveTransaction(this);\n    if (!(key instanceof _FDBKeyRange.default)) {\n      key = (0, _valueToKey.default)(key);\n    }\n    return this.transaction._execRequestAsync({\n      operation: this._rawObjectStore.getKey.bind(this._rawObjectStore, key),\n      source: this\n    });\n  }\n\n  // http://w3c.github.io/IndexedDB/#dom-idbobjectstore-getallkeys\n  getAllKeys(query, count) {\n    if (arguments.length > 1 && count !== undefined) {\n      count = (0, _enforceRange.default)(count, \"unsigned long\");\n    }\n    confirmActiveTransaction(this);\n    const range = (0, _valueToKeyRange.default)(query);\n    return this.transaction._execRequestAsync({\n      operation: this._rawObjectStore.getAllKeys.bind(this._rawObjectStore, range, count),\n      source: this\n    });\n  }\n  clear() {\n    confirmActiveTransaction(this);\n    if (this.transaction.mode === \"readonly\") {\n      throw new _errors.ReadOnlyError();\n    }\n    return this.transaction._execRequestAsync({\n      operation: this._rawObjectStore.clear.bind(this._rawObjectStore, this.transaction._rollbackLog),\n      source: this\n    });\n  }\n  openCursor(range, direction) {\n    confirmActiveTransaction(this);\n    if (range === null) {\n      range = undefined;\n    }\n    if (range !== undefined && !(range instanceof _FDBKeyRange.default)) {\n      range = _FDBKeyRange.default.only((0, _valueToKey.default)(range));\n    }\n    const request = new _FDBRequest.default();\n    request.source = this;\n    request.transaction = this.transaction;\n    const cursor = new _FDBCursorWithValue.default(this, range, direction, request);\n    return this.transaction._execRequestAsync({\n      operation: cursor._iterate.bind(cursor),\n      request,\n      source: this\n    });\n  }\n  openKeyCursor(range, direction) {\n    confirmActiveTransaction(this);\n    if (range === null) {\n      range = undefined;\n    }\n    if (range !== undefined && !(range instanceof _FDBKeyRange.default)) {\n      range = _FDBKeyRange.default.only((0, _valueToKey.default)(range));\n    }\n    const request = new _FDBRequest.default();\n    request.source = this;\n    request.transaction = this.transaction;\n    const cursor = new _FDBCursor.default(this, range, direction, request, true);\n    return this.transaction._execRequestAsync({\n      operation: cursor._iterate.bind(cursor),\n      request,\n      source: this\n    });\n  }\n\n  // tslint:-next-line max-line-length\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBObjectStore-createIndex-IDBIndex-DOMString-name-DOMString-sequence-DOMString--keyPath-IDBIndexParameters-optionalParameters\n  createIndex(name, keyPath, optionalParameters = {}) {\n    if (arguments.length < 2) {\n      throw new TypeError();\n    }\n    const multiEntry = optionalParameters.multiEntry !== undefined ? optionalParameters.multiEntry : false;\n    const unique = optionalParameters.unique !== undefined ? optionalParameters.unique : false;\n    if (this.transaction.mode !== \"versionchange\") {\n      throw new _errors.InvalidStateError();\n    }\n    confirmActiveTransaction(this);\n    if (this.indexNames.contains(name)) {\n      throw new _errors.ConstraintError();\n    }\n    (0, _validateKeyPath.default)(keyPath);\n    if (Array.isArray(keyPath) && multiEntry) {\n      throw new _errors.InvalidAccessError();\n    }\n\n    // The index that is requested to be created can contain constraints on the data allowed in the index's\n    // referenced object store, such as requiring uniqueness of the values referenced by the index's keyPath. If the\n    // referenced object store already contains data which violates these constraints, this MUST NOT cause the\n    // implementation of createIndex to throw an exception or affect what it returns. The implementation MUST still\n    // create and return an IDBIndex object. Instead the implementation must queue up an operation to abort the\n    // \"versionchange\" transaction which was used for the createIndex call.\n\n    const indexNames = [...this.indexNames];\n    this.transaction._rollbackLog.push(() => {\n      const index2 = this._rawObjectStore.rawIndexes.get(name);\n      if (index2) {\n        index2.deleted = true;\n      }\n      this.indexNames = new _FakeDOMStringList.default(...indexNames);\n      this._rawObjectStore.rawIndexes.delete(name);\n    });\n    const index = new _Index.default(this._rawObjectStore, name, keyPath, multiEntry, unique);\n    this.indexNames._push(name);\n    this.indexNames._sort();\n    this._rawObjectStore.rawIndexes.set(name, index);\n    index.initialize(this.transaction); // This is async by design\n\n    return new _FDBIndex.default(this, index);\n  }\n\n  // https://w3c.github.io/IndexedDB/#dom-idbobjectstore-index\n  index(name) {\n    if (arguments.length === 0) {\n      throw new TypeError();\n    }\n    if (this._rawObjectStore.deleted || this.transaction._state === \"finished\") {\n      throw new _errors.InvalidStateError();\n    }\n    const index = this._indexesCache.get(name);\n    if (index !== undefined) {\n      return index;\n    }\n    const rawIndex = this._rawObjectStore.rawIndexes.get(name);\n    if (!this.indexNames.contains(name) || rawIndex === undefined) {\n      throw new _errors.NotFoundError();\n    }\n    const index2 = new _FDBIndex.default(this, rawIndex);\n    this._indexesCache.set(name, index2);\n    return index2;\n  }\n  deleteIndex(name) {\n    if (arguments.length === 0) {\n      throw new TypeError();\n    }\n    if (this.transaction.mode !== \"versionchange\") {\n      throw new _errors.InvalidStateError();\n    }\n    confirmActiveTransaction(this);\n    const rawIndex = this._rawObjectStore.rawIndexes.get(name);\n    if (rawIndex === undefined) {\n      throw new _errors.NotFoundError();\n    }\n    this.transaction._rollbackLog.push(() => {\n      rawIndex.deleted = false;\n      this._rawObjectStore.rawIndexes.set(name, rawIndex);\n      this.indexNames._push(name);\n      this.indexNames._sort();\n    });\n    this.indexNames = new _FakeDOMStringList.default(...Array.from(this.indexNames).filter(indexName => {\n      return indexName !== name;\n    }));\n    rawIndex.deleted = true; // Not sure if this is supposed to happen synchronously\n\n    this.transaction._execRequestAsync({\n      operation: () => {\n        const rawIndex2 = this._rawObjectStore.rawIndexes.get(name);\n\n        // Hack in case another index is given this name before this async request is processed. It'd be better\n        // to have a real unique ID for each index.\n        if (rawIndex === rawIndex2) {\n          this._rawObjectStore.rawIndexes.delete(name);\n        }\n      },\n      source: this\n    });\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBObjectStore-count-IDBRequest-any-key\n  count(key) {\n    confirmActiveTransaction(this);\n    if (key === null) {\n      key = undefined;\n    }\n    if (key !== undefined && !(key instanceof _FDBKeyRange.default)) {\n      key = _FDBKeyRange.default.only((0, _valueToKey.default)(key));\n    }\n    return this.transaction._execRequestAsync({\n      operation: () => {\n        return this._rawObjectStore.count(key);\n      },\n      source: this\n    });\n  }\n  toString() {\n    return \"[object IDBObjectStore]\";\n  }\n}\nvar _default = exports.default = FDBObjectStore;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nclass Event {\n  eventPath = [];\n  NONE = 0;\n  CAPTURING_PHASE = 1;\n  AT_TARGET = 2;\n  BUBBLING_PHASE = 3;\n\n  // Flags\n  propagationStopped = false;\n  immediatePropagationStopped = false;\n  canceled = false;\n  initialized = true;\n  dispatched = false;\n  target = null;\n  currentTarget = null;\n  eventPhase = 0;\n  defaultPrevented = false;\n  isTrusted = false;\n  timeStamp = Date.now();\n  constructor(type, eventInitDict = {}) {\n    this.type = type;\n    this.bubbles = eventInitDict.bubbles !== undefined ? eventInitDict.bubbles : false;\n    this.cancelable = eventInitDict.cancelable !== undefined ? eventInitDict.cancelable : false;\n  }\n  preventDefault() {\n    if (this.cancelable) {\n      this.canceled = true;\n    }\n  }\n  stopPropagation() {\n    this.propagationStopped = true;\n  }\n  stopImmediatePropagation() {\n    this.propagationStopped = true;\n    this.immediatePropagationStopped = true;\n  }\n}\nvar _default = exports.default = Event;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.queueTask = void 0;\n// When running within Node.js (including jsdom), we want to use setImmediate\n// (which runs immediately) rather than setTimeout (which enforces a minimum\n// delay of 1ms, and on Windows only has a resolution of 15ms or so).  jsdom\n// doesn't provide setImmediate (to better match the browser environment) and\n// sandboxes scripts, but its sandbox is by necessity imperfect, so we can break\n// out of it:\n//\n// - https://github.com/jsdom/jsdom#executing-scripts\n// - https://github.com/jsdom/jsdom/issues/2729\n// - https://github.com/scala-js/scala-js-macrotask-executor/pull/17\nfunction getSetImmediateFromJsdom() {\n  if (typeof navigator !== \"undefined\" && /jsdom/.test(navigator.userAgent)) {\n    const outerRealmFunctionConstructor = Node.constructor;\n    return new outerRealmFunctionConstructor(\"return setImmediate\")();\n  } else {\n    return undefined;\n  }\n}\n\n// Schedules a task to run later.  Use Node.js's setImmediate if available and\n// setTimeout otherwise.  Note that options like process.nextTick or\n// queueMicrotask will likely not work: IndexedDB semantics require that\n// transactions are marked as not active when the event loop runs. The next\n// tick queue and microtask queue run within the current event loop macrotask,\n// so they'd process database operations too quickly.\nconst queueTask = fn => {\n  const setImmediate = globalThis.setImmediate || getSetImmediateFromJsdom() || (fn => setTimeout(fn, 0));\n  setImmediate(fn);\n};\nexports.queueTask = queueTask;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _FDBObjectStore = _interopRequireDefault(require(\"./FDBObjectStore.js\"));\nvar _FDBRequest = _interopRequireDefault(require(\"./FDBRequest.js\"));\nvar _errors = require(\"./lib/errors.js\");\nvar _FakeDOMStringList = _interopRequireDefault(require(\"./lib/FakeDOMStringList.js\"));\nvar _FakeEvent = _interopRequireDefault(require(\"./lib/FakeEvent.js\"));\nvar _FakeEventTarget = _interopRequireDefault(require(\"./lib/FakeEventTarget.js\"));\nvar _scheduling = require(\"./lib/scheduling.js\");\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#transaction\nclass FDBTransaction extends _FakeEventTarget.default {\n  _state = \"active\";\n  _started = false;\n  _rollbackLog = [];\n  _objectStoresCache = new Map();\n  error = null;\n  onabort = null;\n  oncomplete = null;\n  onerror = null;\n  _requests = [];\n  constructor(storeNames, mode, db) {\n    super();\n    this._scope = new Set(storeNames);\n    this.mode = mode;\n    this.db = db;\n    this.objectStoreNames = new _FakeDOMStringList.default(...Array.from(this._scope).sort());\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-aborting-a-transaction\n  _abort(errName) {\n    for (const f of this._rollbackLog.reverse()) {\n      f();\n    }\n    if (errName !== null) {\n      const e = new DOMException(undefined, errName);\n      this.error = e;\n    }\n\n    // Should this directly remove from _requests?\n    for (const {\n      request\n    } of this._requests) {\n      if (request.readyState !== \"done\") {\n        request.readyState = \"done\"; // This will cancel execution of this request's operation\n        if (request.source) {\n          request.result = undefined;\n          request.error = new _errors.AbortError();\n          const event = new _FakeEvent.default(\"error\", {\n            bubbles: true,\n            cancelable: true\n          });\n          event.eventPath = [this.db, this];\n          request.dispatchEvent(event);\n        }\n      }\n    }\n    (0, _scheduling.queueTask)(() => {\n      const event = new _FakeEvent.default(\"abort\", {\n        bubbles: true,\n        cancelable: false\n      });\n      event.eventPath = [this.db];\n      this.dispatchEvent(event);\n    });\n    this._state = \"finished\";\n  }\n  abort() {\n    if (this._state === \"committing\" || this._state === \"finished\") {\n      throw new _errors.InvalidStateError();\n    }\n    this._state = \"active\";\n    this._abort(null);\n  }\n\n  // http://w3c.github.io/IndexedDB/#dom-idbtransaction-objectstore\n  objectStore(name) {\n    if (this._state !== \"active\") {\n      throw new _errors.InvalidStateError();\n    }\n    const objectStore = this._objectStoresCache.get(name);\n    if (objectStore !== undefined) {\n      return objectStore;\n    }\n    const rawObjectStore = this.db._rawDatabase.rawObjectStores.get(name);\n    if (!this._scope.has(name) || rawObjectStore === undefined) {\n      throw new _errors.NotFoundError();\n    }\n    const objectStore2 = new _FDBObjectStore.default(this, rawObjectStore);\n    this._objectStoresCache.set(name, objectStore2);\n    return objectStore2;\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-asynchronously-executing-a-request\n  _execRequestAsync(obj) {\n    const source = obj.source;\n    const operation = obj.operation;\n    let request = Object.hasOwn(obj, \"request\") ? obj.request : null;\n    if (this._state !== \"active\") {\n      throw new _errors.TransactionInactiveError();\n    }\n\n    // Request should only be passed for cursors\n    if (!request) {\n      if (!source) {\n        // Special requests like indexes that just need to run some code\n        request = new _FDBRequest.default();\n      } else {\n        request = new _FDBRequest.default();\n        request.source = source;\n        request.transaction = source.transaction;\n      }\n    }\n    this._requests.push({\n      operation,\n      request\n    });\n    return request;\n  }\n  _start() {\n    this._started = true;\n\n    // Remove from request queue - cursor ones will be added back if necessary by cursor.continue and such\n    let operation;\n    let request;\n    while (this._requests.length > 0) {\n      const r = this._requests.shift();\n\n      // This should only be false if transaction was aborted\n      if (r && r.request.readyState !== \"done\") {\n        request = r.request;\n        operation = r.operation;\n        break;\n      }\n    }\n    if (request && operation) {\n      if (!request.source) {\n        // Special requests like indexes that just need to run some code, with error handling already built into\n        // operation\n        operation();\n      } else {\n        let defaultAction;\n        let event;\n        try {\n          const result = operation();\n          request.readyState = \"done\";\n          request.result = result;\n          request.error = undefined;\n\n          // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-fire-a-success-event\n          if (this._state === \"inactive\") {\n            this._state = \"active\";\n          }\n          event = new _FakeEvent.default(\"success\", {\n            bubbles: false,\n            cancelable: false\n          });\n        } catch (err) {\n          request.readyState = \"done\";\n          request.result = undefined;\n          request.error = err;\n\n          // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-fire-an-error-event\n          if (this._state === \"inactive\") {\n            this._state = \"active\";\n          }\n          event = new _FakeEvent.default(\"error\", {\n            bubbles: true,\n            cancelable: true\n          });\n          defaultAction = this._abort.bind(this, err.name);\n        }\n        try {\n          event.eventPath = [this.db, this];\n          request.dispatchEvent(event);\n        } catch (err) {\n          if (this._state !== \"committing\") {\n            this._abort(\"AbortError\");\n          }\n          throw err;\n        }\n\n        // Default action of event\n        if (!event.canceled) {\n          if (defaultAction) {\n            defaultAction();\n          }\n        }\n      }\n\n      // Give it another chance for new handlers to be set before finishing\n      (0, _scheduling.queueTask)(this._start.bind(this));\n      return;\n    }\n\n    // Check if transaction complete event needs to be fired\n    if (this._state !== \"finished\") {\n      // Either aborted or committed already\n      this._state = \"finished\";\n      if (!this.error) {\n        const event = new _FakeEvent.default(\"complete\");\n        this.dispatchEvent(event);\n      }\n    }\n  }\n  commit() {\n    if (this._state !== \"active\") {\n      throw new _errors.InvalidStateError();\n    }\n    this._state = \"committing\";\n  }\n  toString() {\n    return \"[object IDBRequest]\";\n  }\n}\nvar _default = exports.default = FDBTransaction;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _errors = require(\"./errors.js\");\nconst MAX_KEY = 9007199254740992;\nclass KeyGenerator {\n  // This is kind of wrong. Should start at 1 and increment only after record is saved\n  num = 0;\n  next() {\n    if (this.num >= MAX_KEY) {\n      throw new _errors.ConstraintError();\n    }\n    this.num += 1;\n    return this.num;\n  }\n\n  // https://w3c.github.io/IndexedDB/#possibly-update-the-key-generator\n  setIfLarger(num) {\n    const value = Math.floor(Math.min(num, MAX_KEY)) - 1;\n    if (value >= this.num) {\n      this.num = value + 1;\n    }\n  }\n}\nvar _default = exports.default = KeyGenerator;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _errors = require(\"./errors.js\");\nvar _extractKey = _interopRequireDefault(require(\"./extractKey.js\"));\nvar _KeyGenerator = _interopRequireDefault(require(\"./KeyGenerator.js\"));\nvar _RecordStore = _interopRequireDefault(require(\"./RecordStore.js\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-object-store\nclass ObjectStore {\n  deleted = false;\n  records = new _RecordStore.default();\n  rawIndexes = new Map();\n  constructor(rawDatabase, name, keyPath, autoIncrement) {\n    this.rawDatabase = rawDatabase;\n    this.keyGenerator = autoIncrement === true ? new _KeyGenerator.default() : null;\n    this.deleted = false;\n    this.name = name;\n    this.keyPath = keyPath;\n    this.autoIncrement = autoIncrement;\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-retrieving-a-value-from-an-object-store\n  getKey(key) {\n    const record = this.records.get(key);\n    return record !== undefined ? structuredClone(record.key) : undefined;\n  }\n\n  // http://w3c.github.io/IndexedDB/#retrieve-multiple-keys-from-an-object-store\n  getAllKeys(range, count) {\n    if (count === undefined || count === 0) {\n      count = Infinity;\n    }\n    const records = [];\n    for (const record of this.records.values(range)) {\n      records.push(structuredClone(record.key));\n      if (records.length >= count) {\n        break;\n      }\n    }\n    return records;\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-retrieving-a-value-from-an-object-store\n  getValue(key) {\n    const record = this.records.get(key);\n    return record !== undefined ? structuredClone(record.value) : undefined;\n  }\n\n  // http://w3c.github.io/IndexedDB/#retrieve-multiple-values-from-an-object-store\n  getAllValues(range, count) {\n    if (count === undefined || count === 0) {\n      count = Infinity;\n    }\n    const records = [];\n    for (const record of this.records.values(range)) {\n      records.push(structuredClone(record.value));\n      if (records.length >= count) {\n        break;\n      }\n    }\n    return records;\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-storing-a-record-into-an-object-store\n  storeRecord(newRecord, noOverwrite, rollbackLog) {\n    if (this.keyPath !== null) {\n      const key = (0, _extractKey.default)(this.keyPath, newRecord.value).key;\n      if (key !== undefined) {\n        newRecord.key = key;\n      }\n    }\n    if (this.keyGenerator !== null && newRecord.key === undefined) {\n      if (rollbackLog) {\n        const keyGeneratorBefore = this.keyGenerator.num;\n        rollbackLog.push(() => {\n          if (this.keyGenerator) {\n            this.keyGenerator.num = keyGeneratorBefore;\n          }\n        });\n      }\n      newRecord.key = this.keyGenerator.next();\n\n      // Set in value if keyPath defiend but led to no key\n      // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-to-assign-a-key-to-a-value-using-a-key-path\n      if (this.keyPath !== null) {\n        if (Array.isArray(this.keyPath)) {\n          throw new Error(\"Cannot have an array key path in an object store with a key generator\");\n        }\n        let remainingKeyPath = this.keyPath;\n        let object = newRecord.value;\n        let identifier;\n        let i = 0; // Just to run the loop at least once\n        while (i >= 0) {\n          if (typeof object !== \"object\") {\n            throw new _errors.DataError();\n          }\n          i = remainingKeyPath.indexOf(\".\");\n          if (i >= 0) {\n            identifier = remainingKeyPath.slice(0, i);\n            remainingKeyPath = remainingKeyPath.slice(i + 1);\n            if (!Object.hasOwn(object, identifier)) {\n              object[identifier] = {};\n            }\n            object = object[identifier];\n          }\n        }\n        identifier = remainingKeyPath;\n        object[identifier] = newRecord.key;\n      }\n    } else if (this.keyGenerator !== null && typeof newRecord.key === \"number\") {\n      this.keyGenerator.setIfLarger(newRecord.key);\n    }\n    const existingRecord = this.records.get(newRecord.key);\n    if (existingRecord) {\n      if (noOverwrite) {\n        throw new _errors.ConstraintError();\n      }\n      this.deleteRecord(newRecord.key, rollbackLog);\n    }\n    this.records.add(newRecord);\n    if (rollbackLog) {\n      rollbackLog.push(() => {\n        this.deleteRecord(newRecord.key);\n      });\n    }\n\n    // Update indexes\n    for (const rawIndex of this.rawIndexes.values()) {\n      if (rawIndex.initialized) {\n        rawIndex.storeRecord(newRecord);\n      }\n    }\n    return newRecord.key;\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-deleting-records-from-an-object-store\n  deleteRecord(key, rollbackLog) {\n    const deletedRecords = this.records.delete(key);\n    if (rollbackLog) {\n      for (const record of deletedRecords) {\n        rollbackLog.push(() => {\n          this.storeRecord(record, true);\n        });\n      }\n    }\n    for (const rawIndex of this.rawIndexes.values()) {\n      rawIndex.records.deleteByValue(key);\n    }\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-clearing-an-object-store\n  clear(rollbackLog) {\n    const deletedRecords = this.records.clear();\n    if (rollbackLog) {\n      for (const record of deletedRecords) {\n        rollbackLog.push(() => {\n          this.storeRecord(record, true);\n        });\n      }\n    }\n    for (const rawIndex of this.rawIndexes.values()) {\n      rawIndex.records.clear();\n    }\n  }\n  count(range) {\n    let count = 0;\n\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    for (const record of this.records.values(range)) {\n      count += 1;\n    }\n    return count;\n  }\n}\nvar _default = exports.default = ObjectStore;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _FDBTransaction = _interopRequireDefault(require(\"./FDBTransaction.js\"));\nvar _errors = require(\"./lib/errors.js\");\nvar _FakeDOMStringList = _interopRequireDefault(require(\"./lib/FakeDOMStringList.js\"));\nvar _FakeEventTarget = _interopRequireDefault(require(\"./lib/FakeEventTarget.js\"));\nvar _ObjectStore = _interopRequireDefault(require(\"./lib/ObjectStore.js\"));\nvar _scheduling = require(\"./lib/scheduling.js\");\nvar _validateKeyPath = _interopRequireDefault(require(\"./lib/validateKeyPath.js\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nconst confirmActiveVersionchangeTransaction = database => {\n  if (!database._runningVersionchangeTransaction) {\n    throw new _errors.InvalidStateError();\n  }\n\n  // Find the latest versionchange transaction\n  const transactions = database._rawDatabase.transactions.filter(tx => {\n    return tx.mode === \"versionchange\";\n  });\n  const transaction = transactions[transactions.length - 1];\n  if (!transaction || transaction._state === \"finished\") {\n    throw new _errors.InvalidStateError();\n  }\n  if (transaction._state !== \"active\") {\n    throw new _errors.TransactionInactiveError();\n  }\n  return transaction;\n};\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#database-closing-steps\nconst closeConnection = connection => {\n  connection._closePending = true;\n  const transactionsComplete = connection._rawDatabase.transactions.every(transaction => {\n    return transaction._state === \"finished\";\n  });\n  if (transactionsComplete) {\n    connection._closed = true;\n    connection._rawDatabase.connections = connection._rawDatabase.connections.filter(otherConnection => {\n      return connection !== otherConnection;\n    });\n  } else {\n    (0, _scheduling.queueTask)(() => {\n      closeConnection(connection);\n    });\n  }\n};\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#database-interface\nclass FDBDatabase extends _FakeEventTarget.default {\n  _closePending = false;\n  _closed = false;\n  _runningVersionchangeTransaction = false;\n  constructor(rawDatabase) {\n    super();\n    this._rawDatabase = rawDatabase;\n    this._rawDatabase.connections.push(this);\n    this.name = rawDatabase.name;\n    this.version = rawDatabase.version;\n    this.objectStoreNames = new _FakeDOMStringList.default(...Array.from(rawDatabase.rawObjectStores.keys()).sort());\n  }\n\n  // http://w3c.github.io/IndexedDB/#dom-idbdatabase-createobjectstore\n  createObjectStore(name, options = {}) {\n    if (name === undefined) {\n      throw new TypeError();\n    }\n    const transaction = confirmActiveVersionchangeTransaction(this);\n    const keyPath = options !== null && options.keyPath !== undefined ? options.keyPath : null;\n    const autoIncrement = options !== null && options.autoIncrement !== undefined ? options.autoIncrement : false;\n    if (keyPath !== null) {\n      (0, _validateKeyPath.default)(keyPath);\n    }\n    if (this._rawDatabase.rawObjectStores.has(name)) {\n      throw new _errors.ConstraintError();\n    }\n    if (autoIncrement && (keyPath === \"\" || Array.isArray(keyPath))) {\n      throw new _errors.InvalidAccessError();\n    }\n    const objectStoreNames = [...this.objectStoreNames];\n    transaction._rollbackLog.push(() => {\n      const objectStore = this._rawDatabase.rawObjectStores.get(name);\n      if (objectStore) {\n        objectStore.deleted = true;\n      }\n      this.objectStoreNames = new _FakeDOMStringList.default(...objectStoreNames);\n      transaction._scope.delete(name);\n      this._rawDatabase.rawObjectStores.delete(name);\n    });\n    const rawObjectStore = new _ObjectStore.default(this._rawDatabase, name, keyPath, autoIncrement);\n    this.objectStoreNames._push(name);\n    this.objectStoreNames._sort();\n    transaction._scope.add(name);\n    this._rawDatabase.rawObjectStores.set(name, rawObjectStore);\n    transaction.objectStoreNames = new _FakeDOMStringList.default(...this.objectStoreNames);\n    return transaction.objectStore(name);\n  }\n  deleteObjectStore(name) {\n    if (name === undefined) {\n      throw new TypeError();\n    }\n    const transaction = confirmActiveVersionchangeTransaction(this);\n    const store = this._rawDatabase.rawObjectStores.get(name);\n    if (store === undefined) {\n      throw new _errors.NotFoundError();\n    }\n    this.objectStoreNames = new _FakeDOMStringList.default(...Array.from(this.objectStoreNames).filter(objectStoreName => {\n      return objectStoreName !== name;\n    }));\n    transaction.objectStoreNames = new _FakeDOMStringList.default(...this.objectStoreNames);\n    transaction._rollbackLog.push(() => {\n      store.deleted = false;\n      this._rawDatabase.rawObjectStores.set(name, store);\n      this.objectStoreNames._push(name);\n      this.objectStoreNames._sort();\n    });\n    store.deleted = true;\n    this._rawDatabase.rawObjectStores.delete(name);\n    transaction._objectStoresCache.delete(name);\n  }\n  transaction(storeNames, mode) {\n    mode = mode !== undefined ? mode : \"readonly\";\n    if (mode !== \"readonly\" && mode !== \"readwrite\" && mode !== \"versionchange\") {\n      throw new TypeError(\"Invalid mode: \" + mode);\n    }\n    const hasActiveVersionchange = this._rawDatabase.transactions.some(transaction => {\n      return transaction._state === \"active\" && transaction.mode === \"versionchange\" && transaction.db === this;\n    });\n    if (hasActiveVersionchange) {\n      throw new _errors.InvalidStateError();\n    }\n    if (this._closePending) {\n      throw new _errors.InvalidStateError();\n    }\n    if (!Array.isArray(storeNames)) {\n      storeNames = [storeNames];\n    }\n    if (storeNames.length === 0 && mode !== \"versionchange\") {\n      throw new _errors.InvalidAccessError();\n    }\n    for (const storeName of storeNames) {\n      if (!this.objectStoreNames.contains(storeName)) {\n        throw new _errors.NotFoundError(\"No objectStore named \" + storeName + \" in this database\");\n      }\n    }\n    const tx = new _FDBTransaction.default(storeNames, mode, this);\n    this._rawDatabase.transactions.push(tx);\n    this._rawDatabase.processTransactions(); // See if can start right away (async)\n\n    return tx;\n  }\n  close() {\n    closeConnection(this);\n  }\n  toString() {\n    return \"[object IDBDatabase]\";\n  }\n}\nvar _default = exports.default = FDBDatabase;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _FDBRequest = _interopRequireDefault(require(\"./FDBRequest.js\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nclass FDBOpenDBRequest extends _FDBRequest.default {\n  onupgradeneeded = null;\n  onblocked = null;\n  toString() {\n    return \"[object IDBOpenDBRequest]\";\n  }\n}\nvar _default = exports.default = FDBOpenDBRequest;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _FakeEvent = _interopRequireDefault(require(\"./lib/FakeEvent.js\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nclass FDBVersionChangeEvent extends _FakeEvent.default {\n  constructor(type, parameters = {}) {\n    super(type);\n    this.newVersion = parameters.newVersion !== undefined ? parameters.newVersion : null;\n    this.oldVersion = parameters.oldVersion !== undefined ? parameters.oldVersion : 0;\n  }\n  toString() {\n    return \"[object IDBVersionChangeEvent]\";\n  }\n}\nvar _default = exports.default = FDBVersionChangeEvent;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _scheduling = require(\"./scheduling.js\");\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-database\nclass Database {\n  deletePending = false;\n  transactions = [];\n  rawObjectStores = new Map();\n  connections = [];\n  constructor(name, version) {\n    this.name = name;\n    this.version = version;\n    this.processTransactions = this.processTransactions.bind(this);\n  }\n  processTransactions() {\n    (0, _scheduling.queueTask)(() => {\n      const anyRunning = this.transactions.some(transaction => {\n        return transaction._started && transaction._state !== \"finished\";\n      });\n      if (!anyRunning) {\n        const next = this.transactions.find(transaction => {\n          return !transaction._started && transaction._state !== \"finished\";\n        });\n        if (next) {\n          next.addEventListener(\"complete\", this.processTransactions);\n          next.addEventListener(\"abort\", this.processTransactions);\n          next._start();\n        }\n      }\n    });\n  }\n}\nvar _default = exports.default = Database;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _FDBDatabase = _interopRequireDefault(require(\"./FDBDatabase.js\"));\nvar _FDBOpenDBRequest = _interopRequireDefault(require(\"./FDBOpenDBRequest.js\"));\nvar _FDBVersionChangeEvent = _interopRequireDefault(require(\"./FDBVersionChangeEvent.js\"));\nvar _cmp = _interopRequireDefault(require(\"./lib/cmp.js\"));\nvar _Database = _interopRequireDefault(require(\"./lib/Database.js\"));\nvar _enforceRange = _interopRequireDefault(require(\"./lib/enforceRange.js\"));\nvar _errors = require(\"./lib/errors.js\");\nvar _FakeEvent = _interopRequireDefault(require(\"./lib/FakeEvent.js\"));\nvar _scheduling = require(\"./lib/scheduling.js\");\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nconst waitForOthersClosedDelete = (databases, name, openDatabases, cb) => {\n  const anyOpen = openDatabases.some(openDatabase2 => {\n    return !openDatabase2._closed && !openDatabase2._closePending;\n  });\n  if (anyOpen) {\n    (0, _scheduling.queueTask)(() => waitForOthersClosedDelete(databases, name, openDatabases, cb));\n    return;\n  }\n  databases.delete(name);\n  cb(null);\n};\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-deleting-a-database\nconst deleteDatabase = (databases, name, request, cb) => {\n  try {\n    const db = databases.get(name);\n    if (db === undefined) {\n      cb(null);\n      return;\n    }\n    db.deletePending = true;\n    const openDatabases = db.connections.filter(connection => {\n      return !connection._closed && !connection._closePending;\n    });\n    for (const openDatabase2 of openDatabases) {\n      if (!openDatabase2._closePending) {\n        const event = new _FDBVersionChangeEvent.default(\"versionchange\", {\n          newVersion: null,\n          oldVersion: db.version\n        });\n        openDatabase2.dispatchEvent(event);\n      }\n    }\n    const anyOpen = openDatabases.some(openDatabase3 => {\n      return !openDatabase3._closed && !openDatabase3._closePending;\n    });\n    if (request && anyOpen) {\n      const event = new _FDBVersionChangeEvent.default(\"blocked\", {\n        newVersion: null,\n        oldVersion: db.version\n      });\n      request.dispatchEvent(event);\n    }\n    waitForOthersClosedDelete(databases, name, openDatabases, cb);\n  } catch (err) {\n    cb(err);\n  }\n};\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-running-a-versionchange-transaction\nconst runVersionchangeTransaction = (connection, version, request, cb) => {\n  connection._runningVersionchangeTransaction = true;\n  const oldVersion = connection.version;\n  const openDatabases = connection._rawDatabase.connections.filter(otherDatabase => {\n    return connection !== otherDatabase;\n  });\n  for (const openDatabase2 of openDatabases) {\n    if (!openDatabase2._closed && !openDatabase2._closePending) {\n      const event = new _FDBVersionChangeEvent.default(\"versionchange\", {\n        newVersion: version,\n        oldVersion\n      });\n      openDatabase2.dispatchEvent(event);\n    }\n  }\n  const anyOpen = openDatabases.some(openDatabase3 => {\n    return !openDatabase3._closed && !openDatabase3._closePending;\n  });\n  if (anyOpen) {\n    const event = new _FDBVersionChangeEvent.default(\"blocked\", {\n      newVersion: version,\n      oldVersion\n    });\n    request.dispatchEvent(event);\n  }\n  const waitForOthersClosed = () => {\n    const anyOpen2 = openDatabases.some(openDatabase2 => {\n      return !openDatabase2._closed && !openDatabase2._closePending;\n    });\n    if (anyOpen2) {\n      (0, _scheduling.queueTask)(waitForOthersClosed);\n      return;\n    }\n\n    // Set the version of database to version. This change is considered part of the transaction, and so if the\n    // transaction is aborted, this change is reverted.\n    connection._rawDatabase.version = version;\n    connection.version = version;\n\n    // Get rid of this setImmediate?\n    const transaction = connection.transaction(connection.objectStoreNames, \"versionchange\");\n    request.result = connection;\n    request.readyState = \"done\";\n    request.transaction = transaction;\n    transaction._rollbackLog.push(() => {\n      connection._rawDatabase.version = oldVersion;\n      connection.version = oldVersion;\n    });\n    const event = new _FDBVersionChangeEvent.default(\"upgradeneeded\", {\n      newVersion: version,\n      oldVersion\n    });\n    request.dispatchEvent(event);\n    transaction.addEventListener(\"error\", () => {\n      connection._runningVersionchangeTransaction = false;\n      // throw arguments[0].target.error;\n      // console.log(\"error in versionchange transaction - not sure if anything needs to be done here\", e.target.error.name);\n    });\n    transaction.addEventListener(\"abort\", () => {\n      connection._runningVersionchangeTransaction = false;\n      request.transaction = null;\n      (0, _scheduling.queueTask)(() => {\n        cb(new _errors.AbortError());\n      });\n    });\n    transaction.addEventListener(\"complete\", () => {\n      connection._runningVersionchangeTransaction = false;\n      request.transaction = null;\n      // Let other complete event handlers run before continuing\n      (0, _scheduling.queueTask)(() => {\n        if (connection._closePending) {\n          cb(new _errors.AbortError());\n        } else {\n          cb(null);\n        }\n      });\n    });\n  };\n  waitForOthersClosed();\n};\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-opening-a-database\nconst openDatabase = (databases, name, version, request, cb) => {\n  let db = databases.get(name);\n  if (db === undefined) {\n    db = new _Database.default(name, 0);\n    databases.set(name, db);\n  }\n  if (version === undefined) {\n    version = db.version !== 0 ? db.version : 1;\n  }\n  if (db.version > version) {\n    return cb(new _errors.VersionError());\n  }\n  const connection = new _FDBDatabase.default(db);\n  if (db.version < version) {\n    runVersionchangeTransaction(connection, version, request, err => {\n      if (err) {\n        // DO THIS HERE: ensure that connection is closed by running the steps for closing a database connection before these\n        // steps are aborted.\n        return cb(err);\n      }\n      cb(null, connection);\n    });\n  } else {\n    cb(null, connection);\n  }\n};\nclass FDBFactory {\n  cmp = _cmp.default;\n  _databases = new Map();\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBFactory-deleteDatabase-IDBOpenDBRequest-DOMString-name\n  deleteDatabase(name) {\n    const request = new _FDBOpenDBRequest.default();\n    request.source = null;\n    (0, _scheduling.queueTask)(() => {\n      const db = this._databases.get(name);\n      const oldVersion = db !== undefined ? db.version : 0;\n      deleteDatabase(this._databases, name, request, err => {\n        if (err) {\n          request.error = new DOMException(err.message, err.name);\n          request.readyState = \"done\";\n          const event = new _FakeEvent.default(\"error\", {\n            bubbles: true,\n            cancelable: true\n          });\n          event.eventPath = [];\n          request.dispatchEvent(event);\n          return;\n        }\n        request.result = undefined;\n        request.readyState = \"done\";\n        const event2 = new _FDBVersionChangeEvent.default(\"success\", {\n          newVersion: null,\n          oldVersion\n        });\n        request.dispatchEvent(event2);\n      });\n    });\n    return request;\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBFactory-open-IDBOpenDBRequest-DOMString-name-unsigned-long-long-version\n  open(name, version) {\n    if (arguments.length > 1 && version !== undefined) {\n      // Based on spec, not sure why \"MAX_SAFE_INTEGER\" instead of \"unsigned long long\", but it's needed to pass\n      // tests\n      version = (0, _enforceRange.default)(version, \"MAX_SAFE_INTEGER\");\n    }\n    if (version === 0) {\n      throw new TypeError(\"Database version cannot be 0\");\n    }\n    const request = new _FDBOpenDBRequest.default();\n    request.source = null;\n    (0, _scheduling.queueTask)(() => {\n      openDatabase(this._databases, name, version, request, (err, connection) => {\n        if (err) {\n          request.result = undefined;\n          request.readyState = \"done\";\n          request.error = new DOMException(err.message, err.name);\n          const event = new _FakeEvent.default(\"error\", {\n            bubbles: true,\n            cancelable: true\n          });\n          event.eventPath = [];\n          request.dispatchEvent(event);\n          return;\n        }\n        request.result = connection;\n        request.readyState = \"done\";\n        const event2 = new _FakeEvent.default(\"success\");\n        event2.eventPath = [];\n        request.dispatchEvent(event2);\n      });\n    });\n    return request;\n  }\n\n  // https://w3c.github.io/IndexedDB/#dom-idbfactory-databases\n  databases() {\n    return new Promise(resolve => {\n      const result = [];\n      for (const [name, database] of this._databases) {\n        result.push({\n          name,\n          version: database.version\n        });\n      }\n      resolve(result);\n    });\n  }\n  toString() {\n    return \"[object IDBFactory]\";\n  }\n}\nvar _default = exports.default = FDBFactory;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _FDBFactory = _interopRequireDefault(require(\"./FDBFactory.js\"));\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }\nconst fakeIndexedDB = new _FDBFactory.default();\nvar _default = exports.default = fakeIndexedDB;\nmodule.exports = exports.default;","const fakeIndexedDB = require(\"../build/cjs/fakeIndexedDB.js\");\nconst FDBCursor = require(\"../build/cjs/FDBCursor.js\");\nconst FDBCursorWithValue = require(\"../build/cjs/FDBCursorWithValue.js\");\nconst FDBDatabase = require(\"../build/cjs/FDBDatabase.js\");\nconst FDBFactory = require(\"../build/cjs/FDBFactory.js\");\nconst FDBIndex = require(\"../build/cjs/FDBIndex.js\");\nconst FDBKeyRange = require(\"../build/cjs/FDBKeyRange.js\");\nconst FDBObjectStore = require(\"../build/cjs/FDBObjectStore.js\");\nconst FDBOpenDBRequest = require(\"../build/cjs/FDBOpenDBRequest.js\");\nconst FDBRequest = require(\"../build/cjs/FDBRequest.js\");\nconst FDBTransaction = require(\"../build/cjs/FDBTransaction.js\");\nconst FDBVersionChangeEvent = require(\"../build/cjs/FDBVersionChangeEvent.js\");\n\n// http://stackoverflow.com/a/33268326/786644 - works in browser, worker, and Node.js\nvar globalVar =\n    typeof window !== \"undefined\"\n        ? window\n        : typeof WorkerGlobalScope !== \"undefined\"\n        ? self\n        : typeof global !== \"undefined\"\n        ? global\n        : Function(\"return this;\")();\n\nglobalVar.indexedDB = fakeIndexedDB;\nglobalVar.IDBCursor = FDBCursor;\nglobalVar.IDBCursorWithValue = FDBCursorWithValue;\nglobalVar.IDBDatabase = FDBDatabase;\nglobalVar.IDBFactory = FDBFactory;\nglobalVar.IDBIndex = FDBIndex;\nglobalVar.IDBKeyRange = FDBKeyRange;\nglobalVar.IDBObjectStore = FDBObjectStore;\nglobalVar.IDBOpenDBRequest = FDBOpenDBRequest;\nglobalVar.IDBRequest = FDBRequest;\nglobalVar.IDBTransaction = FDBTransaction;\nglobalVar.IDBVersionChangeEvent = FDBVersionChangeEvent;\n","const messages = {\n  AbortError: \"A request was aborted, for example through a call to IDBTransaction.abort.\",\n  ConstraintError: \"A mutation operation in the transaction failed because a constraint was not satisfied. For example, an object such as an object store or index already exists and a request attempted to create a new one.\",\n  DataCloneError: \"The data being stored could not be cloned by the internal structured cloning algorithm.\",\n  DataError: \"Data provided to an operation does not meet requirements.\",\n  InvalidAccessError: \"An invalid operation was performed on an object. For example transaction creation attempt was made, but an empty scope was provided.\",\n  InvalidStateError: \"An operation was called on an object on which it is not allowed or at a time when it is not allowed. Also occurs if a request is made on a source object that has been deleted or removed. Use TransactionInactiveError or ReadOnlyError when possible, as they are more specific variations of InvalidStateError.\",\n  NotFoundError: \"The operation failed because the requested database object could not be found. For example, an object store did not exist but was being opened.\",\n  ReadOnlyError: 'The mutating operation was attempted in a \"readonly\" transaction.',\n  TransactionInactiveError: \"A request was placed against a transaction which is currently not active, or which is finished.\",\n  VersionError: \"An attempt was made to open a database using a lower version than the existing version.\"\n};\nexport class AbortError extends DOMException {\n  constructor(message = messages.AbortError) {\n    super(message, \"AbortError\");\n  }\n}\nexport class ConstraintError extends DOMException {\n  constructor(message = messages.ConstraintError) {\n    super(message, \"ConstraintError\");\n  }\n}\nexport class DataCloneError extends DOMException {\n  constructor(message = messages.DataCloneError) {\n    super(message, \"DataCloneError\");\n  }\n}\nexport class DataError extends DOMException {\n  constructor(message = messages.DataError) {\n    super(message, \"DataError\");\n  }\n}\nexport class InvalidAccessError extends DOMException {\n  constructor(message = messages.InvalidAccessError) {\n    super(message, \"InvalidAccessError\");\n  }\n}\nexport class InvalidStateError extends DOMException {\n  constructor(message = messages.InvalidStateError) {\n    super(message, \"InvalidStateError\");\n  }\n}\nexport class NotFoundError extends DOMException {\n  constructor(message = messages.NotFoundError) {\n    super(message, \"NotFoundError\");\n  }\n}\nexport class ReadOnlyError extends DOMException {\n  constructor(message = messages.ReadOnlyError) {\n    super(message, \"ReadOnlyError\");\n  }\n}\nexport class TransactionInactiveError extends DOMException {\n  constructor(message = messages.TransactionInactiveError) {\n    super(message, \"TransactionInactiveError\");\n  }\n}\nexport class VersionError extends DOMException {\n  constructor(message = messages.VersionError) {\n    super(message, \"VersionError\");\n  }\n}","import { DataError } from \"./errors.js\";\n// https://w3c.github.io/IndexedDB/#convert-value-to-key\nconst valueToKey = (input, seen) => {\n  if (typeof input === \"number\") {\n    if (isNaN(input)) {\n      throw new DataError();\n    }\n    return input;\n  } else if (Object.prototype.toString.call(input) === \"[object Date]\") {\n    const ms = input.valueOf();\n    if (isNaN(ms)) {\n      throw new DataError();\n    }\n    return new Date(ms);\n  } else if (typeof input === \"string\") {\n    return input;\n  } else if (input instanceof ArrayBuffer || typeof SharedArrayBuffer !== \"undefined\" && input instanceof SharedArrayBuffer || typeof ArrayBuffer !== \"undefined\" && ArrayBuffer.isView && ArrayBuffer.isView(input)) {\n    let arrayBuffer;\n    let offset = 0;\n    let length = 0;\n    if (input instanceof ArrayBuffer || typeof SharedArrayBuffer !== \"undefined\" && input instanceof SharedArrayBuffer) {\n      arrayBuffer = input;\n      length = input.byteLength;\n    } else {\n      arrayBuffer = input.buffer;\n      offset = input.byteOffset;\n      length = input.byteLength;\n    }\n    if (arrayBuffer.detached) {\n      return new ArrayBuffer(0);\n    }\n    return arrayBuffer.slice(offset, offset + length);\n  } else if (Array.isArray(input)) {\n    if (seen === undefined) {\n      seen = new Set();\n    } else if (seen.has(input)) {\n      throw new DataError();\n    }\n    seen.add(input);\n    const keys = [];\n    for (let i = 0; i < input.length; i++) {\n      const hop = Object.hasOwn(input, i);\n      if (!hop) {\n        throw new DataError();\n      }\n      const entry = input[i];\n      const key = valueToKey(entry, seen);\n      keys.push(key);\n    }\n    return keys;\n  } else {\n    throw new DataError();\n  }\n};\nexport default valueToKey;","import { DataError } from \"./errors.js\";\nimport valueToKey from \"./valueToKey.js\";\nconst getType = x => {\n  if (typeof x === \"number\") {\n    return \"Number\";\n  }\n  if (Object.prototype.toString.call(x) === \"[object Date]\") {\n    return \"Date\";\n  }\n  if (Array.isArray(x)) {\n    return \"Array\";\n  }\n  if (typeof x === \"string\") {\n    return \"String\";\n  }\n  if (x instanceof ArrayBuffer) {\n    return \"Binary\";\n  }\n  throw new DataError();\n};\n\n// https://w3c.github.io/IndexedDB/#compare-two-keys\nconst cmp = (first, second) => {\n  if (second === undefined) {\n    throw new TypeError();\n  }\n  first = valueToKey(first);\n  second = valueToKey(second);\n  const t1 = getType(first);\n  const t2 = getType(second);\n  if (t1 !== t2) {\n    if (t1 === \"Array\") {\n      return 1;\n    }\n    if (t1 === \"Binary\" && (t2 === \"String\" || t2 === \"Date\" || t2 === \"Number\")) {\n      return 1;\n    }\n    if (t1 === \"String\" && (t2 === \"Date\" || t2 === \"Number\")) {\n      return 1;\n    }\n    if (t1 === \"Date\" && t2 === \"Number\") {\n      return 1;\n    }\n    return -1;\n  }\n  if (t1 === \"Binary\") {\n    first = new Uint8Array(first);\n    second = new Uint8Array(second);\n  }\n  if (t1 === \"Array\" || t1 === \"Binary\") {\n    const length = Math.min(first.length, second.length);\n    for (let i = 0; i < length; i++) {\n      const result = cmp(first[i], second[i]);\n      if (result !== 0) {\n        return result;\n      }\n    }\n    if (first.length > second.length) {\n      return 1;\n    }\n    if (first.length < second.length) {\n      return -1;\n    }\n    return 0;\n  }\n  if (t1 === \"Date\") {\n    if (first.getTime() === second.getTime()) {\n      return 0;\n    }\n  } else {\n    if (first === second) {\n      return 0;\n    }\n  }\n  return first > second ? 1 : -1;\n};\nexport default cmp;","import cmp from \"./lib/cmp.js\";\nimport { DataError } from \"./lib/errors.js\";\nimport valueToKey from \"./lib/valueToKey.js\";\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#range-concept\nclass FDBKeyRange {\n  static only(value) {\n    if (arguments.length === 0) {\n      throw new TypeError();\n    }\n    value = valueToKey(value);\n    return new FDBKeyRange(value, value, false, false);\n  }\n  static lowerBound(lower, open = false) {\n    if (arguments.length === 0) {\n      throw new TypeError();\n    }\n    lower = valueToKey(lower);\n    return new FDBKeyRange(lower, undefined, open, true);\n  }\n  static upperBound(upper, open = false) {\n    if (arguments.length === 0) {\n      throw new TypeError();\n    }\n    upper = valueToKey(upper);\n    return new FDBKeyRange(undefined, upper, true, open);\n  }\n  static bound(lower, upper, lowerOpen = false, upperOpen = false) {\n    if (arguments.length < 2) {\n      throw new TypeError();\n    }\n    const cmpResult = cmp(lower, upper);\n    if (cmpResult === 1 || cmpResult === 0 && (lowerOpen || upperOpen)) {\n      throw new DataError();\n    }\n    lower = valueToKey(lower);\n    upper = valueToKey(upper);\n    return new FDBKeyRange(lower, upper, lowerOpen, upperOpen);\n  }\n  constructor(lower, upper, lowerOpen, upperOpen) {\n    this.lower = lower;\n    this.upper = upper;\n    this.lowerOpen = lowerOpen;\n    this.upperOpen = upperOpen;\n  }\n\n  // https://w3c.github.io/IndexedDB/#dom-idbkeyrange-includes\n  includes(key) {\n    if (arguments.length === 0) {\n      throw new TypeError();\n    }\n    key = valueToKey(key);\n    if (this.lower !== undefined) {\n      const cmpResult = cmp(this.lower, key);\n      if (cmpResult === 1 || cmpResult === 0 && this.lowerOpen) {\n        return false;\n      }\n    }\n    if (this.upper !== undefined) {\n      const cmpResult = cmp(this.upper, key);\n      if (cmpResult === -1 || cmpResult === 0 && this.upperOpen) {\n        return false;\n      }\n    }\n    return true;\n  }\n  toString() {\n    return \"[object IDBKeyRange]\";\n  }\n}\nexport default FDBKeyRange;","import valueToKey from \"./valueToKey.js\";\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-extracting-a-key-from-a-value-using-a-key-path\nconst extractKey = (keyPath, value) => {\n  if (Array.isArray(keyPath)) {\n    const result = [];\n    for (let item of keyPath) {\n      // This doesn't make sense to me based on the spec, but it is needed to pass the W3C KeyPath tests (see same\n      // comment in validateKeyPath)\n      if (item !== undefined && item !== null && typeof item !== \"string\" && item.toString) {\n        item = item.toString();\n      }\n      const key = extractKey(item, value).key;\n      result.push(valueToKey(key));\n    }\n    return {\n      type: \"found\",\n      key: result\n    };\n  }\n  if (keyPath === \"\") {\n    return {\n      type: \"found\",\n      key: value\n    };\n  }\n  let remainingKeyPath = keyPath;\n  let object = value;\n  while (remainingKeyPath !== null) {\n    let identifier;\n    const i = remainingKeyPath.indexOf(\".\");\n    if (i >= 0) {\n      identifier = remainingKeyPath.slice(0, i);\n      remainingKeyPath = remainingKeyPath.slice(i + 1);\n    } else {\n      identifier = remainingKeyPath;\n      remainingKeyPath = null;\n    }\n    if (object === undefined || object === null || !Object.hasOwn(object, identifier)) {\n      return {\n        type: \"notFound\"\n      };\n    }\n    object = object[identifier];\n  }\n  return {\n    type: \"found\",\n    key: object\n  };\n};\nexport default extractKey;","import FDBKeyRange from \"./FDBKeyRange.js\";\nimport FDBObjectStore from \"./FDBObjectStore.js\";\nimport cmp from \"./lib/cmp.js\";\nimport { DataError, InvalidAccessError, InvalidStateError, ReadOnlyError, TransactionInactiveError } from \"./lib/errors.js\";\nimport extractKey from \"./lib/extractKey.js\";\nimport valueToKey from \"./lib/valueToKey.js\";\nconst getEffectiveObjectStore = cursor => {\n  if (cursor.source instanceof FDBObjectStore) {\n    return cursor.source;\n  }\n  return cursor.source.objectStore;\n};\n\n// This takes a key range, a list of lower bounds, and a list of upper bounds and combines them all into a single key\n// range. It does not handle gt/gte distinctions, because it doesn't really matter much anyway, since for next/prev\n// cursor iteration it'd also have to look at values to be precise, which would be complicated. This should get us 99%\n// of the way there.\nconst makeKeyRange = (range, lowers, uppers) => {\n  // Start with bounds from range\n  let lower = range !== undefined ? range.lower : undefined;\n  let upper = range !== undefined ? range.upper : undefined;\n\n  // Augment with values from lowers and uppers\n  for (const lowerTemp of lowers) {\n    if (lowerTemp === undefined) {\n      continue;\n    }\n    if (lower === undefined || cmp(lower, lowerTemp) === 1) {\n      lower = lowerTemp;\n    }\n  }\n  for (const upperTemp of uppers) {\n    if (upperTemp === undefined) {\n      continue;\n    }\n    if (upper === undefined || cmp(upper, upperTemp) === -1) {\n      upper = upperTemp;\n    }\n  }\n  if (lower !== undefined && upper !== undefined) {\n    return FDBKeyRange.bound(lower, upper);\n  }\n  if (lower !== undefined) {\n    return FDBKeyRange.lowerBound(lower);\n  }\n  if (upper !== undefined) {\n    return FDBKeyRange.upperBound(upper);\n  }\n};\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#cursor\nclass FDBCursor {\n  _gotValue = false;\n  _position = undefined; // Key of previously returned record\n  _objectStorePosition = undefined;\n  _keyOnly = false;\n  _key = undefined;\n  _primaryKey = undefined;\n  constructor(source, range, direction = \"next\", request, keyOnly = false) {\n    this._range = range;\n    this._source = source;\n    this._direction = direction;\n    this._request = request;\n    this._keyOnly = keyOnly;\n  }\n\n  // Read only properties\n  get source() {\n    return this._source;\n  }\n  set source(val) {\n    /* For babel */\n  }\n  get request() {\n    return this._request;\n  }\n  set request(val) {\n    /* For babel */\n  }\n  get direction() {\n    return this._direction;\n  }\n  set direction(val) {\n    /* For babel */\n  }\n  get key() {\n    return this._key;\n  }\n  set key(val) {\n    /* For babel */\n  }\n  get primaryKey() {\n    return this._primaryKey;\n  }\n  set primaryKey(val) {\n    /* For babel */\n  }\n\n  // https://w3c.github.io/IndexedDB/#iterate-a-cursor\n  _iterate(key, primaryKey) {\n    const sourceIsObjectStore = this.source instanceof FDBObjectStore;\n\n    // Can't use sourceIsObjectStore because TypeScript\n    const records = this.source instanceof FDBObjectStore ? this.source._rawObjectStore.records : this.source._rawIndex.records;\n    let foundRecord;\n    if (this.direction === \"next\") {\n      const range = makeKeyRange(this._range, [key, this._position], []);\n      for (const record of records.values(range)) {\n        const cmpResultKey = key !== undefined ? cmp(record.key, key) : undefined;\n        const cmpResultPosition = this._position !== undefined ? cmp(record.key, this._position) : undefined;\n        if (key !== undefined) {\n          if (cmpResultKey === -1) {\n            continue;\n          }\n        }\n        if (primaryKey !== undefined) {\n          if (cmpResultKey === -1) {\n            continue;\n          }\n          const cmpResultPrimaryKey = cmp(record.value, primaryKey);\n          if (cmpResultKey === 0 && cmpResultPrimaryKey === -1) {\n            continue;\n          }\n        }\n        if (this._position !== undefined && sourceIsObjectStore) {\n          if (cmpResultPosition !== 1) {\n            continue;\n          }\n        }\n        if (this._position !== undefined && !sourceIsObjectStore) {\n          if (cmpResultPosition === -1) {\n            continue;\n          }\n          if (cmpResultPosition === 0 && cmp(record.value, this._objectStorePosition) !== 1) {\n            continue;\n          }\n        }\n        if (this._range !== undefined) {\n          if (!this._range.includes(record.key)) {\n            continue;\n          }\n        }\n        foundRecord = record;\n        break;\n      }\n    } else if (this.direction === \"nextunique\") {\n      // This could be done without iterating, if the range was defined slightly better (to handle gt/gte cases).\n      // But the performance difference should be small, and that wouldn't work anyway for directions where the\n      // value needs to be used (like next and prev).\n      const range = makeKeyRange(this._range, [key, this._position], []);\n      for (const record of records.values(range)) {\n        if (key !== undefined) {\n          if (cmp(record.key, key) === -1) {\n            continue;\n          }\n        }\n        if (this._position !== undefined) {\n          if (cmp(record.key, this._position) !== 1) {\n            continue;\n          }\n        }\n        if (this._range !== undefined) {\n          if (!this._range.includes(record.key)) {\n            continue;\n          }\n        }\n        foundRecord = record;\n        break;\n      }\n    } else if (this.direction === \"prev\") {\n      const range = makeKeyRange(this._range, [], [key, this._position]);\n      for (const record of records.values(range, \"prev\")) {\n        const cmpResultKey = key !== undefined ? cmp(record.key, key) : undefined;\n        const cmpResultPosition = this._position !== undefined ? cmp(record.key, this._position) : undefined;\n        if (key !== undefined) {\n          if (cmpResultKey === 1) {\n            continue;\n          }\n        }\n        if (primaryKey !== undefined) {\n          if (cmpResultKey === 1) {\n            continue;\n          }\n          const cmpResultPrimaryKey = cmp(record.value, primaryKey);\n          if (cmpResultKey === 0 && cmpResultPrimaryKey === 1) {\n            continue;\n          }\n        }\n        if (this._position !== undefined && sourceIsObjectStore) {\n          if (cmpResultPosition !== -1) {\n            continue;\n          }\n        }\n        if (this._position !== undefined && !sourceIsObjectStore) {\n          if (cmpResultPosition === 1) {\n            continue;\n          }\n          if (cmpResultPosition === 0 && cmp(record.value, this._objectStorePosition) !== -1) {\n            continue;\n          }\n        }\n        if (this._range !== undefined) {\n          if (!this._range.includes(record.key)) {\n            continue;\n          }\n        }\n        foundRecord = record;\n        break;\n      }\n    } else if (this.direction === \"prevunique\") {\n      let tempRecord;\n      const range = makeKeyRange(this._range, [], [key, this._position]);\n      for (const record of records.values(range, \"prev\")) {\n        if (key !== undefined) {\n          if (cmp(record.key, key) === 1) {\n            continue;\n          }\n        }\n        if (this._position !== undefined) {\n          if (cmp(record.key, this._position) !== -1) {\n            continue;\n          }\n        }\n        if (this._range !== undefined) {\n          if (!this._range.includes(record.key)) {\n            continue;\n          }\n        }\n        tempRecord = record;\n        break;\n      }\n      if (tempRecord) {\n        foundRecord = records.get(tempRecord.key);\n      }\n    }\n    let result;\n    if (!foundRecord) {\n      this._key = undefined;\n      if (!sourceIsObjectStore) {\n        this._objectStorePosition = undefined;\n      }\n\n      // \"this instanceof FDBCursorWithValue\" would be better and not require (this as any), but causes runtime\n      // error due to circular dependency.\n      if (!this._keyOnly && this.toString() === \"[object IDBCursorWithValue]\") {\n        this.value = undefined;\n      }\n      result = null;\n    } else {\n      this._position = foundRecord.key;\n      if (!sourceIsObjectStore) {\n        this._objectStorePosition = foundRecord.value;\n      }\n      this._key = foundRecord.key;\n      if (sourceIsObjectStore) {\n        this._primaryKey = structuredClone(foundRecord.key);\n        if (!this._keyOnly && this.toString() === \"[object IDBCursorWithValue]\") {\n          this.value = structuredClone(foundRecord.value);\n        }\n      } else {\n        this._primaryKey = structuredClone(foundRecord.value);\n        if (!this._keyOnly && this.toString() === \"[object IDBCursorWithValue]\") {\n          if (this.source instanceof FDBObjectStore) {\n            // Can't use sourceIsObjectStore because TypeScript\n            throw new Error(\"This should never happen\");\n          }\n          const value = this.source.objectStore._rawObjectStore.getValue(foundRecord.value);\n          this.value = structuredClone(value);\n        }\n      }\n      this._gotValue = true;\n      // eslint-disable-next-line @typescript-eslint/no-this-alias\n      result = this;\n    }\n    return result;\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBCursor-update-IDBRequest-any-value\n  update(value) {\n    if (value === undefined) {\n      throw new TypeError();\n    }\n    const effectiveObjectStore = getEffectiveObjectStore(this);\n    const effectiveKey = Object.hasOwn(this.source, \"_rawIndex\") ? this.primaryKey : this._position;\n    const transaction = effectiveObjectStore.transaction;\n    if (transaction._state !== \"active\") {\n      throw new TransactionInactiveError();\n    }\n    if (transaction.mode === \"readonly\") {\n      throw new ReadOnlyError();\n    }\n    if (effectiveObjectStore._rawObjectStore.deleted) {\n      throw new InvalidStateError();\n    }\n    if (!(this.source instanceof FDBObjectStore) && this.source._rawIndex.deleted) {\n      throw new InvalidStateError();\n    }\n    if (!this._gotValue || !Object.hasOwn(this, \"value\")) {\n      throw new InvalidStateError();\n    }\n    const clone = structuredClone(value);\n    if (effectiveObjectStore.keyPath !== null) {\n      let tempKey;\n      try {\n        tempKey = extractKey(effectiveObjectStore.keyPath, clone).key;\n      } catch (err) {\n        /* Handled immediately below */\n      }\n      if (cmp(tempKey, effectiveKey) !== 0) {\n        throw new DataError();\n      }\n    }\n    const record = {\n      key: effectiveKey,\n      value: clone\n    };\n    return transaction._execRequestAsync({\n      operation: effectiveObjectStore._rawObjectStore.storeRecord.bind(effectiveObjectStore._rawObjectStore, record, false, transaction._rollbackLog),\n      source: this\n    });\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBCursor-advance-void-unsigned-long-count\n  advance(count) {\n    if (!Number.isInteger(count) || count <= 0) {\n      throw new TypeError();\n    }\n    const effectiveObjectStore = getEffectiveObjectStore(this);\n    const transaction = effectiveObjectStore.transaction;\n    if (transaction._state !== \"active\") {\n      throw new TransactionInactiveError();\n    }\n    if (effectiveObjectStore._rawObjectStore.deleted) {\n      throw new InvalidStateError();\n    }\n    if (!(this.source instanceof FDBObjectStore) && this.source._rawIndex.deleted) {\n      throw new InvalidStateError();\n    }\n    if (!this._gotValue) {\n      throw new InvalidStateError();\n    }\n    if (this._request) {\n      this._request.readyState = \"pending\";\n    }\n    transaction._execRequestAsync({\n      operation: () => {\n        let result;\n        for (let i = 0; i < count; i++) {\n          result = this._iterate();\n\n          // Not sure why this is needed\n          if (!result) {\n            break;\n          }\n        }\n        return result;\n      },\n      request: this._request,\n      source: this.source\n    });\n    this._gotValue = false;\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBCursor-continue-void-any-key\n  continue(key) {\n    const effectiveObjectStore = getEffectiveObjectStore(this);\n    const transaction = effectiveObjectStore.transaction;\n    if (transaction._state !== \"active\") {\n      throw new TransactionInactiveError();\n    }\n    if (effectiveObjectStore._rawObjectStore.deleted) {\n      throw new InvalidStateError();\n    }\n    if (!(this.source instanceof FDBObjectStore) && this.source._rawIndex.deleted) {\n      throw new InvalidStateError();\n    }\n    if (!this._gotValue) {\n      throw new InvalidStateError();\n    }\n    if (key !== undefined) {\n      key = valueToKey(key);\n      const cmpResult = cmp(key, this._position);\n      if (cmpResult <= 0 && (this.direction === \"next\" || this.direction === \"nextunique\") || cmpResult >= 0 && (this.direction === \"prev\" || this.direction === \"prevunique\")) {\n        throw new DataError();\n      }\n    }\n    if (this._request) {\n      this._request.readyState = \"pending\";\n    }\n    transaction._execRequestAsync({\n      operation: this._iterate.bind(this, key),\n      request: this._request,\n      source: this.source\n    });\n    this._gotValue = false;\n  }\n\n  // hthttps://w3c.github.io/IndexedDB/#dom-idbcursor-continueprimarykey\n  continuePrimaryKey(key, primaryKey) {\n    const effectiveObjectStore = getEffectiveObjectStore(this);\n    const transaction = effectiveObjectStore.transaction;\n    if (transaction._state !== \"active\") {\n      throw new TransactionInactiveError();\n    }\n    if (effectiveObjectStore._rawObjectStore.deleted) {\n      throw new InvalidStateError();\n    }\n    if (!(this.source instanceof FDBObjectStore) && this.source._rawIndex.deleted) {\n      throw new InvalidStateError();\n    }\n    if (this.source instanceof FDBObjectStore || this.direction !== \"next\" && this.direction !== \"prev\") {\n      throw new InvalidAccessError();\n    }\n    if (!this._gotValue) {\n      throw new InvalidStateError();\n    }\n\n    // Not sure about this\n    if (key === undefined || primaryKey === undefined) {\n      throw new DataError();\n    }\n    key = valueToKey(key);\n    const cmpResult = cmp(key, this._position);\n    if (cmpResult === -1 && this.direction === \"next\" || cmpResult === 1 && this.direction === \"prev\") {\n      throw new DataError();\n    }\n    const cmpResult2 = cmp(primaryKey, this._objectStorePosition);\n    if (cmpResult === 0) {\n      if (cmpResult2 <= 0 && this.direction === \"next\" || cmpResult2 >= 0 && this.direction === \"prev\") {\n        throw new DataError();\n      }\n    }\n    if (this._request) {\n      this._request.readyState = \"pending\";\n    }\n    transaction._execRequestAsync({\n      operation: this._iterate.bind(this, key, primaryKey),\n      request: this._request,\n      source: this.source\n    });\n    this._gotValue = false;\n  }\n  delete() {\n    const effectiveObjectStore = getEffectiveObjectStore(this);\n    const effectiveKey = Object.hasOwn(this.source, \"_rawIndex\") ? this.primaryKey : this._position;\n    const transaction = effectiveObjectStore.transaction;\n    if (transaction._state !== \"active\") {\n      throw new TransactionInactiveError();\n    }\n    if (transaction.mode === \"readonly\") {\n      throw new ReadOnlyError();\n    }\n    if (effectiveObjectStore._rawObjectStore.deleted) {\n      throw new InvalidStateError();\n    }\n    if (!(this.source instanceof FDBObjectStore) && this.source._rawIndex.deleted) {\n      throw new InvalidStateError();\n    }\n    if (!this._gotValue || !Object.hasOwn(this, \"value\")) {\n      throw new InvalidStateError();\n    }\n    return transaction._execRequestAsync({\n      operation: effectiveObjectStore._rawObjectStore.deleteRecord.bind(effectiveObjectStore._rawObjectStore, effectiveKey, transaction._rollbackLog),\n      source: this\n    });\n  }\n  toString() {\n    return \"[object IDBCursor]\";\n  }\n}\nexport default FDBCursor;","import FDBCursor from \"./FDBCursor.js\";\nclass FDBCursorWithValue extends FDBCursor {\n  value = undefined;\n  constructor(source, range, direction, request) {\n    super(source, range, direction, request);\n  }\n  toString() {\n    return \"[object IDBCursorWithValue]\";\n  }\n}\nexport default FDBCursorWithValue;","import { InvalidStateError } from \"./errors.js\";\nconst stopped = (event, listener) => {\n  return event.immediatePropagationStopped || event.eventPhase === event.CAPTURING_PHASE && listener.capture === false || event.eventPhase === event.BUBBLING_PHASE && listener.capture === true;\n};\n\n// http://www.w3.org/TR/dom/#concept-event-listener-invoke\nconst invokeEventListeners = (event, obj) => {\n  event.currentTarget = obj;\n\n  // The callback might cause obj.listeners to mutate as we traverse it.\n  // Take a copy of the array so that nothing sneaks in and we don't lose\n  // our place.\n  for (const listener of obj.listeners.slice()) {\n    if (event.type !== listener.type || stopped(event, listener)) {\n      continue;\n    }\n\n    // @ts-ignore\n    listener.callback.call(event.currentTarget, event);\n  }\n  const typeToProp = {\n    abort: \"onabort\",\n    blocked: \"onblocked\",\n    complete: \"oncomplete\",\n    error: \"onerror\",\n    success: \"onsuccess\",\n    upgradeneeded: \"onupgradeneeded\",\n    versionchange: \"onversionchange\"\n  };\n  const prop = typeToProp[event.type];\n  if (prop === undefined) {\n    throw new Error(`Unknown event type: \"${event.type}\"`);\n  }\n  const callback = event.currentTarget[prop];\n  if (callback) {\n    const listener = {\n      callback,\n      capture: false,\n      type: event.type\n    };\n    if (!stopped(event, listener)) {\n      // @ts-ignore\n      listener.callback.call(event.currentTarget, event);\n    }\n  }\n};\nclass FakeEventTarget {\n  listeners = [];\n\n  // These will be overridden in individual subclasses and made not readonly\n\n  addEventListener(type, callback, capture = false) {\n    this.listeners.push({\n      callback,\n      capture,\n      type\n    });\n  }\n  removeEventListener(type, callback, capture = false) {\n    const i = this.listeners.findIndex(listener => {\n      return listener.type === type && listener.callback === callback && listener.capture === capture;\n    });\n    this.listeners.splice(i, 1);\n  }\n\n  // http://www.w3.org/TR/dom/#dispatching-events\n  dispatchEvent(event) {\n    if (event.dispatched || !event.initialized) {\n      throw new InvalidStateError(\"The object is in an invalid state.\");\n    }\n    event.isTrusted = false;\n    event.dispatched = true;\n    event.target = this;\n    // NOT SURE WHEN THIS SHOULD BE SET        event.eventPath = [];\n\n    event.eventPhase = event.CAPTURING_PHASE;\n    for (const obj of event.eventPath) {\n      if (!event.propagationStopped) {\n        invokeEventListeners(event, obj);\n      }\n    }\n    event.eventPhase = event.AT_TARGET;\n    if (!event.propagationStopped) {\n      invokeEventListeners(event, event.target);\n    }\n    if (event.bubbles) {\n      event.eventPath.reverse();\n      event.eventPhase = event.BUBBLING_PHASE;\n      for (const obj of event.eventPath) {\n        if (!event.propagationStopped) {\n          invokeEventListeners(event, obj);\n        }\n      }\n    }\n    event.dispatched = false;\n    event.eventPhase = event.NONE;\n    event.currentTarget = null;\n    if (event.canceled) {\n      return false;\n    }\n    return true;\n  }\n}\nexport default FakeEventTarget;","import { InvalidStateError } from \"./lib/errors.js\";\nimport FakeEventTarget from \"./lib/FakeEventTarget.js\";\nclass FDBRequest extends FakeEventTarget {\n  _result = null;\n  _error = null;\n  source = null;\n  transaction = null;\n  readyState = \"pending\";\n  onsuccess = null;\n  onerror = null;\n  get error() {\n    if (this.readyState === \"pending\") {\n      throw new InvalidStateError();\n    }\n    return this._error;\n  }\n  set error(value) {\n    this._error = value;\n  }\n  get result() {\n    if (this.readyState === \"pending\") {\n      throw new InvalidStateError();\n    }\n    return this._result;\n  }\n  set result(value) {\n    this._result = value;\n  }\n  toString() {\n    return \"[object IDBRequest]\";\n  }\n}\nexport default FDBRequest;","// https://heycam.github.io/webidl/#EnforceRange\n\nconst enforceRange = (num, type) => {\n  const min = 0;\n  const max = type === \"unsigned long\" ? 4294967295 : 9007199254740991;\n  if (isNaN(num) || num < min || num > max) {\n    throw new TypeError();\n  }\n  if (num >= 0) {\n    return Math.floor(num);\n  }\n};\nexport default enforceRange;","class FakeDOMStringList extends Array {\n  contains(value) {\n    for (const value2 of this) {\n      if (value === value2) {\n        return true;\n      }\n    }\n    return false;\n  }\n  item(i) {\n    if (i < 0 || i >= this.length) {\n      return null;\n    }\n    return this[i];\n  }\n\n  // Used internally, should not be used by others. I could maybe get rid of these and replace rather than mutate, but too lazy to check the spec.\n  _push(...values) {\n    return Array.prototype.push.call(this, ...values);\n  }\n  _sort(...values) {\n    return Array.prototype.sort.call(this, ...values);\n  }\n}\n\n// Would be nice to remove these properties to fix https://github.com/dumbmatter/fakeIndexedDB/issues/66 but for some reason it breaks Dexie - see test/dexie.js and FakeDOMStringList tests\n/*\n// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array\nconst arrayPropertiesToDelete = [\"from\", \"isArray\", \"of\"];\nconst arrayMethodsToDelete = [\n    \"at\",\n    \"concat\",\n    \"copyWithin\",\n    \"entries\",\n    \"every\",\n    \"fill\",\n    \"filter\",\n    \"find\",\n    \"findIndex\",\n    \"flat\",\n    \"flatMap\",\n    \"forEach\",\n    \"includes\",\n    \"indexOf\",\n    \"join\",\n    \"keys\",\n    \"lastIndexOf\",\n    \"map\",\n    \"pop\",\n    \"push\",\n    \"reduce\",\n    \"reduceRight\",\n    \"reverse\",\n    \"shift\",\n    \"slice\",\n    \"some\",\n    \"sort\",\n    \"splice\",\n    \"unshift\",\n    \"values\",\n];\n\n// Set to undefined rather than delete, so it doesn't go up the chain to Array. Not perfect, but good enough?\nfor (const property of arrayPropertiesToDelete) {\n    (FakeDOMStringList as any)[property] = undefined;\n}\nfor (const property of arrayMethodsToDelete) {\n    (FakeDOMStringList as any).prototype[property] = undefined;\n}\n*/\n\nexport default FakeDOMStringList;","import FDBKeyRange from \"../FDBKeyRange.js\";\nimport { DataError } from \"./errors.js\";\nimport valueToKey from \"./valueToKey.js\";\n\n// http://w3c.github.io/IndexedDB/#convert-a-value-to-a-key-range\nconst valueToKeyRange = (value, nullDisallowedFlag = false) => {\n  if (value instanceof FDBKeyRange) {\n    return value;\n  }\n  if (value === null || value === undefined) {\n    if (nullDisallowedFlag) {\n      throw new DataError();\n    }\n    return new FDBKeyRange(undefined, undefined, false, false);\n  }\n  const key = valueToKey(value);\n  return FDBKeyRange.only(key);\n};\nexport default valueToKeyRange;","import FDBCursor from \"./FDBCursor.js\";\nimport FDBCursorWithValue from \"./FDBCursorWithValue.js\";\nimport FDBKeyRange from \"./FDBKeyRange.js\";\nimport FDBRequest from \"./FDBRequest.js\";\nimport enforceRange from \"./lib/enforceRange.js\";\nimport { ConstraintError, InvalidStateError, TransactionInactiveError } from \"./lib/errors.js\";\nimport FakeDOMStringList from \"./lib/FakeDOMStringList.js\";\nimport valueToKey from \"./lib/valueToKey.js\";\nimport valueToKeyRange from \"./lib/valueToKeyRange.js\";\nconst confirmActiveTransaction = index => {\n  if (index._rawIndex.deleted || index.objectStore._rawObjectStore.deleted) {\n    throw new InvalidStateError();\n  }\n  if (index.objectStore.transaction._state !== \"active\") {\n    throw new TransactionInactiveError();\n  }\n};\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#idl-def-IDBIndex\nclass FDBIndex {\n  constructor(objectStore, rawIndex) {\n    this._rawIndex = rawIndex;\n    this._name = rawIndex.name;\n    this.objectStore = objectStore;\n    this.keyPath = rawIndex.keyPath;\n    this.multiEntry = rawIndex.multiEntry;\n    this.unique = rawIndex.unique;\n  }\n  get name() {\n    return this._name;\n  }\n\n  // https://w3c.github.io/IndexedDB/#dom-idbindex-name\n  set name(name) {\n    const transaction = this.objectStore.transaction;\n    if (!transaction.db._runningVersionchangeTransaction) {\n      throw new InvalidStateError();\n    }\n    if (transaction._state !== \"active\") {\n      throw new TransactionInactiveError();\n    }\n    if (this._rawIndex.deleted || this.objectStore._rawObjectStore.deleted) {\n      throw new InvalidStateError();\n    }\n    name = String(name);\n    if (name === this._name) {\n      return;\n    }\n    if (this.objectStore.indexNames.contains(name)) {\n      throw new ConstraintError();\n    }\n    const oldName = this._name;\n    const oldIndexNames = [...this.objectStore.indexNames];\n    this._name = name;\n    this._rawIndex.name = name;\n    this.objectStore._indexesCache.delete(oldName);\n    this.objectStore._indexesCache.set(name, this);\n    this.objectStore._rawObjectStore.rawIndexes.delete(oldName);\n    this.objectStore._rawObjectStore.rawIndexes.set(name, this._rawIndex);\n    this.objectStore.indexNames = new FakeDOMStringList(...Array.from(this.objectStore._rawObjectStore.rawIndexes.keys()).filter(indexName => {\n      const index = this.objectStore._rawObjectStore.rawIndexes.get(indexName);\n      return index && !index.deleted;\n    }).sort());\n    transaction._rollbackLog.push(() => {\n      this._name = oldName;\n      this._rawIndex.name = oldName;\n      this.objectStore._indexesCache.delete(name);\n      this.objectStore._indexesCache.set(oldName, this);\n      this.objectStore._rawObjectStore.rawIndexes.delete(name);\n      this.objectStore._rawObjectStore.rawIndexes.set(oldName, this._rawIndex);\n      this.objectStore.indexNames = new FakeDOMStringList(...oldIndexNames);\n    });\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBIndex-openCursor-IDBRequest-any-range-IDBCursorDirection-direction\n  openCursor(range, direction) {\n    confirmActiveTransaction(this);\n    if (range === null) {\n      range = undefined;\n    }\n    if (range !== undefined && !(range instanceof FDBKeyRange)) {\n      range = FDBKeyRange.only(valueToKey(range));\n    }\n    const request = new FDBRequest();\n    request.source = this;\n    request.transaction = this.objectStore.transaction;\n    const cursor = new FDBCursorWithValue(this, range, direction, request);\n    return this.objectStore.transaction._execRequestAsync({\n      operation: cursor._iterate.bind(cursor),\n      request,\n      source: this\n    });\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBIndex-openKeyCursor-IDBRequest-any-range-IDBCursorDirection-direction\n  openKeyCursor(range, direction) {\n    confirmActiveTransaction(this);\n    if (range === null) {\n      range = undefined;\n    }\n    if (range !== undefined && !(range instanceof FDBKeyRange)) {\n      range = FDBKeyRange.only(valueToKey(range));\n    }\n    const request = new FDBRequest();\n    request.source = this;\n    request.transaction = this.objectStore.transaction;\n    const cursor = new FDBCursor(this, range, direction, request, true);\n    return this.objectStore.transaction._execRequestAsync({\n      operation: cursor._iterate.bind(cursor),\n      request,\n      source: this\n    });\n  }\n  get(key) {\n    confirmActiveTransaction(this);\n    if (!(key instanceof FDBKeyRange)) {\n      key = valueToKey(key);\n    }\n    return this.objectStore.transaction._execRequestAsync({\n      operation: this._rawIndex.getValue.bind(this._rawIndex, key),\n      source: this\n    });\n  }\n\n  // http://w3c.github.io/IndexedDB/#dom-idbindex-getall\n  getAll(query, count) {\n    if (arguments.length > 1 && count !== undefined) {\n      count = enforceRange(count, \"unsigned long\");\n    }\n    confirmActiveTransaction(this);\n    const range = valueToKeyRange(query);\n    return this.objectStore.transaction._execRequestAsync({\n      operation: this._rawIndex.getAllValues.bind(this._rawIndex, range, count),\n      source: this\n    });\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBIndex-getKey-IDBRequest-any-key\n  getKey(key) {\n    confirmActiveTransaction(this);\n    if (!(key instanceof FDBKeyRange)) {\n      key = valueToKey(key);\n    }\n    return this.objectStore.transaction._execRequestAsync({\n      operation: this._rawIndex.getKey.bind(this._rawIndex, key),\n      source: this\n    });\n  }\n\n  // http://w3c.github.io/IndexedDB/#dom-idbindex-getallkeys\n  getAllKeys(query, count) {\n    if (arguments.length > 1 && count !== undefined) {\n      count = enforceRange(count, \"unsigned long\");\n    }\n    confirmActiveTransaction(this);\n    const range = valueToKeyRange(query);\n    return this.objectStore.transaction._execRequestAsync({\n      operation: this._rawIndex.getAllKeys.bind(this._rawIndex, range, count),\n      source: this\n    });\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBIndex-count-IDBRequest-any-key\n  count(key) {\n    confirmActiveTransaction(this);\n    if (key === null) {\n      key = undefined;\n    }\n    if (key !== undefined && !(key instanceof FDBKeyRange)) {\n      key = FDBKeyRange.only(valueToKey(key));\n    }\n    return this.objectStore.transaction._execRequestAsync({\n      operation: () => {\n        return this._rawIndex.count(key);\n      },\n      source: this\n    });\n  }\n  toString() {\n    return \"[object IDBIndex]\";\n  }\n}\nexport default FDBIndex;","// http://w3c.github.io/IndexedDB/#check-that-a-key-could-be-injected-into-a-value\nconst canInjectKey = (keyPath, value) => {\n  if (Array.isArray(keyPath)) {\n    throw new Error(\"The key paths used in this section are always strings and never sequences, since it is not possible to create a object store which has a key generator and also has a key path that is a sequence.\");\n  }\n  const identifiers = keyPath.split(\".\");\n  if (identifiers.length === 0) {\n    throw new Error(\"Assert: identifiers is not empty\");\n  }\n  identifiers.pop();\n  for (const identifier of identifiers) {\n    if (typeof value !== \"object\" && !Array.isArray(value)) {\n      return false;\n    }\n    const hop = Object.hasOwn(value, identifier);\n    if (!hop) {\n      return true;\n    }\n    value = value[identifier];\n  }\n  return typeof value === \"object\" || Array.isArray(value);\n};\nexport default canInjectKey;","import cmp from \"./cmp.js\";\n/**\n * Classic binary search implementation. Returns the index where the key\n * should be inserted, assuming the records list is ordered.\n */\nfunction binarySearch(records, key) {\n  let low = 0;\n  let high = records.length;\n  let mid;\n  while (low < high) {\n    mid = low + high >>> 1; // like Math.floor((low + high) / 2) but fast\n    if (cmp(records[mid].key, key) < 0) {\n      low = mid + 1;\n    } else {\n      high = mid;\n    }\n  }\n  return low;\n}\n\n/**\n * Equivalent to `records.findIndex(record => cmp(record.key, key) === 0)`\n */\nexport function getIndexByKey(records, key) {\n  const idx = binarySearch(records, key);\n  const record = records[idx];\n  if (record && cmp(record.key, key) === 0) {\n    return idx;\n  }\n  return -1;\n}\n\n/**\n * Equivalent to `records.find(record => cmp(record.key, key) === 0)`\n */\nexport function getByKey(records, key) {\n  const idx = getIndexByKey(records, key);\n  return records[idx];\n}\n\n/**\n * Equivalent to `records.findIndex(record => key.includes(record.key))`\n */\nexport function getIndexByKeyRange(records, keyRange) {\n  const lowerIdx = typeof keyRange.lower === \"undefined\" ? 0 : binarySearch(records, keyRange.lower);\n  const upperIdx = typeof keyRange.upper === \"undefined\" ? records.length - 1 : binarySearch(records, keyRange.upper);\n  for (let i = lowerIdx; i <= upperIdx; i++) {\n    const record = records[i];\n    if (record && keyRange.includes(record.key)) {\n      return i;\n    }\n  }\n  return -1;\n}\n\n/**\n * Equivalent to `records.find(record => key.includes(record.key))`\n */\nexport function getByKeyRange(records, keyRange) {\n  const idx = getIndexByKeyRange(records, keyRange);\n  return records[idx];\n}\n\n/**\n * Equivalent to `records.findIndex(record => cmp(record.key, key) >= 0)`\n */\nexport function getIndexByKeyGTE(records, key) {\n  const idx = binarySearch(records, key);\n  const record = records[idx];\n  if (record && cmp(record.key, key) >= 0) {\n    return idx;\n  }\n  return -1;\n}","import FDBKeyRange from \"../FDBKeyRange.js\";\nimport { getByKey, getByKeyRange, getIndexByKey, getIndexByKeyGTE, getIndexByKeyRange } from \"./binarySearch.js\";\nimport cmp from \"./cmp.js\";\nclass RecordStore {\n  records = [];\n  get(key) {\n    if (key instanceof FDBKeyRange) {\n      return getByKeyRange(this.records, key);\n    }\n    return getByKey(this.records, key);\n  }\n  add(newRecord) {\n    // Find where to put it so it's sorted by key\n    let i;\n    if (this.records.length === 0) {\n      i = 0;\n    } else {\n      i = getIndexByKeyGTE(this.records, newRecord.key);\n      if (i === -1) {\n        // If no matching key, add to end\n        i = this.records.length;\n      } else {\n        // If matching key, advance to appropriate position based on value (used in indexes)\n        while (i < this.records.length && cmp(this.records[i].key, newRecord.key) === 0) {\n          if (cmp(this.records[i].value, newRecord.value) !== -1) {\n            // Record value >= newRecord value, so insert here\n            break;\n          }\n          i += 1; // Look at next record\n        }\n      }\n    }\n    this.records.splice(i, 0, newRecord);\n  }\n  delete(key) {\n    const deletedRecords = [];\n    const isRange = key instanceof FDBKeyRange;\n    while (true) {\n      const idx = isRange ? getIndexByKeyRange(this.records, key) : getIndexByKey(this.records, key);\n      if (idx === -1) {\n        break;\n      }\n      deletedRecords.push(this.records[idx]);\n      this.records.splice(idx, 1);\n    }\n    return deletedRecords;\n  }\n  deleteByValue(key) {\n    const range = key instanceof FDBKeyRange ? key : FDBKeyRange.only(key);\n    const deletedRecords = [];\n    this.records = this.records.filter(record => {\n      const shouldDelete = range.includes(record.value);\n      if (shouldDelete) {\n        deletedRecords.push(record);\n      }\n      return !shouldDelete;\n    });\n    return deletedRecords;\n  }\n  clear() {\n    const deletedRecords = this.records.slice();\n    this.records = [];\n    return deletedRecords;\n  }\n  values(range, direction = \"next\") {\n    return {\n      [Symbol.iterator]: () => {\n        let i;\n        if (direction === \"next\") {\n          i = 0;\n          if (range !== undefined && range.lower !== undefined) {\n            while (this.records[i] !== undefined) {\n              const cmpResult = cmp(this.records[i].key, range.lower);\n              if (cmpResult === 1 || cmpResult === 0 && !range.lowerOpen) {\n                break;\n              }\n              i += 1;\n            }\n          }\n        } else {\n          i = this.records.length - 1;\n          if (range !== undefined && range.upper !== undefined) {\n            while (this.records[i] !== undefined) {\n              const cmpResult = cmp(this.records[i].key, range.upper);\n              if (cmpResult === -1 || cmpResult === 0 && !range.upperOpen) {\n                break;\n              }\n              i -= 1;\n            }\n          }\n        }\n        return {\n          next: () => {\n            let done;\n            let value;\n            if (direction === \"next\") {\n              value = this.records[i];\n              done = i >= this.records.length;\n              i += 1;\n              if (!done && range !== undefined && range.upper !== undefined) {\n                const cmpResult = cmp(value.key, range.upper);\n                done = cmpResult === 1 || cmpResult === 0 && range.upperOpen;\n                if (done) {\n                  value = undefined;\n                }\n              }\n            } else {\n              value = this.records[i];\n              done = i < 0;\n              i -= 1;\n              if (!done && range !== undefined && range.lower !== undefined) {\n                const cmpResult = cmp(value.key, range.lower);\n                done = cmpResult === -1 || cmpResult === 0 && range.lowerOpen;\n                if (done) {\n                  value = undefined;\n                }\n              }\n            }\n\n            // The weird \"as IteratorResult<Record>\" is needed because of\n            // https://github.com/Microsoft/TypeScript/issues/11375 and\n            // https://github.com/Microsoft/TypeScript/issues/2983\n            return {\n              done,\n              value\n            };\n          }\n        };\n      }\n    };\n  }\n}\nexport default RecordStore;","import { ConstraintError } from \"./errors.js\";\nimport extractKey from \"./extractKey.js\";\nimport RecordStore from \"./RecordStore.js\";\nimport valueToKey from \"./valueToKey.js\";\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-index\nclass Index {\n  deleted = false;\n  // Initialized should be used to decide whether to throw an error or abort the versionchange transaction when there is a\n  // constraint\n  initialized = false;\n  records = new RecordStore();\n  constructor(rawObjectStore, name, keyPath, multiEntry, unique) {\n    this.rawObjectStore = rawObjectStore;\n    this.name = name;\n    this.keyPath = keyPath;\n    this.multiEntry = multiEntry;\n    this.unique = unique;\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-retrieving-a-value-from-an-index\n  getKey(key) {\n    const record = this.records.get(key);\n    return record !== undefined ? record.value : undefined;\n  }\n\n  // http://w3c.github.io/IndexedDB/#retrieve-multiple-referenced-values-from-an-index\n  getAllKeys(range, count) {\n    if (count === undefined || count === 0) {\n      count = Infinity;\n    }\n    const records = [];\n    for (const record of this.records.values(range)) {\n      records.push(structuredClone(record.value));\n      if (records.length >= count) {\n        break;\n      }\n    }\n    return records;\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#index-referenced-value-retrieval-operation\n  getValue(key) {\n    const record = this.records.get(key);\n    return record !== undefined ? this.rawObjectStore.getValue(record.value) : undefined;\n  }\n\n  // http://w3c.github.io/IndexedDB/#retrieve-multiple-referenced-values-from-an-index\n  getAllValues(range, count) {\n    if (count === undefined || count === 0) {\n      count = Infinity;\n    }\n    const records = [];\n    for (const record of this.records.values(range)) {\n      records.push(this.rawObjectStore.getValue(record.value));\n      if (records.length >= count) {\n        break;\n      }\n    }\n    return records;\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-storing-a-record-into-an-object-store (step 7)\n  storeRecord(newRecord) {\n    let indexKey;\n    try {\n      indexKey = extractKey(this.keyPath, newRecord.value).key;\n    } catch (err) {\n      if (err.name === \"DataError\") {\n        // Invalid key is not an actual error, just means we do not store an entry in this index\n        return;\n      }\n      throw err;\n    }\n    if (!this.multiEntry || !Array.isArray(indexKey)) {\n      try {\n        valueToKey(indexKey);\n      } catch (e) {\n        return;\n      }\n    } else {\n      // remove any elements from index key that are not valid keys and remove any duplicate elements from index\n      // key such that only one instance of the duplicate value remains.\n      const keep = [];\n      for (const part of indexKey) {\n        if (keep.indexOf(part) < 0) {\n          try {\n            keep.push(valueToKey(part));\n          } catch (err) {\n            /* Do nothing */\n          }\n        }\n      }\n      indexKey = keep;\n    }\n    if (!this.multiEntry || !Array.isArray(indexKey)) {\n      if (this.unique) {\n        const existingRecord = this.records.get(indexKey);\n        if (existingRecord) {\n          throw new ConstraintError();\n        }\n      }\n    } else {\n      if (this.unique) {\n        for (const individualIndexKey of indexKey) {\n          const existingRecord = this.records.get(individualIndexKey);\n          if (existingRecord) {\n            throw new ConstraintError();\n          }\n        }\n      }\n    }\n    if (!this.multiEntry || !Array.isArray(indexKey)) {\n      this.records.add({\n        key: indexKey,\n        value: newRecord.key\n      });\n    } else {\n      for (const individualIndexKey of indexKey) {\n        this.records.add({\n          key: individualIndexKey,\n          value: newRecord.key\n        });\n      }\n    }\n  }\n  initialize(transaction) {\n    if (this.initialized) {\n      throw new Error(\"Index already initialized\");\n    }\n    transaction._execRequestAsync({\n      operation: () => {\n        try {\n          // Create index based on current value of objectstore\n          for (const record of this.rawObjectStore.records.values()) {\n            this.storeRecord(record);\n          }\n          this.initialized = true;\n        } catch (err) {\n          // console.error(err);\n          transaction._abort(err.name);\n        }\n      },\n      source: null\n    });\n  }\n  count(range) {\n    let count = 0;\n\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    for (const record of this.records.values(range)) {\n      count += 1;\n    }\n    return count;\n  }\n}\nexport default Index;","// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-valid-key-path\nconst validateKeyPath = (keyPath, parent) => {\n  // This doesn't make sense to me based on the spec, but it is needed to pass the W3C KeyPath tests (see same\n  // comment in extractKey)\n  if (keyPath !== undefined && keyPath !== null && typeof keyPath !== \"string\" && keyPath.toString && (parent === \"array\" || !Array.isArray(keyPath))) {\n    keyPath = keyPath.toString();\n  }\n  if (typeof keyPath === \"string\") {\n    if (keyPath === \"\" && parent !== \"string\") {\n      return;\n    }\n    try {\n      // https://mathiasbynens.be/demo/javascript-identifier-regex for ECMAScript 5.1 / Unicode v7.0.0, with\n      // reserved words at beginning removed\n      const validIdentifierRegex =\n      // eslint-disable-next-line no-misleading-character-class\n      /^(?:[$A-Z_a-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])(?:[$0-9A-Z_a-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B2\\u08E4-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA69D\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2D\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])*$/;\n      if (keyPath.length >= 1 && validIdentifierRegex.test(keyPath)) {\n        return;\n      }\n    } catch (err) {\n      throw new SyntaxError(err.message);\n    }\n    if (keyPath.indexOf(\" \") >= 0) {\n      throw new SyntaxError(\"The keypath argument contains an invalid key path (no spaces allowed).\");\n    }\n  }\n  if (Array.isArray(keyPath) && keyPath.length > 0) {\n    if (parent) {\n      // No nested arrays\n      throw new SyntaxError(\"The keypath argument contains an invalid key path (nested arrays).\");\n    }\n    for (const part of keyPath) {\n      validateKeyPath(part, \"array\");\n    }\n    return;\n  } else if (typeof keyPath === \"string\" && keyPath.indexOf(\".\") >= 0) {\n    keyPath = keyPath.split(\".\");\n    for (const part of keyPath) {\n      validateKeyPath(part, \"string\");\n    }\n    return;\n  }\n  throw new SyntaxError();\n};\nexport default validateKeyPath;","import FDBCursor from \"./FDBCursor.js\";\nimport FDBCursorWithValue from \"./FDBCursorWithValue.js\";\nimport FDBIndex from \"./FDBIndex.js\";\nimport FDBKeyRange from \"./FDBKeyRange.js\";\nimport FDBRequest from \"./FDBRequest.js\";\nimport canInjectKey from \"./lib/canInjectKey.js\";\nimport enforceRange from \"./lib/enforceRange.js\";\nimport { ConstraintError, DataError, InvalidAccessError, InvalidStateError, NotFoundError, ReadOnlyError, TransactionInactiveError } from \"./lib/errors.js\";\nimport extractKey from \"./lib/extractKey.js\";\nimport FakeDOMStringList from \"./lib/FakeDOMStringList.js\";\nimport Index from \"./lib/Index.js\";\nimport validateKeyPath from \"./lib/validateKeyPath.js\";\nimport valueToKey from \"./lib/valueToKey.js\";\nimport valueToKeyRange from \"./lib/valueToKeyRange.js\";\nconst confirmActiveTransaction = objectStore => {\n  if (objectStore._rawObjectStore.deleted) {\n    throw new InvalidStateError();\n  }\n  if (objectStore.transaction._state !== \"active\") {\n    throw new TransactionInactiveError();\n  }\n};\nconst buildRecordAddPut = (objectStore, value, key) => {\n  confirmActiveTransaction(objectStore);\n  if (objectStore.transaction.mode === \"readonly\") {\n    throw new ReadOnlyError();\n  }\n  if (objectStore.keyPath !== null) {\n    if (key !== undefined) {\n      throw new DataError();\n    }\n  }\n  const clone = structuredClone(value);\n  if (objectStore.keyPath !== null) {\n    const tempKey = extractKey(objectStore.keyPath, clone);\n    if (tempKey.type === \"found\") {\n      valueToKey(tempKey.key);\n    } else {\n      if (!objectStore._rawObjectStore.keyGenerator) {\n        throw new DataError();\n      } else if (!canInjectKey(objectStore.keyPath, clone)) {\n        throw new DataError();\n      }\n    }\n  }\n  if (objectStore.keyPath === null && objectStore._rawObjectStore.keyGenerator === null && key === undefined) {\n    throw new DataError();\n  }\n  if (key !== undefined) {\n    key = valueToKey(key);\n  }\n  return {\n    key,\n    value: clone\n  };\n};\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#object-store\nclass FDBObjectStore {\n  _indexesCache = new Map();\n  constructor(transaction, rawObjectStore) {\n    this._rawObjectStore = rawObjectStore;\n    this._name = rawObjectStore.name;\n    this.keyPath = rawObjectStore.keyPath;\n    this.autoIncrement = rawObjectStore.autoIncrement;\n    this.transaction = transaction;\n    this.indexNames = new FakeDOMStringList(...Array.from(rawObjectStore.rawIndexes.keys()).sort());\n  }\n  get name() {\n    return this._name;\n  }\n\n  // http://w3c.github.io/IndexedDB/#dom-idbobjectstore-name\n  set name(name) {\n    const transaction = this.transaction;\n    if (!transaction.db._runningVersionchangeTransaction) {\n      throw new InvalidStateError();\n    }\n    confirmActiveTransaction(this);\n    name = String(name);\n    if (name === this._name) {\n      return;\n    }\n    if (this._rawObjectStore.rawDatabase.rawObjectStores.has(name)) {\n      throw new ConstraintError();\n    }\n    const oldName = this._name;\n    const oldObjectStoreNames = [...transaction.db.objectStoreNames];\n    this._name = name;\n    this._rawObjectStore.name = name;\n    this.transaction._objectStoresCache.delete(oldName);\n    this.transaction._objectStoresCache.set(name, this);\n    this._rawObjectStore.rawDatabase.rawObjectStores.delete(oldName);\n    this._rawObjectStore.rawDatabase.rawObjectStores.set(name, this._rawObjectStore);\n    transaction.db.objectStoreNames = new FakeDOMStringList(...Array.from(this._rawObjectStore.rawDatabase.rawObjectStores.keys()).filter(objectStoreName => {\n      const objectStore = this._rawObjectStore.rawDatabase.rawObjectStores.get(objectStoreName);\n      return objectStore && !objectStore.deleted;\n    }).sort());\n    const oldScope = new Set(transaction._scope);\n    const oldTransactionObjectStoreNames = [...transaction.objectStoreNames];\n    this.transaction._scope.delete(oldName);\n    transaction._scope.add(name);\n    transaction.objectStoreNames = new FakeDOMStringList(...Array.from(transaction._scope).sort());\n    transaction._rollbackLog.push(() => {\n      this._name = oldName;\n      this._rawObjectStore.name = oldName;\n      this.transaction._objectStoresCache.delete(name);\n      this.transaction._objectStoresCache.set(oldName, this);\n      this._rawObjectStore.rawDatabase.rawObjectStores.delete(name);\n      this._rawObjectStore.rawDatabase.rawObjectStores.set(oldName, this._rawObjectStore);\n      transaction.db.objectStoreNames = new FakeDOMStringList(...oldObjectStoreNames);\n      transaction._scope = oldScope;\n      transaction.objectStoreNames = new FakeDOMStringList(...oldTransactionObjectStoreNames);\n    });\n  }\n  put(value, key) {\n    if (arguments.length === 0) {\n      throw new TypeError();\n    }\n    const record = buildRecordAddPut(this, value, key);\n    return this.transaction._execRequestAsync({\n      operation: this._rawObjectStore.storeRecord.bind(this._rawObjectStore, record, false, this.transaction._rollbackLog),\n      source: this\n    });\n  }\n  add(value, key) {\n    if (arguments.length === 0) {\n      throw new TypeError();\n    }\n    const record = buildRecordAddPut(this, value, key);\n    return this.transaction._execRequestAsync({\n      operation: this._rawObjectStore.storeRecord.bind(this._rawObjectStore, record, true, this.transaction._rollbackLog),\n      source: this\n    });\n  }\n  delete(key) {\n    if (arguments.length === 0) {\n      throw new TypeError();\n    }\n    confirmActiveTransaction(this);\n    if (this.transaction.mode === \"readonly\") {\n      throw new ReadOnlyError();\n    }\n    if (!(key instanceof FDBKeyRange)) {\n      key = valueToKey(key);\n    }\n    return this.transaction._execRequestAsync({\n      operation: this._rawObjectStore.deleteRecord.bind(this._rawObjectStore, key, this.transaction._rollbackLog),\n      source: this\n    });\n  }\n  get(key) {\n    if (arguments.length === 0) {\n      throw new TypeError();\n    }\n    confirmActiveTransaction(this);\n    if (!(key instanceof FDBKeyRange)) {\n      key = valueToKey(key);\n    }\n    return this.transaction._execRequestAsync({\n      operation: this._rawObjectStore.getValue.bind(this._rawObjectStore, key),\n      source: this\n    });\n  }\n\n  // http://w3c.github.io/IndexedDB/#dom-idbobjectstore-getall\n  getAll(query, count) {\n    if (arguments.length > 1 && count !== undefined) {\n      count = enforceRange(count, \"unsigned long\");\n    }\n    confirmActiveTransaction(this);\n    const range = valueToKeyRange(query);\n    return this.transaction._execRequestAsync({\n      operation: this._rawObjectStore.getAllValues.bind(this._rawObjectStore, range, count),\n      source: this\n    });\n  }\n\n  // http://w3c.github.io/IndexedDB/#dom-idbobjectstore-getkey\n  getKey(key) {\n    if (arguments.length === 0) {\n      throw new TypeError();\n    }\n    confirmActiveTransaction(this);\n    if (!(key instanceof FDBKeyRange)) {\n      key = valueToKey(key);\n    }\n    return this.transaction._execRequestAsync({\n      operation: this._rawObjectStore.getKey.bind(this._rawObjectStore, key),\n      source: this\n    });\n  }\n\n  // http://w3c.github.io/IndexedDB/#dom-idbobjectstore-getallkeys\n  getAllKeys(query, count) {\n    if (arguments.length > 1 && count !== undefined) {\n      count = enforceRange(count, \"unsigned long\");\n    }\n    confirmActiveTransaction(this);\n    const range = valueToKeyRange(query);\n    return this.transaction._execRequestAsync({\n      operation: this._rawObjectStore.getAllKeys.bind(this._rawObjectStore, range, count),\n      source: this\n    });\n  }\n  clear() {\n    confirmActiveTransaction(this);\n    if (this.transaction.mode === \"readonly\") {\n      throw new ReadOnlyError();\n    }\n    return this.transaction._execRequestAsync({\n      operation: this._rawObjectStore.clear.bind(this._rawObjectStore, this.transaction._rollbackLog),\n      source: this\n    });\n  }\n  openCursor(range, direction) {\n    confirmActiveTransaction(this);\n    if (range === null) {\n      range = undefined;\n    }\n    if (range !== undefined && !(range instanceof FDBKeyRange)) {\n      range = FDBKeyRange.only(valueToKey(range));\n    }\n    const request = new FDBRequest();\n    request.source = this;\n    request.transaction = this.transaction;\n    const cursor = new FDBCursorWithValue(this, range, direction, request);\n    return this.transaction._execRequestAsync({\n      operation: cursor._iterate.bind(cursor),\n      request,\n      source: this\n    });\n  }\n  openKeyCursor(range, direction) {\n    confirmActiveTransaction(this);\n    if (range === null) {\n      range = undefined;\n    }\n    if (range !== undefined && !(range instanceof FDBKeyRange)) {\n      range = FDBKeyRange.only(valueToKey(range));\n    }\n    const request = new FDBRequest();\n    request.source = this;\n    request.transaction = this.transaction;\n    const cursor = new FDBCursor(this, range, direction, request, true);\n    return this.transaction._execRequestAsync({\n      operation: cursor._iterate.bind(cursor),\n      request,\n      source: this\n    });\n  }\n\n  // tslint:-next-line max-line-length\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBObjectStore-createIndex-IDBIndex-DOMString-name-DOMString-sequence-DOMString--keyPath-IDBIndexParameters-optionalParameters\n  createIndex(name, keyPath, optionalParameters = {}) {\n    if (arguments.length < 2) {\n      throw new TypeError();\n    }\n    const multiEntry = optionalParameters.multiEntry !== undefined ? optionalParameters.multiEntry : false;\n    const unique = optionalParameters.unique !== undefined ? optionalParameters.unique : false;\n    if (this.transaction.mode !== \"versionchange\") {\n      throw new InvalidStateError();\n    }\n    confirmActiveTransaction(this);\n    if (this.indexNames.contains(name)) {\n      throw new ConstraintError();\n    }\n    validateKeyPath(keyPath);\n    if (Array.isArray(keyPath) && multiEntry) {\n      throw new InvalidAccessError();\n    }\n\n    // The index that is requested to be created can contain constraints on the data allowed in the index's\n    // referenced object store, such as requiring uniqueness of the values referenced by the index's keyPath. If the\n    // referenced object store already contains data which violates these constraints, this MUST NOT cause the\n    // implementation of createIndex to throw an exception or affect what it returns. The implementation MUST still\n    // create and return an IDBIndex object. Instead the implementation must queue up an operation to abort the\n    // \"versionchange\" transaction which was used for the createIndex call.\n\n    const indexNames = [...this.indexNames];\n    this.transaction._rollbackLog.push(() => {\n      const index2 = this._rawObjectStore.rawIndexes.get(name);\n      if (index2) {\n        index2.deleted = true;\n      }\n      this.indexNames = new FakeDOMStringList(...indexNames);\n      this._rawObjectStore.rawIndexes.delete(name);\n    });\n    const index = new Index(this._rawObjectStore, name, keyPath, multiEntry, unique);\n    this.indexNames._push(name);\n    this.indexNames._sort();\n    this._rawObjectStore.rawIndexes.set(name, index);\n    index.initialize(this.transaction); // This is async by design\n\n    return new FDBIndex(this, index);\n  }\n\n  // https://w3c.github.io/IndexedDB/#dom-idbobjectstore-index\n  index(name) {\n    if (arguments.length === 0) {\n      throw new TypeError();\n    }\n    if (this._rawObjectStore.deleted || this.transaction._state === \"finished\") {\n      throw new InvalidStateError();\n    }\n    const index = this._indexesCache.get(name);\n    if (index !== undefined) {\n      return index;\n    }\n    const rawIndex = this._rawObjectStore.rawIndexes.get(name);\n    if (!this.indexNames.contains(name) || rawIndex === undefined) {\n      throw new NotFoundError();\n    }\n    const index2 = new FDBIndex(this, rawIndex);\n    this._indexesCache.set(name, index2);\n    return index2;\n  }\n  deleteIndex(name) {\n    if (arguments.length === 0) {\n      throw new TypeError();\n    }\n    if (this.transaction.mode !== \"versionchange\") {\n      throw new InvalidStateError();\n    }\n    confirmActiveTransaction(this);\n    const rawIndex = this._rawObjectStore.rawIndexes.get(name);\n    if (rawIndex === undefined) {\n      throw new NotFoundError();\n    }\n    this.transaction._rollbackLog.push(() => {\n      rawIndex.deleted = false;\n      this._rawObjectStore.rawIndexes.set(name, rawIndex);\n      this.indexNames._push(name);\n      this.indexNames._sort();\n    });\n    this.indexNames = new FakeDOMStringList(...Array.from(this.indexNames).filter(indexName => {\n      return indexName !== name;\n    }));\n    rawIndex.deleted = true; // Not sure if this is supposed to happen synchronously\n\n    this.transaction._execRequestAsync({\n      operation: () => {\n        const rawIndex2 = this._rawObjectStore.rawIndexes.get(name);\n\n        // Hack in case another index is given this name before this async request is processed. It'd be better\n        // to have a real unique ID for each index.\n        if (rawIndex === rawIndex2) {\n          this._rawObjectStore.rawIndexes.delete(name);\n        }\n      },\n      source: this\n    });\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBObjectStore-count-IDBRequest-any-key\n  count(key) {\n    confirmActiveTransaction(this);\n    if (key === null) {\n      key = undefined;\n    }\n    if (key !== undefined && !(key instanceof FDBKeyRange)) {\n      key = FDBKeyRange.only(valueToKey(key));\n    }\n    return this.transaction._execRequestAsync({\n      operation: () => {\n        return this._rawObjectStore.count(key);\n      },\n      source: this\n    });\n  }\n  toString() {\n    return \"[object IDBObjectStore]\";\n  }\n}\nexport default FDBObjectStore;","class Event {\n  eventPath = [];\n  NONE = 0;\n  CAPTURING_PHASE = 1;\n  AT_TARGET = 2;\n  BUBBLING_PHASE = 3;\n\n  // Flags\n  propagationStopped = false;\n  immediatePropagationStopped = false;\n  canceled = false;\n  initialized = true;\n  dispatched = false;\n  target = null;\n  currentTarget = null;\n  eventPhase = 0;\n  defaultPrevented = false;\n  isTrusted = false;\n  timeStamp = Date.now();\n  constructor(type, eventInitDict = {}) {\n    this.type = type;\n    this.bubbles = eventInitDict.bubbles !== undefined ? eventInitDict.bubbles : false;\n    this.cancelable = eventInitDict.cancelable !== undefined ? eventInitDict.cancelable : false;\n  }\n  preventDefault() {\n    if (this.cancelable) {\n      this.canceled = true;\n    }\n  }\n  stopPropagation() {\n    this.propagationStopped = true;\n  }\n  stopImmediatePropagation() {\n    this.propagationStopped = true;\n    this.immediatePropagationStopped = true;\n  }\n}\nexport default Event;","// When running within Node.js (including jsdom), we want to use setImmediate\n// (which runs immediately) rather than setTimeout (which enforces a minimum\n// delay of 1ms, and on Windows only has a resolution of 15ms or so).  jsdom\n// doesn't provide setImmediate (to better match the browser environment) and\n// sandboxes scripts, but its sandbox is by necessity imperfect, so we can break\n// out of it:\n//\n// - https://github.com/jsdom/jsdom#executing-scripts\n// - https://github.com/jsdom/jsdom/issues/2729\n// - https://github.com/scala-js/scala-js-macrotask-executor/pull/17\nfunction getSetImmediateFromJsdom() {\n  if (typeof navigator !== \"undefined\" && /jsdom/.test(navigator.userAgent)) {\n    const outerRealmFunctionConstructor = Node.constructor;\n    return new outerRealmFunctionConstructor(\"return setImmediate\")();\n  } else {\n    return undefined;\n  }\n}\n\n// Schedules a task to run later.  Use Node.js's setImmediate if available and\n// setTimeout otherwise.  Note that options like process.nextTick or\n// queueMicrotask will likely not work: IndexedDB semantics require that\n// transactions are marked as not active when the event loop runs. The next\n// tick queue and microtask queue run within the current event loop macrotask,\n// so they'd process database operations too quickly.\nexport const queueTask = fn => {\n  const setImmediate = globalThis.setImmediate || getSetImmediateFromJsdom() || (fn => setTimeout(fn, 0));\n  setImmediate(fn);\n};","import FDBObjectStore from \"./FDBObjectStore.js\";\nimport FDBRequest from \"./FDBRequest.js\";\nimport { AbortError, InvalidStateError, NotFoundError, TransactionInactiveError } from \"./lib/errors.js\";\nimport FakeDOMStringList from \"./lib/FakeDOMStringList.js\";\nimport FakeEvent from \"./lib/FakeEvent.js\";\nimport FakeEventTarget from \"./lib/FakeEventTarget.js\";\nimport { queueTask } from \"./lib/scheduling.js\";\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#transaction\nclass FDBTransaction extends FakeEventTarget {\n  _state = \"active\";\n  _started = false;\n  _rollbackLog = [];\n  _objectStoresCache = new Map();\n  error = null;\n  onabort = null;\n  oncomplete = null;\n  onerror = null;\n  _requests = [];\n  constructor(storeNames, mode, db) {\n    super();\n    this._scope = new Set(storeNames);\n    this.mode = mode;\n    this.db = db;\n    this.objectStoreNames = new FakeDOMStringList(...Array.from(this._scope).sort());\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-aborting-a-transaction\n  _abort(errName) {\n    for (const f of this._rollbackLog.reverse()) {\n      f();\n    }\n    if (errName !== null) {\n      const e = new DOMException(undefined, errName);\n      this.error = e;\n    }\n\n    // Should this directly remove from _requests?\n    for (const {\n      request\n    } of this._requests) {\n      if (request.readyState !== \"done\") {\n        request.readyState = \"done\"; // This will cancel execution of this request's operation\n        if (request.source) {\n          request.result = undefined;\n          request.error = new AbortError();\n          const event = new FakeEvent(\"error\", {\n            bubbles: true,\n            cancelable: true\n          });\n          event.eventPath = [this.db, this];\n          request.dispatchEvent(event);\n        }\n      }\n    }\n    queueTask(() => {\n      const event = new FakeEvent(\"abort\", {\n        bubbles: true,\n        cancelable: false\n      });\n      event.eventPath = [this.db];\n      this.dispatchEvent(event);\n    });\n    this._state = \"finished\";\n  }\n  abort() {\n    if (this._state === \"committing\" || this._state === \"finished\") {\n      throw new InvalidStateError();\n    }\n    this._state = \"active\";\n    this._abort(null);\n  }\n\n  // http://w3c.github.io/IndexedDB/#dom-idbtransaction-objectstore\n  objectStore(name) {\n    if (this._state !== \"active\") {\n      throw new InvalidStateError();\n    }\n    const objectStore = this._objectStoresCache.get(name);\n    if (objectStore !== undefined) {\n      return objectStore;\n    }\n    const rawObjectStore = this.db._rawDatabase.rawObjectStores.get(name);\n    if (!this._scope.has(name) || rawObjectStore === undefined) {\n      throw new NotFoundError();\n    }\n    const objectStore2 = new FDBObjectStore(this, rawObjectStore);\n    this._objectStoresCache.set(name, objectStore2);\n    return objectStore2;\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-asynchronously-executing-a-request\n  _execRequestAsync(obj) {\n    const source = obj.source;\n    const operation = obj.operation;\n    let request = Object.hasOwn(obj, \"request\") ? obj.request : null;\n    if (this._state !== \"active\") {\n      throw new TransactionInactiveError();\n    }\n\n    // Request should only be passed for cursors\n    if (!request) {\n      if (!source) {\n        // Special requests like indexes that just need to run some code\n        request = new FDBRequest();\n      } else {\n        request = new FDBRequest();\n        request.source = source;\n        request.transaction = source.transaction;\n      }\n    }\n    this._requests.push({\n      operation,\n      request\n    });\n    return request;\n  }\n  _start() {\n    this._started = true;\n\n    // Remove from request queue - cursor ones will be added back if necessary by cursor.continue and such\n    let operation;\n    let request;\n    while (this._requests.length > 0) {\n      const r = this._requests.shift();\n\n      // This should only be false if transaction was aborted\n      if (r && r.request.readyState !== \"done\") {\n        request = r.request;\n        operation = r.operation;\n        break;\n      }\n    }\n    if (request && operation) {\n      if (!request.source) {\n        // Special requests like indexes that just need to run some code, with error handling already built into\n        // operation\n        operation();\n      } else {\n        let defaultAction;\n        let event;\n        try {\n          const result = operation();\n          request.readyState = \"done\";\n          request.result = result;\n          request.error = undefined;\n\n          // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-fire-a-success-event\n          if (this._state === \"inactive\") {\n            this._state = \"active\";\n          }\n          event = new FakeEvent(\"success\", {\n            bubbles: false,\n            cancelable: false\n          });\n        } catch (err) {\n          request.readyState = \"done\";\n          request.result = undefined;\n          request.error = err;\n\n          // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-fire-an-error-event\n          if (this._state === \"inactive\") {\n            this._state = \"active\";\n          }\n          event = new FakeEvent(\"error\", {\n            bubbles: true,\n            cancelable: true\n          });\n          defaultAction = this._abort.bind(this, err.name);\n        }\n        try {\n          event.eventPath = [this.db, this];\n          request.dispatchEvent(event);\n        } catch (err) {\n          if (this._state !== \"committing\") {\n            this._abort(\"AbortError\");\n          }\n          throw err;\n        }\n\n        // Default action of event\n        if (!event.canceled) {\n          if (defaultAction) {\n            defaultAction();\n          }\n        }\n      }\n\n      // Give it another chance for new handlers to be set before finishing\n      queueTask(this._start.bind(this));\n      return;\n    }\n\n    // Check if transaction complete event needs to be fired\n    if (this._state !== \"finished\") {\n      // Either aborted or committed already\n      this._state = \"finished\";\n      if (!this.error) {\n        const event = new FakeEvent(\"complete\");\n        this.dispatchEvent(event);\n      }\n    }\n  }\n  commit() {\n    if (this._state !== \"active\") {\n      throw new InvalidStateError();\n    }\n    this._state = \"committing\";\n  }\n  toString() {\n    return \"[object IDBRequest]\";\n  }\n}\nexport default FDBTransaction;","import { ConstraintError } from \"./errors.js\";\nconst MAX_KEY = 9007199254740992;\nclass KeyGenerator {\n  // This is kind of wrong. Should start at 1 and increment only after record is saved\n  num = 0;\n  next() {\n    if (this.num >= MAX_KEY) {\n      throw new ConstraintError();\n    }\n    this.num += 1;\n    return this.num;\n  }\n\n  // https://w3c.github.io/IndexedDB/#possibly-update-the-key-generator\n  setIfLarger(num) {\n    const value = Math.floor(Math.min(num, MAX_KEY)) - 1;\n    if (value >= this.num) {\n      this.num = value + 1;\n    }\n  }\n}\nexport default KeyGenerator;","import { ConstraintError, DataError } from \"./errors.js\";\nimport extractKey from \"./extractKey.js\";\nimport KeyGenerator from \"./KeyGenerator.js\";\nimport RecordStore from \"./RecordStore.js\";\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-object-store\nclass ObjectStore {\n  deleted = false;\n  records = new RecordStore();\n  rawIndexes = new Map();\n  constructor(rawDatabase, name, keyPath, autoIncrement) {\n    this.rawDatabase = rawDatabase;\n    this.keyGenerator = autoIncrement === true ? new KeyGenerator() : null;\n    this.deleted = false;\n    this.name = name;\n    this.keyPath = keyPath;\n    this.autoIncrement = autoIncrement;\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-retrieving-a-value-from-an-object-store\n  getKey(key) {\n    const record = this.records.get(key);\n    return record !== undefined ? structuredClone(record.key) : undefined;\n  }\n\n  // http://w3c.github.io/IndexedDB/#retrieve-multiple-keys-from-an-object-store\n  getAllKeys(range, count) {\n    if (count === undefined || count === 0) {\n      count = Infinity;\n    }\n    const records = [];\n    for (const record of this.records.values(range)) {\n      records.push(structuredClone(record.key));\n      if (records.length >= count) {\n        break;\n      }\n    }\n    return records;\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-retrieving-a-value-from-an-object-store\n  getValue(key) {\n    const record = this.records.get(key);\n    return record !== undefined ? structuredClone(record.value) : undefined;\n  }\n\n  // http://w3c.github.io/IndexedDB/#retrieve-multiple-values-from-an-object-store\n  getAllValues(range, count) {\n    if (count === undefined || count === 0) {\n      count = Infinity;\n    }\n    const records = [];\n    for (const record of this.records.values(range)) {\n      records.push(structuredClone(record.value));\n      if (records.length >= count) {\n        break;\n      }\n    }\n    return records;\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-storing-a-record-into-an-object-store\n  storeRecord(newRecord, noOverwrite, rollbackLog) {\n    if (this.keyPath !== null) {\n      const key = extractKey(this.keyPath, newRecord.value).key;\n      if (key !== undefined) {\n        newRecord.key = key;\n      }\n    }\n    if (this.keyGenerator !== null && newRecord.key === undefined) {\n      if (rollbackLog) {\n        const keyGeneratorBefore = this.keyGenerator.num;\n        rollbackLog.push(() => {\n          if (this.keyGenerator) {\n            this.keyGenerator.num = keyGeneratorBefore;\n          }\n        });\n      }\n      newRecord.key = this.keyGenerator.next();\n\n      // Set in value if keyPath defiend but led to no key\n      // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-to-assign-a-key-to-a-value-using-a-key-path\n      if (this.keyPath !== null) {\n        if (Array.isArray(this.keyPath)) {\n          throw new Error(\"Cannot have an array key path in an object store with a key generator\");\n        }\n        let remainingKeyPath = this.keyPath;\n        let object = newRecord.value;\n        let identifier;\n        let i = 0; // Just to run the loop at least once\n        while (i >= 0) {\n          if (typeof object !== \"object\") {\n            throw new DataError();\n          }\n          i = remainingKeyPath.indexOf(\".\");\n          if (i >= 0) {\n            identifier = remainingKeyPath.slice(0, i);\n            remainingKeyPath = remainingKeyPath.slice(i + 1);\n            if (!Object.hasOwn(object, identifier)) {\n              object[identifier] = {};\n            }\n            object = object[identifier];\n          }\n        }\n        identifier = remainingKeyPath;\n        object[identifier] = newRecord.key;\n      }\n    } else if (this.keyGenerator !== null && typeof newRecord.key === \"number\") {\n      this.keyGenerator.setIfLarger(newRecord.key);\n    }\n    const existingRecord = this.records.get(newRecord.key);\n    if (existingRecord) {\n      if (noOverwrite) {\n        throw new ConstraintError();\n      }\n      this.deleteRecord(newRecord.key, rollbackLog);\n    }\n    this.records.add(newRecord);\n    if (rollbackLog) {\n      rollbackLog.push(() => {\n        this.deleteRecord(newRecord.key);\n      });\n    }\n\n    // Update indexes\n    for (const rawIndex of this.rawIndexes.values()) {\n      if (rawIndex.initialized) {\n        rawIndex.storeRecord(newRecord);\n      }\n    }\n    return newRecord.key;\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-deleting-records-from-an-object-store\n  deleteRecord(key, rollbackLog) {\n    const deletedRecords = this.records.delete(key);\n    if (rollbackLog) {\n      for (const record of deletedRecords) {\n        rollbackLog.push(() => {\n          this.storeRecord(record, true);\n        });\n      }\n    }\n    for (const rawIndex of this.rawIndexes.values()) {\n      rawIndex.records.deleteByValue(key);\n    }\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-clearing-an-object-store\n  clear(rollbackLog) {\n    const deletedRecords = this.records.clear();\n    if (rollbackLog) {\n      for (const record of deletedRecords) {\n        rollbackLog.push(() => {\n          this.storeRecord(record, true);\n        });\n      }\n    }\n    for (const rawIndex of this.rawIndexes.values()) {\n      rawIndex.records.clear();\n    }\n  }\n  count(range) {\n    let count = 0;\n\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    for (const record of this.records.values(range)) {\n      count += 1;\n    }\n    return count;\n  }\n}\nexport default ObjectStore;","import FDBTransaction from \"./FDBTransaction.js\";\nimport { ConstraintError, InvalidAccessError, InvalidStateError, NotFoundError, TransactionInactiveError } from \"./lib/errors.js\";\nimport FakeDOMStringList from \"./lib/FakeDOMStringList.js\";\nimport FakeEventTarget from \"./lib/FakeEventTarget.js\";\nimport ObjectStore from \"./lib/ObjectStore.js\";\nimport { queueTask } from \"./lib/scheduling.js\";\nimport validateKeyPath from \"./lib/validateKeyPath.js\";\nconst confirmActiveVersionchangeTransaction = database => {\n  if (!database._runningVersionchangeTransaction) {\n    throw new InvalidStateError();\n  }\n\n  // Find the latest versionchange transaction\n  const transactions = database._rawDatabase.transactions.filter(tx => {\n    return tx.mode === \"versionchange\";\n  });\n  const transaction = transactions[transactions.length - 1];\n  if (!transaction || transaction._state === \"finished\") {\n    throw new InvalidStateError();\n  }\n  if (transaction._state !== \"active\") {\n    throw new TransactionInactiveError();\n  }\n  return transaction;\n};\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#database-closing-steps\nconst closeConnection = connection => {\n  connection._closePending = true;\n  const transactionsComplete = connection._rawDatabase.transactions.every(transaction => {\n    return transaction._state === \"finished\";\n  });\n  if (transactionsComplete) {\n    connection._closed = true;\n    connection._rawDatabase.connections = connection._rawDatabase.connections.filter(otherConnection => {\n      return connection !== otherConnection;\n    });\n  } else {\n    queueTask(() => {\n      closeConnection(connection);\n    });\n  }\n};\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#database-interface\nclass FDBDatabase extends FakeEventTarget {\n  _closePending = false;\n  _closed = false;\n  _runningVersionchangeTransaction = false;\n  constructor(rawDatabase) {\n    super();\n    this._rawDatabase = rawDatabase;\n    this._rawDatabase.connections.push(this);\n    this.name = rawDatabase.name;\n    this.version = rawDatabase.version;\n    this.objectStoreNames = new FakeDOMStringList(...Array.from(rawDatabase.rawObjectStores.keys()).sort());\n  }\n\n  // http://w3c.github.io/IndexedDB/#dom-idbdatabase-createobjectstore\n  createObjectStore(name, options = {}) {\n    if (name === undefined) {\n      throw new TypeError();\n    }\n    const transaction = confirmActiveVersionchangeTransaction(this);\n    const keyPath = options !== null && options.keyPath !== undefined ? options.keyPath : null;\n    const autoIncrement = options !== null && options.autoIncrement !== undefined ? options.autoIncrement : false;\n    if (keyPath !== null) {\n      validateKeyPath(keyPath);\n    }\n    if (this._rawDatabase.rawObjectStores.has(name)) {\n      throw new ConstraintError();\n    }\n    if (autoIncrement && (keyPath === \"\" || Array.isArray(keyPath))) {\n      throw new InvalidAccessError();\n    }\n    const objectStoreNames = [...this.objectStoreNames];\n    transaction._rollbackLog.push(() => {\n      const objectStore = this._rawDatabase.rawObjectStores.get(name);\n      if (objectStore) {\n        objectStore.deleted = true;\n      }\n      this.objectStoreNames = new FakeDOMStringList(...objectStoreNames);\n      transaction._scope.delete(name);\n      this._rawDatabase.rawObjectStores.delete(name);\n    });\n    const rawObjectStore = new ObjectStore(this._rawDatabase, name, keyPath, autoIncrement);\n    this.objectStoreNames._push(name);\n    this.objectStoreNames._sort();\n    transaction._scope.add(name);\n    this._rawDatabase.rawObjectStores.set(name, rawObjectStore);\n    transaction.objectStoreNames = new FakeDOMStringList(...this.objectStoreNames);\n    return transaction.objectStore(name);\n  }\n  deleteObjectStore(name) {\n    if (name === undefined) {\n      throw new TypeError();\n    }\n    const transaction = confirmActiveVersionchangeTransaction(this);\n    const store = this._rawDatabase.rawObjectStores.get(name);\n    if (store === undefined) {\n      throw new NotFoundError();\n    }\n    this.objectStoreNames = new FakeDOMStringList(...Array.from(this.objectStoreNames).filter(objectStoreName => {\n      return objectStoreName !== name;\n    }));\n    transaction.objectStoreNames = new FakeDOMStringList(...this.objectStoreNames);\n    transaction._rollbackLog.push(() => {\n      store.deleted = false;\n      this._rawDatabase.rawObjectStores.set(name, store);\n      this.objectStoreNames._push(name);\n      this.objectStoreNames._sort();\n    });\n    store.deleted = true;\n    this._rawDatabase.rawObjectStores.delete(name);\n    transaction._objectStoresCache.delete(name);\n  }\n  transaction(storeNames, mode) {\n    mode = mode !== undefined ? mode : \"readonly\";\n    if (mode !== \"readonly\" && mode !== \"readwrite\" && mode !== \"versionchange\") {\n      throw new TypeError(\"Invalid mode: \" + mode);\n    }\n    const hasActiveVersionchange = this._rawDatabase.transactions.some(transaction => {\n      return transaction._state === \"active\" && transaction.mode === \"versionchange\" && transaction.db === this;\n    });\n    if (hasActiveVersionchange) {\n      throw new InvalidStateError();\n    }\n    if (this._closePending) {\n      throw new InvalidStateError();\n    }\n    if (!Array.isArray(storeNames)) {\n      storeNames = [storeNames];\n    }\n    if (storeNames.length === 0 && mode !== \"versionchange\") {\n      throw new InvalidAccessError();\n    }\n    for (const storeName of storeNames) {\n      if (!this.objectStoreNames.contains(storeName)) {\n        throw new NotFoundError(\"No objectStore named \" + storeName + \" in this database\");\n      }\n    }\n    const tx = new FDBTransaction(storeNames, mode, this);\n    this._rawDatabase.transactions.push(tx);\n    this._rawDatabase.processTransactions(); // See if can start right away (async)\n\n    return tx;\n  }\n  close() {\n    closeConnection(this);\n  }\n  toString() {\n    return \"[object IDBDatabase]\";\n  }\n}\nexport default FDBDatabase;","import FDBRequest from \"./FDBRequest.js\";\nclass FDBOpenDBRequest extends FDBRequest {\n  onupgradeneeded = null;\n  onblocked = null;\n  toString() {\n    return \"[object IDBOpenDBRequest]\";\n  }\n}\nexport default FDBOpenDBRequest;","import FakeEvent from \"./lib/FakeEvent.js\";\nclass FDBVersionChangeEvent extends FakeEvent {\n  constructor(type, parameters = {}) {\n    super(type);\n    this.newVersion = parameters.newVersion !== undefined ? parameters.newVersion : null;\n    this.oldVersion = parameters.oldVersion !== undefined ? parameters.oldVersion : 0;\n  }\n  toString() {\n    return \"[object IDBVersionChangeEvent]\";\n  }\n}\nexport default FDBVersionChangeEvent;","import { queueTask } from \"./scheduling.js\";\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-database\nclass Database {\n  deletePending = false;\n  transactions = [];\n  rawObjectStores = new Map();\n  connections = [];\n  constructor(name, version) {\n    this.name = name;\n    this.version = version;\n    this.processTransactions = this.processTransactions.bind(this);\n  }\n  processTransactions() {\n    queueTask(() => {\n      const anyRunning = this.transactions.some(transaction => {\n        return transaction._started && transaction._state !== \"finished\";\n      });\n      if (!anyRunning) {\n        const next = this.transactions.find(transaction => {\n          return !transaction._started && transaction._state !== \"finished\";\n        });\n        if (next) {\n          next.addEventListener(\"complete\", this.processTransactions);\n          next.addEventListener(\"abort\", this.processTransactions);\n          next._start();\n        }\n      }\n    });\n  }\n}\nexport default Database;","import FDBDatabase from \"./FDBDatabase.js\";\nimport FDBOpenDBRequest from \"./FDBOpenDBRequest.js\";\nimport FDBVersionChangeEvent from \"./FDBVersionChangeEvent.js\";\nimport cmp from \"./lib/cmp.js\";\nimport Database from \"./lib/Database.js\";\nimport enforceRange from \"./lib/enforceRange.js\";\nimport { AbortError, VersionError } from \"./lib/errors.js\";\nimport FakeEvent from \"./lib/FakeEvent.js\";\nimport { queueTask } from \"./lib/scheduling.js\";\nconst waitForOthersClosedDelete = (databases, name, openDatabases, cb) => {\n  const anyOpen = openDatabases.some(openDatabase2 => {\n    return !openDatabase2._closed && !openDatabase2._closePending;\n  });\n  if (anyOpen) {\n    queueTask(() => waitForOthersClosedDelete(databases, name, openDatabases, cb));\n    return;\n  }\n  databases.delete(name);\n  cb(null);\n};\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-deleting-a-database\nconst deleteDatabase = (databases, name, request, cb) => {\n  try {\n    const db = databases.get(name);\n    if (db === undefined) {\n      cb(null);\n      return;\n    }\n    db.deletePending = true;\n    const openDatabases = db.connections.filter(connection => {\n      return !connection._closed && !connection._closePending;\n    });\n    for (const openDatabase2 of openDatabases) {\n      if (!openDatabase2._closePending) {\n        const event = new FDBVersionChangeEvent(\"versionchange\", {\n          newVersion: null,\n          oldVersion: db.version\n        });\n        openDatabase2.dispatchEvent(event);\n      }\n    }\n    const anyOpen = openDatabases.some(openDatabase3 => {\n      return !openDatabase3._closed && !openDatabase3._closePending;\n    });\n    if (request && anyOpen) {\n      const event = new FDBVersionChangeEvent(\"blocked\", {\n        newVersion: null,\n        oldVersion: db.version\n      });\n      request.dispatchEvent(event);\n    }\n    waitForOthersClosedDelete(databases, name, openDatabases, cb);\n  } catch (err) {\n    cb(err);\n  }\n};\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-running-a-versionchange-transaction\nconst runVersionchangeTransaction = (connection, version, request, cb) => {\n  connection._runningVersionchangeTransaction = true;\n  const oldVersion = connection.version;\n  const openDatabases = connection._rawDatabase.connections.filter(otherDatabase => {\n    return connection !== otherDatabase;\n  });\n  for (const openDatabase2 of openDatabases) {\n    if (!openDatabase2._closed && !openDatabase2._closePending) {\n      const event = new FDBVersionChangeEvent(\"versionchange\", {\n        newVersion: version,\n        oldVersion\n      });\n      openDatabase2.dispatchEvent(event);\n    }\n  }\n  const anyOpen = openDatabases.some(openDatabase3 => {\n    return !openDatabase3._closed && !openDatabase3._closePending;\n  });\n  if (anyOpen) {\n    const event = new FDBVersionChangeEvent(\"blocked\", {\n      newVersion: version,\n      oldVersion\n    });\n    request.dispatchEvent(event);\n  }\n  const waitForOthersClosed = () => {\n    const anyOpen2 = openDatabases.some(openDatabase2 => {\n      return !openDatabase2._closed && !openDatabase2._closePending;\n    });\n    if (anyOpen2) {\n      queueTask(waitForOthersClosed);\n      return;\n    }\n\n    // Set the version of database to version. This change is considered part of the transaction, and so if the\n    // transaction is aborted, this change is reverted.\n    connection._rawDatabase.version = version;\n    connection.version = version;\n\n    // Get rid of this setImmediate?\n    const transaction = connection.transaction(connection.objectStoreNames, \"versionchange\");\n    request.result = connection;\n    request.readyState = \"done\";\n    request.transaction = transaction;\n    transaction._rollbackLog.push(() => {\n      connection._rawDatabase.version = oldVersion;\n      connection.version = oldVersion;\n    });\n    const event = new FDBVersionChangeEvent(\"upgradeneeded\", {\n      newVersion: version,\n      oldVersion\n    });\n    request.dispatchEvent(event);\n    transaction.addEventListener(\"error\", () => {\n      connection._runningVersionchangeTransaction = false;\n      // throw arguments[0].target.error;\n      // console.log(\"error in versionchange transaction - not sure if anything needs to be done here\", e.target.error.name);\n    });\n    transaction.addEventListener(\"abort\", () => {\n      connection._runningVersionchangeTransaction = false;\n      request.transaction = null;\n      queueTask(() => {\n        cb(new AbortError());\n      });\n    });\n    transaction.addEventListener(\"complete\", () => {\n      connection._runningVersionchangeTransaction = false;\n      request.transaction = null;\n      // Let other complete event handlers run before continuing\n      queueTask(() => {\n        if (connection._closePending) {\n          cb(new AbortError());\n        } else {\n          cb(null);\n        }\n      });\n    });\n  };\n  waitForOthersClosed();\n};\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-opening-a-database\nconst openDatabase = (databases, name, version, request, cb) => {\n  let db = databases.get(name);\n  if (db === undefined) {\n    db = new Database(name, 0);\n    databases.set(name, db);\n  }\n  if (version === undefined) {\n    version = db.version !== 0 ? db.version : 1;\n  }\n  if (db.version > version) {\n    return cb(new VersionError());\n  }\n  const connection = new FDBDatabase(db);\n  if (db.version < version) {\n    runVersionchangeTransaction(connection, version, request, err => {\n      if (err) {\n        // DO THIS HERE: ensure that connection is closed by running the steps for closing a database connection before these\n        // steps are aborted.\n        return cb(err);\n      }\n      cb(null, connection);\n    });\n  } else {\n    cb(null, connection);\n  }\n};\nclass FDBFactory {\n  cmp = cmp;\n  _databases = new Map();\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBFactory-deleteDatabase-IDBOpenDBRequest-DOMString-name\n  deleteDatabase(name) {\n    const request = new FDBOpenDBRequest();\n    request.source = null;\n    queueTask(() => {\n      const db = this._databases.get(name);\n      const oldVersion = db !== undefined ? db.version : 0;\n      deleteDatabase(this._databases, name, request, err => {\n        if (err) {\n          request.error = new DOMException(err.message, err.name);\n          request.readyState = \"done\";\n          const event = new FakeEvent(\"error\", {\n            bubbles: true,\n            cancelable: true\n          });\n          event.eventPath = [];\n          request.dispatchEvent(event);\n          return;\n        }\n        request.result = undefined;\n        request.readyState = \"done\";\n        const event2 = new FDBVersionChangeEvent(\"success\", {\n          newVersion: null,\n          oldVersion\n        });\n        request.dispatchEvent(event2);\n      });\n    });\n    return request;\n  }\n\n  // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBFactory-open-IDBOpenDBRequest-DOMString-name-unsigned-long-long-version\n  open(name, version) {\n    if (arguments.length > 1 && version !== undefined) {\n      // Based on spec, not sure why \"MAX_SAFE_INTEGER\" instead of \"unsigned long long\", but it's needed to pass\n      // tests\n      version = enforceRange(version, \"MAX_SAFE_INTEGER\");\n    }\n    if (version === 0) {\n      throw new TypeError(\"Database version cannot be 0\");\n    }\n    const request = new FDBOpenDBRequest();\n    request.source = null;\n    queueTask(() => {\n      openDatabase(this._databases, name, version, request, (err, connection) => {\n        if (err) {\n          request.result = undefined;\n          request.readyState = \"done\";\n          request.error = new DOMException(err.message, err.name);\n          const event = new FakeEvent(\"error\", {\n            bubbles: true,\n            cancelable: true\n          });\n          event.eventPath = [];\n          request.dispatchEvent(event);\n          return;\n        }\n        request.result = connection;\n        request.readyState = \"done\";\n        const event2 = new FakeEvent(\"success\");\n        event2.eventPath = [];\n        request.dispatchEvent(event2);\n      });\n    });\n    return request;\n  }\n\n  // https://w3c.github.io/IndexedDB/#dom-idbfactory-databases\n  databases() {\n    return new Promise(resolve => {\n      const result = [];\n      for (const [name, database] of this._databases) {\n        result.push({\n          name,\n          version: database.version\n        });\n      }\n      resolve(result);\n    });\n  }\n  toString() {\n    return \"[object IDBFactory]\";\n  }\n}\nexport default FDBFactory;","import FDBFactory from \"./FDBFactory.js\";\nconst fakeIndexedDB = new FDBFactory();\nexport default fakeIndexedDB;","import fakeIndexedDB from \"../build/esm/fakeIndexedDB.js\";\nimport FDBCursor from \"../build/esm/FDBCursor.js\";\nimport FDBCursorWithValue from \"../build/esm/FDBCursorWithValue.js\";\nimport FDBDatabase from \"../build/esm/FDBDatabase.js\";\nimport FDBFactory from \"../build/esm/FDBFactory.js\";\nimport FDBIndex from \"../build/esm/FDBIndex.js\";\nimport FDBKeyRange from \"../build/esm/FDBKeyRange.js\";\nimport FDBObjectStore from \"../build/esm/FDBObjectStore.js\";\nimport FDBOpenDBRequest from \"../build/esm/FDBOpenDBRequest.js\";\nimport FDBRequest from \"../build/esm/FDBRequest.js\";\nimport FDBTransaction from \"../build/esm/FDBTransaction.js\";\nimport FDBVersionChangeEvent from \"../build/esm/FDBVersionChangeEvent.js\";\n\n// http://stackoverflow.com/a/33268326/786644 - works in browser, worker, and Node.js\nvar globalVar =\n    typeof window !== \"undefined\"\n        ? window\n        : typeof WorkerGlobalScope !== \"undefined\"\n        ? self\n        : typeof global !== \"undefined\"\n        ? global\n        : Function(\"return this;\")();\n\nglobalVar.indexedDB = fakeIndexedDB;\nglobalVar.IDBCursor = FDBCursor;\nglobalVar.IDBCursorWithValue = FDBCursorWithValue;\nglobalVar.IDBDatabase = FDBDatabase;\nglobalVar.IDBFactory = FDBFactory;\nglobalVar.IDBIndex = FDBIndex;\nglobalVar.IDBKeyRange = FDBKeyRange;\nglobalVar.IDBObjectStore = FDBObjectStore;\nglobalVar.IDBOpenDBRequest = FDBOpenDBRequest;\nglobalVar.IDBRequest = FDBRequest;\nglobalVar.IDBTransaction = FDBTransaction;\nglobalVar.IDBVersionChangeEvent = FDBVersionChangeEvent;\n","/**\n * Testing utilities for @firesystem/indexeddb\n * \n * This module provides helpers for testing with IndexedDBFileSystem\n * in Node.js environments where IndexedDB is not available.\n */\n\n// Check if we're in a Node.js environment and load polyfill\nif (typeof globalThis.indexedDB === \"undefined\") {\n  try {\n    // Use require for synchronous loading\n    require(\"fake-indexeddb/auto\");\n  } catch (error) {\n    // Try dynamic import as fallback\n    import(\"fake-indexeddb/auto\").catch(() => {\n      console.warn(\n        \"⚠️  IndexedDB not found. To test @firesystem/indexeddb in Node.js, install fake-indexeddb:\\n\" +\n        \"    npm install --save-dev fake-indexeddb\"\n      );\n    });\n  }\n}\n\nexport { IndexedDBFileSystem } from \"./IndexedDBFileSystem\";\nexport * from \"./types\";","import type {\n  FileEntry,\n  FileStat,\n  FileMetadata,\n  FSEvent,\n  Disposable,\n  FileSystemEventPayloads,\n  IFileSystemCapabilities,\n} from \"@firesystem/core\";\nimport {\n  normalizePath,\n  dirname,\n  basename,\n  join,\n  TypedEventEmitter,\n  FileSystemEvents,\n  BaseFileSystem,\n} from \"@firesystem/core\";\nimport type { IndexedDBConfig } from \"./types\";\n\ninterface StoredFile {\n  path: string;\n  type: \"file\" | \"directory\";\n  content?: any;\n  size: number;\n  created: Date;\n  modified: Date;\n  metadata?: FileMetadata;\n  parent: string;\n}\n\ninterface WatchListener {\n  id: string;\n  pattern: string;\n  callback: (event: FSEvent) => void;\n}\n\ninterface FileSnapshot {\n  path: string;\n  type: \"file\" | \"directory\";\n  modified: Date;\n  size: number;\n  contentHash?: string;\n  metadataHash?: string;\n}\n\nexport class IndexedDBFileSystem extends BaseFileSystem {\n  private db: IDBDatabase | null = null;\n  private config: Required<Omit<IndexedDBConfig, \"enableExternalSync\" | \"deepChangeDetection\">> & { \n    enableExternalSync: boolean;\n    deepChangeDetection: boolean;\n  };\n  private watchers: WatchListener[] = [];\n  private isInitialized = false;\n  public readonly events = new TypedEventEmitter<FileSystemEventPayloads>();\n  private broadcastChannel: BroadcastChannel | null = null;\n  private fileSnapshots: Map<string, FileSnapshot> = new Map();\n  private pollingInterval: NodeJS.Timeout | null = null;\n  private enableExternalSync = true;\n  private deepChangeDetection = false;\n\n  // Capabilities do IndexedDB\n  readonly capabilities: IFileSystemCapabilities = {\n    readonly: false,\n    caseSensitive: true,\n    atomicRename: false, // IndexedDB não tem rename atômico verdadeiro\n    supportsWatch: true,\n    supportsMetadata: true,\n    maxFileSize: undefined, // Depende do browser e quota\n    maxPathLength: 1024\n  };\n\n  constructor(config: IndexedDBConfig) {\n    super();\n    this.config = {\n      dbName: config.dbName,\n      version: config.version || 1,\n      storeName: config.storeName || \"files\",\n      enableExternalSync: config.enableExternalSync ?? true,\n      deepChangeDetection: config.deepChangeDetection ?? false,\n    };\n    this.enableExternalSync = config.enableExternalSync ?? true;\n    this.deepChangeDetection = config.deepChangeDetection ?? false;\n    \n    if (this.enableExternalSync && typeof BroadcastChannel !== \"undefined\") {\n      this.setupBroadcastChannel();\n    }\n  }\n\n  private async ensureDB(): Promise<IDBDatabase> {\n    if (this.db && this.db.name === this.config.dbName) {\n      return this.db;\n    }\n\n    return new Promise((resolve, reject) => {\n      const request = indexedDB.open(this.config.dbName, this.config.version);\n\n      request.onerror = () => {\n        reject(new Error(`Failed to open IndexedDB: ${request.error}`));\n      };\n\n      request.onsuccess = async () => {\n        this.db = request.result;\n        this.isInitialized = true;\n\n        // Handle connection close\n        this.db.onclose = () => {\n          this.db = null;\n          this.isInitialized = false;\n        };\n\n        // Ensure root exists\n        await this.ensureRootExists();\n\n        resolve(this.db);\n      };\n\n      request.onupgradeneeded = (event) => {\n        const db = (event.target as IDBOpenDBRequest).result;\n\n        // Create object store if it doesn't exist\n        if (!db.objectStoreNames.contains(this.config.storeName)) {\n          const store = db.createObjectStore(this.config.storeName, {\n            keyPath: \"path\",\n          });\n\n          // Create indexes for efficient queries\n          store.createIndex(\"type\", \"type\", { unique: false });\n          store.createIndex(\"parent\", \"parent\", { unique: false });\n          store.createIndex(\"modified\", \"modified\", { unique: false });\n\n          // Add root directory\n          const now = new Date();\n          store.add({\n            path: \"/\",\n            type: \"directory\",\n            size: 0,\n            created: now,\n            modified: now,\n            parent: \"\",\n          });\n        }\n      };\n    });\n  }\n\n  async initialize(): Promise<void> {\n    const startTime = Date.now();\n    this.events.emit(FileSystemEvents.INITIALIZING, undefined as any);\n\n    try {\n      // Ensure database connection\n      const db = await this.ensureDB();\n\n      // Load ALL files from database\n      const allFiles = await this.loadAllFiles();\n      const fileCount = allFiles.length;\n\n      // Emit progress for each file loaded\n      for (let i = 0; i < allFiles.length; i++) {\n        const file = allFiles[i];\n\n        // Emit individual file events\n        if (file.type === \"file\") {\n          this.events.emit(FileSystemEvents.FILE_READ, {\n            path: file.path,\n            size: file.size,\n          });\n        } else {\n          this.events.emit(FileSystemEvents.DIR_READ, {\n            path: file.path,\n            count: 0, // We'll count children later if needed\n          });\n        }\n\n        // Emit progress\n        this.events.emit(FileSystemEvents.INIT_PROGRESS, {\n          loaded: i + 1,\n          total: fileCount,\n          phase: \"loading-files\",\n        });\n      }\n\n      this.events.emit(FileSystemEvents.INITIALIZED, {\n        duration: Date.now() - startTime,\n      });\n    } catch (error) {\n      this.events.emit(FileSystemEvents.INIT_ERROR, {\n        error: error as Error,\n      });\n      throw error;\n    }\n  }\n\n  private async loadAllFiles(): Promise<StoredFile[]> {\n    const db = await this.ensureDB();\n    return new Promise((resolve, reject) => {\n      const transaction = db.transaction([this.config.storeName], \"readonly\");\n      const store = transaction.objectStore(this.config.storeName);\n      const request = store.getAll();\n\n      request.onsuccess = () => {\n        const files = request.result as StoredFile[];\n        // Exclude root directory from the list\n        const userFiles = files.filter((f) => f.path !== \"/\");\n        resolve(userFiles);\n      };\n\n      request.onerror = () => {\n        reject(new Error(`Failed to load files: ${request.error}`));\n      };\n    });\n  }\n\n  async readFile(path: string): Promise<FileEntry> {\n    const normalized = normalizePath(path);\n    const db = await this.ensureDB();\n\n    return new Promise((resolve, reject) => {\n      const transaction = db.transaction([this.config.storeName], \"readonly\");\n      const store = transaction.objectStore(this.config.storeName);\n      const request = store.get(normalized);\n\n      request.onsuccess = () => {\n        const file = request.result as StoredFile;\n        if (!file) {\n          reject(\n            new Error(`ENOENT: no such file or directory, open '${path}'`),\n          );\n          return;\n        }\n        if (file.type === \"directory\") {\n          reject(\n            new Error(\n              `EISDIR: illegal operation on a directory, read '${path}'`,\n            ),\n          );\n          return;\n        }\n        resolve({\n          path: file.path,\n          name: basename(file.path),\n          type: file.type,\n          size: file.size,\n          created: file.created,\n          modified: file.modified,\n          metadata: file.metadata,\n          content: file.content,\n        });\n      };\n\n      request.onerror = () => {\n        reject(new Error(`Failed to read file: ${request.error}`));\n      };\n    });\n  }\n\n  async writeFile(\n    path: string,\n    content: any,\n    metadata?: FileMetadata,\n  ): Promise<FileEntry> {\n    const normalized = normalizePath(path);\n    const db = await this.ensureDB();\n\n    // Ensure parent directory exists\n    await this.ensureParentExists(normalized);\n\n    const now = new Date();\n    const size = this.calculateSize(content);\n\n    return new Promise((resolve, reject) => {\n      const transaction = db.transaction([this.config.storeName], \"readwrite\");\n      const store = transaction.objectStore(this.config.storeName);\n\n      // Check if file exists to preserve created date\n      const getRequest = store.get(normalized);\n\n      getRequest.onsuccess = () => {\n        const existing = getRequest.result as StoredFile | undefined;\n        const isUpdate = !!existing;\n\n        const storedFile: StoredFile = {\n          path: normalized,\n          type: \"file\",\n          content,\n          size,\n          created: existing?.created || now,\n          modified: now,\n          metadata,\n          parent: dirname(normalized),\n        } as StoredFile;\n\n        const putRequest = store.put(storedFile);\n\n        putRequest.onsuccess = () => {\n          const entry: FileEntry = {\n            path: normalized,\n            name: basename(normalized),\n            type: \"file\",\n            size,\n            created: storedFile.created,\n            modified: storedFile.modified,\n            metadata,\n            content,\n          };\n\n          // Notify watchers\n          const event = {\n            type: isUpdate ? \"updated\" : \"created\" as \"updated\" | \"created\",\n            path: normalized,\n            timestamp: now,\n          };\n          this.notifyWatchers(event);\n          \n          // Broadcast to other tabs/windows\n          this.broadcastChange({\n            ...event,\n            size,\n            isDirectory: false,\n            fileType: \"file\" as const,\n          });\n\n          resolve(entry);\n        };\n\n        putRequest.onerror = () => {\n          reject(new Error(`Failed to write file: ${putRequest.error}`));\n        };\n      };\n\n      getRequest.onerror = () => {\n        reject(new Error(`Failed to check existing file: ${getRequest.error}`));\n      };\n    });\n  }\n\n  async deleteFile(path: string): Promise<void> {\n    const normalized = normalizePath(path);\n    const db = await this.ensureDB();\n\n    // First check if it exists and get type\n    const file = await this.stat(normalized).catch(() => null);\n    if (!file) {\n      throw new Error(`ENOENT: no such file or directory, unlink '${path}'`);\n    }\n\n    return new Promise((resolve, reject) => {\n      const transaction = db.transaction([this.config.storeName], \"readwrite\");\n      const store = transaction.objectStore(this.config.storeName);\n\n      if (file.type === \"directory\") {\n        // Check if directory is empty\n        const index = store.index(\"parent\");\n        const request = index.count(normalized);\n\n        request.onsuccess = () => {\n          if (request.result > 0) {\n            reject(\n              new Error(`ENOTEMPTY: directory not empty, rmdir '${path}'`),\n            );\n            return;\n          }\n\n          // Directory is empty, delete it\n          const deleteRequest = store.delete(normalized);\n\n          deleteRequest.onsuccess = () => {\n            const event = {\n              type: \"deleted\" as const,\n              path: normalized,\n              timestamp: new Date(),\n            };\n            this.notifyWatchers(event);\n            this.broadcastChange(event);\n            resolve();\n          };\n\n          deleteRequest.onerror = () => {\n            reject(\n              new Error(`Failed to delete directory: ${deleteRequest.error}`),\n            );\n          };\n        };\n\n        request.onerror = () => {\n          reject(\n            new Error(`Failed to check directory contents: ${request.error}`),\n          );\n        };\n      } else {\n        // It's a file, delete directly\n        const request = store.delete(normalized);\n\n        request.onsuccess = () => {\n          const event = {\n            type: \"deleted\" as const,\n            path: normalized,\n            timestamp: new Date(),\n          };\n          this.notifyWatchers(event);\n          this.broadcastChange(event);\n          resolve();\n        };\n\n        request.onerror = () => {\n          reject(new Error(`Failed to delete file: ${request.error}`));\n        };\n      }\n    });\n  }\n\n  async exists(path: string): Promise<boolean> {\n    const normalized = normalizePath(path);\n    const db = await this.ensureDB();\n\n    return new Promise((resolve, reject) => {\n      const transaction = db.transaction([this.config.storeName], \"readonly\");\n      const store = transaction.objectStore(this.config.storeName);\n      const request = store.count(normalized);\n\n      request.onsuccess = () => {\n        resolve(request.result > 0);\n      };\n\n      request.onerror = () => {\n        reject(new Error(`Failed to check existence: ${request.error}`));\n      };\n    });\n  }\n\n  async readDir(path: string): Promise<FileEntry[]> {\n    const normalized = normalizePath(path);\n    const db = await this.ensureDB();\n\n    // First check if directory exists\n    if (normalized !== \"/\" && !(await this.exists(normalized))) {\n      throw new Error(`ENOENT: no such file or directory, scandir '${path}'`);\n    }\n\n    return new Promise((resolve, reject) => {\n      const transaction = db.transaction([this.config.storeName], \"readonly\");\n      const store = transaction.objectStore(this.config.storeName);\n      const index = store.index(\"parent\");\n      const request = index.getAll(normalized);\n\n      request.onsuccess = () => {\n        const files = request.result as StoredFile[];\n        const entries = files.map((file) => ({\n          path: file.path,\n          name: basename(file.path),\n          type: file.type,\n          size: file.size,\n          created: file.created,\n          modified: file.modified,\n          metadata: file.metadata,\n        }));\n\n        resolve(entries);\n      };\n\n      request.onerror = () => {\n        reject(new Error(`Failed to read directory: ${request.error}`));\n      };\n    });\n  }\n\n  async mkdir(path: string, recursive: boolean = false): Promise<FileEntry> {\n    const normalized = normalizePath(path);\n\n    if (normalized === \"/\") {\n      throw new Error(`EEXIST: file already exists, mkdir '${path}'`);\n    }\n\n    const db = await this.ensureDB();\n\n    // Check if already exists\n    if (await this.exists(normalized)) {\n      throw new Error(`EEXIST: file already exists, mkdir '${path}'`);\n    }\n\n    // Ensure parent exists if not recursive\n    const parent = dirname(normalized);\n    if (!recursive && parent !== \"/\" && !(await this.exists(parent))) {\n      throw new Error(`ENOENT: no such file or directory, mkdir '${path}'`);\n    }\n\n    // Create parent directories if recursive\n    if (recursive && parent !== \"/\" && !(await this.exists(parent))) {\n      await this.mkdir(parent, true);\n    }\n\n    const now = new Date();\n\n    return new Promise((resolve, reject) => {\n      const transaction = db.transaction([this.config.storeName], \"readwrite\");\n      const store = transaction.objectStore(this.config.storeName);\n\n      const storedFile: StoredFile = {\n        path: normalized,\n        type: \"directory\",\n        size: 0,\n        created: now,\n        modified: now,\n        parent: dirname(normalized),\n      } as StoredFile;\n\n      const request = store.add(storedFile);\n\n      request.onsuccess = () => {\n        const entry: FileEntry = {\n          path: normalized,\n          name: basename(normalized),\n          type: \"directory\",\n          size: 0,\n          created: now,\n          modified: now,\n        };\n\n        const event = {\n          type: \"created\" as const,\n          path: normalized,\n          timestamp: now,\n        };\n        this.notifyWatchers(event);\n        this.broadcastChange({\n          ...event,\n          isDirectory: true,\n          fileType: \"directory\" as const,\n        });\n\n        resolve(entry);\n      };\n\n      request.onerror = () => {\n        reject(new Error(`Failed to create directory: ${request.error}`));\n      };\n    });\n  }\n\n  async rmdir(path: string, recursive: boolean = false): Promise<void> {\n    const normalized = normalizePath(path);\n\n    if (normalized === \"/\") {\n      throw new Error(`EBUSY: resource busy or locked, rmdir '${path}'`);\n    }\n\n    const db = await this.ensureDB();\n\n    // Check if directory exists\n    const stat = await this.stat(normalized).catch(() => null);\n    if (!stat) {\n      throw new Error(`ENOENT: no such file or directory, rmdir '${path}'`);\n    }\n    if (stat.type !== \"directory\") {\n      throw new Error(`ENOTDIR: not a directory, rmdir '${path}'`);\n    }\n\n    if (recursive) {\n      // Delete all contents recursively\n      await this.deleteRecursive(normalized);\n    } else {\n      // Check if empty\n      const contents = await this.readDir(normalized);\n      if (contents.length > 0) {\n        throw new Error(`ENOTEMPTY: directory not empty, rmdir '${path}'`);\n      }\n    }\n\n    // Delete the directory itself\n    await this.deleteFile(normalized);\n  }\n\n  async rename(oldPath: string, newPath: string): Promise<FileEntry> {\n    const oldNormalized = normalizePath(oldPath);\n    const newNormalized = normalizePath(newPath);\n    const db = await this.ensureDB();\n\n    // Get the file/directory\n    const oldStat = await this.stat(oldNormalized);\n\n    // Ensure new parent exists\n    await this.ensureParentExists(newNormalized);\n\n    // Check if new path already exists\n    if (await this.exists(newNormalized)) {\n      throw new Error(\n        `EEXIST: file already exists, rename '${oldPath}' -> '${newPath}'`,\n      );\n    }\n\n    const now = new Date();\n\n    return new Promise((resolve, reject) => {\n      const transaction = db.transaction([this.config.storeName], \"readwrite\");\n      const store = transaction.objectStore(this.config.storeName);\n\n      // If it's a directory, we need to update all children\n      if (oldStat.type === \"directory\") {\n        // Get all descendants\n        const request = store.openCursor();\n        const updates: StoredFile[] = [];\n\n        request.onsuccess = (event) => {\n          const cursor = (event.target as IDBRequest).result;\n\n          if (cursor) {\n            const file = cursor.value as StoredFile;\n\n            // Check if this file is under the old path\n            if (\n              file.path.startsWith(oldNormalized + \"/\") ||\n              file.path === oldNormalized\n            ) {\n              const newFilePath = file.path.replace(\n                oldNormalized,\n                newNormalized,\n              );\n              updates.push({\n                ...file,\n                path: newFilePath,\n                parent: dirname(newFilePath),\n                modified: file.path === oldNormalized ? now : file.modified,\n              });\n            }\n\n            cursor.continue();\n          } else {\n            // All files collected, now update them\n            let completed = 0;\n            const total = updates.length;\n\n            if (total === 0) {\n              reject(new Error(`Directory not found: ${oldPath}`));\n              return;\n            }\n\n            updates.forEach((file) => {\n              // Delete old entry\n              store.delete(file.path.replace(newNormalized, oldNormalized));\n\n              // Add new entry\n              const addRequest = store.add(file);\n\n              addRequest.onsuccess = () => {\n                completed++;\n                if (completed === total) {\n                  const entry = updates.find((f) => f.path === newNormalized)!;\n\n                  const event = {\n                    type: \"renamed\" as const,\n                    path: newNormalized,\n                    oldPath: oldNormalized,\n                    timestamp: now,\n                  };\n                  this.notifyWatchers(event);\n                  this.broadcastChange(event);\n\n                  resolve({\n                    path: entry.path,\n                    name: basename(entry.path),\n                    type: entry.type,\n                    size: entry.size,\n                    created: entry.created,\n                    modified: entry.modified,\n                    metadata: entry.metadata,\n                  });\n                }\n              };\n\n              addRequest.onerror = () => {\n                reject(\n                  new Error(`Failed to rename directory: ${addRequest.error}`),\n                );\n              };\n            });\n          }\n        };\n\n        request.onerror = () => {\n          reject(new Error(`Failed to read files: ${request.error}`));\n        };\n      } else {\n        // It's a file, simpler case\n        const getRequest = store.get(oldNormalized);\n\n        getRequest.onsuccess = () => {\n          const file = getRequest.result as StoredFile;\n          if (!file) {\n            reject(new Error(`File not found: ${oldPath}`));\n            return;\n          }\n\n          // Delete old entry\n          store.delete(oldNormalized);\n\n          // Create new entry\n          const newFile: StoredFile = {\n            ...file,\n            path: newNormalized,\n            parent: dirname(newNormalized),\n            modified: now,\n          };\n\n          const addRequest = store.add(newFile);\n\n          addRequest.onsuccess = () => {\n            const entry: FileEntry = {\n              path: newNormalized,\n              name: basename(newNormalized),\n              type: file.type,\n              size: file.size,\n              created: file.created,\n              modified: now,\n              metadata: file.metadata,\n              content: file.content,\n            };\n\n            const event = {\n              type: \"renamed\" as const,\n              path: newNormalized,\n              oldPath: oldNormalized,\n              timestamp: now,\n            };\n            this.notifyWatchers(event);\n            this.broadcastChange(event);\n\n            resolve(entry);\n          };\n\n          addRequest.onerror = () => {\n            reject(new Error(`Failed to rename file: ${addRequest.error}`));\n          };\n        };\n\n        getRequest.onerror = () => {\n          reject(new Error(`Failed to read file: ${getRequest.error}`));\n        };\n      }\n    });\n  }\n\n  async move(sourcePaths: string[], targetPath: string): Promise<void> {\n    const targetNormalized = normalizePath(targetPath);\n\n    // Ensure target is a directory\n    const targetStat = await this.stat(targetNormalized).catch(() => null);\n    if (!targetStat || targetStat.type !== \"directory\") {\n      throw new Error(`ENOTDIR: not a directory, move to '${targetPath}'`);\n    }\n\n    for (const sourcePath of sourcePaths) {\n      const name = basename(sourcePath);\n      const newPath = join(targetNormalized, name);\n      await this.rename(sourcePath, newPath);\n    }\n  }\n\n  async copy(sourcePath: string, targetPath: string): Promise<FileEntry> {\n    const sourceNormalized = normalizePath(sourcePath);\n    const targetNormalized = normalizePath(targetPath);\n\n    // Read source file\n    const source = await this.readFile(sourceNormalized);\n\n    // Write to target\n    return this.writeFile(targetNormalized, source.content, source.metadata);\n  }\n\n  watch(pattern: string, callback: (event: FSEvent) => void): Disposable {\n    const id = this.generateWatcherId();\n    const listener: WatchListener = { id, pattern, callback };\n\n    this.watchers.push(listener);\n\n    return {\n      dispose: () => {\n        const index = this.watchers.findIndex((w) => w.id === id);\n        if (index !== -1) {\n          this.watchers.splice(index, 1);\n        }\n      },\n    };\n  }\n\n  async stat(path: string): Promise<FileStat> {\n    const normalized = normalizePath(path);\n    const db = await this.ensureDB();\n\n    return new Promise((resolve, reject) => {\n      const transaction = db.transaction([this.config.storeName], \"readonly\");\n      const store = transaction.objectStore(this.config.storeName);\n      const request = store.get(normalized);\n\n      request.onsuccess = () => {\n        const file = request.result as StoredFile;\n        if (!file) {\n          reject(\n            new Error(`ENOENT: no such file or directory, stat '${path}'`),\n          );\n          return;\n        }\n\n        resolve({\n          path: file.path,\n          size: file.size,\n          type: file.type,\n          created: file.created,\n          modified: file.modified,\n          readonly: false, // Sempre false em IndexedDB\n        });\n      };\n\n      request.onerror = () => {\n        reject(new Error(`Failed to stat file: ${request.error}`));\n      };\n    });\n  }\n\n  async glob(pattern: string): Promise<string[]> {\n    const db = await this.ensureDB();\n\n    return new Promise((resolve, reject) => {\n      const transaction = db.transaction([this.config.storeName], \"readonly\");\n      const store = transaction.objectStore(this.config.storeName);\n      const request = store.getAll();\n\n      request.onsuccess = () => {\n        const files = request.result as StoredFile[];\n        const paths = files\n          .map((file) => file.path)\n          .filter((path) => this.matchesPattern(path, pattern))\n          .sort();\n\n        resolve(paths);\n      };\n\n      request.onerror = () => {\n        reject(new Error(`Failed to glob: ${request.error}`));\n      };\n    });\n  }\n\n  async clear(): Promise<void> {\n    const startTime = Date.now();\n    const operationId = `clear-${startTime}`;\n\n    this.events.emit(FileSystemEvents.OPERATION_START, {\n      operation: \"clear\",\n      id: operationId,\n    });\n    this.events.emit(FileSystemEvents.STORAGE_CLEARING, undefined as any);\n\n    try {\n      const db = await this.ensureDB();\n\n      await new Promise<void>((resolve, reject) => {\n        const transaction = db.transaction(\n          [this.config.storeName],\n          \"readwrite\",\n        );\n        const store = transaction.objectStore(this.config.storeName);\n        const request = store.clear();\n\n        request.onsuccess = () => {\n          // Always ensure root directory exists after clear\n          const rootTransaction = db.transaction(\n            [this.config.storeName],\n            \"readwrite\",\n          );\n          const rootStore = rootTransaction.objectStore(this.config.storeName);\n          const now = new Date();\n\n          const rootDir: StoredFile = {\n            path: \"/\",\n            type: \"directory\",\n            size: 0,\n            created: now,\n            modified: now,\n            parent: \"\",\n          };\n\n          const rootRequest = rootStore.add(rootDir);\n          rootRequest.onsuccess = () => resolve();\n          rootRequest.onerror = () =>\n            reject(new Error(`Failed to recreate root: ${rootRequest.error}`));\n        };\n\n        request.onerror = () => {\n          reject(new Error(`Failed to clear store: ${request.error}`));\n        };\n      });\n\n      const duration = Date.now() - startTime;\n      this.events.emit(FileSystemEvents.STORAGE_CLEARED, { duration });\n      this.events.emit(FileSystemEvents.OPERATION_END, {\n        operation: \"clear\",\n        id: operationId,\n        duration,\n      });\n    } catch (error) {\n      this.events.emit(FileSystemEvents.OPERATION_ERROR, {\n        operation: \"clear\",\n        error: error as Error,\n      });\n      throw error;\n    }\n  }\n\n  async size(): Promise<number> {\n    const startTime = Date.now();\n    const operationId = `size-${startTime}`;\n\n    this.events.emit(FileSystemEvents.OPERATION_START, {\n      operation: \"size\",\n      id: operationId,\n    });\n\n    try {\n      const db = await this.ensureDB();\n\n      const totalSize = await new Promise<number>((resolve, reject) => {\n        const transaction = db.transaction([this.config.storeName], \"readonly\");\n        const store = transaction.objectStore(this.config.storeName);\n        const request = store.getAll();\n\n        request.onsuccess = () => {\n          const files = request.result as StoredFile[];\n          const size = files.reduce((sum, file) => sum + file.size, 0);\n          resolve(size);\n        };\n\n        request.onerror = () => {\n          reject(new Error(`Failed to calculate size: ${request.error}`));\n        };\n      });\n\n      this.events.emit(FileSystemEvents.STORAGE_SIZE_CALCULATED, {\n        size: totalSize,\n      });\n      this.events.emit(FileSystemEvents.OPERATION_END, {\n        operation: \"size\",\n        id: operationId,\n        duration: Date.now() - startTime,\n      });\n\n      return totalSize;\n    } catch (error) {\n      this.events.emit(FileSystemEvents.OPERATION_ERROR, {\n        operation: \"size\",\n        error: error as Error,\n      });\n      throw error;\n    }\n  }\n\n  // Helper methods\n\n  private async calculateHash(data: any): Promise<string> {\n    // Simple hash for content comparison\n    const str = typeof data === 'string' ? data : JSON.stringify(data);\n    let hash = 0;\n    for (let i = 0; i < str.length; i++) {\n      const char = str.charCodeAt(i);\n      hash = ((hash << 5) - hash) + char;\n      hash = hash & hash; // Convert to 32-bit integer\n    }\n    return hash.toString(36);\n  }\n\n  private calculateSize(content: any): number {\n    if (content === null || content === undefined) {\n      return 0;\n    }\n    if (typeof content === \"string\") {\n      return new Blob([content]).size;\n    }\n    if (content instanceof ArrayBuffer) {\n      return content.byteLength;\n    }\n    if (content instanceof Blob) {\n      return content.size;\n    }\n    if (typeof content === \"object\") {\n      return new Blob([JSON.stringify(content)]).size;\n    }\n    return 0;\n  }\n\n  private async ensureParentExists(path: string): Promise<void> {\n    const parent = dirname(path);\n    if (parent === \"/\" || parent === path) return;\n\n    if (!(await this.exists(parent))) {\n      throw new Error(`ENOENT: no such file or directory, open '${path}'`);\n    }\n  }\n\n  private async deleteRecursive(path: string): Promise<void> {\n    const entries = await this.readDir(path);\n\n    for (const entry of entries) {\n      if (entry.type === \"directory\") {\n        await this.deleteRecursive(entry.path);\n      }\n      await this.deleteFile(entry.path);\n    }\n  }\n\n  private matchesPattern(path: string, pattern: string): boolean {\n    // Handle simple cases\n    if (pattern === \"**\" || pattern === \"**/*\") {\n      return true;\n    }\n\n    if (pattern === \"*\") {\n      // * should only match files in root directory\n      return path.split(\"/\").length === 2 && path !== \"/\";\n    }\n\n    // Convert glob pattern to regex\n    let regex = pattern\n      // Escape special regex characters except glob ones\n      .replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\")\n      // Handle ** (matches any number of directories)\n      .replace(/\\*\\*/g, \"___GLOBSTAR___\")\n      // Handle * (matches any characters except /)\n      .replace(/\\*/g, \"[^/]*\")\n      // Handle ? (matches single character except /)\n      .replace(/\\?/g, \"[^/]\")\n      // Restore ** handling\n      .replace(/___GLOBSTAR___\\//g, \"(.*/)?\")\n      .replace(/\\/___GLOBSTAR___/g, \"(/.*)?\")\n      .replace(/___GLOBSTAR___/g, \".*\");\n\n    // Anchor the pattern\n    regex = \"^\" + regex + \"$\";\n\n    return new RegExp(regex).test(path);\n  }\n\n  private notifyWatchers(event: FSEvent): void {\n    for (const watcher of this.watchers) {\n      if (this.matchesPattern(event.path, watcher.pattern)) {\n        try {\n          watcher.callback(event);\n        } catch (error) {\n          console.error(\n            `Error in watch callback for pattern \"${watcher.pattern}\":`,\n            error,\n          );\n        }\n      }\n    }\n  }\n\n  private generateWatcherId(): string {\n    return `watch_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n  }\n\n  private async ensureRootExists(): Promise<void> {\n    if (!this.db) return;\n\n    const transaction = this.db.transaction(\n      [this.config.storeName],\n      \"readonly\",\n    );\n    const store = transaction.objectStore(this.config.storeName);\n    const request = store.get(\"/\");\n\n    return new Promise((resolve) => {\n      request.onsuccess = async () => {\n        if (!request.result) {\n          // Root doesn't exist, create it\n          const writeTransaction = this.db!.transaction(\n            [this.config.storeName],\n            \"readwrite\",\n          );\n          const writeStore = writeTransaction.objectStore(\n            this.config.storeName,\n          );\n          const now = new Date();\n\n          await new Promise<void>((res, rej) => {\n            const addRequest = writeStore.add({\n              path: \"/\",\n              type: \"directory\",\n              size: 0,\n              created: now,\n              modified: now,\n              parent: \"\",\n            });\n\n            addRequest.onsuccess = () => res();\n            addRequest.onerror = () =>\n              rej(new Error(\"Failed to create root directory\"));\n          });\n        }\n        resolve();\n      };\n\n      request.onerror = () => resolve(); // Ignore errors, we'll try next time\n    });\n  }\n\n  private setupBroadcastChannel(): void {\n    this.broadcastChannel = new BroadcastChannel(`vfs-${this.config.dbName}`);\n    \n    this.broadcastChannel.onmessage = (event) => {\n      const { type, path, oldPath, timestamp } = event.data;\n      \n      // Notify local watchers about external changes\n      this.notifyWatchers({\n        type,\n        path,\n        oldPath,\n        timestamp: new Date(timestamp),\n      });\n      \n      // Emit events for external changes\n      switch (type) {\n        case \"created\":\n          if (event.data.isDirectory) {\n            this.events.emit(FileSystemEvents.DIR_CREATED, { path });\n          } else {\n            this.events.emit(FileSystemEvents.FILE_WRITTEN, { \n              path, \n              size: event.data.size || 0 \n            });\n          }\n          break;\n        case \"updated\":\n          this.events.emit(FileSystemEvents.FILE_WRITTEN, { \n            path, \n            size: event.data.size || 0 \n          });\n          break;\n        case \"deleted\":\n          this.events.emit(FileSystemEvents.FILE_DELETED, { path });\n          break;\n        case \"renamed\":\n          // Emit as both deleted and created since there's no FILE_RENAMED event\n          if (oldPath) {\n            this.events.emit(FileSystemEvents.FILE_DELETED, { path: oldPath });\n          }\n          this.events.emit(FileSystemEvents.FILE_WRITTEN, { \n            path, \n            size: event.data.size || 0 \n          });\n          break;\n      }\n    };\n  }\n\n  private broadcastChange(event: FSEvent & { size?: number; isDirectory?: boolean; fileType?: \"file\" | \"directory\" }): void {\n    if (this.broadcastChannel) {\n      this.broadcastChannel.postMessage({\n        ...event,\n        timestamp: event.timestamp.toISOString(),\n      });\n    }\n  }\n\n  async startWatching(pollingIntervalMs: number = 250): Promise<void> {\n    if (!this.enableExternalSync) return;\n    \n    // Take initial snapshot\n    await this.updateFileSnapshots();\n    \n    // Start polling for changes\n    this.pollingInterval = setInterval(async () => {\n      await this.checkForExternalChanges();\n    }, pollingIntervalMs);\n  }\n\n  async stopWatching(): Promise<void> {\n    if (this.pollingInterval) {\n      clearInterval(this.pollingInterval);\n      this.pollingInterval = null;\n    }\n  }\n\n  private async updateFileSnapshots(): Promise<void> {\n    const db = await this.ensureDB();\n    \n    return new Promise((resolve, reject) => {\n      const transaction = db.transaction([this.config.storeName], \"readonly\");\n      const store = transaction.objectStore(this.config.storeName);\n      const request = store.getAll();\n      \n      request.onsuccess = async () => {\n        const files = request.result as StoredFile[];\n        this.fileSnapshots.clear();\n        \n        for (const file of files) {\n          // Include both files and directories in snapshots\n          if (file.path !== \"/\") { // Skip root directory\n            const snapshot: FileSnapshot = {\n              path: file.path,\n              type: file.type,\n              modified: file.modified,\n              size: file.size,\n            };\n            \n            // Calculate content hash if deep detection is enabled\n            if (this.deepChangeDetection && file.type === \"file\") {\n              snapshot.contentHash = await this.calculateHash(file.content);\n              if (file.metadata) {\n                snapshot.metadataHash = await this.calculateHash(file.metadata);\n              }\n            }\n            \n            this.fileSnapshots.set(file.path, snapshot);\n          }\n        }\n        \n        resolve();\n      };\n      \n      request.onerror = () => {\n        reject(new Error(`Failed to update snapshots: ${request.error}`));\n      };\n    });\n  }\n\n  private async checkForExternalChanges(): Promise<void> {\n    const db = await this.ensureDB();\n    const currentFiles = new Map<string, FileSnapshot>();\n    const filesToDeepCheck: string[] = [];\n    \n    return new Promise((resolve) => {\n      const transaction = db.transaction([this.config.storeName], \"readonly\");\n      const store = transaction.objectStore(this.config.storeName);\n      const request = store.getAll();\n      \n      request.onsuccess = async () => {\n        const files = request.result as StoredFile[];\n        \n        // Build current state map - include both files and directories\n        files.forEach(file => {\n          if (file.path !== \"/\") { // Skip root directory\n            currentFiles.set(file.path, {\n              path: file.path,\n              type: file.type,\n              modified: file.modified,\n              size: file.size,\n            });\n          }\n        });\n        \n        // Phase 1: Quick check (date/size)\n        currentFiles.forEach((current, path) => {\n          const snapshot = this.fileSnapshots.get(path);\n          \n          if (!snapshot) {\n            // New file or directory\n            this.notifyWatchers({\n              type: \"created\",\n              path,\n              timestamp: new Date(),\n            });\n            \n            // Also emit proper events\n            if (current.type === \"directory\") {\n              this.events.emit(FileSystemEvents.DIR_CREATED, { path });\n            } else {\n              this.events.emit(FileSystemEvents.FILE_WRITTEN, { path, size: current.size });\n            }\n          } else if (\n            current.modified.getTime() !== snapshot.modified.getTime() ||\n            current.size !== snapshot.size\n          ) {\n            // Modified file - detected by date/size\n            this.notifyWatchers({\n              type: \"updated\",\n              path,\n              timestamp: new Date(),\n            });\n            \n            if (current.type === \"file\") {\n              this.events.emit(FileSystemEvents.FILE_WRITTEN, { path, size: current.size });\n            }\n          } else if (this.deepChangeDetection && current.type === \"file\") {\n            // Mark for deep check\n            filesToDeepCheck.push(path);\n          }\n        });\n        \n        // Check for deleted files/directories\n        this.fileSnapshots.forEach((snapshot, path) => {\n          if (!currentFiles.has(path)) {\n            this.notifyWatchers({\n              type: \"deleted\",\n              path,\n              timestamp: new Date(),\n            });\n            \n            // Also emit proper events\n            if (snapshot.type === \"directory\") {\n              this.events.emit(FileSystemEvents.DIR_DELETED, { path });\n            } else {\n              this.events.emit(FileSystemEvents.FILE_DELETED, { path });\n            }\n          }\n        });\n        \n        // Phase 2: Deep check (content) - only if enabled and needed\n        if (filesToDeepCheck.length > 0) {\n          await this.performDeepContentCheck(filesToDeepCheck, files);\n        }\n        \n        // Update snapshots with content hashes if deep check is enabled\n        if (this.deepChangeDetection) {\n          for (const file of files) {\n            if (file.type === \"file\" && file.path !== \"/\") {\n              const snapshot = currentFiles.get(file.path);\n              if (snapshot) {\n                snapshot.contentHash = await this.calculateHash(file.content);\n                if (file.metadata) {\n                  snapshot.metadataHash = await this.calculateHash(file.metadata);\n                }\n              }\n            }\n          }\n        }\n        \n        // Update snapshots\n        this.fileSnapshots = currentFiles;\n        resolve();\n      };\n      \n      request.onerror = () => resolve();\n    });\n  }\n  \n  private async performDeepContentCheck(paths: string[], allFiles: StoredFile[]): Promise<void> {\n    for (const path of paths) {\n      const file = allFiles.find(f => f.path === path);\n      const snapshot = this.fileSnapshots.get(path);\n      \n      if (file && snapshot) {\n        const currentContentHash = await this.calculateHash(file.content);\n        const currentMetadataHash = file.metadata ? await this.calculateHash(file.metadata) : undefined;\n        \n        const contentChanged = snapshot.contentHash && snapshot.contentHash !== currentContentHash;\n        const metadataChanged = snapshot.metadataHash && currentMetadataHash && snapshot.metadataHash !== currentMetadataHash;\n        \n        if (contentChanged || metadataChanged) {\n          // Content or metadata changed even though date/size didn't\n          this.notifyWatchers({\n            type: \"updated\",\n            path,\n            timestamp: new Date(),\n          });\n          \n          this.events.emit(FileSystemEvents.FILE_WRITTEN, { \n            path, \n            size: file.size \n          });\n        }\n      }\n    }\n  }\n\n  dispose(): void {\n    this.stopWatching();\n    \n    if (this.broadcastChannel) {\n      this.broadcastChannel.close();\n      this.broadcastChannel = null;\n    }\n    \n    if (this.db) {\n      this.db.close();\n      this.db = null;\n    }\n    \n    this.watchers = [];\n    this.fileSnapshots.clear();\n  }\n\n  // Sobrescrever métodos de permissão (sempre permitido em IndexedDB)\n  async canModify(path: string): Promise<boolean> {\n    return true; // Sempre permitido em IndexedDB\n  }\n\n  async canCreateIn(parentPath: string): Promise<boolean> {\n    try {\n      const stat = await this.stat(parentPath);\n      return stat.type === \"directory\";\n    } catch {\n      // Se não existe, verifica se é o root\n      return normalizePath(parentPath) === \"/\";\n    }\n  }\n\n  // Não sobrescrever writeFileAtomic - usar implementação base\n  // IndexedDB não tem rename verdadeiramente atômico\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,sGAAAA,UAAA;AAAA;AAEA,WAAO,eAAeA,UAAS,cAAc;AAAA,MAC3C,OAAO;AAAA,IACT,CAAC;AACD,IAAAA,SAAQ,eAAeA,SAAQ,2BAA2BA,SAAQ,gBAAgBA,SAAQ,gBAAgBA,SAAQ,oBAAoBA,SAAQ,qBAAqBA,SAAQ,YAAYA,SAAQ,iBAAiBA,SAAQ,kBAAkBA,SAAQ,aAAa;AAC/P,QAAMC,YAAW;AAAA,MACf,YAAY;AAAA,MACZ,iBAAiB;AAAA,MACjB,gBAAgB;AAAA,MAChB,WAAW;AAAA,MACX,oBAAoB;AAAA,MACpB,mBAAmB;AAAA,MACnB,eAAe;AAAA,MACf,eAAe;AAAA,MACf,0BAA0B;AAAA,MAC1B,cAAc;AAAA,IAChB;AACA,QAAMC,cAAN,cAAyB,aAAa;AAAA,MACpC,YAAY,UAAUD,UAAS,YAAY;AACzC,cAAM,SAAS,YAAY;AAAA,MAC7B;AAAA,IACF;AACA,IAAAD,SAAQ,aAAaE;AACrB,QAAMC,mBAAN,cAA8B,aAAa;AAAA,MACzC,YAAY,UAAUF,UAAS,iBAAiB;AAC9C,cAAM,SAAS,iBAAiB;AAAA,MAClC;AAAA,IACF;AACA,IAAAD,SAAQ,kBAAkBG;AAC1B,QAAM,iBAAN,cAA6B,aAAa;AAAA,MACxC,YAAY,UAAUF,UAAS,gBAAgB;AAC7C,cAAM,SAAS,gBAAgB;AAAA,MACjC;AAAA,IACF;AACA,IAAAD,SAAQ,iBAAiB;AACzB,QAAMI,aAAN,cAAwB,aAAa;AAAA,MACnC,YAAY,UAAUH,UAAS,WAAW;AACxC,cAAM,SAAS,WAAW;AAAA,MAC5B;AAAA,IACF;AACA,IAAAD,SAAQ,YAAYI;AACpB,QAAMC,sBAAN,cAAiC,aAAa;AAAA,MAC5C,YAAY,UAAUJ,UAAS,oBAAoB;AACjD,cAAM,SAAS,oBAAoB;AAAA,MACrC;AAAA,IACF;AACA,IAAAD,SAAQ,qBAAqBK;AAC7B,QAAMC,qBAAN,cAAgC,aAAa;AAAA,MAC3C,YAAY,UAAUL,UAAS,mBAAmB;AAChD,cAAM,SAAS,mBAAmB;AAAA,MACpC;AAAA,IACF;AACA,IAAAD,SAAQ,oBAAoBM;AAC5B,QAAMC,iBAAN,cAA4B,aAAa;AAAA,MACvC,YAAY,UAAUN,UAAS,eAAe;AAC5C,cAAM,SAAS,eAAe;AAAA,MAChC;AAAA,IACF;AACA,IAAAD,SAAQ,gBAAgBO;AACxB,QAAMC,iBAAN,cAA4B,aAAa;AAAA,MACvC,YAAY,UAAUP,UAAS,eAAe;AAC5C,cAAM,SAAS,eAAe;AAAA,MAChC;AAAA,IACF;AACA,IAAAD,SAAQ,gBAAgBQ;AACxB,QAAMC,4BAAN,cAAuC,aAAa;AAAA,MAClD,YAAY,UAAUR,UAAS,0BAA0B;AACvD,cAAM,SAAS,0BAA0B;AAAA,MAC3C;AAAA,IACF;AACA,IAAAD,SAAQ,2BAA2BS;AACnC,QAAMC,gBAAN,cAA2B,aAAa;AAAA,MACtC,YAAY,UAAUT,UAAS,cAAc;AAC3C,cAAM,SAAS,cAAc;AAAA,MAC/B;AAAA,IACF;AACA,IAAAD,SAAQ,eAAeU;AAAA;AAAA;;;AC7EvB;AAAA,0GAAAC,UAAAC,SAAA;AAAA;AAEA,WAAO,eAAeD,UAAS,cAAc;AAAA,MAC3C,OAAO;AAAA,IACT,CAAC;AACD,IAAAA,SAAQ,UAAU;AAClB,QAAI,UAAU;AAEd,QAAME,cAAa,CAAC,OAAO,SAAS;AAClC,UAAI,OAAO,UAAU,UAAU;AAC7B,YAAI,MAAM,KAAK,GAAG;AAChB,gBAAM,IAAI,QAAQ,UAAU;AAAA,QAC9B;AACA,eAAO;AAAA,MACT,WAAW,OAAO,UAAU,SAAS,KAAK,KAAK,MAAM,iBAAiB;AACpE,cAAM,KAAK,MAAM,QAAQ;AACzB,YAAI,MAAM,EAAE,GAAG;AACb,gBAAM,IAAI,QAAQ,UAAU;AAAA,QAC9B;AACA,eAAO,IAAI,KAAK,EAAE;AAAA,MACpB,WAAW,OAAO,UAAU,UAAU;AACpC,eAAO;AAAA,MACT,WAAW,iBAAiB,eAAe,OAAO,sBAAsB,eAAe,iBAAiB,qBAAqB,OAAO,gBAAgB,eAAe,YAAY,UAAU,YAAY,OAAO,KAAK,GAAG;AAClN,YAAI;AACJ,YAAI,SAAS;AACb,YAAI,SAAS;AACb,YAAI,iBAAiB,eAAe,OAAO,sBAAsB,eAAe,iBAAiB,mBAAmB;AAClH,wBAAc;AACd,mBAAS,MAAM;AAAA,QACjB,OAAO;AACL,wBAAc,MAAM;AACpB,mBAAS,MAAM;AACf,mBAAS,MAAM;AAAA,QACjB;AACA,YAAI,YAAY,UAAU;AACxB,iBAAO,IAAI,YAAY,CAAC;AAAA,QAC1B;AACA,eAAO,YAAY,MAAM,QAAQ,SAAS,MAAM;AAAA,MAClD,WAAW,MAAM,QAAQ,KAAK,GAAG;AAC/B,YAAI,SAAS,QAAW;AACtB,iBAAO,oBAAI,IAAI;AAAA,QACjB,WAAW,KAAK,IAAI,KAAK,GAAG;AAC1B,gBAAM,IAAI,QAAQ,UAAU;AAAA,QAC9B;AACA,aAAK,IAAI,KAAK;AACd,cAAM,OAAO,CAAC;AACd,iBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,gBAAM,MAAM,OAAO,OAAO,OAAO,CAAC;AAClC,cAAI,CAAC,KAAK;AACR,kBAAM,IAAI,QAAQ,UAAU;AAAA,UAC9B;AACA,gBAAM,QAAQ,MAAM,CAAC;AACrB,gBAAM,MAAMA,YAAW,OAAO,IAAI;AAClC,eAAK,KAAK,GAAG;AAAA,QACf;AACA,eAAO;AAAA,MACT,OAAO;AACL,cAAM,IAAI,QAAQ,UAAU;AAAA,MAC9B;AAAA,IACF;AACA,QAAI,WAAWF,SAAQ,UAAUE;AACjC,IAAAD,QAAO,UAAUD,SAAQ;AAAA;AAAA;;;AC7DzB;AAAA,mGAAAG,UAAAC,SAAA;AAAA;AAEA,WAAO,eAAeD,UAAS,cAAc;AAAA,MAC3C,OAAO;AAAA,IACT,CAAC;AACD,IAAAA,SAAQ,UAAU;AAClB,QAAI,UAAU;AACd,QAAI,cAAc,uBAAuB,oBAA0B;AACnE,aAAS,uBAAuB,GAAG;AAAE,aAAO,KAAK,EAAE,aAAa,IAAI,EAAE,SAAS,EAAE;AAAA,IAAG;AACpF,QAAME,WAAU,OAAK;AACnB,UAAI,OAAO,MAAM,UAAU;AACzB,eAAO;AAAA,MACT;AACA,UAAI,OAAO,UAAU,SAAS,KAAK,CAAC,MAAM,iBAAiB;AACzD,eAAO;AAAA,MACT;AACA,UAAI,MAAM,QAAQ,CAAC,GAAG;AACpB,eAAO;AAAA,MACT;AACA,UAAI,OAAO,MAAM,UAAU;AACzB,eAAO;AAAA,MACT;AACA,UAAI,aAAa,aAAa;AAC5B,eAAO;AAAA,MACT;AACA,YAAM,IAAI,QAAQ,UAAU;AAAA,IAC9B;AAGA,QAAMC,OAAM,CAAC,OAAO,WAAW;AAC7B,UAAI,WAAW,QAAW;AACxB,cAAM,IAAI,UAAU;AAAA,MACtB;AACA,eAAS,GAAG,YAAY,SAAS,KAAK;AACtC,gBAAU,GAAG,YAAY,SAAS,MAAM;AACxC,YAAM,KAAKD,SAAQ,KAAK;AACxB,YAAM,KAAKA,SAAQ,MAAM;AACzB,UAAI,OAAO,IAAI;AACb,YAAI,OAAO,SAAS;AAClB,iBAAO;AAAA,QACT;AACA,YAAI,OAAO,aAAa,OAAO,YAAY,OAAO,UAAU,OAAO,WAAW;AAC5E,iBAAO;AAAA,QACT;AACA,YAAI,OAAO,aAAa,OAAO,UAAU,OAAO,WAAW;AACzD,iBAAO;AAAA,QACT;AACA,YAAI,OAAO,UAAU,OAAO,UAAU;AACpC,iBAAO;AAAA,QACT;AACA,eAAO;AAAA,MACT;AACA,UAAI,OAAO,UAAU;AACnB,gBAAQ,IAAI,WAAW,KAAK;AAC5B,iBAAS,IAAI,WAAW,MAAM;AAAA,MAChC;AACA,UAAI,OAAO,WAAW,OAAO,UAAU;AACrC,cAAM,SAAS,KAAK,IAAI,MAAM,QAAQ,OAAO,MAAM;AACnD,iBAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,gBAAM,SAASC,KAAI,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC;AACtC,cAAI,WAAW,GAAG;AAChB,mBAAO;AAAA,UACT;AAAA,QACF;AACA,YAAI,MAAM,SAAS,OAAO,QAAQ;AAChC,iBAAO;AAAA,QACT;AACA,YAAI,MAAM,SAAS,OAAO,QAAQ;AAChC,iBAAO;AAAA,QACT;AACA,eAAO;AAAA,MACT;AACA,UAAI,OAAO,QAAQ;AACjB,YAAI,MAAM,QAAQ,MAAM,OAAO,QAAQ,GAAG;AACxC,iBAAO;AAAA,QACT;AAAA,MACF,OAAO;AACL,YAAI,UAAU,QAAQ;AACpB,iBAAO;AAAA,QACT;AAAA,MACF;AACA,aAAO,QAAQ,SAAS,IAAI;AAAA,IAC9B;AACA,QAAI,WAAWH,SAAQ,UAAUG;AACjC,IAAAF,QAAO,UAAUD,SAAQ;AAAA;AAAA;;;ACpFzB;AAAA,uGAAAI,UAAAC,SAAA;AAAA;AAEA,WAAO,eAAeD,UAAS,cAAc;AAAA,MAC3C,OAAO;AAAA,IACT,CAAC;AACD,IAAAA,SAAQ,UAAU;AAClB,QAAI,OAAO,uBAAuB,aAAuB;AACzD,QAAI,UAAU;AACd,QAAI,cAAc,uBAAuB,oBAA8B;AACvE,aAAS,uBAAuB,GAAG;AAAE,aAAO,KAAK,EAAE,aAAa,IAAI,EAAE,SAAS,EAAE;AAAA,IAAG;AAEpF,QAAME,eAAN,MAAM,aAAY;AAAA,MAChB,OAAO,KAAK,OAAO;AACjB,YAAI,UAAU,WAAW,GAAG;AAC1B,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,iBAAS,GAAG,YAAY,SAAS,KAAK;AACtC,eAAO,IAAI,aAAY,OAAO,OAAO,OAAO,KAAK;AAAA,MACnD;AAAA,MACA,OAAO,WAAW,OAAO,OAAO,OAAO;AACrC,YAAI,UAAU,WAAW,GAAG;AAC1B,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,iBAAS,GAAG,YAAY,SAAS,KAAK;AACtC,eAAO,IAAI,aAAY,OAAO,QAAW,MAAM,IAAI;AAAA,MACrD;AAAA,MACA,OAAO,WAAW,OAAO,OAAO,OAAO;AACrC,YAAI,UAAU,WAAW,GAAG;AAC1B,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,iBAAS,GAAG,YAAY,SAAS,KAAK;AACtC,eAAO,IAAI,aAAY,QAAW,OAAO,MAAM,IAAI;AAAA,MACrD;AAAA,MACA,OAAO,MAAM,OAAO,OAAO,YAAY,OAAO,YAAY,OAAO;AAC/D,YAAI,UAAU,SAAS,GAAG;AACxB,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,cAAM,aAAa,GAAG,KAAK,SAAS,OAAO,KAAK;AAChD,YAAI,cAAc,KAAK,cAAc,MAAM,aAAa,YAAY;AAClE,gBAAM,IAAI,QAAQ,UAAU;AAAA,QAC9B;AACA,iBAAS,GAAG,YAAY,SAAS,KAAK;AACtC,iBAAS,GAAG,YAAY,SAAS,KAAK;AACtC,eAAO,IAAI,aAAY,OAAO,OAAO,WAAW,SAAS;AAAA,MAC3D;AAAA,MACA,YAAY,OAAO,OAAO,WAAW,WAAW;AAC9C,aAAK,QAAQ;AACb,aAAK,QAAQ;AACb,aAAK,YAAY;AACjB,aAAK,YAAY;AAAA,MACnB;AAAA;AAAA,MAGA,SAAS,KAAK;AACZ,YAAI,UAAU,WAAW,GAAG;AAC1B,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,eAAO,GAAG,YAAY,SAAS,GAAG;AAClC,YAAI,KAAK,UAAU,QAAW;AAC5B,gBAAM,aAAa,GAAG,KAAK,SAAS,KAAK,OAAO,GAAG;AACnD,cAAI,cAAc,KAAK,cAAc,KAAK,KAAK,WAAW;AACxD,mBAAO;AAAA,UACT;AAAA,QACF;AACA,YAAI,KAAK,UAAU,QAAW;AAC5B,gBAAM,aAAa,GAAG,KAAK,SAAS,KAAK,OAAO,GAAG;AACnD,cAAI,cAAc,MAAM,cAAc,KAAK,KAAK,WAAW;AACzD,mBAAO;AAAA,UACT;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,MACA,WAAW;AACT,eAAO;AAAA,MACT;AAAA,IACF;AACA,QAAI,WAAWF,SAAQ,UAAUE;AACjC,IAAAD,QAAO,UAAUD,SAAQ;AAAA;AAAA;;;AC7EzB;AAAA,0GAAAG,UAAAC,SAAA;AAAA;AAEA,WAAO,eAAeD,UAAS,cAAc;AAAA,MAC3C,OAAO;AAAA,IACT,CAAC;AACD,IAAAA,SAAQ,UAAU;AAClB,QAAI,cAAc,uBAAuB,oBAA0B;AACnE,aAAS,uBAAuB,GAAG;AAAE,aAAO,KAAK,EAAE,aAAa,IAAI,EAAE,SAAS,EAAE;AAAA,IAAG;AAEpF,QAAME,cAAa,CAAC,SAAS,UAAU;AACrC,UAAI,MAAM,QAAQ,OAAO,GAAG;AAC1B,cAAM,SAAS,CAAC;AAChB,iBAAS,QAAQ,SAAS;AAGxB,cAAI,SAAS,UAAa,SAAS,QAAQ,OAAO,SAAS,YAAY,KAAK,UAAU;AACpF,mBAAO,KAAK,SAAS;AAAA,UACvB;AACA,gBAAM,MAAMA,YAAW,MAAM,KAAK,EAAE;AACpC,iBAAO,MAAM,GAAG,YAAY,SAAS,GAAG,CAAC;AAAA,QAC3C;AACA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,KAAK;AAAA,QACP;AAAA,MACF;AACA,UAAI,YAAY,IAAI;AAClB,eAAO;AAAA,UACL,MAAM;AAAA,UACN,KAAK;AAAA,QACP;AAAA,MACF;AACA,UAAI,mBAAmB;AACvB,UAAI,SAAS;AACb,aAAO,qBAAqB,MAAM;AAChC,YAAI;AACJ,cAAM,IAAI,iBAAiB,QAAQ,GAAG;AACtC,YAAI,KAAK,GAAG;AACV,uBAAa,iBAAiB,MAAM,GAAG,CAAC;AACxC,6BAAmB,iBAAiB,MAAM,IAAI,CAAC;AAAA,QACjD,OAAO;AACL,uBAAa;AACb,6BAAmB;AAAA,QACrB;AACA,YAAI,WAAW,UAAa,WAAW,QAAQ,CAAC,OAAO,OAAO,QAAQ,UAAU,GAAG;AACjF,iBAAO;AAAA,YACL,MAAM;AAAA,UACR;AAAA,QACF;AACA,iBAAS,OAAO,UAAU;AAAA,MAC5B;AACA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,KAAK;AAAA,MACP;AAAA,IACF;AACA,QAAI,WAAWF,SAAQ,UAAUE;AACjC,IAAAD,QAAO,UAAUD,SAAQ;AAAA;AAAA;;;ACzDzB;AAAA,qGAAAG,UAAAC,SAAA;AAAA;AAEA,WAAO,eAAeD,UAAS,cAAc;AAAA,MAC3C,OAAO;AAAA,IACT,CAAC;AACD,IAAAA,SAAQ,UAAU;AAClB,QAAI,eAAe,uBAAuB,qBAA2B;AACrE,QAAI,kBAAkB,uBAAuB,wBAA8B;AAC3E,QAAI,OAAO,uBAAuB,aAAuB;AACzD,QAAI,UAAU;AACd,QAAI,cAAc,uBAAuB,oBAA8B;AACvE,QAAI,cAAc,uBAAuB,oBAA8B;AACvE,aAAS,uBAAuB,GAAG;AAAE,aAAO,KAAK,EAAE,aAAa,IAAI,EAAE,SAAS,EAAE;AAAA,IAAG;AACpF,QAAME,2BAA0B,YAAU;AACxC,UAAI,OAAO,kBAAkB,gBAAgB,SAAS;AACpD,eAAO,OAAO;AAAA,MAChB;AACA,aAAO,OAAO,OAAO;AAAA,IACvB;AAMA,QAAMC,gBAAe,CAAC,OAAO,QAAQ,WAAW;AAE9C,UAAI,QAAQ,UAAU,SAAY,MAAM,QAAQ;AAChD,UAAI,QAAQ,UAAU,SAAY,MAAM,QAAQ;AAGhD,iBAAW,aAAa,QAAQ;AAC9B,YAAI,cAAc,QAAW;AAC3B;AAAA,QACF;AACA,YAAI,UAAU,WAAc,GAAG,KAAK,SAAS,OAAO,SAAS,MAAM,GAAG;AACpE,kBAAQ;AAAA,QACV;AAAA,MACF;AACA,iBAAW,aAAa,QAAQ;AAC9B,YAAI,cAAc,QAAW;AAC3B;AAAA,QACF;AACA,YAAI,UAAU,WAAc,GAAG,KAAK,SAAS,OAAO,SAAS,MAAM,IAAI;AACrE,kBAAQ;AAAA,QACV;AAAA,MACF;AACA,UAAI,UAAU,UAAa,UAAU,QAAW;AAC9C,eAAO,aAAa,QAAQ,MAAM,OAAO,KAAK;AAAA,MAChD;AACA,UAAI,UAAU,QAAW;AACvB,eAAO,aAAa,QAAQ,WAAW,KAAK;AAAA,MAC9C;AACA,UAAI,UAAU,QAAW;AACvB,eAAO,aAAa,QAAQ,WAAW,KAAK;AAAA,MAC9C;AAAA,IACF;AAGA,QAAMC,aAAN,MAAgB;AAAA,MAOd,YAAY,QAAQ,OAAO,YAAY,QAAQ,SAAS,UAAU,OAAO;AANzE,yCAAY;AACZ;AACA;AAAA;AACA,wCAAW;AACX;AACA;AAEE,aAAK,SAAS;AACd,aAAK,UAAU;AACf,aAAK,aAAa;AAClB,aAAK,WAAW;AAChB,aAAK,WAAW;AAAA,MAClB;AAAA;AAAA,MAGA,IAAI,SAAS;AACX,eAAO,KAAK;AAAA,MACd;AAAA,MACA,IAAI,OAAO,KAAK;AAAA,MAEhB;AAAA,MACA,IAAI,UAAU;AACZ,eAAO,KAAK;AAAA,MACd;AAAA,MACA,IAAI,QAAQ,KAAK;AAAA,MAEjB;AAAA,MACA,IAAI,YAAY;AACd,eAAO,KAAK;AAAA,MACd;AAAA,MACA,IAAI,UAAU,KAAK;AAAA,MAEnB;AAAA,MACA,IAAI,MAAM;AACR,eAAO,KAAK;AAAA,MACd;AAAA,MACA,IAAI,IAAI,KAAK;AAAA,MAEb;AAAA,MACA,IAAI,aAAa;AACf,eAAO,KAAK;AAAA,MACd;AAAA,MACA,IAAI,WAAW,KAAK;AAAA,MAEpB;AAAA;AAAA,MAGA,SAAS,KAAK,YAAY;AACxB,cAAM,sBAAsB,KAAK,kBAAkB,gBAAgB;AAGnE,cAAM,UAAU,KAAK,kBAAkB,gBAAgB,UAAU,KAAK,OAAO,gBAAgB,UAAU,KAAK,OAAO,UAAU;AAC7H,YAAI;AACJ,YAAI,KAAK,cAAc,QAAQ;AAC7B,gBAAM,QAAQD,cAAa,KAAK,QAAQ,CAAC,KAAK,KAAK,SAAS,GAAG,CAAC,CAAC;AACjE,qBAAW,UAAU,QAAQ,OAAO,KAAK,GAAG;AAC1C,kBAAM,eAAe,QAAQ,UAAa,GAAG,KAAK,SAAS,OAAO,KAAK,GAAG,IAAI;AAC9E,kBAAM,oBAAoB,KAAK,cAAc,UAAa,GAAG,KAAK,SAAS,OAAO,KAAK,KAAK,SAAS,IAAI;AACzG,gBAAI,QAAQ,QAAW;AACrB,kBAAI,iBAAiB,IAAI;AACvB;AAAA,cACF;AAAA,YACF;AACA,gBAAI,eAAe,QAAW;AAC5B,kBAAI,iBAAiB,IAAI;AACvB;AAAA,cACF;AACA,oBAAM,uBAAuB,GAAG,KAAK,SAAS,OAAO,OAAO,UAAU;AACtE,kBAAI,iBAAiB,KAAK,wBAAwB,IAAI;AACpD;AAAA,cACF;AAAA,YACF;AACA,gBAAI,KAAK,cAAc,UAAa,qBAAqB;AACvD,kBAAI,sBAAsB,GAAG;AAC3B;AAAA,cACF;AAAA,YACF;AACA,gBAAI,KAAK,cAAc,UAAa,CAAC,qBAAqB;AACxD,kBAAI,sBAAsB,IAAI;AAC5B;AAAA,cACF;AACA,kBAAI,sBAAsB,MAAM,GAAG,KAAK,SAAS,OAAO,OAAO,KAAK,oBAAoB,MAAM,GAAG;AAC/F;AAAA,cACF;AAAA,YACF;AACA,gBAAI,KAAK,WAAW,QAAW;AAC7B,kBAAI,CAAC,KAAK,OAAO,SAAS,OAAO,GAAG,GAAG;AACrC;AAAA,cACF;AAAA,YACF;AACA,0BAAc;AACd;AAAA,UACF;AAAA,QACF,WAAW,KAAK,cAAc,cAAc;AAI1C,gBAAM,QAAQA,cAAa,KAAK,QAAQ,CAAC,KAAK,KAAK,SAAS,GAAG,CAAC,CAAC;AACjE,qBAAW,UAAU,QAAQ,OAAO,KAAK,GAAG;AAC1C,gBAAI,QAAQ,QAAW;AACrB,mBAAK,GAAG,KAAK,SAAS,OAAO,KAAK,GAAG,MAAM,IAAI;AAC7C;AAAA,cACF;AAAA,YACF;AACA,gBAAI,KAAK,cAAc,QAAW;AAChC,mBAAK,GAAG,KAAK,SAAS,OAAO,KAAK,KAAK,SAAS,MAAM,GAAG;AACvD;AAAA,cACF;AAAA,YACF;AACA,gBAAI,KAAK,WAAW,QAAW;AAC7B,kBAAI,CAAC,KAAK,OAAO,SAAS,OAAO,GAAG,GAAG;AACrC;AAAA,cACF;AAAA,YACF;AACA,0BAAc;AACd;AAAA,UACF;AAAA,QACF,WAAW,KAAK,cAAc,QAAQ;AACpC,gBAAM,QAAQA,cAAa,KAAK,QAAQ,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC;AACjE,qBAAW,UAAU,QAAQ,OAAO,OAAO,MAAM,GAAG;AAClD,kBAAM,eAAe,QAAQ,UAAa,GAAG,KAAK,SAAS,OAAO,KAAK,GAAG,IAAI;AAC9E,kBAAM,oBAAoB,KAAK,cAAc,UAAa,GAAG,KAAK,SAAS,OAAO,KAAK,KAAK,SAAS,IAAI;AACzG,gBAAI,QAAQ,QAAW;AACrB,kBAAI,iBAAiB,GAAG;AACtB;AAAA,cACF;AAAA,YACF;AACA,gBAAI,eAAe,QAAW;AAC5B,kBAAI,iBAAiB,GAAG;AACtB;AAAA,cACF;AACA,oBAAM,uBAAuB,GAAG,KAAK,SAAS,OAAO,OAAO,UAAU;AACtE,kBAAI,iBAAiB,KAAK,wBAAwB,GAAG;AACnD;AAAA,cACF;AAAA,YACF;AACA,gBAAI,KAAK,cAAc,UAAa,qBAAqB;AACvD,kBAAI,sBAAsB,IAAI;AAC5B;AAAA,cACF;AAAA,YACF;AACA,gBAAI,KAAK,cAAc,UAAa,CAAC,qBAAqB;AACxD,kBAAI,sBAAsB,GAAG;AAC3B;AAAA,cACF;AACA,kBAAI,sBAAsB,MAAM,GAAG,KAAK,SAAS,OAAO,OAAO,KAAK,oBAAoB,MAAM,IAAI;AAChG;AAAA,cACF;AAAA,YACF;AACA,gBAAI,KAAK,WAAW,QAAW;AAC7B,kBAAI,CAAC,KAAK,OAAO,SAAS,OAAO,GAAG,GAAG;AACrC;AAAA,cACF;AAAA,YACF;AACA,0BAAc;AACd;AAAA,UACF;AAAA,QACF,WAAW,KAAK,cAAc,cAAc;AAC1C,cAAI;AACJ,gBAAM,QAAQA,cAAa,KAAK,QAAQ,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC;AACjE,qBAAW,UAAU,QAAQ,OAAO,OAAO,MAAM,GAAG;AAClD,gBAAI,QAAQ,QAAW;AACrB,mBAAK,GAAG,KAAK,SAAS,OAAO,KAAK,GAAG,MAAM,GAAG;AAC5C;AAAA,cACF;AAAA,YACF;AACA,gBAAI,KAAK,cAAc,QAAW;AAChC,mBAAK,GAAG,KAAK,SAAS,OAAO,KAAK,KAAK,SAAS,MAAM,IAAI;AACxD;AAAA,cACF;AAAA,YACF;AACA,gBAAI,KAAK,WAAW,QAAW;AAC7B,kBAAI,CAAC,KAAK,OAAO,SAAS,OAAO,GAAG,GAAG;AACrC;AAAA,cACF;AAAA,YACF;AACA,yBAAa;AACb;AAAA,UACF;AACA,cAAI,YAAY;AACd,0BAAc,QAAQ,IAAI,WAAW,GAAG;AAAA,UAC1C;AAAA,QACF;AACA,YAAI;AACJ,YAAI,CAAC,aAAa;AAChB,eAAK,OAAO;AACZ,cAAI,CAAC,qBAAqB;AACxB,iBAAK,uBAAuB;AAAA,UAC9B;AAIA,cAAI,CAAC,KAAK,YAAY,KAAK,SAAS,MAAM,+BAA+B;AACvE,iBAAK,QAAQ;AAAA,UACf;AACA,mBAAS;AAAA,QACX,OAAO;AACL,eAAK,YAAY,YAAY;AAC7B,cAAI,CAAC,qBAAqB;AACxB,iBAAK,uBAAuB,YAAY;AAAA,UAC1C;AACA,eAAK,OAAO,YAAY;AACxB,cAAI,qBAAqB;AACvB,iBAAK,cAAc,gBAAgB,YAAY,GAAG;AAClD,gBAAI,CAAC,KAAK,YAAY,KAAK,SAAS,MAAM,+BAA+B;AACvE,mBAAK,QAAQ,gBAAgB,YAAY,KAAK;AAAA,YAChD;AAAA,UACF,OAAO;AACL,iBAAK,cAAc,gBAAgB,YAAY,KAAK;AACpD,gBAAI,CAAC,KAAK,YAAY,KAAK,SAAS,MAAM,+BAA+B;AACvE,kBAAI,KAAK,kBAAkB,gBAAgB,SAAS;AAElD,sBAAM,IAAI,MAAM,0BAA0B;AAAA,cAC5C;AACA,oBAAM,QAAQ,KAAK,OAAO,YAAY,gBAAgB,SAAS,YAAY,KAAK;AAChF,mBAAK,QAAQ,gBAAgB,KAAK;AAAA,YACpC;AAAA,UACF;AACA,eAAK,YAAY;AAEjB,mBAAS;AAAA,QACX;AACA,eAAO;AAAA,MACT;AAAA;AAAA,MAGA,OAAO,OAAO;AACZ,YAAI,UAAU,QAAW;AACvB,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,cAAM,uBAAuBD,yBAAwB,IAAI;AACzD,cAAM,eAAe,OAAO,OAAO,KAAK,QAAQ,WAAW,IAAI,KAAK,aAAa,KAAK;AACtF,cAAM,cAAc,qBAAqB;AACzC,YAAI,YAAY,WAAW,UAAU;AACnC,gBAAM,IAAI,QAAQ,yBAAyB;AAAA,QAC7C;AACA,YAAI,YAAY,SAAS,YAAY;AACnC,gBAAM,IAAI,QAAQ,cAAc;AAAA,QAClC;AACA,YAAI,qBAAqB,gBAAgB,SAAS;AAChD,gBAAM,IAAI,QAAQ,kBAAkB;AAAA,QACtC;AACA,YAAI,EAAE,KAAK,kBAAkB,gBAAgB,YAAY,KAAK,OAAO,UAAU,SAAS;AACtF,gBAAM,IAAI,QAAQ,kBAAkB;AAAA,QACtC;AACA,YAAI,CAAC,KAAK,aAAa,CAAC,OAAO,OAAO,MAAM,OAAO,GAAG;AACpD,gBAAM,IAAI,QAAQ,kBAAkB;AAAA,QACtC;AACA,cAAM,QAAQ,gBAAgB,KAAK;AACnC,YAAI,qBAAqB,YAAY,MAAM;AACzC,cAAI;AACJ,cAAI;AACF,uBAAW,GAAG,YAAY,SAAS,qBAAqB,SAAS,KAAK,EAAE;AAAA,UAC1E,SAAS,KAAK;AAAA,UAEd;AACA,eAAK,GAAG,KAAK,SAAS,SAAS,YAAY,MAAM,GAAG;AAClD,kBAAM,IAAI,QAAQ,UAAU;AAAA,UAC9B;AAAA,QACF;AACA,cAAM,SAAS;AAAA,UACb,KAAK;AAAA,UACL,OAAO;AAAA,QACT;AACA,eAAO,YAAY,kBAAkB;AAAA,UACnC,WAAW,qBAAqB,gBAAgB,YAAY,KAAK,qBAAqB,iBAAiB,QAAQ,OAAO,YAAY,YAAY;AAAA,UAC9I,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA;AAAA,MAGA,QAAQ,OAAO;AACb,YAAI,CAAC,OAAO,UAAU,KAAK,KAAK,SAAS,GAAG;AAC1C,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,cAAM,uBAAuBA,yBAAwB,IAAI;AACzD,cAAM,cAAc,qBAAqB;AACzC,YAAI,YAAY,WAAW,UAAU;AACnC,gBAAM,IAAI,QAAQ,yBAAyB;AAAA,QAC7C;AACA,YAAI,qBAAqB,gBAAgB,SAAS;AAChD,gBAAM,IAAI,QAAQ,kBAAkB;AAAA,QACtC;AACA,YAAI,EAAE,KAAK,kBAAkB,gBAAgB,YAAY,KAAK,OAAO,UAAU,SAAS;AACtF,gBAAM,IAAI,QAAQ,kBAAkB;AAAA,QACtC;AACA,YAAI,CAAC,KAAK,WAAW;AACnB,gBAAM,IAAI,QAAQ,kBAAkB;AAAA,QACtC;AACA,YAAI,KAAK,UAAU;AACjB,eAAK,SAAS,aAAa;AAAA,QAC7B;AACA,oBAAY,kBAAkB;AAAA,UAC5B,WAAW,MAAM;AACf,gBAAI;AACJ,qBAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC9B,uBAAS,KAAK,SAAS;AAGvB,kBAAI,CAAC,QAAQ;AACX;AAAA,cACF;AAAA,YACF;AACA,mBAAO;AAAA,UACT;AAAA,UACA,SAAS,KAAK;AAAA,UACd,QAAQ,KAAK;AAAA,QACf,CAAC;AACD,aAAK,YAAY;AAAA,MACnB;AAAA;AAAA,MAGA,SAAS,KAAK;AACZ,cAAM,uBAAuBA,yBAAwB,IAAI;AACzD,cAAM,cAAc,qBAAqB;AACzC,YAAI,YAAY,WAAW,UAAU;AACnC,gBAAM,IAAI,QAAQ,yBAAyB;AAAA,QAC7C;AACA,YAAI,qBAAqB,gBAAgB,SAAS;AAChD,gBAAM,IAAI,QAAQ,kBAAkB;AAAA,QACtC;AACA,YAAI,EAAE,KAAK,kBAAkB,gBAAgB,YAAY,KAAK,OAAO,UAAU,SAAS;AACtF,gBAAM,IAAI,QAAQ,kBAAkB;AAAA,QACtC;AACA,YAAI,CAAC,KAAK,WAAW;AACnB,gBAAM,IAAI,QAAQ,kBAAkB;AAAA,QACtC;AACA,YAAI,QAAQ,QAAW;AACrB,iBAAO,GAAG,YAAY,SAAS,GAAG;AAClC,gBAAM,aAAa,GAAG,KAAK,SAAS,KAAK,KAAK,SAAS;AACvD,cAAI,aAAa,MAAM,KAAK,cAAc,UAAU,KAAK,cAAc,iBAAiB,aAAa,MAAM,KAAK,cAAc,UAAU,KAAK,cAAc,eAAe;AACxK,kBAAM,IAAI,QAAQ,UAAU;AAAA,UAC9B;AAAA,QACF;AACA,YAAI,KAAK,UAAU;AACjB,eAAK,SAAS,aAAa;AAAA,QAC7B;AACA,oBAAY,kBAAkB;AAAA,UAC5B,WAAW,KAAK,SAAS,KAAK,MAAM,GAAG;AAAA,UACvC,SAAS,KAAK;AAAA,UACd,QAAQ,KAAK;AAAA,QACf,CAAC;AACD,aAAK,YAAY;AAAA,MACnB;AAAA;AAAA,MAGA,mBAAmB,KAAK,YAAY;AAClC,cAAM,uBAAuBA,yBAAwB,IAAI;AACzD,cAAM,cAAc,qBAAqB;AACzC,YAAI,YAAY,WAAW,UAAU;AACnC,gBAAM,IAAI,QAAQ,yBAAyB;AAAA,QAC7C;AACA,YAAI,qBAAqB,gBAAgB,SAAS;AAChD,gBAAM,IAAI,QAAQ,kBAAkB;AAAA,QACtC;AACA,YAAI,EAAE,KAAK,kBAAkB,gBAAgB,YAAY,KAAK,OAAO,UAAU,SAAS;AACtF,gBAAM,IAAI,QAAQ,kBAAkB;AAAA,QACtC;AACA,YAAI,KAAK,kBAAkB,gBAAgB,WAAW,KAAK,cAAc,UAAU,KAAK,cAAc,QAAQ;AAC5G,gBAAM,IAAI,QAAQ,mBAAmB;AAAA,QACvC;AACA,YAAI,CAAC,KAAK,WAAW;AACnB,gBAAM,IAAI,QAAQ,kBAAkB;AAAA,QACtC;AAGA,YAAI,QAAQ,UAAa,eAAe,QAAW;AACjD,gBAAM,IAAI,QAAQ,UAAU;AAAA,QAC9B;AACA,eAAO,GAAG,YAAY,SAAS,GAAG;AAClC,cAAM,aAAa,GAAG,KAAK,SAAS,KAAK,KAAK,SAAS;AACvD,YAAI,cAAc,MAAM,KAAK,cAAc,UAAU,cAAc,KAAK,KAAK,cAAc,QAAQ;AACjG,gBAAM,IAAI,QAAQ,UAAU;AAAA,QAC9B;AACA,cAAM,cAAc,GAAG,KAAK,SAAS,YAAY,KAAK,oBAAoB;AAC1E,YAAI,cAAc,GAAG;AACnB,cAAI,cAAc,KAAK,KAAK,cAAc,UAAU,cAAc,KAAK,KAAK,cAAc,QAAQ;AAChG,kBAAM,IAAI,QAAQ,UAAU;AAAA,UAC9B;AAAA,QACF;AACA,YAAI,KAAK,UAAU;AACjB,eAAK,SAAS,aAAa;AAAA,QAC7B;AACA,oBAAY,kBAAkB;AAAA,UAC5B,WAAW,KAAK,SAAS,KAAK,MAAM,KAAK,UAAU;AAAA,UACnD,SAAS,KAAK;AAAA,UACd,QAAQ,KAAK;AAAA,QACf,CAAC;AACD,aAAK,YAAY;AAAA,MACnB;AAAA,MACA,SAAS;AACP,cAAM,uBAAuBA,yBAAwB,IAAI;AACzD,cAAM,eAAe,OAAO,OAAO,KAAK,QAAQ,WAAW,IAAI,KAAK,aAAa,KAAK;AACtF,cAAM,cAAc,qBAAqB;AACzC,YAAI,YAAY,WAAW,UAAU;AACnC,gBAAM,IAAI,QAAQ,yBAAyB;AAAA,QAC7C;AACA,YAAI,YAAY,SAAS,YAAY;AACnC,gBAAM,IAAI,QAAQ,cAAc;AAAA,QAClC;AACA,YAAI,qBAAqB,gBAAgB,SAAS;AAChD,gBAAM,IAAI,QAAQ,kBAAkB;AAAA,QACtC;AACA,YAAI,EAAE,KAAK,kBAAkB,gBAAgB,YAAY,KAAK,OAAO,UAAU,SAAS;AACtF,gBAAM,IAAI,QAAQ,kBAAkB;AAAA,QACtC;AACA,YAAI,CAAC,KAAK,aAAa,CAAC,OAAO,OAAO,MAAM,OAAO,GAAG;AACpD,gBAAM,IAAI,QAAQ,kBAAkB;AAAA,QACtC;AACA,eAAO,YAAY,kBAAkB;AAAA,UACnC,WAAW,qBAAqB,gBAAgB,aAAa,KAAK,qBAAqB,iBAAiB,cAAc,YAAY,YAAY;AAAA,UAC9I,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA,MACA,WAAW;AACT,eAAO;AAAA,MACT;AAAA,IACF;AACA,QAAI,WAAWF,SAAQ,UAAUI;AACjC,IAAAH,QAAO,UAAUD,SAAQ;AAAA;AAAA;;;AC9dzB;AAAA,8GAAAK,UAAAC,SAAA;AAAA;AAEA,WAAO,eAAeD,UAAS,cAAc;AAAA,MAC3C,OAAO;AAAA,IACT,CAAC;AACD,IAAAA,SAAQ,UAAU;AAClB,QAAI,aAAa,uBAAuB,mBAAyB;AACjE,aAAS,uBAAuB,GAAG;AAAE,aAAO,KAAK,EAAE,aAAa,IAAI,EAAE,SAAS,EAAE;AAAA,IAAG;AACpF,QAAME,sBAAN,cAAiC,WAAW,QAAQ;AAAA,MAElD,YAAY,QAAQ,OAAO,WAAW,SAAS;AAC7C,cAAM,QAAQ,OAAO,WAAW,OAAO;AAFzC;AAAA,MAGA;AAAA,MACA,WAAW;AACT,eAAO;AAAA,MACT;AAAA,IACF;AACA,QAAI,WAAWF,SAAQ,UAAUE;AACjC,IAAAD,QAAO,UAAUD,SAAQ;AAAA;AAAA;;;AClBzB;AAAA,+GAAAG,UAAAC,SAAA;AAAA;AAEA,WAAO,eAAeD,UAAS,cAAc;AAAA,MAC3C,OAAO;AAAA,IACT,CAAC;AACD,IAAAA,SAAQ,UAAU;AAClB,QAAI,UAAU;AACd,QAAME,WAAU,CAAC,OAAO,aAAa;AACnC,aAAO,MAAM,+BAA+B,MAAM,eAAe,MAAM,mBAAmB,SAAS,YAAY,SAAS,MAAM,eAAe,MAAM,kBAAkB,SAAS,YAAY;AAAA,IAC5L;AAGA,QAAMC,wBAAuB,CAAC,OAAO,QAAQ;AAC3C,YAAM,gBAAgB;AAKtB,iBAAW,YAAY,IAAI,UAAU,MAAM,GAAG;AAC5C,YAAI,MAAM,SAAS,SAAS,QAAQD,SAAQ,OAAO,QAAQ,GAAG;AAC5D;AAAA,QACF;AAGA,iBAAS,SAAS,KAAK,MAAM,eAAe,KAAK;AAAA,MACnD;AACA,YAAM,aAAa;AAAA,QACjB,OAAO;AAAA,QACP,SAAS;AAAA,QACT,UAAU;AAAA,QACV,OAAO;AAAA,QACP,SAAS;AAAA,QACT,eAAe;AAAA,QACf,eAAe;AAAA,MACjB;AACA,YAAM,OAAO,WAAW,MAAM,IAAI;AAClC,UAAI,SAAS,QAAW;AACtB,cAAM,IAAI,MAAM,wBAAwB,MAAM,IAAI,GAAG;AAAA,MACvD;AACA,YAAM,WAAW,MAAM,cAAc,IAAI;AACzC,UAAI,UAAU;AACZ,cAAM,WAAW;AAAA,UACf;AAAA,UACA,SAAS;AAAA,UACT,MAAM,MAAM;AAAA,QACd;AACA,YAAI,CAACA,SAAQ,OAAO,QAAQ,GAAG;AAE7B,mBAAS,SAAS,KAAK,MAAM,eAAe,KAAK;AAAA,QACnD;AAAA,MACF;AAAA,IACF;AACA,QAAME,mBAAN,MAAsB;AAAA,MAAtB;AACE,yCAAY,CAAC;AAAA;AAAA;AAAA,MAIb,iBAAiB,MAAM,UAAU,UAAU,OAAO;AAChD,aAAK,UAAU,KAAK;AAAA,UAClB;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA,oBAAoB,MAAM,UAAU,UAAU,OAAO;AACnD,cAAM,IAAI,KAAK,UAAU,UAAU,cAAY;AAC7C,iBAAO,SAAS,SAAS,QAAQ,SAAS,aAAa,YAAY,SAAS,YAAY;AAAA,QAC1F,CAAC;AACD,aAAK,UAAU,OAAO,GAAG,CAAC;AAAA,MAC5B;AAAA;AAAA,MAGA,cAAc,OAAO;AACnB,YAAI,MAAM,cAAc,CAAC,MAAM,aAAa;AAC1C,gBAAM,IAAI,QAAQ,kBAAkB,oCAAoC;AAAA,QAC1E;AACA,cAAM,YAAY;AAClB,cAAM,aAAa;AACnB,cAAM,SAAS;AAGf,cAAM,aAAa,MAAM;AACzB,mBAAW,OAAO,MAAM,WAAW;AACjC,cAAI,CAAC,MAAM,oBAAoB;AAC7B,YAAAD,sBAAqB,OAAO,GAAG;AAAA,UACjC;AAAA,QACF;AACA,cAAM,aAAa,MAAM;AACzB,YAAI,CAAC,MAAM,oBAAoB;AAC7B,UAAAA,sBAAqB,OAAO,MAAM,MAAM;AAAA,QAC1C;AACA,YAAI,MAAM,SAAS;AACjB,gBAAM,UAAU,QAAQ;AACxB,gBAAM,aAAa,MAAM;AACzB,qBAAW,OAAO,MAAM,WAAW;AACjC,gBAAI,CAAC,MAAM,oBAAoB;AAC7B,cAAAA,sBAAqB,OAAO,GAAG;AAAA,YACjC;AAAA,UACF;AAAA,QACF;AACA,cAAM,aAAa;AACnB,cAAM,aAAa,MAAM;AACzB,cAAM,gBAAgB;AACtB,YAAI,MAAM,UAAU;AAClB,iBAAO;AAAA,QACT;AACA,eAAO;AAAA,MACT;AAAA,IACF;AACA,QAAI,WAAWH,SAAQ,UAAUI;AACjC,IAAAH,QAAO,UAAUD,SAAQ;AAAA;AAAA;;;AC9GzB;AAAA,sGAAAK,UAAAC,SAAA;AAAA;AAEA,WAAO,eAAeD,UAAS,cAAc;AAAA,MAC3C,OAAO;AAAA,IACT,CAAC;AACD,IAAAA,SAAQ,UAAU;AAClB,QAAI,UAAU;AACd,QAAI,mBAAmB,uBAAuB,yBAAmC;AACjF,aAAS,uBAAuB,GAAG;AAAE,aAAO,KAAK,EAAE,aAAa,IAAI,EAAE,SAAS,EAAE;AAAA,IAAG;AACpF,QAAME,cAAN,cAAyB,iBAAiB,QAAQ;AAAA,MAAlD;AAAA;AACE,uCAAU;AACV,sCAAS;AACT,sCAAS;AACT,2CAAc;AACd,0CAAa;AACb,yCAAY;AACZ,uCAAU;AAAA;AAAA,MACV,IAAI,QAAQ;AACV,YAAI,KAAK,eAAe,WAAW;AACjC,gBAAM,IAAI,QAAQ,kBAAkB;AAAA,QACtC;AACA,eAAO,KAAK;AAAA,MACd;AAAA,MACA,IAAI,MAAM,OAAO;AACf,aAAK,SAAS;AAAA,MAChB;AAAA,MACA,IAAI,SAAS;AACX,YAAI,KAAK,eAAe,WAAW;AACjC,gBAAM,IAAI,QAAQ,kBAAkB;AAAA,QACtC;AACA,eAAO,KAAK;AAAA,MACd;AAAA,MACA,IAAI,OAAO,OAAO;AAChB,aAAK,UAAU;AAAA,MACjB;AAAA,MACA,WAAW;AACT,eAAO;AAAA,MACT;AAAA,IACF;AACA,QAAI,WAAWF,SAAQ,UAAUE;AACjC,IAAAD,QAAO,UAAUD,SAAQ;AAAA;AAAA;;;ACxCzB;AAAA,4GAAAG,UAAAC,SAAA;AAAA;AAEA,WAAO,eAAeD,UAAS,cAAc;AAAA,MAC3C,OAAO;AAAA,IACT,CAAC;AACD,IAAAA,SAAQ,UAAU;AAGlB,QAAME,gBAAe,CAAC,KAAK,SAAS;AAClC,YAAM,MAAM;AACZ,YAAM,MAAM,SAAS,kBAAkB,aAAa;AACpD,UAAI,MAAM,GAAG,KAAK,MAAM,OAAO,MAAM,KAAK;AACxC,cAAM,IAAI,UAAU;AAAA,MACtB;AACA,UAAI,OAAO,GAAG;AACZ,eAAO,KAAK,MAAM,GAAG;AAAA,MACvB;AAAA,IACF;AACA,QAAI,WAAWF,SAAQ,UAAUE;AACjC,IAAAD,QAAO,UAAUD,SAAQ;AAAA;AAAA;;;ACnBzB;AAAA,iHAAAG,UAAAC,SAAA;AAAA;AAEA,WAAO,eAAeD,UAAS,cAAc;AAAA,MAC3C,OAAO;AAAA,IACT,CAAC;AACD,IAAAA,SAAQ,UAAU;AAClB,QAAME,qBAAN,cAAgC,MAAM;AAAA,MACpC,SAAS,OAAO;AACd,mBAAW,UAAU,MAAM;AACzB,cAAI,UAAU,QAAQ;AACpB,mBAAO;AAAA,UACT;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,MACA,KAAK,GAAG;AACN,YAAI,IAAI,KAAK,KAAK,KAAK,QAAQ;AAC7B,iBAAO;AAAA,QACT;AACA,eAAO,KAAK,CAAC;AAAA,MACf;AAAA;AAAA,MAGA,SAAS,QAAQ;AACf,eAAO,MAAM,UAAU,KAAK,KAAK,MAAM,GAAG,MAAM;AAAA,MAClD;AAAA,MACA,SAAS,QAAQ;AACf,eAAO,MAAM,UAAU,KAAK,KAAK,MAAM,GAAG,MAAM;AAAA,MAClD;AAAA,IACF;AA+CA,QAAI,WAAWF,SAAQ,UAAUE;AACjC,IAAAD,QAAO,UAAUD,SAAQ;AAAA;AAAA;;;AC7EzB;AAAA,+GAAAG,UAAAC,SAAA;AAAA;AAEA,WAAO,eAAeD,UAAS,cAAc;AAAA,MAC3C,OAAO;AAAA,IACT,CAAC;AACD,IAAAA,SAAQ,UAAU;AAClB,QAAI,eAAe,uBAAuB,qBAA4B;AACtE,QAAI,UAAU;AACd,QAAI,cAAc,uBAAuB,oBAA0B;AACnE,aAAS,uBAAuB,GAAG;AAAE,aAAO,KAAK,EAAE,aAAa,IAAI,EAAE,SAAS,EAAE;AAAA,IAAG;AAEpF,QAAME,mBAAkB,CAAC,OAAO,qBAAqB,UAAU;AAC7D,UAAI,iBAAiB,aAAa,SAAS;AACzC,eAAO;AAAA,MACT;AACA,UAAI,UAAU,QAAQ,UAAU,QAAW;AACzC,YAAI,oBAAoB;AACtB,gBAAM,IAAI,QAAQ,UAAU;AAAA,QAC9B;AACA,eAAO,IAAI,aAAa,QAAQ,QAAW,QAAW,OAAO,KAAK;AAAA,MACpE;AACA,YAAM,OAAO,GAAG,YAAY,SAAS,KAAK;AAC1C,aAAO,aAAa,QAAQ,KAAK,GAAG;AAAA,IACtC;AACA,QAAI,WAAWF,SAAQ,UAAUE;AACjC,IAAAD,QAAO,UAAUD,SAAQ;AAAA;AAAA;;;ACzBzB;AAAA,oGAAAG,UAAAC,SAAA;AAAA;AAEA,WAAO,eAAeD,UAAS,cAAc;AAAA,MAC3C,OAAO;AAAA,IACT,CAAC;AACD,IAAAA,SAAQ,UAAU;AAClB,QAAI,aAAa,uBAAuB,mBAAyB;AACjE,QAAI,sBAAsB,uBAAuB,4BAAkC;AACnF,QAAI,eAAe,uBAAuB,qBAA2B;AACrE,QAAI,cAAc,uBAAuB,oBAA0B;AACnE,QAAI,gBAAgB,uBAAuB,sBAAgC;AAC3E,QAAI,UAAU;AACd,QAAI,qBAAqB,uBAAuB,2BAAqC;AACrF,QAAI,cAAc,uBAAuB,oBAA8B;AACvE,QAAI,mBAAmB,uBAAuB,yBAAmC;AACjF,aAAS,uBAAuB,GAAG;AAAE,aAAO,KAAK,EAAE,aAAa,IAAI,EAAE,SAAS,EAAE;AAAA,IAAG;AACpF,QAAME,4BAA2B,WAAS;AACxC,UAAI,MAAM,UAAU,WAAW,MAAM,YAAY,gBAAgB,SAAS;AACxE,cAAM,IAAI,QAAQ,kBAAkB;AAAA,MACtC;AACA,UAAI,MAAM,YAAY,YAAY,WAAW,UAAU;AACrD,cAAM,IAAI,QAAQ,yBAAyB;AAAA,MAC7C;AAAA,IACF;AAGA,QAAMC,YAAN,MAAe;AAAA,MACb,YAAY,aAAa,UAAU;AACjC,aAAK,YAAY;AACjB,aAAK,QAAQ,SAAS;AACtB,aAAK,cAAc;AACnB,aAAK,UAAU,SAAS;AACxB,aAAK,aAAa,SAAS;AAC3B,aAAK,SAAS,SAAS;AAAA,MACzB;AAAA,MACA,IAAI,OAAO;AACT,eAAO,KAAK;AAAA,MACd;AAAA;AAAA,MAGA,IAAI,KAAK,MAAM;AACb,cAAM,cAAc,KAAK,YAAY;AACrC,YAAI,CAAC,YAAY,GAAG,kCAAkC;AACpD,gBAAM,IAAI,QAAQ,kBAAkB;AAAA,QACtC;AACA,YAAI,YAAY,WAAW,UAAU;AACnC,gBAAM,IAAI,QAAQ,yBAAyB;AAAA,QAC7C;AACA,YAAI,KAAK,UAAU,WAAW,KAAK,YAAY,gBAAgB,SAAS;AACtE,gBAAM,IAAI,QAAQ,kBAAkB;AAAA,QACtC;AACA,eAAO,OAAO,IAAI;AAClB,YAAI,SAAS,KAAK,OAAO;AACvB;AAAA,QACF;AACA,YAAI,KAAK,YAAY,WAAW,SAAS,IAAI,GAAG;AAC9C,gBAAM,IAAI,QAAQ,gBAAgB;AAAA,QACpC;AACA,cAAM,UAAU,KAAK;AACrB,cAAM,gBAAgB,CAAC,GAAG,KAAK,YAAY,UAAU;AACrD,aAAK,QAAQ;AACb,aAAK,UAAU,OAAO;AACtB,aAAK,YAAY,cAAc,OAAO,OAAO;AAC7C,aAAK,YAAY,cAAc,IAAI,MAAM,IAAI;AAC7C,aAAK,YAAY,gBAAgB,WAAW,OAAO,OAAO;AAC1D,aAAK,YAAY,gBAAgB,WAAW,IAAI,MAAM,KAAK,SAAS;AACpE,aAAK,YAAY,aAAa,IAAI,mBAAmB,QAAQ,GAAG,MAAM,KAAK,KAAK,YAAY,gBAAgB,WAAW,KAAK,CAAC,EAAE,OAAO,eAAa;AACjJ,gBAAM,QAAQ,KAAK,YAAY,gBAAgB,WAAW,IAAI,SAAS;AACvE,iBAAO,SAAS,CAAC,MAAM;AAAA,QACzB,CAAC,EAAE,KAAK,CAAC;AACT,oBAAY,aAAa,KAAK,MAAM;AAClC,eAAK,QAAQ;AACb,eAAK,UAAU,OAAO;AACtB,eAAK,YAAY,cAAc,OAAO,IAAI;AAC1C,eAAK,YAAY,cAAc,IAAI,SAAS,IAAI;AAChD,eAAK,YAAY,gBAAgB,WAAW,OAAO,IAAI;AACvD,eAAK,YAAY,gBAAgB,WAAW,IAAI,SAAS,KAAK,SAAS;AACvE,eAAK,YAAY,aAAa,IAAI,mBAAmB,QAAQ,GAAG,aAAa;AAAA,QAC/E,CAAC;AAAA,MACH;AAAA;AAAA,MAGA,WAAW,OAAO,WAAW;AAC3B,QAAAD,0BAAyB,IAAI;AAC7B,YAAI,UAAU,MAAM;AAClB,kBAAQ;AAAA,QACV;AACA,YAAI,UAAU,UAAa,EAAE,iBAAiB,aAAa,UAAU;AACnE,kBAAQ,aAAa,QAAQ,MAAM,GAAG,YAAY,SAAS,KAAK,CAAC;AAAA,QACnE;AACA,cAAM,UAAU,IAAI,YAAY,QAAQ;AACxC,gBAAQ,SAAS;AACjB,gBAAQ,cAAc,KAAK,YAAY;AACvC,cAAM,SAAS,IAAI,oBAAoB,QAAQ,MAAM,OAAO,WAAW,OAAO;AAC9E,eAAO,KAAK,YAAY,YAAY,kBAAkB;AAAA,UACpD,WAAW,OAAO,SAAS,KAAK,MAAM;AAAA,UACtC;AAAA,UACA,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA;AAAA,MAGA,cAAc,OAAO,WAAW;AAC9B,QAAAA,0BAAyB,IAAI;AAC7B,YAAI,UAAU,MAAM;AAClB,kBAAQ;AAAA,QACV;AACA,YAAI,UAAU,UAAa,EAAE,iBAAiB,aAAa,UAAU;AACnE,kBAAQ,aAAa,QAAQ,MAAM,GAAG,YAAY,SAAS,KAAK,CAAC;AAAA,QACnE;AACA,cAAM,UAAU,IAAI,YAAY,QAAQ;AACxC,gBAAQ,SAAS;AACjB,gBAAQ,cAAc,KAAK,YAAY;AACvC,cAAM,SAAS,IAAI,WAAW,QAAQ,MAAM,OAAO,WAAW,SAAS,IAAI;AAC3E,eAAO,KAAK,YAAY,YAAY,kBAAkB;AAAA,UACpD,WAAW,OAAO,SAAS,KAAK,MAAM;AAAA,UACtC;AAAA,UACA,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA,MACA,IAAI,KAAK;AACP,QAAAA,0BAAyB,IAAI;AAC7B,YAAI,EAAE,eAAe,aAAa,UAAU;AAC1C,iBAAO,GAAG,YAAY,SAAS,GAAG;AAAA,QACpC;AACA,eAAO,KAAK,YAAY,YAAY,kBAAkB;AAAA,UACpD,WAAW,KAAK,UAAU,SAAS,KAAK,KAAK,WAAW,GAAG;AAAA,UAC3D,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA;AAAA,MAGA,OAAO,OAAO,OAAO;AACnB,YAAI,UAAU,SAAS,KAAK,UAAU,QAAW;AAC/C,mBAAS,GAAG,cAAc,SAAS,OAAO,eAAe;AAAA,QAC3D;AACA,QAAAA,0BAAyB,IAAI;AAC7B,cAAM,SAAS,GAAG,iBAAiB,SAAS,KAAK;AACjD,eAAO,KAAK,YAAY,YAAY,kBAAkB;AAAA,UACpD,WAAW,KAAK,UAAU,aAAa,KAAK,KAAK,WAAW,OAAO,KAAK;AAAA,UACxE,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA;AAAA,MAGA,OAAO,KAAK;AACV,QAAAA,0BAAyB,IAAI;AAC7B,YAAI,EAAE,eAAe,aAAa,UAAU;AAC1C,iBAAO,GAAG,YAAY,SAAS,GAAG;AAAA,QACpC;AACA,eAAO,KAAK,YAAY,YAAY,kBAAkB;AAAA,UACpD,WAAW,KAAK,UAAU,OAAO,KAAK,KAAK,WAAW,GAAG;AAAA,UACzD,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA;AAAA,MAGA,WAAW,OAAO,OAAO;AACvB,YAAI,UAAU,SAAS,KAAK,UAAU,QAAW;AAC/C,mBAAS,GAAG,cAAc,SAAS,OAAO,eAAe;AAAA,QAC3D;AACA,QAAAA,0BAAyB,IAAI;AAC7B,cAAM,SAAS,GAAG,iBAAiB,SAAS,KAAK;AACjD,eAAO,KAAK,YAAY,YAAY,kBAAkB;AAAA,UACpD,WAAW,KAAK,UAAU,WAAW,KAAK,KAAK,WAAW,OAAO,KAAK;AAAA,UACtE,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA;AAAA,MAGA,MAAM,KAAK;AACT,QAAAA,0BAAyB,IAAI;AAC7B,YAAI,QAAQ,MAAM;AAChB,gBAAM;AAAA,QACR;AACA,YAAI,QAAQ,UAAa,EAAE,eAAe,aAAa,UAAU;AAC/D,gBAAM,aAAa,QAAQ,MAAM,GAAG,YAAY,SAAS,GAAG,CAAC;AAAA,QAC/D;AACA,eAAO,KAAK,YAAY,YAAY,kBAAkB;AAAA,UACpD,WAAW,MAAM;AACf,mBAAO,KAAK,UAAU,MAAM,GAAG;AAAA,UACjC;AAAA,UACA,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA,MACA,WAAW;AACT,eAAO;AAAA,MACT;AAAA,IACF;AACA,QAAI,WAAWF,SAAQ,UAAUG;AACjC,IAAAF,QAAO,UAAUD,SAAQ;AAAA;AAAA;;;AC9LzB;AAAA,4GAAAI,UAAAC,SAAA;AAAA;AAEA,WAAO,eAAeD,UAAS,cAAc;AAAA,MAC3C,OAAO;AAAA,IACT,CAAC;AACD,IAAAA,SAAQ,UAAU;AAElB,QAAME,gBAAe,CAAC,SAAS,UAAU;AACvC,UAAI,MAAM,QAAQ,OAAO,GAAG;AAC1B,cAAM,IAAI,MAAM,oMAAoM;AAAA,MACtN;AACA,YAAM,cAAc,QAAQ,MAAM,GAAG;AACrC,UAAI,YAAY,WAAW,GAAG;AAC5B,cAAM,IAAI,MAAM,kCAAkC;AAAA,MACpD;AACA,kBAAY,IAAI;AAChB,iBAAW,cAAc,aAAa;AACpC,YAAI,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,GAAG;AACtD,iBAAO;AAAA,QACT;AACA,cAAM,MAAM,OAAO,OAAO,OAAO,UAAU;AAC3C,YAAI,CAAC,KAAK;AACR,iBAAO;AAAA,QACT;AACA,gBAAQ,MAAM,UAAU;AAAA,MAC1B;AACA,aAAO,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK;AAAA,IACzD;AACA,QAAI,WAAWF,SAAQ,UAAUE;AACjC,IAAAD,QAAO,UAAUD,SAAQ;AAAA;AAAA;;;AC7BzB;AAAA,4GAAAG,UAAA;AAAA;AAEA,WAAO,eAAeA,UAAS,cAAc;AAAA,MAC3C,OAAO;AAAA,IACT,CAAC;AACD,IAAAA,SAAQ,WAAWC;AACnB,IAAAD,SAAQ,gBAAgBE;AACxB,IAAAF,SAAQ,gBAAgBG;AACxB,IAAAH,SAAQ,mBAAmBI;AAC3B,IAAAJ,SAAQ,qBAAqBK;AAC7B,QAAI,OAAO,uBAAuB,aAAmB;AACrD,aAAS,uBAAuB,GAAG;AAAE,aAAO,KAAK,EAAE,aAAa,IAAI,EAAE,SAAS,EAAE;AAAA,IAAG;AAKpF,aAASC,cAAa,SAAS,KAAK;AAClC,UAAI,MAAM;AACV,UAAI,OAAO,QAAQ;AACnB,UAAI;AACJ,aAAO,MAAM,MAAM;AACjB,cAAM,MAAM,SAAS;AACrB,aAAK,GAAG,KAAK,SAAS,QAAQ,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG;AAChD,gBAAM,MAAM;AAAA,QACd,OAAO;AACL,iBAAO;AAAA,QACT;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAKA,aAASH,eAAc,SAAS,KAAK;AACnC,YAAM,MAAMG,cAAa,SAAS,GAAG;AACrC,YAAM,SAAS,QAAQ,GAAG;AAC1B,UAAI,WAAW,GAAG,KAAK,SAAS,OAAO,KAAK,GAAG,MAAM,GAAG;AACtD,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AAKA,aAASL,UAAS,SAAS,KAAK;AAC9B,YAAM,MAAME,eAAc,SAAS,GAAG;AACtC,aAAO,QAAQ,GAAG;AAAA,IACpB;AAKA,aAASE,oBAAmB,SAAS,UAAU;AAC7C,YAAM,WAAW,OAAO,SAAS,UAAU,cAAc,IAAIC,cAAa,SAAS,SAAS,KAAK;AACjG,YAAM,WAAW,OAAO,SAAS,UAAU,cAAc,QAAQ,SAAS,IAAIA,cAAa,SAAS,SAAS,KAAK;AAClH,eAAS,IAAI,UAAU,KAAK,UAAU,KAAK;AACzC,cAAM,SAAS,QAAQ,CAAC;AACxB,YAAI,UAAU,SAAS,SAAS,OAAO,GAAG,GAAG;AAC3C,iBAAO;AAAA,QACT;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAKA,aAASJ,eAAc,SAAS,UAAU;AACxC,YAAM,MAAMG,oBAAmB,SAAS,QAAQ;AAChD,aAAO,QAAQ,GAAG;AAAA,IACpB;AAKA,aAASD,kBAAiB,SAAS,KAAK;AACtC,YAAM,MAAME,cAAa,SAAS,GAAG;AACrC,YAAM,SAAS,QAAQ,GAAG;AAC1B,UAAI,WAAW,GAAG,KAAK,SAAS,OAAO,KAAK,GAAG,KAAK,GAAG;AACrD,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AAAA;AAAA;;;ACpFA;AAAA,2GAAAC,UAAAC,SAAA;AAAA;AAEA,WAAO,eAAeD,UAAS,cAAc;AAAA,MAC3C,OAAO;AAAA,IACT,CAAC;AACD,IAAAA,SAAQ,UAAU;AAClB,QAAI,eAAe,uBAAuB,qBAA4B;AACtE,QAAI,gBAAgB;AACpB,QAAI,OAAO,uBAAuB,aAAmB;AACrD,aAAS,uBAAuB,GAAG;AAAE,aAAO,KAAK,EAAE,aAAa,IAAI,EAAE,SAAS,EAAE;AAAA,IAAG;AACpF,QAAME,eAAN,MAAkB;AAAA,MAAlB;AACE,uCAAU,CAAC;AAAA;AAAA,MACX,IAAI,KAAK;AACP,YAAI,eAAe,aAAa,SAAS;AACvC,kBAAQ,GAAG,cAAc,eAAe,KAAK,SAAS,GAAG;AAAA,QAC3D;AACA,gBAAQ,GAAG,cAAc,UAAU,KAAK,SAAS,GAAG;AAAA,MACtD;AAAA,MACA,IAAI,WAAW;AAEb,YAAI;AACJ,YAAI,KAAK,QAAQ,WAAW,GAAG;AAC7B,cAAI;AAAA,QACN,OAAO;AACL,eAAK,GAAG,cAAc,kBAAkB,KAAK,SAAS,UAAU,GAAG;AACnE,cAAI,MAAM,IAAI;AAEZ,gBAAI,KAAK,QAAQ;AAAA,UACnB,OAAO;AAEL,mBAAO,IAAI,KAAK,QAAQ,WAAW,GAAG,KAAK,SAAS,KAAK,QAAQ,CAAC,EAAE,KAAK,UAAU,GAAG,MAAM,GAAG;AAC7F,mBAAK,GAAG,KAAK,SAAS,KAAK,QAAQ,CAAC,EAAE,OAAO,UAAU,KAAK,MAAM,IAAI;AAEpE;AAAA,cACF;AACA,mBAAK;AAAA,YACP;AAAA,UACF;AAAA,QACF;AACA,aAAK,QAAQ,OAAO,GAAG,GAAG,SAAS;AAAA,MACrC;AAAA,MACA,OAAO,KAAK;AACV,cAAM,iBAAiB,CAAC;AACxB,cAAM,UAAU,eAAe,aAAa;AAC5C,eAAO,MAAM;AACX,gBAAM,MAAM,WAAW,GAAG,cAAc,oBAAoB,KAAK,SAAS,GAAG,KAAK,GAAG,cAAc,eAAe,KAAK,SAAS,GAAG;AACnI,cAAI,QAAQ,IAAI;AACd;AAAA,UACF;AACA,yBAAe,KAAK,KAAK,QAAQ,GAAG,CAAC;AACrC,eAAK,QAAQ,OAAO,KAAK,CAAC;AAAA,QAC5B;AACA,eAAO;AAAA,MACT;AAAA,MACA,cAAc,KAAK;AACjB,cAAM,QAAQ,eAAe,aAAa,UAAU,MAAM,aAAa,QAAQ,KAAK,GAAG;AACvF,cAAM,iBAAiB,CAAC;AACxB,aAAK,UAAU,KAAK,QAAQ,OAAO,YAAU;AAC3C,gBAAM,eAAe,MAAM,SAAS,OAAO,KAAK;AAChD,cAAI,cAAc;AAChB,2BAAe,KAAK,MAAM;AAAA,UAC5B;AACA,iBAAO,CAAC;AAAA,QACV,CAAC;AACD,eAAO;AAAA,MACT;AAAA,MACA,QAAQ;AACN,cAAM,iBAAiB,KAAK,QAAQ,MAAM;AAC1C,aAAK,UAAU,CAAC;AAChB,eAAO;AAAA,MACT;AAAA,MACA,OAAO,OAAO,YAAY,QAAQ;AAChC,eAAO;AAAA,UACL,CAAC,OAAO,QAAQ,GAAG,MAAM;AACvB,gBAAI;AACJ,gBAAI,cAAc,QAAQ;AACxB,kBAAI;AACJ,kBAAI,UAAU,UAAa,MAAM,UAAU,QAAW;AACpD,uBAAO,KAAK,QAAQ,CAAC,MAAM,QAAW;AACpC,wBAAM,aAAa,GAAG,KAAK,SAAS,KAAK,QAAQ,CAAC,EAAE,KAAK,MAAM,KAAK;AACpE,sBAAI,cAAc,KAAK,cAAc,KAAK,CAAC,MAAM,WAAW;AAC1D;AAAA,kBACF;AACA,uBAAK;AAAA,gBACP;AAAA,cACF;AAAA,YACF,OAAO;AACL,kBAAI,KAAK,QAAQ,SAAS;AAC1B,kBAAI,UAAU,UAAa,MAAM,UAAU,QAAW;AACpD,uBAAO,KAAK,QAAQ,CAAC,MAAM,QAAW;AACpC,wBAAM,aAAa,GAAG,KAAK,SAAS,KAAK,QAAQ,CAAC,EAAE,KAAK,MAAM,KAAK;AACpE,sBAAI,cAAc,MAAM,cAAc,KAAK,CAAC,MAAM,WAAW;AAC3D;AAAA,kBACF;AACA,uBAAK;AAAA,gBACP;AAAA,cACF;AAAA,YACF;AACA,mBAAO;AAAA,cACL,MAAM,MAAM;AACV,oBAAI;AACJ,oBAAI;AACJ,oBAAI,cAAc,QAAQ;AACxB,0BAAQ,KAAK,QAAQ,CAAC;AACtB,yBAAO,KAAK,KAAK,QAAQ;AACzB,uBAAK;AACL,sBAAI,CAAC,QAAQ,UAAU,UAAa,MAAM,UAAU,QAAW;AAC7D,0BAAM,aAAa,GAAG,KAAK,SAAS,MAAM,KAAK,MAAM,KAAK;AAC1D,2BAAO,cAAc,KAAK,cAAc,KAAK,MAAM;AACnD,wBAAI,MAAM;AACR,8BAAQ;AAAA,oBACV;AAAA,kBACF;AAAA,gBACF,OAAO;AACL,0BAAQ,KAAK,QAAQ,CAAC;AACtB,yBAAO,IAAI;AACX,uBAAK;AACL,sBAAI,CAAC,QAAQ,UAAU,UAAa,MAAM,UAAU,QAAW;AAC7D,0BAAM,aAAa,GAAG,KAAK,SAAS,MAAM,KAAK,MAAM,KAAK;AAC1D,2BAAO,cAAc,MAAM,cAAc,KAAK,MAAM;AACpD,wBAAI,MAAM;AACR,8BAAQ;AAAA,oBACV;AAAA,kBACF;AAAA,gBACF;AAKA,uBAAO;AAAA,kBACL;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,QAAI,WAAWF,SAAQ,UAAUE;AACjC,IAAAD,QAAO,UAAUD,SAAQ;AAAA;AAAA;;;AC5IzB;AAAA,qGAAAG,UAAAC,SAAA;AAAA;AAEA,WAAO,eAAeD,UAAS,cAAc;AAAA,MAC3C,OAAO;AAAA,IACT,CAAC;AACD,IAAAA,SAAQ,UAAU;AAClB,QAAI,UAAU;AACd,QAAI,cAAc,uBAAuB,oBAA0B;AACnE,QAAI,eAAe,uBAAuB,qBAA2B;AACrE,QAAI,cAAc,uBAAuB,oBAA0B;AACnE,aAAS,uBAAuB,GAAG;AAAE,aAAO,KAAK,EAAE,aAAa,IAAI,EAAE,SAAS,EAAE;AAAA,IAAG;AAEpF,QAAME,SAAN,MAAY;AAAA,MAMV,YAAY,gBAAgB,MAAM,SAAS,YAAY,QAAQ;AAL/D,uCAAU;AAGV;AAAA;AAAA,2CAAc;AACd,uCAAU,IAAI,aAAa,QAAQ;AAEjC,aAAK,iBAAiB;AACtB,aAAK,OAAO;AACZ,aAAK,UAAU;AACf,aAAK,aAAa;AAClB,aAAK,SAAS;AAAA,MAChB;AAAA;AAAA,MAGA,OAAO,KAAK;AACV,cAAM,SAAS,KAAK,QAAQ,IAAI,GAAG;AACnC,eAAO,WAAW,SAAY,OAAO,QAAQ;AAAA,MAC/C;AAAA;AAAA,MAGA,WAAW,OAAO,OAAO;AACvB,YAAI,UAAU,UAAa,UAAU,GAAG;AACtC,kBAAQ;AAAA,QACV;AACA,cAAM,UAAU,CAAC;AACjB,mBAAW,UAAU,KAAK,QAAQ,OAAO,KAAK,GAAG;AAC/C,kBAAQ,KAAK,gBAAgB,OAAO,KAAK,CAAC;AAC1C,cAAI,QAAQ,UAAU,OAAO;AAC3B;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA;AAAA,MAGA,SAAS,KAAK;AACZ,cAAM,SAAS,KAAK,QAAQ,IAAI,GAAG;AACnC,eAAO,WAAW,SAAY,KAAK,eAAe,SAAS,OAAO,KAAK,IAAI;AAAA,MAC7E;AAAA;AAAA,MAGA,aAAa,OAAO,OAAO;AACzB,YAAI,UAAU,UAAa,UAAU,GAAG;AACtC,kBAAQ;AAAA,QACV;AACA,cAAM,UAAU,CAAC;AACjB,mBAAW,UAAU,KAAK,QAAQ,OAAO,KAAK,GAAG;AAC/C,kBAAQ,KAAK,KAAK,eAAe,SAAS,OAAO,KAAK,CAAC;AACvD,cAAI,QAAQ,UAAU,OAAO;AAC3B;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA;AAAA,MAGA,YAAY,WAAW;AACrB,YAAI;AACJ,YAAI;AACF,sBAAY,GAAG,YAAY,SAAS,KAAK,SAAS,UAAU,KAAK,EAAE;AAAA,QACrE,SAAS,KAAK;AACZ,cAAI,IAAI,SAAS,aAAa;AAE5B;AAAA,UACF;AACA,gBAAM;AAAA,QACR;AACA,YAAI,CAAC,KAAK,cAAc,CAAC,MAAM,QAAQ,QAAQ,GAAG;AAChD,cAAI;AACF,aAAC,GAAG,YAAY,SAAS,QAAQ;AAAA,UACnC,SAAS,GAAG;AACV;AAAA,UACF;AAAA,QACF,OAAO;AAGL,gBAAM,OAAO,CAAC;AACd,qBAAW,QAAQ,UAAU;AAC3B,gBAAI,KAAK,QAAQ,IAAI,IAAI,GAAG;AAC1B,kBAAI;AACF,qBAAK,MAAM,GAAG,YAAY,SAAS,IAAI,CAAC;AAAA,cAC1C,SAAS,KAAK;AAAA,cAEd;AAAA,YACF;AAAA,UACF;AACA,qBAAW;AAAA,QACb;AACA,YAAI,CAAC,KAAK,cAAc,CAAC,MAAM,QAAQ,QAAQ,GAAG;AAChD,cAAI,KAAK,QAAQ;AACf,kBAAM,iBAAiB,KAAK,QAAQ,IAAI,QAAQ;AAChD,gBAAI,gBAAgB;AAClB,oBAAM,IAAI,QAAQ,gBAAgB;AAAA,YACpC;AAAA,UACF;AAAA,QACF,OAAO;AACL,cAAI,KAAK,QAAQ;AACf,uBAAW,sBAAsB,UAAU;AACzC,oBAAM,iBAAiB,KAAK,QAAQ,IAAI,kBAAkB;AAC1D,kBAAI,gBAAgB;AAClB,sBAAM,IAAI,QAAQ,gBAAgB;AAAA,cACpC;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA,YAAI,CAAC,KAAK,cAAc,CAAC,MAAM,QAAQ,QAAQ,GAAG;AAChD,eAAK,QAAQ,IAAI;AAAA,YACf,KAAK;AAAA,YACL,OAAO,UAAU;AAAA,UACnB,CAAC;AAAA,QACH,OAAO;AACL,qBAAW,sBAAsB,UAAU;AACzC,iBAAK,QAAQ,IAAI;AAAA,cACf,KAAK;AAAA,cACL,OAAO,UAAU;AAAA,YACnB,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,MACA,WAAW,aAAa;AACtB,YAAI,KAAK,aAAa;AACpB,gBAAM,IAAI,MAAM,2BAA2B;AAAA,QAC7C;AACA,oBAAY,kBAAkB;AAAA,UAC5B,WAAW,MAAM;AACf,gBAAI;AAEF,yBAAW,UAAU,KAAK,eAAe,QAAQ,OAAO,GAAG;AACzD,qBAAK,YAAY,MAAM;AAAA,cACzB;AACA,mBAAK,cAAc;AAAA,YACrB,SAAS,KAAK;AAEZ,0BAAY,OAAO,IAAI,IAAI;AAAA,YAC7B;AAAA,UACF;AAAA,UACA,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA,MACA,MAAM,OAAO;AACX,YAAI,QAAQ;AAGZ,mBAAW,UAAU,KAAK,QAAQ,OAAO,KAAK,GAAG;AAC/C,mBAAS;AAAA,QACX;AACA,eAAO;AAAA,MACT;AAAA,IACF;AACA,QAAI,WAAWF,SAAQ,UAAUE;AACjC,IAAAD,QAAO,UAAUD,SAAQ;AAAA;AAAA;;;ACnKzB;AAAA,+GAAAG,UAAAC,SAAA;AAAA;AAEA,WAAO,eAAeD,UAAS,cAAc;AAAA,MAC3C,OAAO;AAAA,IACT,CAAC;AACD,IAAAA,SAAQ,UAAU;AAElB,QAAME,mBAAkB,CAAC,SAAS,WAAW;AAG3C,UAAI,YAAY,UAAa,YAAY,QAAQ,OAAO,YAAY,YAAY,QAAQ,aAAa,WAAW,WAAW,CAAC,MAAM,QAAQ,OAAO,IAAI;AACnJ,kBAAU,QAAQ,SAAS;AAAA,MAC7B;AACA,UAAI,OAAO,YAAY,UAAU;AAC/B,YAAI,YAAY,MAAM,WAAW,UAAU;AACzC;AAAA,QACF;AACA,YAAI;AAGF,gBAAM;AAAA;AAAA,YAEN;AAAA;AACA,cAAI,QAAQ,UAAU,KAAK,qBAAqB,KAAK,OAAO,GAAG;AAC7D;AAAA,UACF;AAAA,QACF,SAAS,KAAK;AACZ,gBAAM,IAAI,YAAY,IAAI,OAAO;AAAA,QACnC;AACA,YAAI,QAAQ,QAAQ,GAAG,KAAK,GAAG;AAC7B,gBAAM,IAAI,YAAY,wEAAwE;AAAA,QAChG;AAAA,MACF;AACA,UAAI,MAAM,QAAQ,OAAO,KAAK,QAAQ,SAAS,GAAG;AAChD,YAAI,QAAQ;AAEV,gBAAM,IAAI,YAAY,oEAAoE;AAAA,QAC5F;AACA,mBAAW,QAAQ,SAAS;AAC1B,UAAAA,iBAAgB,MAAM,OAAO;AAAA,QAC/B;AACA;AAAA,MACF,WAAW,OAAO,YAAY,YAAY,QAAQ,QAAQ,GAAG,KAAK,GAAG;AACnE,kBAAU,QAAQ,MAAM,GAAG;AAC3B,mBAAW,QAAQ,SAAS;AAC1B,UAAAA,iBAAgB,MAAM,QAAQ;AAAA,QAChC;AACA;AAAA,MACF;AACA,YAAM,IAAI,YAAY;AAAA,IACxB;AACA,QAAI,WAAWF,SAAQ,UAAUE;AACjC,IAAAD,QAAO,UAAUD,SAAQ;AAAA;AAAA;;;ACpDzB;AAAA,0GAAAG,UAAAC,SAAA;AAAA;AAEA,WAAO,eAAeD,UAAS,cAAc;AAAA,MAC3C,OAAO;AAAA,IACT,CAAC;AACD,IAAAA,SAAQ,UAAU;AAClB,QAAI,aAAa,uBAAuB,mBAAyB;AACjE,QAAI,sBAAsB,uBAAuB,4BAAkC;AACnF,QAAI,YAAY,uBAAuB,kBAAwB;AAC/D,QAAI,eAAe,uBAAuB,qBAA2B;AACrE,QAAI,cAAc,uBAAuB,oBAA0B;AACnE,QAAI,gBAAgB,uBAAuB,sBAAgC;AAC3E,QAAI,gBAAgB,uBAAuB,sBAAgC;AAC3E,QAAI,UAAU;AACd,QAAI,cAAc,uBAAuB,oBAA8B;AACvE,QAAI,qBAAqB,uBAAuB,2BAAqC;AACrF,QAAI,SAAS,uBAAuB,eAAyB;AAC7D,QAAI,mBAAmB,uBAAuB,yBAAmC;AACjF,QAAI,cAAc,uBAAuB,oBAA8B;AACvE,QAAI,mBAAmB,uBAAuB,yBAAmC;AACjF,aAAS,uBAAuB,GAAG;AAAE,aAAO,KAAK,EAAE,aAAa,IAAI,EAAE,SAAS,EAAE;AAAA,IAAG;AACpF,QAAME,4BAA2B,iBAAe;AAC9C,UAAI,YAAY,gBAAgB,SAAS;AACvC,cAAM,IAAI,QAAQ,kBAAkB;AAAA,MACtC;AACA,UAAI,YAAY,YAAY,WAAW,UAAU;AAC/C,cAAM,IAAI,QAAQ,yBAAyB;AAAA,MAC7C;AAAA,IACF;AACA,QAAMC,qBAAoB,CAAC,aAAa,OAAO,QAAQ;AACrD,MAAAD,0BAAyB,WAAW;AACpC,UAAI,YAAY,YAAY,SAAS,YAAY;AAC/C,cAAM,IAAI,QAAQ,cAAc;AAAA,MAClC;AACA,UAAI,YAAY,YAAY,MAAM;AAChC,YAAI,QAAQ,QAAW;AACrB,gBAAM,IAAI,QAAQ,UAAU;AAAA,QAC9B;AAAA,MACF;AACA,YAAM,QAAQ,gBAAgB,KAAK;AACnC,UAAI,YAAY,YAAY,MAAM;AAChC,cAAM,WAAW,GAAG,YAAY,SAAS,YAAY,SAAS,KAAK;AACnE,YAAI,QAAQ,SAAS,SAAS;AAC5B,WAAC,GAAG,YAAY,SAAS,QAAQ,GAAG;AAAA,QACtC,OAAO;AACL,cAAI,CAAC,YAAY,gBAAgB,cAAc;AAC7C,kBAAM,IAAI,QAAQ,UAAU;AAAA,UAC9B,WAAW,EAAE,GAAG,cAAc,SAAS,YAAY,SAAS,KAAK,GAAG;AAClE,kBAAM,IAAI,QAAQ,UAAU;AAAA,UAC9B;AAAA,QACF;AAAA,MACF;AACA,UAAI,YAAY,YAAY,QAAQ,YAAY,gBAAgB,iBAAiB,QAAQ,QAAQ,QAAW;AAC1G,cAAM,IAAI,QAAQ,UAAU;AAAA,MAC9B;AACA,UAAI,QAAQ,QAAW;AACrB,eAAO,GAAG,YAAY,SAAS,GAAG;AAAA,MACpC;AACA,aAAO;AAAA,QACL;AAAA,QACA,OAAO;AAAA,MACT;AAAA,IACF;AAGA,QAAME,kBAAN,MAAqB;AAAA,MAEnB,YAAY,aAAa,gBAAgB;AADzC,6CAAgB,oBAAI,IAAI;AAEtB,aAAK,kBAAkB;AACvB,aAAK,QAAQ,eAAe;AAC5B,aAAK,UAAU,eAAe;AAC9B,aAAK,gBAAgB,eAAe;AACpC,aAAK,cAAc;AACnB,aAAK,aAAa,IAAI,mBAAmB,QAAQ,GAAG,MAAM,KAAK,eAAe,WAAW,KAAK,CAAC,EAAE,KAAK,CAAC;AAAA,MACzG;AAAA,MACA,IAAI,OAAO;AACT,eAAO,KAAK;AAAA,MACd;AAAA;AAAA,MAGA,IAAI,KAAK,MAAM;AACb,cAAM,cAAc,KAAK;AACzB,YAAI,CAAC,YAAY,GAAG,kCAAkC;AACpD,gBAAM,IAAI,QAAQ,kBAAkB;AAAA,QACtC;AACA,QAAAF,0BAAyB,IAAI;AAC7B,eAAO,OAAO,IAAI;AAClB,YAAI,SAAS,KAAK,OAAO;AACvB;AAAA,QACF;AACA,YAAI,KAAK,gBAAgB,YAAY,gBAAgB,IAAI,IAAI,GAAG;AAC9D,gBAAM,IAAI,QAAQ,gBAAgB;AAAA,QACpC;AACA,cAAM,UAAU,KAAK;AACrB,cAAM,sBAAsB,CAAC,GAAG,YAAY,GAAG,gBAAgB;AAC/D,aAAK,QAAQ;AACb,aAAK,gBAAgB,OAAO;AAC5B,aAAK,YAAY,mBAAmB,OAAO,OAAO;AAClD,aAAK,YAAY,mBAAmB,IAAI,MAAM,IAAI;AAClD,aAAK,gBAAgB,YAAY,gBAAgB,OAAO,OAAO;AAC/D,aAAK,gBAAgB,YAAY,gBAAgB,IAAI,MAAM,KAAK,eAAe;AAC/E,oBAAY,GAAG,mBAAmB,IAAI,mBAAmB,QAAQ,GAAG,MAAM,KAAK,KAAK,gBAAgB,YAAY,gBAAgB,KAAK,CAAC,EAAE,OAAO,qBAAmB;AAChK,gBAAM,cAAc,KAAK,gBAAgB,YAAY,gBAAgB,IAAI,eAAe;AACxF,iBAAO,eAAe,CAAC,YAAY;AAAA,QACrC,CAAC,EAAE,KAAK,CAAC;AACT,cAAM,WAAW,IAAI,IAAI,YAAY,MAAM;AAC3C,cAAM,iCAAiC,CAAC,GAAG,YAAY,gBAAgB;AACvE,aAAK,YAAY,OAAO,OAAO,OAAO;AACtC,oBAAY,OAAO,IAAI,IAAI;AAC3B,oBAAY,mBAAmB,IAAI,mBAAmB,QAAQ,GAAG,MAAM,KAAK,YAAY,MAAM,EAAE,KAAK,CAAC;AACtG,oBAAY,aAAa,KAAK,MAAM;AAClC,eAAK,QAAQ;AACb,eAAK,gBAAgB,OAAO;AAC5B,eAAK,YAAY,mBAAmB,OAAO,IAAI;AAC/C,eAAK,YAAY,mBAAmB,IAAI,SAAS,IAAI;AACrD,eAAK,gBAAgB,YAAY,gBAAgB,OAAO,IAAI;AAC5D,eAAK,gBAAgB,YAAY,gBAAgB,IAAI,SAAS,KAAK,eAAe;AAClF,sBAAY,GAAG,mBAAmB,IAAI,mBAAmB,QAAQ,GAAG,mBAAmB;AACvF,sBAAY,SAAS;AACrB,sBAAY,mBAAmB,IAAI,mBAAmB,QAAQ,GAAG,8BAA8B;AAAA,QACjG,CAAC;AAAA,MACH;AAAA,MACA,IAAI,OAAO,KAAK;AACd,YAAI,UAAU,WAAW,GAAG;AAC1B,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,cAAM,SAASC,mBAAkB,MAAM,OAAO,GAAG;AACjD,eAAO,KAAK,YAAY,kBAAkB;AAAA,UACxC,WAAW,KAAK,gBAAgB,YAAY,KAAK,KAAK,iBAAiB,QAAQ,OAAO,KAAK,YAAY,YAAY;AAAA,UACnH,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA,MACA,IAAI,OAAO,KAAK;AACd,YAAI,UAAU,WAAW,GAAG;AAC1B,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,cAAM,SAASA,mBAAkB,MAAM,OAAO,GAAG;AACjD,eAAO,KAAK,YAAY,kBAAkB;AAAA,UACxC,WAAW,KAAK,gBAAgB,YAAY,KAAK,KAAK,iBAAiB,QAAQ,MAAM,KAAK,YAAY,YAAY;AAAA,UAClH,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA,MACA,OAAO,KAAK;AACV,YAAI,UAAU,WAAW,GAAG;AAC1B,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,QAAAD,0BAAyB,IAAI;AAC7B,YAAI,KAAK,YAAY,SAAS,YAAY;AACxC,gBAAM,IAAI,QAAQ,cAAc;AAAA,QAClC;AACA,YAAI,EAAE,eAAe,aAAa,UAAU;AAC1C,iBAAO,GAAG,YAAY,SAAS,GAAG;AAAA,QACpC;AACA,eAAO,KAAK,YAAY,kBAAkB;AAAA,UACxC,WAAW,KAAK,gBAAgB,aAAa,KAAK,KAAK,iBAAiB,KAAK,KAAK,YAAY,YAAY;AAAA,UAC1G,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA,MACA,IAAI,KAAK;AACP,YAAI,UAAU,WAAW,GAAG;AAC1B,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,QAAAA,0BAAyB,IAAI;AAC7B,YAAI,EAAE,eAAe,aAAa,UAAU;AAC1C,iBAAO,GAAG,YAAY,SAAS,GAAG;AAAA,QACpC;AACA,eAAO,KAAK,YAAY,kBAAkB;AAAA,UACxC,WAAW,KAAK,gBAAgB,SAAS,KAAK,KAAK,iBAAiB,GAAG;AAAA,UACvE,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA;AAAA,MAGA,OAAO,OAAO,OAAO;AACnB,YAAI,UAAU,SAAS,KAAK,UAAU,QAAW;AAC/C,mBAAS,GAAG,cAAc,SAAS,OAAO,eAAe;AAAA,QAC3D;AACA,QAAAA,0BAAyB,IAAI;AAC7B,cAAM,SAAS,GAAG,iBAAiB,SAAS,KAAK;AACjD,eAAO,KAAK,YAAY,kBAAkB;AAAA,UACxC,WAAW,KAAK,gBAAgB,aAAa,KAAK,KAAK,iBAAiB,OAAO,KAAK;AAAA,UACpF,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA;AAAA,MAGA,OAAO,KAAK;AACV,YAAI,UAAU,WAAW,GAAG;AAC1B,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,QAAAA,0BAAyB,IAAI;AAC7B,YAAI,EAAE,eAAe,aAAa,UAAU;AAC1C,iBAAO,GAAG,YAAY,SAAS,GAAG;AAAA,QACpC;AACA,eAAO,KAAK,YAAY,kBAAkB;AAAA,UACxC,WAAW,KAAK,gBAAgB,OAAO,KAAK,KAAK,iBAAiB,GAAG;AAAA,UACrE,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA;AAAA,MAGA,WAAW,OAAO,OAAO;AACvB,YAAI,UAAU,SAAS,KAAK,UAAU,QAAW;AAC/C,mBAAS,GAAG,cAAc,SAAS,OAAO,eAAe;AAAA,QAC3D;AACA,QAAAA,0BAAyB,IAAI;AAC7B,cAAM,SAAS,GAAG,iBAAiB,SAAS,KAAK;AACjD,eAAO,KAAK,YAAY,kBAAkB;AAAA,UACxC,WAAW,KAAK,gBAAgB,WAAW,KAAK,KAAK,iBAAiB,OAAO,KAAK;AAAA,UAClF,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA,MACA,QAAQ;AACN,QAAAA,0BAAyB,IAAI;AAC7B,YAAI,KAAK,YAAY,SAAS,YAAY;AACxC,gBAAM,IAAI,QAAQ,cAAc;AAAA,QAClC;AACA,eAAO,KAAK,YAAY,kBAAkB;AAAA,UACxC,WAAW,KAAK,gBAAgB,MAAM,KAAK,KAAK,iBAAiB,KAAK,YAAY,YAAY;AAAA,UAC9F,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA,MACA,WAAW,OAAO,WAAW;AAC3B,QAAAA,0BAAyB,IAAI;AAC7B,YAAI,UAAU,MAAM;AAClB,kBAAQ;AAAA,QACV;AACA,YAAI,UAAU,UAAa,EAAE,iBAAiB,aAAa,UAAU;AACnE,kBAAQ,aAAa,QAAQ,MAAM,GAAG,YAAY,SAAS,KAAK,CAAC;AAAA,QACnE;AACA,cAAM,UAAU,IAAI,YAAY,QAAQ;AACxC,gBAAQ,SAAS;AACjB,gBAAQ,cAAc,KAAK;AAC3B,cAAM,SAAS,IAAI,oBAAoB,QAAQ,MAAM,OAAO,WAAW,OAAO;AAC9E,eAAO,KAAK,YAAY,kBAAkB;AAAA,UACxC,WAAW,OAAO,SAAS,KAAK,MAAM;AAAA,UACtC;AAAA,UACA,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA,MACA,cAAc,OAAO,WAAW;AAC9B,QAAAA,0BAAyB,IAAI;AAC7B,YAAI,UAAU,MAAM;AAClB,kBAAQ;AAAA,QACV;AACA,YAAI,UAAU,UAAa,EAAE,iBAAiB,aAAa,UAAU;AACnE,kBAAQ,aAAa,QAAQ,MAAM,GAAG,YAAY,SAAS,KAAK,CAAC;AAAA,QACnE;AACA,cAAM,UAAU,IAAI,YAAY,QAAQ;AACxC,gBAAQ,SAAS;AACjB,gBAAQ,cAAc,KAAK;AAC3B,cAAM,SAAS,IAAI,WAAW,QAAQ,MAAM,OAAO,WAAW,SAAS,IAAI;AAC3E,eAAO,KAAK,YAAY,kBAAkB;AAAA,UACxC,WAAW,OAAO,SAAS,KAAK,MAAM;AAAA,UACtC;AAAA,UACA,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA;AAAA;AAAA,MAIA,YAAY,MAAM,SAAS,qBAAqB,CAAC,GAAG;AAClD,YAAI,UAAU,SAAS,GAAG;AACxB,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,cAAM,aAAa,mBAAmB,eAAe,SAAY,mBAAmB,aAAa;AACjG,cAAM,SAAS,mBAAmB,WAAW,SAAY,mBAAmB,SAAS;AACrF,YAAI,KAAK,YAAY,SAAS,iBAAiB;AAC7C,gBAAM,IAAI,QAAQ,kBAAkB;AAAA,QACtC;AACA,QAAAA,0BAAyB,IAAI;AAC7B,YAAI,KAAK,WAAW,SAAS,IAAI,GAAG;AAClC,gBAAM,IAAI,QAAQ,gBAAgB;AAAA,QACpC;AACA,SAAC,GAAG,iBAAiB,SAAS,OAAO;AACrC,YAAI,MAAM,QAAQ,OAAO,KAAK,YAAY;AACxC,gBAAM,IAAI,QAAQ,mBAAmB;AAAA,QACvC;AASA,cAAM,aAAa,CAAC,GAAG,KAAK,UAAU;AACtC,aAAK,YAAY,aAAa,KAAK,MAAM;AACvC,gBAAM,SAAS,KAAK,gBAAgB,WAAW,IAAI,IAAI;AACvD,cAAI,QAAQ;AACV,mBAAO,UAAU;AAAA,UACnB;AACA,eAAK,aAAa,IAAI,mBAAmB,QAAQ,GAAG,UAAU;AAC9D,eAAK,gBAAgB,WAAW,OAAO,IAAI;AAAA,QAC7C,CAAC;AACD,cAAM,QAAQ,IAAI,OAAO,QAAQ,KAAK,iBAAiB,MAAM,SAAS,YAAY,MAAM;AACxF,aAAK,WAAW,MAAM,IAAI;AAC1B,aAAK,WAAW,MAAM;AACtB,aAAK,gBAAgB,WAAW,IAAI,MAAM,KAAK;AAC/C,cAAM,WAAW,KAAK,WAAW;AAEjC,eAAO,IAAI,UAAU,QAAQ,MAAM,KAAK;AAAA,MAC1C;AAAA;AAAA,MAGA,MAAM,MAAM;AACV,YAAI,UAAU,WAAW,GAAG;AAC1B,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,YAAI,KAAK,gBAAgB,WAAW,KAAK,YAAY,WAAW,YAAY;AAC1E,gBAAM,IAAI,QAAQ,kBAAkB;AAAA,QACtC;AACA,cAAM,QAAQ,KAAK,cAAc,IAAI,IAAI;AACzC,YAAI,UAAU,QAAW;AACvB,iBAAO;AAAA,QACT;AACA,cAAM,WAAW,KAAK,gBAAgB,WAAW,IAAI,IAAI;AACzD,YAAI,CAAC,KAAK,WAAW,SAAS,IAAI,KAAK,aAAa,QAAW;AAC7D,gBAAM,IAAI,QAAQ,cAAc;AAAA,QAClC;AACA,cAAM,SAAS,IAAI,UAAU,QAAQ,MAAM,QAAQ;AACnD,aAAK,cAAc,IAAI,MAAM,MAAM;AACnC,eAAO;AAAA,MACT;AAAA,MACA,YAAY,MAAM;AAChB,YAAI,UAAU,WAAW,GAAG;AAC1B,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,YAAI,KAAK,YAAY,SAAS,iBAAiB;AAC7C,gBAAM,IAAI,QAAQ,kBAAkB;AAAA,QACtC;AACA,QAAAA,0BAAyB,IAAI;AAC7B,cAAM,WAAW,KAAK,gBAAgB,WAAW,IAAI,IAAI;AACzD,YAAI,aAAa,QAAW;AAC1B,gBAAM,IAAI,QAAQ,cAAc;AAAA,QAClC;AACA,aAAK,YAAY,aAAa,KAAK,MAAM;AACvC,mBAAS,UAAU;AACnB,eAAK,gBAAgB,WAAW,IAAI,MAAM,QAAQ;AAClD,eAAK,WAAW,MAAM,IAAI;AAC1B,eAAK,WAAW,MAAM;AAAA,QACxB,CAAC;AACD,aAAK,aAAa,IAAI,mBAAmB,QAAQ,GAAG,MAAM,KAAK,KAAK,UAAU,EAAE,OAAO,eAAa;AAClG,iBAAO,cAAc;AAAA,QACvB,CAAC,CAAC;AACF,iBAAS,UAAU;AAEnB,aAAK,YAAY,kBAAkB;AAAA,UACjC,WAAW,MAAM;AACf,kBAAM,YAAY,KAAK,gBAAgB,WAAW,IAAI,IAAI;AAI1D,gBAAI,aAAa,WAAW;AAC1B,mBAAK,gBAAgB,WAAW,OAAO,IAAI;AAAA,YAC7C;AAAA,UACF;AAAA,UACA,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA;AAAA,MAGA,MAAM,KAAK;AACT,QAAAA,0BAAyB,IAAI;AAC7B,YAAI,QAAQ,MAAM;AAChB,gBAAM;AAAA,QACR;AACA,YAAI,QAAQ,UAAa,EAAE,eAAe,aAAa,UAAU;AAC/D,gBAAM,aAAa,QAAQ,MAAM,GAAG,YAAY,SAAS,GAAG,CAAC;AAAA,QAC/D;AACA,eAAO,KAAK,YAAY,kBAAkB;AAAA,UACxC,WAAW,MAAM;AACf,mBAAO,KAAK,gBAAgB,MAAM,GAAG;AAAA,UACvC;AAAA,UACA,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA,MACA,WAAW;AACT,eAAO;AAAA,MACT;AAAA,IACF;AACA,QAAI,WAAWF,SAAQ,UAAUI;AACjC,IAAAH,QAAO,UAAUD,SAAQ;AAAA;AAAA;;;AC9XzB;AAAA,yGAAAK,UAAAC,SAAA;AAAA;AAEA,WAAO,eAAeD,UAAS,cAAc;AAAA,MAC3C,OAAO;AAAA,IACT,CAAC;AACD,IAAAA,SAAQ,UAAU;AAClB,QAAME,SAAN,MAAY;AAAA,MAmBV,YAAY,MAAM,gBAAgB,CAAC,GAAG;AAlBtC,yCAAY,CAAC;AACb,oCAAO;AACP,+CAAkB;AAClB,yCAAY;AACZ,8CAAiB;AAGjB;AAAA,kDAAqB;AACrB,2DAA8B;AAC9B,wCAAW;AACX,2CAAc;AACd,0CAAa;AACb,sCAAS;AACT,6CAAgB;AAChB,0CAAa;AACb,gDAAmB;AACnB,yCAAY;AACZ,yCAAY,KAAK,IAAI;AAEnB,aAAK,OAAO;AACZ,aAAK,UAAU,cAAc,YAAY,SAAY,cAAc,UAAU;AAC7E,aAAK,aAAa,cAAc,eAAe,SAAY,cAAc,aAAa;AAAA,MACxF;AAAA,MACA,iBAAiB;AACf,YAAI,KAAK,YAAY;AACnB,eAAK,WAAW;AAAA,QAClB;AAAA,MACF;AAAA,MACA,kBAAkB;AAChB,aAAK,qBAAqB;AAAA,MAC5B;AAAA,MACA,2BAA2B;AACzB,aAAK,qBAAqB;AAC1B,aAAK,8BAA8B;AAAA,MACrC;AAAA,IACF;AACA,QAAI,WAAWF,SAAQ,UAAUE;AACjC,IAAAD,QAAO,UAAUD,SAAQ;AAAA;AAAA;;;AC5CzB;AAAA,0GAAAG,UAAA;AAAA;AAEA,WAAO,eAAeA,UAAS,cAAc;AAAA,MAC3C,OAAO;AAAA,IACT,CAAC;AACD,IAAAA,SAAQ,YAAY;AAWpB,aAASC,4BAA2B;AAClC,UAAI,OAAO,cAAc,eAAe,QAAQ,KAAK,UAAU,SAAS,GAAG;AACzE,cAAM,gCAAgC,KAAK;AAC3C,eAAO,IAAI,8BAA8B,qBAAqB,EAAE;AAAA,MAClE,OAAO;AACL,eAAO;AAAA,MACT;AAAA,IACF;AAQA,QAAMC,aAAY,QAAM;AACtB,YAAM,eAAe,WAAW,gBAAgBD,0BAAyB,MAAM,CAAAE,QAAM,WAAWA,KAAI,CAAC;AACrG,mBAAa,EAAE;AAAA,IACjB;AACA,IAAAH,SAAQ,YAAYE;AAAA;AAAA;;;ACnCpB;AAAA,0GAAAE,UAAAC,SAAA;AAAA;AAEA,WAAO,eAAeD,UAAS,cAAc;AAAA,MAC3C,OAAO;AAAA,IACT,CAAC;AACD,IAAAA,SAAQ,UAAU;AAClB,QAAI,kBAAkB,uBAAuB,wBAA8B;AAC3E,QAAI,cAAc,uBAAuB,oBAA0B;AACnE,QAAI,UAAU;AACd,QAAI,qBAAqB,uBAAuB,2BAAqC;AACrF,QAAI,aAAa,uBAAuB,mBAA6B;AACrE,QAAI,mBAAmB,uBAAuB,yBAAmC;AACjF,QAAI,cAAc;AAClB,aAAS,uBAAuB,GAAG;AAAE,aAAO,KAAK,EAAE,aAAa,IAAI,EAAE,SAAS,EAAE;AAAA,IAAG;AAEpF,QAAME,kBAAN,cAA6B,iBAAiB,QAAQ;AAAA,MAUpD,YAAY,YAAY,MAAM,IAAI;AAChC,cAAM;AAVR,sCAAS;AACT,wCAAW;AACX,4CAAe,CAAC;AAChB,kDAAqB,oBAAI,IAAI;AAC7B,qCAAQ;AACR,uCAAU;AACV,0CAAa;AACb,uCAAU;AACV,yCAAY,CAAC;AAGX,aAAK,SAAS,IAAI,IAAI,UAAU;AAChC,aAAK,OAAO;AACZ,aAAK,KAAK;AACV,aAAK,mBAAmB,IAAI,mBAAmB,QAAQ,GAAG,MAAM,KAAK,KAAK,MAAM,EAAE,KAAK,CAAC;AAAA,MAC1F;AAAA;AAAA,MAGA,OAAO,SAAS;AACd,mBAAW,KAAK,KAAK,aAAa,QAAQ,GAAG;AAC3C,YAAE;AAAA,QACJ;AACA,YAAI,YAAY,MAAM;AACpB,gBAAM,IAAI,IAAI,aAAa,QAAW,OAAO;AAC7C,eAAK,QAAQ;AAAA,QACf;AAGA,mBAAW;AAAA,UACT;AAAA,QACF,KAAK,KAAK,WAAW;AACnB,cAAI,QAAQ,eAAe,QAAQ;AACjC,oBAAQ,aAAa;AACrB,gBAAI,QAAQ,QAAQ;AAClB,sBAAQ,SAAS;AACjB,sBAAQ,QAAQ,IAAI,QAAQ,WAAW;AACvC,oBAAM,QAAQ,IAAI,WAAW,QAAQ,SAAS;AAAA,gBAC5C,SAAS;AAAA,gBACT,YAAY;AAAA,cACd,CAAC;AACD,oBAAM,YAAY,CAAC,KAAK,IAAI,IAAI;AAChC,sBAAQ,cAAc,KAAK;AAAA,YAC7B;AAAA,UACF;AAAA,QACF;AACA,SAAC,GAAG,YAAY,WAAW,MAAM;AAC/B,gBAAM,QAAQ,IAAI,WAAW,QAAQ,SAAS;AAAA,YAC5C,SAAS;AAAA,YACT,YAAY;AAAA,UACd,CAAC;AACD,gBAAM,YAAY,CAAC,KAAK,EAAE;AAC1B,eAAK,cAAc,KAAK;AAAA,QAC1B,CAAC;AACD,aAAK,SAAS;AAAA,MAChB;AAAA,MACA,QAAQ;AACN,YAAI,KAAK,WAAW,gBAAgB,KAAK,WAAW,YAAY;AAC9D,gBAAM,IAAI,QAAQ,kBAAkB;AAAA,QACtC;AACA,aAAK,SAAS;AACd,aAAK,OAAO,IAAI;AAAA,MAClB;AAAA;AAAA,MAGA,YAAY,MAAM;AAChB,YAAI,KAAK,WAAW,UAAU;AAC5B,gBAAM,IAAI,QAAQ,kBAAkB;AAAA,QACtC;AACA,cAAM,cAAc,KAAK,mBAAmB,IAAI,IAAI;AACpD,YAAI,gBAAgB,QAAW;AAC7B,iBAAO;AAAA,QACT;AACA,cAAM,iBAAiB,KAAK,GAAG,aAAa,gBAAgB,IAAI,IAAI;AACpE,YAAI,CAAC,KAAK,OAAO,IAAI,IAAI,KAAK,mBAAmB,QAAW;AAC1D,gBAAM,IAAI,QAAQ,cAAc;AAAA,QAClC;AACA,cAAM,eAAe,IAAI,gBAAgB,QAAQ,MAAM,cAAc;AACrE,aAAK,mBAAmB,IAAI,MAAM,YAAY;AAC9C,eAAO;AAAA,MACT;AAAA;AAAA,MAGA,kBAAkB,KAAK;AACrB,cAAM,SAAS,IAAI;AACnB,cAAM,YAAY,IAAI;AACtB,YAAI,UAAU,OAAO,OAAO,KAAK,SAAS,IAAI,IAAI,UAAU;AAC5D,YAAI,KAAK,WAAW,UAAU;AAC5B,gBAAM,IAAI,QAAQ,yBAAyB;AAAA,QAC7C;AAGA,YAAI,CAAC,SAAS;AACZ,cAAI,CAAC,QAAQ;AAEX,sBAAU,IAAI,YAAY,QAAQ;AAAA,UACpC,OAAO;AACL,sBAAU,IAAI,YAAY,QAAQ;AAClC,oBAAQ,SAAS;AACjB,oBAAQ,cAAc,OAAO;AAAA,UAC/B;AAAA,QACF;AACA,aAAK,UAAU,KAAK;AAAA,UAClB;AAAA,UACA;AAAA,QACF,CAAC;AACD,eAAO;AAAA,MACT;AAAA,MACA,SAAS;AACP,aAAK,WAAW;AAGhB,YAAI;AACJ,YAAI;AACJ,eAAO,KAAK,UAAU,SAAS,GAAG;AAChC,gBAAM,IAAI,KAAK,UAAU,MAAM;AAG/B,cAAI,KAAK,EAAE,QAAQ,eAAe,QAAQ;AACxC,sBAAU,EAAE;AACZ,wBAAY,EAAE;AACd;AAAA,UACF;AAAA,QACF;AACA,YAAI,WAAW,WAAW;AACxB,cAAI,CAAC,QAAQ,QAAQ;AAGnB,sBAAU;AAAA,UACZ,OAAO;AACL,gBAAI;AACJ,gBAAI;AACJ,gBAAI;AACF,oBAAM,SAAS,UAAU;AACzB,sBAAQ,aAAa;AACrB,sBAAQ,SAAS;AACjB,sBAAQ,QAAQ;AAGhB,kBAAI,KAAK,WAAW,YAAY;AAC9B,qBAAK,SAAS;AAAA,cAChB;AACA,sBAAQ,IAAI,WAAW,QAAQ,WAAW;AAAA,gBACxC,SAAS;AAAA,gBACT,YAAY;AAAA,cACd,CAAC;AAAA,YACH,SAAS,KAAK;AACZ,sBAAQ,aAAa;AACrB,sBAAQ,SAAS;AACjB,sBAAQ,QAAQ;AAGhB,kBAAI,KAAK,WAAW,YAAY;AAC9B,qBAAK,SAAS;AAAA,cAChB;AACA,sBAAQ,IAAI,WAAW,QAAQ,SAAS;AAAA,gBACtC,SAAS;AAAA,gBACT,YAAY;AAAA,cACd,CAAC;AACD,8BAAgB,KAAK,OAAO,KAAK,MAAM,IAAI,IAAI;AAAA,YACjD;AACA,gBAAI;AACF,oBAAM,YAAY,CAAC,KAAK,IAAI,IAAI;AAChC,sBAAQ,cAAc,KAAK;AAAA,YAC7B,SAAS,KAAK;AACZ,kBAAI,KAAK,WAAW,cAAc;AAChC,qBAAK,OAAO,YAAY;AAAA,cAC1B;AACA,oBAAM;AAAA,YACR;AAGA,gBAAI,CAAC,MAAM,UAAU;AACnB,kBAAI,eAAe;AACjB,8BAAc;AAAA,cAChB;AAAA,YACF;AAAA,UACF;AAGA,WAAC,GAAG,YAAY,WAAW,KAAK,OAAO,KAAK,IAAI,CAAC;AACjD;AAAA,QACF;AAGA,YAAI,KAAK,WAAW,YAAY;AAE9B,eAAK,SAAS;AACd,cAAI,CAAC,KAAK,OAAO;AACf,kBAAM,QAAQ,IAAI,WAAW,QAAQ,UAAU;AAC/C,iBAAK,cAAc,KAAK;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAAA,MACA,SAAS;AACP,YAAI,KAAK,WAAW,UAAU;AAC5B,gBAAM,IAAI,QAAQ,kBAAkB;AAAA,QACtC;AACA,aAAK,SAAS;AAAA,MAChB;AAAA,MACA,WAAW;AACT,eAAO;AAAA,MACT;AAAA,IACF;AACA,QAAI,WAAWF,SAAQ,UAAUE;AACjC,IAAAD,QAAO,UAAUD,SAAQ;AAAA;AAAA;;;AC5NzB;AAAA,4GAAAG,UAAAC,SAAA;AAAA;AAEA,WAAO,eAAeD,UAAS,cAAc;AAAA,MAC3C,OAAO;AAAA,IACT,CAAC;AACD,IAAAA,SAAQ,UAAU;AAClB,QAAI,UAAU;AACd,QAAME,WAAU;AAChB,QAAMC,gBAAN,MAAmB;AAAA,MAAnB;AAEE;AAAA,mCAAM;AAAA;AAAA,MACN,OAAO;AACL,YAAI,KAAK,OAAOD,UAAS;AACvB,gBAAM,IAAI,QAAQ,gBAAgB;AAAA,QACpC;AACA,aAAK,OAAO;AACZ,eAAO,KAAK;AAAA,MACd;AAAA;AAAA,MAGA,YAAY,KAAK;AACf,cAAM,QAAQ,KAAK,MAAM,KAAK,IAAI,KAAKA,QAAO,CAAC,IAAI;AACnD,YAAI,SAAS,KAAK,KAAK;AACrB,eAAK,MAAM,QAAQ;AAAA,QACrB;AAAA,MACF;AAAA,IACF;AACA,QAAI,WAAWF,SAAQ,UAAUG;AACjC,IAAAF,QAAO,UAAUD,SAAQ;AAAA;AAAA;;;AC5BzB;AAAA,2GAAAI,UAAAC,SAAA;AAAA;AAEA,WAAO,eAAeD,UAAS,cAAc;AAAA,MAC3C,OAAO;AAAA,IACT,CAAC;AACD,IAAAA,SAAQ,UAAU;AAClB,QAAI,UAAU;AACd,QAAI,cAAc,uBAAuB,oBAA0B;AACnE,QAAI,gBAAgB,uBAAuB,sBAA4B;AACvE,QAAI,eAAe,uBAAuB,qBAA2B;AACrE,aAAS,uBAAuB,GAAG;AAAE,aAAO,KAAK,EAAE,aAAa,IAAI,EAAE,SAAS,EAAE;AAAA,IAAG;AAEpF,QAAME,eAAN,MAAkB;AAAA,MAIhB,YAAY,aAAa,MAAM,SAAS,eAAe;AAHvD,uCAAU;AACV,uCAAU,IAAI,aAAa,QAAQ;AACnC,0CAAa,oBAAI,IAAI;AAEnB,aAAK,cAAc;AACnB,aAAK,eAAe,kBAAkB,OAAO,IAAI,cAAc,QAAQ,IAAI;AAC3E,aAAK,UAAU;AACf,aAAK,OAAO;AACZ,aAAK,UAAU;AACf,aAAK,gBAAgB;AAAA,MACvB;AAAA;AAAA,MAGA,OAAO,KAAK;AACV,cAAM,SAAS,KAAK,QAAQ,IAAI,GAAG;AACnC,eAAO,WAAW,SAAY,gBAAgB,OAAO,GAAG,IAAI;AAAA,MAC9D;AAAA;AAAA,MAGA,WAAW,OAAO,OAAO;AACvB,YAAI,UAAU,UAAa,UAAU,GAAG;AACtC,kBAAQ;AAAA,QACV;AACA,cAAM,UAAU,CAAC;AACjB,mBAAW,UAAU,KAAK,QAAQ,OAAO,KAAK,GAAG;AAC/C,kBAAQ,KAAK,gBAAgB,OAAO,GAAG,CAAC;AACxC,cAAI,QAAQ,UAAU,OAAO;AAC3B;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA;AAAA,MAGA,SAAS,KAAK;AACZ,cAAM,SAAS,KAAK,QAAQ,IAAI,GAAG;AACnC,eAAO,WAAW,SAAY,gBAAgB,OAAO,KAAK,IAAI;AAAA,MAChE;AAAA;AAAA,MAGA,aAAa,OAAO,OAAO;AACzB,YAAI,UAAU,UAAa,UAAU,GAAG;AACtC,kBAAQ;AAAA,QACV;AACA,cAAM,UAAU,CAAC;AACjB,mBAAW,UAAU,KAAK,QAAQ,OAAO,KAAK,GAAG;AAC/C,kBAAQ,KAAK,gBAAgB,OAAO,KAAK,CAAC;AAC1C,cAAI,QAAQ,UAAU,OAAO;AAC3B;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA;AAAA,MAGA,YAAY,WAAW,aAAa,aAAa;AAC/C,YAAI,KAAK,YAAY,MAAM;AACzB,gBAAM,OAAO,GAAG,YAAY,SAAS,KAAK,SAAS,UAAU,KAAK,EAAE;AACpE,cAAI,QAAQ,QAAW;AACrB,sBAAU,MAAM;AAAA,UAClB;AAAA,QACF;AACA,YAAI,KAAK,iBAAiB,QAAQ,UAAU,QAAQ,QAAW;AAC7D,cAAI,aAAa;AACf,kBAAM,qBAAqB,KAAK,aAAa;AAC7C,wBAAY,KAAK,MAAM;AACrB,kBAAI,KAAK,cAAc;AACrB,qBAAK,aAAa,MAAM;AAAA,cAC1B;AAAA,YACF,CAAC;AAAA,UACH;AACA,oBAAU,MAAM,KAAK,aAAa,KAAK;AAIvC,cAAI,KAAK,YAAY,MAAM;AACzB,gBAAI,MAAM,QAAQ,KAAK,OAAO,GAAG;AAC/B,oBAAM,IAAI,MAAM,uEAAuE;AAAA,YACzF;AACA,gBAAI,mBAAmB,KAAK;AAC5B,gBAAI,SAAS,UAAU;AACvB,gBAAI;AACJ,gBAAI,IAAI;AACR,mBAAO,KAAK,GAAG;AACb,kBAAI,OAAO,WAAW,UAAU;AAC9B,sBAAM,IAAI,QAAQ,UAAU;AAAA,cAC9B;AACA,kBAAI,iBAAiB,QAAQ,GAAG;AAChC,kBAAI,KAAK,GAAG;AACV,6BAAa,iBAAiB,MAAM,GAAG,CAAC;AACxC,mCAAmB,iBAAiB,MAAM,IAAI,CAAC;AAC/C,oBAAI,CAAC,OAAO,OAAO,QAAQ,UAAU,GAAG;AACtC,yBAAO,UAAU,IAAI,CAAC;AAAA,gBACxB;AACA,yBAAS,OAAO,UAAU;AAAA,cAC5B;AAAA,YACF;AACA,yBAAa;AACb,mBAAO,UAAU,IAAI,UAAU;AAAA,UACjC;AAAA,QACF,WAAW,KAAK,iBAAiB,QAAQ,OAAO,UAAU,QAAQ,UAAU;AAC1E,eAAK,aAAa,YAAY,UAAU,GAAG;AAAA,QAC7C;AACA,cAAM,iBAAiB,KAAK,QAAQ,IAAI,UAAU,GAAG;AACrD,YAAI,gBAAgB;AAClB,cAAI,aAAa;AACf,kBAAM,IAAI,QAAQ,gBAAgB;AAAA,UACpC;AACA,eAAK,aAAa,UAAU,KAAK,WAAW;AAAA,QAC9C;AACA,aAAK,QAAQ,IAAI,SAAS;AAC1B,YAAI,aAAa;AACf,sBAAY,KAAK,MAAM;AACrB,iBAAK,aAAa,UAAU,GAAG;AAAA,UACjC,CAAC;AAAA,QACH;AAGA,mBAAW,YAAY,KAAK,WAAW,OAAO,GAAG;AAC/C,cAAI,SAAS,aAAa;AACxB,qBAAS,YAAY,SAAS;AAAA,UAChC;AAAA,QACF;AACA,eAAO,UAAU;AAAA,MACnB;AAAA;AAAA,MAGA,aAAa,KAAK,aAAa;AAC7B,cAAM,iBAAiB,KAAK,QAAQ,OAAO,GAAG;AAC9C,YAAI,aAAa;AACf,qBAAW,UAAU,gBAAgB;AACnC,wBAAY,KAAK,MAAM;AACrB,mBAAK,YAAY,QAAQ,IAAI;AAAA,YAC/B,CAAC;AAAA,UACH;AAAA,QACF;AACA,mBAAW,YAAY,KAAK,WAAW,OAAO,GAAG;AAC/C,mBAAS,QAAQ,cAAc,GAAG;AAAA,QACpC;AAAA,MACF;AAAA;AAAA,MAGA,MAAM,aAAa;AACjB,cAAM,iBAAiB,KAAK,QAAQ,MAAM;AAC1C,YAAI,aAAa;AACf,qBAAW,UAAU,gBAAgB;AACnC,wBAAY,KAAK,MAAM;AACrB,mBAAK,YAAY,QAAQ,IAAI;AAAA,YAC/B,CAAC;AAAA,UACH;AAAA,QACF;AACA,mBAAW,YAAY,KAAK,WAAW,OAAO,GAAG;AAC/C,mBAAS,QAAQ,MAAM;AAAA,QACzB;AAAA,MACF;AAAA,MACA,MAAM,OAAO;AACX,YAAI,QAAQ;AAGZ,mBAAW,UAAU,KAAK,QAAQ,OAAO,KAAK,GAAG;AAC/C,mBAAS;AAAA,QACX;AACA,eAAO;AAAA,MACT;AAAA,IACF;AACA,QAAI,WAAWF,SAAQ,UAAUE;AACjC,IAAAD,QAAO,UAAUD,SAAQ;AAAA;AAAA;;;ACnLzB;AAAA,uGAAAG,UAAAC,SAAA;AAAA;AAEA,WAAO,eAAeD,UAAS,cAAc;AAAA,MAC3C,OAAO;AAAA,IACT,CAAC;AACD,IAAAA,SAAQ,UAAU;AAClB,QAAI,kBAAkB,uBAAuB,wBAA8B;AAC3E,QAAI,UAAU;AACd,QAAI,qBAAqB,uBAAuB,2BAAqC;AACrF,QAAI,mBAAmB,uBAAuB,yBAAmC;AACjF,QAAI,eAAe,uBAAuB,qBAA+B;AACzE,QAAI,cAAc;AAClB,QAAI,mBAAmB,uBAAuB,yBAAmC;AACjF,aAAS,uBAAuB,GAAG;AAAE,aAAO,KAAK,EAAE,aAAa,IAAI,EAAE,SAAS,EAAE;AAAA,IAAG;AACpF,QAAME,yCAAwC,cAAY;AACxD,UAAI,CAAC,SAAS,kCAAkC;AAC9C,cAAM,IAAI,QAAQ,kBAAkB;AAAA,MACtC;AAGA,YAAM,eAAe,SAAS,aAAa,aAAa,OAAO,QAAM;AACnE,eAAO,GAAG,SAAS;AAAA,MACrB,CAAC;AACD,YAAM,cAAc,aAAa,aAAa,SAAS,CAAC;AACxD,UAAI,CAAC,eAAe,YAAY,WAAW,YAAY;AACrD,cAAM,IAAI,QAAQ,kBAAkB;AAAA,MACtC;AACA,UAAI,YAAY,WAAW,UAAU;AACnC,cAAM,IAAI,QAAQ,yBAAyB;AAAA,MAC7C;AACA,aAAO;AAAA,IACT;AAGA,QAAMC,mBAAkB,gBAAc;AACpC,iBAAW,gBAAgB;AAC3B,YAAM,uBAAuB,WAAW,aAAa,aAAa,MAAM,iBAAe;AACrF,eAAO,YAAY,WAAW;AAAA,MAChC,CAAC;AACD,UAAI,sBAAsB;AACxB,mBAAW,UAAU;AACrB,mBAAW,aAAa,cAAc,WAAW,aAAa,YAAY,OAAO,qBAAmB;AAClG,iBAAO,eAAe;AAAA,QACxB,CAAC;AAAA,MACH,OAAO;AACL,SAAC,GAAG,YAAY,WAAW,MAAM;AAC/B,UAAAA,iBAAgB,UAAU;AAAA,QAC5B,CAAC;AAAA,MACH;AAAA,IACF;AAGA,QAAMC,eAAN,cAA0B,iBAAiB,QAAQ;AAAA,MAIjD,YAAY,aAAa;AACvB,cAAM;AAJR,6CAAgB;AAChB,uCAAU;AACV,gEAAmC;AAGjC,aAAK,eAAe;AACpB,aAAK,aAAa,YAAY,KAAK,IAAI;AACvC,aAAK,OAAO,YAAY;AACxB,aAAK,UAAU,YAAY;AAC3B,aAAK,mBAAmB,IAAI,mBAAmB,QAAQ,GAAG,MAAM,KAAK,YAAY,gBAAgB,KAAK,CAAC,EAAE,KAAK,CAAC;AAAA,MACjH;AAAA;AAAA,MAGA,kBAAkB,MAAM,UAAU,CAAC,GAAG;AACpC,YAAI,SAAS,QAAW;AACtB,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,cAAM,cAAcF,uCAAsC,IAAI;AAC9D,cAAM,UAAU,YAAY,QAAQ,QAAQ,YAAY,SAAY,QAAQ,UAAU;AACtF,cAAM,gBAAgB,YAAY,QAAQ,QAAQ,kBAAkB,SAAY,QAAQ,gBAAgB;AACxG,YAAI,YAAY,MAAM;AACpB,WAAC,GAAG,iBAAiB,SAAS,OAAO;AAAA,QACvC;AACA,YAAI,KAAK,aAAa,gBAAgB,IAAI,IAAI,GAAG;AAC/C,gBAAM,IAAI,QAAQ,gBAAgB;AAAA,QACpC;AACA,YAAI,kBAAkB,YAAY,MAAM,MAAM,QAAQ,OAAO,IAAI;AAC/D,gBAAM,IAAI,QAAQ,mBAAmB;AAAA,QACvC;AACA,cAAM,mBAAmB,CAAC,GAAG,KAAK,gBAAgB;AAClD,oBAAY,aAAa,KAAK,MAAM;AAClC,gBAAM,cAAc,KAAK,aAAa,gBAAgB,IAAI,IAAI;AAC9D,cAAI,aAAa;AACf,wBAAY,UAAU;AAAA,UACxB;AACA,eAAK,mBAAmB,IAAI,mBAAmB,QAAQ,GAAG,gBAAgB;AAC1E,sBAAY,OAAO,OAAO,IAAI;AAC9B,eAAK,aAAa,gBAAgB,OAAO,IAAI;AAAA,QAC/C,CAAC;AACD,cAAM,iBAAiB,IAAI,aAAa,QAAQ,KAAK,cAAc,MAAM,SAAS,aAAa;AAC/F,aAAK,iBAAiB,MAAM,IAAI;AAChC,aAAK,iBAAiB,MAAM;AAC5B,oBAAY,OAAO,IAAI,IAAI;AAC3B,aAAK,aAAa,gBAAgB,IAAI,MAAM,cAAc;AAC1D,oBAAY,mBAAmB,IAAI,mBAAmB,QAAQ,GAAG,KAAK,gBAAgB;AACtF,eAAO,YAAY,YAAY,IAAI;AAAA,MACrC;AAAA,MACA,kBAAkB,MAAM;AACtB,YAAI,SAAS,QAAW;AACtB,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,cAAM,cAAcA,uCAAsC,IAAI;AAC9D,cAAM,QAAQ,KAAK,aAAa,gBAAgB,IAAI,IAAI;AACxD,YAAI,UAAU,QAAW;AACvB,gBAAM,IAAI,QAAQ,cAAc;AAAA,QAClC;AACA,aAAK,mBAAmB,IAAI,mBAAmB,QAAQ,GAAG,MAAM,KAAK,KAAK,gBAAgB,EAAE,OAAO,qBAAmB;AACpH,iBAAO,oBAAoB;AAAA,QAC7B,CAAC,CAAC;AACF,oBAAY,mBAAmB,IAAI,mBAAmB,QAAQ,GAAG,KAAK,gBAAgB;AACtF,oBAAY,aAAa,KAAK,MAAM;AAClC,gBAAM,UAAU;AAChB,eAAK,aAAa,gBAAgB,IAAI,MAAM,KAAK;AACjD,eAAK,iBAAiB,MAAM,IAAI;AAChC,eAAK,iBAAiB,MAAM;AAAA,QAC9B,CAAC;AACD,cAAM,UAAU;AAChB,aAAK,aAAa,gBAAgB,OAAO,IAAI;AAC7C,oBAAY,mBAAmB,OAAO,IAAI;AAAA,MAC5C;AAAA,MACA,YAAY,YAAY,MAAM;AAC5B,eAAO,SAAS,SAAY,OAAO;AACnC,YAAI,SAAS,cAAc,SAAS,eAAe,SAAS,iBAAiB;AAC3E,gBAAM,IAAI,UAAU,mBAAmB,IAAI;AAAA,QAC7C;AACA,cAAM,yBAAyB,KAAK,aAAa,aAAa,KAAK,iBAAe;AAChF,iBAAO,YAAY,WAAW,YAAY,YAAY,SAAS,mBAAmB,YAAY,OAAO;AAAA,QACvG,CAAC;AACD,YAAI,wBAAwB;AAC1B,gBAAM,IAAI,QAAQ,kBAAkB;AAAA,QACtC;AACA,YAAI,KAAK,eAAe;AACtB,gBAAM,IAAI,QAAQ,kBAAkB;AAAA,QACtC;AACA,YAAI,CAAC,MAAM,QAAQ,UAAU,GAAG;AAC9B,uBAAa,CAAC,UAAU;AAAA,QAC1B;AACA,YAAI,WAAW,WAAW,KAAK,SAAS,iBAAiB;AACvD,gBAAM,IAAI,QAAQ,mBAAmB;AAAA,QACvC;AACA,mBAAW,aAAa,YAAY;AAClC,cAAI,CAAC,KAAK,iBAAiB,SAAS,SAAS,GAAG;AAC9C,kBAAM,IAAI,QAAQ,cAAc,0BAA0B,YAAY,mBAAmB;AAAA,UAC3F;AAAA,QACF;AACA,cAAM,KAAK,IAAI,gBAAgB,QAAQ,YAAY,MAAM,IAAI;AAC7D,aAAK,aAAa,aAAa,KAAK,EAAE;AACtC,aAAK,aAAa,oBAAoB;AAEtC,eAAO;AAAA,MACT;AAAA,MACA,QAAQ;AACN,QAAAC,iBAAgB,IAAI;AAAA,MACtB;AAAA,MACA,WAAW;AACT,eAAO;AAAA,MACT;AAAA,IACF;AACA,QAAI,WAAWH,SAAQ,UAAUI;AACjC,IAAAH,QAAO,UAAUD,SAAQ;AAAA;AAAA;;;AClKzB;AAAA,4GAAAK,UAAAC,SAAA;AAAA;AAEA,WAAO,eAAeD,UAAS,cAAc;AAAA,MAC3C,OAAO;AAAA,IACT,CAAC;AACD,IAAAA,SAAQ,UAAU;AAClB,QAAI,cAAc,uBAAuB,oBAA0B;AACnE,aAAS,uBAAuB,GAAG;AAAE,aAAO,KAAK,EAAE,aAAa,IAAI,EAAE,SAAS,EAAE;AAAA,IAAG;AACpF,QAAME,oBAAN,cAA+B,YAAY,QAAQ;AAAA,MAAnD;AAAA;AACE,+CAAkB;AAClB,yCAAY;AAAA;AAAA,MACZ,WAAW;AACT,eAAO;AAAA,MACT;AAAA,IACF;AACA,QAAI,WAAWF,SAAQ,UAAUE;AACjC,IAAAD,QAAO,UAAUD,SAAQ;AAAA;AAAA;;;AChBzB;AAAA,iHAAAG,UAAAC,SAAA;AAAA;AAEA,WAAO,eAAeD,UAAS,cAAc;AAAA,MAC3C,OAAO;AAAA,IACT,CAAC;AACD,IAAAA,SAAQ,UAAU;AAClB,QAAI,aAAa,uBAAuB,mBAA6B;AACrE,aAAS,uBAAuB,GAAG;AAAE,aAAO,KAAK,EAAE,aAAa,IAAI,EAAE,SAAS,EAAE;AAAA,IAAG;AACpF,QAAME,yBAAN,cAAoC,WAAW,QAAQ;AAAA,MACrD,YAAY,MAAM,aAAa,CAAC,GAAG;AACjC,cAAM,IAAI;AACV,aAAK,aAAa,WAAW,eAAe,SAAY,WAAW,aAAa;AAChF,aAAK,aAAa,WAAW,eAAe,SAAY,WAAW,aAAa;AAAA,MAClF;AAAA,MACA,WAAW;AACT,eAAO;AAAA,MACT;AAAA,IACF;AACA,QAAI,WAAWF,SAAQ,UAAUE;AACjC,IAAAD,QAAO,UAAUD,SAAQ;AAAA;AAAA;;;ACnBzB;AAAA,wGAAAG,UAAAC,SAAA;AAAA;AAEA,WAAO,eAAeD,UAAS,cAAc;AAAA,MAC3C,OAAO;AAAA,IACT,CAAC;AACD,IAAAA,SAAQ,UAAU;AAClB,QAAI,cAAc;AAElB,QAAME,YAAN,MAAe;AAAA,MAKb,YAAY,MAAM,SAAS;AAJ3B,6CAAgB;AAChB,4CAAe,CAAC;AAChB,+CAAkB,oBAAI,IAAI;AAC1B,2CAAc,CAAC;AAEb,aAAK,OAAO;AACZ,aAAK,UAAU;AACf,aAAK,sBAAsB,KAAK,oBAAoB,KAAK,IAAI;AAAA,MAC/D;AAAA,MACA,sBAAsB;AACpB,SAAC,GAAG,YAAY,WAAW,MAAM;AAC/B,gBAAM,aAAa,KAAK,aAAa,KAAK,iBAAe;AACvD,mBAAO,YAAY,YAAY,YAAY,WAAW;AAAA,UACxD,CAAC;AACD,cAAI,CAAC,YAAY;AACf,kBAAM,OAAO,KAAK,aAAa,KAAK,iBAAe;AACjD,qBAAO,CAAC,YAAY,YAAY,YAAY,WAAW;AAAA,YACzD,CAAC;AACD,gBAAI,MAAM;AACR,mBAAK,iBAAiB,YAAY,KAAK,mBAAmB;AAC1D,mBAAK,iBAAiB,SAAS,KAAK,mBAAmB;AACvD,mBAAK,OAAO;AAAA,YACd;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AACA,QAAI,WAAWF,SAAQ,UAAUE;AACjC,IAAAD,QAAO,UAAUD,SAAQ;AAAA;AAAA;;;ACrCzB;AAAA,sGAAAG,UAAAC,SAAA;AAAA;AAEA,WAAO,eAAeD,UAAS,cAAc;AAAA,MAC3C,OAAO;AAAA,IACT,CAAC;AACD,IAAAA,SAAQ,UAAU;AAClB,QAAI,eAAe,uBAAuB,qBAA2B;AACrE,QAAI,oBAAoB,uBAAuB,0BAAgC;AAC/E,QAAI,yBAAyB,uBAAuB,+BAAqC;AACzF,QAAI,OAAO,uBAAuB,aAAuB;AACzD,QAAI,YAAY,uBAAuB,kBAA4B;AACnE,QAAI,gBAAgB,uBAAuB,sBAAgC;AAC3E,QAAI,UAAU;AACd,QAAI,aAAa,uBAAuB,mBAA6B;AACrE,QAAI,cAAc;AAClB,aAAS,uBAAuB,GAAG;AAAE,aAAO,KAAK,EAAE,aAAa,IAAI,EAAE,SAAS,EAAE;AAAA,IAAG;AACpF,QAAME,6BAA4B,CAAC,WAAW,MAAM,eAAe,OAAO;AACxE,YAAM,UAAU,cAAc,KAAK,CAAAC,mBAAiB;AAClD,eAAO,CAACA,eAAc,WAAW,CAACA,eAAc;AAAA,MAClD,CAAC;AACD,UAAI,SAAS;AACX,SAAC,GAAG,YAAY,WAAW,MAAMD,2BAA0B,WAAW,MAAM,eAAe,EAAE,CAAC;AAC9F;AAAA,MACF;AACA,gBAAU,OAAO,IAAI;AACrB,SAAG,IAAI;AAAA,IACT;AAGA,QAAME,kBAAiB,CAAC,WAAW,MAAM,SAAS,OAAO;AACvD,UAAI;AACF,cAAM,KAAK,UAAU,IAAI,IAAI;AAC7B,YAAI,OAAO,QAAW;AACpB,aAAG,IAAI;AACP;AAAA,QACF;AACA,WAAG,gBAAgB;AACnB,cAAM,gBAAgB,GAAG,YAAY,OAAO,gBAAc;AACxD,iBAAO,CAAC,WAAW,WAAW,CAAC,WAAW;AAAA,QAC5C,CAAC;AACD,mBAAWD,kBAAiB,eAAe;AACzC,cAAI,CAACA,eAAc,eAAe;AAChC,kBAAM,QAAQ,IAAI,uBAAuB,QAAQ,iBAAiB;AAAA,cAChE,YAAY;AAAA,cACZ,YAAY,GAAG;AAAA,YACjB,CAAC;AACD,YAAAA,eAAc,cAAc,KAAK;AAAA,UACnC;AAAA,QACF;AACA,cAAM,UAAU,cAAc,KAAK,mBAAiB;AAClD,iBAAO,CAAC,cAAc,WAAW,CAAC,cAAc;AAAA,QAClD,CAAC;AACD,YAAI,WAAW,SAAS;AACtB,gBAAM,QAAQ,IAAI,uBAAuB,QAAQ,WAAW;AAAA,YAC1D,YAAY;AAAA,YACZ,YAAY,GAAG;AAAA,UACjB,CAAC;AACD,kBAAQ,cAAc,KAAK;AAAA,QAC7B;AACA,QAAAD,2BAA0B,WAAW,MAAM,eAAe,EAAE;AAAA,MAC9D,SAAS,KAAK;AACZ,WAAG,GAAG;AAAA,MACR;AAAA,IACF;AAGA,QAAMG,+BAA8B,CAAC,YAAY,SAAS,SAAS,OAAO;AACxE,iBAAW,mCAAmC;AAC9C,YAAM,aAAa,WAAW;AAC9B,YAAM,gBAAgB,WAAW,aAAa,YAAY,OAAO,mBAAiB;AAChF,eAAO,eAAe;AAAA,MACxB,CAAC;AACD,iBAAWF,kBAAiB,eAAe;AACzC,YAAI,CAACA,eAAc,WAAW,CAACA,eAAc,eAAe;AAC1D,gBAAM,QAAQ,IAAI,uBAAuB,QAAQ,iBAAiB;AAAA,YAChE,YAAY;AAAA,YACZ;AAAA,UACF,CAAC;AACD,UAAAA,eAAc,cAAc,KAAK;AAAA,QACnC;AAAA,MACF;AACA,YAAM,UAAU,cAAc,KAAK,mBAAiB;AAClD,eAAO,CAAC,cAAc,WAAW,CAAC,cAAc;AAAA,MAClD,CAAC;AACD,UAAI,SAAS;AACX,cAAM,QAAQ,IAAI,uBAAuB,QAAQ,WAAW;AAAA,UAC1D,YAAY;AAAA,UACZ;AAAA,QACF,CAAC;AACD,gBAAQ,cAAc,KAAK;AAAA,MAC7B;AACA,YAAM,sBAAsB,MAAM;AAChC,cAAM,WAAW,cAAc,KAAK,CAAAA,mBAAiB;AACnD,iBAAO,CAACA,eAAc,WAAW,CAACA,eAAc;AAAA,QAClD,CAAC;AACD,YAAI,UAAU;AACZ,WAAC,GAAG,YAAY,WAAW,mBAAmB;AAC9C;AAAA,QACF;AAIA,mBAAW,aAAa,UAAU;AAClC,mBAAW,UAAU;AAGrB,cAAM,cAAc,WAAW,YAAY,WAAW,kBAAkB,eAAe;AACvF,gBAAQ,SAAS;AACjB,gBAAQ,aAAa;AACrB,gBAAQ,cAAc;AACtB,oBAAY,aAAa,KAAK,MAAM;AAClC,qBAAW,aAAa,UAAU;AAClC,qBAAW,UAAU;AAAA,QACvB,CAAC;AACD,cAAM,QAAQ,IAAI,uBAAuB,QAAQ,iBAAiB;AAAA,UAChE,YAAY;AAAA,UACZ;AAAA,QACF,CAAC;AACD,gBAAQ,cAAc,KAAK;AAC3B,oBAAY,iBAAiB,SAAS,MAAM;AAC1C,qBAAW,mCAAmC;AAAA,QAGhD,CAAC;AACD,oBAAY,iBAAiB,SAAS,MAAM;AAC1C,qBAAW,mCAAmC;AAC9C,kBAAQ,cAAc;AACtB,WAAC,GAAG,YAAY,WAAW,MAAM;AAC/B,eAAG,IAAI,QAAQ,WAAW,CAAC;AAAA,UAC7B,CAAC;AAAA,QACH,CAAC;AACD,oBAAY,iBAAiB,YAAY,MAAM;AAC7C,qBAAW,mCAAmC;AAC9C,kBAAQ,cAAc;AAEtB,WAAC,GAAG,YAAY,WAAW,MAAM;AAC/B,gBAAI,WAAW,eAAe;AAC5B,iBAAG,IAAI,QAAQ,WAAW,CAAC;AAAA,YAC7B,OAAO;AACL,iBAAG,IAAI;AAAA,YACT;AAAA,UACF,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AACA,0BAAoB;AAAA,IACtB;AAGA,QAAMG,gBAAe,CAAC,WAAW,MAAM,SAAS,SAAS,OAAO;AAC9D,UAAI,KAAK,UAAU,IAAI,IAAI;AAC3B,UAAI,OAAO,QAAW;AACpB,aAAK,IAAI,UAAU,QAAQ,MAAM,CAAC;AAClC,kBAAU,IAAI,MAAM,EAAE;AAAA,MACxB;AACA,UAAI,YAAY,QAAW;AACzB,kBAAU,GAAG,YAAY,IAAI,GAAG,UAAU;AAAA,MAC5C;AACA,UAAI,GAAG,UAAU,SAAS;AACxB,eAAO,GAAG,IAAI,QAAQ,aAAa,CAAC;AAAA,MACtC;AACA,YAAM,aAAa,IAAI,aAAa,QAAQ,EAAE;AAC9C,UAAI,GAAG,UAAU,SAAS;AACxB,QAAAD,6BAA4B,YAAY,SAAS,SAAS,SAAO;AAC/D,cAAI,KAAK;AAGP,mBAAO,GAAG,GAAG;AAAA,UACf;AACA,aAAG,MAAM,UAAU;AAAA,QACrB,CAAC;AAAA,MACH,OAAO;AACL,WAAG,MAAM,UAAU;AAAA,MACrB;AAAA,IACF;AACA,QAAME,cAAN,MAAiB;AAAA,MAAjB;AACE,mCAAM,KAAK;AACX,0CAAa,oBAAI,IAAI;AAAA;AAAA;AAAA,MAGrB,eAAe,MAAM;AACnB,cAAM,UAAU,IAAI,kBAAkB,QAAQ;AAC9C,gBAAQ,SAAS;AACjB,SAAC,GAAG,YAAY,WAAW,MAAM;AAC/B,gBAAM,KAAK,KAAK,WAAW,IAAI,IAAI;AACnC,gBAAM,aAAa,OAAO,SAAY,GAAG,UAAU;AACnD,UAAAH,gBAAe,KAAK,YAAY,MAAM,SAAS,SAAO;AACpD,gBAAI,KAAK;AACP,sBAAQ,QAAQ,IAAI,aAAa,IAAI,SAAS,IAAI,IAAI;AACtD,sBAAQ,aAAa;AACrB,oBAAM,QAAQ,IAAI,WAAW,QAAQ,SAAS;AAAA,gBAC5C,SAAS;AAAA,gBACT,YAAY;AAAA,cACd,CAAC;AACD,oBAAM,YAAY,CAAC;AACnB,sBAAQ,cAAc,KAAK;AAC3B;AAAA,YACF;AACA,oBAAQ,SAAS;AACjB,oBAAQ,aAAa;AACrB,kBAAM,SAAS,IAAI,uBAAuB,QAAQ,WAAW;AAAA,cAC3D,YAAY;AAAA,cACZ;AAAA,YACF,CAAC;AACD,oBAAQ,cAAc,MAAM;AAAA,UAC9B,CAAC;AAAA,QACH,CAAC;AACD,eAAO;AAAA,MACT;AAAA;AAAA,MAGA,KAAK,MAAM,SAAS;AAClB,YAAI,UAAU,SAAS,KAAK,YAAY,QAAW;AAGjD,qBAAW,GAAG,cAAc,SAAS,SAAS,kBAAkB;AAAA,QAClE;AACA,YAAI,YAAY,GAAG;AACjB,gBAAM,IAAI,UAAU,8BAA8B;AAAA,QACpD;AACA,cAAM,UAAU,IAAI,kBAAkB,QAAQ;AAC9C,gBAAQ,SAAS;AACjB,SAAC,GAAG,YAAY,WAAW,MAAM;AAC/B,UAAAE,cAAa,KAAK,YAAY,MAAM,SAAS,SAAS,CAAC,KAAK,eAAe;AACzE,gBAAI,KAAK;AACP,sBAAQ,SAAS;AACjB,sBAAQ,aAAa;AACrB,sBAAQ,QAAQ,IAAI,aAAa,IAAI,SAAS,IAAI,IAAI;AACtD,oBAAM,QAAQ,IAAI,WAAW,QAAQ,SAAS;AAAA,gBAC5C,SAAS;AAAA,gBACT,YAAY;AAAA,cACd,CAAC;AACD,oBAAM,YAAY,CAAC;AACnB,sBAAQ,cAAc,KAAK;AAC3B;AAAA,YACF;AACA,oBAAQ,SAAS;AACjB,oBAAQ,aAAa;AACrB,kBAAM,SAAS,IAAI,WAAW,QAAQ,SAAS;AAC/C,mBAAO,YAAY,CAAC;AACpB,oBAAQ,cAAc,MAAM;AAAA,UAC9B,CAAC;AAAA,QACH,CAAC;AACD,eAAO;AAAA,MACT;AAAA;AAAA,MAGA,YAAY;AACV,eAAO,IAAI,QAAQ,aAAW;AAC5B,gBAAM,SAAS,CAAC;AAChB,qBAAW,CAAC,MAAM,QAAQ,KAAK,KAAK,YAAY;AAC9C,mBAAO,KAAK;AAAA,cACV;AAAA,cACA,SAAS,SAAS;AAAA,YACpB,CAAC;AAAA,UACH;AACA,kBAAQ,MAAM;AAAA,QAChB,CAAC;AAAA,MACH;AAAA,MACA,WAAW;AACT,eAAO;AAAA,MACT;AAAA,IACF;AACA,QAAI,WAAWN,SAAQ,UAAUO;AACjC,IAAAN,QAAO,UAAUD,SAAQ;AAAA;AAAA;;;ACvQzB;AAAA,yGAAAQ,UAAAC,SAAA;AAAA;AAEA,WAAO,eAAeD,UAAS,cAAc;AAAA,MAC3C,OAAO;AAAA,IACT,CAAC;AACD,IAAAA,SAAQ,UAAU;AAClB,QAAI,cAAc,uBAAuB,oBAA0B;AACnE,aAAS,uBAAuB,GAAG;AAAE,aAAO,KAAK,EAAE,aAAa,IAAI,EAAE,SAAS,EAAE;AAAA,IAAG;AACpF,QAAME,iBAAgB,IAAI,YAAY,QAAQ;AAC9C,QAAI,WAAWF,SAAQ,UAAUE;AACjC,IAAAD,QAAO,UAAUD,SAAQ;AAAA;AAAA;;;ACVzB;AAAA;AAAA;AAAA,QAAMG,iBAAgB;AACtB,QAAMC,aAAY;AAClB,QAAMC,sBAAqB;AAC3B,QAAMC,eAAc;AACpB,QAAMC,cAAa;AACnB,QAAMC,YAAW;AACjB,QAAMC,eAAc;AACpB,QAAMC,kBAAiB;AACvB,QAAMC,oBAAmB;AACzB,QAAMC,cAAa;AACnB,QAAMC,kBAAiB;AACvB,QAAMC,yBAAwB;AAG9B,QAAIC,aACA,OAAO,WAAW,cACZ,SACA,OAAO,sBAAsB,cAC7B,OACA,OAAO,WAAW,cAClB,SACA,SAAS,cAAc,EAAE;AAEnC,IAAAA,WAAU,YAAYZ;AACtB,IAAAY,WAAU,YAAYX;AACtB,IAAAW,WAAU,qBAAqBV;AAC/B,IAAAU,WAAU,cAAcT;AACxB,IAAAS,WAAU,aAAaR;AACvB,IAAAQ,WAAU,WAAWP;AACrB,IAAAO,WAAU,cAAcN;AACxB,IAAAM,WAAU,iBAAiBL;AAC3B,IAAAK,WAAU,mBAAmBJ;AAC7B,IAAAI,WAAU,aAAaH;AACvB,IAAAG,WAAU,iBAAiBF;AAC3B,IAAAE,WAAU,wBAAwBD;AAAA;AAAA;;;AClClC,IAAM,UAYO,YAKA,iBAUA,WAKA,oBAKA,mBAKA,eAKA,eAKA,0BAKA;AAzDb;AAAA;AAAA;AAAA,IAAM,WAAW;AAAA,MACf,YAAY;AAAA,MACZ,iBAAiB;AAAA,MACjB,gBAAgB;AAAA,MAChB,WAAW;AAAA,MACX,oBAAoB;AAAA,MACpB,mBAAmB;AAAA,MACnB,eAAe;AAAA,MACf,eAAe;AAAA,MACf,0BAA0B;AAAA,MAC1B,cAAc;AAAA,IAChB;AACO,IAAM,aAAN,cAAyB,aAAa;AAAA,MAC3C,YAAY,UAAU,SAAS,YAAY;AACzC,cAAM,SAAS,YAAY;AAAA,MAC7B;AAAA,IACF;AACO,IAAM,kBAAN,cAA8B,aAAa;AAAA,MAChD,YAAY,UAAU,SAAS,iBAAiB;AAC9C,cAAM,SAAS,iBAAiB;AAAA,MAClC;AAAA,IACF;AAMO,IAAM,YAAN,cAAwB,aAAa;AAAA,MAC1C,YAAY,UAAU,SAAS,WAAW;AACxC,cAAM,SAAS,WAAW;AAAA,MAC5B;AAAA,IACF;AACO,IAAM,qBAAN,cAAiC,aAAa;AAAA,MACnD,YAAY,UAAU,SAAS,oBAAoB;AACjD,cAAM,SAAS,oBAAoB;AAAA,MACrC;AAAA,IACF;AACO,IAAM,oBAAN,cAAgC,aAAa;AAAA,MAClD,YAAY,UAAU,SAAS,mBAAmB;AAChD,cAAM,SAAS,mBAAmB;AAAA,MACpC;AAAA,IACF;AACO,IAAM,gBAAN,cAA4B,aAAa;AAAA,MAC9C,YAAY,UAAU,SAAS,eAAe;AAC5C,cAAM,SAAS,eAAe;AAAA,MAChC;AAAA,IACF;AACO,IAAM,gBAAN,cAA4B,aAAa;AAAA,MAC9C,YAAY,UAAU,SAAS,eAAe;AAC5C,cAAM,SAAS,eAAe;AAAA,MAChC;AAAA,IACF;AACO,IAAM,2BAAN,cAAuC,aAAa;AAAA,MACzD,YAAY,UAAU,SAAS,0BAA0B;AACvD,cAAM,SAAS,0BAA0B;AAAA,MAC3C;AAAA,IACF;AACO,IAAM,eAAN,cAA2B,aAAa;AAAA,MAC7C,YAAY,UAAU,SAAS,cAAc;AAC3C,cAAM,SAAS,cAAc;AAAA,MAC/B;AAAA,IACF;AAAA;AAAA;;;AC7DA,IAEM,YAoDC;AAtDP;AAAA;AAAA;AAAA;AAEA,IAAM,aAAa,CAAC,OAAO,SAAS;AAClC,UAAI,OAAO,UAAU,UAAU;AAC7B,YAAI,MAAM,KAAK,GAAG;AAChB,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,eAAO;AAAA,MACT,WAAW,OAAO,UAAU,SAAS,KAAK,KAAK,MAAM,iBAAiB;AACpE,cAAM,KAAK,MAAM,QAAQ;AACzB,YAAI,MAAM,EAAE,GAAG;AACb,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,eAAO,IAAI,KAAK,EAAE;AAAA,MACpB,WAAW,OAAO,UAAU,UAAU;AACpC,eAAO;AAAA,MACT,WAAW,iBAAiB,eAAe,OAAO,sBAAsB,eAAe,iBAAiB,qBAAqB,OAAO,gBAAgB,eAAe,YAAY,UAAU,YAAY,OAAO,KAAK,GAAG;AAClN,YAAI;AACJ,YAAI,SAAS;AACb,YAAI,SAAS;AACb,YAAI,iBAAiB,eAAe,OAAO,sBAAsB,eAAe,iBAAiB,mBAAmB;AAClH,wBAAc;AACd,mBAAS,MAAM;AAAA,QACjB,OAAO;AACL,wBAAc,MAAM;AACpB,mBAAS,MAAM;AACf,mBAAS,MAAM;AAAA,QACjB;AACA,YAAI,YAAY,UAAU;AACxB,iBAAO,IAAI,YAAY,CAAC;AAAA,QAC1B;AACA,eAAO,YAAY,MAAM,QAAQ,SAAS,MAAM;AAAA,MAClD,WAAW,MAAM,QAAQ,KAAK,GAAG;AAC/B,YAAI,SAAS,QAAW;AACtB,iBAAO,oBAAI,IAAI;AAAA,QACjB,WAAW,KAAK,IAAI,KAAK,GAAG;AAC1B,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,aAAK,IAAI,KAAK;AACd,cAAM,OAAO,CAAC;AACd,iBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,gBAAM,MAAM,OAAO,OAAO,OAAO,CAAC;AAClC,cAAI,CAAC,KAAK;AACR,kBAAM,IAAI,UAAU;AAAA,UACtB;AACA,gBAAM,QAAQ,MAAM,CAAC;AACrB,gBAAM,MAAM,WAAW,OAAO,IAAI;AAClC,eAAK,KAAK,GAAG;AAAA,QACf;AACA,eAAO;AAAA,MACT,OAAO;AACL,cAAM,IAAI,UAAU;AAAA,MACtB;AAAA,IACF;AACA,IAAO,qBAAQ;AAAA;AAAA;;;ACtDf,IAEM,SAoBA,KAsDC;AA5EP;AAAA;AAAA;AAAA;AACA;AACA,IAAM,UAAU,OAAK;AACnB,UAAI,OAAO,MAAM,UAAU;AACzB,eAAO;AAAA,MACT;AACA,UAAI,OAAO,UAAU,SAAS,KAAK,CAAC,MAAM,iBAAiB;AACzD,eAAO;AAAA,MACT;AACA,UAAI,MAAM,QAAQ,CAAC,GAAG;AACpB,eAAO;AAAA,MACT;AACA,UAAI,OAAO,MAAM,UAAU;AACzB,eAAO;AAAA,MACT;AACA,UAAI,aAAa,aAAa;AAC5B,eAAO;AAAA,MACT;AACA,YAAM,IAAI,UAAU;AAAA,IACtB;AAGA,IAAM,MAAM,CAAC,OAAO,WAAW;AAC7B,UAAI,WAAW,QAAW;AACxB,cAAM,IAAI,UAAU;AAAA,MACtB;AACA,cAAQ,mBAAW,KAAK;AACxB,eAAS,mBAAW,MAAM;AAC1B,YAAM,KAAK,QAAQ,KAAK;AACxB,YAAM,KAAK,QAAQ,MAAM;AACzB,UAAI,OAAO,IAAI;AACb,YAAI,OAAO,SAAS;AAClB,iBAAO;AAAA,QACT;AACA,YAAI,OAAO,aAAa,OAAO,YAAY,OAAO,UAAU,OAAO,WAAW;AAC5E,iBAAO;AAAA,QACT;AACA,YAAI,OAAO,aAAa,OAAO,UAAU,OAAO,WAAW;AACzD,iBAAO;AAAA,QACT;AACA,YAAI,OAAO,UAAU,OAAO,UAAU;AACpC,iBAAO;AAAA,QACT;AACA,eAAO;AAAA,MACT;AACA,UAAI,OAAO,UAAU;AACnB,gBAAQ,IAAI,WAAW,KAAK;AAC5B,iBAAS,IAAI,WAAW,MAAM;AAAA,MAChC;AACA,UAAI,OAAO,WAAW,OAAO,UAAU;AACrC,cAAM,SAAS,KAAK,IAAI,MAAM,QAAQ,OAAO,MAAM;AACnD,iBAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,gBAAM,SAAS,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC;AACtC,cAAI,WAAW,GAAG;AAChB,mBAAO;AAAA,UACT;AAAA,QACF;AACA,YAAI,MAAM,SAAS,OAAO,QAAQ;AAChC,iBAAO;AAAA,QACT;AACA,YAAI,MAAM,SAAS,OAAO,QAAQ;AAChC,iBAAO;AAAA,QACT;AACA,eAAO;AAAA,MACT;AACA,UAAI,OAAO,QAAQ;AACjB,YAAI,MAAM,QAAQ,MAAM,OAAO,QAAQ,GAAG;AACxC,iBAAO;AAAA,QACT;AAAA,MACF,OAAO;AACL,YAAI,UAAU,QAAQ;AACpB,iBAAO;AAAA,QACT;AAAA,MACF;AACA,aAAO,QAAQ,SAAS,IAAI;AAAA,IAC9B;AACA,IAAO,cAAQ;AAAA;AAAA;;;AC5Ef,IAKM,aAiEC;AAtEP;AAAA;AAAA;AAAA;AACA;AACA;AAGA,IAAM,cAAN,MAAM,aAAY;AAAA,MAChB,OAAO,KAAK,OAAO;AACjB,YAAI,UAAU,WAAW,GAAG;AAC1B,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,gBAAQ,mBAAW,KAAK;AACxB,eAAO,IAAI,aAAY,OAAO,OAAO,OAAO,KAAK;AAAA,MACnD;AAAA,MACA,OAAO,WAAW,OAAO,OAAO,OAAO;AACrC,YAAI,UAAU,WAAW,GAAG;AAC1B,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,gBAAQ,mBAAW,KAAK;AACxB,eAAO,IAAI,aAAY,OAAO,QAAW,MAAM,IAAI;AAAA,MACrD;AAAA,MACA,OAAO,WAAW,OAAO,OAAO,OAAO;AACrC,YAAI,UAAU,WAAW,GAAG;AAC1B,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,gBAAQ,mBAAW,KAAK;AACxB,eAAO,IAAI,aAAY,QAAW,OAAO,MAAM,IAAI;AAAA,MACrD;AAAA,MACA,OAAO,MAAM,OAAO,OAAO,YAAY,OAAO,YAAY,OAAO;AAC/D,YAAI,UAAU,SAAS,GAAG;AACxB,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,cAAM,YAAY,YAAI,OAAO,KAAK;AAClC,YAAI,cAAc,KAAK,cAAc,MAAM,aAAa,YAAY;AAClE,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,gBAAQ,mBAAW,KAAK;AACxB,gBAAQ,mBAAW,KAAK;AACxB,eAAO,IAAI,aAAY,OAAO,OAAO,WAAW,SAAS;AAAA,MAC3D;AAAA,MACA,YAAY,OAAO,OAAO,WAAW,WAAW;AAC9C,aAAK,QAAQ;AACb,aAAK,QAAQ;AACb,aAAK,YAAY;AACjB,aAAK,YAAY;AAAA,MACnB;AAAA;AAAA,MAGA,SAAS,KAAK;AACZ,YAAI,UAAU,WAAW,GAAG;AAC1B,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,cAAM,mBAAW,GAAG;AACpB,YAAI,KAAK,UAAU,QAAW;AAC5B,gBAAM,YAAY,YAAI,KAAK,OAAO,GAAG;AACrC,cAAI,cAAc,KAAK,cAAc,KAAK,KAAK,WAAW;AACxD,mBAAO;AAAA,UACT;AAAA,QACF;AACA,YAAI,KAAK,UAAU,QAAW;AAC5B,gBAAM,YAAY,YAAI,KAAK,OAAO,GAAG;AACrC,cAAI,cAAc,MAAM,cAAc,KAAK,KAAK,WAAW;AACzD,mBAAO;AAAA,UACT;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,MACA,WAAW;AACT,eAAO;AAAA,MACT;AAAA,IACF;AACA,IAAO,sBAAQ;AAAA;AAAA;;;ACtEf,IAGM,YA+CC;AAlDP;AAAA;AAAA;AAAA;AAGA,IAAM,aAAa,CAAC,SAAS,UAAU;AACrC,UAAI,MAAM,QAAQ,OAAO,GAAG;AAC1B,cAAM,SAAS,CAAC;AAChB,iBAAS,QAAQ,SAAS;AAGxB,cAAI,SAAS,UAAa,SAAS,QAAQ,OAAO,SAAS,YAAY,KAAK,UAAU;AACpF,mBAAO,KAAK,SAAS;AAAA,UACvB;AACA,gBAAM,MAAM,WAAW,MAAM,KAAK,EAAE;AACpC,iBAAO,KAAK,mBAAW,GAAG,CAAC;AAAA,QAC7B;AACA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,KAAK;AAAA,QACP;AAAA,MACF;AACA,UAAI,YAAY,IAAI;AAClB,eAAO;AAAA,UACL,MAAM;AAAA,UACN,KAAK;AAAA,QACP;AAAA,MACF;AACA,UAAI,mBAAmB;AACvB,UAAI,SAAS;AACb,aAAO,qBAAqB,MAAM;AAChC,YAAI;AACJ,cAAM,IAAI,iBAAiB,QAAQ,GAAG;AACtC,YAAI,KAAK,GAAG;AACV,uBAAa,iBAAiB,MAAM,GAAG,CAAC;AACxC,6BAAmB,iBAAiB,MAAM,IAAI,CAAC;AAAA,QACjD,OAAO;AACL,uBAAa;AACb,6BAAmB;AAAA,QACrB;AACA,YAAI,WAAW,UAAa,WAAW,QAAQ,CAAC,OAAO,OAAO,QAAQ,UAAU,GAAG;AACjF,iBAAO;AAAA,YACL,MAAM;AAAA,UACR;AAAA,QACF;AACA,iBAAS,OAAO,UAAU;AAAA,MAC5B;AACA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,KAAK;AAAA,MACP;AAAA,IACF;AACA,IAAO,qBAAQ;AAAA;AAAA;;;AClDf,IAMM,yBAWA,cAkCA,WAmaC;AAtdP;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA,IAAM,0BAA0B,YAAU;AACxC,UAAI,OAAO,kBAAkB,wBAAgB;AAC3C,eAAO,OAAO;AAAA,MAChB;AACA,aAAO,OAAO,OAAO;AAAA,IACvB;AAMA,IAAM,eAAe,CAAC,OAAO,QAAQ,WAAW;AAE9C,UAAI,QAAQ,UAAU,SAAY,MAAM,QAAQ;AAChD,UAAI,QAAQ,UAAU,SAAY,MAAM,QAAQ;AAGhD,iBAAW,aAAa,QAAQ;AAC9B,YAAI,cAAc,QAAW;AAC3B;AAAA,QACF;AACA,YAAI,UAAU,UAAa,YAAI,OAAO,SAAS,MAAM,GAAG;AACtD,kBAAQ;AAAA,QACV;AAAA,MACF;AACA,iBAAW,aAAa,QAAQ;AAC9B,YAAI,cAAc,QAAW;AAC3B;AAAA,QACF;AACA,YAAI,UAAU,UAAa,YAAI,OAAO,SAAS,MAAM,IAAI;AACvD,kBAAQ;AAAA,QACV;AAAA,MACF;AACA,UAAI,UAAU,UAAa,UAAU,QAAW;AAC9C,eAAO,oBAAY,MAAM,OAAO,KAAK;AAAA,MACvC;AACA,UAAI,UAAU,QAAW;AACvB,eAAO,oBAAY,WAAW,KAAK;AAAA,MACrC;AACA,UAAI,UAAU,QAAW;AACvB,eAAO,oBAAY,WAAW,KAAK;AAAA,MACrC;AAAA,IACF;AAGA,IAAM,YAAN,MAAgB;AAAA,MAOd,YAAY,QAAQ,OAAO,YAAY,QAAQ,SAAS,UAAU,OAAO;AANzE,yCAAY;AACZ;AACA;AAAA;AACA,wCAAW;AACX;AACA;AAEE,aAAK,SAAS;AACd,aAAK,UAAU;AACf,aAAK,aAAa;AAClB,aAAK,WAAW;AAChB,aAAK,WAAW;AAAA,MAClB;AAAA;AAAA,MAGA,IAAI,SAAS;AACX,eAAO,KAAK;AAAA,MACd;AAAA,MACA,IAAI,OAAO,KAAK;AAAA,MAEhB;AAAA,MACA,IAAI,UAAU;AACZ,eAAO,KAAK;AAAA,MACd;AAAA,MACA,IAAI,QAAQ,KAAK;AAAA,MAEjB;AAAA,MACA,IAAI,YAAY;AACd,eAAO,KAAK;AAAA,MACd;AAAA,MACA,IAAI,UAAU,KAAK;AAAA,MAEnB;AAAA,MACA,IAAI,MAAM;AACR,eAAO,KAAK;AAAA,MACd;AAAA,MACA,IAAI,IAAI,KAAK;AAAA,MAEb;AAAA,MACA,IAAI,aAAa;AACf,eAAO,KAAK;AAAA,MACd;AAAA,MACA,IAAI,WAAW,KAAK;AAAA,MAEpB;AAAA;AAAA,MAGA,SAAS,KAAK,YAAY;AACxB,cAAM,sBAAsB,KAAK,kBAAkB;AAGnD,cAAM,UAAU,KAAK,kBAAkB,yBAAiB,KAAK,OAAO,gBAAgB,UAAU,KAAK,OAAO,UAAU;AACpH,YAAI;AACJ,YAAI,KAAK,cAAc,QAAQ;AAC7B,gBAAM,QAAQ,aAAa,KAAK,QAAQ,CAAC,KAAK,KAAK,SAAS,GAAG,CAAC,CAAC;AACjE,qBAAW,UAAU,QAAQ,OAAO,KAAK,GAAG;AAC1C,kBAAM,eAAe,QAAQ,SAAY,YAAI,OAAO,KAAK,GAAG,IAAI;AAChE,kBAAM,oBAAoB,KAAK,cAAc,SAAY,YAAI,OAAO,KAAK,KAAK,SAAS,IAAI;AAC3F,gBAAI,QAAQ,QAAW;AACrB,kBAAI,iBAAiB,IAAI;AACvB;AAAA,cACF;AAAA,YACF;AACA,gBAAI,eAAe,QAAW;AAC5B,kBAAI,iBAAiB,IAAI;AACvB;AAAA,cACF;AACA,oBAAM,sBAAsB,YAAI,OAAO,OAAO,UAAU;AACxD,kBAAI,iBAAiB,KAAK,wBAAwB,IAAI;AACpD;AAAA,cACF;AAAA,YACF;AACA,gBAAI,KAAK,cAAc,UAAa,qBAAqB;AACvD,kBAAI,sBAAsB,GAAG;AAC3B;AAAA,cACF;AAAA,YACF;AACA,gBAAI,KAAK,cAAc,UAAa,CAAC,qBAAqB;AACxD,kBAAI,sBAAsB,IAAI;AAC5B;AAAA,cACF;AACA,kBAAI,sBAAsB,KAAK,YAAI,OAAO,OAAO,KAAK,oBAAoB,MAAM,GAAG;AACjF;AAAA,cACF;AAAA,YACF;AACA,gBAAI,KAAK,WAAW,QAAW;AAC7B,kBAAI,CAAC,KAAK,OAAO,SAAS,OAAO,GAAG,GAAG;AACrC;AAAA,cACF;AAAA,YACF;AACA,0BAAc;AACd;AAAA,UACF;AAAA,QACF,WAAW,KAAK,cAAc,cAAc;AAI1C,gBAAM,QAAQ,aAAa,KAAK,QAAQ,CAAC,KAAK,KAAK,SAAS,GAAG,CAAC,CAAC;AACjE,qBAAW,UAAU,QAAQ,OAAO,KAAK,GAAG;AAC1C,gBAAI,QAAQ,QAAW;AACrB,kBAAI,YAAI,OAAO,KAAK,GAAG,MAAM,IAAI;AAC/B;AAAA,cACF;AAAA,YACF;AACA,gBAAI,KAAK,cAAc,QAAW;AAChC,kBAAI,YAAI,OAAO,KAAK,KAAK,SAAS,MAAM,GAAG;AACzC;AAAA,cACF;AAAA,YACF;AACA,gBAAI,KAAK,WAAW,QAAW;AAC7B,kBAAI,CAAC,KAAK,OAAO,SAAS,OAAO,GAAG,GAAG;AACrC;AAAA,cACF;AAAA,YACF;AACA,0BAAc;AACd;AAAA,UACF;AAAA,QACF,WAAW,KAAK,cAAc,QAAQ;AACpC,gBAAM,QAAQ,aAAa,KAAK,QAAQ,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC;AACjE,qBAAW,UAAU,QAAQ,OAAO,OAAO,MAAM,GAAG;AAClD,kBAAM,eAAe,QAAQ,SAAY,YAAI,OAAO,KAAK,GAAG,IAAI;AAChE,kBAAM,oBAAoB,KAAK,cAAc,SAAY,YAAI,OAAO,KAAK,KAAK,SAAS,IAAI;AAC3F,gBAAI,QAAQ,QAAW;AACrB,kBAAI,iBAAiB,GAAG;AACtB;AAAA,cACF;AAAA,YACF;AACA,gBAAI,eAAe,QAAW;AAC5B,kBAAI,iBAAiB,GAAG;AACtB;AAAA,cACF;AACA,oBAAM,sBAAsB,YAAI,OAAO,OAAO,UAAU;AACxD,kBAAI,iBAAiB,KAAK,wBAAwB,GAAG;AACnD;AAAA,cACF;AAAA,YACF;AACA,gBAAI,KAAK,cAAc,UAAa,qBAAqB;AACvD,kBAAI,sBAAsB,IAAI;AAC5B;AAAA,cACF;AAAA,YACF;AACA,gBAAI,KAAK,cAAc,UAAa,CAAC,qBAAqB;AACxD,kBAAI,sBAAsB,GAAG;AAC3B;AAAA,cACF;AACA,kBAAI,sBAAsB,KAAK,YAAI,OAAO,OAAO,KAAK,oBAAoB,MAAM,IAAI;AAClF;AAAA,cACF;AAAA,YACF;AACA,gBAAI,KAAK,WAAW,QAAW;AAC7B,kBAAI,CAAC,KAAK,OAAO,SAAS,OAAO,GAAG,GAAG;AACrC;AAAA,cACF;AAAA,YACF;AACA,0BAAc;AACd;AAAA,UACF;AAAA,QACF,WAAW,KAAK,cAAc,cAAc;AAC1C,cAAI;AACJ,gBAAM,QAAQ,aAAa,KAAK,QAAQ,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC;AACjE,qBAAW,UAAU,QAAQ,OAAO,OAAO,MAAM,GAAG;AAClD,gBAAI,QAAQ,QAAW;AACrB,kBAAI,YAAI,OAAO,KAAK,GAAG,MAAM,GAAG;AAC9B;AAAA,cACF;AAAA,YACF;AACA,gBAAI,KAAK,cAAc,QAAW;AAChC,kBAAI,YAAI,OAAO,KAAK,KAAK,SAAS,MAAM,IAAI;AAC1C;AAAA,cACF;AAAA,YACF;AACA,gBAAI,KAAK,WAAW,QAAW;AAC7B,kBAAI,CAAC,KAAK,OAAO,SAAS,OAAO,GAAG,GAAG;AACrC;AAAA,cACF;AAAA,YACF;AACA,yBAAa;AACb;AAAA,UACF;AACA,cAAI,YAAY;AACd,0BAAc,QAAQ,IAAI,WAAW,GAAG;AAAA,UAC1C;AAAA,QACF;AACA,YAAI;AACJ,YAAI,CAAC,aAAa;AAChB,eAAK,OAAO;AACZ,cAAI,CAAC,qBAAqB;AACxB,iBAAK,uBAAuB;AAAA,UAC9B;AAIA,cAAI,CAAC,KAAK,YAAY,KAAK,SAAS,MAAM,+BAA+B;AACvE,iBAAK,QAAQ;AAAA,UACf;AACA,mBAAS;AAAA,QACX,OAAO;AACL,eAAK,YAAY,YAAY;AAC7B,cAAI,CAAC,qBAAqB;AACxB,iBAAK,uBAAuB,YAAY;AAAA,UAC1C;AACA,eAAK,OAAO,YAAY;AACxB,cAAI,qBAAqB;AACvB,iBAAK,cAAc,gBAAgB,YAAY,GAAG;AAClD,gBAAI,CAAC,KAAK,YAAY,KAAK,SAAS,MAAM,+BAA+B;AACvE,mBAAK,QAAQ,gBAAgB,YAAY,KAAK;AAAA,YAChD;AAAA,UACF,OAAO;AACL,iBAAK,cAAc,gBAAgB,YAAY,KAAK;AACpD,gBAAI,CAAC,KAAK,YAAY,KAAK,SAAS,MAAM,+BAA+B;AACvE,kBAAI,KAAK,kBAAkB,wBAAgB;AAEzC,sBAAM,IAAI,MAAM,0BAA0B;AAAA,cAC5C;AACA,oBAAM,QAAQ,KAAK,OAAO,YAAY,gBAAgB,SAAS,YAAY,KAAK;AAChF,mBAAK,QAAQ,gBAAgB,KAAK;AAAA,YACpC;AAAA,UACF;AACA,eAAK,YAAY;AAEjB,mBAAS;AAAA,QACX;AACA,eAAO;AAAA,MACT;AAAA;AAAA,MAGA,OAAO,OAAO;AACZ,YAAI,UAAU,QAAW;AACvB,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,cAAM,uBAAuB,wBAAwB,IAAI;AACzD,cAAM,eAAe,OAAO,OAAO,KAAK,QAAQ,WAAW,IAAI,KAAK,aAAa,KAAK;AACtF,cAAM,cAAc,qBAAqB;AACzC,YAAI,YAAY,WAAW,UAAU;AACnC,gBAAM,IAAI,yBAAyB;AAAA,QACrC;AACA,YAAI,YAAY,SAAS,YAAY;AACnC,gBAAM,IAAI,cAAc;AAAA,QAC1B;AACA,YAAI,qBAAqB,gBAAgB,SAAS;AAChD,gBAAM,IAAI,kBAAkB;AAAA,QAC9B;AACA,YAAI,EAAE,KAAK,kBAAkB,2BAAmB,KAAK,OAAO,UAAU,SAAS;AAC7E,gBAAM,IAAI,kBAAkB;AAAA,QAC9B;AACA,YAAI,CAAC,KAAK,aAAa,CAAC,OAAO,OAAO,MAAM,OAAO,GAAG;AACpD,gBAAM,IAAI,kBAAkB;AAAA,QAC9B;AACA,cAAM,QAAQ,gBAAgB,KAAK;AACnC,YAAI,qBAAqB,YAAY,MAAM;AACzC,cAAI;AACJ,cAAI;AACF,sBAAU,mBAAW,qBAAqB,SAAS,KAAK,EAAE;AAAA,UAC5D,SAAS,KAAK;AAAA,UAEd;AACA,cAAI,YAAI,SAAS,YAAY,MAAM,GAAG;AACpC,kBAAM,IAAI,UAAU;AAAA,UACtB;AAAA,QACF;AACA,cAAM,SAAS;AAAA,UACb,KAAK;AAAA,UACL,OAAO;AAAA,QACT;AACA,eAAO,YAAY,kBAAkB;AAAA,UACnC,WAAW,qBAAqB,gBAAgB,YAAY,KAAK,qBAAqB,iBAAiB,QAAQ,OAAO,YAAY,YAAY;AAAA,UAC9I,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA;AAAA,MAGA,QAAQ,OAAO;AACb,YAAI,CAAC,OAAO,UAAU,KAAK,KAAK,SAAS,GAAG;AAC1C,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,cAAM,uBAAuB,wBAAwB,IAAI;AACzD,cAAM,cAAc,qBAAqB;AACzC,YAAI,YAAY,WAAW,UAAU;AACnC,gBAAM,IAAI,yBAAyB;AAAA,QACrC;AACA,YAAI,qBAAqB,gBAAgB,SAAS;AAChD,gBAAM,IAAI,kBAAkB;AAAA,QAC9B;AACA,YAAI,EAAE,KAAK,kBAAkB,2BAAmB,KAAK,OAAO,UAAU,SAAS;AAC7E,gBAAM,IAAI,kBAAkB;AAAA,QAC9B;AACA,YAAI,CAAC,KAAK,WAAW;AACnB,gBAAM,IAAI,kBAAkB;AAAA,QAC9B;AACA,YAAI,KAAK,UAAU;AACjB,eAAK,SAAS,aAAa;AAAA,QAC7B;AACA,oBAAY,kBAAkB;AAAA,UAC5B,WAAW,MAAM;AACf,gBAAI;AACJ,qBAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC9B,uBAAS,KAAK,SAAS;AAGvB,kBAAI,CAAC,QAAQ;AACX;AAAA,cACF;AAAA,YACF;AACA,mBAAO;AAAA,UACT;AAAA,UACA,SAAS,KAAK;AAAA,UACd,QAAQ,KAAK;AAAA,QACf,CAAC;AACD,aAAK,YAAY;AAAA,MACnB;AAAA;AAAA,MAGA,SAAS,KAAK;AACZ,cAAM,uBAAuB,wBAAwB,IAAI;AACzD,cAAM,cAAc,qBAAqB;AACzC,YAAI,YAAY,WAAW,UAAU;AACnC,gBAAM,IAAI,yBAAyB;AAAA,QACrC;AACA,YAAI,qBAAqB,gBAAgB,SAAS;AAChD,gBAAM,IAAI,kBAAkB;AAAA,QAC9B;AACA,YAAI,EAAE,KAAK,kBAAkB,2BAAmB,KAAK,OAAO,UAAU,SAAS;AAC7E,gBAAM,IAAI,kBAAkB;AAAA,QAC9B;AACA,YAAI,CAAC,KAAK,WAAW;AACnB,gBAAM,IAAI,kBAAkB;AAAA,QAC9B;AACA,YAAI,QAAQ,QAAW;AACrB,gBAAM,mBAAW,GAAG;AACpB,gBAAM,YAAY,YAAI,KAAK,KAAK,SAAS;AACzC,cAAI,aAAa,MAAM,KAAK,cAAc,UAAU,KAAK,cAAc,iBAAiB,aAAa,MAAM,KAAK,cAAc,UAAU,KAAK,cAAc,eAAe;AACxK,kBAAM,IAAI,UAAU;AAAA,UACtB;AAAA,QACF;AACA,YAAI,KAAK,UAAU;AACjB,eAAK,SAAS,aAAa;AAAA,QAC7B;AACA,oBAAY,kBAAkB;AAAA,UAC5B,WAAW,KAAK,SAAS,KAAK,MAAM,GAAG;AAAA,UACvC,SAAS,KAAK;AAAA,UACd,QAAQ,KAAK;AAAA,QACf,CAAC;AACD,aAAK,YAAY;AAAA,MACnB;AAAA;AAAA,MAGA,mBAAmB,KAAK,YAAY;AAClC,cAAM,uBAAuB,wBAAwB,IAAI;AACzD,cAAM,cAAc,qBAAqB;AACzC,YAAI,YAAY,WAAW,UAAU;AACnC,gBAAM,IAAI,yBAAyB;AAAA,QACrC;AACA,YAAI,qBAAqB,gBAAgB,SAAS;AAChD,gBAAM,IAAI,kBAAkB;AAAA,QAC9B;AACA,YAAI,EAAE,KAAK,kBAAkB,2BAAmB,KAAK,OAAO,UAAU,SAAS;AAC7E,gBAAM,IAAI,kBAAkB;AAAA,QAC9B;AACA,YAAI,KAAK,kBAAkB,0BAAkB,KAAK,cAAc,UAAU,KAAK,cAAc,QAAQ;AACnG,gBAAM,IAAI,mBAAmB;AAAA,QAC/B;AACA,YAAI,CAAC,KAAK,WAAW;AACnB,gBAAM,IAAI,kBAAkB;AAAA,QAC9B;AAGA,YAAI,QAAQ,UAAa,eAAe,QAAW;AACjD,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,cAAM,mBAAW,GAAG;AACpB,cAAM,YAAY,YAAI,KAAK,KAAK,SAAS;AACzC,YAAI,cAAc,MAAM,KAAK,cAAc,UAAU,cAAc,KAAK,KAAK,cAAc,QAAQ;AACjG,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,cAAM,aAAa,YAAI,YAAY,KAAK,oBAAoB;AAC5D,YAAI,cAAc,GAAG;AACnB,cAAI,cAAc,KAAK,KAAK,cAAc,UAAU,cAAc,KAAK,KAAK,cAAc,QAAQ;AAChG,kBAAM,IAAI,UAAU;AAAA,UACtB;AAAA,QACF;AACA,YAAI,KAAK,UAAU;AACjB,eAAK,SAAS,aAAa;AAAA,QAC7B;AACA,oBAAY,kBAAkB;AAAA,UAC5B,WAAW,KAAK,SAAS,KAAK,MAAM,KAAK,UAAU;AAAA,UACnD,SAAS,KAAK;AAAA,UACd,QAAQ,KAAK;AAAA,QACf,CAAC;AACD,aAAK,YAAY;AAAA,MACnB;AAAA,MACA,SAAS;AACP,cAAM,uBAAuB,wBAAwB,IAAI;AACzD,cAAM,eAAe,OAAO,OAAO,KAAK,QAAQ,WAAW,IAAI,KAAK,aAAa,KAAK;AACtF,cAAM,cAAc,qBAAqB;AACzC,YAAI,YAAY,WAAW,UAAU;AACnC,gBAAM,IAAI,yBAAyB;AAAA,QACrC;AACA,YAAI,YAAY,SAAS,YAAY;AACnC,gBAAM,IAAI,cAAc;AAAA,QAC1B;AACA,YAAI,qBAAqB,gBAAgB,SAAS;AAChD,gBAAM,IAAI,kBAAkB;AAAA,QAC9B;AACA,YAAI,EAAE,KAAK,kBAAkB,2BAAmB,KAAK,OAAO,UAAU,SAAS;AAC7E,gBAAM,IAAI,kBAAkB;AAAA,QAC9B;AACA,YAAI,CAAC,KAAK,aAAa,CAAC,OAAO,OAAO,MAAM,OAAO,GAAG;AACpD,gBAAM,IAAI,kBAAkB;AAAA,QAC9B;AACA,eAAO,YAAY,kBAAkB;AAAA,UACnC,WAAW,qBAAqB,gBAAgB,aAAa,KAAK,qBAAqB,iBAAiB,cAAc,YAAY,YAAY;AAAA,UAC9I,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA,MACA,WAAW;AACT,eAAO;AAAA,MACT;AAAA,IACF;AACA,IAAO,oBAAQ;AAAA;AAAA;;;ACtdf,IACM,oBASC;AAVP;AAAA;AAAA;AAAA;AACA,IAAM,qBAAN,cAAiC,kBAAU;AAAA,MAEzC,YAAY,QAAQ,OAAO,WAAW,SAAS;AAC7C,cAAM,QAAQ,OAAO,WAAW,OAAO;AAFzC;AAAA,MAGA;AAAA,MACA,WAAW;AACT,eAAO;AAAA,MACT;AAAA,IACF;AACA,IAAO,6BAAQ;AAAA;AAAA;;;ACVf,IACM,SAKA,sBAwCA,iBAyDC;AAvGP;AAAA;AAAA;AAAA;AACA,IAAM,UAAU,CAAC,OAAO,aAAa;AACnC,aAAO,MAAM,+BAA+B,MAAM,eAAe,MAAM,mBAAmB,SAAS,YAAY,SAAS,MAAM,eAAe,MAAM,kBAAkB,SAAS,YAAY;AAAA,IAC5L;AAGA,IAAM,uBAAuB,CAAC,OAAO,QAAQ;AAC3C,YAAM,gBAAgB;AAKtB,iBAAW,YAAY,IAAI,UAAU,MAAM,GAAG;AAC5C,YAAI,MAAM,SAAS,SAAS,QAAQ,QAAQ,OAAO,QAAQ,GAAG;AAC5D;AAAA,QACF;AAGA,iBAAS,SAAS,KAAK,MAAM,eAAe,KAAK;AAAA,MACnD;AACA,YAAM,aAAa;AAAA,QACjB,OAAO;AAAA,QACP,SAAS;AAAA,QACT,UAAU;AAAA,QACV,OAAO;AAAA,QACP,SAAS;AAAA,QACT,eAAe;AAAA,QACf,eAAe;AAAA,MACjB;AACA,YAAM,OAAO,WAAW,MAAM,IAAI;AAClC,UAAI,SAAS,QAAW;AACtB,cAAM,IAAI,MAAM,wBAAwB,MAAM,IAAI,GAAG;AAAA,MACvD;AACA,YAAM,WAAW,MAAM,cAAc,IAAI;AACzC,UAAI,UAAU;AACZ,cAAM,WAAW;AAAA,UACf;AAAA,UACA,SAAS;AAAA,UACT,MAAM,MAAM;AAAA,QACd;AACA,YAAI,CAAC,QAAQ,OAAO,QAAQ,GAAG;AAE7B,mBAAS,SAAS,KAAK,MAAM,eAAe,KAAK;AAAA,QACnD;AAAA,MACF;AAAA,IACF;AACA,IAAM,kBAAN,MAAsB;AAAA,MAAtB;AACE,yCAAY,CAAC;AAAA;AAAA;AAAA,MAIb,iBAAiB,MAAM,UAAU,UAAU,OAAO;AAChD,aAAK,UAAU,KAAK;AAAA,UAClB;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA,oBAAoB,MAAM,UAAU,UAAU,OAAO;AACnD,cAAM,IAAI,KAAK,UAAU,UAAU,cAAY;AAC7C,iBAAO,SAAS,SAAS,QAAQ,SAAS,aAAa,YAAY,SAAS,YAAY;AAAA,QAC1F,CAAC;AACD,aAAK,UAAU,OAAO,GAAG,CAAC;AAAA,MAC5B;AAAA;AAAA,MAGA,cAAc,OAAO;AACnB,YAAI,MAAM,cAAc,CAAC,MAAM,aAAa;AAC1C,gBAAM,IAAI,kBAAkB,oCAAoC;AAAA,QAClE;AACA,cAAM,YAAY;AAClB,cAAM,aAAa;AACnB,cAAM,SAAS;AAGf,cAAM,aAAa,MAAM;AACzB,mBAAW,OAAO,MAAM,WAAW;AACjC,cAAI,CAAC,MAAM,oBAAoB;AAC7B,iCAAqB,OAAO,GAAG;AAAA,UACjC;AAAA,QACF;AACA,cAAM,aAAa,MAAM;AACzB,YAAI,CAAC,MAAM,oBAAoB;AAC7B,+BAAqB,OAAO,MAAM,MAAM;AAAA,QAC1C;AACA,YAAI,MAAM,SAAS;AACjB,gBAAM,UAAU,QAAQ;AACxB,gBAAM,aAAa,MAAM;AACzB,qBAAW,OAAO,MAAM,WAAW;AACjC,gBAAI,CAAC,MAAM,oBAAoB;AAC7B,mCAAqB,OAAO,GAAG;AAAA,YACjC;AAAA,UACF;AAAA,QACF;AACA,cAAM,aAAa;AACnB,cAAM,aAAa,MAAM;AACzB,cAAM,gBAAgB;AACtB,YAAI,MAAM,UAAU;AAClB,iBAAO;AAAA,QACT;AACA,eAAO;AAAA,MACT;AAAA,IACF;AACA,IAAO,0BAAQ;AAAA;AAAA;;;ACvGf,IAEM,YA8BC;AAhCP;AAAA;AAAA;AAAA;AACA;AACA,IAAM,aAAN,cAAyB,wBAAgB;AAAA,MAAzC;AAAA;AACE,uCAAU;AACV,sCAAS;AACT,sCAAS;AACT,2CAAc;AACd,0CAAa;AACb,yCAAY;AACZ,uCAAU;AAAA;AAAA,MACV,IAAI,QAAQ;AACV,YAAI,KAAK,eAAe,WAAW;AACjC,gBAAM,IAAI,kBAAkB;AAAA,QAC9B;AACA,eAAO,KAAK;AAAA,MACd;AAAA,MACA,IAAI,MAAM,OAAO;AACf,aAAK,SAAS;AAAA,MAChB;AAAA,MACA,IAAI,SAAS;AACX,YAAI,KAAK,eAAe,WAAW;AACjC,gBAAM,IAAI,kBAAkB;AAAA,QAC9B;AACA,eAAO,KAAK;AAAA,MACd;AAAA,MACA,IAAI,OAAO,OAAO;AAChB,aAAK,UAAU;AAAA,MACjB;AAAA,MACA,WAAW;AACT,eAAO;AAAA,MACT;AAAA,IACF;AACA,IAAO,qBAAQ;AAAA;AAAA;;;AChCf,IAEM,cAUC;AAZP;AAAA;AAAA;AAEA,IAAM,eAAe,CAAC,KAAK,SAAS;AAClC,YAAM,MAAM;AACZ,YAAM,MAAM,SAAS,kBAAkB,aAAa;AACpD,UAAI,MAAM,GAAG,KAAK,MAAM,OAAO,MAAM,KAAK;AACxC,cAAM,IAAI,UAAU;AAAA,MACtB;AACA,UAAI,OAAO,GAAG;AACZ,eAAO,KAAK,MAAM,GAAG;AAAA,MACvB;AAAA,IACF;AACA,IAAO,uBAAQ;AAAA;AAAA;;;ACZf,IAAM,mBAuEC;AAvEP;AAAA;AAAA;AAAA,IAAM,oBAAN,cAAgC,MAAM;AAAA,MACpC,SAAS,OAAO;AACd,mBAAW,UAAU,MAAM;AACzB,cAAI,UAAU,QAAQ;AACpB,mBAAO;AAAA,UACT;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,MACA,KAAK,GAAG;AACN,YAAI,IAAI,KAAK,KAAK,KAAK,QAAQ;AAC7B,iBAAO;AAAA,QACT;AACA,eAAO,KAAK,CAAC;AAAA,MACf;AAAA;AAAA,MAGA,SAAS,QAAQ;AACf,eAAO,MAAM,UAAU,KAAK,KAAK,MAAM,GAAG,MAAM;AAAA,MAClD;AAAA,MACA,SAAS,QAAQ;AACf,eAAO,MAAM,UAAU,KAAK,KAAK,MAAM,GAAG,MAAM;AAAA,MAClD;AAAA,IACF;AAgDA,IAAO,4BAAQ;AAAA;AAAA;;;ACvEf,IAKM,iBAaC;AAlBP;AAAA;AAAA;AAAA;AACA;AACA;AAGA,IAAM,kBAAkB,CAAC,OAAO,qBAAqB,UAAU;AAC7D,UAAI,iBAAiB,qBAAa;AAChC,eAAO;AAAA,MACT;AACA,UAAI,UAAU,QAAQ,UAAU,QAAW;AACzC,YAAI,oBAAoB;AACtB,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,eAAO,IAAI,oBAAY,QAAW,QAAW,OAAO,KAAK;AAAA,MAC3D;AACA,YAAM,MAAM,mBAAW,KAAK;AAC5B,aAAO,oBAAY,KAAK,GAAG;AAAA,IAC7B;AACA,IAAO,0BAAQ;AAAA;AAAA;;;AClBf,IASM,0BAUA,UAmKC;AAtLP;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAM,2BAA2B,WAAS;AACxC,UAAI,MAAM,UAAU,WAAW,MAAM,YAAY,gBAAgB,SAAS;AACxE,cAAM,IAAI,kBAAkB;AAAA,MAC9B;AACA,UAAI,MAAM,YAAY,YAAY,WAAW,UAAU;AACrD,cAAM,IAAI,yBAAyB;AAAA,MACrC;AAAA,IACF;AAGA,IAAM,WAAN,MAAe;AAAA,MACb,YAAY,aAAa,UAAU;AACjC,aAAK,YAAY;AACjB,aAAK,QAAQ,SAAS;AACtB,aAAK,cAAc;AACnB,aAAK,UAAU,SAAS;AACxB,aAAK,aAAa,SAAS;AAC3B,aAAK,SAAS,SAAS;AAAA,MACzB;AAAA,MACA,IAAI,OAAO;AACT,eAAO,KAAK;AAAA,MACd;AAAA;AAAA,MAGA,IAAI,KAAK,MAAM;AACb,cAAM,cAAc,KAAK,YAAY;AACrC,YAAI,CAAC,YAAY,GAAG,kCAAkC;AACpD,gBAAM,IAAI,kBAAkB;AAAA,QAC9B;AACA,YAAI,YAAY,WAAW,UAAU;AACnC,gBAAM,IAAI,yBAAyB;AAAA,QACrC;AACA,YAAI,KAAK,UAAU,WAAW,KAAK,YAAY,gBAAgB,SAAS;AACtE,gBAAM,IAAI,kBAAkB;AAAA,QAC9B;AACA,eAAO,OAAO,IAAI;AAClB,YAAI,SAAS,KAAK,OAAO;AACvB;AAAA,QACF;AACA,YAAI,KAAK,YAAY,WAAW,SAAS,IAAI,GAAG;AAC9C,gBAAM,IAAI,gBAAgB;AAAA,QAC5B;AACA,cAAM,UAAU,KAAK;AACrB,cAAM,gBAAgB,CAAC,GAAG,KAAK,YAAY,UAAU;AACrD,aAAK,QAAQ;AACb,aAAK,UAAU,OAAO;AACtB,aAAK,YAAY,cAAc,OAAO,OAAO;AAC7C,aAAK,YAAY,cAAc,IAAI,MAAM,IAAI;AAC7C,aAAK,YAAY,gBAAgB,WAAW,OAAO,OAAO;AAC1D,aAAK,YAAY,gBAAgB,WAAW,IAAI,MAAM,KAAK,SAAS;AACpE,aAAK,YAAY,aAAa,IAAI,0BAAkB,GAAG,MAAM,KAAK,KAAK,YAAY,gBAAgB,WAAW,KAAK,CAAC,EAAE,OAAO,eAAa;AACxI,gBAAM,QAAQ,KAAK,YAAY,gBAAgB,WAAW,IAAI,SAAS;AACvE,iBAAO,SAAS,CAAC,MAAM;AAAA,QACzB,CAAC,EAAE,KAAK,CAAC;AACT,oBAAY,aAAa,KAAK,MAAM;AAClC,eAAK,QAAQ;AACb,eAAK,UAAU,OAAO;AACtB,eAAK,YAAY,cAAc,OAAO,IAAI;AAC1C,eAAK,YAAY,cAAc,IAAI,SAAS,IAAI;AAChD,eAAK,YAAY,gBAAgB,WAAW,OAAO,IAAI;AACvD,eAAK,YAAY,gBAAgB,WAAW,IAAI,SAAS,KAAK,SAAS;AACvE,eAAK,YAAY,aAAa,IAAI,0BAAkB,GAAG,aAAa;AAAA,QACtE,CAAC;AAAA,MACH;AAAA;AAAA,MAGA,WAAW,OAAO,WAAW;AAC3B,iCAAyB,IAAI;AAC7B,YAAI,UAAU,MAAM;AAClB,kBAAQ;AAAA,QACV;AACA,YAAI,UAAU,UAAa,EAAE,iBAAiB,sBAAc;AAC1D,kBAAQ,oBAAY,KAAK,mBAAW,KAAK,CAAC;AAAA,QAC5C;AACA,cAAM,UAAU,IAAI,mBAAW;AAC/B,gBAAQ,SAAS;AACjB,gBAAQ,cAAc,KAAK,YAAY;AACvC,cAAM,SAAS,IAAI,2BAAmB,MAAM,OAAO,WAAW,OAAO;AACrE,eAAO,KAAK,YAAY,YAAY,kBAAkB;AAAA,UACpD,WAAW,OAAO,SAAS,KAAK,MAAM;AAAA,UACtC;AAAA,UACA,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA;AAAA,MAGA,cAAc,OAAO,WAAW;AAC9B,iCAAyB,IAAI;AAC7B,YAAI,UAAU,MAAM;AAClB,kBAAQ;AAAA,QACV;AACA,YAAI,UAAU,UAAa,EAAE,iBAAiB,sBAAc;AAC1D,kBAAQ,oBAAY,KAAK,mBAAW,KAAK,CAAC;AAAA,QAC5C;AACA,cAAM,UAAU,IAAI,mBAAW;AAC/B,gBAAQ,SAAS;AACjB,gBAAQ,cAAc,KAAK,YAAY;AACvC,cAAM,SAAS,IAAI,kBAAU,MAAM,OAAO,WAAW,SAAS,IAAI;AAClE,eAAO,KAAK,YAAY,YAAY,kBAAkB;AAAA,UACpD,WAAW,OAAO,SAAS,KAAK,MAAM;AAAA,UACtC;AAAA,UACA,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA,MACA,IAAI,KAAK;AACP,iCAAyB,IAAI;AAC7B,YAAI,EAAE,eAAe,sBAAc;AACjC,gBAAM,mBAAW,GAAG;AAAA,QACtB;AACA,eAAO,KAAK,YAAY,YAAY,kBAAkB;AAAA,UACpD,WAAW,KAAK,UAAU,SAAS,KAAK,KAAK,WAAW,GAAG;AAAA,UAC3D,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA;AAAA,MAGA,OAAO,OAAO,OAAO;AACnB,YAAI,UAAU,SAAS,KAAK,UAAU,QAAW;AAC/C,kBAAQ,qBAAa,OAAO,eAAe;AAAA,QAC7C;AACA,iCAAyB,IAAI;AAC7B,cAAM,QAAQ,wBAAgB,KAAK;AACnC,eAAO,KAAK,YAAY,YAAY,kBAAkB;AAAA,UACpD,WAAW,KAAK,UAAU,aAAa,KAAK,KAAK,WAAW,OAAO,KAAK;AAAA,UACxE,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA;AAAA,MAGA,OAAO,KAAK;AACV,iCAAyB,IAAI;AAC7B,YAAI,EAAE,eAAe,sBAAc;AACjC,gBAAM,mBAAW,GAAG;AAAA,QACtB;AACA,eAAO,KAAK,YAAY,YAAY,kBAAkB;AAAA,UACpD,WAAW,KAAK,UAAU,OAAO,KAAK,KAAK,WAAW,GAAG;AAAA,UACzD,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA;AAAA,MAGA,WAAW,OAAO,OAAO;AACvB,YAAI,UAAU,SAAS,KAAK,UAAU,QAAW;AAC/C,kBAAQ,qBAAa,OAAO,eAAe;AAAA,QAC7C;AACA,iCAAyB,IAAI;AAC7B,cAAM,QAAQ,wBAAgB,KAAK;AACnC,eAAO,KAAK,YAAY,YAAY,kBAAkB;AAAA,UACpD,WAAW,KAAK,UAAU,WAAW,KAAK,KAAK,WAAW,OAAO,KAAK;AAAA,UACtE,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA;AAAA,MAGA,MAAM,KAAK;AACT,iCAAyB,IAAI;AAC7B,YAAI,QAAQ,MAAM;AAChB,gBAAM;AAAA,QACR;AACA,YAAI,QAAQ,UAAa,EAAE,eAAe,sBAAc;AACtD,gBAAM,oBAAY,KAAK,mBAAW,GAAG,CAAC;AAAA,QACxC;AACA,eAAO,KAAK,YAAY,YAAY,kBAAkB;AAAA,UACpD,WAAW,MAAM;AACf,mBAAO,KAAK,UAAU,MAAM,GAAG;AAAA,UACjC;AAAA,UACA,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA,MACA,WAAW;AACT,eAAO;AAAA,MACT;AAAA,IACF;AACA,IAAO,mBAAQ;AAAA;AAAA;;;ACtLf,IACM,cAqBC;AAtBP;AAAA;AAAA;AACA,IAAM,eAAe,CAAC,SAAS,UAAU;AACvC,UAAI,MAAM,QAAQ,OAAO,GAAG;AAC1B,cAAM,IAAI,MAAM,oMAAoM;AAAA,MACtN;AACA,YAAM,cAAc,QAAQ,MAAM,GAAG;AACrC,UAAI,YAAY,WAAW,GAAG;AAC5B,cAAM,IAAI,MAAM,kCAAkC;AAAA,MACpD;AACA,kBAAY,IAAI;AAChB,iBAAW,cAAc,aAAa;AACpC,YAAI,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,GAAG;AACtD,iBAAO;AAAA,QACT;AACA,cAAM,MAAM,OAAO,OAAO,OAAO,UAAU;AAC3C,YAAI,CAAC,KAAK;AACR,iBAAO;AAAA,QACT;AACA,gBAAQ,MAAM,UAAU;AAAA,MAC1B;AACA,aAAO,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK;AAAA,IACzD;AACA,IAAO,uBAAQ;AAAA;AAAA;;;ACjBf,SAAS,aAAa,SAAS,KAAK;AAClC,MAAI,MAAM;AACV,MAAI,OAAO,QAAQ;AACnB,MAAI;AACJ,SAAO,MAAM,MAAM;AACjB,UAAM,MAAM,SAAS;AACrB,QAAI,YAAI,QAAQ,GAAG,EAAE,KAAK,GAAG,IAAI,GAAG;AAClC,YAAM,MAAM;AAAA,IACd,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAKO,SAAS,cAAc,SAAS,KAAK;AAC1C,QAAM,MAAM,aAAa,SAAS,GAAG;AACrC,QAAM,SAAS,QAAQ,GAAG;AAC1B,MAAI,UAAU,YAAI,OAAO,KAAK,GAAG,MAAM,GAAG;AACxC,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAKO,SAAS,SAAS,SAAS,KAAK;AACrC,QAAM,MAAM,cAAc,SAAS,GAAG;AACtC,SAAO,QAAQ,GAAG;AACpB;AAKO,SAAS,mBAAmB,SAAS,UAAU;AACpD,QAAM,WAAW,OAAO,SAAS,UAAU,cAAc,IAAI,aAAa,SAAS,SAAS,KAAK;AACjG,QAAM,WAAW,OAAO,SAAS,UAAU,cAAc,QAAQ,SAAS,IAAI,aAAa,SAAS,SAAS,KAAK;AAClH,WAAS,IAAI,UAAU,KAAK,UAAU,KAAK;AACzC,UAAM,SAAS,QAAQ,CAAC;AACxB,QAAI,UAAU,SAAS,SAAS,OAAO,GAAG,GAAG;AAC3C,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAKO,SAAS,cAAc,SAAS,UAAU;AAC/C,QAAM,MAAM,mBAAmB,SAAS,QAAQ;AAChD,SAAO,QAAQ,GAAG;AACpB;AAKO,SAAS,iBAAiB,SAAS,KAAK;AAC7C,QAAM,MAAM,aAAa,SAAS,GAAG;AACrC,QAAM,SAAS,QAAQ,GAAG;AAC1B,MAAI,UAAU,YAAI,OAAO,KAAK,GAAG,KAAK,GAAG;AACvC,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAzEA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAGM,aAiIC;AApIP;AAAA;AAAA;AAAA;AACA;AACA;AACA,IAAM,cAAN,MAAkB;AAAA,MAAlB;AACE,uCAAU,CAAC;AAAA;AAAA,MACX,IAAI,KAAK;AACP,YAAI,eAAe,qBAAa;AAC9B,iBAAO,cAAc,KAAK,SAAS,GAAG;AAAA,QACxC;AACA,eAAO,SAAS,KAAK,SAAS,GAAG;AAAA,MACnC;AAAA,MACA,IAAI,WAAW;AAEb,YAAI;AACJ,YAAI,KAAK,QAAQ,WAAW,GAAG;AAC7B,cAAI;AAAA,QACN,OAAO;AACL,cAAI,iBAAiB,KAAK,SAAS,UAAU,GAAG;AAChD,cAAI,MAAM,IAAI;AAEZ,gBAAI,KAAK,QAAQ;AAAA,UACnB,OAAO;AAEL,mBAAO,IAAI,KAAK,QAAQ,UAAU,YAAI,KAAK,QAAQ,CAAC,EAAE,KAAK,UAAU,GAAG,MAAM,GAAG;AAC/E,kBAAI,YAAI,KAAK,QAAQ,CAAC,EAAE,OAAO,UAAU,KAAK,MAAM,IAAI;AAEtD;AAAA,cACF;AACA,mBAAK;AAAA,YACP;AAAA,UACF;AAAA,QACF;AACA,aAAK,QAAQ,OAAO,GAAG,GAAG,SAAS;AAAA,MACrC;AAAA,MACA,OAAO,KAAK;AACV,cAAM,iBAAiB,CAAC;AACxB,cAAM,UAAU,eAAe;AAC/B,eAAO,MAAM;AACX,gBAAM,MAAM,UAAU,mBAAmB,KAAK,SAAS,GAAG,IAAI,cAAc,KAAK,SAAS,GAAG;AAC7F,cAAI,QAAQ,IAAI;AACd;AAAA,UACF;AACA,yBAAe,KAAK,KAAK,QAAQ,GAAG,CAAC;AACrC,eAAK,QAAQ,OAAO,KAAK,CAAC;AAAA,QAC5B;AACA,eAAO;AAAA,MACT;AAAA,MACA,cAAc,KAAK;AACjB,cAAM,QAAQ,eAAe,sBAAc,MAAM,oBAAY,KAAK,GAAG;AACrE,cAAM,iBAAiB,CAAC;AACxB,aAAK,UAAU,KAAK,QAAQ,OAAO,YAAU;AAC3C,gBAAM,eAAe,MAAM,SAAS,OAAO,KAAK;AAChD,cAAI,cAAc;AAChB,2BAAe,KAAK,MAAM;AAAA,UAC5B;AACA,iBAAO,CAAC;AAAA,QACV,CAAC;AACD,eAAO;AAAA,MACT;AAAA,MACA,QAAQ;AACN,cAAM,iBAAiB,KAAK,QAAQ,MAAM;AAC1C,aAAK,UAAU,CAAC;AAChB,eAAO;AAAA,MACT;AAAA,MACA,OAAO,OAAO,YAAY,QAAQ;AAChC,eAAO;AAAA,UACL,CAAC,OAAO,QAAQ,GAAG,MAAM;AACvB,gBAAI;AACJ,gBAAI,cAAc,QAAQ;AACxB,kBAAI;AACJ,kBAAI,UAAU,UAAa,MAAM,UAAU,QAAW;AACpD,uBAAO,KAAK,QAAQ,CAAC,MAAM,QAAW;AACpC,wBAAM,YAAY,YAAI,KAAK,QAAQ,CAAC,EAAE,KAAK,MAAM,KAAK;AACtD,sBAAI,cAAc,KAAK,cAAc,KAAK,CAAC,MAAM,WAAW;AAC1D;AAAA,kBACF;AACA,uBAAK;AAAA,gBACP;AAAA,cACF;AAAA,YACF,OAAO;AACL,kBAAI,KAAK,QAAQ,SAAS;AAC1B,kBAAI,UAAU,UAAa,MAAM,UAAU,QAAW;AACpD,uBAAO,KAAK,QAAQ,CAAC,MAAM,QAAW;AACpC,wBAAM,YAAY,YAAI,KAAK,QAAQ,CAAC,EAAE,KAAK,MAAM,KAAK;AACtD,sBAAI,cAAc,MAAM,cAAc,KAAK,CAAC,MAAM,WAAW;AAC3D;AAAA,kBACF;AACA,uBAAK;AAAA,gBACP;AAAA,cACF;AAAA,YACF;AACA,mBAAO;AAAA,cACL,MAAM,MAAM;AACV,oBAAI;AACJ,oBAAI;AACJ,oBAAI,cAAc,QAAQ;AACxB,0BAAQ,KAAK,QAAQ,CAAC;AACtB,yBAAO,KAAK,KAAK,QAAQ;AACzB,uBAAK;AACL,sBAAI,CAAC,QAAQ,UAAU,UAAa,MAAM,UAAU,QAAW;AAC7D,0BAAM,YAAY,YAAI,MAAM,KAAK,MAAM,KAAK;AAC5C,2BAAO,cAAc,KAAK,cAAc,KAAK,MAAM;AACnD,wBAAI,MAAM;AACR,8BAAQ;AAAA,oBACV;AAAA,kBACF;AAAA,gBACF,OAAO;AACL,0BAAQ,KAAK,QAAQ,CAAC;AACtB,yBAAO,IAAI;AACX,uBAAK;AACL,sBAAI,CAAC,QAAQ,UAAU,UAAa,MAAM,UAAU,QAAW;AAC7D,0BAAM,YAAY,YAAI,MAAM,KAAK,MAAM,KAAK;AAC5C,2BAAO,cAAc,MAAM,cAAc,KAAK,MAAM;AACpD,wBAAI,MAAM;AACR,8BAAQ;AAAA,oBACV;AAAA,kBACF;AAAA,gBACF;AAKA,uBAAO;AAAA,kBACL;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,IAAO,sBAAQ;AAAA;AAAA;;;ACpIf,IAMM,OAsJC;AA5JP;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAGA,IAAM,QAAN,MAAY;AAAA,MAMV,YAAY,gBAAgB,MAAM,SAAS,YAAY,QAAQ;AAL/D,uCAAU;AAGV;AAAA;AAAA,2CAAc;AACd,uCAAU,IAAI,oBAAY;AAExB,aAAK,iBAAiB;AACtB,aAAK,OAAO;AACZ,aAAK,UAAU;AACf,aAAK,aAAa;AAClB,aAAK,SAAS;AAAA,MAChB;AAAA;AAAA,MAGA,OAAO,KAAK;AACV,cAAM,SAAS,KAAK,QAAQ,IAAI,GAAG;AACnC,eAAO,WAAW,SAAY,OAAO,QAAQ;AAAA,MAC/C;AAAA;AAAA,MAGA,WAAW,OAAO,OAAO;AACvB,YAAI,UAAU,UAAa,UAAU,GAAG;AACtC,kBAAQ;AAAA,QACV;AACA,cAAM,UAAU,CAAC;AACjB,mBAAW,UAAU,KAAK,QAAQ,OAAO,KAAK,GAAG;AAC/C,kBAAQ,KAAK,gBAAgB,OAAO,KAAK,CAAC;AAC1C,cAAI,QAAQ,UAAU,OAAO;AAC3B;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA;AAAA,MAGA,SAAS,KAAK;AACZ,cAAM,SAAS,KAAK,QAAQ,IAAI,GAAG;AACnC,eAAO,WAAW,SAAY,KAAK,eAAe,SAAS,OAAO,KAAK,IAAI;AAAA,MAC7E;AAAA;AAAA,MAGA,aAAa,OAAO,OAAO;AACzB,YAAI,UAAU,UAAa,UAAU,GAAG;AACtC,kBAAQ;AAAA,QACV;AACA,cAAM,UAAU,CAAC;AACjB,mBAAW,UAAU,KAAK,QAAQ,OAAO,KAAK,GAAG;AAC/C,kBAAQ,KAAK,KAAK,eAAe,SAAS,OAAO,KAAK,CAAC;AACvD,cAAI,QAAQ,UAAU,OAAO;AAC3B;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA;AAAA,MAGA,YAAY,WAAW;AACrB,YAAI;AACJ,YAAI;AACF,qBAAW,mBAAW,KAAK,SAAS,UAAU,KAAK,EAAE;AAAA,QACvD,SAAS,KAAK;AACZ,cAAI,IAAI,SAAS,aAAa;AAE5B;AAAA,UACF;AACA,gBAAM;AAAA,QACR;AACA,YAAI,CAAC,KAAK,cAAc,CAAC,MAAM,QAAQ,QAAQ,GAAG;AAChD,cAAI;AACF,+BAAW,QAAQ;AAAA,UACrB,SAAS,GAAG;AACV;AAAA,UACF;AAAA,QACF,OAAO;AAGL,gBAAM,OAAO,CAAC;AACd,qBAAW,QAAQ,UAAU;AAC3B,gBAAI,KAAK,QAAQ,IAAI,IAAI,GAAG;AAC1B,kBAAI;AACF,qBAAK,KAAK,mBAAW,IAAI,CAAC;AAAA,cAC5B,SAAS,KAAK;AAAA,cAEd;AAAA,YACF;AAAA,UACF;AACA,qBAAW;AAAA,QACb;AACA,YAAI,CAAC,KAAK,cAAc,CAAC,MAAM,QAAQ,QAAQ,GAAG;AAChD,cAAI,KAAK,QAAQ;AACf,kBAAM,iBAAiB,KAAK,QAAQ,IAAI,QAAQ;AAChD,gBAAI,gBAAgB;AAClB,oBAAM,IAAI,gBAAgB;AAAA,YAC5B;AAAA,UACF;AAAA,QACF,OAAO;AACL,cAAI,KAAK,QAAQ;AACf,uBAAW,sBAAsB,UAAU;AACzC,oBAAM,iBAAiB,KAAK,QAAQ,IAAI,kBAAkB;AAC1D,kBAAI,gBAAgB;AAClB,sBAAM,IAAI,gBAAgB;AAAA,cAC5B;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA,YAAI,CAAC,KAAK,cAAc,CAAC,MAAM,QAAQ,QAAQ,GAAG;AAChD,eAAK,QAAQ,IAAI;AAAA,YACf,KAAK;AAAA,YACL,OAAO,UAAU;AAAA,UACnB,CAAC;AAAA,QACH,OAAO;AACL,qBAAW,sBAAsB,UAAU;AACzC,iBAAK,QAAQ,IAAI;AAAA,cACf,KAAK;AAAA,cACL,OAAO,UAAU;AAAA,YACnB,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,MACA,WAAW,aAAa;AACtB,YAAI,KAAK,aAAa;AACpB,gBAAM,IAAI,MAAM,2BAA2B;AAAA,QAC7C;AACA,oBAAY,kBAAkB;AAAA,UAC5B,WAAW,MAAM;AACf,gBAAI;AAEF,yBAAW,UAAU,KAAK,eAAe,QAAQ,OAAO,GAAG;AACzD,qBAAK,YAAY,MAAM;AAAA,cACzB;AACA,mBAAK,cAAc;AAAA,YACrB,SAAS,KAAK;AAEZ,0BAAY,OAAO,IAAI,IAAI;AAAA,YAC7B;AAAA,UACF;AAAA,UACA,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA,MACA,MAAM,OAAO;AACX,YAAI,QAAQ;AAGZ,mBAAW,UAAU,KAAK,QAAQ,OAAO,KAAK,GAAG;AAC/C,mBAAS;AAAA,QACX;AACA,eAAO;AAAA,MACT;AAAA,IACF;AACA,IAAO,gBAAQ;AAAA;AAAA;;;AC5Jf,IACM,iBA4CC;AA7CP;AAAA;AAAA;AACA,IAAM,kBAAkB,CAAC,SAAS,WAAW;AAG3C,UAAI,YAAY,UAAa,YAAY,QAAQ,OAAO,YAAY,YAAY,QAAQ,aAAa,WAAW,WAAW,CAAC,MAAM,QAAQ,OAAO,IAAI;AACnJ,kBAAU,QAAQ,SAAS;AAAA,MAC7B;AACA,UAAI,OAAO,YAAY,UAAU;AAC/B,YAAI,YAAY,MAAM,WAAW,UAAU;AACzC;AAAA,QACF;AACA,YAAI;AAGF,gBAAM;AAAA;AAAA,YAEN;AAAA;AACA,cAAI,QAAQ,UAAU,KAAK,qBAAqB,KAAK,OAAO,GAAG;AAC7D;AAAA,UACF;AAAA,QACF,SAAS,KAAK;AACZ,gBAAM,IAAI,YAAY,IAAI,OAAO;AAAA,QACnC;AACA,YAAI,QAAQ,QAAQ,GAAG,KAAK,GAAG;AAC7B,gBAAM,IAAI,YAAY,wEAAwE;AAAA,QAChG;AAAA,MACF;AACA,UAAI,MAAM,QAAQ,OAAO,KAAK,QAAQ,SAAS,GAAG;AAChD,YAAI,QAAQ;AAEV,gBAAM,IAAI,YAAY,oEAAoE;AAAA,QAC5F;AACA,mBAAW,QAAQ,SAAS;AAC1B,0BAAgB,MAAM,OAAO;AAAA,QAC/B;AACA;AAAA,MACF,WAAW,OAAO,YAAY,YAAY,QAAQ,QAAQ,GAAG,KAAK,GAAG;AACnE,kBAAU,QAAQ,MAAM,GAAG;AAC3B,mBAAW,QAAQ,SAAS;AAC1B,0BAAgB,MAAM,QAAQ;AAAA,QAChC;AACA;AAAA,MACF;AACA,YAAM,IAAI,YAAY;AAAA,IACxB;AACA,IAAO,0BAAQ;AAAA;AAAA;;;AC7Cf,IAcME,2BAQA,mBAoCA,gBA4TC;AAtXP;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMA,4BAA2B,iBAAe;AAC9C,UAAI,YAAY,gBAAgB,SAAS;AACvC,cAAM,IAAI,kBAAkB;AAAA,MAC9B;AACA,UAAI,YAAY,YAAY,WAAW,UAAU;AAC/C,cAAM,IAAI,yBAAyB;AAAA,MACrC;AAAA,IACF;AACA,IAAM,oBAAoB,CAAC,aAAa,OAAO,QAAQ;AACrD,MAAAA,0BAAyB,WAAW;AACpC,UAAI,YAAY,YAAY,SAAS,YAAY;AAC/C,cAAM,IAAI,cAAc;AAAA,MAC1B;AACA,UAAI,YAAY,YAAY,MAAM;AAChC,YAAI,QAAQ,QAAW;AACrB,gBAAM,IAAI,UAAU;AAAA,QACtB;AAAA,MACF;AACA,YAAM,QAAQ,gBAAgB,KAAK;AACnC,UAAI,YAAY,YAAY,MAAM;AAChC,cAAM,UAAU,mBAAW,YAAY,SAAS,KAAK;AACrD,YAAI,QAAQ,SAAS,SAAS;AAC5B,6BAAW,QAAQ,GAAG;AAAA,QACxB,OAAO;AACL,cAAI,CAAC,YAAY,gBAAgB,cAAc;AAC7C,kBAAM,IAAI,UAAU;AAAA,UACtB,WAAW,CAAC,qBAAa,YAAY,SAAS,KAAK,GAAG;AACpD,kBAAM,IAAI,UAAU;AAAA,UACtB;AAAA,QACF;AAAA,MACF;AACA,UAAI,YAAY,YAAY,QAAQ,YAAY,gBAAgB,iBAAiB,QAAQ,QAAQ,QAAW;AAC1G,cAAM,IAAI,UAAU;AAAA,MACtB;AACA,UAAI,QAAQ,QAAW;AACrB,cAAM,mBAAW,GAAG;AAAA,MACtB;AACA,aAAO;AAAA,QACL;AAAA,QACA,OAAO;AAAA,MACT;AAAA,IACF;AAGA,IAAM,iBAAN,MAAqB;AAAA,MAEnB,YAAY,aAAa,gBAAgB;AADzC,6CAAgB,oBAAI,IAAI;AAEtB,aAAK,kBAAkB;AACvB,aAAK,QAAQ,eAAe;AAC5B,aAAK,UAAU,eAAe;AAC9B,aAAK,gBAAgB,eAAe;AACpC,aAAK,cAAc;AACnB,aAAK,aAAa,IAAI,0BAAkB,GAAG,MAAM,KAAK,eAAe,WAAW,KAAK,CAAC,EAAE,KAAK,CAAC;AAAA,MAChG;AAAA,MACA,IAAI,OAAO;AACT,eAAO,KAAK;AAAA,MACd;AAAA;AAAA,MAGA,IAAI,KAAK,MAAM;AACb,cAAM,cAAc,KAAK;AACzB,YAAI,CAAC,YAAY,GAAG,kCAAkC;AACpD,gBAAM,IAAI,kBAAkB;AAAA,QAC9B;AACA,QAAAA,0BAAyB,IAAI;AAC7B,eAAO,OAAO,IAAI;AAClB,YAAI,SAAS,KAAK,OAAO;AACvB;AAAA,QACF;AACA,YAAI,KAAK,gBAAgB,YAAY,gBAAgB,IAAI,IAAI,GAAG;AAC9D,gBAAM,IAAI,gBAAgB;AAAA,QAC5B;AACA,cAAM,UAAU,KAAK;AACrB,cAAM,sBAAsB,CAAC,GAAG,YAAY,GAAG,gBAAgB;AAC/D,aAAK,QAAQ;AACb,aAAK,gBAAgB,OAAO;AAC5B,aAAK,YAAY,mBAAmB,OAAO,OAAO;AAClD,aAAK,YAAY,mBAAmB,IAAI,MAAM,IAAI;AAClD,aAAK,gBAAgB,YAAY,gBAAgB,OAAO,OAAO;AAC/D,aAAK,gBAAgB,YAAY,gBAAgB,IAAI,MAAM,KAAK,eAAe;AAC/E,oBAAY,GAAG,mBAAmB,IAAI,0BAAkB,GAAG,MAAM,KAAK,KAAK,gBAAgB,YAAY,gBAAgB,KAAK,CAAC,EAAE,OAAO,qBAAmB;AACvJ,gBAAM,cAAc,KAAK,gBAAgB,YAAY,gBAAgB,IAAI,eAAe;AACxF,iBAAO,eAAe,CAAC,YAAY;AAAA,QACrC,CAAC,EAAE,KAAK,CAAC;AACT,cAAM,WAAW,IAAI,IAAI,YAAY,MAAM;AAC3C,cAAM,iCAAiC,CAAC,GAAG,YAAY,gBAAgB;AACvE,aAAK,YAAY,OAAO,OAAO,OAAO;AACtC,oBAAY,OAAO,IAAI,IAAI;AAC3B,oBAAY,mBAAmB,IAAI,0BAAkB,GAAG,MAAM,KAAK,YAAY,MAAM,EAAE,KAAK,CAAC;AAC7F,oBAAY,aAAa,KAAK,MAAM;AAClC,eAAK,QAAQ;AACb,eAAK,gBAAgB,OAAO;AAC5B,eAAK,YAAY,mBAAmB,OAAO,IAAI;AAC/C,eAAK,YAAY,mBAAmB,IAAI,SAAS,IAAI;AACrD,eAAK,gBAAgB,YAAY,gBAAgB,OAAO,IAAI;AAC5D,eAAK,gBAAgB,YAAY,gBAAgB,IAAI,SAAS,KAAK,eAAe;AAClF,sBAAY,GAAG,mBAAmB,IAAI,0BAAkB,GAAG,mBAAmB;AAC9E,sBAAY,SAAS;AACrB,sBAAY,mBAAmB,IAAI,0BAAkB,GAAG,8BAA8B;AAAA,QACxF,CAAC;AAAA,MACH;AAAA,MACA,IAAI,OAAO,KAAK;AACd,YAAI,UAAU,WAAW,GAAG;AAC1B,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,cAAM,SAAS,kBAAkB,MAAM,OAAO,GAAG;AACjD,eAAO,KAAK,YAAY,kBAAkB;AAAA,UACxC,WAAW,KAAK,gBAAgB,YAAY,KAAK,KAAK,iBAAiB,QAAQ,OAAO,KAAK,YAAY,YAAY;AAAA,UACnH,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA,MACA,IAAI,OAAO,KAAK;AACd,YAAI,UAAU,WAAW,GAAG;AAC1B,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,cAAM,SAAS,kBAAkB,MAAM,OAAO,GAAG;AACjD,eAAO,KAAK,YAAY,kBAAkB;AAAA,UACxC,WAAW,KAAK,gBAAgB,YAAY,KAAK,KAAK,iBAAiB,QAAQ,MAAM,KAAK,YAAY,YAAY;AAAA,UAClH,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA,MACA,OAAO,KAAK;AACV,YAAI,UAAU,WAAW,GAAG;AAC1B,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,QAAAA,0BAAyB,IAAI;AAC7B,YAAI,KAAK,YAAY,SAAS,YAAY;AACxC,gBAAM,IAAI,cAAc;AAAA,QAC1B;AACA,YAAI,EAAE,eAAe,sBAAc;AACjC,gBAAM,mBAAW,GAAG;AAAA,QACtB;AACA,eAAO,KAAK,YAAY,kBAAkB;AAAA,UACxC,WAAW,KAAK,gBAAgB,aAAa,KAAK,KAAK,iBAAiB,KAAK,KAAK,YAAY,YAAY;AAAA,UAC1G,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA,MACA,IAAI,KAAK;AACP,YAAI,UAAU,WAAW,GAAG;AAC1B,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,QAAAA,0BAAyB,IAAI;AAC7B,YAAI,EAAE,eAAe,sBAAc;AACjC,gBAAM,mBAAW,GAAG;AAAA,QACtB;AACA,eAAO,KAAK,YAAY,kBAAkB;AAAA,UACxC,WAAW,KAAK,gBAAgB,SAAS,KAAK,KAAK,iBAAiB,GAAG;AAAA,UACvE,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA;AAAA,MAGA,OAAO,OAAO,OAAO;AACnB,YAAI,UAAU,SAAS,KAAK,UAAU,QAAW;AAC/C,kBAAQ,qBAAa,OAAO,eAAe;AAAA,QAC7C;AACA,QAAAA,0BAAyB,IAAI;AAC7B,cAAM,QAAQ,wBAAgB,KAAK;AACnC,eAAO,KAAK,YAAY,kBAAkB;AAAA,UACxC,WAAW,KAAK,gBAAgB,aAAa,KAAK,KAAK,iBAAiB,OAAO,KAAK;AAAA,UACpF,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA;AAAA,MAGA,OAAO,KAAK;AACV,YAAI,UAAU,WAAW,GAAG;AAC1B,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,QAAAA,0BAAyB,IAAI;AAC7B,YAAI,EAAE,eAAe,sBAAc;AACjC,gBAAM,mBAAW,GAAG;AAAA,QACtB;AACA,eAAO,KAAK,YAAY,kBAAkB;AAAA,UACxC,WAAW,KAAK,gBAAgB,OAAO,KAAK,KAAK,iBAAiB,GAAG;AAAA,UACrE,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA;AAAA,MAGA,WAAW,OAAO,OAAO;AACvB,YAAI,UAAU,SAAS,KAAK,UAAU,QAAW;AAC/C,kBAAQ,qBAAa,OAAO,eAAe;AAAA,QAC7C;AACA,QAAAA,0BAAyB,IAAI;AAC7B,cAAM,QAAQ,wBAAgB,KAAK;AACnC,eAAO,KAAK,YAAY,kBAAkB;AAAA,UACxC,WAAW,KAAK,gBAAgB,WAAW,KAAK,KAAK,iBAAiB,OAAO,KAAK;AAAA,UAClF,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA,MACA,QAAQ;AACN,QAAAA,0BAAyB,IAAI;AAC7B,YAAI,KAAK,YAAY,SAAS,YAAY;AACxC,gBAAM,IAAI,cAAc;AAAA,QAC1B;AACA,eAAO,KAAK,YAAY,kBAAkB;AAAA,UACxC,WAAW,KAAK,gBAAgB,MAAM,KAAK,KAAK,iBAAiB,KAAK,YAAY,YAAY;AAAA,UAC9F,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA,MACA,WAAW,OAAO,WAAW;AAC3B,QAAAA,0BAAyB,IAAI;AAC7B,YAAI,UAAU,MAAM;AAClB,kBAAQ;AAAA,QACV;AACA,YAAI,UAAU,UAAa,EAAE,iBAAiB,sBAAc;AAC1D,kBAAQ,oBAAY,KAAK,mBAAW,KAAK,CAAC;AAAA,QAC5C;AACA,cAAM,UAAU,IAAI,mBAAW;AAC/B,gBAAQ,SAAS;AACjB,gBAAQ,cAAc,KAAK;AAC3B,cAAM,SAAS,IAAI,2BAAmB,MAAM,OAAO,WAAW,OAAO;AACrE,eAAO,KAAK,YAAY,kBAAkB;AAAA,UACxC,WAAW,OAAO,SAAS,KAAK,MAAM;AAAA,UACtC;AAAA,UACA,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA,MACA,cAAc,OAAO,WAAW;AAC9B,QAAAA,0BAAyB,IAAI;AAC7B,YAAI,UAAU,MAAM;AAClB,kBAAQ;AAAA,QACV;AACA,YAAI,UAAU,UAAa,EAAE,iBAAiB,sBAAc;AAC1D,kBAAQ,oBAAY,KAAK,mBAAW,KAAK,CAAC;AAAA,QAC5C;AACA,cAAM,UAAU,IAAI,mBAAW;AAC/B,gBAAQ,SAAS;AACjB,gBAAQ,cAAc,KAAK;AAC3B,cAAM,SAAS,IAAI,kBAAU,MAAM,OAAO,WAAW,SAAS,IAAI;AAClE,eAAO,KAAK,YAAY,kBAAkB;AAAA,UACxC,WAAW,OAAO,SAAS,KAAK,MAAM;AAAA,UACtC;AAAA,UACA,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA;AAAA;AAAA,MAIA,YAAY,MAAM,SAAS,qBAAqB,CAAC,GAAG;AAClD,YAAI,UAAU,SAAS,GAAG;AACxB,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,cAAM,aAAa,mBAAmB,eAAe,SAAY,mBAAmB,aAAa;AACjG,cAAM,SAAS,mBAAmB,WAAW,SAAY,mBAAmB,SAAS;AACrF,YAAI,KAAK,YAAY,SAAS,iBAAiB;AAC7C,gBAAM,IAAI,kBAAkB;AAAA,QAC9B;AACA,QAAAA,0BAAyB,IAAI;AAC7B,YAAI,KAAK,WAAW,SAAS,IAAI,GAAG;AAClC,gBAAM,IAAI,gBAAgB;AAAA,QAC5B;AACA,gCAAgB,OAAO;AACvB,YAAI,MAAM,QAAQ,OAAO,KAAK,YAAY;AACxC,gBAAM,IAAI,mBAAmB;AAAA,QAC/B;AASA,cAAM,aAAa,CAAC,GAAG,KAAK,UAAU;AACtC,aAAK,YAAY,aAAa,KAAK,MAAM;AACvC,gBAAM,SAAS,KAAK,gBAAgB,WAAW,IAAI,IAAI;AACvD,cAAI,QAAQ;AACV,mBAAO,UAAU;AAAA,UACnB;AACA,eAAK,aAAa,IAAI,0BAAkB,GAAG,UAAU;AACrD,eAAK,gBAAgB,WAAW,OAAO,IAAI;AAAA,QAC7C,CAAC;AACD,cAAM,QAAQ,IAAI,cAAM,KAAK,iBAAiB,MAAM,SAAS,YAAY,MAAM;AAC/E,aAAK,WAAW,MAAM,IAAI;AAC1B,aAAK,WAAW,MAAM;AACtB,aAAK,gBAAgB,WAAW,IAAI,MAAM,KAAK;AAC/C,cAAM,WAAW,KAAK,WAAW;AAEjC,eAAO,IAAI,iBAAS,MAAM,KAAK;AAAA,MACjC;AAAA;AAAA,MAGA,MAAM,MAAM;AACV,YAAI,UAAU,WAAW,GAAG;AAC1B,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,YAAI,KAAK,gBAAgB,WAAW,KAAK,YAAY,WAAW,YAAY;AAC1E,gBAAM,IAAI,kBAAkB;AAAA,QAC9B;AACA,cAAM,QAAQ,KAAK,cAAc,IAAI,IAAI;AACzC,YAAI,UAAU,QAAW;AACvB,iBAAO;AAAA,QACT;AACA,cAAM,WAAW,KAAK,gBAAgB,WAAW,IAAI,IAAI;AACzD,YAAI,CAAC,KAAK,WAAW,SAAS,IAAI,KAAK,aAAa,QAAW;AAC7D,gBAAM,IAAI,cAAc;AAAA,QAC1B;AACA,cAAM,SAAS,IAAI,iBAAS,MAAM,QAAQ;AAC1C,aAAK,cAAc,IAAI,MAAM,MAAM;AACnC,eAAO;AAAA,MACT;AAAA,MACA,YAAY,MAAM;AAChB,YAAI,UAAU,WAAW,GAAG;AAC1B,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,YAAI,KAAK,YAAY,SAAS,iBAAiB;AAC7C,gBAAM,IAAI,kBAAkB;AAAA,QAC9B;AACA,QAAAA,0BAAyB,IAAI;AAC7B,cAAM,WAAW,KAAK,gBAAgB,WAAW,IAAI,IAAI;AACzD,YAAI,aAAa,QAAW;AAC1B,gBAAM,IAAI,cAAc;AAAA,QAC1B;AACA,aAAK,YAAY,aAAa,KAAK,MAAM;AACvC,mBAAS,UAAU;AACnB,eAAK,gBAAgB,WAAW,IAAI,MAAM,QAAQ;AAClD,eAAK,WAAW,MAAM,IAAI;AAC1B,eAAK,WAAW,MAAM;AAAA,QACxB,CAAC;AACD,aAAK,aAAa,IAAI,0BAAkB,GAAG,MAAM,KAAK,KAAK,UAAU,EAAE,OAAO,eAAa;AACzF,iBAAO,cAAc;AAAA,QACvB,CAAC,CAAC;AACF,iBAAS,UAAU;AAEnB,aAAK,YAAY,kBAAkB;AAAA,UACjC,WAAW,MAAM;AACf,kBAAM,YAAY,KAAK,gBAAgB,WAAW,IAAI,IAAI;AAI1D,gBAAI,aAAa,WAAW;AAC1B,mBAAK,gBAAgB,WAAW,OAAO,IAAI;AAAA,YAC7C;AAAA,UACF;AAAA,UACA,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA;AAAA,MAGA,MAAM,KAAK;AACT,QAAAA,0BAAyB,IAAI;AAC7B,YAAI,QAAQ,MAAM;AAChB,gBAAM;AAAA,QACR;AACA,YAAI,QAAQ,UAAa,EAAE,eAAe,sBAAc;AACtD,gBAAM,oBAAY,KAAK,mBAAW,GAAG,CAAC;AAAA,QACxC;AACA,eAAO,KAAK,YAAY,kBAAkB;AAAA,UACxC,WAAW,MAAM;AACf,mBAAO,KAAK,gBAAgB,MAAM,GAAG;AAAA,UACvC;AAAA,UACA,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA,MACA,WAAW;AACT,eAAO;AAAA,MACT;AAAA,IACF;AACA,IAAO,yBAAQ;AAAA;AAAA;;;ACtXf,IAAM,OAqCC;AArCP;AAAA;AAAA;AAAA,IAAM,QAAN,MAAY;AAAA,MAmBV,YAAY,MAAM,gBAAgB,CAAC,GAAG;AAlBtC,yCAAY,CAAC;AACb,oCAAO;AACP,+CAAkB;AAClB,yCAAY;AACZ,8CAAiB;AAGjB;AAAA,kDAAqB;AACrB,2DAA8B;AAC9B,wCAAW;AACX,2CAAc;AACd,0CAAa;AACb,sCAAS;AACT,6CAAgB;AAChB,0CAAa;AACb,gDAAmB;AACnB,yCAAY;AACZ,yCAAY,KAAK,IAAI;AAEnB,aAAK,OAAO;AACZ,aAAK,UAAU,cAAc,YAAY,SAAY,cAAc,UAAU;AAC7E,aAAK,aAAa,cAAc,eAAe,SAAY,cAAc,aAAa;AAAA,MACxF;AAAA,MACA,iBAAiB;AACf,YAAI,KAAK,YAAY;AACnB,eAAK,WAAW;AAAA,QAClB;AAAA,MACF;AAAA,MACA,kBAAkB;AAChB,aAAK,qBAAqB;AAAA,MAC5B;AAAA,MACA,2BAA2B;AACzB,aAAK,qBAAqB;AAC1B,aAAK,8BAA8B;AAAA,MACrC;AAAA,IACF;AACA,IAAO,oBAAQ;AAAA;AAAA;;;AC3Bf,SAAS,2BAA2B;AAClC,MAAI,OAAO,cAAc,eAAe,QAAQ,KAAK,UAAU,SAAS,GAAG;AACzE,UAAM,gCAAgC,KAAK;AAC3C,WAAO,IAAI,8BAA8B,qBAAqB,EAAE;AAAA,EAClE,OAAO;AACL,WAAO;AAAA,EACT;AACF;AAjBA,IAyBa;AAzBb;AAAA;AAAA;AAyBO,IAAM,YAAY,QAAM;AAC7B,YAAM,eAAe,WAAW,gBAAgB,yBAAyB,MAAM,CAAAC,QAAM,WAAWA,KAAI,CAAC;AACrG,mBAAa,EAAE;AAAA,IACjB;AAAA;AAAA;;;AC5BA,IAQM,gBA4MC;AApNP;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,IAAM,iBAAN,cAA6B,wBAAgB;AAAA,MAU3C,YAAY,YAAY,MAAM,IAAI;AAChC,cAAM;AAVR,sCAAS;AACT,wCAAW;AACX,4CAAe,CAAC;AAChB,kDAAqB,oBAAI,IAAI;AAC7B,qCAAQ;AACR,uCAAU;AACV,0CAAa;AACb,uCAAU;AACV,yCAAY,CAAC;AAGX,aAAK,SAAS,IAAI,IAAI,UAAU;AAChC,aAAK,OAAO;AACZ,aAAK,KAAK;AACV,aAAK,mBAAmB,IAAI,0BAAkB,GAAG,MAAM,KAAK,KAAK,MAAM,EAAE,KAAK,CAAC;AAAA,MACjF;AAAA;AAAA,MAGA,OAAO,SAAS;AACd,mBAAW,KAAK,KAAK,aAAa,QAAQ,GAAG;AAC3C,YAAE;AAAA,QACJ;AACA,YAAI,YAAY,MAAM;AACpB,gBAAM,IAAI,IAAI,aAAa,QAAW,OAAO;AAC7C,eAAK,QAAQ;AAAA,QACf;AAGA,mBAAW;AAAA,UACT;AAAA,QACF,KAAK,KAAK,WAAW;AACnB,cAAI,QAAQ,eAAe,QAAQ;AACjC,oBAAQ,aAAa;AACrB,gBAAI,QAAQ,QAAQ;AAClB,sBAAQ,SAAS;AACjB,sBAAQ,QAAQ,IAAI,WAAW;AAC/B,oBAAM,QAAQ,IAAI,kBAAU,SAAS;AAAA,gBACnC,SAAS;AAAA,gBACT,YAAY;AAAA,cACd,CAAC;AACD,oBAAM,YAAY,CAAC,KAAK,IAAI,IAAI;AAChC,sBAAQ,cAAc,KAAK;AAAA,YAC7B;AAAA,UACF;AAAA,QACF;AACA,kBAAU,MAAM;AACd,gBAAM,QAAQ,IAAI,kBAAU,SAAS;AAAA,YACnC,SAAS;AAAA,YACT,YAAY;AAAA,UACd,CAAC;AACD,gBAAM,YAAY,CAAC,KAAK,EAAE;AAC1B,eAAK,cAAc,KAAK;AAAA,QAC1B,CAAC;AACD,aAAK,SAAS;AAAA,MAChB;AAAA,MACA,QAAQ;AACN,YAAI,KAAK,WAAW,gBAAgB,KAAK,WAAW,YAAY;AAC9D,gBAAM,IAAI,kBAAkB;AAAA,QAC9B;AACA,aAAK,SAAS;AACd,aAAK,OAAO,IAAI;AAAA,MAClB;AAAA;AAAA,MAGA,YAAY,MAAM;AAChB,YAAI,KAAK,WAAW,UAAU;AAC5B,gBAAM,IAAI,kBAAkB;AAAA,QAC9B;AACA,cAAM,cAAc,KAAK,mBAAmB,IAAI,IAAI;AACpD,YAAI,gBAAgB,QAAW;AAC7B,iBAAO;AAAA,QACT;AACA,cAAM,iBAAiB,KAAK,GAAG,aAAa,gBAAgB,IAAI,IAAI;AACpE,YAAI,CAAC,KAAK,OAAO,IAAI,IAAI,KAAK,mBAAmB,QAAW;AAC1D,gBAAM,IAAI,cAAc;AAAA,QAC1B;AACA,cAAM,eAAe,IAAI,uBAAe,MAAM,cAAc;AAC5D,aAAK,mBAAmB,IAAI,MAAM,YAAY;AAC9C,eAAO;AAAA,MACT;AAAA;AAAA,MAGA,kBAAkB,KAAK;AACrB,cAAM,SAAS,IAAI;AACnB,cAAM,YAAY,IAAI;AACtB,YAAI,UAAU,OAAO,OAAO,KAAK,SAAS,IAAI,IAAI,UAAU;AAC5D,YAAI,KAAK,WAAW,UAAU;AAC5B,gBAAM,IAAI,yBAAyB;AAAA,QACrC;AAGA,YAAI,CAAC,SAAS;AACZ,cAAI,CAAC,QAAQ;AAEX,sBAAU,IAAI,mBAAW;AAAA,UAC3B,OAAO;AACL,sBAAU,IAAI,mBAAW;AACzB,oBAAQ,SAAS;AACjB,oBAAQ,cAAc,OAAO;AAAA,UAC/B;AAAA,QACF;AACA,aAAK,UAAU,KAAK;AAAA,UAClB;AAAA,UACA;AAAA,QACF,CAAC;AACD,eAAO;AAAA,MACT;AAAA,MACA,SAAS;AACP,aAAK,WAAW;AAGhB,YAAI;AACJ,YAAI;AACJ,eAAO,KAAK,UAAU,SAAS,GAAG;AAChC,gBAAM,IAAI,KAAK,UAAU,MAAM;AAG/B,cAAI,KAAK,EAAE,QAAQ,eAAe,QAAQ;AACxC,sBAAU,EAAE;AACZ,wBAAY,EAAE;AACd;AAAA,UACF;AAAA,QACF;AACA,YAAI,WAAW,WAAW;AACxB,cAAI,CAAC,QAAQ,QAAQ;AAGnB,sBAAU;AAAA,UACZ,OAAO;AACL,gBAAI;AACJ,gBAAI;AACJ,gBAAI;AACF,oBAAM,SAAS,UAAU;AACzB,sBAAQ,aAAa;AACrB,sBAAQ,SAAS;AACjB,sBAAQ,QAAQ;AAGhB,kBAAI,KAAK,WAAW,YAAY;AAC9B,qBAAK,SAAS;AAAA,cAChB;AACA,sBAAQ,IAAI,kBAAU,WAAW;AAAA,gBAC/B,SAAS;AAAA,gBACT,YAAY;AAAA,cACd,CAAC;AAAA,YACH,SAAS,KAAK;AACZ,sBAAQ,aAAa;AACrB,sBAAQ,SAAS;AACjB,sBAAQ,QAAQ;AAGhB,kBAAI,KAAK,WAAW,YAAY;AAC9B,qBAAK,SAAS;AAAA,cAChB;AACA,sBAAQ,IAAI,kBAAU,SAAS;AAAA,gBAC7B,SAAS;AAAA,gBACT,YAAY;AAAA,cACd,CAAC;AACD,8BAAgB,KAAK,OAAO,KAAK,MAAM,IAAI,IAAI;AAAA,YACjD;AACA,gBAAI;AACF,oBAAM,YAAY,CAAC,KAAK,IAAI,IAAI;AAChC,sBAAQ,cAAc,KAAK;AAAA,YAC7B,SAAS,KAAK;AACZ,kBAAI,KAAK,WAAW,cAAc;AAChC,qBAAK,OAAO,YAAY;AAAA,cAC1B;AACA,oBAAM;AAAA,YACR;AAGA,gBAAI,CAAC,MAAM,UAAU;AACnB,kBAAI,eAAe;AACjB,8BAAc;AAAA,cAChB;AAAA,YACF;AAAA,UACF;AAGA,oBAAU,KAAK,OAAO,KAAK,IAAI,CAAC;AAChC;AAAA,QACF;AAGA,YAAI,KAAK,WAAW,YAAY;AAE9B,eAAK,SAAS;AACd,cAAI,CAAC,KAAK,OAAO;AACf,kBAAM,QAAQ,IAAI,kBAAU,UAAU;AACtC,iBAAK,cAAc,KAAK;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAAA,MACA,SAAS;AACP,YAAI,KAAK,WAAW,UAAU;AAC5B,gBAAM,IAAI,kBAAkB;AAAA,QAC9B;AACA,aAAK,SAAS;AAAA,MAChB;AAAA,MACA,WAAW;AACT,eAAO;AAAA,MACT;AAAA,IACF;AACA,IAAO,yBAAQ;AAAA;AAAA;;;ACpNf,IACM,SACA,cAmBC;AArBP;AAAA;AAAA;AAAA;AACA,IAAM,UAAU;AAChB,IAAM,eAAN,MAAmB;AAAA,MAAnB;AAEE;AAAA,mCAAM;AAAA;AAAA,MACN,OAAO;AACL,YAAI,KAAK,OAAO,SAAS;AACvB,gBAAM,IAAI,gBAAgB;AAAA,QAC5B;AACA,aAAK,OAAO;AACZ,eAAO,KAAK;AAAA,MACd;AAAA;AAAA,MAGA,YAAY,KAAK;AACf,cAAM,QAAQ,KAAK,MAAM,KAAK,IAAI,KAAK,OAAO,CAAC,IAAI;AACnD,YAAI,SAAS,KAAK,KAAK;AACrB,eAAK,MAAM,QAAQ;AAAA,QACrB;AAAA,MACF;AAAA,IACF;AACA,IAAO,uBAAQ;AAAA;AAAA;;;ACrBf,IAKM,aAsKC;AA3KP;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA,IAAM,cAAN,MAAkB;AAAA,MAIhB,YAAY,aAAa,MAAM,SAAS,eAAe;AAHvD,uCAAU;AACV,uCAAU,IAAI,oBAAY;AAC1B,0CAAa,oBAAI,IAAI;AAEnB,aAAK,cAAc;AACnB,aAAK,eAAe,kBAAkB,OAAO,IAAI,qBAAa,IAAI;AAClE,aAAK,UAAU;AACf,aAAK,OAAO;AACZ,aAAK,UAAU;AACf,aAAK,gBAAgB;AAAA,MACvB;AAAA;AAAA,MAGA,OAAO,KAAK;AACV,cAAM,SAAS,KAAK,QAAQ,IAAI,GAAG;AACnC,eAAO,WAAW,SAAY,gBAAgB,OAAO,GAAG,IAAI;AAAA,MAC9D;AAAA;AAAA,MAGA,WAAW,OAAO,OAAO;AACvB,YAAI,UAAU,UAAa,UAAU,GAAG;AACtC,kBAAQ;AAAA,QACV;AACA,cAAM,UAAU,CAAC;AACjB,mBAAW,UAAU,KAAK,QAAQ,OAAO,KAAK,GAAG;AAC/C,kBAAQ,KAAK,gBAAgB,OAAO,GAAG,CAAC;AACxC,cAAI,QAAQ,UAAU,OAAO;AAC3B;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA;AAAA,MAGA,SAAS,KAAK;AACZ,cAAM,SAAS,KAAK,QAAQ,IAAI,GAAG;AACnC,eAAO,WAAW,SAAY,gBAAgB,OAAO,KAAK,IAAI;AAAA,MAChE;AAAA;AAAA,MAGA,aAAa,OAAO,OAAO;AACzB,YAAI,UAAU,UAAa,UAAU,GAAG;AACtC,kBAAQ;AAAA,QACV;AACA,cAAM,UAAU,CAAC;AACjB,mBAAW,UAAU,KAAK,QAAQ,OAAO,KAAK,GAAG;AAC/C,kBAAQ,KAAK,gBAAgB,OAAO,KAAK,CAAC;AAC1C,cAAI,QAAQ,UAAU,OAAO;AAC3B;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA;AAAA,MAGA,YAAY,WAAW,aAAa,aAAa;AAC/C,YAAI,KAAK,YAAY,MAAM;AACzB,gBAAM,MAAM,mBAAW,KAAK,SAAS,UAAU,KAAK,EAAE;AACtD,cAAI,QAAQ,QAAW;AACrB,sBAAU,MAAM;AAAA,UAClB;AAAA,QACF;AACA,YAAI,KAAK,iBAAiB,QAAQ,UAAU,QAAQ,QAAW;AAC7D,cAAI,aAAa;AACf,kBAAM,qBAAqB,KAAK,aAAa;AAC7C,wBAAY,KAAK,MAAM;AACrB,kBAAI,KAAK,cAAc;AACrB,qBAAK,aAAa,MAAM;AAAA,cAC1B;AAAA,YACF,CAAC;AAAA,UACH;AACA,oBAAU,MAAM,KAAK,aAAa,KAAK;AAIvC,cAAI,KAAK,YAAY,MAAM;AACzB,gBAAI,MAAM,QAAQ,KAAK,OAAO,GAAG;AAC/B,oBAAM,IAAI,MAAM,uEAAuE;AAAA,YACzF;AACA,gBAAI,mBAAmB,KAAK;AAC5B,gBAAI,SAAS,UAAU;AACvB,gBAAI;AACJ,gBAAI,IAAI;AACR,mBAAO,KAAK,GAAG;AACb,kBAAI,OAAO,WAAW,UAAU;AAC9B,sBAAM,IAAI,UAAU;AAAA,cACtB;AACA,kBAAI,iBAAiB,QAAQ,GAAG;AAChC,kBAAI,KAAK,GAAG;AACV,6BAAa,iBAAiB,MAAM,GAAG,CAAC;AACxC,mCAAmB,iBAAiB,MAAM,IAAI,CAAC;AAC/C,oBAAI,CAAC,OAAO,OAAO,QAAQ,UAAU,GAAG;AACtC,yBAAO,UAAU,IAAI,CAAC;AAAA,gBACxB;AACA,yBAAS,OAAO,UAAU;AAAA,cAC5B;AAAA,YACF;AACA,yBAAa;AACb,mBAAO,UAAU,IAAI,UAAU;AAAA,UACjC;AAAA,QACF,WAAW,KAAK,iBAAiB,QAAQ,OAAO,UAAU,QAAQ,UAAU;AAC1E,eAAK,aAAa,YAAY,UAAU,GAAG;AAAA,QAC7C;AACA,cAAM,iBAAiB,KAAK,QAAQ,IAAI,UAAU,GAAG;AACrD,YAAI,gBAAgB;AAClB,cAAI,aAAa;AACf,kBAAM,IAAI,gBAAgB;AAAA,UAC5B;AACA,eAAK,aAAa,UAAU,KAAK,WAAW;AAAA,QAC9C;AACA,aAAK,QAAQ,IAAI,SAAS;AAC1B,YAAI,aAAa;AACf,sBAAY,KAAK,MAAM;AACrB,iBAAK,aAAa,UAAU,GAAG;AAAA,UACjC,CAAC;AAAA,QACH;AAGA,mBAAW,YAAY,KAAK,WAAW,OAAO,GAAG;AAC/C,cAAI,SAAS,aAAa;AACxB,qBAAS,YAAY,SAAS;AAAA,UAChC;AAAA,QACF;AACA,eAAO,UAAU;AAAA,MACnB;AAAA;AAAA,MAGA,aAAa,KAAK,aAAa;AAC7B,cAAM,iBAAiB,KAAK,QAAQ,OAAO,GAAG;AAC9C,YAAI,aAAa;AACf,qBAAW,UAAU,gBAAgB;AACnC,wBAAY,KAAK,MAAM;AACrB,mBAAK,YAAY,QAAQ,IAAI;AAAA,YAC/B,CAAC;AAAA,UACH;AAAA,QACF;AACA,mBAAW,YAAY,KAAK,WAAW,OAAO,GAAG;AAC/C,mBAAS,QAAQ,cAAc,GAAG;AAAA,QACpC;AAAA,MACF;AAAA;AAAA,MAGA,MAAM,aAAa;AACjB,cAAM,iBAAiB,KAAK,QAAQ,MAAM;AAC1C,YAAI,aAAa;AACf,qBAAW,UAAU,gBAAgB;AACnC,wBAAY,KAAK,MAAM;AACrB,mBAAK,YAAY,QAAQ,IAAI;AAAA,YAC/B,CAAC;AAAA,UACH;AAAA,QACF;AACA,mBAAW,YAAY,KAAK,WAAW,OAAO,GAAG;AAC/C,mBAAS,QAAQ,MAAM;AAAA,QACzB;AAAA,MACF;AAAA,MACA,MAAM,OAAO;AACX,YAAI,QAAQ;AAGZ,mBAAW,UAAU,KAAK,QAAQ,OAAO,KAAK,GAAG;AAC/C,mBAAS;AAAA,QACX;AACA,eAAO;AAAA,MACT;AAAA,IACF;AACA,IAAO,sBAAQ;AAAA;AAAA;;;AC3Kf,IAOM,uCAoBA,iBAkBA,aA6GC;AA1JP;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAM,wCAAwC,cAAY;AACxD,UAAI,CAAC,SAAS,kCAAkC;AAC9C,cAAM,IAAI,kBAAkB;AAAA,MAC9B;AAGA,YAAM,eAAe,SAAS,aAAa,aAAa,OAAO,QAAM;AACnE,eAAO,GAAG,SAAS;AAAA,MACrB,CAAC;AACD,YAAM,cAAc,aAAa,aAAa,SAAS,CAAC;AACxD,UAAI,CAAC,eAAe,YAAY,WAAW,YAAY;AACrD,cAAM,IAAI,kBAAkB;AAAA,MAC9B;AACA,UAAI,YAAY,WAAW,UAAU;AACnC,cAAM,IAAI,yBAAyB;AAAA,MACrC;AACA,aAAO;AAAA,IACT;AAGA,IAAM,kBAAkB,gBAAc;AACpC,iBAAW,gBAAgB;AAC3B,YAAM,uBAAuB,WAAW,aAAa,aAAa,MAAM,iBAAe;AACrF,eAAO,YAAY,WAAW;AAAA,MAChC,CAAC;AACD,UAAI,sBAAsB;AACxB,mBAAW,UAAU;AACrB,mBAAW,aAAa,cAAc,WAAW,aAAa,YAAY,OAAO,qBAAmB;AAClG,iBAAO,eAAe;AAAA,QACxB,CAAC;AAAA,MACH,OAAO;AACL,kBAAU,MAAM;AACd,0BAAgB,UAAU;AAAA,QAC5B,CAAC;AAAA,MACH;AAAA,IACF;AAGA,IAAM,cAAN,cAA0B,wBAAgB;AAAA,MAIxC,YAAY,aAAa;AACvB,cAAM;AAJR,6CAAgB;AAChB,uCAAU;AACV,gEAAmC;AAGjC,aAAK,eAAe;AACpB,aAAK,aAAa,YAAY,KAAK,IAAI;AACvC,aAAK,OAAO,YAAY;AACxB,aAAK,UAAU,YAAY;AAC3B,aAAK,mBAAmB,IAAI,0BAAkB,GAAG,MAAM,KAAK,YAAY,gBAAgB,KAAK,CAAC,EAAE,KAAK,CAAC;AAAA,MACxG;AAAA;AAAA,MAGA,kBAAkB,MAAM,UAAU,CAAC,GAAG;AACpC,YAAI,SAAS,QAAW;AACtB,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,cAAM,cAAc,sCAAsC,IAAI;AAC9D,cAAM,UAAU,YAAY,QAAQ,QAAQ,YAAY,SAAY,QAAQ,UAAU;AACtF,cAAM,gBAAgB,YAAY,QAAQ,QAAQ,kBAAkB,SAAY,QAAQ,gBAAgB;AACxG,YAAI,YAAY,MAAM;AACpB,kCAAgB,OAAO;AAAA,QACzB;AACA,YAAI,KAAK,aAAa,gBAAgB,IAAI,IAAI,GAAG;AAC/C,gBAAM,IAAI,gBAAgB;AAAA,QAC5B;AACA,YAAI,kBAAkB,YAAY,MAAM,MAAM,QAAQ,OAAO,IAAI;AAC/D,gBAAM,IAAI,mBAAmB;AAAA,QAC/B;AACA,cAAM,mBAAmB,CAAC,GAAG,KAAK,gBAAgB;AAClD,oBAAY,aAAa,KAAK,MAAM;AAClC,gBAAM,cAAc,KAAK,aAAa,gBAAgB,IAAI,IAAI;AAC9D,cAAI,aAAa;AACf,wBAAY,UAAU;AAAA,UACxB;AACA,eAAK,mBAAmB,IAAI,0BAAkB,GAAG,gBAAgB;AACjE,sBAAY,OAAO,OAAO,IAAI;AAC9B,eAAK,aAAa,gBAAgB,OAAO,IAAI;AAAA,QAC/C,CAAC;AACD,cAAM,iBAAiB,IAAI,oBAAY,KAAK,cAAc,MAAM,SAAS,aAAa;AACtF,aAAK,iBAAiB,MAAM,IAAI;AAChC,aAAK,iBAAiB,MAAM;AAC5B,oBAAY,OAAO,IAAI,IAAI;AAC3B,aAAK,aAAa,gBAAgB,IAAI,MAAM,cAAc;AAC1D,oBAAY,mBAAmB,IAAI,0BAAkB,GAAG,KAAK,gBAAgB;AAC7E,eAAO,YAAY,YAAY,IAAI;AAAA,MACrC;AAAA,MACA,kBAAkB,MAAM;AACtB,YAAI,SAAS,QAAW;AACtB,gBAAM,IAAI,UAAU;AAAA,QACtB;AACA,cAAM,cAAc,sCAAsC,IAAI;AAC9D,cAAM,QAAQ,KAAK,aAAa,gBAAgB,IAAI,IAAI;AACxD,YAAI,UAAU,QAAW;AACvB,gBAAM,IAAI,cAAc;AAAA,QAC1B;AACA,aAAK,mBAAmB,IAAI,0BAAkB,GAAG,MAAM,KAAK,KAAK,gBAAgB,EAAE,OAAO,qBAAmB;AAC3G,iBAAO,oBAAoB;AAAA,QAC7B,CAAC,CAAC;AACF,oBAAY,mBAAmB,IAAI,0BAAkB,GAAG,KAAK,gBAAgB;AAC7E,oBAAY,aAAa,KAAK,MAAM;AAClC,gBAAM,UAAU;AAChB,eAAK,aAAa,gBAAgB,IAAI,MAAM,KAAK;AACjD,eAAK,iBAAiB,MAAM,IAAI;AAChC,eAAK,iBAAiB,MAAM;AAAA,QAC9B,CAAC;AACD,cAAM,UAAU;AAChB,aAAK,aAAa,gBAAgB,OAAO,IAAI;AAC7C,oBAAY,mBAAmB,OAAO,IAAI;AAAA,MAC5C;AAAA,MACA,YAAY,YAAY,MAAM;AAC5B,eAAO,SAAS,SAAY,OAAO;AACnC,YAAI,SAAS,cAAc,SAAS,eAAe,SAAS,iBAAiB;AAC3E,gBAAM,IAAI,UAAU,mBAAmB,IAAI;AAAA,QAC7C;AACA,cAAM,yBAAyB,KAAK,aAAa,aAAa,KAAK,iBAAe;AAChF,iBAAO,YAAY,WAAW,YAAY,YAAY,SAAS,mBAAmB,YAAY,OAAO;AAAA,QACvG,CAAC;AACD,YAAI,wBAAwB;AAC1B,gBAAM,IAAI,kBAAkB;AAAA,QAC9B;AACA,YAAI,KAAK,eAAe;AACtB,gBAAM,IAAI,kBAAkB;AAAA,QAC9B;AACA,YAAI,CAAC,MAAM,QAAQ,UAAU,GAAG;AAC9B,uBAAa,CAAC,UAAU;AAAA,QAC1B;AACA,YAAI,WAAW,WAAW,KAAK,SAAS,iBAAiB;AACvD,gBAAM,IAAI,mBAAmB;AAAA,QAC/B;AACA,mBAAW,aAAa,YAAY;AAClC,cAAI,CAAC,KAAK,iBAAiB,SAAS,SAAS,GAAG;AAC9C,kBAAM,IAAI,cAAc,0BAA0B,YAAY,mBAAmB;AAAA,UACnF;AAAA,QACF;AACA,cAAM,KAAK,IAAI,uBAAe,YAAY,MAAM,IAAI;AACpD,aAAK,aAAa,aAAa,KAAK,EAAE;AACtC,aAAK,aAAa,oBAAoB;AAEtC,eAAO;AAAA,MACT;AAAA,MACA,QAAQ;AACN,wBAAgB,IAAI;AAAA,MACtB;AAAA,MACA,WAAW;AACT,eAAO;AAAA,MACT;AAAA,IACF;AACA,IAAO,sBAAQ;AAAA;AAAA;;;AC1Jf,IACM,kBAOC;AARP;AAAA;AAAA;AAAA;AACA,IAAM,mBAAN,cAA+B,mBAAW;AAAA,MAA1C;AAAA;AACE,+CAAkB;AAClB,yCAAY;AAAA;AAAA,MACZ,WAAW;AACT,eAAO;AAAA,MACT;AAAA,IACF;AACA,IAAO,2BAAQ;AAAA;AAAA;;;ACRf,IACM,uBAUC;AAXP;AAAA;AAAA;AAAA;AACA,IAAM,wBAAN,cAAoC,kBAAU;AAAA,MAC5C,YAAY,MAAM,aAAa,CAAC,GAAG;AACjC,cAAM,IAAI;AACV,aAAK,aAAa,WAAW,eAAe,SAAY,WAAW,aAAa;AAChF,aAAK,aAAa,WAAW,eAAe,SAAY,WAAW,aAAa;AAAA,MAClF;AAAA,MACA,WAAW;AACT,eAAO;AAAA,MACT;AAAA,IACF;AACA,IAAO,gCAAQ;AAAA;AAAA;;;ACXf,IAGM,UA4BC;AA/BP;AAAA;AAAA;AAAA;AAGA,IAAM,WAAN,MAAe;AAAA,MAKb,YAAY,MAAM,SAAS;AAJ3B,6CAAgB;AAChB,4CAAe,CAAC;AAChB,+CAAkB,oBAAI,IAAI;AAC1B,2CAAc,CAAC;AAEb,aAAK,OAAO;AACZ,aAAK,UAAU;AACf,aAAK,sBAAsB,KAAK,oBAAoB,KAAK,IAAI;AAAA,MAC/D;AAAA,MACA,sBAAsB;AACpB,kBAAU,MAAM;AACd,gBAAM,aAAa,KAAK,aAAa,KAAK,iBAAe;AACvD,mBAAO,YAAY,YAAY,YAAY,WAAW;AAAA,UACxD,CAAC;AACD,cAAI,CAAC,YAAY;AACf,kBAAM,OAAO,KAAK,aAAa,KAAK,iBAAe;AACjD,qBAAO,CAAC,YAAY,YAAY,YAAY,WAAW;AAAA,YACzD,CAAC;AACD,gBAAI,MAAM;AACR,mBAAK,iBAAiB,YAAY,KAAK,mBAAmB;AAC1D,mBAAK,iBAAiB,SAAS,KAAK,mBAAmB;AACvD,mBAAK,OAAO;AAAA,YACd;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AACA,IAAO,mBAAQ;AAAA;AAAA;;;AC/Bf,IASM,2BAaA,gBAqCA,6BAkFA,cA0BA,YAwFC;AA/PP;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAM,4BAA4B,CAAC,WAAW,MAAM,eAAe,OAAO;AACxE,YAAM,UAAU,cAAc,KAAK,mBAAiB;AAClD,eAAO,CAAC,cAAc,WAAW,CAAC,cAAc;AAAA,MAClD,CAAC;AACD,UAAI,SAAS;AACX,kBAAU,MAAM,0BAA0B,WAAW,MAAM,eAAe,EAAE,CAAC;AAC7E;AAAA,MACF;AACA,gBAAU,OAAO,IAAI;AACrB,SAAG,IAAI;AAAA,IACT;AAGA,IAAM,iBAAiB,CAAC,WAAW,MAAM,SAAS,OAAO;AACvD,UAAI;AACF,cAAM,KAAK,UAAU,IAAI,IAAI;AAC7B,YAAI,OAAO,QAAW;AACpB,aAAG,IAAI;AACP;AAAA,QACF;AACA,WAAG,gBAAgB;AACnB,cAAM,gBAAgB,GAAG,YAAY,OAAO,gBAAc;AACxD,iBAAO,CAAC,WAAW,WAAW,CAAC,WAAW;AAAA,QAC5C,CAAC;AACD,mBAAW,iBAAiB,eAAe;AACzC,cAAI,CAAC,cAAc,eAAe;AAChC,kBAAM,QAAQ,IAAI,8BAAsB,iBAAiB;AAAA,cACvD,YAAY;AAAA,cACZ,YAAY,GAAG;AAAA,YACjB,CAAC;AACD,0BAAc,cAAc,KAAK;AAAA,UACnC;AAAA,QACF;AACA,cAAM,UAAU,cAAc,KAAK,mBAAiB;AAClD,iBAAO,CAAC,cAAc,WAAW,CAAC,cAAc;AAAA,QAClD,CAAC;AACD,YAAI,WAAW,SAAS;AACtB,gBAAM,QAAQ,IAAI,8BAAsB,WAAW;AAAA,YACjD,YAAY;AAAA,YACZ,YAAY,GAAG;AAAA,UACjB,CAAC;AACD,kBAAQ,cAAc,KAAK;AAAA,QAC7B;AACA,kCAA0B,WAAW,MAAM,eAAe,EAAE;AAAA,MAC9D,SAAS,KAAK;AACZ,WAAG,GAAG;AAAA,MACR;AAAA,IACF;AAGA,IAAM,8BAA8B,CAAC,YAAY,SAAS,SAAS,OAAO;AACxE,iBAAW,mCAAmC;AAC9C,YAAM,aAAa,WAAW;AAC9B,YAAM,gBAAgB,WAAW,aAAa,YAAY,OAAO,mBAAiB;AAChF,eAAO,eAAe;AAAA,MACxB,CAAC;AACD,iBAAW,iBAAiB,eAAe;AACzC,YAAI,CAAC,cAAc,WAAW,CAAC,cAAc,eAAe;AAC1D,gBAAM,QAAQ,IAAI,8BAAsB,iBAAiB;AAAA,YACvD,YAAY;AAAA,YACZ;AAAA,UACF,CAAC;AACD,wBAAc,cAAc,KAAK;AAAA,QACnC;AAAA,MACF;AACA,YAAM,UAAU,cAAc,KAAK,mBAAiB;AAClD,eAAO,CAAC,cAAc,WAAW,CAAC,cAAc;AAAA,MAClD,CAAC;AACD,UAAI,SAAS;AACX,cAAM,QAAQ,IAAI,8BAAsB,WAAW;AAAA,UACjD,YAAY;AAAA,UACZ;AAAA,QACF,CAAC;AACD,gBAAQ,cAAc,KAAK;AAAA,MAC7B;AACA,YAAM,sBAAsB,MAAM;AAChC,cAAM,WAAW,cAAc,KAAK,mBAAiB;AACnD,iBAAO,CAAC,cAAc,WAAW,CAAC,cAAc;AAAA,QAClD,CAAC;AACD,YAAI,UAAU;AACZ,oBAAU,mBAAmB;AAC7B;AAAA,QACF;AAIA,mBAAW,aAAa,UAAU;AAClC,mBAAW,UAAU;AAGrB,cAAM,cAAc,WAAW,YAAY,WAAW,kBAAkB,eAAe;AACvF,gBAAQ,SAAS;AACjB,gBAAQ,aAAa;AACrB,gBAAQ,cAAc;AACtB,oBAAY,aAAa,KAAK,MAAM;AAClC,qBAAW,aAAa,UAAU;AAClC,qBAAW,UAAU;AAAA,QACvB,CAAC;AACD,cAAM,QAAQ,IAAI,8BAAsB,iBAAiB;AAAA,UACvD,YAAY;AAAA,UACZ;AAAA,QACF,CAAC;AACD,gBAAQ,cAAc,KAAK;AAC3B,oBAAY,iBAAiB,SAAS,MAAM;AAC1C,qBAAW,mCAAmC;AAAA,QAGhD,CAAC;AACD,oBAAY,iBAAiB,SAAS,MAAM;AAC1C,qBAAW,mCAAmC;AAC9C,kBAAQ,cAAc;AACtB,oBAAU,MAAM;AACd,eAAG,IAAI,WAAW,CAAC;AAAA,UACrB,CAAC;AAAA,QACH,CAAC;AACD,oBAAY,iBAAiB,YAAY,MAAM;AAC7C,qBAAW,mCAAmC;AAC9C,kBAAQ,cAAc;AAEtB,oBAAU,MAAM;AACd,gBAAI,WAAW,eAAe;AAC5B,iBAAG,IAAI,WAAW,CAAC;AAAA,YACrB,OAAO;AACL,iBAAG,IAAI;AAAA,YACT;AAAA,UACF,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AACA,0BAAoB;AAAA,IACtB;AAGA,IAAM,eAAe,CAAC,WAAW,MAAM,SAAS,SAAS,OAAO;AAC9D,UAAI,KAAK,UAAU,IAAI,IAAI;AAC3B,UAAI,OAAO,QAAW;AACpB,aAAK,IAAI,iBAAS,MAAM,CAAC;AACzB,kBAAU,IAAI,MAAM,EAAE;AAAA,MACxB;AACA,UAAI,YAAY,QAAW;AACzB,kBAAU,GAAG,YAAY,IAAI,GAAG,UAAU;AAAA,MAC5C;AACA,UAAI,GAAG,UAAU,SAAS;AACxB,eAAO,GAAG,IAAI,aAAa,CAAC;AAAA,MAC9B;AACA,YAAM,aAAa,IAAI,oBAAY,EAAE;AACrC,UAAI,GAAG,UAAU,SAAS;AACxB,oCAA4B,YAAY,SAAS,SAAS,SAAO;AAC/D,cAAI,KAAK;AAGP,mBAAO,GAAG,GAAG;AAAA,UACf;AACA,aAAG,MAAM,UAAU;AAAA,QACrB,CAAC;AAAA,MACH,OAAO;AACL,WAAG,MAAM,UAAU;AAAA,MACrB;AAAA,IACF;AACA,IAAM,aAAN,MAAiB;AAAA,MAAjB;AACE,mCAAM;AACN,0CAAa,oBAAI,IAAI;AAAA;AAAA;AAAA,MAGrB,eAAe,MAAM;AACnB,cAAM,UAAU,IAAI,yBAAiB;AACrC,gBAAQ,SAAS;AACjB,kBAAU,MAAM;AACd,gBAAM,KAAK,KAAK,WAAW,IAAI,IAAI;AACnC,gBAAM,aAAa,OAAO,SAAY,GAAG,UAAU;AACnD,yBAAe,KAAK,YAAY,MAAM,SAAS,SAAO;AACpD,gBAAI,KAAK;AACP,sBAAQ,QAAQ,IAAI,aAAa,IAAI,SAAS,IAAI,IAAI;AACtD,sBAAQ,aAAa;AACrB,oBAAM,QAAQ,IAAI,kBAAU,SAAS;AAAA,gBACnC,SAAS;AAAA,gBACT,YAAY;AAAA,cACd,CAAC;AACD,oBAAM,YAAY,CAAC;AACnB,sBAAQ,cAAc,KAAK;AAC3B;AAAA,YACF;AACA,oBAAQ,SAAS;AACjB,oBAAQ,aAAa;AACrB,kBAAM,SAAS,IAAI,8BAAsB,WAAW;AAAA,cAClD,YAAY;AAAA,cACZ;AAAA,YACF,CAAC;AACD,oBAAQ,cAAc,MAAM;AAAA,UAC9B,CAAC;AAAA,QACH,CAAC;AACD,eAAO;AAAA,MACT;AAAA;AAAA,MAGA,KAAK,MAAM,SAAS;AAClB,YAAI,UAAU,SAAS,KAAK,YAAY,QAAW;AAGjD,oBAAU,qBAAa,SAAS,kBAAkB;AAAA,QACpD;AACA,YAAI,YAAY,GAAG;AACjB,gBAAM,IAAI,UAAU,8BAA8B;AAAA,QACpD;AACA,cAAM,UAAU,IAAI,yBAAiB;AACrC,gBAAQ,SAAS;AACjB,kBAAU,MAAM;AACd,uBAAa,KAAK,YAAY,MAAM,SAAS,SAAS,CAAC,KAAK,eAAe;AACzE,gBAAI,KAAK;AACP,sBAAQ,SAAS;AACjB,sBAAQ,aAAa;AACrB,sBAAQ,QAAQ,IAAI,aAAa,IAAI,SAAS,IAAI,IAAI;AACtD,oBAAM,QAAQ,IAAI,kBAAU,SAAS;AAAA,gBACnC,SAAS;AAAA,gBACT,YAAY;AAAA,cACd,CAAC;AACD,oBAAM,YAAY,CAAC;AACnB,sBAAQ,cAAc,KAAK;AAC3B;AAAA,YACF;AACA,oBAAQ,SAAS;AACjB,oBAAQ,aAAa;AACrB,kBAAM,SAAS,IAAI,kBAAU,SAAS;AACtC,mBAAO,YAAY,CAAC;AACpB,oBAAQ,cAAc,MAAM;AAAA,UAC9B,CAAC;AAAA,QACH,CAAC;AACD,eAAO;AAAA,MACT;AAAA;AAAA,MAGA,YAAY;AACV,eAAO,IAAI,QAAQ,aAAW;AAC5B,gBAAM,SAAS,CAAC;AAChB,qBAAW,CAAC,MAAM,QAAQ,KAAK,KAAK,YAAY;AAC9C,mBAAO,KAAK;AAAA,cACV;AAAA,cACA,SAAS,SAAS;AAAA,YACpB,CAAC;AAAA,UACH;AACA,kBAAQ,MAAM;AAAA,QAChB,CAAC;AAAA,MACH;AAAA,MACA,WAAW;AACT,eAAO;AAAA,MACT;AAAA,IACF;AACA,IAAO,qBAAQ;AAAA;AAAA;;;AC/Pf,IACM,eACC;AAFP;AAAA;AAAA;AAAA;AACA,IAAM,gBAAgB,IAAI,mBAAW;AACrC,IAAO,wBAAQ;AAAA;AAAA;;;ACFf;AAAA,IAcI;AAdJ;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA,IAAI,YACA,OAAO,WAAW,cACZ,SACA,OAAO,sBAAsB,cAC7B,OACA,OAAO,WAAW,cAClB,SACA,SAAS,cAAc,EAAE;AAEnC,cAAU,YAAY;AACtB,cAAU,YAAY;AACtB,cAAU,qBAAqB;AAC/B,cAAU,cAAc;AACxB,cAAU,aAAa;AACvB,cAAU,WAAW;AACrB,cAAU,cAAc;AACxB,cAAU,iBAAiB;AAC3B,cAAU,mBAAmB;AAC7B,cAAU,aAAa;AACvB,cAAU,iBAAiB;AAC3B,cAAU,wBAAwB;AAAA;AAAA;;;AClClC;AAAA;AAAA;AAAA;AAAA;;;ACSA,kBAQO;AA6BA,IAAM,sBAAN,cAAkC,2BAAe;AAAA,EA0BtD,YAAY,QAAyB;AACnC,UAAM;AA1BR,SAAQ,KAAyB;AAKjC,SAAQ,WAA4B,CAAC;AACrC,SAAQ,gBAAgB;AACxB,SAAgB,SAAS,IAAI,8BAA2C;AACxE,SAAQ,mBAA4C;AACpD,SAAQ,gBAA2C,oBAAI,IAAI;AAC3D,SAAQ,kBAAyC;AACjD,SAAQ,qBAAqB;AAC7B,SAAQ,sBAAsB;AAG9B;AAAA,SAAS,eAAwC;AAAA,MAC/C,UAAU;AAAA,MACV,eAAe;AAAA,MACf,cAAc;AAAA;AAAA,MACd,eAAe;AAAA,MACf,kBAAkB;AAAA,MAClB,aAAa;AAAA;AAAA,MACb,eAAe;AAAA,IACjB;AAIE,SAAK,SAAS;AAAA,MACZ,QAAQ,OAAO;AAAA,MACf,SAAS,OAAO,WAAW;AAAA,MAC3B,WAAW,OAAO,aAAa;AAAA,MAC/B,oBAAoB,OAAO,sBAAsB;AAAA,MACjD,qBAAqB,OAAO,uBAAuB;AAAA,IACrD;AACA,SAAK,qBAAqB,OAAO,sBAAsB;AACvD,SAAK,sBAAsB,OAAO,uBAAuB;AAEzD,QAAI,KAAK,sBAAsB,OAAO,qBAAqB,aAAa;AACtE,WAAK,sBAAsB;AAAA,IAC7B;AAAA,EACF;AAAA,EAEA,MAAc,WAAiC;AAC7C,QAAI,KAAK,MAAM,KAAK,GAAG,SAAS,KAAK,OAAO,QAAQ;AAClD,aAAO,KAAK;AAAA,IACd;AAEA,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,UAAU,UAAU,KAAK,KAAK,OAAO,QAAQ,KAAK,OAAO,OAAO;AAEtE,cAAQ,UAAU,MAAM;AACtB,eAAO,IAAI,MAAM,6BAA6B,QAAQ,KAAK,EAAE,CAAC;AAAA,MAChE;AAEA,cAAQ,YAAY,YAAY;AAC9B,aAAK,KAAK,QAAQ;AAClB,aAAK,gBAAgB;AAGrB,aAAK,GAAG,UAAU,MAAM;AACtB,eAAK,KAAK;AACV,eAAK,gBAAgB;AAAA,QACvB;AAGA,cAAM,KAAK,iBAAiB;AAE5B,gBAAQ,KAAK,EAAE;AAAA,MACjB;AAEA,cAAQ,kBAAkB,CAAC,UAAU;AACnC,cAAM,KAAM,MAAM,OAA4B;AAG9C,YAAI,CAAC,GAAG,iBAAiB,SAAS,KAAK,OAAO,SAAS,GAAG;AACxD,gBAAM,QAAQ,GAAG,kBAAkB,KAAK,OAAO,WAAW;AAAA,YACxD,SAAS;AAAA,UACX,CAAC;AAGD,gBAAM,YAAY,QAAQ,QAAQ,EAAE,QAAQ,MAAM,CAAC;AACnD,gBAAM,YAAY,UAAU,UAAU,EAAE,QAAQ,MAAM,CAAC;AACvD,gBAAM,YAAY,YAAY,YAAY,EAAE,QAAQ,MAAM,CAAC;AAG3D,gBAAM,MAAM,oBAAI,KAAK;AACrB,gBAAM,IAAI;AAAA,YACR,MAAM;AAAA,YACN,MAAM;AAAA,YACN,MAAM;AAAA,YACN,SAAS;AAAA,YACT,UAAU;AAAA,YACV,QAAQ;AAAA,UACV,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,aAA4B;AAChC,UAAM,YAAY,KAAK,IAAI;AAC3B,SAAK,OAAO,KAAK,6BAAiB,cAAc,MAAgB;AAEhE,QAAI;AAEF,YAAM,KAAK,MAAM,KAAK,SAAS;AAG/B,YAAM,WAAW,MAAM,KAAK,aAAa;AACzC,YAAM,YAAY,SAAS;AAG3B,eAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,cAAM,OAAO,SAAS,CAAC;AAGvB,YAAI,KAAK,SAAS,QAAQ;AACxB,eAAK,OAAO,KAAK,6BAAiB,WAAW;AAAA,YAC3C,MAAM,KAAK;AAAA,YACX,MAAM,KAAK;AAAA,UACb,CAAC;AAAA,QACH,OAAO;AACL,eAAK,OAAO,KAAK,6BAAiB,UAAU;AAAA,YAC1C,MAAM,KAAK;AAAA,YACX,OAAO;AAAA;AAAA,UACT,CAAC;AAAA,QACH;AAGA,aAAK,OAAO,KAAK,6BAAiB,eAAe;AAAA,UAC/C,QAAQ,IAAI;AAAA,UACZ,OAAO;AAAA,UACP,OAAO;AAAA,QACT,CAAC;AAAA,MACH;AAEA,WAAK,OAAO,KAAK,6BAAiB,aAAa;AAAA,QAC7C,UAAU,KAAK,IAAI,IAAI;AAAA,MACzB,CAAC;AAAA,IACH,SAAS,OAAO;AACd,WAAK,OAAO,KAAK,6BAAiB,YAAY;AAAA,QAC5C;AAAA,MACF,CAAC;AACD,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAc,eAAsC;AAClD,UAAM,KAAK,MAAM,KAAK,SAAS;AAC/B,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,cAAc,GAAG,YAAY,CAAC,KAAK,OAAO,SAAS,GAAG,UAAU;AACtE,YAAM,QAAQ,YAAY,YAAY,KAAK,OAAO,SAAS;AAC3D,YAAM,UAAU,MAAM,OAAO;AAE7B,cAAQ,YAAY,MAAM;AACxB,cAAM,QAAQ,QAAQ;AAEtB,cAAM,YAAY,MAAM,OAAO,CAAC,MAAM,EAAE,SAAS,GAAG;AACpD,gBAAQ,SAAS;AAAA,MACnB;AAEA,cAAQ,UAAU,MAAM;AACtB,eAAO,IAAI,MAAM,yBAAyB,QAAQ,KAAK,EAAE,CAAC;AAAA,MAC5D;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,SAAS,MAAkC;AAC/C,UAAM,iBAAa,2BAAc,IAAI;AACrC,UAAM,KAAK,MAAM,KAAK,SAAS;AAE/B,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,cAAc,GAAG,YAAY,CAAC,KAAK,OAAO,SAAS,GAAG,UAAU;AACtE,YAAM,QAAQ,YAAY,YAAY,KAAK,OAAO,SAAS;AAC3D,YAAM,UAAU,MAAM,IAAI,UAAU;AAEpC,cAAQ,YAAY,MAAM;AACxB,cAAM,OAAO,QAAQ;AACrB,YAAI,CAAC,MAAM;AACT;AAAA,YACE,IAAI,MAAM,4CAA4C,IAAI,GAAG;AAAA,UAC/D;AACA;AAAA,QACF;AACA,YAAI,KAAK,SAAS,aAAa;AAC7B;AAAA,YACE,IAAI;AAAA,cACF,mDAAmD,IAAI;AAAA,YACzD;AAAA,UACF;AACA;AAAA,QACF;AACA,gBAAQ;AAAA,UACN,MAAM,KAAK;AAAA,UACX,UAAM,sBAAS,KAAK,IAAI;AAAA,UACxB,MAAM,KAAK;AAAA,UACX,MAAM,KAAK;AAAA,UACX,SAAS,KAAK;AAAA,UACd,UAAU,KAAK;AAAA,UACf,UAAU,KAAK;AAAA,UACf,SAAS,KAAK;AAAA,QAChB,CAAC;AAAA,MACH;AAEA,cAAQ,UAAU,MAAM;AACtB,eAAO,IAAI,MAAM,wBAAwB,QAAQ,KAAK,EAAE,CAAC;AAAA,MAC3D;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,UACJ,MACA,SACA,UACoB;AACpB,UAAM,iBAAa,2BAAc,IAAI;AACrC,UAAM,KAAK,MAAM,KAAK,SAAS;AAG/B,UAAM,KAAK,mBAAmB,UAAU;AAExC,UAAM,MAAM,oBAAI,KAAK;AACrB,UAAM,OAAO,KAAK,cAAc,OAAO;AAEvC,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,cAAc,GAAG,YAAY,CAAC,KAAK,OAAO,SAAS,GAAG,WAAW;AACvE,YAAM,QAAQ,YAAY,YAAY,KAAK,OAAO,SAAS;AAG3D,YAAM,aAAa,MAAM,IAAI,UAAU;AAEvC,iBAAW,YAAY,MAAM;AAC3B,cAAM,WAAW,WAAW;AAC5B,cAAM,WAAW,CAAC,CAAC;AAEnB,cAAM,aAAyB;AAAA,UAC7B,MAAM;AAAA,UACN,MAAM;AAAA,UACN;AAAA,UACA;AAAA,UACA,SAAS,UAAU,WAAW;AAAA,UAC9B,UAAU;AAAA,UACV;AAAA,UACA,YAAQ,qBAAQ,UAAU;AAAA,QAC5B;AAEA,cAAM,aAAa,MAAM,IAAI,UAAU;AAEvC,mBAAW,YAAY,MAAM;AAC3B,gBAAM,QAAmB;AAAA,YACvB,MAAM;AAAA,YACN,UAAM,sBAAS,UAAU;AAAA,YACzB,MAAM;AAAA,YACN;AAAA,YACA,SAAS,WAAW;AAAA,YACpB,UAAU,WAAW;AAAA,YACrB;AAAA,YACA;AAAA,UACF;AAGA,gBAAM,QAAQ;AAAA,YACZ,MAAM,WAAW,YAAY;AAAA,YAC7B,MAAM;AAAA,YACN,WAAW;AAAA,UACb;AACA,eAAK,eAAe,KAAK;AAGzB,eAAK,gBAAgB;AAAA,YACnB,GAAG;AAAA,YACH;AAAA,YACA,aAAa;AAAA,YACb,UAAU;AAAA,UACZ,CAAC;AAED,kBAAQ,KAAK;AAAA,QACf;AAEA,mBAAW,UAAU,MAAM;AACzB,iBAAO,IAAI,MAAM,yBAAyB,WAAW,KAAK,EAAE,CAAC;AAAA,QAC/D;AAAA,MACF;AAEA,iBAAW,UAAU,MAAM;AACzB,eAAO,IAAI,MAAM,kCAAkC,WAAW,KAAK,EAAE,CAAC;AAAA,MACxE;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,WAAW,MAA6B;AAC5C,UAAM,iBAAa,2BAAc,IAAI;AACrC,UAAM,KAAK,MAAM,KAAK,SAAS;AAG/B,UAAM,OAAO,MAAM,KAAK,KAAK,UAAU,EAAE,MAAM,MAAM,IAAI;AACzD,QAAI,CAAC,MAAM;AACT,YAAM,IAAI,MAAM,8CAA8C,IAAI,GAAG;AAAA,IACvE;AAEA,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,cAAc,GAAG,YAAY,CAAC,KAAK,OAAO,SAAS,GAAG,WAAW;AACvE,YAAM,QAAQ,YAAY,YAAY,KAAK,OAAO,SAAS;AAE3D,UAAI,KAAK,SAAS,aAAa;AAE7B,cAAM,QAAQ,MAAM,MAAM,QAAQ;AAClC,cAAM,UAAU,MAAM,MAAM,UAAU;AAEtC,gBAAQ,YAAY,MAAM;AACxB,cAAI,QAAQ,SAAS,GAAG;AACtB;AAAA,cACE,IAAI,MAAM,0CAA0C,IAAI,GAAG;AAAA,YAC7D;AACA;AAAA,UACF;AAGA,gBAAM,gBAAgB,MAAM,OAAO,UAAU;AAE7C,wBAAc,YAAY,MAAM;AAC9B,kBAAM,QAAQ;AAAA,cACZ,MAAM;AAAA,cACN,MAAM;AAAA,cACN,WAAW,oBAAI,KAAK;AAAA,YACtB;AACA,iBAAK,eAAe,KAAK;AACzB,iBAAK,gBAAgB,KAAK;AAC1B,oBAAQ;AAAA,UACV;AAEA,wBAAc,UAAU,MAAM;AAC5B;AAAA,cACE,IAAI,MAAM,+BAA+B,cAAc,KAAK,EAAE;AAAA,YAChE;AAAA,UACF;AAAA,QACF;AAEA,gBAAQ,UAAU,MAAM;AACtB;AAAA,YACE,IAAI,MAAM,uCAAuC,QAAQ,KAAK,EAAE;AAAA,UAClE;AAAA,QACF;AAAA,MACF,OAAO;AAEL,cAAM,UAAU,MAAM,OAAO,UAAU;AAEvC,gBAAQ,YAAY,MAAM;AACxB,gBAAM,QAAQ;AAAA,YACZ,MAAM;AAAA,YACN,MAAM;AAAA,YACN,WAAW,oBAAI,KAAK;AAAA,UACtB;AACA,eAAK,eAAe,KAAK;AACzB,eAAK,gBAAgB,KAAK;AAC1B,kBAAQ;AAAA,QACV;AAEA,gBAAQ,UAAU,MAAM;AACtB,iBAAO,IAAI,MAAM,0BAA0B,QAAQ,KAAK,EAAE,CAAC;AAAA,QAC7D;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,OAAO,MAAgC;AAC3C,UAAM,iBAAa,2BAAc,IAAI;AACrC,UAAM,KAAK,MAAM,KAAK,SAAS;AAE/B,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,cAAc,GAAG,YAAY,CAAC,KAAK,OAAO,SAAS,GAAG,UAAU;AACtE,YAAM,QAAQ,YAAY,YAAY,KAAK,OAAO,SAAS;AAC3D,YAAM,UAAU,MAAM,MAAM,UAAU;AAEtC,cAAQ,YAAY,MAAM;AACxB,gBAAQ,QAAQ,SAAS,CAAC;AAAA,MAC5B;AAEA,cAAQ,UAAU,MAAM;AACtB,eAAO,IAAI,MAAM,8BAA8B,QAAQ,KAAK,EAAE,CAAC;AAAA,MACjE;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,QAAQ,MAAoC;AAChD,UAAM,iBAAa,2BAAc,IAAI;AACrC,UAAM,KAAK,MAAM,KAAK,SAAS;AAG/B,QAAI,eAAe,OAAO,CAAE,MAAM,KAAK,OAAO,UAAU,GAAI;AAC1D,YAAM,IAAI,MAAM,+CAA+C,IAAI,GAAG;AAAA,IACxE;AAEA,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,cAAc,GAAG,YAAY,CAAC,KAAK,OAAO,SAAS,GAAG,UAAU;AACtE,YAAM,QAAQ,YAAY,YAAY,KAAK,OAAO,SAAS;AAC3D,YAAM,QAAQ,MAAM,MAAM,QAAQ;AAClC,YAAM,UAAU,MAAM,OAAO,UAAU;AAEvC,cAAQ,YAAY,MAAM;AACxB,cAAM,QAAQ,QAAQ;AACtB,cAAM,UAAU,MAAM,IAAI,CAAC,UAAU;AAAA,UACnC,MAAM,KAAK;AAAA,UACX,UAAM,sBAAS,KAAK,IAAI;AAAA,UACxB,MAAM,KAAK;AAAA,UACX,MAAM,KAAK;AAAA,UACX,SAAS,KAAK;AAAA,UACd,UAAU,KAAK;AAAA,UACf,UAAU,KAAK;AAAA,QACjB,EAAE;AAEF,gBAAQ,OAAO;AAAA,MACjB;AAEA,cAAQ,UAAU,MAAM;AACtB,eAAO,IAAI,MAAM,6BAA6B,QAAQ,KAAK,EAAE,CAAC;AAAA,MAChE;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAM,MAAc,YAAqB,OAA2B;AACxE,UAAM,iBAAa,2BAAc,IAAI;AAErC,QAAI,eAAe,KAAK;AACtB,YAAM,IAAI,MAAM,uCAAuC,IAAI,GAAG;AAAA,IAChE;AAEA,UAAM,KAAK,MAAM,KAAK,SAAS;AAG/B,QAAI,MAAM,KAAK,OAAO,UAAU,GAAG;AACjC,YAAM,IAAI,MAAM,uCAAuC,IAAI,GAAG;AAAA,IAChE;AAGA,UAAM,aAAS,qBAAQ,UAAU;AACjC,QAAI,CAAC,aAAa,WAAW,OAAO,CAAE,MAAM,KAAK,OAAO,MAAM,GAAI;AAChE,YAAM,IAAI,MAAM,6CAA6C,IAAI,GAAG;AAAA,IACtE;AAGA,QAAI,aAAa,WAAW,OAAO,CAAE,MAAM,KAAK,OAAO,MAAM,GAAI;AAC/D,YAAM,KAAK,MAAM,QAAQ,IAAI;AAAA,IAC/B;AAEA,UAAM,MAAM,oBAAI,KAAK;AAErB,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,cAAc,GAAG,YAAY,CAAC,KAAK,OAAO,SAAS,GAAG,WAAW;AACvE,YAAM,QAAQ,YAAY,YAAY,KAAK,OAAO,SAAS;AAE3D,YAAM,aAAyB;AAAA,QAC7B,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,UAAU;AAAA,QACV,YAAQ,qBAAQ,UAAU;AAAA,MAC5B;AAEA,YAAM,UAAU,MAAM,IAAI,UAAU;AAEpC,cAAQ,YAAY,MAAM;AACxB,cAAM,QAAmB;AAAA,UACvB,MAAM;AAAA,UACN,UAAM,sBAAS,UAAU;AAAA,UACzB,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS;AAAA,UACT,UAAU;AAAA,QACZ;AAEA,cAAM,QAAQ;AAAA,UACZ,MAAM;AAAA,UACN,MAAM;AAAA,UACN,WAAW;AAAA,QACb;AACA,aAAK,eAAe,KAAK;AACzB,aAAK,gBAAgB;AAAA,UACnB,GAAG;AAAA,UACH,aAAa;AAAA,UACb,UAAU;AAAA,QACZ,CAAC;AAED,gBAAQ,KAAK;AAAA,MACf;AAEA,cAAQ,UAAU,MAAM;AACtB,eAAO,IAAI,MAAM,+BAA+B,QAAQ,KAAK,EAAE,CAAC;AAAA,MAClE;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAM,MAAc,YAAqB,OAAsB;AACnE,UAAM,iBAAa,2BAAc,IAAI;AAErC,QAAI,eAAe,KAAK;AACtB,YAAM,IAAI,MAAM,0CAA0C,IAAI,GAAG;AAAA,IACnE;AAEA,UAAM,KAAK,MAAM,KAAK,SAAS;AAG/B,UAAM,OAAO,MAAM,KAAK,KAAK,UAAU,EAAE,MAAM,MAAM,IAAI;AACzD,QAAI,CAAC,MAAM;AACT,YAAM,IAAI,MAAM,6CAA6C,IAAI,GAAG;AAAA,IACtE;AACA,QAAI,KAAK,SAAS,aAAa;AAC7B,YAAM,IAAI,MAAM,oCAAoC,IAAI,GAAG;AAAA,IAC7D;AAEA,QAAI,WAAW;AAEb,YAAM,KAAK,gBAAgB,UAAU;AAAA,IACvC,OAAO;AAEL,YAAM,WAAW,MAAM,KAAK,QAAQ,UAAU;AAC9C,UAAI,SAAS,SAAS,GAAG;AACvB,cAAM,IAAI,MAAM,0CAA0C,IAAI,GAAG;AAAA,MACnE;AAAA,IACF;AAGA,UAAM,KAAK,WAAW,UAAU;AAAA,EAClC;AAAA,EAEA,MAAM,OAAO,SAAiB,SAAqC;AACjE,UAAM,oBAAgB,2BAAc,OAAO;AAC3C,UAAM,oBAAgB,2BAAc,OAAO;AAC3C,UAAM,KAAK,MAAM,KAAK,SAAS;AAG/B,UAAM,UAAU,MAAM,KAAK,KAAK,aAAa;AAG7C,UAAM,KAAK,mBAAmB,aAAa;AAG3C,QAAI,MAAM,KAAK,OAAO,aAAa,GAAG;AACpC,YAAM,IAAI;AAAA,QACR,wCAAwC,OAAO,SAAS,OAAO;AAAA,MACjE;AAAA,IACF;AAEA,UAAM,MAAM,oBAAI,KAAK;AAErB,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,cAAc,GAAG,YAAY,CAAC,KAAK,OAAO,SAAS,GAAG,WAAW;AACvE,YAAM,QAAQ,YAAY,YAAY,KAAK,OAAO,SAAS;AAG3D,UAAI,QAAQ,SAAS,aAAa;AAEhC,cAAM,UAAU,MAAM,WAAW;AACjC,cAAM,UAAwB,CAAC;AAE/B,gBAAQ,YAAY,CAAC,UAAU;AAC7B,gBAAM,SAAU,MAAM,OAAsB;AAE5C,cAAI,QAAQ;AACV,kBAAM,OAAO,OAAO;AAGpB,gBACE,KAAK,KAAK,WAAW,gBAAgB,GAAG,KACxC,KAAK,SAAS,eACd;AACA,oBAAM,cAAc,KAAK,KAAK;AAAA,gBAC5B;AAAA,gBACA;AAAA,cACF;AACA,sBAAQ,KAAK;AAAA,gBACX,GAAG;AAAA,gBACH,MAAM;AAAA,gBACN,YAAQ,qBAAQ,WAAW;AAAA,gBAC3B,UAAU,KAAK,SAAS,gBAAgB,MAAM,KAAK;AAAA,cACrD,CAAC;AAAA,YACH;AAEA,mBAAO,SAAS;AAAA,UAClB,OAAO;AAEL,gBAAI,YAAY;AAChB,kBAAM,QAAQ,QAAQ;AAEtB,gBAAI,UAAU,GAAG;AACf,qBAAO,IAAI,MAAM,wBAAwB,OAAO,EAAE,CAAC;AACnD;AAAA,YACF;AAEA,oBAAQ,QAAQ,CAAC,SAAS;AAExB,oBAAM,OAAO,KAAK,KAAK,QAAQ,eAAe,aAAa,CAAC;AAG5D,oBAAM,aAAa,MAAM,IAAI,IAAI;AAEjC,yBAAW,YAAY,MAAM;AAC3B;AACA,oBAAI,cAAc,OAAO;AACvB,wBAAM,QAAQ,QAAQ,KAAK,CAAC,MAAM,EAAE,SAAS,aAAa;AAE1D,wBAAMC,SAAQ;AAAA,oBACZ,MAAM;AAAA,oBACN,MAAM;AAAA,oBACN,SAAS;AAAA,oBACT,WAAW;AAAA,kBACb;AACA,uBAAK,eAAeA,MAAK;AACzB,uBAAK,gBAAgBA,MAAK;AAE1B,0BAAQ;AAAA,oBACN,MAAM,MAAM;AAAA,oBACZ,UAAM,sBAAS,MAAM,IAAI;AAAA,oBACzB,MAAM,MAAM;AAAA,oBACZ,MAAM,MAAM;AAAA,oBACZ,SAAS,MAAM;AAAA,oBACf,UAAU,MAAM;AAAA,oBAChB,UAAU,MAAM;AAAA,kBAClB,CAAC;AAAA,gBACH;AAAA,cACF;AAEA,yBAAW,UAAU,MAAM;AACzB;AAAA,kBACE,IAAI,MAAM,+BAA+B,WAAW,KAAK,EAAE;AAAA,gBAC7D;AAAA,cACF;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF;AAEA,gBAAQ,UAAU,MAAM;AACtB,iBAAO,IAAI,MAAM,yBAAyB,QAAQ,KAAK,EAAE,CAAC;AAAA,QAC5D;AAAA,MACF,OAAO;AAEL,cAAM,aAAa,MAAM,IAAI,aAAa;AAE1C,mBAAW,YAAY,MAAM;AAC3B,gBAAM,OAAO,WAAW;AACxB,cAAI,CAAC,MAAM;AACT,mBAAO,IAAI,MAAM,mBAAmB,OAAO,EAAE,CAAC;AAC9C;AAAA,UACF;AAGA,gBAAM,OAAO,aAAa;AAG1B,gBAAM,UAAsB;AAAA,YAC1B,GAAG;AAAA,YACH,MAAM;AAAA,YACN,YAAQ,qBAAQ,aAAa;AAAA,YAC7B,UAAU;AAAA,UACZ;AAEA,gBAAM,aAAa,MAAM,IAAI,OAAO;AAEpC,qBAAW,YAAY,MAAM;AAC3B,kBAAM,QAAmB;AAAA,cACvB,MAAM;AAAA,cACN,UAAM,sBAAS,aAAa;AAAA,cAC5B,MAAM,KAAK;AAAA,cACX,MAAM,KAAK;AAAA,cACX,SAAS,KAAK;AAAA,cACd,UAAU;AAAA,cACV,UAAU,KAAK;AAAA,cACf,SAAS,KAAK;AAAA,YAChB;AAEA,kBAAM,QAAQ;AAAA,cACZ,MAAM;AAAA,cACN,MAAM;AAAA,cACN,SAAS;AAAA,cACT,WAAW;AAAA,YACb;AACA,iBAAK,eAAe,KAAK;AACzB,iBAAK,gBAAgB,KAAK;AAE1B,oBAAQ,KAAK;AAAA,UACf;AAEA,qBAAW,UAAU,MAAM;AACzB,mBAAO,IAAI,MAAM,0BAA0B,WAAW,KAAK,EAAE,CAAC;AAAA,UAChE;AAAA,QACF;AAEA,mBAAW,UAAU,MAAM;AACzB,iBAAO,IAAI,MAAM,wBAAwB,WAAW,KAAK,EAAE,CAAC;AAAA,QAC9D;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,KAAK,aAAuB,YAAmC;AACnE,UAAM,uBAAmB,2BAAc,UAAU;AAGjD,UAAM,aAAa,MAAM,KAAK,KAAK,gBAAgB,EAAE,MAAM,MAAM,IAAI;AACrE,QAAI,CAAC,cAAc,WAAW,SAAS,aAAa;AAClD,YAAM,IAAI,MAAM,sCAAsC,UAAU,GAAG;AAAA,IACrE;AAEA,eAAW,cAAc,aAAa;AACpC,YAAM,WAAO,sBAAS,UAAU;AAChC,YAAM,cAAU,kBAAK,kBAAkB,IAAI;AAC3C,YAAM,KAAK,OAAO,YAAY,OAAO;AAAA,IACvC;AAAA,EACF;AAAA,EAEA,MAAM,KAAK,YAAoB,YAAwC;AACrE,UAAM,uBAAmB,2BAAc,UAAU;AACjD,UAAM,uBAAmB,2BAAc,UAAU;AAGjD,UAAM,SAAS,MAAM,KAAK,SAAS,gBAAgB;AAGnD,WAAO,KAAK,UAAU,kBAAkB,OAAO,SAAS,OAAO,QAAQ;AAAA,EACzE;AAAA,EAEA,MAAM,SAAiB,UAAgD;AACrE,UAAM,KAAK,KAAK,kBAAkB;AAClC,UAAM,WAA0B,EAAE,IAAI,SAAS,SAAS;AAExD,SAAK,SAAS,KAAK,QAAQ;AAE3B,WAAO;AAAA,MACL,SAAS,MAAM;AACb,cAAM,QAAQ,KAAK,SAAS,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE;AACxD,YAAI,UAAU,IAAI;AAChB,eAAK,SAAS,OAAO,OAAO,CAAC;AAAA,QAC/B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,KAAK,MAAiC;AAC1C,UAAM,iBAAa,2BAAc,IAAI;AACrC,UAAM,KAAK,MAAM,KAAK,SAAS;AAE/B,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,cAAc,GAAG,YAAY,CAAC,KAAK,OAAO,SAAS,GAAG,UAAU;AACtE,YAAM,QAAQ,YAAY,YAAY,KAAK,OAAO,SAAS;AAC3D,YAAM,UAAU,MAAM,IAAI,UAAU;AAEpC,cAAQ,YAAY,MAAM;AACxB,cAAM,OAAO,QAAQ;AACrB,YAAI,CAAC,MAAM;AACT;AAAA,YACE,IAAI,MAAM,4CAA4C,IAAI,GAAG;AAAA,UAC/D;AACA;AAAA,QACF;AAEA,gBAAQ;AAAA,UACN,MAAM,KAAK;AAAA,UACX,MAAM,KAAK;AAAA,UACX,MAAM,KAAK;AAAA,UACX,SAAS,KAAK;AAAA,UACd,UAAU,KAAK;AAAA,UACf,UAAU;AAAA;AAAA,QACZ,CAAC;AAAA,MACH;AAEA,cAAQ,UAAU,MAAM;AACtB,eAAO,IAAI,MAAM,wBAAwB,QAAQ,KAAK,EAAE,CAAC;AAAA,MAC3D;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,KAAK,SAAoC;AAC7C,UAAM,KAAK,MAAM,KAAK,SAAS;AAE/B,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,cAAc,GAAG,YAAY,CAAC,KAAK,OAAO,SAAS,GAAG,UAAU;AACtE,YAAM,QAAQ,YAAY,YAAY,KAAK,OAAO,SAAS;AAC3D,YAAM,UAAU,MAAM,OAAO;AAE7B,cAAQ,YAAY,MAAM;AACxB,cAAM,QAAQ,QAAQ;AACtB,cAAM,QAAQ,MACX,IAAI,CAAC,SAAS,KAAK,IAAI,EACvB,OAAO,CAAC,SAAS,KAAK,eAAe,MAAM,OAAO,CAAC,EACnD,KAAK;AAER,gBAAQ,KAAK;AAAA,MACf;AAEA,cAAQ,UAAU,MAAM;AACtB,eAAO,IAAI,MAAM,mBAAmB,QAAQ,KAAK,EAAE,CAAC;AAAA,MACtD;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,QAAuB;AAC3B,UAAM,YAAY,KAAK,IAAI;AAC3B,UAAM,cAAc,SAAS,SAAS;AAEtC,SAAK,OAAO,KAAK,6BAAiB,iBAAiB;AAAA,MACjD,WAAW;AAAA,MACX,IAAI;AAAA,IACN,CAAC;AACD,SAAK,OAAO,KAAK,6BAAiB,kBAAkB,MAAgB;AAEpE,QAAI;AACF,YAAM,KAAK,MAAM,KAAK,SAAS;AAE/B,YAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AAC3C,cAAM,cAAc,GAAG;AAAA,UACrB,CAAC,KAAK,OAAO,SAAS;AAAA,UACtB;AAAA,QACF;AACA,cAAM,QAAQ,YAAY,YAAY,KAAK,OAAO,SAAS;AAC3D,cAAM,UAAU,MAAM,MAAM;AAE5B,gBAAQ,YAAY,MAAM;AAExB,gBAAM,kBAAkB,GAAG;AAAA,YACzB,CAAC,KAAK,OAAO,SAAS;AAAA,YACtB;AAAA,UACF;AACA,gBAAM,YAAY,gBAAgB,YAAY,KAAK,OAAO,SAAS;AACnE,gBAAM,MAAM,oBAAI,KAAK;AAErB,gBAAM,UAAsB;AAAA,YAC1B,MAAM;AAAA,YACN,MAAM;AAAA,YACN,MAAM;AAAA,YACN,SAAS;AAAA,YACT,UAAU;AAAA,YACV,QAAQ;AAAA,UACV;AAEA,gBAAM,cAAc,UAAU,IAAI,OAAO;AACzC,sBAAY,YAAY,MAAM,QAAQ;AACtC,sBAAY,UAAU,MACpB,OAAO,IAAI,MAAM,4BAA4B,YAAY,KAAK,EAAE,CAAC;AAAA,QACrE;AAEA,gBAAQ,UAAU,MAAM;AACtB,iBAAO,IAAI,MAAM,0BAA0B,QAAQ,KAAK,EAAE,CAAC;AAAA,QAC7D;AAAA,MACF,CAAC;AAED,YAAM,WAAW,KAAK,IAAI,IAAI;AAC9B,WAAK,OAAO,KAAK,6BAAiB,iBAAiB,EAAE,SAAS,CAAC;AAC/D,WAAK,OAAO,KAAK,6BAAiB,eAAe;AAAA,QAC/C,WAAW;AAAA,QACX,IAAI;AAAA,QACJ;AAAA,MACF,CAAC;AAAA,IACH,SAAS,OAAO;AACd,WAAK,OAAO,KAAK,6BAAiB,iBAAiB;AAAA,QACjD,WAAW;AAAA,QACX;AAAA,MACF,CAAC;AACD,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAM,OAAwB;AAC5B,UAAM,YAAY,KAAK,IAAI;AAC3B,UAAM,cAAc,QAAQ,SAAS;AAErC,SAAK,OAAO,KAAK,6BAAiB,iBAAiB;AAAA,MACjD,WAAW;AAAA,MACX,IAAI;AAAA,IACN,CAAC;AAED,QAAI;AACF,YAAM,KAAK,MAAM,KAAK,SAAS;AAE/B,YAAM,YAAY,MAAM,IAAI,QAAgB,CAAC,SAAS,WAAW;AAC/D,cAAM,cAAc,GAAG,YAAY,CAAC,KAAK,OAAO,SAAS,GAAG,UAAU;AACtE,cAAM,QAAQ,YAAY,YAAY,KAAK,OAAO,SAAS;AAC3D,cAAM,UAAU,MAAM,OAAO;AAE7B,gBAAQ,YAAY,MAAM;AACxB,gBAAM,QAAQ,QAAQ;AACtB,gBAAM,OAAO,MAAM,OAAO,CAAC,KAAK,SAAS,MAAM,KAAK,MAAM,CAAC;AAC3D,kBAAQ,IAAI;AAAA,QACd;AAEA,gBAAQ,UAAU,MAAM;AACtB,iBAAO,IAAI,MAAM,6BAA6B,QAAQ,KAAK,EAAE,CAAC;AAAA,QAChE;AAAA,MACF,CAAC;AAED,WAAK,OAAO,KAAK,6BAAiB,yBAAyB;AAAA,QACzD,MAAM;AAAA,MACR,CAAC;AACD,WAAK,OAAO,KAAK,6BAAiB,eAAe;AAAA,QAC/C,WAAW;AAAA,QACX,IAAI;AAAA,QACJ,UAAU,KAAK,IAAI,IAAI;AAAA,MACzB,CAAC;AAED,aAAO;AAAA,IACT,SAAS,OAAO;AACd,WAAK,OAAO,KAAK,6BAAiB,iBAAiB;AAAA,QACjD,WAAW;AAAA,QACX;AAAA,MACF,CAAC;AACD,YAAM;AAAA,IACR;AAAA,EACF;AAAA;AAAA,EAIA,MAAc,cAAc,MAA4B;AAEtD,UAAM,MAAM,OAAO,SAAS,WAAW,OAAO,KAAK,UAAU,IAAI;AACjE,QAAI,OAAO;AACX,aAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,YAAM,OAAO,IAAI,WAAW,CAAC;AAC7B,cAAS,QAAQ,KAAK,OAAQ;AAC9B,aAAO,OAAO;AAAA,IAChB;AACA,WAAO,KAAK,SAAS,EAAE;AAAA,EACzB;AAAA,EAEQ,cAAc,SAAsB;AAC1C,QAAI,YAAY,QAAQ,YAAY,QAAW;AAC7C,aAAO;AAAA,IACT;AACA,QAAI,OAAO,YAAY,UAAU;AAC/B,aAAO,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE;AAAA,IAC7B;AACA,QAAI,mBAAmB,aAAa;AAClC,aAAO,QAAQ;AAAA,IACjB;AACA,QAAI,mBAAmB,MAAM;AAC3B,aAAO,QAAQ;AAAA,IACjB;AACA,QAAI,OAAO,YAAY,UAAU;AAC/B,aAAO,IAAI,KAAK,CAAC,KAAK,UAAU,OAAO,CAAC,CAAC,EAAE;AAAA,IAC7C;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,mBAAmB,MAA6B;AAC5D,UAAM,aAAS,qBAAQ,IAAI;AAC3B,QAAI,WAAW,OAAO,WAAW,KAAM;AAEvC,QAAI,CAAE,MAAM,KAAK,OAAO,MAAM,GAAI;AAChC,YAAM,IAAI,MAAM,4CAA4C,IAAI,GAAG;AAAA,IACrE;AAAA,EACF;AAAA,EAEA,MAAc,gBAAgB,MAA6B;AACzD,UAAM,UAAU,MAAM,KAAK,QAAQ,IAAI;AAEvC,eAAW,SAAS,SAAS;AAC3B,UAAI,MAAM,SAAS,aAAa;AAC9B,cAAM,KAAK,gBAAgB,MAAM,IAAI;AAAA,MACvC;AACA,YAAM,KAAK,WAAW,MAAM,IAAI;AAAA,IAClC;AAAA,EACF;AAAA,EAEQ,eAAe,MAAc,SAA0B;AAE7D,QAAI,YAAY,QAAQ,YAAY,QAAQ;AAC1C,aAAO;AAAA,IACT;AAEA,QAAI,YAAY,KAAK;AAEnB,aAAO,KAAK,MAAM,GAAG,EAAE,WAAW,KAAK,SAAS;AAAA,IAClD;AAGA,QAAI,QAAQ,QAET,QAAQ,qBAAqB,MAAM,EAEnC,QAAQ,SAAS,gBAAgB,EAEjC,QAAQ,OAAO,OAAO,EAEtB,QAAQ,OAAO,MAAM,EAErB,QAAQ,qBAAqB,QAAQ,EACrC,QAAQ,qBAAqB,QAAQ,EACrC,QAAQ,mBAAmB,IAAI;AAGlC,YAAQ,MAAM,QAAQ;AAEtB,WAAO,IAAI,OAAO,KAAK,EAAE,KAAK,IAAI;AAAA,EACpC;AAAA,EAEQ,eAAe,OAAsB;AAC3C,eAAW,WAAW,KAAK,UAAU;AACnC,UAAI,KAAK,eAAe,MAAM,MAAM,QAAQ,OAAO,GAAG;AACpD,YAAI;AACF,kBAAQ,SAAS,KAAK;AAAA,QACxB,SAAS,OAAO;AACd,kBAAQ;AAAA,YACN,wCAAwC,QAAQ,OAAO;AAAA,YACvD;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,oBAA4B;AAClC,WAAO,SAAS,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,OAAO,GAAG,CAAC,CAAC;AAAA,EACvE;AAAA,EAEA,MAAc,mBAAkC;AAC9C,QAAI,CAAC,KAAK,GAAI;AAEd,UAAM,cAAc,KAAK,GAAG;AAAA,MAC1B,CAAC,KAAK,OAAO,SAAS;AAAA,MACtB;AAAA,IACF;AACA,UAAM,QAAQ,YAAY,YAAY,KAAK,OAAO,SAAS;AAC3D,UAAM,UAAU,MAAM,IAAI,GAAG;AAE7B,WAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,cAAQ,YAAY,YAAY;AAC9B,YAAI,CAAC,QAAQ,QAAQ;AAEnB,gBAAM,mBAAmB,KAAK,GAAI;AAAA,YAChC,CAAC,KAAK,OAAO,SAAS;AAAA,YACtB;AAAA,UACF;AACA,gBAAM,aAAa,iBAAiB;AAAA,YAClC,KAAK,OAAO;AAAA,UACd;AACA,gBAAM,MAAM,oBAAI,KAAK;AAErB,gBAAM,IAAI,QAAc,CAAC,KAAK,QAAQ;AACpC,kBAAM,aAAa,WAAW,IAAI;AAAA,cAChC,MAAM;AAAA,cACN,MAAM;AAAA,cACN,MAAM;AAAA,cACN,SAAS;AAAA,cACT,UAAU;AAAA,cACV,QAAQ;AAAA,YACV,CAAC;AAED,uBAAW,YAAY,MAAM,IAAI;AACjC,uBAAW,UAAU,MACnB,IAAI,IAAI,MAAM,iCAAiC,CAAC;AAAA,UACpD,CAAC;AAAA,QACH;AACA,gBAAQ;AAAA,MACV;AAEA,cAAQ,UAAU,MAAM,QAAQ;AAAA,IAClC,CAAC;AAAA,EACH;AAAA,EAEQ,wBAA8B;AACpC,SAAK,mBAAmB,IAAI,iBAAiB,OAAO,KAAK,OAAO,MAAM,EAAE;AAExE,SAAK,iBAAiB,YAAY,CAAC,UAAU;AAC3C,YAAM,EAAE,MAAM,MAAM,SAAS,UAAU,IAAI,MAAM;AAGjD,WAAK,eAAe;AAAA,QAClB;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,IAAI,KAAK,SAAS;AAAA,MAC/B,CAAC;AAGD,cAAQ,MAAM;AAAA,QACZ,KAAK;AACH,cAAI,MAAM,KAAK,aAAa;AAC1B,iBAAK,OAAO,KAAK,6BAAiB,aAAa,EAAE,KAAK,CAAC;AAAA,UACzD,OAAO;AACL,iBAAK,OAAO,KAAK,6BAAiB,cAAc;AAAA,cAC9C;AAAA,cACA,MAAM,MAAM,KAAK,QAAQ;AAAA,YAC3B,CAAC;AAAA,UACH;AACA;AAAA,QACF,KAAK;AACH,eAAK,OAAO,KAAK,6BAAiB,cAAc;AAAA,YAC9C;AAAA,YACA,MAAM,MAAM,KAAK,QAAQ;AAAA,UAC3B,CAAC;AACD;AAAA,QACF,KAAK;AACH,eAAK,OAAO,KAAK,6BAAiB,cAAc,EAAE,KAAK,CAAC;AACxD;AAAA,QACF,KAAK;AAEH,cAAI,SAAS;AACX,iBAAK,OAAO,KAAK,6BAAiB,cAAc,EAAE,MAAM,QAAQ,CAAC;AAAA,UACnE;AACA,eAAK,OAAO,KAAK,6BAAiB,cAAc;AAAA,YAC9C;AAAA,YACA,MAAM,MAAM,KAAK,QAAQ;AAAA,UAC3B,CAAC;AACD;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,gBAAgB,OAAkG;AACxH,QAAI,KAAK,kBAAkB;AACzB,WAAK,iBAAiB,YAAY;AAAA,QAChC,GAAG;AAAA,QACH,WAAW,MAAM,UAAU,YAAY;AAAA,MACzC,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,MAAM,cAAc,oBAA4B,KAAoB;AAClE,QAAI,CAAC,KAAK,mBAAoB;AAG9B,UAAM,KAAK,oBAAoB;AAG/B,SAAK,kBAAkB,YAAY,YAAY;AAC7C,YAAM,KAAK,wBAAwB;AAAA,IACrC,GAAG,iBAAiB;AAAA,EACtB;AAAA,EAEA,MAAM,eAA8B;AAClC,QAAI,KAAK,iBAAiB;AACxB,oBAAc,KAAK,eAAe;AAClC,WAAK,kBAAkB;AAAA,IACzB;AAAA,EACF;AAAA,EAEA,MAAc,sBAAqC;AACjD,UAAM,KAAK,MAAM,KAAK,SAAS;AAE/B,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,cAAc,GAAG,YAAY,CAAC,KAAK,OAAO,SAAS,GAAG,UAAU;AACtE,YAAM,QAAQ,YAAY,YAAY,KAAK,OAAO,SAAS;AAC3D,YAAM,UAAU,MAAM,OAAO;AAE7B,cAAQ,YAAY,YAAY;AAC9B,cAAM,QAAQ,QAAQ;AACtB,aAAK,cAAc,MAAM;AAEzB,mBAAW,QAAQ,OAAO;AAExB,cAAI,KAAK,SAAS,KAAK;AACrB,kBAAM,WAAyB;AAAA,cAC7B,MAAM,KAAK;AAAA,cACX,MAAM,KAAK;AAAA,cACX,UAAU,KAAK;AAAA,cACf,MAAM,KAAK;AAAA,YACb;AAGA,gBAAI,KAAK,uBAAuB,KAAK,SAAS,QAAQ;AACpD,uBAAS,cAAc,MAAM,KAAK,cAAc,KAAK,OAAO;AAC5D,kBAAI,KAAK,UAAU;AACjB,yBAAS,eAAe,MAAM,KAAK,cAAc,KAAK,QAAQ;AAAA,cAChE;AAAA,YACF;AAEA,iBAAK,cAAc,IAAI,KAAK,MAAM,QAAQ;AAAA,UAC5C;AAAA,QACF;AAEA,gBAAQ;AAAA,MACV;AAEA,cAAQ,UAAU,MAAM;AACtB,eAAO,IAAI,MAAM,+BAA+B,QAAQ,KAAK,EAAE,CAAC;AAAA,MAClE;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAc,0BAAyC;AACrD,UAAM,KAAK,MAAM,KAAK,SAAS;AAC/B,UAAM,eAAe,oBAAI,IAA0B;AACnD,UAAM,mBAA6B,CAAC;AAEpC,WAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,YAAM,cAAc,GAAG,YAAY,CAAC,KAAK,OAAO,SAAS,GAAG,UAAU;AACtE,YAAM,QAAQ,YAAY,YAAY,KAAK,OAAO,SAAS;AAC3D,YAAM,UAAU,MAAM,OAAO;AAE7B,cAAQ,YAAY,YAAY;AAC9B,cAAM,QAAQ,QAAQ;AAGtB,cAAM,QAAQ,UAAQ;AACpB,cAAI,KAAK,SAAS,KAAK;AACrB,yBAAa,IAAI,KAAK,MAAM;AAAA,cAC1B,MAAM,KAAK;AAAA,cACX,MAAM,KAAK;AAAA,cACX,UAAU,KAAK;AAAA,cACf,MAAM,KAAK;AAAA,YACb,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AAGD,qBAAa,QAAQ,CAAC,SAAS,SAAS;AACtC,gBAAM,WAAW,KAAK,cAAc,IAAI,IAAI;AAE5C,cAAI,CAAC,UAAU;AAEb,iBAAK,eAAe;AAAA,cAClB,MAAM;AAAA,cACN;AAAA,cACA,WAAW,oBAAI,KAAK;AAAA,YACtB,CAAC;AAGD,gBAAI,QAAQ,SAAS,aAAa;AAChC,mBAAK,OAAO,KAAK,6BAAiB,aAAa,EAAE,KAAK,CAAC;AAAA,YACzD,OAAO;AACL,mBAAK,OAAO,KAAK,6BAAiB,cAAc,EAAE,MAAM,MAAM,QAAQ,KAAK,CAAC;AAAA,YAC9E;AAAA,UACF,WACE,QAAQ,SAAS,QAAQ,MAAM,SAAS,SAAS,QAAQ,KACzD,QAAQ,SAAS,SAAS,MAC1B;AAEA,iBAAK,eAAe;AAAA,cAClB,MAAM;AAAA,cACN;AAAA,cACA,WAAW,oBAAI,KAAK;AAAA,YACtB,CAAC;AAED,gBAAI,QAAQ,SAAS,QAAQ;AAC3B,mBAAK,OAAO,KAAK,6BAAiB,cAAc,EAAE,MAAM,MAAM,QAAQ,KAAK,CAAC;AAAA,YAC9E;AAAA,UACF,WAAW,KAAK,uBAAuB,QAAQ,SAAS,QAAQ;AAE9D,6BAAiB,KAAK,IAAI;AAAA,UAC5B;AAAA,QACF,CAAC;AAGD,aAAK,cAAc,QAAQ,CAAC,UAAU,SAAS;AAC7C,cAAI,CAAC,aAAa,IAAI,IAAI,GAAG;AAC3B,iBAAK,eAAe;AAAA,cAClB,MAAM;AAAA,cACN;AAAA,cACA,WAAW,oBAAI,KAAK;AAAA,YACtB,CAAC;AAGD,gBAAI,SAAS,SAAS,aAAa;AACjC,mBAAK,OAAO,KAAK,6BAAiB,aAAa,EAAE,KAAK,CAAC;AAAA,YACzD,OAAO;AACL,mBAAK,OAAO,KAAK,6BAAiB,cAAc,EAAE,KAAK,CAAC;AAAA,YAC1D;AAAA,UACF;AAAA,QACF,CAAC;AAGD,YAAI,iBAAiB,SAAS,GAAG;AAC/B,gBAAM,KAAK,wBAAwB,kBAAkB,KAAK;AAAA,QAC5D;AAGA,YAAI,KAAK,qBAAqB;AAC5B,qBAAW,QAAQ,OAAO;AACxB,gBAAI,KAAK,SAAS,UAAU,KAAK,SAAS,KAAK;AAC7C,oBAAM,WAAW,aAAa,IAAI,KAAK,IAAI;AAC3C,kBAAI,UAAU;AACZ,yBAAS,cAAc,MAAM,KAAK,cAAc,KAAK,OAAO;AAC5D,oBAAI,KAAK,UAAU;AACjB,2BAAS,eAAe,MAAM,KAAK,cAAc,KAAK,QAAQ;AAAA,gBAChE;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAGA,aAAK,gBAAgB;AACrB,gBAAQ;AAAA,MACV;AAEA,cAAQ,UAAU,MAAM,QAAQ;AAAA,IAClC,CAAC;AAAA,EACH;AAAA,EAEA,MAAc,wBAAwB,OAAiB,UAAuC;AAC5F,eAAW,QAAQ,OAAO;AACxB,YAAM,OAAO,SAAS,KAAK,OAAK,EAAE,SAAS,IAAI;AAC/C,YAAM,WAAW,KAAK,cAAc,IAAI,IAAI;AAE5C,UAAI,QAAQ,UAAU;AACpB,cAAM,qBAAqB,MAAM,KAAK,cAAc,KAAK,OAAO;AAChE,cAAM,sBAAsB,KAAK,WAAW,MAAM,KAAK,cAAc,KAAK,QAAQ,IAAI;AAEtF,cAAM,iBAAiB,SAAS,eAAe,SAAS,gBAAgB;AACxE,cAAM,kBAAkB,SAAS,gBAAgB,uBAAuB,SAAS,iBAAiB;AAElG,YAAI,kBAAkB,iBAAiB;AAErC,eAAK,eAAe;AAAA,YAClB,MAAM;AAAA,YACN;AAAA,YACA,WAAW,oBAAI,KAAK;AAAA,UACtB,CAAC;AAED,eAAK,OAAO,KAAK,6BAAiB,cAAc;AAAA,YAC9C;AAAA,YACA,MAAM,KAAK;AAAA,UACb,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,UAAgB;AACd,SAAK,aAAa;AAElB,QAAI,KAAK,kBAAkB;AACzB,WAAK,iBAAiB,MAAM;AAC5B,WAAK,mBAAmB;AAAA,IAC1B;AAEA,QAAI,KAAK,IAAI;AACX,WAAK,GAAG,MAAM;AACd,WAAK,KAAK;AAAA,IACZ;AAEA,SAAK,WAAW,CAAC;AACjB,SAAK,cAAc,MAAM;AAAA,EAC3B;AAAA;AAAA,EAGA,MAAM,UAAU,MAAgC;AAC9C,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,YAAY,YAAsC;AACtD,QAAI;AACF,YAAM,OAAO,MAAM,KAAK,KAAK,UAAU;AACvC,aAAO,KAAK,SAAS;AAAA,IACvB,QAAQ;AAEN,iBAAO,2BAAc,UAAU,MAAM;AAAA,IACvC;AAAA,EACF;AAAA;AAAA;AAIF;;;AD92CA,IAAI,OAAO,WAAW,cAAc,aAAa;AAC/C,MAAI;AAEF;AAAA,EACF,SAAS,OAAO;AAEd,8DAA8B,MAAM,MAAM;AACxC,cAAQ;AAAA,QACN;AAAA,MAEF;AAAA,IACF,CAAC;AAAA,EACH;AACF;","names":["exports","messages","AbortError","ConstraintError","DataError","InvalidAccessError","InvalidStateError","NotFoundError","ReadOnlyError","TransactionInactiveError","VersionError","exports","module","valueToKey","exports","module","getType","cmp","exports","module","FDBKeyRange","exports","module","extractKey","exports","module","getEffectiveObjectStore","makeKeyRange","FDBCursor","exports","module","FDBCursorWithValue","exports","module","stopped","invokeEventListeners","FakeEventTarget","exports","module","FDBRequest","exports","module","enforceRange","exports","module","FakeDOMStringList","exports","module","valueToKeyRange","exports","module","confirmActiveTransaction","FDBIndex","exports","module","canInjectKey","exports","getByKey","getByKeyRange","getIndexByKey","getIndexByKeyGTE","getIndexByKeyRange","binarySearch","exports","module","RecordStore","exports","module","Index","exports","module","validateKeyPath","exports","module","confirmActiveTransaction","buildRecordAddPut","FDBObjectStore","exports","module","Event","exports","getSetImmediateFromJsdom","queueTask","fn","exports","module","FDBTransaction","exports","module","MAX_KEY","KeyGenerator","exports","module","ObjectStore","exports","module","confirmActiveVersionchangeTransaction","closeConnection","FDBDatabase","exports","module","FDBOpenDBRequest","exports","module","FDBVersionChangeEvent","exports","module","Database","exports","module","waitForOthersClosedDelete","openDatabase2","deleteDatabase","runVersionchangeTransaction","openDatabase","FDBFactory","exports","module","fakeIndexedDB","fakeIndexedDB","FDBCursor","FDBCursorWithValue","FDBDatabase","FDBFactory","FDBIndex","FDBKeyRange","FDBObjectStore","FDBOpenDBRequest","FDBRequest","FDBTransaction","FDBVersionChangeEvent","globalVar","confirmActiveTransaction","fn","event"]}