{"version":3,"sources":["../../src/index.ts","../../src/TypedEvent.ts","../../src/Change.ts","../../src/Operation.ts","../../src/CollectionUtilities.ts","../../src/DependencyTracker.ts","../../src/Registry.ts","../../src/OperationProperties.ts","../../src/TrackedObjectBase.ts","../../src/TrackerSession.ts","../../src/Tracker.ts","../../src/State.ts","../../src/ExternallyAssigned.ts","../../src/TrackedObjectStateMachine.ts","../../src/DirtyTrackedObject.ts","../../src/DirtyTrackerSession.ts","../../src/DirtyTracker.ts","../../src/TrackedObject.ts","../../src/TrackedCollection.ts","../../src/ContainerChildren.ts","../../src/TrackedContainer.ts","../../src/DirtyTrackedContainer.ts","../../src/Tracked.ts","../../src/GeneratedEvent.ts","../../src/EventRegistry.ts","../../src/EventTrackedCollection.ts","../../src/EventTracker.ts","../../src/EventTracked.ts"],"sourcesContent":["export { Tracker } from './Tracker.js'\nexport { DirtyTracker } from './DirtyTracker.js'\nexport { TrackerSession } from './TrackerSession.js'\nexport { DirtyTrackerSession } from './DirtyTrackerSession.js'\nexport type { PropertyScope } from './TrackerSession.js'\nexport { TrackedObjectBase } from './TrackedObjectBase.js'\nexport { TrackedObject } from './TrackedObject.js'\nexport { DirtyTrackedObject } from './DirtyTrackedObject.js'\nexport { TrackedContainer } from './TrackedContainer.js'\nexport { DirtyTrackedContainer } from './DirtyTrackedContainer.js'\nexport type { TrackedPropertyChanged } from './TrackedObjectBase.js'\nexport { Tracked } from './Tracked.js'\nexport type { ChangeHook, ChangeHooks } from './Tracked.js'\nexport { TrackedCollection, TrackedCollectionChanged } from './TrackedCollection.js'\nexport type { ITracked } from './ITracked.js'\nexport { AutoId, Id, getIdentity, getIdentityObject, getIdentityProperties } from './ExternallyAssigned.js'\nexport type { IdAssignment } from './ExternallyAssigned.js'\nexport { TypedEvent } from './TypedEvent.js'\nexport { State } from './State.js'\nexport { EventTracker } from './EventTracker.js'\nexport { EventTracked } from './EventTracked.js'\nexport type { EventTrackedOptions } from './EventTracked.js'\nexport { EventTrackedCollection } from './EventTrackedCollection.js'\nexport type { EventTrackedCollectionOptions, CollectionHistoryOptions, CollectionHistoryConfig, CollectionOpKind } from './EventTrackedCollection.js'\nexport { EventState } from './GeneratedEvent.js'\nexport type { GeneratedEvent, TrackedEvent, EventLifecycleOptions } from './GeneratedEvent.js'\nexport type { HistoryOptions, HistoryConfig, EventPropertyOptions } from './EventRegistry.js'\n","export class TypedEvent<T> {\n  private readonly _handlers: ((event: T) => void)[] = [];\n\n  public subscribe(handler: (event: T) => void): () => void {\n    this._handlers.push(handler);\n    return () => this.unsubscribe(handler);\n  }\n\n  public unsubscribe(handler: (event: T) => void): void {\n    const index = this._handlers.indexOf(handler);\n    if (index >= 0) {\n      this._handlers.splice(index, 1);\n    }\n  }\n\n  public emit(event: T): void {\n    this._handlers.forEach((h) => h(event));\n  }\n}\n","import { OperationProperties } from \"./OperationProperties\";\n\nexport class Change {\n  public readonly time: Date = new Date();\n\n  constructor(\n    public readonly number: number,\n    public readonly redoAction: () => void,\n    public readonly undoAction: () => void,\n    public readonly properties: OperationProperties,\n  ) {}\n}\n","import { Change } from \"./Change\";\r\nimport { OperationProperties } from \"./OperationProperties\";\r\n\r\nexport class Operation {\r\n  public readonly time: Date = new Date();\r\n  public readonly actions: Change[] = [];\r\n  private _hasActions: boolean = false;\r\n  public get hasActions(): boolean {\r\n    return this._hasActions;\r\n  }\r\n  private set hasActions(value: boolean) {\r\n    this._hasActions = value;\r\n  }\r\n\r\n  public add(\r\n    redoAction: () => void,\r\n    undoAction: () => void,\r\n    properties: OperationProperties,\r\n  ): void {\r\n    const action = new Change(\r\n      this.actions.length,\r\n      redoAction,\r\n      undoAction,\r\n      properties,\r\n    );\r\n    this.actions.push(action);\r\n    this.hasActions = true;\r\n  }\r\n\r\n  public updateOrAdd(\r\n    redoAction: () => void,\r\n    undoAction: () => void,\r\n    properties: OperationProperties,\r\n  ): void {\r\n    const idx = this.actions.findLastIndex(\r\n      (c) =>\r\n        c.properties.trackedObject === properties.trackedObject &&\r\n        c.properties.property === properties.property,\r\n    );\r\n    if (idx >= 0) {\r\n      this.actions[idx] = new Change(this.actions[idx].number, redoAction, undoAction, properties);\r\n    } else {\r\n      this.add(redoAction, undoAction, properties);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Chains an effect onto the most recent action targeting the same object and\r\n   * property, so it runs right after that action on both undo and redo. The\r\n   * caller guarantees such an action exists.\r\n   */\r\n  public attachAfter(\r\n    properties: OperationProperties,\r\n    redoEffect: () => void,\r\n    undoEffect: () => void,\r\n  ): void {\r\n    const idx = this.actions.findLastIndex(\r\n      (c) =>\r\n        c.properties.trackedObject === properties.trackedObject &&\r\n        c.properties.property === properties.property,\r\n    );\r\n    const target = this.actions[idx];\r\n    this.actions[idx] = new Change(\r\n      target.number,\r\n      () => { target.redoAction(); redoEffect(); },\r\n      () => { target.undoAction(); undoEffect(); },\r\n      target.properties,\r\n    );\r\n  }\r\n\r\n  public redo(): void {\r\n    this.actions.reverse().forEach((x) => x.redoAction());\r\n  }\r\n\r\n  public undo(): void {\r\n    this.actions.reverse().forEach((x) => x.undoAction());\r\n  }\r\n}\r\n","export class CollectionUtilities {\n  public static getLast<T>(array: T[]): T | undefined {\n    return array.length > 0 ? array[array.length - 1] : undefined;\n  }\n}\n","import { ITracked } from \"./ITracked\";\n\nexport type DepMap = Map<object, Set<string>>;\n\n// Special property key used to represent \"any structural change\" in a TrackedCollection.\nexport const COLLECTION_VERSION_KEY = \"__version__\";\n\n/** One validator: `prop`'s validator on `obj`. Interned, so it can live in Sets. */\ninterface Dependent {\n  obj: ITracked;\n  prop: string;\n}\n\nlet collector: DepMap | null = null;\n\n// Forward: validatedObj → validatorProp → DepMap (what the validator read)\nconst forwardDeps = new WeakMap<object, Map<string, DepMap>>();\n\n// Reverse: depObj → depProp → the validators that read it\nconst reverseDeps = new Map<object, Map<string, Set<Dependent>>>();\n\n// validatedObj → validatorProp → its interned Dependent\nconst dependents = new WeakMap<object, Map<string, Dependent>>();\n\ninterface MapLike<K, V> {\n  get(key: K): V | undefined;\n  set(key: K, value: V): unknown;\n}\n\nfunction getOrCreate<K, V>(map: MapLike<K, V>, key: K, create: () => V): V {\n  let value = map.get(key);\n  if (value === undefined) {\n    value = create();\n    map.set(key, value);\n  }\n  return value;\n}\n\nfunction dependentFor(obj: ITracked, prop: string): Dependent {\n  const byProp = getOrCreate(dependents, obj, () => new Map<string, Dependent>());\n  return getOrCreate(byProp, prop, () => ({ obj, prop }));\n}\n\n/** The validators that read `depObj.depProp` (an empty set is created on first use). */\nfunction readersOf(depObj: object, depProp: string): Set<Dependent> {\n  const byProp = getOrCreate(reverseDeps, depObj, () => new Map<string, Set<Dependent>>());\n  return getOrCreate(byProp, depProp, () => new Set<Dependent>());\n}\n\nfunction forEachDep(deps: DepMap, fn: (depObj: object, prop: string) => void): void {\n  deps.forEach((props, depObj) => props.forEach((prop) => fn(depObj, prop)));\n}\n\nexport const DependencyTracker = {\n  record(object: object, property: string): void {\n    if (!collector) return;\n    getOrCreate(collector, object, () => new Set<string>()).add(property);\n  },\n\n  collect(fn: () => void): DepMap {\n    collector = new Map<object, Set<string>>();\n    fn();\n    const deps = collector;\n    collector = null;\n    return deps;\n  },\n\n  updateDeps(validatedObj: ITracked, validatorProp: string, newDeps: DepMap): void {\n    const dependent = dependentFor(validatedObj, validatorProp);\n    const forward = getOrCreate(forwardDeps, validatedObj, () => new Map<string, DepMap>());\n    forEachDep(forward.get(validatorProp) ?? new Map(), (depObj, prop) => readersOf(depObj, prop).delete(dependent));\n    forward.set(validatorProp, newDeps);\n    forEachDep(newDeps, (depObj, prop) => readersOf(depObj, prop).add(dependent));\n  },\n\n  getDependents(depObj: object, depProp: string): Array<{ obj: ITracked; prop: string }> {\n    return [...readersOf(depObj, depProp)];\n  },\n\n  clearDeps(validatedObj: ITracked): void {\n    (forwardDeps.get(validatedObj) ?? new Map<string, DepMap>()).forEach((deps, validatorProp) => {\n      const dependent = dependentFor(validatedObj, validatorProp);\n      forEachDep(deps, (depObj, prop) => readersOf(depObj, prop).delete(dependent));\n    });\n    forwardDeps.delete(validatedObj);\n  },\n};\n","import { ITracked as ITrackedItem } from \"./ITracked\";\nimport { DependencyTracker } from \"./DependencyTracker\";\n\ntype ValidatorMap = Map<string, (model: any) => string | undefined>;\nconst VALIDATORS = Symbol(\"validators\");\n\nfunction hasOwnValidators(proto: object): boolean {\n  return Object.prototype.hasOwnProperty.call(proto, VALIDATORS);\n}\n\nfunction ownValidators(proto: object): ValidatorMap | undefined {\n  return hasOwnValidators(proto) ? ((proto as any)[VALIDATORS] as ValidatorMap) : undefined;\n}\n\nfunction mergeInheritedValidators(proto: object): ValidatorMap {\n  const merged: ValidatorMap = new Map();\n  let current: object | null = proto;\n  while (current) {\n    const own = ownValidators(current);\n    if (own) {\n      own.forEach((validator, property) => {\n        if (!merged.has(property)) merged.set(property, validator);\n      });\n    }\n    current = Object.getPrototypeOf(current);\n  }\n  return merged;\n}\n\nfunction findInheritedValidator(\n  proto: object,\n  property: string,\n): ((model: any) => string | undefined) | undefined {\n  let current: object | null = proto;\n  while (current) {\n    const own = ownValidators(current);\n    const validator = own?.get(property);\n    if (validator) return validator;\n    current = Object.getPrototypeOf(current);\n  }\n  return undefined;\n}\n\nexport function registerPropertyValidator(\n  proto: object,\n  property: string,\n  validator: (model: any) => string | undefined,\n): void {\n  if (!hasOwnValidators(proto)) {\n    Object.defineProperty(proto, VALIDATORS, {\n      value: new Map<string, (model: any) => string | undefined>(),\n      configurable: true,\n    });\n  }\n  const map = (proto as any)[VALIDATORS] as ValidatorMap;\n  if (!map.has(property)) {\n    map.set(property, validator);\n  }\n}\n\nexport function validate(tracked: ITrackedItem): void {\n  const proto = Object.getPrototypeOf(tracked);\n  const validators = mergeInheritedValidators(proto);\n  if (validators.size === 0) return;\n  const messages = new Map<string, string>();\n  validators.forEach((validatorFn, property) => {\n    const deps = DependencyTracker.collect(() => {\n      const error = validatorFn(tracked);\n      if (error !== undefined) messages.set(property, error);\n    });\n    DependencyTracker.updateDeps(tracked, property, deps);\n  });\n  tracked._applyValidation(messages);\n}\n\nexport function validateSingleProperty(\n  tracked: ITrackedItem,\n  property: string,\n): string | undefined {\n  const proto = Object.getPrototypeOf(tracked);\n  const validatorFn = findInheritedValidator(proto, property);\n  if (!validatorFn) return undefined;\n  let error: string | undefined;\n  const deps = DependencyTracker.collect(() => {\n    error = validatorFn(tracked);\n  });\n  DependencyTracker.updateDeps(tracked, property, deps);\n  return error;\n}\n","import { ITracked } from \"./ITracked\";\r\nimport { PropertyType } from \"./PropertyType\";\r\n\r\nexport class OperationProperties {\r\n  constructor(\r\n    public readonly trackedObject: ITracked,\r\n    public readonly property: string | undefined,\r\n    public readonly type: PropertyType,\r\n    public readonly coalesceWithin?: number,\r\n  ) {}\r\n}","import type { Tracker } from \"./Tracker\";\r\nimport { TypedEvent } from \"./TypedEvent\";\r\nimport { OperationProperties } from \"./OperationProperties\";\r\nimport { PropertyType } from \"./PropertyType\";\r\nimport { DependencyTracker } from \"./DependencyTracker\";\r\nimport { ITracked } from \"./ITracked\";\r\n\r\nexport interface TrackedPropertyChanged {\r\n  property: string;\r\n  oldValue: unknown;\r\n  newValue: unknown;\r\n}\r\n\r\n/**\r\n * What every tracked model has, whichever tracker it belongs to: change\r\n * events, validation and a stable `trakrId`. Models extend one of its two\r\n * subclasses — {@link TrackedObject} for an `EventTracker`, or\r\n * `DirtyTrackedObject` for a `DirtyTracker`.\r\n */\r\nexport abstract class TrackedObjectBase implements ITracked {\r\n  private _validationMessages: Map<string, string | undefined> = new Map();\r\n  private _isValid: boolean = true;\r\n  private _validityReleased: boolean = false;\r\n\r\n  public readonly trakrId: number;\r\n\r\n  public readonly beforeChange: TypedEvent<TrackedPropertyChanged> = new TypedEvent<TrackedPropertyChanged>();\r\n  public readonly afterChange: TypedEvent<TrackedPropertyChanged> = new TypedEvent<TrackedPropertyChanged>();\r\n  public readonly trackedChanged: TypedEvent<TrackedPropertyChanged> = new TypedEvent<TrackedPropertyChanged>();\r\n\r\n  /** Alias for {@link afterChange}. Retained for backwards compatibility. */\r\n  public get changed(): TypedEvent<TrackedPropertyChanged> {\r\n    return this.afterChange;\r\n  }\r\n\r\n  public get validationMessages(): Map<string, string | undefined> {\r\n    return this._validationMessages;\r\n  }\r\n  private set validationMessages(value: Map<string, string | undefined>) {\r\n    this._validationMessages = value;\r\n  }\r\n\r\n  public get trakrIsValid(): boolean {\r\n    return this._isValid;\r\n  }\r\n  protected set trakrIsValid(value: boolean) {\r\n    this._setIsValid(value);\r\n  }\r\n\r\n  /**\r\n   * @internal True while this object sits outside its collection on an\r\n   * EventTracker: its validity no longer counts towards `tracker.isValid`.\r\n   */\r\n  get _isValidityReleased(): boolean {\r\n    return this._validityReleased;\r\n  }\r\n\r\n  protected _setIsValid(value: boolean): void {\r\n    const wasValid = this._isValid;\r\n    this._isValid = value;\r\n    if (wasValid !== value && !this._validityReleased) {\r\n      this.tracker._onValidityChanged(!value);\r\n    }\r\n  }\r\n\r\n  protected constructor(public readonly tracker: Tracker) {\r\n    if (process.env.NODE_ENV !== 'production' && !tracker._isConstructing) {\r\n      throw new Error(`${this.constructor.name} must be created inside tracker.construct()`);\r\n    }\r\n    tracker._assertAccepts(this);\r\n    this.trakrId = tracker._nextTrackingId();\r\n    tracker._trackObject(this);\r\n  }\r\n\r\n  // ---- Lifecycle hooks, overridden by DirtyTrackedObject with its state machine ----\r\n\r\n  /** @internal A tracked property of this object was written. */\r\n  _onTrackedWrite(): void {}\r\n\r\n  /** @internal That write was undone. */\r\n  _onTrackedWriteUndone(): void {}\r\n\r\n  /**\r\n   * @internal This object left a collection (or a tracked property). It stays\r\n   * registered — undo or a re-add may bring it back — but stops counting\r\n   * towards `tracker.isValid` until it does.\r\n   */\r\n  _markRemoved(): void {\r\n    if (this._validityReleased) return;\r\n    const setReleased = (released: boolean) => {\r\n      if (!this._isValid) this.tracker._onValidityChanged(!released);\r\n      this._validityReleased = released;\r\n    };\r\n    this.tracker._doAndTrack(\r\n      () => setReleased(true),\r\n      () => setReleased(false),\r\n      new OperationProperties(this, \"__state__\", PropertyType.Object),\r\n    );\r\n  }\r\n\r\n  /** @internal This object was added to a collection (or a tracked property). */\r\n  _markAdded(): void {\r\n    if (!this._validityReleased) return;\r\n    const setReleased = (released: boolean) => {\r\n      this._validityReleased = released;\r\n      if (!this._isValid) this.tracker._onValidityChanged(!released);\r\n    };\r\n    this.tracker._doAndTrack(\r\n      () => setReleased(false),\r\n      () => setReleased(true),\r\n      new OperationProperties(this, \"__state__\", PropertyType.Object),\r\n    );\r\n  }\r\n\r\n  /** @internal */\r\n  _validate(property: string, errorMessage: string | undefined): void {\r\n    if (errorMessage) {\r\n      this.validationMessages.set(property, errorMessage);\r\n    } else {\r\n      this.validationMessages.delete(property);\r\n    }\r\n    this.validationMessages = new Map(this.validationMessages);\r\n    this.trakrIsValid = this.validationMessages.size === 0;\r\n  }\r\n\r\n  /** @internal */\r\n  public _applyValidation(messages: Map<string, string>): void {\r\n    this.validationMessages = messages;\r\n    this.trakrIsValid = messages.size === 0;\r\n  }\r\n\r\n  public destroy(): void {\r\n    DependencyTracker.clearDeps(this);\r\n    this.tracker._untrackObject(this);\r\n  }\r\n}\r\n","import type { TrackedObjectBase } from \"./TrackedObjectBase\";\r\nimport { ITrackerContext } from \"./ITrackerContext\";\r\nimport { TypedEvent } from \"./TypedEvent\";\r\n\r\nexport type PropertyScope = [TrackedObjectBase, string[]];\r\n\r\ninterface ITrackerDelegate {\r\n  readonly canUndo: boolean;\r\n  readonly canRedo: boolean;\r\n  undo(): void;\r\n  redo(): void;\r\n  readonly isDirtyChanged: TypedEvent<boolean>;\r\n  readonly canCommitChanged: TypedEvent<boolean>;\r\n  readonly versionChanged: TypedEvent<number>;\r\n}\r\n\r\nexport class TrackerSession implements ITrackerContext {\r\n  private readonly _scope: Map<TrackedObjectBase, Set<string>> | undefined;\r\n  private _isDirty: boolean = false;\r\n\r\n  constructor(\r\n    scope: PropertyScope[] | undefined,\r\n    private readonly _tracker: ITrackerDelegate,\r\n    private readonly _end: () => void,\r\n    private readonly _rollback: () => void,\r\n  ) {\r\n    if (scope && scope.length > 0) {\r\n      this._scope = new Map(scope.map(([obj, props]) => [obj, new Set(props)]));\r\n    }\r\n  }\r\n\r\n  /** @internal */\r\n  _onWrite(obj: TrackedObjectBase, property: string): void {\r\n    if (this._scope === undefined) return;\r\n    const declaredProps = this._scope.get(obj);\r\n    if (declaredProps === undefined || !declaredProps.has(property)) return;\r\n    this._isDirty = true;\r\n  }\r\n\r\n  get isDirty(): boolean {\r\n    if (this._scope === undefined) return false;\r\n    return this._isDirty;\r\n  }\r\n\r\n  get isValid(): boolean {\r\n    if (this._scope === undefined) return true;\r\n    for (const [obj, props] of this._scope) {\r\n      for (const prop of props) {\r\n        if (obj.validationMessages.has(prop)) return false;\r\n      }\r\n    }\r\n    return true;\r\n  }\r\n\r\n  get canCommit(): boolean {\r\n    return this.isDirty && this.isValid;\r\n  }\r\n\r\n  get canUndo(): boolean {\r\n    return this._tracker.canUndo;\r\n  }\r\n\r\n  get canRedo(): boolean {\r\n    return this._tracker.canRedo;\r\n  }\r\n\r\n  get trackedObjects(): TrackedObjectBase[] {\r\n    if (this._scope === undefined) return [];\r\n    return [...this._scope.keys()];\r\n  }\r\n\r\n  undo(): void {\r\n    this._tracker.undo();\r\n  }\r\n\r\n  redo(): void {\r\n    this._tracker.redo();\r\n  }\r\n\r\n  get isDirtyChanged(): TypedEvent<boolean> {\r\n    return this._tracker.isDirtyChanged;\r\n  }\r\n\r\n  get canCommitChanged(): TypedEvent<boolean> {\r\n    return this._tracker.canCommitChanged;\r\n  }\r\n\r\n  get versionChanged(): TypedEvent<number> {\r\n    return this._tracker.versionChanged;\r\n  }\r\n\r\n  end(): void {\r\n    this._end();\r\n  }\r\n\r\n  rollback(): void {\r\n    this._rollback();\r\n  }\r\n}\r\n","import { TypedEvent } from \"./TypedEvent\";\r\nimport { Operation } from \"./Operation\";\r\nimport { TrackedCollection } from \"./TrackedCollection\";\r\nimport { OperationProperties } from \"./OperationProperties\";\r\nimport { PropertyType } from \"./PropertyType\";\r\nimport { CollectionUtilities } from \"./CollectionUtilities\";\r\nimport { validate, validateSingleProperty } from \"./Registry\";\r\nimport { DependencyTracker, COLLECTION_VERSION_KEY } from \"./DependencyTracker\";\r\nimport { ITracked } from \"./ITracked\";\r\nimport { TrackedObjectBase } from \"./TrackedObjectBase\";\r\nimport { TrackerSession, PropertyScope } from \"./TrackerSession\";\r\nimport { ITrackerContext } from \"./ITrackerContext\";\r\n\r\n/**\r\n * Shared core of every tracker: reactive change events, validation, sessions and\r\n * the undo/redo operation stack. Persistence semantics live in the subclasses:\r\n * {@link DirtyTracker} (batch commit of object state) and {@link EventTracker}\r\n * (stream of events acknowledged by the server). Cannot be instantiated directly.\r\n */\r\nexport abstract class Tracker implements ITrackerContext {\r\n  private _currentOperation: Operation | undefined;\r\n  protected readonly _redoOperations: Operation[];\r\n  protected readonly _undoOperations: Operation[];\r\n  protected _commitStateOperation: Operation | undefined;\r\n  private _isDirty: boolean;\r\n  private _canUndo: boolean;\r\n  private _canRedo: boolean;\r\n  private _suppressTrackingCounter = 0;\r\n  private _currentOperationOwner: ITracked | undefined;\r\n  private _currentOperationPropertyName: string | undefined;\r\n  private _isValid: boolean;\r\n  private _canCommit: boolean;\r\n  private _trackingIdCounter = 1;\r\n  private _invalidCount = 0;\r\n  private _constructionDepth = 0;\r\n  private _composingBaseIndex: number | undefined;\r\n  private _composingRedoLength: number | undefined;\r\n  private _currentSession: TrackerSession | undefined;\r\n  protected _version: number = 0;\r\n  public _isReplaying: boolean = false;\r\n  private _pendingRevalidations: Array<{ obj: ITracked; prop: string | undefined }> = [];\r\n\r\n  public readonly trackedObjects: TrackedObjectBase[] = [];\r\n\r\n  public readonly trackedCollections: TrackedCollection<any>[] = [];\r\n\r\n  public get isDirty(): boolean {\r\n    return this._isDirty;\r\n  }\r\n  public set isDirty(value: boolean) {\r\n    if (this._isDirty !== value) {\r\n      this._isDirty = value;\r\n      this.isDirtyChanged.emit(value);\r\n      this.updateCanCommit();\r\n    }\r\n  }\r\n\r\n  public readonly isDirtyChanged: TypedEvent<boolean> = new TypedEvent<boolean>();\r\n\r\n  public get version(): number {\r\n    return this._version;\r\n  }\r\n\r\n  public readonly versionChanged: TypedEvent<number> = new TypedEvent<number>();\r\n\r\n  public get isValid(): boolean {\r\n    return this._isValid;\r\n  }\r\n  private set isValid(value: boolean) {\r\n    if (this._isValid !== value) {\r\n      this._isValid = value;\r\n      this.isValidChanged.emit(value);\r\n      this.updateCanCommit();\r\n    }\r\n  }\r\n\r\n  public readonly isValidChanged: TypedEvent<boolean> = new TypedEvent<boolean>();\r\n\r\n  public get canCommit(): boolean {\r\n    return this._canCommit;\r\n  }\r\n  private set canCommit(value: boolean) {\r\n    if (this._canCommit !== value) {\r\n      this._canCommit = value;\r\n      this.canCommitChanged.emit(value);\r\n    }\r\n  }\r\n\r\n  public readonly canCommitChanged: TypedEvent<boolean> = new TypedEvent<boolean>();\r\n\r\n  private updateCanCommit(): void {\r\n    this.canCommit = this._isDirty && this._isValid;\r\n  }\r\n\r\n  public get canUndo(): boolean {\r\n    return this._canUndo;\r\n  }\r\n  private set canUndo(value: boolean) {\r\n    this._canUndo = value;\r\n  }\r\n\r\n  public get canRedo(): boolean {\r\n    return this._canRedo;\r\n  }\r\n  private set canRedo(value: boolean) {\r\n    this._canRedo = value;\r\n  }\r\n\r\n  /** @internal */\r\n  public get _isTrackingSuppressed(): boolean {\r\n    return this._suppressTrackingCounter > 0;\r\n  }\r\n\r\n  /** @internal */\r\n  public get _isConstructing(): boolean {\r\n    return this._constructionDepth > 0;\r\n  }\r\n\r\n  /**\r\n   * @internal Throws unless `obj` is the model type this tracker works with\r\n   * (`DirtyTrackedObject` for DirtyTracker, `TrackedObject` for EventTracker).\r\n   */\r\n  public abstract _assertAccepts(obj: TrackedObjectBase): void;\r\n\r\n  /** Subclass-specific definition of \"has unsaved work\". */\r\n  protected abstract _computeIsDirty(): boolean;\r\n\r\n  // ---- Operation lifecycle hooks. No-ops here; EventTracker keeps its event list through them.\r\n\r\n  /** A write is about to start (`extended` = it coalesces into the existing `op`). */\r\n  protected _onOperationStart(_op: Operation, _extended: boolean): void {}\r\n  /** A top-level write finished recording into `op`. */\r\n  protected _onOperationEnd(_op: Operation): void {}\r\n  /** `op` was just undone or redone. */\r\n  protected _onReplayed(_op: Operation): void {}\r\n  /** Undone operations were dropped from the redo stack and can never be redone. */\r\n  protected _onOperationsDropped(_ops: readonly Operation[]): void {}\r\n  /** `tracker.new()` finished constructing `created`. */\r\n  protected abstract _onNewCompleted(created: readonly TrackedObjectBase[]): void;\r\n  /** A session ended: `composed` became the single undo step `result`. */\r\n  protected _onSessionEnded(_composed: readonly Operation[], _result: Operation): void {}\r\n  /** A session was rolled back: `reverted` were undone and removed. */\r\n  protected _onSessionRolledBack(_reverted: readonly Operation[]): void {}\r\n\r\n  public constructor() {\r\n    if (new.target === Tracker) {\r\n      throw new Error(\"Tracker is abstract — instantiate DirtyTracker or EventTracker\");\r\n    }\r\n    this._currentOperation = undefined;\r\n    this._redoOperations = [];\r\n    this._undoOperations = [];\r\n    this._commitStateOperation = undefined;\r\n    this._isDirty = false;\r\n    this._canUndo = false;\r\n    this._canRedo = false;\r\n    this._suppressTrackingCounter = 0;\r\n    this._currentOperationOwner = undefined;\r\n    this._currentOperationPropertyName = undefined;\r\n    this._isValid = true;\r\n    this._canCommit = false;\r\n  }\r\n\r\n  /** @internal */\r\n  public _trackObject(trackedObject: TrackedObjectBase) {\r\n    this.trackedObjects.push(trackedObject);\r\n  }\r\n\r\n  /** @internal */\r\n  public _untrackObject(trackedObject: TrackedObjectBase) {\r\n    this.trackedObjects.splice(this.trackedObjects.indexOf(trackedObject), 1);\r\n    if (!trackedObject.trakrIsValid && !trackedObject._isValidityReleased) this._invalidCount--;\r\n    this.isValid = this._invalidCount === 0;\r\n  }\r\n\r\n  /** @internal */\r\n  public _trackCollection(trackedCollection: TrackedCollection<any>): void {\r\n    this.trackedCollections.push(trackedCollection);\r\n  }\r\n\r\n  /** @internal */\r\n  public _untrackCollection(trackedCollection: TrackedCollection<any>) {\r\n    this.trackedCollections.splice(\r\n      this.trackedCollections.indexOf(trackedCollection),\r\n      1,\r\n    );\r\n    if (!trackedCollection.trakrIsValid) this._invalidCount--;\r\n    this.isValid = this._invalidCount === 0;\r\n  }\r\n\r\n  /** @internal An object or collection's validity flipped. */\r\n  public _onValidityChanged(becameInvalid: boolean): void {\r\n    this._invalidCount += becameInvalid ? 1 : -1;\r\n    if (!this._isTrackingSuppressed) {\r\n      this.isValid = this._invalidCount === 0;\r\n    }\r\n  }\r\n\r\n  public construct<T>(action: () => T): T {\r\n    const objectsBefore = this.trackedObjects.length;\r\n    this._constructionDepth++;\r\n    this._suppressTrackingCounter++;\r\n    const result = action();\r\n    for (let i = objectsBefore; i < this.trackedObjects.length; i++) {\r\n      validate(this.trackedObjects[i]);\r\n    }\r\n    this._suppressTrackingCounter--;\r\n    this._constructionDepth--;\r\n    this.isValid = this._invalidCount === 0;\r\n    return result;\r\n  }\r\n\r\n  public new<T>(action: () => T): T {\r\n    const objectsBefore = this.trackedObjects.length;\r\n    const undoLengthBefore = this._undoOperations.length;\r\n    const savedRedo = [...this._redoOperations];\r\n    this._constructionDepth++;\r\n    const result = action();\r\n    // changed events fire normally during construction so @EventTracked state is\r\n    // populated for generateEvents(). Discard the undo entries and restore the\r\n    // pre-new() redo stack so the tracker is clean on return.\r\n    this._undoOperations.length = undoLengthBefore;\r\n    this._redoOperations.length = 0;\r\n    for (const op of savedRedo) this._redoOperations.push(op);\r\n    const created = this.trackedObjects.slice(objectsBefore);\r\n    for (const obj of created) validate(obj);\r\n    this._constructionDepth--;\r\n    this.isValid = this._invalidCount === 0;\r\n    this._onNewCompleted(created);\r\n    this.reset();\r\n    return result;\r\n  }\r\n\r\n  public withTrackingSuppressed(action: () => void): void {\r\n    this._suppressTrackingCounter++;\r\n    action();\r\n    this._suppressTrackingCounter--;\r\n  }\r\n\r\n  public beginSuppressTracking(): void {\r\n    this._suppressTrackingCounter++;\r\n  }\r\n\r\n  public endSuppressTracking(): void {\r\n    this._suppressTrackingCounter--;\r\n  }\r\n\r\n  /** @internal */\r\n  public _doAndTrack(\r\n    redoAction: () => void,\r\n    undoAction: () => void,\r\n    properties: OperationProperties,\r\n  ): void {\r\n    if (this._isReplaying) return;\r\n\r\n    if (this._isTrackingSuppressed) {\r\n      redoAction();\r\n      if (!this._isConstructing) {\r\n        this.revalidateTargeted(properties.trackedObject, properties.property);\r\n      }\r\n      return;\r\n    }\r\n\r\n    const isInnerWrite = !this.isStartingNewOperation();\r\n\r\n    if (!isInnerWrite) {\r\n      this._currentOperationOwner = properties.trackedObject;\r\n      this._currentOperationPropertyName = properties.property;\r\n\r\n      if (this.shouldCoalesceChanges(properties)) {\r\n        this._currentOperation = CollectionUtilities.getLast(this._undoOperations)!;\r\n        this._onOperationStart(this._currentOperation, true);\r\n        this._version++;\r\n        this.versionChanged.emit(this._version);\r\n      } else {\r\n        this._currentOperation = new Operation();\r\n        this._onOperationStart(this._currentOperation, false);\r\n        this._undoOperations.push(this._currentOperation);\r\n        this._onOperationsDropped(this._redoOperations.splice(0));\r\n        this.reset();\r\n        this._version++;\r\n        this.versionChanged.emit(this._version);\r\n      }\r\n    }\r\n\r\n    this._currentOperation?.add(\r\n      () => redoAction(),\r\n      () => undoAction(),\r\n      properties,\r\n    );\r\n    redoAction();\r\n\r\n    if (this._currentSession !== undefined &&\r\n        properties.property !== undefined &&\r\n        properties.trackedObject instanceof TrackedObjectBase) {\r\n      this._currentSession._onWrite(properties.trackedObject, properties.property);\r\n    }\r\n\r\n    if (this.isEndingCurrentOperation(properties)) {\r\n      const finished = this._currentOperation!;\r\n      this._currentOperation = undefined;\r\n      this._currentOperationOwner = undefined;\r\n      this._currentOperationPropertyName = undefined;\r\n      const pending = this._pendingRevalidations;\r\n      this._pendingRevalidations = [];\r\n      for (const { obj, prop } of pending) {\r\n        this.revalidateTargeted(obj, prop);\r\n      }\r\n      this.revalidateTargeted(properties.trackedObject, properties.property);\r\n      this._onOperationEnd(finished);\r\n      this.reset();\r\n    } else {\r\n      // Not the write that opened the operation, so necessarily an inner one.\r\n      this._pendingRevalidations.push({ obj: properties.trackedObject, prop: properties.property });\r\n    }\r\n  }\r\n\r\n  private revalidateTargeted(changedObj: ITracked, changedProp: string | undefined): void {\r\n    const depKey = changedProp ?? COLLECTION_VERSION_KEY;\r\n    const dependents = [...DependencyTracker.getDependents(changedObj, depKey)];\r\n    for (const { obj, prop } of dependents) {\r\n      const error = validateSingleProperty(obj, prop);\r\n      obj._validate(prop, error);\r\n    }\r\n    if (changedProp === undefined) {\r\n      (changedObj as unknown as TrackedCollection<any>)._validate();\r\n    }\r\n    this.isValid = this._invalidCount === 0;\r\n  }\r\n\r\n  private isEndingCurrentOperation(properties: OperationProperties) {\r\n    return this._currentOperationOwner === properties.trackedObject &&\r\n      this._currentOperationPropertyName === properties.property;\r\n  }\r\n\r\n  private isStartingNewOperation() {\r\n    return this._currentOperationOwner === undefined &&\r\n      this._currentOperationPropertyName === undefined;\r\n  }\r\n\r\n  private shouldCoalesceChanges(properties: OperationProperties): boolean {\r\n    const lastOperation = CollectionUtilities.getLast(this._undoOperations);\r\n    return (\r\n      this.isCoalescibleType(properties) &&\r\n      this.hasLastOperation(lastOperation) &&\r\n      this.lastOperationTargetsSameProperty(lastOperation!, properties) &&\r\n      this.lastActionIsRecent(lastOperation!, properties.coalesceWithin!)\r\n    );\r\n  }\r\n\r\n  private isCoalescibleType(properties: OperationProperties): boolean {\r\n    return (\r\n      properties.coalesceWithin !== undefined &&\r\n      (properties.type === PropertyType.String ||\r\n        properties.type === PropertyType.Number)\r\n    );\r\n  }\r\n\r\n  private hasLastOperation(lastOperation: Operation | undefined): boolean {\r\n    return !!lastOperation;\r\n  }\r\n\r\n  private lastOperationTargetsSameProperty(lastOperation: Operation, properties: OperationProperties): boolean {\r\n    return lastOperation.actions.every(\r\n      (x) =>\r\n        x.properties.trackedObject === properties.trackedObject &&\r\n        x.properties.property === properties.property,\r\n    );\r\n  }\r\n\r\n  private lastActionIsRecent(lastOperation: Operation, coalesceWithin: number): boolean {\r\n    return (\r\n      new Date().getTime() -\r\n        CollectionUtilities.getLast(lastOperation.actions)!.time.getTime() <\r\n        coalesceWithin\r\n    );\r\n  }\r\n\r\n  /** @internal */\r\n  public _nextTrackingId(): number {\r\n    return this._trackingIdCounter++;\r\n  }\r\n\r\n  public discardPendingChanges(): void {\r\n    const commitIdx = this._commitStateOperation !== undefined\r\n      ? this._undoOperations.indexOf(this._commitStateOperation)\r\n      : -1;\r\n    const toRevert = this._undoOperations.splice(commitIdx + 1);\r\n\r\n    this._undoOperations.length = 0;\r\n    this._redoOperations.length = 0;\r\n    this._commitStateOperation = undefined;\r\n\r\n    if (toRevert.length > 0) {\r\n      this.replay(() => {\r\n        for (let i = toRevert.length - 1; i >= 0; i--) {\r\n          toRevert[i].undo();\r\n        }\r\n      });\r\n      this._version -= toRevert.length;\r\n      this.versionChanged.emit(this._version);\r\n    }\r\n\r\n    this.reset();\r\n    this.revalidate();\r\n  }\r\n\r\n  public getByTrackingId(trackingId: number): TrackedObjectBase | undefined {\r\n    return this.trackedObjects.find((o) => o.trakrId === trackingId);\r\n  }\r\n\r\n  /** @internal */\r\n  public _isInUndoStack(op: Operation): boolean {\r\n    return this._undoOperations.includes(op);\r\n  }\r\n\r\n  /** Runs `action` as a replay (undo/redo/rollback): tracking suppressed, no new ops recorded. */\r\n  protected replay(action: () => void): void {\r\n    this._isReplaying = true;\r\n    try {\r\n      this.withTrackingSuppressed(action);\r\n    } finally {\r\n      this._isReplaying = false;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @internal Chains a side-effect onto the action of the write identified by\r\n   * `properties` in the operation currently being recorded, so it is undone and\r\n   * redone right after that write.\r\n   */\r\n  public _recordSideEffect(\r\n    redoAction: () => void,\r\n    undoAction: () => void,\r\n    properties: OperationProperties,\r\n  ): void {\r\n    // Only called from forward (non-replay, non-suppressed) writes, which always run inside an operation.\r\n    this._currentOperation!.attachAfter(properties, redoAction, undoAction);\r\n  }\r\n\r\n  protected reset(): void {\r\n    this.canUndo = this._undoOperations.length > 0;\r\n    this.canRedo = this._redoOperations.length > 0;\r\n    this.isDirty = this._computeIsDirty();\r\n  }\r\n\r\n  public startSession(scope?: PropertyScope[]): TrackerSession {\r\n    if (this._currentSession !== undefined) return this._currentSession;\r\n    this._composingBaseIndex = this._undoOperations.length;\r\n    this._composingRedoLength = this._redoOperations.length;\r\n    this._currentSession = this._createSession(\r\n      scope,\r\n      () => this.endComposing(),\r\n      () => this.rollbackComposing(),\r\n    );\r\n    return this._currentSession;\r\n  }\r\n\r\n  /** Creates the session object returned by `startSession`; DirtyTracker adds `deletedObjects`. */\r\n  protected _createSession(scope: PropertyScope[] | undefined, end: () => void, rollback: () => void): TrackerSession {\r\n    return new TrackerSession(scope, this, end, rollback);\r\n  }\r\n\r\n  private endComposing(): void {\r\n    if (this._composingBaseIndex === undefined) return;\r\n    this._currentSession = undefined;\r\n\r\n    const composed = this._undoOperations.splice(this._composingBaseIndex);\r\n    this._onOperationsDropped(this._redoOperations.splice(this._composingRedoLength!));\r\n    this._composingBaseIndex = undefined;\r\n    this._composingRedoLength = undefined;\r\n\r\n    if (composed.length === 0) {\r\n      this.reset();\r\n      return;\r\n    }\r\n\r\n    let result = composed[0];\r\n    if (composed.length > 1) {\r\n      result = new Operation();\r\n      for (const op of composed) {\r\n        for (const action of op.actions) {\r\n          result.add(action.redoAction, action.undoAction, action.properties);\r\n        }\r\n      }\r\n    }\r\n    this._undoOperations.push(result);\r\n    this._onSessionEnded(composed, result);\r\n    this.reset();\r\n  }\r\n\r\n  private rollbackComposing(): void {\r\n    if (this._composingBaseIndex === undefined) return;\r\n    this._currentSession = undefined;\r\n\r\n    const toRevert = this._undoOperations.splice(this._composingBaseIndex);\r\n    this._onOperationsDropped(this._redoOperations.splice(this._composingRedoLength!));\r\n    this._composingBaseIndex = undefined;\r\n    this._composingRedoLength = undefined;\r\n\r\n    this.replay(() => {\r\n      for (let i = toRevert.length - 1; i >= 0; i--) {\r\n        toRevert[i].undo();\r\n      }\r\n    });\r\n    this._onSessionRolledBack(toRevert);\r\n\r\n    this.reset();\r\n    this.revalidate();\r\n    if (toRevert.length > 0) {\r\n      this._version -= toRevert.length;\r\n      this.versionChanged.emit(this._version);\r\n    }\r\n  }\r\n\r\n  public undo(): void {\r\n    if (!this.canUndo) {\r\n      return;\r\n    }\r\n\r\n    const undoOperation = this._undoOperations.pop()!;\r\n    this.replay(() => undoOperation.undo());\r\n    this._redoOperations.push(undoOperation);\r\n    this._onReplayed(undoOperation);\r\n\r\n    this.reset();\r\n    this.revalidate();\r\n    this._version--;\r\n    this.versionChanged.emit(this._version);\r\n  }\r\n\r\n  public redo(): void {\r\n    if (!this.canRedo) {\r\n      return;\r\n    }\r\n\r\n    const redoOperation = this._redoOperations.pop()!;\r\n    this.replay(() => redoOperation.redo());\r\n    this._undoOperations.push(redoOperation);\r\n    this._onReplayed(redoOperation);\r\n\r\n    this.reset();\r\n    this.revalidate();\r\n    this._version++;\r\n    this.versionChanged.emit(this._version);\r\n  }\r\n\r\n  public revalidate(): void {\r\n    this.trackedObjects.forEach((x) => validate(x));\r\n    this.trackedCollections.forEach((x) => x._validate());\r\n    this.isValid = this._invalidCount === 0;\r\n  }\r\n}\r\n","export enum State {\n  Unchanged = 'Unchanged',\n  Insert = 'Insert',\n  Changed = 'Changed',\n  Deleted = 'Deleted',\n}\n","export interface IdAssignment<V = number> {\n  trackingId: number;\n  value: V;\n}\n\nconst AUTO_ID = Symbol(\"autoId\");\nconst ID_PROPS = Symbol(\"idProps\");\n\nexport function AutoId<This extends object, Value>(\n  _target: undefined,\n  context: ClassFieldDecoratorContext<This, Value>,\n): void {\n  context.addInitializer(function (this: This) {\n    const proto = Object.getPrototypeOf(this);\n    if (!Object.prototype.hasOwnProperty.call(proto, AUTO_ID)) {\n      Object.defineProperty(proto, AUTO_ID, {\n        value: String(context.name),\n        configurable: true,\n      });\n    }\n    addIdentityProp(proto, String(context.name));\n  });\n}\n\nexport function Id<This extends object, Value>(\n  _target: undefined,\n  context: ClassFieldDecoratorContext<This, Value>,\n): void {\n  context.addInitializer(function (this: This) {\n    const proto = Object.getPrototypeOf(this);\n    addIdentityProp(proto, String(context.name));\n  });\n}\n\nfunction addIdentityProp(proto: object, propertyName: string): void {\n  if (!Object.prototype.hasOwnProperty.call(proto, ID_PROPS)) {\n    Object.defineProperty(proto, ID_PROPS, {\n      value: [] as string[],\n      configurable: true,\n      writable: true,\n    });\n  }\n  const list = (proto as any)[ID_PROPS] as string[];\n  if (!list.includes(propertyName)) list.push(propertyName);\n}\n\nexport function getAutoIdProperty(proto: object): string | undefined {\n  return AUTO_ID in proto ? ((proto as any)[AUTO_ID] as string) : undefined;\n}\n\nexport function getIdProperty(proto: object): string | undefined {\n  const autoId = getAutoIdProperty(proto);\n  return getIdentityProperties(proto).find(p => p !== autoId);\n}\n\nexport function getIdentityProperties(proto: object): string[] {\n  const chain: object[] = [];\n  let current: object | null = proto;\n  while (current) {\n    chain.push(current);\n    current = Object.getPrototypeOf(current);\n  }\n  const merged: string[] = [];\n  for (let i = chain.length - 1; i >= 0; i--) {\n    const proto = chain[i];\n    if (!Object.prototype.hasOwnProperty.call(proto, ID_PROPS)) continue;\n    const list = (proto as any)[ID_PROPS] as string[];\n    for (const name of list) {\n      if (!merged.includes(name)) merged.push(name);\n    }\n  }\n  return merged;\n}\n\nexport function getIdentity(obj: object): unknown {\n  const props = getIdentityProperties(Object.getPrototypeOf(obj));\n  if (props.length === 0) return undefined;\n  if (props.length === 1) {\n    return (obj as Record<string, unknown>)[props[0]];\n  }\n  const result: Record<string, unknown> = {};\n  for (const p of props) result[p] = (obj as Record<string, unknown>)[p];\n  return result;\n}\n\nexport function getIdentityObject(obj: object): Record<string, unknown> {\n  const props = getIdentityProperties(Object.getPrototypeOf(obj));\n  const result: Record<string, unknown> = {};\n  for (const p of props) result[p] = (obj as Record<string, unknown>)[p];\n  return result;\n}\n","import { State } from \"./State\";\r\nimport { IdAssignment } from \"./ExternallyAssigned\";\r\n\r\nexport type StateEvent = 'added' | 'removed' | 'committed';\r\nexport type StateDirection = 'do' | 'undo';\r\n\r\nexport interface StateContext {\r\n  prevState?: State;\r\n  prevDirtyCounter?: number;\r\n  autoIdProp?: string;\r\n  realId?: unknown;\r\n}\r\n\r\nexport interface StateTarget {\r\n  trakrId: number;\r\n  trakrState: State;\r\n  _setState(value: State): void;\r\n  _setDirtyCounter(value: number): void;\r\n}\r\n\r\nexport function applyStateTransition(\r\n  obj: StateTarget,\r\n  event: StateEvent,\r\n  direction: StateDirection,\r\n  context?: StateContext,\r\n): void {\r\n  if (event === 'added') {\r\n    applyAdded(obj, direction);\r\n  } else if (event === 'removed') {\r\n    applyRemoved(obj, direction, context);\r\n  } else {\r\n    applyCommitted(obj, direction, context);\r\n  }\r\n}\r\n\r\nfunction applyAdded(obj: StateTarget, direction: StateDirection): void {\r\n  if (direction === 'undo') {\r\n    obj._setState(State.Unchanged);\r\n  } else {\r\n    obj._setState(State.Insert);\r\n  }\r\n}\r\n\r\nfunction applyRemoved(obj: StateTarget, direction: StateDirection, context?: StateContext): void {\r\n  if (direction === 'undo') {\r\n    const prev = context?.prevState ?? State.Unchanged;\r\n    obj._setState(prev);\r\n    if (prev === State.Insert) {\r\n      if (context?.prevDirtyCounter !== undefined) {\r\n        obj._setDirtyCounter(context.prevDirtyCounter);\r\n      }\r\n    }\r\n  } else {\r\n    if (obj.trakrState === State.Insert) {\r\n      obj._setState(State.Unchanged);\r\n      obj._setDirtyCounter(0);\r\n    } else {\r\n      obj._setState(State.Deleted);\r\n    }\r\n  }\r\n}\r\n\r\nfunction applyCommitted(obj: StateTarget, direction: StateDirection, context?: StateContext): void {\r\n  if (direction === 'undo') {\r\n    const prev = context?.prevState ?? State.Unchanged;\r\n    if (prev === State.Insert) {\r\n      // committed insert was undone: item now exists on server → mark Deleted so save layer sends DELETE\r\n      obj._setState(State.Deleted);\r\n      // @AutoId keeps the real server id — needed for the DELETE request\r\n    } else if (prev === State.Deleted) {\r\n      // committed delete was undone: re-insert needed\r\n      obj._setState(State.Insert);\r\n    } else if (prev === State.Changed) {\r\n      // committed update was undone: property undo closures restore values and dirtyCounter\r\n      obj._setState(State.Changed);\r\n    }\r\n    // prevState=Unchanged: no state change needed\r\n  } else {\r\n    if (\r\n      (context?.prevState === State.Insert || context?.prevState === State.Changed) &&\r\n      context.autoIdProp &&\r\n      context.realId !== undefined\r\n    ) {\r\n      (obj as any)[context.autoIdProp] = context.realId;\r\n    }\r\n    obj._setState(State.Unchanged);\r\n    obj._setDirtyCounter(0);\r\n  }\r\n}\r\n\r\nexport function buildCommittedContext(\r\n  obj: StateTarget & { [key: string]: any },\r\n  autoIdProp: string | undefined,\r\n  keys: IdAssignment<unknown>[] | undefined,\r\n): StateContext {\r\n  const prevState = obj.trakrState;\r\n  let realId: unknown;\r\n  if (\r\n    (prevState === State.Insert || prevState === State.Changed) &&\r\n    keys\r\n  ) {\r\n    realId = keys.find((k) => k.trackingId === obj.trakrId)?.value;\r\n  }\r\n  return { prevState, autoIdProp, realId };\r\n}\r\n","import type { DirtyTracker } from \"./DirtyTracker\";\r\nimport { TrackedObjectBase } from \"./TrackedObjectBase\";\r\nimport { State } from \"./State\";\r\nimport { Operation } from \"./Operation\";\r\nimport { OperationProperties } from \"./OperationProperties\";\r\nimport { PropertyType } from \"./PropertyType\";\r\nimport { IdAssignment, getAutoIdProperty } from \"./ExternallyAssigned\";\r\nimport { DependencyTracker } from \"./DependencyTracker\";\r\nimport { StateTarget, applyStateTransition, buildCommittedContext } from \"./TrackedObjectStateMachine\";\r\n\r\n/**\r\n * Base class for models tracked by a {@link DirtyTracker}. Adds batch-save\r\n * state: `trakrState` (`Insert` / `Changed` / `Deleted` / `Unchanged`),\r\n * `dirtyCounter` and `isDirty`, maintained by the state machine.\r\n */\r\nexport abstract class DirtyTrackedObject extends TrackedObjectBase implements StateTarget {\r\n  declare public readonly tracker: DirtyTracker;\r\n\r\n  private _dirtyCounter: number = 0;\r\n  private _state: State = State.Unchanged;\r\n\r\n  public constructor(tracker: DirtyTracker) {\r\n    super(tracker);\r\n  }\r\n\r\n  /** What the save layer has to do with this object. */\r\n  public get trakrState(): State {\r\n    return this._state;\r\n  }\r\n\r\n  /** Net count of uncommitted writes: +1 per write, −1 per undo, reset by `onCommit()`. */\r\n  public get dirtyCounter(): number {\r\n    return this._dirtyCounter;\r\n  }\r\n\r\n  public get isDirty(): boolean {\r\n    return this._dirtyCounter !== 0;\r\n  }\r\n\r\n  /** @internal */\r\n  _setState(value: State): void {\r\n    this._state = value;\r\n  }\r\n\r\n  /** @internal */\r\n  _setDirtyCounter(value: number): void {\r\n    this._dirtyCounter = value;\r\n  }\r\n\r\n  /** @internal */\r\n  override _onTrackedWrite(): void {\r\n    this._dirtyCounter++;\r\n    if (this._state === State.Unchanged) this._state = State.Changed;\r\n  }\r\n\r\n  /** @internal */\r\n  override _onTrackedWriteUndone(): void {\r\n    this._dirtyCounter--;\r\n    if (this._dirtyCounter === 0 && this._state === State.Changed) this._state = State.Unchanged;\r\n  }\r\n\r\n  /** @internal */\r\n  public _onCommitted(lastOp?: Operation, keys?: IdAssignment<unknown>[]): void {\r\n    const autoIdProp = getAutoIdProperty(Object.getPrototypeOf(this));\r\n    const context = buildCommittedContext(this, autoIdProp, keys);\r\n\r\n    const redoFn = () => applyStateTransition(this, \"committed\", \"do\", context);\r\n    const undoFn = () => applyStateTransition(this, \"committed\", \"undo\", context);\r\n\r\n    if (lastOp) {\r\n      lastOp.updateOrAdd(redoFn, undoFn, new OperationProperties(this, \"__state__\", PropertyType.Object));\r\n    }\r\n    redoFn();\r\n  }\r\n\r\n  /** @internal */\r\n  override _markRemoved(): void {\r\n    const prevState = this._state;\r\n    const prevDirtyCounter = this._dirtyCounter;\r\n    const wasValid = this.trakrIsValid;\r\n    const collapseInsert = prevState === State.Insert;\r\n\r\n    this.tracker._doAndTrack(\r\n      () => {\r\n        applyStateTransition(this, \"removed\", \"do\");\r\n        if (collapseInsert) {\r\n          DependencyTracker.clearDeps(this);\r\n          this.tracker._untrackObject(this);\r\n        } else if (!wasValid) {\r\n          this.tracker._onValidityChanged(false);\r\n        }\r\n      },\r\n      () => {\r\n        if (collapseInsert) {\r\n          this.tracker._trackObject(this);\r\n          if (!wasValid) this.tracker._onValidityChanged(true);\r\n        } else if (!wasValid) {\r\n          this.tracker._onValidityChanged(true);\r\n        }\r\n        applyStateTransition(this, \"removed\", \"undo\", { prevState, prevDirtyCounter });\r\n      },\r\n      new OperationProperties(this, \"__state__\", PropertyType.Object)\r\n    );\r\n  }\r\n\r\n  /** @internal */\r\n  override _markAdded(): void {\r\n    if (this._state !== State.Unchanged) return;\r\n    if (this.tracker._isTrackingSuppressed) return;\r\n    const wasValid = this.trakrIsValid;\r\n    this.tracker._doAndTrack(\r\n      () => {\r\n        if (this.tracker.trackedObjects.indexOf(this) === -1) {\r\n          this.tracker._trackObject(this);\r\n          if (!wasValid) this.tracker._onValidityChanged(true);\r\n        }\r\n        applyStateTransition(this, \"added\", \"do\");\r\n      },\r\n      () => {\r\n        this.tracker._untrackObject(this);\r\n        applyStateTransition(this, \"added\", \"undo\");\r\n      },\r\n      new OperationProperties(this, \"__state__\", PropertyType.Object)\r\n    );\r\n  }\r\n}\r\n","import { TrackerSession } from \"./TrackerSession\";\r\nimport { DirtyTrackedObject } from \"./DirtyTrackedObject\";\r\nimport { State } from \"./State\";\r\n\r\n/** A {@link TrackerSession} of a `DirtyTracker`, which also reports scoped deletions. */\r\nexport class DirtyTrackerSession extends TrackerSession {\r\n  /** Scoped objects in `Deleted` state. */\r\n  get deletedObjects(): DirtyTrackedObject[] {\r\n    return (this.trackedObjects as DirtyTrackedObject[]).filter((obj) => obj.trakrState === State.Deleted);\r\n  }\r\n}\r\n","import { Tracker } from \"./Tracker\";\r\nimport { Operation } from \"./Operation\";\r\nimport { CollectionUtilities } from \"./CollectionUtilities\";\r\nimport { IdAssignment } from \"./ExternallyAssigned\";\r\nimport { State } from \"./State\";\r\nimport { ITracked } from \"./ITracked\";\r\nimport { TrackedObjectBase } from \"./TrackedObjectBase\";\r\nimport { DirtyTrackedObject } from \"./DirtyTrackedObject\";\r\nimport { DirtyTrackerSession } from \"./DirtyTrackerSession\";\r\nimport { PropertyScope } from \"./TrackerSession\";\r\n\r\n/**\r\n * Batch-state tracker for Save-button workflows. Object state is the truth:\r\n * mutations mark objects Insert/Changed/Deleted, `isDirty`/`canCommit` gate the\r\n * save, and `onCommit()` atomically transitions everything to Unchanged.\r\n * Undo can cross a commit boundary — undoing a committed change marks the\r\n * object dirty again so the next save persists the reversal.\r\n */\r\nexport class DirtyTracker extends Tracker {\r\n  declare public readonly trackedObjects: DirtyTrackedObject[];\r\n\r\n  public get deletedObjects(): DirtyTrackedObject[] {\r\n    return this.trackedObjects.filter(obj => obj.trakrState === State.Deleted);\r\n  }\r\n\r\n  /** @internal */\r\n  public _assertAccepts(obj: TrackedObjectBase): void {\r\n    if (!(obj instanceof DirtyTrackedObject)) {\r\n      throw new TypeError(\r\n        `${obj.constructor.name} cannot be tracked by a DirtyTracker: its models extend ` +\r\n        \"DirtyTrackedObject (or DirtyTrackedContainer). TrackedObject models belong to an EventTracker.\",\r\n      );\r\n    }\r\n  }\r\n\r\n  public override getByTrackingId(trackingId: number): DirtyTrackedObject | undefined {\r\n    return super.getByTrackingId(trackingId) as DirtyTrackedObject | undefined;\r\n  }\r\n\r\n  public override startSession(scope?: PropertyScope[]): DirtyTrackerSession {\r\n    return super.startSession(scope) as DirtyTrackerSession;\r\n  }\r\n\r\n  protected override _createSession(scope: PropertyScope[] | undefined, end: () => void, rollback: () => void): DirtyTrackerSession {\r\n    return new DirtyTrackerSession(scope, this, end, rollback);\r\n  }\r\n\r\n  /** Objects built by `tracker.new()` start clean: their constructor writes are not edits. */\r\n  protected override _onNewCompleted(created: readonly TrackedObjectBase[]): void {\r\n    for (const obj of created as readonly DirtyTrackedObject[]) {\r\n      obj._setDirtyCounter(0);\r\n      if (obj.trakrState === State.Changed) obj._setState(State.Unchanged);\r\n    }\r\n  }\r\n\r\n  protected _computeIsDirty(): boolean {\r\n    return CollectionUtilities.getLast(this._undoOperations) !== this._commitStateOperation;\r\n  }\r\n\r\n  public onCommit<V = number>(keys?: IdAssignment<V>[]): void {\r\n    const globalLastOp = CollectionUtilities.getLast(this._undoOperations);\r\n    this.trackedObjects.forEach((obj) => {\r\n      const op = this.findLastOpTouching(obj);\r\n      obj._onCommitted(op, keys as IdAssignment<unknown>[] | undefined);\r\n    });\r\n    this._commitStateOperation = globalLastOp;\r\n    this.reset();\r\n  }\r\n\r\n  private findLastOpTouching(obj: ITracked): Operation | undefined {\r\n    for (let i = this._undoOperations.length - 1; i >= 0; i--) {\r\n      const op = this._undoOperations[i];\r\n      for (const action of op.actions) {\r\n        if (action.properties.trackedObject === obj) return op;\r\n      }\r\n    }\r\n    return undefined;\r\n  }\r\n}\r\n","import type { EventTracker } from \"./EventTracker\";\nimport { TrackedObjectBase } from \"./TrackedObjectBase\";\n\nexport type { TrackedPropertyChanged } from \"./TrackedObjectBase\";\n\n/**\n * Base class for models tracked by an {@link EventTracker}. It carries no\n * object state (`trakrState`, `dirtyCounter`): what is pending is the\n * tracker's event list. Models for a `DirtyTracker` extend `DirtyTrackedObject`.\n */\nexport abstract class TrackedObject extends TrackedObjectBase {\n  declare public readonly tracker: EventTracker;\n\n  public constructor(tracker: EventTracker) {\n    super(tracker);\n  }\n}\n","import { ITracked } from \"./ITracked\";\r\nimport { Tracker } from \"./Tracker\";\r\nimport { OperationProperties } from \"./OperationProperties\";\r\nimport { PropertyType } from \"./PropertyType\";\r\nimport { TypedEvent } from \"./TypedEvent\";\r\nimport { TrackedObjectBase } from \"./TrackedObjectBase\";\r\nimport { DependencyTracker, COLLECTION_VERSION_KEY } from \"./DependencyTracker\";\r\n\r\nexport class TrackedCollection<T> implements Array<T>, ITracked {\r\n  private _collection: T[];\r\n  private _isValid: boolean;\r\n  private _error: string | undefined;\r\n  private readAccess(): void {\r\n    DependencyTracker.record(this, COLLECTION_VERSION_KEY);\r\n  }\r\n\r\n  public get trakrIsValid(): boolean {\r\n    return this._isValid;\r\n  }\r\n  private set trakrIsValid(value: boolean) {\r\n    const wasValid = this._isValid;\r\n    this._isValid = value;\r\n    if (wasValid !== value) {\r\n      this.tracker._onValidityChanged(!value);\r\n    }\r\n  }\r\n\r\n  public get length(): number {\r\n    this.readAccess();\r\n    return this._collection.length;\r\n  }\r\n\r\n  public get lastItemIndex(): number | undefined {\r\n    this.readAccess();\r\n    return this._collection.length > 0 ? this._collection.length - 1 : undefined;\r\n  }\r\n\r\n  public get collection(): T[] {\r\n    return this._collection;\r\n  }\r\n  private set collection(value: T[]) {\r\n    this._collection = value;\r\n  }\r\n\r\n  public get [Symbol.iterator]() {\r\n    this.readAccess();\r\n    return this.collection[Symbol.iterator].bind(this.collection);\r\n  }\r\n\r\n  public get [Symbol.unscopables]() {\r\n    return this.collection[Symbol.unscopables];\r\n  }\r\n\r\n  public readonly changed: TypedEvent<TrackedCollectionChanged<T>> =\r\n    new TypedEvent<TrackedCollectionChanged<T>>();\r\n\r\n  public readonly trackedChanged: TypedEvent<TrackedCollectionChanged<T>> =\r\n    new TypedEvent<TrackedCollectionChanged<T>>();\r\n\r\n  [n: number]: T;\r\n\r\n  public get error(): string | undefined {\r\n    return this._error;\r\n  }\r\n  public set error(value: string | undefined) {\r\n    this._error = value;\r\n  }\r\n\r\n  public constructor(\r\n    public readonly tracker: Tracker,\r\n    items?: T[],\r\n    private readonly _validator?: (value: T[]) => string | undefined,\r\n  ) {\r\n    this._isValid = true;\r\n    this._collection = items ? [...items] : [];\r\n    this._validate();\r\n    this.tracker._trackCollection(this);\r\n  }\r\n\r\n  /** @internal */\r\n  _validate(): void {\r\n    const deps = DependencyTracker.collect(() => {\r\n      this.error = this._validator ? this._validator(this.collection) : undefined;\r\n    });\r\n    DependencyTracker.updateDeps(this, COLLECTION_VERSION_KEY, deps);\r\n    this.trakrIsValid = this.error === undefined;\r\n  }\r\n\r\n  /** @internal */\r\n  public _applyValidation(_messages: Map<string, string>): void {\r\n    // Collections validate via validate() using their own validator, not the Registry.\r\n  }\r\n\r\n  public splice(start: number, deleteCount: number, ...items: T[]): T[] {\r\n    let removed: T[];\r\n\r\n    this.tracker._doAndTrack(\r\n      () => {\r\n        if (removed !== undefined) {\r\n          this.doSplice(start, deleteCount, items, removed);\r\n        } else {\r\n          removed = this.doSplice(start, deleteCount, items);\r\n        }\r\n        this.trackRemovedObjectDeletions(removed);\r\n        this.trackAddedObjectInsertions(items);\r\n        if (!this.tracker._isReplaying) {\r\n          this.trackedChanged.emit(new TrackedCollectionChanged(items, removed, this._collection));\r\n        }\r\n      },\r\n      () => this.undoSplice(start, items, removed),\r\n      new OperationProperties(this, undefined, PropertyType.Collection),\r\n    );\r\n\r\n    return removed!;\r\n  }\r\n\r\n  private doSplice(\r\n    start: number,\r\n    deleteCount: number,\r\n    items: T[],\r\n    reusedRemoved?: T[],\r\n  ): T[] {\r\n    let removed: T[];\r\n    let event: TrackedCollectionChanged<T>;\r\n\r\n    this.tracker.withTrackingSuppressed(() => {\r\n      removed = this.collection.splice(start, deleteCount, ...items);\r\n      this.collection = [...this.collection];\r\n      event = new TrackedCollectionChanged<T>(items, removed, this.collection);\r\n    });\r\n\r\n    this.changed.emit(event!);\r\n\r\n    return reusedRemoved ?? removed!;\r\n  }\r\n\r\n  private trackRemovedObjectDeletions(removed: T[]): void {\r\n    for (const item of removed) {\r\n      if (item instanceof TrackedObjectBase) {\r\n        item._markRemoved();\r\n      }\r\n    }\r\n  }\r\n\r\n  private trackAddedObjectInsertions(added: T[]): void {\r\n    for (const item of added) {\r\n      if (item instanceof TrackedObjectBase) {\r\n        item._markAdded();\r\n      }\r\n    }\r\n  }\r\n\r\n  private undoSplice(start: number, items: T[], removed: T[]): void {\r\n    this.tracker.withTrackingSuppressed(() => {\r\n      this.collection.splice(start, items.length, ...removed);\r\n      this.collection = [...this.collection];\r\n      const event = new TrackedCollectionChanged<T>(\r\n        removed,\r\n        items,\r\n        this.collection,\r\n      );\r\n      this.changed.emit(event);\r\n    });\r\n  }\r\n\r\n  public reset(newItems: T[]): void {\r\n    this.splice(0, this.collection.length, ...newItems);\r\n  }\r\n\r\n  public reverse(): T[] {\r\n    this.collection.reverse();\r\n    return this.collection;\r\n  }\r\n\r\n  public sort(compareFn?: (a: T, b: T) => number): this {\r\n    if (this.length === 0) {\r\n      return this;\r\n    }\r\n    this.collection.sort(compareFn);\r\n    return this;\r\n  }\r\n\r\n  public clear(): void {\r\n    if (this.length === 0) {\r\n      return;\r\n    }\r\n    this.splice(0, this.length);\r\n  }\r\n\r\n  public remove(item: T): boolean {\r\n    const itemIndex = this.collection.indexOf(item);\r\n    if (itemIndex < 0) {\r\n      return false;\r\n    }\r\n\r\n    this.splice(itemIndex, 1);\r\n\r\n    return true;\r\n  }\r\n\r\n  public replace(item: T, replace: T): boolean {\r\n    const itemIndex = this.collection.indexOf(item);\r\n    if (itemIndex < 0) {\r\n      return false;\r\n    }\r\n\r\n    this.splice(itemIndex, 1, replace);\r\n\r\n    return true;\r\n  }\r\n\r\n  public replaceAt(index: number, replace: T): void {\r\n    this.splice(index, 1, replace);\r\n  }\r\n\r\n  public pop(): T | undefined {\r\n    return this.length === 0\r\n      ? undefined\r\n      : this.splice(this.collection.length - 1, 1)[0];\r\n  }\r\n\r\n  public push(...items: T[]): number {\r\n    if (!items || items.length === 0) {\r\n      return this.length;\r\n    }\r\n    this.splice((this.lastItemIndex ?? -1) + 1, 0, ...items);\r\n\r\n    return this.length;\r\n  }\r\n\r\n  public concat(...items: (T | ConcatArray<T>)[]): T[] {\r\n    this.readAccess();\r\n    return this.collection.concat(...items);\r\n  }\r\n\r\n  public join(separator?: string): string {\r\n    this.readAccess();\r\n    return this.collection.join(separator);\r\n  }\r\n\r\n  public shift(): T | undefined {\r\n    return this.length === 0 ? undefined : this.splice(0, 1)[0];\r\n  }\r\n\r\n  public slice(start?: number, end?: number): T[] {\r\n    this.readAccess();\r\n    return this.collection.slice(start, end);\r\n  }\r\n\r\n  public unshift(...items: T[]): number {\r\n    this.splice(0, 0, ...items);\r\n    return this.length;\r\n  }\r\n\r\n  public indexOf(searchElement: T, fromIndex?: number): number {\r\n    this.readAccess();\r\n    return this.collection.indexOf(searchElement, fromIndex);\r\n  }\r\n\r\n  public lastIndexOf(searchElement: T, fromIndex?: number): number {\r\n    this.readAccess();\r\n    return fromIndex !== undefined\r\n      ? this.collection.lastIndexOf(searchElement, fromIndex)\r\n      : this.collection.lastIndexOf(searchElement);\r\n  }\r\n\r\n  public every<S extends T>(\r\n    predicate: (value: T, index: number, array: T[]) => value is S,\r\n    thisArg?: any,\r\n  ): this is S[];\r\n  public every(\r\n    predicate: (value: T, index: number, array: T[]) => unknown,\r\n    thisArg?: any,\r\n  ): boolean;\r\n  public every(\r\n    predicate: (value: T, index: number, array: T[]) => unknown,\r\n    thisArg?: any,\r\n  ): boolean {\r\n    this.readAccess();\r\n    return this.collection.every(predicate as any, thisArg);\r\n  }\r\n\r\n  public some(\r\n    predicate: (value: T, index: number, array: T[]) => unknown,\r\n    thisArg?: any,\r\n  ): boolean {\r\n    this.readAccess();\r\n    return this.collection.some(predicate, thisArg);\r\n  }\r\n\r\n  public forEach(\r\n    callbackfn: (value: T, index: number, array: T[]) => void,\r\n    thisArg?: any,\r\n  ): void {\r\n    this.readAccess();\r\n    this.collection.forEach(callbackfn, thisArg);\r\n  }\r\n\r\n  public map<U>(\r\n    callbackfn: (value: T, index: number, array: T[]) => U,\r\n    thisArg?: any,\r\n  ): U[] {\r\n    this.readAccess();\r\n    return this.collection.map(callbackfn, thisArg);\r\n  }\r\n\r\n  public filter(\r\n    predicate: (value: T, index: number, array: T[]) => unknown,\r\n    thisArg?: any,\r\n  ): T[] {\r\n    this.readAccess();\r\n    return this.collection.filter(predicate, thisArg);\r\n  }\r\n\r\n  public find(\r\n    predicate: (value: T, index: number, obj: T[]) => unknown,\r\n    thisArg?: any,\r\n  ): T | undefined {\r\n    this.readAccess();\r\n    return this.collection.find(predicate, thisArg);\r\n  }\r\n\r\n  public findIndex(\r\n    predicate: (value: T, index: number, obj: T[]) => unknown,\r\n    thisArg?: any,\r\n  ): number {\r\n    this.readAccess();\r\n    return this.collection.findIndex(predicate, thisArg);\r\n  }\r\n\r\n  public flatMap<U, This = undefined>(\r\n    callback: (\r\n      this: This,\r\n      value: T,\r\n      index: number,\r\n      array: T[],\r\n    ) => U | ReadonlyArray<U>,\r\n    thisArg?: This,\r\n  ): U[] {\r\n    this.readAccess();\r\n    return this.collection.flatMap(callback, thisArg);\r\n  }\r\n\r\n  public includes(searchElement: T, fromIndex?: number): boolean {\r\n    this.readAccess();\r\n    return this.collection.includes(searchElement, fromIndex);\r\n  }\r\n\r\n  public toString(): string {\r\n    this.readAccess();\r\n    return this.collection.toString();\r\n  }\r\n\r\n  public toLocaleString(): string {\r\n    this.readAccess();\r\n    return this.collection.toLocaleString();\r\n  }\r\n\r\n  public entries(): ArrayIterator<[number, T]> {\r\n    this.readAccess();\r\n    return this.collection.entries() as unknown as ArrayIterator<[number, T]>;\r\n  }\r\n\r\n  public keys(): ArrayIterator<number> {\r\n    this.readAccess();\r\n    return this.collection.keys() as unknown as ArrayIterator<number>;\r\n  }\r\n\r\n  public values(): ArrayIterator<T> {\r\n    this.readAccess();\r\n    return this.collection.values() as unknown as ArrayIterator<T>;\r\n  }\r\n\r\n  public at(index: number): T | undefined {\r\n    this.readAccess();\r\n    return this.collection.at(index);\r\n  }\r\n\r\n  public fill(value: T, start?: number, end?: number): this {\r\n    const len = this.length;\r\n    const s =\r\n      start === undefined\r\n        ? 0\r\n        : start < 0\r\n          ? Math.max(len + start, 0)\r\n          : Math.min(start, len);\r\n    const e =\r\n      end === undefined\r\n        ? len\r\n        : end < 0\r\n          ? Math.max(len + end, 0)\r\n          : Math.min(end, len);\r\n    if (s >= e) return this;\r\n    this.splice(s, e - s, ...new Array<T>(e - s).fill(value));\r\n    return this;\r\n  }\r\n\r\n  public copyWithin(target: number, start: number, end?: number): this {\r\n    const len = this.length;\r\n    const t = target < 0 ? Math.max(len + target, 0) : Math.min(target, len);\r\n    const s = start < 0 ? Math.max(len + start, 0) : Math.min(start, len);\r\n    const e =\r\n      end === undefined\r\n        ? len\r\n        : end < 0\r\n          ? Math.max(len + end, 0)\r\n          : Math.min(end, len);\r\n    const itemsToCopy = this.collection.slice(s, e);\r\n    const count = Math.min(itemsToCopy.length, len - t);\r\n    if (count > 0) {\r\n      this.splice(t, count, ...itemsToCopy.slice(0, count));\r\n    }\r\n    return this;\r\n  }\r\n\r\n  public reduce(\r\n    callbackfn: (\r\n      previousValue: T,\r\n      currentValue: T,\r\n      currentIndex: number,\r\n      array: T[],\r\n    ) => T,\r\n    initialValue?: T,\r\n  ): T {\r\n    this.readAccess();\r\n    return initialValue !== undefined\r\n      ? this.collection.reduce(callbackfn, initialValue)\r\n      : this.collection.reduce(callbackfn);\r\n  }\r\n\r\n  public reduceRight(\r\n    callbackfn: (\r\n      previousValue: T,\r\n      currentValue: T,\r\n      currentIndex: number,\r\n      array: T[],\r\n    ) => T,\r\n    initialValue?: T,\r\n  ): T {\r\n    this.readAccess();\r\n    return initialValue !== undefined\r\n      ? this.collection.reduceRight(callbackfn, initialValue)\r\n      : this.collection.reduceRight(callbackfn);\r\n  }\r\n\r\n  public flat<A, D extends number = 1>(this: A, depth?: D): FlatArray<A, D>[] {\r\n    DependencyTracker.record(this as object, COLLECTION_VERSION_KEY);\r\n    return ((this as any)._collection as any[]).flat(depth) as FlatArray<\r\n      A,\r\n      D\r\n    >[];\r\n  }\r\n\r\n  public findLast(\r\n    predicate: (value: T, index: number, array: T[]) => unknown,\r\n    thisArg?: any,\r\n  ): T | undefined {\r\n    this.readAccess();\r\n    return this.collection.findLast(predicate, thisArg);\r\n  }\r\n\r\n  public findLastIndex(\r\n    predicate: (value: T, index: number, array: T[]) => unknown,\r\n    thisArg?: any,\r\n  ): number {\r\n    this.readAccess();\r\n    return this.collection.findLastIndex(predicate, thisArg);\r\n  }\r\n\r\n  public toReversed(): T[] {\r\n    this.readAccess();\r\n    return this.collection.toReversed();\r\n  }\r\n\r\n  public toSorted(compareFn?: (a: T, b: T) => number): T[] {\r\n    this.readAccess();\r\n    return this.collection.toSorted(compareFn);\r\n  }\r\n\r\n  public toSpliced(start: number, deleteCount: number, ...items: T[]): T[] {\r\n    this.readAccess();\r\n    return this.collection.toSpliced(start, deleteCount, ...items);\r\n  }\r\n\r\n  public with(index: number, value: T): T[] {\r\n    this.readAccess();\r\n    return this.collection.with(index, value);\r\n  }\r\n\r\n  public first(): T | undefined {\r\n    this.readAccess();\r\n    return this._collection.length > 0 ? this._collection[0] : undefined;\r\n  }\r\n\r\n  public destroy(): void {\r\n    DependencyTracker.clearDeps(this);\r\n    this.tracker._untrackCollection(this);\r\n  }\r\n}\r\n\r\nexport class TrackedCollectionChanged<T> {\r\n  constructor(\r\n    public readonly added: T[],\r\n    public readonly removed: T[],\r\n    public readonly newCollection: T[],\r\n  ) {}\r\n}\r\n\r\ndeclare global {\r\n  interface ArrayIterator<T> extends IterableIterator<T> {\r\n    map<U>(callback: (value: T) => U): ArrayIterator<U>;\r\n    filter(predicate: (value: T) => boolean): ArrayIterator<T>;\r\n    take(count: number): ArrayIterator<T>;\r\n    drop(count: number): ArrayIterator<T>;\r\n    flatMap<U>(callback: (value: T) => U[]): ArrayIterator<U>;\r\n    reduce<U>(callback: (acc: U, value: T) => U, initialValue: U): U;\r\n    toArray(): T[];\r\n    forEach(callback: (value: T) => void): void;\r\n    some(predicate: (value: T) => boolean): boolean;\r\n    every(predicate: (value: T) => boolean): boolean;\r\n    find(predicate: (value: T) => boolean): T | undefined;\r\n  }\r\n}\r\n","import { TrackedObjectBase } from \"./TrackedObjectBase\";\r\nimport { TrackedCollection, TrackedCollectionChanged } from \"./TrackedCollection\";\r\n\r\n// `any`: TrackedCollection is invariant in its item type, so `TrackedCollection<unknown>` would reject `TrackedCollection<Item>`.\r\ntype Child = TrackedObjectBase | TrackedCollection<any>;\r\n\r\n/**\r\n * The child bookkeeping shared by {@link TrackedContainer} and\r\n * `DirtyTrackedContainer`: tracked children, plus the object items of tracked\r\n * collections, followed as the collections change.\r\n * @internal\r\n */\r\nexport class ContainerChildren {\r\n  readonly children: Child[] = [];\r\n  private readonly _unsubscribers = new Map<TrackedCollection<any>, () => void>();\r\n\r\n  track(child: Child): void {\r\n    this.children.push(child);\r\n\r\n    if (child instanceof TrackedCollection) {\r\n      for (const item of child.collection) {\r\n        if (item instanceof TrackedObjectBase) {\r\n          this.children.push(item);\r\n        }\r\n      }\r\n\r\n      const unsub = child.changed.subscribe((e: TrackedCollectionChanged<unknown>) => {\r\n        for (const added of e.added) {\r\n          if (added instanceof TrackedObjectBase) {\r\n            this.children.push(added);\r\n          }\r\n        }\r\n        for (const removed of e.removed) {\r\n          if (removed instanceof TrackedObjectBase) {\r\n            const idx = this.children.indexOf(removed);\r\n            if (idx >= 0) this.children.splice(idx, 1);\r\n          }\r\n        }\r\n      });\r\n\r\n      this._unsubscribers.set(child, unsub);\r\n    }\r\n  }\r\n\r\n  untrack(child: Child): void {\r\n    if (child instanceof TrackedCollection) {\r\n      const unsub = this._unsubscribers.get(child);\r\n      if (unsub) {\r\n        unsub();\r\n        this._unsubscribers.delete(child);\r\n      }\r\n\r\n      for (const item of child.collection) {\r\n        if (item instanceof TrackedObjectBase) {\r\n          const idx = this.children.indexOf(item);\r\n          if (idx >= 0) this.children.splice(idx, 1);\r\n        }\r\n      }\r\n    }\r\n\r\n    const idx = this.children.indexOf(child);\r\n    if (idx >= 0) this.children.splice(idx, 1);\r\n  }\r\n\r\n  get allValid(): boolean {\r\n    return this.children.every((c) => c.trakrIsValid);\r\n  }\r\n\r\n  dispose(): void {\r\n    for (const unsub of this._unsubscribers.values()) unsub();\r\n  }\r\n}\r\n","import { TrackedObject } from \"./TrackedObject\";\nimport { TrackedCollection } from \"./TrackedCollection\";\nimport { ContainerChildren } from \"./ContainerChildren\";\n\n/**\n * A {@link TrackedObject} (EventTracker model) that aggregates the validity of\n * its children: other tracked objects, collections, and their object items.\n * For a DirtyTracker, use `DirtyTrackedContainer`.\n */\nexport abstract class TrackedContainer extends TrackedObject {\n  private readonly _kids = new ContainerChildren();\n\n  protected trackChild(child: TrackedObject | TrackedCollection<any>): void {\n    this._kids.track(child);\n  }\n\n  protected untrackChild(child: TrackedObject | TrackedCollection<any>): void {\n    this._kids.untrack(child);\n  }\n\n  override get trakrIsValid(): boolean {\n    return super.trakrIsValid && this._kids.allValid;\n  }\n\n  override set trakrIsValid(value: boolean) {\n    this._setIsValid(value);\n  }\n\n  override destroy(): void {\n    this._kids.dispose();\n    super.destroy();\n  }\n}\n","import { DirtyTrackedObject } from \"./DirtyTrackedObject\";\nimport { TrackedCollection } from \"./TrackedCollection\";\nimport { ContainerChildren } from \"./ContainerChildren\";\n\n/**\n * A {@link DirtyTrackedObject} that aggregates the validity and dirtiness of\n * its children: other tracked objects, collections, and their object items.\n * For an EventTracker, use `TrackedContainer`.\n */\nexport abstract class DirtyTrackedContainer extends DirtyTrackedObject {\n  private readonly _kids = new ContainerChildren();\n\n  protected trackChild(child: DirtyTrackedObject | TrackedCollection<any>): void {\n    this._kids.track(child);\n  }\n\n  protected untrackChild(child: DirtyTrackedObject | TrackedCollection<any>): void {\n    this._kids.untrack(child);\n  }\n\n  override get trakrIsValid(): boolean {\n    return super.trakrIsValid && this._kids.allValid;\n  }\n\n  override set trakrIsValid(value: boolean) {\n    this._setIsValid(value);\n  }\n\n  override get isDirty(): boolean {\n    return super.isDirty || this._kids.children.some((c) => c instanceof DirtyTrackedObject && c.isDirty);\n  }\n\n  override destroy(): void {\n    this._kids.dispose();\n    super.destroy();\n  }\n}\n","import { TrackedObjectBase } from \"./TrackedObjectBase\";\r\nimport { OperationProperties } from \"./OperationProperties\";\r\nimport { PropertyType } from \"./PropertyType\";\r\nimport { registerPropertyValidator } from \"./Registry\";\r\nimport { DependencyTracker } from \"./DependencyTracker\";\r\n\r\nexport type ChangeHook<TSelf = any, TValue = any> = (\r\n  self: TSelf,\r\n  newValue: TValue,\r\n  oldValue: TValue,\r\n) => void;\r\n\r\nexport interface ChangeHooks<TSelf = any, TValue = any> {\r\n  beforeChange?: ChangeHook<TSelf, TValue>;\r\n  afterChange?: ChangeHook<TSelf, TValue>;\r\n}\r\n\r\nlet legacyOnChangeWarned = false;\r\n\r\nfunction normalizeHooks(\r\n  hooks: ChangeHooks | ChangeHook | undefined,\r\n): { before?: ChangeHook; after?: ChangeHook } {\r\n  if (!hooks) return {};\r\n  if (typeof hooks === \"function\") {\r\n    if (!legacyOnChangeWarned) {\r\n      legacyOnChangeWarned = true;\r\n      // eslint-disable-next-line no-console\r\n      console.warn(\r\n        \"[trakr] @Tracked/@EventTracked: passing a bare onChange function is deprecated. \" +\r\n          \"Use `{ beforeChange, afterChange }` instead. The bare function is mapped to `beforeChange`.\",\r\n      );\r\n    }\r\n    return { before: hooks };\r\n  }\r\n  return { before: hooks.beforeChange, after: hooks.afterChange };\r\n}\r\n\r\nexport function Tracked(\r\n  validator?: (self: any, newValue: any) => string | undefined,\r\n  hooks?: ChangeHooks | ChangeHook,\r\n  options?: { coalesceWithin?: number },\r\n) {\r\n  const { before: beforeHook, after: afterHook } = normalizeHooks(hooks);\r\n\r\n  function decorator<T extends TrackedObjectBase, V>(\r\n    target: ClassAccessorDecoratorTarget<T, V>,\r\n    context: ClassAccessorDecoratorContext<T, V>,\r\n  ): ClassAccessorDecoratorResult<T, V>;\r\n  function decorator<T extends TrackedObjectBase, V>(\r\n    target: (this: T, value: V) => void,\r\n    context: ClassSetterDecoratorContext<T, V>,\r\n  ): (this: T, value: V) => void;\r\n  function decorator<T extends TrackedObjectBase, V>(\r\n    target: (this: T) => V,\r\n    context: ClassGetterDecoratorContext<T, V>,\r\n  ): (this: T) => V;\r\n  function decorator(\r\n    target: any,\r\n    context: any,\r\n  ): any {\r\n    const propertyName = String(context.name);\r\n\r\n    if (context.kind === \"getter\") {\r\n      const getterFn = target as (this: any) => any;\r\n      return function (this: any): any {\r\n        DependencyTracker.record(this, propertyName);\r\n        return getterFn.call(this);\r\n      };\r\n    }\r\n\r\n    if (context.kind === \"accessor\") {\r\n      const accessorTarget = target as ClassAccessorDecoratorTarget<any, any>;\r\n\r\n      if (validator) {\r\n        context.addInitializer(function (this: unknown) {\r\n          registerPropertyValidator(\r\n            Object.getPrototypeOf(this),\r\n            propertyName,\r\n            (model: any) => validator(model, (model as any)[propertyName]),\r\n          );\r\n        });\r\n      }\r\n\r\n      return {\r\n        get(this: any): any {\r\n          DependencyTracker.record(this, propertyName);\r\n          return accessorTarget.get.call(this);\r\n        },\r\n        set(this: any, newValue: any) {\r\n          const oldValue = accessorTarget.get.call(this);\r\n\r\n          if (isSameValue(oldValue, newValue)) {\r\n            return;\r\n          }\r\n\r\n          if (!this.tracker || this.tracker._isTrackingSuppressed) {\r\n            accessorTarget.set.call(this, newValue);\r\n            return;\r\n          }\r\n\r\n          const properties = new OperationProperties(\r\n            this,\r\n            propertyName,\r\n            getPropertyType(newValue, oldValue),\r\n            options?.coalesceWithin,\r\n          );\r\n\r\n          this.tracker._doAndTrack(\r\n            () => {\r\n              accessorTarget.set.call(this, newValue);\r\n              (this as TrackedObjectBase)._onTrackedWrite();\r\n              if (oldValue instanceof TrackedObjectBase) oldValue._markRemoved();\r\n              if (newValue instanceof TrackedObjectBase) newValue._markAdded();\r\n              const event = { property: propertyName, oldValue, newValue };\r\n              if (!this.tracker._isReplaying && beforeHook) {\r\n                beforeHook(this, newValue, oldValue);\r\n              }\r\n              this.beforeChange.emit(event);\r\n              this.afterChange.emit(event);\r\n              if (!this.tracker._isReplaying) {\r\n                this.trackedChanged.emit(event);\r\n              }\r\n              if (!this.tracker._isReplaying && afterHook) {\r\n                afterHook(this, newValue, oldValue);\r\n              }\r\n            },\r\n            () => {\r\n              accessorTarget.set.call(this, oldValue);\r\n              (this as TrackedObjectBase)._onTrackedWriteUndone();\r\n              const event = { property: propertyName, oldValue: newValue, newValue: oldValue };\r\n              this.beforeChange.emit(event);\r\n              this.afterChange.emit(event);\r\n            },\r\n            properties,\r\n          );\r\n        },\r\n      };\r\n    } else {\r\n      const setterFn = target as (this: any, value: any) => void;\r\n\r\n      if (validator) {\r\n        context.addInitializer(function (this: unknown) {\r\n          registerPropertyValidator(\r\n            Object.getPrototypeOf(this),\r\n            propertyName,\r\n            (model: any) => validator(model, (model as any)[propertyName]),\r\n          );\r\n        });\r\n      }\r\n\r\n      return function (this: any, newValue: any): void {\r\n        const oldValue = (this as any)[propertyName];\r\n\r\n        if (isSameValue(oldValue, newValue)) {\r\n          return;\r\n        }\r\n\r\n        if (!this.tracker || this.tracker._isTrackingSuppressed) {\r\n          setterFn.call(this, newValue);\r\n          return;\r\n        }\r\n\r\n        const properties = new OperationProperties(\r\n          this,\r\n          propertyName,\r\n          getPropertyType(newValue, oldValue),\r\n          options?.coalesceWithin,\r\n        );\r\n\r\n        this.tracker._doAndTrack(\r\n          () => {\r\n            setterFn.call(this, newValue);\r\n            (this as TrackedObjectBase)._onTrackedWrite();\r\n            if (oldValue instanceof TrackedObjectBase) oldValue._markRemoved();\r\n            if (newValue instanceof TrackedObjectBase) newValue._markAdded();\r\n            const event = { property: propertyName, oldValue, newValue };\r\n            if (!this.tracker._isReplaying && beforeHook) {\r\n              beforeHook(this, newValue, oldValue);\r\n            }\r\n            this.beforeChange.emit(event);\r\n            this.afterChange.emit(event);\r\n            if (!this.tracker._isReplaying) {\r\n              this.trackedChanged.emit(event);\r\n            }\r\n            if (!this.tracker._isReplaying && afterHook) {\r\n              afterHook(this, newValue, oldValue);\r\n            }\r\n          },\r\n          () => {\r\n            setterFn.call(this, oldValue);\r\n            (this as TrackedObjectBase)._onTrackedWriteUndone();\r\n            const event = { property: propertyName, oldValue: newValue, newValue: oldValue };\r\n            this.beforeChange.emit(event);\r\n            this.afterChange.emit(event);\r\n          },\r\n          properties,\r\n        );\r\n      };\r\n    }\r\n  }\r\n\r\n  return decorator;\r\n}\r\n\r\nfunction isSameValue(value1: any, value2: any): boolean {\r\n  return value1 === value2;\r\n}\r\n\r\nfunction getPropertyType(newValue: any, oldValue: any): PropertyType {\r\n  const v = newValue ?? oldValue;\r\n  if (v instanceof Date) return PropertyType.Date;\r\n  switch (typeof v) {\r\n    case \"string\":\r\n      return PropertyType.String;\r\n    case \"boolean\":\r\n      return PropertyType.Boolean;\r\n    case \"number\":\r\n      return PropertyType.Number;\r\n    case \"object\":\r\n      return PropertyType.Object;\r\n    default:\r\n      throw new Error(`Property type '${typeof v}' not supported`);\r\n  }\r\n}\r\n","export interface GeneratedEvent<\n  TEventType extends string = string,\n  TPayload = Record<string, unknown>,\n> {\n  eventType: TEventType;\n  payload: TPayload;\n  trackingId?: number;\n  targetId?: unknown;\n}\n\n/** Where an event stands with respect to the server. */\nexport enum EventState {\n  /** Recorded, not yet acknowledged — send it. */\n  NotCommitted = 'NotCommitted',\n  /** Acknowledged by the server. Permanent: undoing it adds a compensating event. */\n  Committed = 'Committed',\n  /** Undone before it was sent. Never send it; redo returns it to `NotCommitted`. */\n  Undone = 'Undone',\n}\n\n/** One entry of `EventTracker.events`: an event produced by one operation. */\nexport interface TrackedEvent<\n  TEventType extends string = string,\n  TPayload = Record<string, unknown>,\n> extends GeneratedEvent<TEventType, TPayload> {\n  /** Unique within the tracker; pass it (or the event) to `onCommit`. */\n  readonly eventId: number;\n  readonly state: EventState;\n  /** Set on compensating events: the `eventId` of the committed event this one reverts. */\n  readonly compensates?: number;\n}\n\nexport interface EventLifecycleOptions<TEventType extends string = string> {\n  itemAdded?: TEventType;\n  itemRemoved?: TEventType;\n}\n","import { TrackedObject } from \"./TrackedObject\";\r\nimport type { Tracker } from \"./Tracker\";\r\nimport { Change } from \"./Change\";\r\nimport { OperationProperties } from \"./OperationProperties\";\r\nimport { PropertyType } from \"./PropertyType\";\r\n\r\nconst EVENT_METADATA = Symbol(\"eventMetadata\");\r\n\r\nexport interface HistoryOptions<TSelf = any, TValue = any> {\r\n  entryFactory: (\r\n    self: TSelf,\r\n    newValue: TValue,\r\n    oldValue: TValue,\r\n    change: Change,\r\n    ctx?: unknown,\r\n  ) => unknown;\r\n}\r\n\r\nexport type HistoryConfig = boolean | HistoryOptions;\r\n\r\nexport interface EventPropertyOptions {\r\n  eventType?: string;\r\n  history?: HistoryConfig;\r\n  coalesceWithin?: number;\r\n}\r\n\r\ntype EventMetadataMap = Map<string, EventPropertyOptions>;\r\n\r\ninterface EventFieldEntry {\r\n  originalValue: unknown;\r\n  currentValue: unknown;\r\n}\r\n\r\nconst instanceState = new WeakMap<TrackedObject, Map<string, EventFieldEntry>>();\r\nconst instanceHistory = new WeakMap<TrackedObject, Map<string, unknown[]>>();\r\nconst instanceHistoryTimes = new WeakMap<TrackedObject, Map<string, number>>();\r\nconst subscribedInstances = new WeakSet<TrackedObject>();\r\nconst itemOriginCollection = new WeakMap<TrackedObject, object>();\r\n\r\n// ------------------------------------------------------------------ replay effects\r\n\r\n/**\r\n * History entries and collection ops are pending-entry lists, not diffs, so an\r\n * undo/redo cannot be derived by comparing values. Each write therefore chains\r\n * an effect onto its own action in the operation: undoing/redoing exactly that\r\n * operation appends the entry that reverts (or re-applies) the write. Whether\r\n * the resulting event is withdrawn or kept as a compensation is decided by the\r\n * EventTracker, which settles these lists after every operation.\r\n */\r\nexport function recordReplayEffect(\r\n  tracker: Tracker,\r\n  properties: OperationProperties,\r\n  append: (direction: \"undo\" | \"redo\") => void,\r\n): void {\r\n  tracker._recordSideEffect(() => append(\"redo\"), () => append(\"undo\"), properties);\r\n}\r\n\r\n// Symbol used to sentinel the \"default\" (ungrouped) bucket in event emission.\r\nexport const DEFAULT_GROUP = \"\";\r\n\r\nfunction hasOwnEventMetadata(proto: object): boolean {\r\n  return Object.prototype.hasOwnProperty.call(proto, EVENT_METADATA);\r\n}\r\n\r\nfunction ownEventMetadata(proto: object): EventMetadataMap | undefined {\r\n  return hasOwnEventMetadata(proto)\r\n    ? ((proto as unknown as Record<symbol, EventMetadataMap>)[EVENT_METADATA])\r\n    : undefined;\r\n}\r\n\r\nexport function registerEventProperty(\r\n  proto: object,\r\n  property: string,\r\n  options: EventPropertyOptions,\r\n): void {\r\n  if (!hasOwnEventMetadata(proto)) {\r\n    Object.defineProperty(proto, EVENT_METADATA, {\r\n      value: new Map<string, EventPropertyOptions>(),\r\n      configurable: true,\r\n    });\r\n  }\r\n  const map = (proto as unknown as Record<symbol, EventMetadataMap>)[EVENT_METADATA];\r\n  if (!map.has(property)) {\r\n    map.set(property, options);\r\n  }\r\n}\r\n\r\nexport function getEventMetadata(proto: object): EventMetadataMap {\r\n  const chain: object[] = [];\r\n  let current: object | null = proto;\r\n  while (current) {\r\n    chain.push(current);\r\n    current = Object.getPrototypeOf(current);\r\n  }\r\n  const merged: EventMetadataMap = new Map();\r\n  for (let i = chain.length - 1; i >= 0; i--) {\r\n    const own = ownEventMetadata(chain[i]);\r\n    if (!own) continue;\r\n    own.forEach((options, property) => {\r\n      if (!merged.has(property)) merged.set(property, options);\r\n    });\r\n  }\r\n  return merged;\r\n}\r\n\r\n// ------------------------------------------------------------------ tracker context stack\r\n\r\nconst contextStacks = new WeakMap<object, unknown[]>();\r\n\r\nexport function pushContext(tracker: object, ctx: unknown): void {\r\n  let stack = contextStacks.get(tracker);\r\n  if (!stack) {\r\n    stack = [];\r\n    contextStacks.set(tracker, stack);\r\n  }\r\n  stack.push(ctx);\r\n}\r\n\r\nexport function popContext(tracker: object): void {\r\n  // Always paired with a preceding pushContext (see EventTracker.withContext).\r\n  contextStacks.get(tracker)!.pop();\r\n}\r\n\r\nexport function peekContext(tracker: object): unknown {\r\n  const stack = contextStacks.get(tracker);\r\n  return stack && stack.length > 0 ? stack[stack.length - 1] : undefined;\r\n}\r\n\r\n// ------------------------------------------------------------------ instance subscription\r\n\r\nexport function ensureEventStateSubscription(target: TrackedObject): void {\r\n  if (subscribedInstances.has(target)) return;\r\n  subscribedInstances.add(target);\r\n  target.changed.subscribe((evt) => {\r\n    const meta = getEventMetadata(Object.getPrototypeOf(target));\r\n    const propMeta = meta.get(evt.property);\r\n    if (!propMeta) return;\r\n\r\n    if (propMeta.history) {\r\n      // Replays are handled by the effect recorded on the operation itself.\r\n      if (target.tracker._isReplaying) return;\r\n      appendHistoryEntry(\r\n        target,\r\n        evt.property,\r\n        evt.newValue,\r\n        evt.oldValue,\r\n        propMeta.history,\r\n        propMeta.coalesceWithin,\r\n      );\r\n    } else {\r\n      updateFinalValue(target, evt.property, evt.newValue, evt.oldValue);\r\n    }\r\n  });\r\n}\r\n\r\nfunction updateFinalValue(\r\n  target: TrackedObject,\r\n  property: string,\r\n  newValue: unknown,\r\n  oldValue: unknown,\r\n): void {\r\n  const state = getOrCreateEventState(target);\r\n  let entry = state.get(property);\r\n  if (!entry) {\r\n    entry = { originalValue: oldValue, currentValue: newValue };\r\n    state.set(property, entry);\r\n  } else {\r\n    entry.currentValue = newValue;\r\n  }\r\n  if (entry.currentValue === entry.originalValue) {\r\n    state.delete(property);\r\n  }\r\n}\r\n\r\nfunction appendHistoryEntry(\r\n  target: TrackedObject,\r\n  property: string,\r\n  newValue: unknown,\r\n  oldValue: unknown,\r\n  historyConfig: HistoryConfig,\r\n  coalesceWithin: number | undefined,\r\n): void {\r\n  const chains = getOrCreateHistoryState(target);\r\n  let chain = chains.get(property);\r\n  if (!chain) {\r\n    chain = [];\r\n    chains.set(property, chain);\r\n  }\r\n\r\n  const times = getOrCreateHistoryTimes(target);\r\n  const now = Date.now();\r\n  const lastTime = times.get(property);\r\n  const shouldReplace =\r\n    coalesceWithin !== undefined &&\r\n    lastTime !== undefined &&\r\n    now - lastTime < coalesceWithin &&\r\n    chain.length > 0;\r\n\r\n  const entry = createHistoryEntry(target, property, newValue, oldValue, historyConfig);\r\n  if (shouldReplace) chain[chain.length - 1] = entry;\r\n  else chain.push(entry);\r\n  times.set(property, now);\r\n\r\n  recordReplayEffect(\r\n    target.tracker,\r\n    new OperationProperties(target, property, PropertyType.Object),\r\n    (direction) => {\r\n      const [value, previous] = direction === \"undo\" ? [oldValue, newValue] : [newValue, oldValue];\r\n      // Looked up on every replay: settling after each operation replaces the chains map.\r\n      const chains = getOrCreateHistoryState(target);\r\n      chains.set(property, [...(chains.get(property) ?? []), createHistoryEntry(target, property, value, previous, historyConfig)]);\r\n      // A replay breaks any coalescing window: the next write starts a new entry.\r\n      instanceHistoryTimes.get(target)?.delete(property);\r\n    },\r\n  );\r\n}\r\n\r\nfunction createHistoryEntry(\r\n  target: TrackedObject,\r\n  property: string,\r\n  newValue: unknown,\r\n  oldValue: unknown,\r\n  historyConfig: HistoryConfig,\r\n): unknown {\r\n  if (typeof historyConfig === \"object\" && historyConfig.entryFactory) {\r\n    const ctx = peekContext(target.tracker);\r\n    const change = { time: new Date() } as unknown as Change;\r\n    return historyConfig.entryFactory(target, newValue, oldValue, change, ctx);\r\n  }\r\n  return { property, value: newValue };\r\n}\r\n\r\nfunction getOrCreateHistoryTimes(target: TrackedObject): Map<string, number> {\r\n  let times = instanceHistoryTimes.get(target);\r\n  if (!times) {\r\n    times = new Map<string, number>();\r\n    instanceHistoryTimes.set(target, times);\r\n  }\r\n  return times;\r\n}\r\n\r\nfunction getOrCreateEventState(target: TrackedObject): Map<string, EventFieldEntry> {\r\n  let state = instanceState.get(target);\r\n  if (!state) {\r\n    state = new Map<string, EventFieldEntry>();\r\n    instanceState.set(target, state);\r\n  }\r\n  return state;\r\n}\r\n\r\nfunction getOrCreateHistoryState(target: TrackedObject): Map<string, unknown[]> {\r\n  let state = instanceHistory.get(target);\r\n  if (!state) {\r\n    state = new Map<string, unknown[]>();\r\n    instanceHistory.set(target, state);\r\n  }\r\n  return state;\r\n}\r\n\r\nexport function getEventState(target: TrackedObject): Map<string, EventFieldEntry> {\r\n  return instanceState.get(target) ?? new Map<string, EventFieldEntry>();\r\n}\r\n\r\nexport function getHistoryState(target: TrackedObject): Map<string, unknown[]> {\r\n  return instanceHistory.get(target) ?? new Map<string, unknown[]>();\r\n}\r\n\r\nexport function clearEventState(target: TrackedObject): void {\r\n  instanceState.delete(target);\r\n  instanceHistory.delete(target);\r\n  instanceHistoryTimes.delete(target);\r\n}\r\n\r\n/**\r\n * Moves the persisted baseline of a non-history field to `persistedValue`.\r\n * The field stays pending only if its current value differs from it — which is\r\n * how writes landing while the save was in flight survive the ack.\r\n */\r\nexport function ackFieldValue(target: TrackedObject, property: string, persistedValue: unknown): void {\r\n  const state = getOrCreateEventState(target);\r\n  const current = (target as unknown as Record<string, unknown>)[property];\r\n  if (current === persistedValue) {\r\n    state.delete(property);\r\n    return;\r\n  }\r\n  const entry = state.get(property);\r\n  if (entry) {\r\n    entry.originalValue = persistedValue;\r\n  } else {\r\n    state.set(property, { originalValue: persistedValue, currentValue: current });\r\n  }\r\n}\r\n\r\n/**\r\n * Forgets what an operation changed once its events are recorded: field diffs\r\n * and history chains start empty for the next operation. Coalescing timestamps\r\n * are kept so a following write can still merge into the same operation.\r\n */\r\nexport function settleEventState(target: TrackedObject): void {\r\n  instanceState.delete(target);\r\n  instanceHistory.delete(target);\r\n}\r\n\r\n/** Puts recorded history entries back at the front of the chain (coalescing reopens them). */\r\nexport function restoreHistoryEntries(target: TrackedObject, property: string, entries: readonly unknown[]): void {\r\n  const chains = getOrCreateHistoryState(target);\r\n  chains.set(property, [...entries, ...(chains.get(property) ?? [])]);\r\n}\r\n\r\nexport function recordItemOrigin(item: TrackedObject, collection: object): void {\r\n  itemOriginCollection.set(item, collection);\r\n}\r\n\r\nexport function getItemOrigin(item: TrackedObject): object | undefined {\r\n  return itemOriginCollection.get(item);\r\n}\r\n","import type { EventTracker } from \"./EventTracker\";\r\nimport { TrackedCollection } from \"./TrackedCollection\";\r\nimport { TrackedObject } from \"./TrackedObject\";\r\nimport { EventLifecycleOptions } from \"./GeneratedEvent\";\r\nimport {\r\n  recordItemOrigin,\r\n  peekContext,\r\n  clearEventState,\r\n  recordReplayEffect,\r\n} from \"./EventRegistry\";\r\nimport { OperationProperties } from \"./OperationProperties\";\r\nimport { PropertyType } from \"./PropertyType\";\r\nimport {\r\n  getIdentityProperties,\r\n  getIdentity,\r\n  getAutoIdProperty,\r\n} from \"./ExternallyAssigned\";\r\nimport { getEventMetadata } from \"./EventRegistry\";\r\nimport { Change } from \"./Change\";\r\n\r\nexport type CollectionOpKind = \"add\" | \"remove\" | \"change\";\r\n\r\nexport interface CollectionHistoryOptions<T = any> {\r\n  /**\r\n   * Builds one history entry. `op` says what happened to `self`; compensating\r\n   * entries emitted by undo-after-commit carry the inverse kind.\r\n   */\r\n  entryFactory: (self: T, change: Change, ctx: unknown, op: CollectionOpKind) => unknown;\r\n}\r\n\r\nexport type CollectionHistoryConfig = boolean | CollectionHistoryOptions;\r\n\r\nexport interface EventTrackedCollectionOptions<T = any, TEventType extends string = string>\r\n  extends EventLifecycleOptions<TEventType> {\r\n  eventType?: TEventType;\r\n  history?: CollectionHistoryConfig;\r\n  owner?: { object: TrackedObject; property: string };\r\n}\r\n\r\n/** @internal */\r\nexport interface CollectionOp {\r\n  op: CollectionOpKind;\r\n  item: TrackedObject;\r\n  identity?: unknown;\r\n  diff?: Record<string, unknown>;\r\n  raw?: unknown;\r\n  snapshot?: Record<string, unknown>;\r\n}\r\n\r\nexport class EventTrackedCollection<\r\n  T,\r\n  TEventType extends string = string,\r\n> extends TrackedCollection<T> {\r\n  private readonly _eventOptions: EventTrackedCollectionOptions<T, TEventType> | undefined;\r\n  private readonly _historyOps: CollectionOp[] = [];\r\n  // Items as last persisted (acknowledged). Pending added/removed = diff against it.\r\n  private readonly _baselineItems: Set<T> = new Set();\r\n\r\n  public constructor(\r\n    tracker: EventTracker,\r\n    items?: T[],\r\n    validator?: (value: T[]) => string | undefined,\r\n    options?: EventTrackedCollectionOptions<T, TEventType>,\r\n  ) {\r\n    super(tracker, items, validator);\r\n    this._eventOptions = options;\r\n\r\n    for (const item of this.collection) {\r\n      this._baselineItems.add(item);\r\n      if (item instanceof TrackedObject) {\r\n        recordItemOrigin(item, this);\r\n        this._validateItemHasIdentity(item);\r\n        // Initial items are the persisted baseline — nothing about them is pending.\r\n        if (this._eventOptions) clearEventState(item);\r\n      }\r\n    }\r\n\r\n    this.changed.subscribe((evt) => {\r\n      for (const item of evt.added) {\r\n        if (item instanceof TrackedObject) {\r\n          recordItemOrigin(item, this);\r\n          this._validateItemHasIdentity(item);\r\n        }\r\n      }\r\n      // Replays are handled by the effects recorded on the operation itself.\r\n      if (this.tracker._isReplaying) return;\r\n      if (this.tracker._isTrackingSuppressed) {\r\n        // Silent writes (construct(), withTrackingSuppressed) are not events:\r\n        // like suppressed field writes, they simply become the baseline.\r\n        for (const item of evt.added) this._baselineItems.add(item);\r\n        for (const item of evt.removed) this._baselineItems.delete(item);\r\n        return;\r\n      }\r\n      if (!this._isHistoryMode()) return;\r\n      const properties = new OperationProperties(this, undefined, PropertyType.Collection);\r\n      for (const item of evt.added) {\r\n        if (item instanceof TrackedObject) this._recordOp(\"add\", item, properties);\r\n      }\r\n      for (const item of evt.removed) {\r\n        if (item instanceof TrackedObject) this._recordOp(\"remove\", item, properties);\r\n      }\r\n    });\r\n\r\n    // For history mode, watch item property changes to record change ops.\r\n    if (this._isHistoryMode()) {\r\n      this._attachItemChangeWatchers();\r\n    }\r\n  }\r\n\r\n  /** @internal */\r\n  public get _lifecycleOptions(): EventLifecycleOptions<TEventType> | undefined {\r\n    if (!this._eventOptions) return undefined;\r\n    if (this._isAggregateMode()) return undefined;\r\n    return {\r\n      itemAdded: this._eventOptions.itemAdded,\r\n      itemRemoved: this._eventOptions.itemRemoved,\r\n    };\r\n  }\r\n\r\n  /** @internal */\r\n  public get _aggregateOptions(): EventTrackedCollectionOptions<T, TEventType> | undefined {\r\n    return this._isAggregateMode() ? this._eventOptions : undefined;\r\n  }\r\n\r\n  /** @internal */\r\n  public get _historyOpsList(): CollectionOp[] {\r\n    return this._historyOps;\r\n  }\r\n\r\n  /** @internal Forgets pending ops: current items become the baseline. */\r\n  public _clearHistoryOps(): void {\r\n    this._historyOps.length = 0;\r\n    this._rebaseline();\r\n  }\r\n\r\n  /** @internal Puts recorded ops back (coalescing reopens them) and undoes their effect on the baseline. */\r\n  public _restoreOps(ops: readonly CollectionOp[]): void {\r\n    // Newest first, so an add followed by a remove of the same item nets out.\r\n    for (const op of [...ops].reverse()) {\r\n      if (op.op === \"add\") this._baselineItems.delete(op.item as unknown as T);\r\n      else if (op.op === \"remove\") this._baselineItems.add(op.item as unknown as T);\r\n    }\r\n    this._historyOps.unshift(...ops);\r\n  }\r\n\r\n  /** @internal Sets whether `item` counts as already recorded in this collection. */\r\n  public _setInBaseline(item: T, present: boolean): void {\r\n    if (present) this._baselineItems.add(item);\r\n    else this._baselineItems.delete(item);\r\n  }\r\n\r\n  /** @internal */\r\n  public _isInBaseline(item: T): boolean {\r\n    return this._baselineItems.has(item);\r\n  }\r\n\r\n  /** @internal */\r\n  public _baselineListSnapshot(): T[] {\r\n    return [...this._baselineItems];\r\n  }\r\n\r\n  /** @internal */\r\n  public _rebaseline(): void {\r\n    this._baselineItems.clear();\r\n    for (const item of this.collection) this._baselineItems.add(item);\r\n  }\r\n\r\n  private _isAggregateMode(): boolean {\r\n    if (!this._eventOptions) return false;\r\n    return (\r\n      this._eventOptions.eventType !== undefined ||\r\n      this._eventOptions.history !== undefined\r\n    );\r\n  }\r\n\r\n  private _isHistoryMode(): boolean {\r\n    return !!this._eventOptions?.history;\r\n  }\r\n\r\n  private _validateItemHasIdentity(item: TrackedObject): void {\r\n    const props = getIdentityProperties(Object.getPrototypeOf(item));\r\n    if (props.length === 0) {\r\n      throw new Error(\r\n        `EventTrackedCollection item type ${item.constructor.name} must declare at least one @Id or @AutoId property when used with eventType or history mode`,\r\n      );\r\n    }\r\n  }\r\n\r\n  private _attachItemChangeWatchers(): void {\r\n    const watchItem = (item: TrackedObject) => {\r\n      item.changed.subscribe((evt) => {\r\n        if (this.tracker._isReplaying) return;\r\n        if (!this.collection.includes(item as unknown as T)) return;\r\n        this._recordOp(\"change\", item, new OperationProperties(item, evt.property, PropertyType.Object));\r\n      });\r\n    };\r\n    for (const item of this.collection) {\r\n      if (item instanceof TrackedObject) watchItem(item);\r\n    }\r\n    this.changed.subscribe((evt) => {\r\n      for (const item of evt.added) {\r\n        if (item instanceof TrackedObject) watchItem(item);\r\n      }\r\n    });\r\n  }\r\n\r\n  // Undo/redo of the operation appends the op that reverts (or re-applies) this one.\r\n  private _recordOp(kind: CollectionOpKind, item: TrackedObject, properties: OperationProperties): void {\r\n    this._historyOps.push(this._buildOp(kind, item));\r\n    recordReplayEffect(this.tracker, properties, (direction) => {\r\n      this._historyOps.push(this._buildOp(direction === \"undo\" ? invertOpKind(kind) : kind, item));\r\n    });\r\n  }\r\n\r\n  private _buildOp(kind: CollectionOpKind, item: TrackedObject): CollectionOp {\r\n    const opts = this._eventOptions;\r\n    if (typeof opts?.history === \"object\" && opts.history.entryFactory) {\r\n      const ctx = peekContext(this.tracker);\r\n      const change = { time: new Date() } as unknown as Change;\r\n      return { op: kind, item, raw: opts.history.entryFactory(item as any, change, ctx, kind) };\r\n    }\r\n    if (kind === \"add\") return { op: kind, item, snapshot: snapshotItemAtRecordTime(item) };\r\n    if (kind === \"remove\") return { op: kind, item, identity: getIdentity(item) };\r\n    return { op: kind, item, identity: getIdentity(item), diff: this._recordChangeOpDiff(item) };\r\n  }\r\n\r\n  private _recordChangeOpDiff(item: TrackedObject): Record<string, unknown> {\r\n    const proto = Object.getPrototypeOf(item);\r\n    const meta = getEventMetadata(proto);\r\n    const rec = item as unknown as Record<string, unknown>;\r\n    const diff: Record<string, unknown> = {};\r\n    for (const [propName] of meta) {\r\n      const v = rec[propName];\r\n      diff[propName] = v === undefined ? null : v;\r\n    }\r\n    return diff;\r\n  }\r\n}\r\n\r\nfunction invertOpKind(kind: CollectionOpKind): CollectionOpKind {\r\n  if (kind === \"add\") return \"remove\";\r\n  if (kind === \"remove\") return \"add\";\r\n  return \"change\";\r\n}\r\n\r\nfunction snapshotItemAtRecordTime(item: TrackedObject): Record<string, unknown> {\r\n  const proto = Object.getPrototypeOf(item);\r\n  const meta = getEventMetadata(proto);\r\n  const idProps = getIdentityProperties(proto);\r\n  const autoIdProp = getAutoIdProperty(proto);\r\n  const rec = item as unknown as Record<string, unknown>;\r\n  const snap: Record<string, unknown> = {};\r\n  for (const idProp of idProps) {\r\n    if (idProp === autoIdProp) snap[idProp] = null;\r\n    else snap[idProp] = rec[idProp];\r\n  }\r\n  for (const [propName] of meta) {\r\n    const v = rec[propName];\r\n    snap[propName] = v === undefined ? null : v;\r\n  }\r\n  return snap;\r\n}\r\n","import { Tracker } from \"./Tracker\";\r\nimport { TrackedObject } from \"./TrackedObject\";\r\nimport { TrackedObjectBase } from \"./TrackedObjectBase\";\r\nimport { Operation } from \"./Operation\";\r\nimport { TypedEvent } from \"./TypedEvent\";\r\nimport {\r\n  IdAssignment,\r\n  getAutoIdProperty,\r\n  getIdProperty,\r\n  getIdentity,\r\n  getIdentityObject,\r\n  getIdentityProperties,\r\n} from \"./ExternallyAssigned\";\r\nimport { EventState, GeneratedEvent, TrackedEvent } from \"./GeneratedEvent\";\r\nimport {\r\n  CollectionOp,\r\n  EventTrackedCollection,\r\n  EventTrackedCollectionOptions,\r\n} from \"./EventTrackedCollection\";\r\nimport {\r\n  getEventMetadata,\r\n  getEventState,\r\n  getHistoryState,\r\n  getItemOrigin,\r\n  pushContext,\r\n  popContext,\r\n  ackFieldValue,\r\n  settleEventState,\r\n  restoreHistoryEntries,\r\n  DEFAULT_GROUP,\r\n  EventPropertyOptions,\r\n} from \"./EventRegistry\";\r\n\r\ntype AnyCollection = EventTrackedCollection<unknown>;\r\n\r\n/** What an event was derived from — enough to reopen it when a later write coalesces into it. */\r\ninterface Coverage {\r\n  fields: Array<[TrackedObject, string, unknown]>;\r\n  history: Array<[TrackedObject, string, unknown[]]>;\r\n  members: Array<[AnyCollection, unknown]>;\r\n  ops: Array<[AnyCollection, CollectionOp[]]>;\r\n}\r\n\r\ninterface PendingEvent<TEventType extends string> {\r\n  event: GeneratedEvent<TEventType>;\r\n  coverage: Coverage;\r\n  /** Identifies \"the same event\" across an operation's undo/redo: object (or collection) + event type. */\r\n  key: string;\r\n}\r\n\r\nfunction newCoverage(): Coverage {\r\n  return { fields: [], history: [], members: [], ops: [] };\r\n}\r\n\r\nfunction mergeCoverage(into: Coverage, from: Coverage): void {\r\n  into.fields.push(...from.fields);\r\n  into.history.push(...from.history);\r\n  into.members.push(...from.members);\r\n  into.ops.push(...from.ops);\r\n}\r\n\r\ntype MutableEvent = { -readonly [K in keyof TrackedEvent]: TrackedEvent[K] };\r\n\r\ninterface Recorded {\r\n  event: MutableEvent;\r\n  /** Restores the state the event was derived from, as it was before the event was recorded. */\r\n  reopen: () => void;\r\n}\r\n\r\n/**\r\n * What one operation's events look like for one key (object + event type):\r\n * the events that currently stand for it, and the set before its last\r\n * undo/redo — so the next undo/redo can simply reverse that move.\r\n */\r\ninterface KeyState {\r\n  current: Set<Recorded>;\r\n  previous: Set<Recorded>;\r\n  /** False when `previous` is not a real earlier state (steps merged by a session). */\r\n  reversible: boolean;\r\n}\r\n\r\ntype OpRecord = Map<string, KeyState>;\r\n\r\nconst collectionKeys = new WeakMap<object, number>();\r\nlet nextCollectionKey = 1;\r\nfunction collectionKey(col: object): number {\r\n  let key = collectionKeys.get(col);\r\n  if (key === undefined) {\r\n    key = nextCollectionKey++;\r\n    collectionKeys.set(col, key);\r\n  }\r\n  return key;\r\n}\r\n\r\n/** A new key starts from \"no events\", so its first undo can simply reverse the operation. */\r\nfunction keyState(record: OpRecord, key: string): KeyState {\r\n  let state = record.get(key);\r\n  if (!state) {\r\n    state = { current: new Set(), previous: new Set(), reversible: true };\r\n    record.set(key, state);\r\n  }\r\n  return state;\r\n}\r\n\r\n/** Every recorded event of an operation, whether it currently stands for it or not. */\r\nfunction recordsOf(record: OpRecord): Set<Recorded> {\r\n  const recs = new Set<Recorded>();\r\n  for (const { current, previous } of record.values()) {\r\n    for (const r of [...current, ...previous]) recs.add(r);\r\n  }\r\n  return recs;\r\n}\r\n\r\n/** The states of the events an operation currently stands for. */\r\nfunction currentStates(record: OpRecord): EventState[] {\r\n  return [...record.values()].flatMap(({ current }) => [...current].map((r) => r.event.state));\r\n}\r\n\r\nfunction difference<T>(a: Set<T>, b: Set<T>): T[] {\r\n  return [...a].filter((x) => !b.has(x));\r\n}\r\n\r\n/**\r\n * Event-stream tracker for autosave workflows over an event-sourced backend.\r\n *\r\n * Every operation records the events it produced in {@link events}, each with\r\n * an `eventId` and a {@link EventState}. Send the `NotCommitted` ones and\r\n * acknowledge them with `onCommit`. Undoing an unsent event marks it `Undone`\r\n * (redo brings it back); undoing a committed event keeps it `Committed` and\r\n * appends a compensating event.\r\n */\r\nexport class EventTracker extends Tracker {\r\n  declare public readonly trackedObjects: TrackedObject[];\r\n\r\n  /** @internal */\r\n  public _assertAccepts(obj: TrackedObjectBase): void {\r\n    if (!(obj instanceof TrackedObject)) {\r\n      throw new TypeError(\r\n        `${obj.constructor.name} cannot be tracked by an EventTracker: its models extend ` +\r\n        \"TrackedObject (or TrackedContainer). DirtyTrackedObject models belong to a DirtyTracker.\",\r\n      );\r\n    }\r\n  }\r\n\r\n  public override getByTrackingId(trackingId: number): TrackedObject | undefined {\r\n    return super.getByTrackingId(trackingId) as TrackedObject | undefined;\r\n  }\r\n\r\n  private readonly _log: MutableEvent[] = [];\r\n  private readonly _byId = new Map<number, MutableEvent>();\r\n  private readonly _ops = new Map<Operation, OpRecord>();\r\n  private _reopened: Map<string, Recorded[]> = new Map();\r\n  // Creation events from tracker.new(), superseded if the object is then added to a collection.\r\n  private readonly _creations = new Map<object, Recorded>();\r\n  private _nextEventId = 1;\r\n  private _logChanged = false;\r\n\r\n  /** Fires with {@link events} whenever an event is added, removed, or changes state. */\r\n  public readonly eventsChanged: TypedEvent<readonly TrackedEvent[]> = new TypedEvent<readonly TrackedEvent[]>();\r\n\r\n  /** Every recorded event, oldest first, in all states. */\r\n  public get events(): readonly TrackedEvent[] {\r\n    return this._log;\r\n  }\r\n\r\n  /** The events still to be sent: `NotCommitted`, oldest first. */\r\n  public get pendingEvents(): TrackedEvent[] {\r\n    return this._log.filter((e) => e.state === EventState.NotCommitted);\r\n  }\r\n\r\n  public withContext<T>(ctx: unknown, action: () => T): T {\r\n    pushContext(this, ctx);\r\n    try {\r\n      return action();\r\n    } finally {\r\n      popContext(this);\r\n    }\r\n  }\r\n\r\n  protected _computeIsDirty(): boolean {\r\n    return this._log.some((e) => e.state === EventState.NotCommitted);\r\n  }\r\n\r\n  /**\r\n   * Marks events as persisted by the server: only the events whose `eventId`\r\n   * is listed become `Committed`. Events recorded meanwhile stay `NotCommitted`.\r\n   *\r\n   * @param eventIds `eventId`s of the events the server persisted.\r\n   * @param keys server-assigned `@AutoId` values, keyed by `trackingId`.\r\n   */\r\n  public onCommit<V = number>(eventIds: readonly number[], keys?: IdAssignment<V>[]): void {\r\n    if (!Array.isArray(eventIds) || eventIds.some((id) => typeof id !== \"number\")) throw commitTypeError();\r\n    for (const eventId of eventIds) {\r\n      const event = this._byId.get(eventId);\r\n      if (!event) {\r\n        if (process.env.NODE_ENV !== \"production\") {\r\n          console.warn(`EventTracker.onCommit: no event with eventId ${eventId}; ignored.`);\r\n        }\r\n        continue;\r\n      }\r\n      if (event.state === EventState.NotCommitted) this._setState(event, EventState.Committed);\r\n    }\r\n    if (keys) this.assignKeys(keys);\r\n    this.reset();\r\n    this._notify();\r\n  }\r\n\r\n  private assignKeys<V>(keys: IdAssignment<V>[]): void {\r\n    this.withTrackingSuppressed(() => {\r\n      for (const key of keys) {\r\n        const obj = this.getByTrackingId(key.trackingId);\r\n        if (!obj) continue;\r\n        const autoIdProp = getAutoIdProperty(Object.getPrototypeOf(obj));\r\n        if (autoIdProp) (obj as unknown as Record<string, unknown>)[autoIdProp] = key.value;\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Reverts what has not been sent, as far as it can be reverted cleanly:\r\n   * pending compensations are withdrawn (by redoing), operations whose events\r\n   * are all unsent are undone, and the redo stack is dropped. It never forgets\r\n   * an unsent event whose change is still in the objects — e.g. from an\r\n   * operation that is partly committed, or from `tracker.new()` — so those\r\n   * stay pending.\r\n   */\r\n  public override discardPendingChanges(): void {\r\n    const top = (stack: Operation[]) => this._ops.get(stack[stack.length - 1])!;\r\n    while (this.canRedo && currentStates(top(this._redoOperations)).includes(EventState.NotCommitted)) {\r\n      this.redo();\r\n    }\r\n    while (this.canUndo && currentStates(top(this._undoOperations)).every((st) => st === EventState.NotCommitted)) {\r\n      this.undo();\r\n    }\r\n    this._onOperationsDropped(this._redoOperations.splice(0));\r\n    this.reset();\r\n  }\r\n\r\n  // ---- Operation lifecycle -------------------------------------------------\r\n\r\n  protected override _onOperationStart(op: Operation, extended: boolean): void {\r\n    if (!extended || this._isConstructing) return;\r\n    // The write coalesces into `op`: reopen its unsent events so they absorb it.\r\n    for (const [key, state] of this._ops.get(op)!) {\r\n      const unsent = [...state.current].filter((r) => r.event.state === EventState.NotCommitted);\r\n      if (unsent.length === 0) continue;\r\n      for (const r of unsent) r.reopen();\r\n      this._reopened.set(key, unsent);\r\n    }\r\n  }\r\n\r\n  protected override _onOperationEnd(op: Operation): void {\r\n    if (this._isConstructing) return;\r\n    const record = recordFor(this._ops, op);\r\n    const reopened = this._reopened;\r\n    this._reopened = new Map();\r\n    const reopens: Array<[Recorded, () => void]> = [];\r\n    const pending = this.collectPending<string>();\r\n    for (const p of pending) {\r\n      const [again] = reopened.get(p.key) ?? [];\r\n      if (again) {\r\n        reopened.get(p.key)!.shift();\r\n        again.event.payload = p.event.payload;\r\n        again.event.targetId = p.event.targetId;\r\n        reopens.push([again, captureReopen(p.coverage)]);\r\n        this._logChanged = true;\r\n      } else {\r\n        keyState(record, p.key).current.add(this._append(p));\r\n      }\r\n    }\r\n    for (const [rec, reopen] of reopens) rec.reopen = reopen;\r\n    this._dropSupersededCreations(pending);\r\n    // Reopened events the coalesced write cancelled out entirely.\r\n    for (const [key, recs] of reopened) {\r\n      for (const rec of recs) {\r\n        this._remove(rec.event);\r\n        record.get(key)!.current.delete(rec);\r\n      }\r\n    }\r\n    this._settle();\r\n    this._notify();\r\n  }\r\n\r\n  protected override _onReplayed(op: Operation): void {\r\n    const record = this._ops.get(op)!;\r\n    for (const p of this.collectPending<string>()) {\r\n      const state = keyState(record, p.key);\r\n      const retract = difference(state.current, state.previous);\r\n      if (state.reversible && retract.every((r) => r.event.state === EventState.NotCommitted)) {\r\n        // Nothing of the last move was sent: simply reverse it.\r\n        for (const r of retract) this._setState(r.event, EventState.Undone);\r\n        for (const r of difference(state.previous, state.current)) this._setState(r.event, EventState.NotCommitted);\r\n        [state.current, state.previous] = [state.previous, state.current];\r\n        continue;\r\n      }\r\n      // Withdraw what was not sent; compensate what was committed.\r\n      const next = new Set<Recorded>();\r\n      let lastCommitted: number | undefined;\r\n      for (const r of state.current) {\r\n        if (r.event.state === EventState.Committed) {\r\n          next.add(r);\r\n          lastCommitted = Math.max(lastCommitted ?? 0, r.event.eventId);\r\n        } else {\r\n          this._setState(r.event, EventState.Undone);\r\n        }\r\n      }\r\n      if (lastCommitted !== undefined) next.add(this._append(p, lastCommitted));\r\n      state.previous = state.current;\r\n      state.current = next;\r\n      state.reversible = true;\r\n    }\r\n    this._settle();\r\n    this._notify();\r\n  }\r\n\r\n  protected override _onOperationsDropped(ops: readonly Operation[]): void {\r\n    if (this._isConstructing) return;\r\n    for (const op of ops) {\r\n      for (const rec of recordsOf(this._ops.get(op)!)) {\r\n        if (rec.event.state === EventState.Undone) this._remove(rec.event);\r\n      }\r\n      this._ops.delete(op);\r\n    }\r\n    this._notify();\r\n  }\r\n\r\n  protected override _onNewCompleted(): void {\r\n    for (const p of this.collectPending<string>()) {\r\n      const rec = this._append(p);\r\n      if (p.event.trackingId !== undefined) this._creations.set(this.getByTrackingId(p.event.trackingId)!, rec);\r\n    }\r\n    this._settle();\r\n    this._notify();\r\n  }\r\n\r\n  /**\r\n   * An unsent creation event is redundant once the object is reported as added\r\n   * to a collection: the addition carries the object's full snapshot.\r\n   */\r\n  private _dropSupersededCreations(pending: PendingEvent<string>[]): void {\r\n    for (const [obj, rec] of this._creations) {\r\n      if (rec.event.state !== EventState.NotCommitted) {\r\n        this._creations.delete(obj);\r\n      } else if (pending.some((p) => p.coverage.members.some(([col, item]) => item === obj && col.collection.includes(obj)))) {\r\n        this._remove(rec.event);\r\n        this._creations.delete(obj);\r\n      }\r\n    }\r\n  }\r\n\r\n  protected override _onSessionEnded(composed: readonly Operation[], result: Operation): void {\r\n    if (composed.length === 1) return; // the operation is its own undo step: nothing to merge\r\n    const records = composed.map((op) => this._ops.get(op)!);\r\n    for (const op of composed) this._ops.delete(op);\r\n    const recs = records.flatMap((r) => [...recordsOf(r)]);\r\n    const mergeable = recs.every((r) => r.event.state === EventState.NotCommitted);\r\n\r\n    if (!mergeable) {\r\n      // Something was already sent or undone: keep each event as recorded.\r\n      const merged: OpRecord = new Map();\r\n      for (const r of records) {\r\n        for (const [key, { current }] of r) for (const rec of current) keyState(merged, key).current.add(rec);\r\n      }\r\n      // Merged moves cannot be replayed as one: the next undo/redo re-derives from the current events.\r\n      for (const state of merged.values()) state.reversible = false;\r\n      this._ops.set(result, merged);\r\n      return;\r\n    }\r\n    // Nothing sent yet: the single undo step becomes one set of events.\r\n    for (const rec of [...recs].reverse()) {\r\n      rec.reopen();\r\n      this._remove(rec.event);\r\n    }\r\n    const record = recordFor(this._ops, result);\r\n    for (const p of this.collectPending<string>()) keyState(record, p.key).current.add(this._append(p));\r\n    this._settle();\r\n    this._notify();\r\n  }\r\n\r\n  protected override _onSessionRolledBack(reverted: readonly Operation[]): void {\r\n    const committed = new Map<string, number>();\r\n    for (const op of reverted) {\r\n      for (const [key, state] of this._ops.get(op)!) {\r\n        for (const rec of state.current) {\r\n          if (rec.event.state === EventState.Committed) {\r\n            committed.set(key, Math.max(committed.get(key) ?? 0, rec.event.eventId));\r\n          }\r\n        }\r\n      }\r\n      for (const rec of recordsOf(this._ops.get(op)!)) {\r\n        if (rec.event.state !== EventState.Committed) this._remove(rec.event);\r\n      }\r\n      this._ops.delete(op);\r\n    }\r\n    for (const p of this.collectPending<string>()) {\r\n      const compensates = committed.get(p.key);\r\n      if (compensates !== undefined) this._append(p, compensates);\r\n    }\r\n    this._settle();\r\n    this._notify();\r\n  }\r\n\r\n  // ---- Event log -----------------------------------------------------------\r\n\r\n  private _append(p: PendingEvent<string>, compensates?: number): Recorded {\r\n    const event: MutableEvent = { eventId: this._nextEventId++, ...p.event, state: EventState.NotCommitted };\r\n    if (compensates !== undefined) event.compensates = compensates;\r\n    this._log.push(event);\r\n    this._byId.set(event.eventId, event);\r\n    this._logChanged = true;\r\n    return { event, reopen: captureReopen(p.coverage) };\r\n  }\r\n\r\n  private _remove(event: TrackedEvent): void {\r\n    this._log.splice(this._log.indexOf(event as MutableEvent), 1);\r\n    this._byId.delete(event.eventId);\r\n    this._logChanged = true;\r\n  }\r\n\r\n  private _setState(event: MutableEvent, state: EventState): void {\r\n    event.state = state;\r\n    this._logChanged = true;\r\n  }\r\n\r\n  private _notify(): void {\r\n    if (!this._logChanged) return;\r\n    this._logChanged = false;\r\n    this.eventsChanged.emit(this._log);\r\n  }\r\n\r\n  /** Once an operation's events are recorded, the next operation starts from a clean diff. */\r\n  private _settle(): void {\r\n    for (const obj of this.trackedObjects) settleEventState(obj);\r\n    for (const col of this.trackedCollections) {\r\n      if (col instanceof EventTrackedCollection) (col as AnyCollection)._clearHistoryOps();\r\n    }\r\n  }\r\n\r\n  // ---- Deriving the events of one operation --------------------------------\r\n\r\n  private collectPending<TEventType extends string>(): PendingEvent<TEventType>[] {\r\n    const events: PendingEvent<TEventType>[] = [];\r\n    const membership = new Map<AnyCollection, Set<unknown>>();\r\n    const membersOf = (col: AnyCollection): Set<unknown> => {\r\n      let set = membership.get(col);\r\n      if (!set) {\r\n        set = new Set(col.collection);\r\n        membership.set(col, set);\r\n      }\r\n      return set;\r\n    };\r\n\r\n    // Per-item events for collections in itemAdded/itemRemoved mode.\r\n    for (const obj of this.trackedObjects) {\r\n      const origin = getItemOrigin(obj) as AnyCollection | undefined;\r\n      if (!origin) continue;\r\n      const legacy = origin._lifecycleOptions;\r\n      if (!legacy) continue;\r\n\r\n      const meta = getEventMetadata(Object.getPrototypeOf(obj));\r\n      const inCollection = membersOf(origin).has(obj);\r\n      const inBaseline = origin._isInBaseline(obj);\r\n      const lifecycleKey = `lifecycle:${obj.trakrId}`;\r\n      if (inCollection && !inBaseline) {\r\n        if (legacy.itemAdded) {\r\n          const coverage = coverWholeItem(obj, meta);\r\n          coverage.members.push([origin, obj]);\r\n          events.push({ event: buildItemAddedEvent<TEventType>(obj, meta, legacy.itemAdded), coverage, key: lifecycleKey });\r\n        }\r\n      } else if (!inCollection && inBaseline) {\r\n        if (legacy.itemRemoved) {\r\n          const coverage = newCoverage();\r\n          coverage.members.push([origin, obj]);\r\n          events.push({ event: buildItemRemovedEvent<TEventType>(obj, legacy.itemRemoved), coverage, key: lifecycleKey });\r\n        }\r\n      } else if (inCollection) {\r\n        pushFieldClusterEvents<TEventType>(obj, meta, events);\r\n      }\r\n    }\r\n\r\n    // Aggregate: index owned collections by owner\r\n    const ownedCollections = new Map<TrackedObject, AnyCollection[]>();\r\n    for (const col of this.trackedCollections) {\r\n      if (!(col instanceof EventTrackedCollection)) continue;\r\n      const agg = (col as AnyCollection)._aggregateOptions;\r\n      if (!agg?.owner) continue;\r\n      const owner = agg.owner.object;\r\n      let list = ownedCollections.get(owner);\r\n      if (!list) {\r\n        list = [];\r\n        ownedCollections.set(owner, list);\r\n      }\r\n      list.push(col as AnyCollection);\r\n    }\r\n\r\n    // Top-level events for objects not inside a collection\r\n    for (const obj of this.trackedObjects) {\r\n      const origin = getItemOrigin(obj);\r\n      if (origin) continue;\r\n\r\n      const groups = new Map<string, { payload: Record<string, unknown>; coverage: Coverage }>();\r\n      const groupFor = (group: string) => {\r\n        let g = groups.get(group);\r\n        if (!g) {\r\n          g = { payload: {}, coverage: newCoverage() };\r\n          groups.set(group, g);\r\n        }\r\n        return g;\r\n      };\r\n      const meta = getEventMetadata(Object.getPrototypeOf(obj));\r\n\r\n      const stateMap = getEventState(obj);\r\n      const historyMap = getHistoryState(obj);\r\n      for (const [propName, propMeta] of meta) {\r\n        const group = propMeta.eventType ?? DEFAULT_GROUP;\r\n        if (propMeta.history) {\r\n          const chain = historyMap.get(propName);\r\n          if (chain && chain.length > 0) {\r\n            const g = groupFor(group);\r\n            g.payload[propName] = [...chain];\r\n            g.coverage.history.push([obj, propName, [...chain]]);\r\n          }\r\n        } else {\r\n          const entry = stateMap.get(propName);\r\n          if (entry) {\r\n            const g = groupFor(group);\r\n            g.payload[propName] = normalizeValue(entry.currentValue);\r\n            g.coverage.fields.push([obj, propName, entry.currentValue]);\r\n          }\r\n        }\r\n      }\r\n\r\n      const owned = ownedCollections.get(obj) ?? [];\r\n      for (const col of owned) {\r\n        const slot = computeCollectionSlot(col, membersOf(col));\r\n        if (slot === undefined) continue;\r\n        const agg = col._aggregateOptions!;\r\n        const g = groupFor(agg.eventType ?? DEFAULT_GROUP);\r\n        g.payload[agg.owner!.property] = slot.value;\r\n        mergeCoverage(g.coverage, slot.coverage);\r\n      }\r\n\r\n      if (groups.size === 0) continue;\r\n\r\n      const identity = getIdentity(obj);\r\n      for (const [group, { payload, coverage }] of groups) {\r\n        const event: GeneratedEvent<TEventType> = {\r\n          eventType: group as TEventType,\r\n          payload,\r\n          trackingId: obj.trakrId,\r\n        };\r\n        if (identity !== undefined) {\r\n          event.targetId = identity;\r\n        }\r\n        events.push({ event, coverage, key: `${group}:${obj.trakrId}` });\r\n      }\r\n    }\r\n\r\n    // Standalone aggregate collections (no owner) — emit their own event\r\n    for (const col of this.trackedCollections) {\r\n      if (!(col instanceof EventTrackedCollection)) continue;\r\n      const agg = (col as AnyCollection)._aggregateOptions;\r\n      if (!agg || agg.owner) continue;\r\n      const slot = computeCollectionSlot(col as AnyCollection, membersOf(col as AnyCollection));\r\n      if (slot === undefined) continue;\r\n      const eventType = (agg.eventType ?? DEFAULT_GROUP) as TEventType;\r\n      events.push({\r\n        event: { eventType, payload: slot.value as Record<string, unknown> },\r\n        coverage: slot.coverage,\r\n        key: `${eventType}:collection:${collectionKey(col)}`,\r\n      });\r\n    }\r\n\r\n    return events;\r\n  }\r\n}\r\n\r\nfunction recordFor(ops: Map<Operation, OpRecord>, op: Operation): OpRecord {\r\n  let record = ops.get(op);\r\n  if (!record) {\r\n    record = new Map();\r\n    ops.set(op, record);\r\n  }\r\n  return record;\r\n}\r\n\r\nfunction commitTypeError(): TypeError {\r\n  return new TypeError(\r\n    \"EventTracker.onCommit(eventIds, keys?) expects the eventIds of the events the server \" +\r\n    \"persisted, e.g. onCommit(sent.map((e) => e.eventId)).\",\r\n  );\r\n}\r\n\r\n/**\r\n * Captures, before the operation's changes are settled, how to put them back:\r\n * each field's previous recorded value, the history entries, collection\r\n * membership and ops. Used when a coalesced write reopens the operation.\r\n */\r\nfunction captureReopen(coverage: Coverage): () => void {\r\n  const fields = coverage.fields.map(([obj, prop, value]) => {\r\n    const entry = getEventState(obj).get(prop);\r\n    return [obj, prop, entry ? entry.originalValue : value] as const;\r\n  });\r\n  const members = coverage.members.map(([col, item]) => [col, item, col._isInBaseline(item)] as const);\r\n  return () => {\r\n    for (const [obj, prop, previous] of fields) ackFieldValue(obj, prop, previous);\r\n    for (const [obj, prop, entries] of coverage.history) restoreHistoryEntries(obj, prop, entries);\r\n    for (const [col, item, wasIn] of members) col._setInBaseline(item, wasIn);\r\n    for (const [col, ops] of coverage.ops) col._restoreOps(ops);\r\n  };\r\n}\r\n\r\n/** Coverage of a full-item snapshot: every event property as it is right now. */\r\nfunction coverWholeItem(item: TrackedObject, meta: Map<string, EventPropertyOptions>): Coverage {\r\n  const coverage = newCoverage();\r\n  const rec = item as unknown as Record<string, unknown>;\r\n  const history = getHistoryState(item);\r\n  for (const [propName, propMeta] of meta) {\r\n    if (propMeta.history) {\r\n      const chain = history.get(propName);\r\n      if (chain && chain.length > 0) coverage.history.push([item, propName, [...chain]]);\r\n    } else {\r\n      coverage.fields.push([item, propName, rec[propName]]);\r\n    }\r\n  }\r\n  return coverage;\r\n}\r\n\r\nfunction buildItemAddedEvent<TEventType extends string>(\r\n  obj: TrackedObject,\r\n  meta: Map<string, { eventType?: string }>,\r\n  eventType: string,\r\n): GeneratedEvent<TEventType> {\r\n  const payload: Record<string, unknown> = {};\r\n  for (const [propertyName] of meta) {\r\n    const value = (obj as unknown as Record<string, unknown>)[propertyName];\r\n    payload[propertyName] = normalizeValue(value);\r\n  }\r\n  return {\r\n    eventType: eventType as TEventType,\r\n    payload,\r\n    trackingId: obj.trakrId,\r\n  };\r\n}\r\n\r\nfunction buildItemRemovedEvent<TEventType extends string>(\r\n  obj: TrackedObject,\r\n  eventType: string,\r\n): GeneratedEvent<TEventType> {\r\n  // Items of an EventTrackedCollection always declare an @Id or @AutoId.\r\n  const proto = Object.getPrototypeOf(obj);\r\n  const idProp = (getAutoIdProperty(proto) ?? getIdProperty(proto))!;\r\n  const targetId = (obj as unknown as Record<string, unknown>)[idProp];\r\n  const event: GeneratedEvent<TEventType> = {\r\n    eventType: eventType as TEventType,\r\n    payload: {},\r\n    trackingId: obj.trakrId,\r\n  };\r\n  if (typeof targetId === \"number\") {\r\n    event.targetId = targetId;\r\n  }\r\n  return event;\r\n}\r\n\r\nfunction pushFieldClusterEvents<TEventType extends string>(\r\n  obj: TrackedObject,\r\n  meta: Map<string, { eventType?: string }>,\r\n  events: PendingEvent<TEventType>[],\r\n): void {\r\n  const state = getEventState(obj);\r\n  if (state.size === 0) return;\r\n\r\n  const grouped = new Map<string, string[]>();\r\n  for (const [propertyName, propMeta] of meta) {\r\n    if (!state.has(propertyName)) continue;\r\n    if (!propMeta.eventType) continue;\r\n    let bucket = grouped.get(propMeta.eventType);\r\n    if (!bucket) {\r\n      bucket = [];\r\n      grouped.set(propMeta.eventType, bucket);\r\n    }\r\n    bucket.push(propertyName);\r\n  }\r\n\r\n  const autoIdProp = getAutoIdProperty(Object.getPrototypeOf(obj));\r\n  const targetIdRaw = autoIdProp\r\n    ? (obj as unknown as Record<string, unknown>)[autoIdProp]\r\n    : undefined;\r\n\r\n  for (const [eventType, propertyNames] of grouped) {\r\n    const payload: Record<string, unknown> = {};\r\n    const coverage = newCoverage();\r\n    for (const propertyName of propertyNames) {\r\n      const value = state.get(propertyName)!.currentValue;\r\n      payload[propertyName] = normalizeValue(value);\r\n      coverage.fields.push([obj, propertyName, value]);\r\n    }\r\n    const event: GeneratedEvent<TEventType> = {\r\n      eventType: eventType as TEventType,\r\n      payload,\r\n      trackingId: obj.trakrId,\r\n    };\r\n    if (typeof targetIdRaw === \"number\") {\r\n      event.targetId = targetIdRaw;\r\n    }\r\n    events.push({ event, coverage, key: `${eventType}:${obj.trakrId}` });\r\n  }\r\n}\r\n\r\ninterface Slot {\r\n  value: unknown;\r\n  coverage: Coverage;\r\n}\r\n\r\nfunction computeCollectionSlot(col: AnyCollection, members: Set<unknown>): Slot | undefined {\r\n  const agg = col._aggregateOptions!;\r\n  const isHistory = agg.history !== undefined && agg.history !== false;\r\n  if (isHistory) return computeHistoryOps(col, agg);\r\n  return computeBucketedSlot(col, members);\r\n}\r\n\r\nfunction computeHistoryOps(\r\n  col: AnyCollection,\r\n  agg: EventTrackedCollectionOptions,\r\n): Slot | undefined {\r\n  const opsList = col._historyOpsList;\r\n  const hasFactory =\r\n    typeof agg.history === \"object\" && (agg.history as any).entryFactory;\r\n\r\n  const ops: unknown[] = [];\r\n  for (const op of opsList) {\r\n    if (hasFactory) {\r\n      ops.push(op.raw);\r\n      continue;\r\n    }\r\n    if (op.op === \"add\") {\r\n      ops.push({ op: \"add\", item: op.snapshot });\r\n    } else if (op.op === \"remove\") {\r\n      ops.push({ op: \"remove\", ...removedIdentityObject(op) });\r\n    } else {\r\n      ops.push({ op: \"change\", ...getIdentityObject(op.item), ...op.diff });\r\n    }\r\n  }\r\n\r\n  if (ops.length === 0) return undefined;\r\n  const coverage = newCoverage();\r\n  coverage.ops.push([col, [...opsList]]);\r\n  return { value: { ops }, coverage };\r\n}\r\n\r\n/** A remove op's identity (captured at removal time) as an `{ idProp: value }` object. */\r\nfunction removedIdentityObject(op: CollectionOp): Record<string, unknown> {\r\n  const props = getIdentityProperties(Object.getPrototypeOf(op.item));\r\n  return props.length === 1 ? { [props[0]]: op.identity } : (op.identity as Record<string, unknown>);\r\n}\r\n\r\nfunction computeBucketedSlot(col: AnyCollection, members: Set<unknown>): Slot | undefined {\r\n  const added: unknown[] = [];\r\n  const changed: unknown[] = [];\r\n  const removed: unknown[] = [];\r\n  const coverage = newCoverage();\r\n\r\n  const isPrimitive = !hasTrackedObjectItems(col);\r\n\r\n  for (const item of col.collection) {\r\n    if (!col._isInBaseline(item)) {\r\n      if (item instanceof TrackedObject) {\r\n        added.push(snapshotItemForAdded(item));\r\n        mergeCoverage(coverage, coverWholeItem(item, getEventMetadata(Object.getPrototypeOf(item))));\r\n      } else {\r\n        added.push(item);\r\n      }\r\n      coverage.members.push([col, item]);\r\n    } else if (item instanceof TrackedObject) {\r\n      const entry = buildChangedEntry(item, coverage);\r\n      if (entry) changed.push(entry);\r\n    }\r\n  }\r\n\r\n  for (const baselineItem of col._baselineListSnapshot()) {\r\n    if (members.has(baselineItem)) continue;\r\n    removed.push(baselineItem instanceof TrackedObject ? getIdentity(baselineItem) : baselineItem);\r\n    coverage.members.push([col, baselineItem]);\r\n  }\r\n\r\n  if (added.length === 0 && changed.length === 0 && removed.length === 0) {\r\n    return undefined;\r\n  }\r\n\r\n  const slot: Record<string, unknown> = { added, removed };\r\n  if (!isPrimitive) slot.changed = changed;\r\n  return { value: slot, coverage };\r\n}\r\n\r\nfunction hasTrackedObjectItems(col: AnyCollection): boolean {\r\n  for (const item of col.collection) {\r\n    if (item instanceof TrackedObject) return true;\r\n  }\r\n  for (const item of col._baselineListSnapshot()) {\r\n    if (item instanceof TrackedObject) return true;\r\n  }\r\n  return false;\r\n}\r\n\r\nfunction snapshotItemForAdded(item: TrackedObject): Record<string, unknown> {\r\n  const proto = Object.getPrototypeOf(item);\r\n  const meta = getEventMetadata(proto);\r\n  const idProps = getIdentityProperties(proto);\r\n  const autoIdProp = getAutoIdProperty(proto);\r\n  const snapshot: Record<string, unknown> = {};\r\n\r\n  const rec = item as unknown as Record<string, unknown>;\r\n  for (const idProp of idProps) {\r\n    if (idProp === autoIdProp) {\r\n      snapshot[idProp] = null;\r\n    } else {\r\n      snapshot[idProp] = rec[idProp];\r\n    }\r\n  }\r\n  for (const [propName] of meta) {\r\n    snapshot[propName] = normalizeValue(rec[propName]);\r\n  }\r\n  return snapshot;\r\n}\r\n\r\nfunction buildChangedEntry(item: TrackedObject, coverage: Coverage): Record<string, unknown> | undefined {\r\n  const state = getEventState(item);\r\n  const history = getHistoryState(item);\r\n  if (state.size === 0 && history.size === 0) return undefined;\r\n\r\n  const proto = Object.getPrototypeOf(item);\r\n  const idProps = getIdentityProperties(proto);\r\n  const rec = item as unknown as Record<string, unknown>;\r\n\r\n  const entry: Record<string, unknown> = {};\r\n  for (const idProp of idProps) {\r\n    entry[idProp] = rec[idProp];\r\n  }\r\n  for (const [propName, e] of state) {\r\n    entry[propName] = normalizeValue(e.currentValue);\r\n    coverage.fields.push([item, propName, e.currentValue]);\r\n  }\r\n  for (const [propName, chain] of history) {\r\n    entry[propName] = [...chain];\r\n    coverage.history.push([item, propName, [...chain]]);\r\n  }\r\n  return entry;\r\n}\r\n\r\nfunction normalizeValue(value: unknown): unknown {\r\n  return value === undefined ? null : value;\r\n}\r\n","import { TrackedObject } from \"./TrackedObject\";\nimport { Tracked, ChangeHook, ChangeHooks } from \"./Tracked\";\nimport {\n  registerEventProperty,\n  ensureEventStateSubscription,\n  HistoryConfig,\n} from \"./EventRegistry\";\n\nexport interface EventTrackedOptions {\n  coalesceWithin?: number;\n  eventType?: string;\n  history?: HistoryConfig;\n}\n\nexport function EventTracked(\n  validator?: (self: any, newValue: any) => string | undefined,\n  hooks?: ChangeHooks | ChangeHook,\n  options?: EventTrackedOptions,\n) {\n  const trackedDecorator = Tracked(validator, hooks, {\n    coalesceWithin: options?.coalesceWithin,\n  });\n\n  function decorator<T extends TrackedObject, V>(\n    target: ClassAccessorDecoratorTarget<T, V>,\n    context: ClassAccessorDecoratorContext<T, V>,\n  ): ClassAccessorDecoratorResult<T, V>;\n  function decorator<T extends TrackedObject, V>(\n    target: (this: T, value: V) => void,\n    context: ClassSetterDecoratorContext<T, V>,\n  ): (this: T, value: V) => void;\n  function decorator<T extends TrackedObject, V>(\n    target: (this: T) => V,\n    context: ClassGetterDecoratorContext<T, V>,\n  ): (this: T) => V;\n  function decorator(target: any, context: any): any {\n    const result = (trackedDecorator as any)(target, context);\n    const propertyName = String(context.name);\n\n    context.addInitializer(function (this: TrackedObject) {\n      registerEventProperty(Object.getPrototypeOf(this), propertyName, {\n        eventType: options?.eventType,\n        history: options?.history,\n        coalesceWithin: options?.coalesceWithin,\n      });\n      ensureEventStateSubscription(this);\n    });\n\n    return result;\n  }\n\n  return decorator;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,IAAM,aAAN,MAAoB;AAAA,EAApB;AACL,SAAiB,YAAoC,CAAC;AAAA;AAAA,EAE/C,UAAU,SAAyC;AACxD,SAAK,UAAU,KAAK,OAAO;AAC3B,WAAO,MAAM,KAAK,YAAY,OAAO;AAAA,EACvC;AAAA,EAEO,YAAY,SAAmC;AACpD,UAAM,QAAQ,KAAK,UAAU,QAAQ,OAAO;AAC5C,QAAI,SAAS,GAAG;AACd,WAAK,UAAU,OAAO,OAAO,CAAC;AAAA,IAChC;AAAA,EACF;AAAA,EAEO,KAAK,OAAgB;AAC1B,SAAK,UAAU,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;AAAA,EACxC;AACF;;;AChBO,IAAM,SAAN,MAAa;AAAA,EAGlB,YACkB,QACA,YACA,YACA,YAChB;AAJgB;AACA;AACA;AACA;AANlB,SAAgB,OAAa,oBAAI,KAAK;AAAA,EAOnC;AACL;;;ACRO,IAAM,YAAN,MAAgB;AAAA,EAAhB;AACL,SAAgB,OAAa,oBAAI,KAAK;AACtC,SAAgB,UAAoB,CAAC;AACrC,SAAQ,cAAuB;AAAA;AAAA,EAC/B,IAAW,aAAsB;AAC/B,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAY,WAAW,OAAgB;AACrC,SAAK,cAAc;AAAA,EACrB;AAAA,EAEO,IACL,YACA,YACA,YACM;AACN,UAAM,SAAS,IAAI;AAAA,MACjB,KAAK,QAAQ;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,SAAK,QAAQ,KAAK,MAAM;AACxB,SAAK,aAAa;AAAA,EACpB;AAAA,EAEO,YACL,YACA,YACA,YACM;AACN,UAAM,MAAM,KAAK,QAAQ;AAAA,MACvB,CAAC,MACC,EAAE,WAAW,kBAAkB,WAAW,iBAC1C,EAAE,WAAW,aAAa,WAAW;AAAA,IACzC;AACA,QAAI,OAAO,GAAG;AACZ,WAAK,QAAQ,GAAG,IAAI,IAAI,OAAO,KAAK,QAAQ,GAAG,EAAE,QAAQ,YAAY,YAAY,UAAU;AAAA,IAC7F,OAAO;AACL,WAAK,IAAI,YAAY,YAAY,UAAU;AAAA,IAC7C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,YACL,YACA,YACA,YACM;AACN,UAAM,MAAM,KAAK,QAAQ;AAAA,MACvB,CAAC,MACC,EAAE,WAAW,kBAAkB,WAAW,iBAC1C,EAAE,WAAW,aAAa,WAAW;AAAA,IACzC;AACA,UAAM,SAAS,KAAK,QAAQ,GAAG;AAC/B,SAAK,QAAQ,GAAG,IAAI,IAAI;AAAA,MACtB,OAAO;AAAA,MACP,MAAM;AAAE,eAAO,WAAW;AAAG,mBAAW;AAAA,MAAG;AAAA,MAC3C,MAAM;AAAE,eAAO,WAAW;AAAG,mBAAW;AAAA,MAAG;AAAA,MAC3C,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEO,OAAa;AAClB,SAAK,QAAQ,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;AAAA,EACtD;AAAA,EAEO,OAAa;AAClB,SAAK,QAAQ,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;AAAA,EACtD;AACF;;;AC7EO,IAAM,sBAAN,MAA0B;AAAA,EAC/B,OAAc,QAAW,OAA2B;AAClD,WAAO,MAAM,SAAS,IAAI,MAAM,MAAM,SAAS,CAAC,IAAI;AAAA,EACtD;AACF;;;ACCO,IAAM,yBAAyB;AAQtC,IAAI,YAA2B;AAG/B,IAAM,cAAc,oBAAI,QAAqC;AAG7D,IAAM,cAAc,oBAAI,IAAyC;AAGjE,IAAM,aAAa,oBAAI,QAAwC;AAO/D,SAAS,YAAkB,KAAoB,KAAQ,QAAoB;AACzE,MAAI,QAAQ,IAAI,IAAI,GAAG;AACvB,MAAI,UAAU,QAAW;AACvB,YAAQ,OAAO;AACf,QAAI,IAAI,KAAK,KAAK;AAAA,EACpB;AACA,SAAO;AACT;AAEA,SAAS,aAAa,KAAe,MAAyB;AAC5D,QAAM,SAAS,YAAY,YAAY,KAAK,MAAM,oBAAI,IAAuB,CAAC;AAC9E,SAAO,YAAY,QAAQ,MAAM,OAAO,EAAE,KAAK,KAAK,EAAE;AACxD;AAGA,SAAS,UAAU,QAAgB,SAAiC;AAClE,QAAM,SAAS,YAAY,aAAa,QAAQ,MAAM,oBAAI,IAA4B,CAAC;AACvF,SAAO,YAAY,QAAQ,SAAS,MAAM,oBAAI,IAAe,CAAC;AAChE;AAEA,SAAS,WAAW,MAAc,IAAkD;AAClF,OAAK,QAAQ,CAAC,OAAO,WAAW,MAAM,QAAQ,CAAC,SAAS,GAAG,QAAQ,IAAI,CAAC,CAAC;AAC3E;AAEO,IAAM,oBAAoB;AAAA,EAC/B,OAAO,QAAgB,UAAwB;AAC7C,QAAI,CAAC,UAAW;AAChB,gBAAY,WAAW,QAAQ,MAAM,oBAAI,IAAY,CAAC,EAAE,IAAI,QAAQ;AAAA,EACtE;AAAA,EAEA,QAAQ,IAAwB;AAC9B,gBAAY,oBAAI,IAAyB;AACzC,OAAG;AACH,UAAM,OAAO;AACb,gBAAY;AACZ,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,cAAwB,eAAuB,SAAuB;AAC/E,UAAM,YAAY,aAAa,cAAc,aAAa;AAC1D,UAAM,UAAU,YAAY,aAAa,cAAc,MAAM,oBAAI,IAAoB,CAAC;AACtF,eAAW,QAAQ,IAAI,aAAa,KAAK,oBAAI,IAAI,GAAG,CAAC,QAAQ,SAAS,UAAU,QAAQ,IAAI,EAAE,OAAO,SAAS,CAAC;AAC/G,YAAQ,IAAI,eAAe,OAAO;AAClC,eAAW,SAAS,CAAC,QAAQ,SAAS,UAAU,QAAQ,IAAI,EAAE,IAAI,SAAS,CAAC;AAAA,EAC9E;AAAA,EAEA,cAAc,QAAgB,SAAyD;AACrF,WAAO,CAAC,GAAG,UAAU,QAAQ,OAAO,CAAC;AAAA,EACvC;AAAA,EAEA,UAAU,cAA8B;AACtC,KAAC,YAAY,IAAI,YAAY,KAAK,oBAAI,IAAoB,GAAG,QAAQ,CAAC,MAAM,kBAAkB;AAC5F,YAAM,YAAY,aAAa,cAAc,aAAa;AAC1D,iBAAW,MAAM,CAAC,QAAQ,SAAS,UAAU,QAAQ,IAAI,EAAE,OAAO,SAAS,CAAC;AAAA,IAC9E,CAAC;AACD,gBAAY,OAAO,YAAY;AAAA,EACjC;AACF;;;AClFA,IAAM,aAAa,uBAAO,YAAY;AAEtC,SAAS,iBAAiB,OAAwB;AAChD,SAAO,OAAO,UAAU,eAAe,KAAK,OAAO,UAAU;AAC/D;AAEA,SAAS,cAAc,OAAyC;AAC9D,SAAO,iBAAiB,KAAK,IAAM,MAAc,UAAU,IAAqB;AAClF;AAEA,SAAS,yBAAyB,OAA6B;AAC7D,QAAM,SAAuB,oBAAI,IAAI;AACrC,MAAI,UAAyB;AAC7B,SAAO,SAAS;AACd,UAAM,MAAM,cAAc,OAAO;AACjC,QAAI,KAAK;AACP,UAAI,QAAQ,CAAC,WAAW,aAAa;AACnC,YAAI,CAAC,OAAO,IAAI,QAAQ,EAAG,QAAO,IAAI,UAAU,SAAS;AAAA,MAC3D,CAAC;AAAA,IACH;AACA,cAAU,OAAO,eAAe,OAAO;AAAA,EACzC;AACA,SAAO;AACT;AAEA,SAAS,uBACP,OACA,UACkD;AAClD,MAAI,UAAyB;AAC7B,SAAO,SAAS;AACd,UAAM,MAAM,cAAc,OAAO;AACjC,UAAM,YAAY,KAAK,IAAI,QAAQ;AACnC,QAAI,UAAW,QAAO;AACtB,cAAU,OAAO,eAAe,OAAO;AAAA,EACzC;AACA,SAAO;AACT;AAEO,SAAS,0BACd,OACA,UACA,WACM;AACN,MAAI,CAAC,iBAAiB,KAAK,GAAG;AAC5B,WAAO,eAAe,OAAO,YAAY;AAAA,MACvC,OAAO,oBAAI,IAAgD;AAAA,MAC3D,cAAc;AAAA,IAChB,CAAC;AAAA,EACH;AACA,QAAM,MAAO,MAAc,UAAU;AACrC,MAAI,CAAC,IAAI,IAAI,QAAQ,GAAG;AACtB,QAAI,IAAI,UAAU,SAAS;AAAA,EAC7B;AACF;AAEO,SAAS,SAAS,SAA6B;AACpD,QAAM,QAAQ,OAAO,eAAe,OAAO;AAC3C,QAAM,aAAa,yBAAyB,KAAK;AACjD,MAAI,WAAW,SAAS,EAAG;AAC3B,QAAM,WAAW,oBAAI,IAAoB;AACzC,aAAW,QAAQ,CAAC,aAAa,aAAa;AAC5C,UAAM,OAAO,kBAAkB,QAAQ,MAAM;AAC3C,YAAM,QAAQ,YAAY,OAAO;AACjC,UAAI,UAAU,OAAW,UAAS,IAAI,UAAU,KAAK;AAAA,IACvD,CAAC;AACD,sBAAkB,WAAW,SAAS,UAAU,IAAI;AAAA,EACtD,CAAC;AACD,UAAQ,iBAAiB,QAAQ;AACnC;AAEO,SAAS,uBACd,SACA,UACoB;AACpB,QAAM,QAAQ,OAAO,eAAe,OAAO;AAC3C,QAAM,cAAc,uBAAuB,OAAO,QAAQ;AAC1D,MAAI,CAAC,YAAa,QAAO;AACzB,MAAI;AACJ,QAAM,OAAO,kBAAkB,QAAQ,MAAM;AAC3C,YAAQ,YAAY,OAAO;AAAA,EAC7B,CAAC;AACD,oBAAkB,WAAW,SAAS,UAAU,IAAI;AACpD,SAAO;AACT;;;ACrFO,IAAM,sBAAN,MAA0B;AAAA,EAC/B,YACkB,eACA,UACA,MACA,gBAChB;AAJgB;AACA;AACA;AACA;AAAA,EACf;AACL;;;ACSO,IAAe,oBAAf,MAAqD;AAAA,EA8ChD,YAA4B,SAAkB;AAAlB;AA7CtC,SAAQ,sBAAuD,oBAAI,IAAI;AACvE,SAAQ,WAAoB;AAC5B,SAAQ,oBAA6B;AAIrC,SAAgB,eAAmD,IAAI,WAAmC;AAC1G,SAAgB,cAAkD,IAAI,WAAmC;AACzG,SAAgB,iBAAqD,IAAI,WAAmC;AAsC1G,QAA6C,CAAC,QAAQ,iBAAiB;AACrE,YAAM,IAAI,MAAM,GAAG,KAAK,YAAY,IAAI,6CAA6C;AAAA,IACvF;AACA,YAAQ,eAAe,IAAI;AAC3B,SAAK,UAAU,QAAQ,gBAAgB;AACvC,YAAQ,aAAa,IAAI;AAAA,EAC3B;AAAA;AAAA,EAzCA,IAAW,UAA8C;AACvD,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAW,qBAAsD;AAC/D,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAY,mBAAmB,OAAwC;AACrE,SAAK,sBAAsB;AAAA,EAC7B;AAAA,EAEA,IAAW,eAAwB;AACjC,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAc,aAAa,OAAgB;AACzC,SAAK,YAAY,KAAK;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,sBAA+B;AACjC,WAAO,KAAK;AAAA,EACd;AAAA,EAEU,YAAY,OAAsB;AAC1C,UAAM,WAAW,KAAK;AACtB,SAAK,WAAW;AAChB,QAAI,aAAa,SAAS,CAAC,KAAK,mBAAmB;AACjD,WAAK,QAAQ,mBAAmB,CAAC,KAAK;AAAA,IACxC;AAAA,EACF;AAAA;AAAA;AAAA,EAcA,kBAAwB;AAAA,EAAC;AAAA;AAAA,EAGzB,wBAA8B;AAAA,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO/B,eAAqB;AACnB,QAAI,KAAK,kBAAmB;AAC5B,UAAM,cAAc,CAAC,aAAsB;AACzC,UAAI,CAAC,KAAK,SAAU,MAAK,QAAQ,mBAAmB,CAAC,QAAQ;AAC7D,WAAK,oBAAoB;AAAA,IAC3B;AACA,SAAK,QAAQ;AAAA,MACX,MAAM,YAAY,IAAI;AAAA,MACtB,MAAM,YAAY,KAAK;AAAA,MACvB,IAAI,oBAAoB,MAAM,2BAAgC;AAAA,IAChE;AAAA,EACF;AAAA;AAAA,EAGA,aAAmB;AACjB,QAAI,CAAC,KAAK,kBAAmB;AAC7B,UAAM,cAAc,CAAC,aAAsB;AACzC,WAAK,oBAAoB;AACzB,UAAI,CAAC,KAAK,SAAU,MAAK,QAAQ,mBAAmB,CAAC,QAAQ;AAAA,IAC/D;AACA,SAAK,QAAQ;AAAA,MACX,MAAM,YAAY,KAAK;AAAA,MACvB,MAAM,YAAY,IAAI;AAAA,MACtB,IAAI,oBAAoB,MAAM,2BAAgC;AAAA,IAChE;AAAA,EACF;AAAA;AAAA,EAGA,UAAU,UAAkB,cAAwC;AAClE,QAAI,cAAc;AAChB,WAAK,mBAAmB,IAAI,UAAU,YAAY;AAAA,IACpD,OAAO;AACL,WAAK,mBAAmB,OAAO,QAAQ;AAAA,IACzC;AACA,SAAK,qBAAqB,IAAI,IAAI,KAAK,kBAAkB;AACzD,SAAK,eAAe,KAAK,mBAAmB,SAAS;AAAA,EACvD;AAAA;AAAA,EAGO,iBAAiB,UAAqC;AAC3D,SAAK,qBAAqB;AAC1B,SAAK,eAAe,SAAS,SAAS;AAAA,EACxC;AAAA,EAEO,UAAgB;AACrB,sBAAkB,UAAU,IAAI;AAChC,SAAK,QAAQ,eAAe,IAAI;AAAA,EAClC;AACF;;;ACvHO,IAAM,iBAAN,MAAgD;AAAA,EAIrD,YACE,OACiB,UACA,MACA,WACjB;AAHiB;AACA;AACA;AANnB,SAAQ,WAAoB;AAQ1B,QAAI,SAAS,MAAM,SAAS,GAAG;AAC7B,WAAK,SAAS,IAAI,IAAI,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC;AAAA,IAC1E;AAAA,EACF;AAAA;AAAA,EAGA,SAAS,KAAwB,UAAwB;AACvD,QAAI,KAAK,WAAW,OAAW;AAC/B,UAAM,gBAAgB,KAAK,OAAO,IAAI,GAAG;AACzC,QAAI,kBAAkB,UAAa,CAAC,cAAc,IAAI,QAAQ,EAAG;AACjE,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,IAAI,UAAmB;AACrB,QAAI,KAAK,WAAW,OAAW,QAAO;AACtC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,UAAmB;AACrB,QAAI,KAAK,WAAW,OAAW,QAAO;AACtC,eAAW,CAAC,KAAK,KAAK,KAAK,KAAK,QAAQ;AACtC,iBAAW,QAAQ,OAAO;AACxB,YAAI,IAAI,mBAAmB,IAAI,IAAI,EAAG,QAAO;AAAA,MAC/C;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,YAAqB;AACvB,WAAO,KAAK,WAAW,KAAK;AAAA,EAC9B;AAAA,EAEA,IAAI,UAAmB;AACrB,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA,EAEA,IAAI,UAAmB;AACrB,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA,EAEA,IAAI,iBAAsC;AACxC,QAAI,KAAK,WAAW,OAAW,QAAO,CAAC;AACvC,WAAO,CAAC,GAAG,KAAK,OAAO,KAAK,CAAC;AAAA,EAC/B;AAAA,EAEA,OAAa;AACX,SAAK,SAAS,KAAK;AAAA,EACrB;AAAA,EAEA,OAAa;AACX,SAAK,SAAS,KAAK;AAAA,EACrB;AAAA,EAEA,IAAI,iBAAsC;AACxC,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA,EAEA,IAAI,mBAAwC;AAC1C,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA,EAEA,IAAI,iBAAqC;AACvC,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA,EAEA,MAAY;AACV,SAAK,KAAK;AAAA,EACZ;AAAA,EAEA,WAAiB;AACf,SAAK,UAAU;AAAA,EACjB;AACF;;;AC/EO,IAAe,UAAf,MAAe,SAAmC;AAAA,EA6HhD,cAAc;AArHrB,SAAQ,2BAA2B;AAKnC,SAAQ,qBAAqB;AAC7B,SAAQ,gBAAgB;AACxB,SAAQ,qBAAqB;AAI7B,SAAU,WAAmB;AAC7B,SAAO,eAAwB;AAC/B,SAAQ,wBAA4E,CAAC;AAErF,SAAgB,iBAAsC,CAAC;AAEvD,SAAgB,qBAA+C,CAAC;AAahE,SAAgB,iBAAsC,IAAI,WAAoB;AAM9E,SAAgB,iBAAqC,IAAI,WAAmB;AAa5E,SAAgB,iBAAsC,IAAI,WAAoB;AAY9E,SAAgB,mBAAwC,IAAI,WAAoB;AAyD9E,QAAI,eAAe,UAAS;AAC1B,YAAM,IAAI,MAAM,qEAAgE;AAAA,IAClF;AACA,SAAK,oBAAoB;AACzB,SAAK,kBAAkB,CAAC;AACxB,SAAK,kBAAkB,CAAC;AACxB,SAAK,wBAAwB;AAC7B,SAAK,WAAW;AAChB,SAAK,WAAW;AAChB,SAAK,WAAW;AAChB,SAAK,2BAA2B;AAChC,SAAK,yBAAyB;AAC9B,SAAK,gCAAgC;AACrC,SAAK,WAAW;AAChB,SAAK,aAAa;AAAA,EACpB;AAAA,EAlHA,IAAW,UAAmB;AAC5B,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAW,QAAQ,OAAgB;AACjC,QAAI,KAAK,aAAa,OAAO;AAC3B,WAAK,WAAW;AAChB,WAAK,eAAe,KAAK,KAAK;AAC9B,WAAK,gBAAgB;AAAA,IACvB;AAAA,EACF;AAAA,EAIA,IAAW,UAAkB;AAC3B,WAAO,KAAK;AAAA,EACd;AAAA,EAIA,IAAW,UAAmB;AAC5B,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAY,QAAQ,OAAgB;AAClC,QAAI,KAAK,aAAa,OAAO;AAC3B,WAAK,WAAW;AAChB,WAAK,eAAe,KAAK,KAAK;AAC9B,WAAK,gBAAgB;AAAA,IACvB;AAAA,EACF;AAAA,EAIA,IAAW,YAAqB;AAC9B,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAY,UAAU,OAAgB;AACpC,QAAI,KAAK,eAAe,OAAO;AAC7B,WAAK,aAAa;AAClB,WAAK,iBAAiB,KAAK,KAAK;AAAA,IAClC;AAAA,EACF;AAAA,EAIQ,kBAAwB;AAC9B,SAAK,YAAY,KAAK,YAAY,KAAK;AAAA,EACzC;AAAA,EAEA,IAAW,UAAmB;AAC5B,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAY,QAAQ,OAAgB;AAClC,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,IAAW,UAAmB;AAC5B,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAY,QAAQ,OAAgB;AAClC,SAAK,WAAW;AAAA,EAClB;AAAA;AAAA,EAGA,IAAW,wBAAiC;AAC1C,WAAO,KAAK,2BAA2B;AAAA,EACzC;AAAA;AAAA,EAGA,IAAW,kBAA2B;AACpC,WAAO,KAAK,qBAAqB;AAAA,EACnC;AAAA;AAAA;AAAA,EAcU,kBAAkB,KAAgB,WAA0B;AAAA,EAAC;AAAA;AAAA,EAE7D,gBAAgB,KAAsB;AAAA,EAAC;AAAA;AAAA,EAEvC,YAAY,KAAsB;AAAA,EAAC;AAAA;AAAA,EAEnC,qBAAqB,MAAkC;AAAA,EAAC;AAAA;AAAA,EAIxD,gBAAgB,WAAiC,SAA0B;AAAA,EAAC;AAAA;AAAA,EAE5E,qBAAqB,WAAuC;AAAA,EAAC;AAAA;AAAA,EAqBhE,aAAa,eAAkC;AACpD,SAAK,eAAe,KAAK,aAAa;AAAA,EACxC;AAAA;AAAA,EAGO,eAAe,eAAkC;AACtD,SAAK,eAAe,OAAO,KAAK,eAAe,QAAQ,aAAa,GAAG,CAAC;AACxE,QAAI,CAAC,cAAc,gBAAgB,CAAC,cAAc,oBAAqB,MAAK;AAC5E,SAAK,UAAU,KAAK,kBAAkB;AAAA,EACxC;AAAA;AAAA,EAGO,iBAAiB,mBAAiD;AACvE,SAAK,mBAAmB,KAAK,iBAAiB;AAAA,EAChD;AAAA;AAAA,EAGO,mBAAmB,mBAA2C;AACnE,SAAK,mBAAmB;AAAA,MACtB,KAAK,mBAAmB,QAAQ,iBAAiB;AAAA,MACjD;AAAA,IACF;AACA,QAAI,CAAC,kBAAkB,aAAc,MAAK;AAC1C,SAAK,UAAU,KAAK,kBAAkB;AAAA,EACxC;AAAA;AAAA,EAGO,mBAAmB,eAA8B;AACtD,SAAK,iBAAiB,gBAAgB,IAAI;AAC1C,QAAI,CAAC,KAAK,uBAAuB;AAC/B,WAAK,UAAU,KAAK,kBAAkB;AAAA,IACxC;AAAA,EACF;AAAA,EAEO,UAAa,QAAoB;AACtC,UAAM,gBAAgB,KAAK,eAAe;AAC1C,SAAK;AACL,SAAK;AACL,UAAM,SAAS,OAAO;AACtB,aAAS,IAAI,eAAe,IAAI,KAAK,eAAe,QAAQ,KAAK;AAC/D,eAAS,KAAK,eAAe,CAAC,CAAC;AAAA,IACjC;AACA,SAAK;AACL,SAAK;AACL,SAAK,UAAU,KAAK,kBAAkB;AACtC,WAAO;AAAA,EACT;AAAA,EAEO,IAAO,QAAoB;AAChC,UAAM,gBAAgB,KAAK,eAAe;AAC1C,UAAM,mBAAmB,KAAK,gBAAgB;AAC9C,UAAM,YAAY,CAAC,GAAG,KAAK,eAAe;AAC1C,SAAK;AACL,UAAM,SAAS,OAAO;AAItB,SAAK,gBAAgB,SAAS;AAC9B,SAAK,gBAAgB,SAAS;AAC9B,eAAW,MAAM,UAAW,MAAK,gBAAgB,KAAK,EAAE;AACxD,UAAM,UAAU,KAAK,eAAe,MAAM,aAAa;AACvD,eAAW,OAAO,QAAS,UAAS,GAAG;AACvC,SAAK;AACL,SAAK,UAAU,KAAK,kBAAkB;AACtC,SAAK,gBAAgB,OAAO;AAC5B,SAAK,MAAM;AACX,WAAO;AAAA,EACT;AAAA,EAEO,uBAAuB,QAA0B;AACtD,SAAK;AACL,WAAO;AACP,SAAK;AAAA,EACP;AAAA,EAEO,wBAA8B;AACnC,SAAK;AAAA,EACP;AAAA,EAEO,sBAA4B;AACjC,SAAK;AAAA,EACP;AAAA;AAAA,EAGO,YACL,YACA,YACA,YACM;AACN,QAAI,KAAK,aAAc;AAEvB,QAAI,KAAK,uBAAuB;AAC9B,iBAAW;AACX,UAAI,CAAC,KAAK,iBAAiB;AACzB,aAAK,mBAAmB,WAAW,eAAe,WAAW,QAAQ;AAAA,MACvE;AACA;AAAA,IACF;AAEA,UAAM,eAAe,CAAC,KAAK,uBAAuB;AAElD,QAAI,CAAC,cAAc;AACjB,WAAK,yBAAyB,WAAW;AACzC,WAAK,gCAAgC,WAAW;AAEhD,UAAI,KAAK,sBAAsB,UAAU,GAAG;AAC1C,aAAK,oBAAoB,oBAAoB,QAAQ,KAAK,eAAe;AACzE,aAAK,kBAAkB,KAAK,mBAAmB,IAAI;AACnD,aAAK;AACL,aAAK,eAAe,KAAK,KAAK,QAAQ;AAAA,MACxC,OAAO;AACL,aAAK,oBAAoB,IAAI,UAAU;AACvC,aAAK,kBAAkB,KAAK,mBAAmB,KAAK;AACpD,aAAK,gBAAgB,KAAK,KAAK,iBAAiB;AAChD,aAAK,qBAAqB,KAAK,gBAAgB,OAAO,CAAC,CAAC;AACxD,aAAK,MAAM;AACX,aAAK;AACL,aAAK,eAAe,KAAK,KAAK,QAAQ;AAAA,MACxC;AAAA,IACF;AAEA,SAAK,mBAAmB;AAAA,MACtB,MAAM,WAAW;AAAA,MACjB,MAAM,WAAW;AAAA,MACjB;AAAA,IACF;AACA,eAAW;AAEX,QAAI,KAAK,oBAAoB,UACzB,WAAW,aAAa,UACxB,WAAW,yBAAyB,mBAAmB;AACzD,WAAK,gBAAgB,SAAS,WAAW,eAAe,WAAW,QAAQ;AAAA,IAC7E;AAEA,QAAI,KAAK,yBAAyB,UAAU,GAAG;AAC7C,YAAM,WAAW,KAAK;AACtB,WAAK,oBAAoB;AACzB,WAAK,yBAAyB;AAC9B,WAAK,gCAAgC;AACrC,YAAM,UAAU,KAAK;AACrB,WAAK,wBAAwB,CAAC;AAC9B,iBAAW,EAAE,KAAK,KAAK,KAAK,SAAS;AACnC,aAAK,mBAAmB,KAAK,IAAI;AAAA,MACnC;AACA,WAAK,mBAAmB,WAAW,eAAe,WAAW,QAAQ;AACrE,WAAK,gBAAgB,QAAQ;AAC7B,WAAK,MAAM;AAAA,IACb,OAAO;AAEL,WAAK,sBAAsB,KAAK,EAAE,KAAK,WAAW,eAAe,MAAM,WAAW,SAAS,CAAC;AAAA,IAC9F;AAAA,EACF;AAAA,EAEQ,mBAAmB,YAAsB,aAAuC;AACtF,UAAM,SAAS,eAAe;AAC9B,UAAMA,cAAa,CAAC,GAAG,kBAAkB,cAAc,YAAY,MAAM,CAAC;AAC1E,eAAW,EAAE,KAAK,KAAK,KAAKA,aAAY;AACtC,YAAM,QAAQ,uBAAuB,KAAK,IAAI;AAC9C,UAAI,UAAU,MAAM,KAAK;AAAA,IAC3B;AACA,QAAI,gBAAgB,QAAW;AAC7B,MAAC,WAAiD,UAAU;AAAA,IAC9D;AACA,SAAK,UAAU,KAAK,kBAAkB;AAAA,EACxC;AAAA,EAEQ,yBAAyB,YAAiC;AAChE,WAAO,KAAK,2BAA2B,WAAW,iBAChD,KAAK,kCAAkC,WAAW;AAAA,EACtD;AAAA,EAEQ,yBAAyB;AAC/B,WAAO,KAAK,2BAA2B,UACrC,KAAK,kCAAkC;AAAA,EAC3C;AAAA,EAEQ,sBAAsB,YAA0C;AACtE,UAAM,gBAAgB,oBAAoB,QAAQ,KAAK,eAAe;AACtE,WACE,KAAK,kBAAkB,UAAU,KACjC,KAAK,iBAAiB,aAAa,KACnC,KAAK,iCAAiC,eAAgB,UAAU,KAChE,KAAK,mBAAmB,eAAgB,WAAW,cAAe;AAAA,EAEtE;AAAA,EAEQ,kBAAkB,YAA0C;AAClE,WACE,WAAW,mBAAmB,WAC7B,WAAW,2BACV,WAAW;AAAA,EAEjB;AAAA,EAEQ,iBAAiB,eAA+C;AACtE,WAAO,CAAC,CAAC;AAAA,EACX;AAAA,EAEQ,iCAAiC,eAA0B,YAA0C;AAC3G,WAAO,cAAc,QAAQ;AAAA,MAC3B,CAAC,MACC,EAAE,WAAW,kBAAkB,WAAW,iBAC1C,EAAE,WAAW,aAAa,WAAW;AAAA,IACzC;AAAA,EACF;AAAA,EAEQ,mBAAmB,eAA0B,gBAAiC;AACpF,YACE,oBAAI,KAAK,GAAE,QAAQ,IACjB,oBAAoB,QAAQ,cAAc,OAAO,EAAG,KAAK,QAAQ,IACjE;AAAA,EAEN;AAAA;AAAA,EAGO,kBAA0B;AAC/B,WAAO,KAAK;AAAA,EACd;AAAA,EAEO,wBAA8B;AACnC,UAAM,YAAY,KAAK,0BAA0B,SAC7C,KAAK,gBAAgB,QAAQ,KAAK,qBAAqB,IACvD;AACJ,UAAM,WAAW,KAAK,gBAAgB,OAAO,YAAY,CAAC;AAE1D,SAAK,gBAAgB,SAAS;AAC9B,SAAK,gBAAgB,SAAS;AAC9B,SAAK,wBAAwB;AAE7B,QAAI,SAAS,SAAS,GAAG;AACvB,WAAK,OAAO,MAAM;AAChB,iBAAS,IAAI,SAAS,SAAS,GAAG,KAAK,GAAG,KAAK;AAC7C,mBAAS,CAAC,EAAE,KAAK;AAAA,QACnB;AAAA,MACF,CAAC;AACD,WAAK,YAAY,SAAS;AAC1B,WAAK,eAAe,KAAK,KAAK,QAAQ;AAAA,IACxC;AAEA,SAAK,MAAM;AACX,SAAK,WAAW;AAAA,EAClB;AAAA,EAEO,gBAAgB,YAAmD;AACxE,WAAO,KAAK,eAAe,KAAK,CAAC,MAAM,EAAE,YAAY,UAAU;AAAA,EACjE;AAAA;AAAA,EAGO,eAAe,IAAwB;AAC5C,WAAO,KAAK,gBAAgB,SAAS,EAAE;AAAA,EACzC;AAAA;AAAA,EAGU,OAAO,QAA0B;AACzC,SAAK,eAAe;AACpB,QAAI;AACF,WAAK,uBAAuB,MAAM;AAAA,IACpC,UAAE;AACA,WAAK,eAAe;AAAA,IACtB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,kBACL,YACA,YACA,YACM;AAEN,SAAK,kBAAmB,YAAY,YAAY,YAAY,UAAU;AAAA,EACxE;AAAA,EAEU,QAAc;AACtB,SAAK,UAAU,KAAK,gBAAgB,SAAS;AAC7C,SAAK,UAAU,KAAK,gBAAgB,SAAS;AAC7C,SAAK,UAAU,KAAK,gBAAgB;AAAA,EACtC;AAAA,EAEO,aAAa,OAAyC;AAC3D,QAAI,KAAK,oBAAoB,OAAW,QAAO,KAAK;AACpD,SAAK,sBAAsB,KAAK,gBAAgB;AAChD,SAAK,uBAAuB,KAAK,gBAAgB;AACjD,SAAK,kBAAkB,KAAK;AAAA,MAC1B;AAAA,MACA,MAAM,KAAK,aAAa;AAAA,MACxB,MAAM,KAAK,kBAAkB;AAAA,IAC/B;AACA,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGU,eAAe,OAAoC,KAAiB,UAAsC;AAClH,WAAO,IAAI,eAAe,OAAO,MAAM,KAAK,QAAQ;AAAA,EACtD;AAAA,EAEQ,eAAqB;AAC3B,QAAI,KAAK,wBAAwB,OAAW;AAC5C,SAAK,kBAAkB;AAEvB,UAAM,WAAW,KAAK,gBAAgB,OAAO,KAAK,mBAAmB;AACrE,SAAK,qBAAqB,KAAK,gBAAgB,OAAO,KAAK,oBAAqB,CAAC;AACjF,SAAK,sBAAsB;AAC3B,SAAK,uBAAuB;AAE5B,QAAI,SAAS,WAAW,GAAG;AACzB,WAAK,MAAM;AACX;AAAA,IACF;AAEA,QAAI,SAAS,SAAS,CAAC;AACvB,QAAI,SAAS,SAAS,GAAG;AACvB,eAAS,IAAI,UAAU;AACvB,iBAAW,MAAM,UAAU;AACzB,mBAAW,UAAU,GAAG,SAAS;AAC/B,iBAAO,IAAI,OAAO,YAAY,OAAO,YAAY,OAAO,UAAU;AAAA,QACpE;AAAA,MACF;AAAA,IACF;AACA,SAAK,gBAAgB,KAAK,MAAM;AAChC,SAAK,gBAAgB,UAAU,MAAM;AACrC,SAAK,MAAM;AAAA,EACb;AAAA,EAEQ,oBAA0B;AAChC,QAAI,KAAK,wBAAwB,OAAW;AAC5C,SAAK,kBAAkB;AAEvB,UAAM,WAAW,KAAK,gBAAgB,OAAO,KAAK,mBAAmB;AACrE,SAAK,qBAAqB,KAAK,gBAAgB,OAAO,KAAK,oBAAqB,CAAC;AACjF,SAAK,sBAAsB;AAC3B,SAAK,uBAAuB;AAE5B,SAAK,OAAO,MAAM;AAChB,eAAS,IAAI,SAAS,SAAS,GAAG,KAAK,GAAG,KAAK;AAC7C,iBAAS,CAAC,EAAE,KAAK;AAAA,MACnB;AAAA,IACF,CAAC;AACD,SAAK,qBAAqB,QAAQ;AAElC,SAAK,MAAM;AACX,SAAK,WAAW;AAChB,QAAI,SAAS,SAAS,GAAG;AACvB,WAAK,YAAY,SAAS;AAC1B,WAAK,eAAe,KAAK,KAAK,QAAQ;AAAA,IACxC;AAAA,EACF;AAAA,EAEO,OAAa;AAClB,QAAI,CAAC,KAAK,SAAS;AACjB;AAAA,IACF;AAEA,UAAM,gBAAgB,KAAK,gBAAgB,IAAI;AAC/C,SAAK,OAAO,MAAM,cAAc,KAAK,CAAC;AACtC,SAAK,gBAAgB,KAAK,aAAa;AACvC,SAAK,YAAY,aAAa;AAE9B,SAAK,MAAM;AACX,SAAK,WAAW;AAChB,SAAK;AACL,SAAK,eAAe,KAAK,KAAK,QAAQ;AAAA,EACxC;AAAA,EAEO,OAAa;AAClB,QAAI,CAAC,KAAK,SAAS;AACjB;AAAA,IACF;AAEA,UAAM,gBAAgB,KAAK,gBAAgB,IAAI;AAC/C,SAAK,OAAO,MAAM,cAAc,KAAK,CAAC;AACtC,SAAK,gBAAgB,KAAK,aAAa;AACvC,SAAK,YAAY,aAAa;AAE9B,SAAK,MAAM;AACX,SAAK,WAAW;AAChB,SAAK;AACL,SAAK,eAAe,KAAK,KAAK,QAAQ;AAAA,EACxC;AAAA,EAEO,aAAmB;AACxB,SAAK,eAAe,QAAQ,CAAC,MAAM,SAAS,CAAC,CAAC;AAC9C,SAAK,mBAAmB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;AACpD,SAAK,UAAU,KAAK,kBAAkB;AAAA,EACxC;AACF;;;ACviBO,IAAK,QAAL,kBAAKC,WAAL;AACL,EAAAA,OAAA,eAAY;AACZ,EAAAA,OAAA,YAAS;AACT,EAAAA,OAAA,aAAU;AACV,EAAAA,OAAA,aAAU;AAJA,SAAAA;AAAA,GAAA;;;ACKZ,IAAM,UAAU,uBAAO,QAAQ;AAC/B,IAAM,WAAW,uBAAO,SAAS;AAE1B,SAAS,OACd,SACA,SACM;AACN,UAAQ,eAAe,WAAsB;AAC3C,UAAM,QAAQ,OAAO,eAAe,IAAI;AACxC,QAAI,CAAC,OAAO,UAAU,eAAe,KAAK,OAAO,OAAO,GAAG;AACzD,aAAO,eAAe,OAAO,SAAS;AAAA,QACpC,OAAO,OAAO,QAAQ,IAAI;AAAA,QAC1B,cAAc;AAAA,MAChB,CAAC;AAAA,IACH;AACA,oBAAgB,OAAO,OAAO,QAAQ,IAAI,CAAC;AAAA,EAC7C,CAAC;AACH;AAEO,SAAS,GACd,SACA,SACM;AACN,UAAQ,eAAe,WAAsB;AAC3C,UAAM,QAAQ,OAAO,eAAe,IAAI;AACxC,oBAAgB,OAAO,OAAO,QAAQ,IAAI,CAAC;AAAA,EAC7C,CAAC;AACH;AAEA,SAAS,gBAAgB,OAAe,cAA4B;AAClE,MAAI,CAAC,OAAO,UAAU,eAAe,KAAK,OAAO,QAAQ,GAAG;AAC1D,WAAO,eAAe,OAAO,UAAU;AAAA,MACrC,OAAO,CAAC;AAAA,MACR,cAAc;AAAA,MACd,UAAU;AAAA,IACZ,CAAC;AAAA,EACH;AACA,QAAM,OAAQ,MAAc,QAAQ;AACpC,MAAI,CAAC,KAAK,SAAS,YAAY,EAAG,MAAK,KAAK,YAAY;AAC1D;AAEO,SAAS,kBAAkB,OAAmC;AACnE,SAAO,WAAW,QAAU,MAAc,OAAO,IAAe;AAClE;AAEO,SAAS,cAAc,OAAmC;AAC/D,QAAM,SAAS,kBAAkB,KAAK;AACtC,SAAO,sBAAsB,KAAK,EAAE,KAAK,OAAK,MAAM,MAAM;AAC5D;AAEO,SAAS,sBAAsB,OAAyB;AAC7D,QAAM,QAAkB,CAAC;AACzB,MAAI,UAAyB;AAC7B,SAAO,SAAS;AACd,UAAM,KAAK,OAAO;AAClB,cAAU,OAAO,eAAe,OAAO;AAAA,EACzC;AACA,QAAM,SAAmB,CAAC;AAC1B,WAAS,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;AAC1C,UAAMC,SAAQ,MAAM,CAAC;AACrB,QAAI,CAAC,OAAO,UAAU,eAAe,KAAKA,QAAO,QAAQ,EAAG;AAC5D,UAAM,OAAQA,OAAc,QAAQ;AACpC,eAAW,QAAQ,MAAM;AACvB,UAAI,CAAC,OAAO,SAAS,IAAI,EAAG,QAAO,KAAK,IAAI;AAAA,IAC9C;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,YAAY,KAAsB;AAChD,QAAM,QAAQ,sBAAsB,OAAO,eAAe,GAAG,CAAC;AAC9D,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,MAAI,MAAM,WAAW,GAAG;AACtB,WAAQ,IAAgC,MAAM,CAAC,CAAC;AAAA,EAClD;AACA,QAAM,SAAkC,CAAC;AACzC,aAAW,KAAK,MAAO,QAAO,CAAC,IAAK,IAAgC,CAAC;AACrE,SAAO;AACT;AAEO,SAAS,kBAAkB,KAAsC;AACtE,QAAM,QAAQ,sBAAsB,OAAO,eAAe,GAAG,CAAC;AAC9D,QAAM,SAAkC,CAAC;AACzC,aAAW,KAAK,MAAO,QAAO,CAAC,IAAK,IAAgC,CAAC;AACrE,SAAO;AACT;;;ACtEO,SAAS,qBACd,KACA,OACA,WACA,SACM;AACN,MAAI,UAAU,SAAS;AACrB,eAAW,KAAK,SAAS;AAAA,EAC3B,WAAW,UAAU,WAAW;AAC9B,iBAAa,KAAK,WAAW,OAAO;AAAA,EACtC,OAAO;AACL,mBAAe,KAAK,WAAW,OAAO;AAAA,EACxC;AACF;AAEA,SAAS,WAAW,KAAkB,WAAiC;AACrE,MAAI,cAAc,QAAQ;AACxB,QAAI,qCAAyB;AAAA,EAC/B,OAAO;AACL,QAAI,+BAAsB;AAAA,EAC5B;AACF;AAEA,SAAS,aAAa,KAAkB,WAA2B,SAA8B;AAC/F,MAAI,cAAc,QAAQ;AACxB,UAAM,OAAO,SAAS;AACtB,QAAI,UAAU,IAAI;AAClB,QAAI,gCAAuB;AACzB,UAAI,SAAS,qBAAqB,QAAW;AAC3C,YAAI,iBAAiB,QAAQ,gBAAgB;AAAA,MAC/C;AAAA,IACF;AAAA,EACF,OAAO;AACL,QAAI,IAAI,sCAA6B;AACnC,UAAI,qCAAyB;AAC7B,UAAI,iBAAiB,CAAC;AAAA,IACxB,OAAO;AACL,UAAI,iCAAuB;AAAA,IAC7B;AAAA,EACF;AACF;AAEA,SAAS,eAAe,KAAkB,WAA2B,SAA8B;AACjG,MAAI,cAAc,QAAQ;AACxB,UAAM,OAAO,SAAS;AACtB,QAAI,gCAAuB;AAEzB,UAAI,iCAAuB;AAAA,IAE7B,WAAW,kCAAwB;AAEjC,UAAI,+BAAsB;AAAA,IAC5B,WAAW,kCAAwB;AAEjC,UAAI,iCAAuB;AAAA,IAC7B;AAAA,EAEF,OAAO;AACL,SACG,SAAS,uCAA8B,SAAS,0CACjD,QAAQ,cACR,QAAQ,WAAW,QACnB;AACA,MAAC,IAAY,QAAQ,UAAU,IAAI,QAAQ;AAAA,IAC7C;AACA,QAAI,qCAAyB;AAC7B,QAAI,iBAAiB,CAAC;AAAA,EACxB;AACF;AAEO,SAAS,sBACd,KACA,YACA,MACc;AACd,QAAM,YAAY,IAAI;AACtB,MAAI;AACJ,OACG,uCAA8B,0CAC/B,MACA;AACA,aAAS,KAAK,KAAK,CAAC,MAAM,EAAE,eAAe,IAAI,OAAO,GAAG;AAAA,EAC3D;AACA,SAAO,EAAE,WAAW,YAAY,OAAO;AACzC;;;ACzFO,IAAe,qBAAf,cAA0C,kBAAyC;AAAA,EAMjF,YAAY,SAAuB;AACxC,UAAM,OAAO;AAJf,SAAQ,gBAAwB;AAChC,SAAQ;AAAA,EAIR;AAAA;AAAA,EAGA,IAAW,aAAoB;AAC7B,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,IAAW,eAAuB;AAChC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAW,UAAmB;AAC5B,WAAO,KAAK,kBAAkB;AAAA,EAChC;AAAA;AAAA,EAGA,UAAU,OAAoB;AAC5B,SAAK,SAAS;AAAA,EAChB;AAAA;AAAA,EAGA,iBAAiB,OAAqB;AACpC,SAAK,gBAAgB;AAAA,EACvB;AAAA;AAAA,EAGS,kBAAwB;AAC/B,SAAK;AACL,QAAI,KAAK,uCAA4B,MAAK;AAAA,EAC5C;AAAA;AAAA,EAGS,wBAA8B;AACrC,SAAK;AACL,QAAI,KAAK,kBAAkB,KAAK,KAAK,mCAA0B,MAAK;AAAA,EACtE;AAAA;AAAA,EAGO,aAAa,QAAoB,MAAsC;AAC5E,UAAM,aAAa,kBAAkB,OAAO,eAAe,IAAI,CAAC;AAChE,UAAM,UAAU,sBAAsB,MAAM,YAAY,IAAI;AAE5D,UAAM,SAAS,MAAM,qBAAqB,MAAM,aAAa,MAAM,OAAO;AAC1E,UAAM,SAAS,MAAM,qBAAqB,MAAM,aAAa,QAAQ,OAAO;AAE5E,QAAI,QAAQ;AACV,aAAO,YAAY,QAAQ,QAAQ,IAAI,oBAAoB,MAAM,2BAAgC,CAAC;AAAA,IACpG;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGS,eAAqB;AAC5B,UAAM,YAAY,KAAK;AACvB,UAAM,mBAAmB,KAAK;AAC9B,UAAM,WAAW,KAAK;AACtB,UAAM,iBAAiB;AAEvB,SAAK,QAAQ;AAAA,MACX,MAAM;AACJ,6BAAqB,MAAM,WAAW,IAAI;AAC1C,YAAI,gBAAgB;AAClB,4BAAkB,UAAU,IAAI;AAChC,eAAK,QAAQ,eAAe,IAAI;AAAA,QAClC,WAAW,CAAC,UAAU;AACpB,eAAK,QAAQ,mBAAmB,KAAK;AAAA,QACvC;AAAA,MACF;AAAA,MACA,MAAM;AACJ,YAAI,gBAAgB;AAClB,eAAK,QAAQ,aAAa,IAAI;AAC9B,cAAI,CAAC,SAAU,MAAK,QAAQ,mBAAmB,IAAI;AAAA,QACrD,WAAW,CAAC,UAAU;AACpB,eAAK,QAAQ,mBAAmB,IAAI;AAAA,QACtC;AACA,6BAAqB,MAAM,WAAW,QAAQ,EAAE,WAAW,iBAAiB,CAAC;AAAA,MAC/E;AAAA,MACA,IAAI,oBAAoB,MAAM,2BAAgC;AAAA,IAChE;AAAA,EACF;AAAA;AAAA,EAGS,aAAmB;AAC1B,QAAI,KAAK,uCAA4B;AACrC,QAAI,KAAK,QAAQ,sBAAuB;AACxC,UAAM,WAAW,KAAK;AACtB,SAAK,QAAQ;AAAA,MACX,MAAM;AACJ,YAAI,KAAK,QAAQ,eAAe,QAAQ,IAAI,MAAM,IAAI;AACpD,eAAK,QAAQ,aAAa,IAAI;AAC9B,cAAI,CAAC,SAAU,MAAK,QAAQ,mBAAmB,IAAI;AAAA,QACrD;AACA,6BAAqB,MAAM,SAAS,IAAI;AAAA,MAC1C;AAAA,MACA,MAAM;AACJ,aAAK,QAAQ,eAAe,IAAI;AAChC,6BAAqB,MAAM,SAAS,MAAM;AAAA,MAC5C;AAAA,MACA,IAAI,oBAAoB,MAAM,2BAAgC;AAAA,IAChE;AAAA,EACF;AACF;;;ACxHO,IAAM,sBAAN,cAAkC,eAAe;AAAA;AAAA,EAEtD,IAAI,iBAAuC;AACzC,WAAQ,KAAK,eAAwC,OAAO,CAAC,QAAQ,IAAI,sCAA4B;AAAA,EACvG;AACF;;;ACQO,IAAM,eAAN,cAA2B,QAAQ;AAAA,EAGxC,IAAW,iBAAuC;AAChD,WAAO,KAAK,eAAe,OAAO,SAAO,IAAI,sCAA4B;AAAA,EAC3E;AAAA;AAAA,EAGO,eAAe,KAA8B;AAClD,QAAI,EAAE,eAAe,qBAAqB;AACxC,YAAM,IAAI;AAAA,QACR,GAAG,IAAI,YAAY,IAAI;AAAA,MAEzB;AAAA,IACF;AAAA,EACF;AAAA,EAEgB,gBAAgB,YAAoD;AAClF,WAAO,MAAM,gBAAgB,UAAU;AAAA,EACzC;AAAA,EAEgB,aAAa,OAA8C;AACzE,WAAO,MAAM,aAAa,KAAK;AAAA,EACjC;AAAA,EAEmB,eAAe,OAAoC,KAAiB,UAA2C;AAChI,WAAO,IAAI,oBAAoB,OAAO,MAAM,KAAK,QAAQ;AAAA,EAC3D;AAAA;AAAA,EAGmB,gBAAgB,SAA6C;AAC9E,eAAW,OAAO,SAA0C;AAC1D,UAAI,iBAAiB,CAAC;AACtB,UAAI,IAAI,uCAA8B,KAAI,qCAAyB;AAAA,IACrE;AAAA,EACF;AAAA,EAEU,kBAA2B;AACnC,WAAO,oBAAoB,QAAQ,KAAK,eAAe,MAAM,KAAK;AAAA,EACpE;AAAA,EAEO,SAAqB,MAAgC;AAC1D,UAAM,eAAe,oBAAoB,QAAQ,KAAK,eAAe;AACrE,SAAK,eAAe,QAAQ,CAAC,QAAQ;AACnC,YAAM,KAAK,KAAK,mBAAmB,GAAG;AACtC,UAAI,aAAa,IAAI,IAA2C;AAAA,IAClE,CAAC;AACD,SAAK,wBAAwB;AAC7B,SAAK,MAAM;AAAA,EACb;AAAA,EAEQ,mBAAmB,KAAsC;AAC/D,aAAS,IAAI,KAAK,gBAAgB,SAAS,GAAG,KAAK,GAAG,KAAK;AACzD,YAAM,KAAK,KAAK,gBAAgB,CAAC;AACjC,iBAAW,UAAU,GAAG,SAAS;AAC/B,YAAI,OAAO,WAAW,kBAAkB,IAAK,QAAO;AAAA,MACtD;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;;;ACpEO,IAAe,gBAAf,cAAqC,kBAAkB;AAAA,EAGrD,YAAY,SAAuB;AACxC,UAAM,OAAO;AAAA,EACf;AACF;;;ACRO,IAAM,oBAAN,MAAyD;AAAA,EA4DvD,YACW,SAChB,OACiB,YACjB;AAHgB;AAEC;AAlBnB,SAAgB,UACd,IAAI,WAAwC;AAE9C,SAAgB,iBACd,IAAI,WAAwC;AAgB5C,SAAK,WAAW;AAChB,SAAK,cAAc,QAAQ,CAAC,GAAG,KAAK,IAAI,CAAC;AACzC,SAAK,UAAU;AACf,SAAK,QAAQ,iBAAiB,IAAI;AAAA,EACpC;AAAA,EAjEQ,aAAmB;AACzB,sBAAkB,OAAO,MAAM,sBAAsB;AAAA,EACvD;AAAA,EAEA,IAAW,eAAwB;AACjC,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAY,aAAa,OAAgB;AACvC,UAAM,WAAW,KAAK;AACtB,SAAK,WAAW;AAChB,QAAI,aAAa,OAAO;AACtB,WAAK,QAAQ,mBAAmB,CAAC,KAAK;AAAA,IACxC;AAAA,EACF;AAAA,EAEA,IAAW,SAAiB;AAC1B,SAAK,WAAW;AAChB,WAAO,KAAK,YAAY;AAAA,EAC1B;AAAA,EAEA,IAAW,gBAAoC;AAC7C,SAAK,WAAW;AAChB,WAAO,KAAK,YAAY,SAAS,IAAI,KAAK,YAAY,SAAS,IAAI;AAAA,EACrE;AAAA,EAEA,IAAW,aAAkB;AAC3B,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAY,WAAW,OAAY;AACjC,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,KAAY,OAAO,QAAQ,IAAI;AAC7B,SAAK,WAAW;AAChB,WAAO,KAAK,WAAW,OAAO,QAAQ,EAAE,KAAK,KAAK,UAAU;AAAA,EAC9D;AAAA,EAEA,KAAY,OAAO,WAAW,IAAI;AAChC,WAAO,KAAK,WAAW,OAAO,WAAW;AAAA,EAC3C;AAAA,EAUA,IAAW,QAA4B;AACrC,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAW,MAAM,OAA2B;AAC1C,SAAK,SAAS;AAAA,EAChB;AAAA;AAAA,EAcA,YAAkB;AAChB,UAAM,OAAO,kBAAkB,QAAQ,MAAM;AAC3C,WAAK,QAAQ,KAAK,aAAa,KAAK,WAAW,KAAK,UAAU,IAAI;AAAA,IACpE,CAAC;AACD,sBAAkB,WAAW,MAAM,wBAAwB,IAAI;AAC/D,SAAK,eAAe,KAAK,UAAU;AAAA,EACrC;AAAA;AAAA,EAGO,iBAAiB,WAAsC;AAAA,EAE9D;AAAA,EAEO,OAAO,OAAe,gBAAwB,OAAiB;AACpE,QAAI;AAEJ,SAAK,QAAQ;AAAA,MACX,MAAM;AACJ,YAAI,YAAY,QAAW;AACzB,eAAK,SAAS,OAAO,aAAa,OAAO,OAAO;AAAA,QAClD,OAAO;AACL,oBAAU,KAAK,SAAS,OAAO,aAAa,KAAK;AAAA,QACnD;AACA,aAAK,4BAA4B,OAAO;AACxC,aAAK,2BAA2B,KAAK;AACrC,YAAI,CAAC,KAAK,QAAQ,cAAc;AAC9B,eAAK,eAAe,KAAK,IAAI,yBAAyB,OAAO,SAAS,KAAK,WAAW,CAAC;AAAA,QACzF;AAAA,MACF;AAAA,MACA,MAAM,KAAK,WAAW,OAAO,OAAO,OAAO;AAAA,MAC3C,IAAI,oBAAoB,MAAM,0BAAkC;AAAA,IAClE;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,SACN,OACA,aACA,OACA,eACK;AACL,QAAI;AACJ,QAAI;AAEJ,SAAK,QAAQ,uBAAuB,MAAM;AACxC,gBAAU,KAAK,WAAW,OAAO,OAAO,aAAa,GAAG,KAAK;AAC7D,WAAK,aAAa,CAAC,GAAG,KAAK,UAAU;AACrC,cAAQ,IAAI,yBAA4B,OAAO,SAAS,KAAK,UAAU;AAAA,IACzE,CAAC;AAED,SAAK,QAAQ,KAAK,KAAM;AAExB,WAAO,iBAAiB;AAAA,EAC1B;AAAA,EAEQ,4BAA4B,SAAoB;AACtD,eAAW,QAAQ,SAAS;AAC1B,UAAI,gBAAgB,mBAAmB;AACrC,aAAK,aAAa;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,2BAA2B,OAAkB;AACnD,eAAW,QAAQ,OAAO;AACxB,UAAI,gBAAgB,mBAAmB;AACrC,aAAK,WAAW;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,WAAW,OAAe,OAAY,SAAoB;AAChE,SAAK,QAAQ,uBAAuB,MAAM;AACxC,WAAK,WAAW,OAAO,OAAO,MAAM,QAAQ,GAAG,OAAO;AACtD,WAAK,aAAa,CAAC,GAAG,KAAK,UAAU;AACrC,YAAM,QAAQ,IAAI;AAAA,QAChB;AAAA,QACA;AAAA,QACA,KAAK;AAAA,MACP;AACA,WAAK,QAAQ,KAAK,KAAK;AAAA,IACzB,CAAC;AAAA,EACH;AAAA,EAEO,MAAM,UAAqB;AAChC,SAAK,OAAO,GAAG,KAAK,WAAW,QAAQ,GAAG,QAAQ;AAAA,EACpD;AAAA,EAEO,UAAe;AACpB,SAAK,WAAW,QAAQ;AACxB,WAAO,KAAK;AAAA,EACd;AAAA,EAEO,KAAK,WAA0C;AACpD,QAAI,KAAK,WAAW,GAAG;AACrB,aAAO;AAAA,IACT;AACA,SAAK,WAAW,KAAK,SAAS;AAC9B,WAAO;AAAA,EACT;AAAA,EAEO,QAAc;AACnB,QAAI,KAAK,WAAW,GAAG;AACrB;AAAA,IACF;AACA,SAAK,OAAO,GAAG,KAAK,MAAM;AAAA,EAC5B;AAAA,EAEO,OAAO,MAAkB;AAC9B,UAAM,YAAY,KAAK,WAAW,QAAQ,IAAI;AAC9C,QAAI,YAAY,GAAG;AACjB,aAAO;AAAA,IACT;AAEA,SAAK,OAAO,WAAW,CAAC;AAExB,WAAO;AAAA,EACT;AAAA,EAEO,QAAQ,MAAS,SAAqB;AAC3C,UAAM,YAAY,KAAK,WAAW,QAAQ,IAAI;AAC9C,QAAI,YAAY,GAAG;AACjB,aAAO;AAAA,IACT;AAEA,SAAK,OAAO,WAAW,GAAG,OAAO;AAEjC,WAAO;AAAA,EACT;AAAA,EAEO,UAAU,OAAe,SAAkB;AAChD,SAAK,OAAO,OAAO,GAAG,OAAO;AAAA,EAC/B;AAAA,EAEO,MAAqB;AAC1B,WAAO,KAAK,WAAW,IACnB,SACA,KAAK,OAAO,KAAK,WAAW,SAAS,GAAG,CAAC,EAAE,CAAC;AAAA,EAClD;AAAA,EAEO,QAAQ,OAAoB;AACjC,QAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC,aAAO,KAAK;AAAA,IACd;AACA,SAAK,QAAQ,KAAK,iBAAiB,MAAM,GAAG,GAAG,GAAG,KAAK;AAEvD,WAAO,KAAK;AAAA,EACd;AAAA,EAEO,UAAU,OAAoC;AACnD,SAAK,WAAW;AAChB,WAAO,KAAK,WAAW,OAAO,GAAG,KAAK;AAAA,EACxC;AAAA,EAEO,KAAK,WAA4B;AACtC,SAAK,WAAW;AAChB,WAAO,KAAK,WAAW,KAAK,SAAS;AAAA,EACvC;AAAA,EAEO,QAAuB;AAC5B,WAAO,KAAK,WAAW,IAAI,SAAY,KAAK,OAAO,GAAG,CAAC,EAAE,CAAC;AAAA,EAC5D;AAAA,EAEO,MAAM,OAAgB,KAAmB;AAC9C,SAAK,WAAW;AAChB,WAAO,KAAK,WAAW,MAAM,OAAO,GAAG;AAAA,EACzC;AAAA,EAEO,WAAW,OAAoB;AACpC,SAAK,OAAO,GAAG,GAAG,GAAG,KAAK;AAC1B,WAAO,KAAK;AAAA,EACd;AAAA,EAEO,QAAQ,eAAkB,WAA4B;AAC3D,SAAK,WAAW;AAChB,WAAO,KAAK,WAAW,QAAQ,eAAe,SAAS;AAAA,EACzD;AAAA,EAEO,YAAY,eAAkB,WAA4B;AAC/D,SAAK,WAAW;AAChB,WAAO,cAAc,SACjB,KAAK,WAAW,YAAY,eAAe,SAAS,IACpD,KAAK,WAAW,YAAY,aAAa;AAAA,EAC/C;AAAA,EAUO,MACL,WACA,SACS;AACT,SAAK,WAAW;AAChB,WAAO,KAAK,WAAW,MAAM,WAAkB,OAAO;AAAA,EACxD;AAAA,EAEO,KACL,WACA,SACS;AACT,SAAK,WAAW;AAChB,WAAO,KAAK,WAAW,KAAK,WAAW,OAAO;AAAA,EAChD;AAAA,EAEO,QACL,YACA,SACM;AACN,SAAK,WAAW;AAChB,SAAK,WAAW,QAAQ,YAAY,OAAO;AAAA,EAC7C;AAAA,EAEO,IACL,YACA,SACK;AACL,SAAK,WAAW;AAChB,WAAO,KAAK,WAAW,IAAI,YAAY,OAAO;AAAA,EAChD;AAAA,EAEO,OACL,WACA,SACK;AACL,SAAK,WAAW;AAChB,WAAO,KAAK,WAAW,OAAO,WAAW,OAAO;AAAA,EAClD;AAAA,EAEO,KACL,WACA,SACe;AACf,SAAK,WAAW;AAChB,WAAO,KAAK,WAAW,KAAK,WAAW,OAAO;AAAA,EAChD;AAAA,EAEO,UACL,WACA,SACQ;AACR,SAAK,WAAW;AAChB,WAAO,KAAK,WAAW,UAAU,WAAW,OAAO;AAAA,EACrD;AAAA,EAEO,QACL,UAMA,SACK;AACL,SAAK,WAAW;AAChB,WAAO,KAAK,WAAW,QAAQ,UAAU,OAAO;AAAA,EAClD;AAAA,EAEO,SAAS,eAAkB,WAA6B;AAC7D,SAAK,WAAW;AAChB,WAAO,KAAK,WAAW,SAAS,eAAe,SAAS;AAAA,EAC1D;AAAA,EAEO,WAAmB;AACxB,SAAK,WAAW;AAChB,WAAO,KAAK,WAAW,SAAS;AAAA,EAClC;AAAA,EAEO,iBAAyB;AAC9B,SAAK,WAAW;AAChB,WAAO,KAAK,WAAW,eAAe;AAAA,EACxC;AAAA,EAEO,UAAsC;AAC3C,SAAK,WAAW;AAChB,WAAO,KAAK,WAAW,QAAQ;AAAA,EACjC;AAAA,EAEO,OAA8B;AACnC,SAAK,WAAW;AAChB,WAAO,KAAK,WAAW,KAAK;AAAA,EAC9B;AAAA,EAEO,SAA2B;AAChC,SAAK,WAAW;AAChB,WAAO,KAAK,WAAW,OAAO;AAAA,EAChC;AAAA,EAEO,GAAG,OAA8B;AACtC,SAAK,WAAW;AAChB,WAAO,KAAK,WAAW,GAAG,KAAK;AAAA,EACjC;AAAA,EAEO,KAAK,OAAU,OAAgB,KAAoB;AACxD,UAAM,MAAM,KAAK;AACjB,UAAM,IACJ,UAAU,SACN,IACA,QAAQ,IACN,KAAK,IAAI,MAAM,OAAO,CAAC,IACvB,KAAK,IAAI,OAAO,GAAG;AAC3B,UAAM,IACJ,QAAQ,SACJ,MACA,MAAM,IACJ,KAAK,IAAI,MAAM,KAAK,CAAC,IACrB,KAAK,IAAI,KAAK,GAAG;AACzB,QAAI,KAAK,EAAG,QAAO;AACnB,SAAK,OAAO,GAAG,IAAI,GAAG,GAAG,IAAI,MAAS,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC;AACxD,WAAO;AAAA,EACT;AAAA,EAEO,WAAW,QAAgB,OAAe,KAAoB;AACnE,UAAM,MAAM,KAAK;AACjB,UAAM,IAAI,SAAS,IAAI,KAAK,IAAI,MAAM,QAAQ,CAAC,IAAI,KAAK,IAAI,QAAQ,GAAG;AACvE,UAAM,IAAI,QAAQ,IAAI,KAAK,IAAI,MAAM,OAAO,CAAC,IAAI,KAAK,IAAI,OAAO,GAAG;AACpE,UAAM,IACJ,QAAQ,SACJ,MACA,MAAM,IACJ,KAAK,IAAI,MAAM,KAAK,CAAC,IACrB,KAAK,IAAI,KAAK,GAAG;AACzB,UAAM,cAAc,KAAK,WAAW,MAAM,GAAG,CAAC;AAC9C,UAAM,QAAQ,KAAK,IAAI,YAAY,QAAQ,MAAM,CAAC;AAClD,QAAI,QAAQ,GAAG;AACb,WAAK,OAAO,GAAG,OAAO,GAAG,YAAY,MAAM,GAAG,KAAK,CAAC;AAAA,IACtD;AACA,WAAO;AAAA,EACT;AAAA,EAEO,OACL,YAMA,cACG;AACH,SAAK,WAAW;AAChB,WAAO,iBAAiB,SACpB,KAAK,WAAW,OAAO,YAAY,YAAY,IAC/C,KAAK,WAAW,OAAO,UAAU;AAAA,EACvC;AAAA,EAEO,YACL,YAMA,cACG;AACH,SAAK,WAAW;AAChB,WAAO,iBAAiB,SACpB,KAAK,WAAW,YAAY,YAAY,YAAY,IACpD,KAAK,WAAW,YAAY,UAAU;AAAA,EAC5C;AAAA,EAEO,KAAuC,OAA8B;AAC1E,sBAAkB,OAAO,MAAgB,sBAAsB;AAC/D,WAAS,KAAa,YAAsB,KAAK,KAAK;AAAA,EAIxD;AAAA,EAEO,SACL,WACA,SACe;AACf,SAAK,WAAW;AAChB,WAAO,KAAK,WAAW,SAAS,WAAW,OAAO;AAAA,EACpD;AAAA,EAEO,cACL,WACA,SACQ;AACR,SAAK,WAAW;AAChB,WAAO,KAAK,WAAW,cAAc,WAAW,OAAO;AAAA,EACzD;AAAA,EAEO,aAAkB;AACvB,SAAK,WAAW;AAChB,WAAO,KAAK,WAAW,WAAW;AAAA,EACpC;AAAA,EAEO,SAAS,WAAyC;AACvD,SAAK,WAAW;AAChB,WAAO,KAAK,WAAW,SAAS,SAAS;AAAA,EAC3C;AAAA,EAEO,UAAU,OAAe,gBAAwB,OAAiB;AACvE,SAAK,WAAW;AAChB,WAAO,KAAK,WAAW,UAAU,OAAO,aAAa,GAAG,KAAK;AAAA,EAC/D;AAAA,EAEO,KAAK,OAAe,OAAe;AACxC,SAAK,WAAW;AAChB,WAAO,KAAK,WAAW,KAAK,OAAO,KAAK;AAAA,EAC1C;AAAA,EAEO,QAAuB;AAC5B,SAAK,WAAW;AAChB,WAAO,KAAK,YAAY,SAAS,IAAI,KAAK,YAAY,CAAC,IAAI;AAAA,EAC7D;AAAA,EAEO,UAAgB;AACrB,sBAAkB,UAAU,IAAI;AAChC,SAAK,QAAQ,mBAAmB,IAAI;AAAA,EACtC;AACF;AAEO,IAAM,2BAAN,MAAkC;AAAA,EACvC,YACkB,OACA,SACA,eAChB;AAHgB;AACA;AACA;AAAA,EACf;AACL;;;AC9eO,IAAM,oBAAN,MAAwB;AAAA,EAAxB;AACL,SAAS,WAAoB,CAAC;AAC9B,SAAiB,iBAAiB,oBAAI,IAAwC;AAAA;AAAA,EAE9E,MAAM,OAAoB;AACxB,SAAK,SAAS,KAAK,KAAK;AAExB,QAAI,iBAAiB,mBAAmB;AACtC,iBAAW,QAAQ,MAAM,YAAY;AACnC,YAAI,gBAAgB,mBAAmB;AACrC,eAAK,SAAS,KAAK,IAAI;AAAA,QACzB;AAAA,MACF;AAEA,YAAM,QAAQ,MAAM,QAAQ,UAAU,CAAC,MAAyC;AAC9E,mBAAW,SAAS,EAAE,OAAO;AAC3B,cAAI,iBAAiB,mBAAmB;AACtC,iBAAK,SAAS,KAAK,KAAK;AAAA,UAC1B;AAAA,QACF;AACA,mBAAW,WAAW,EAAE,SAAS;AAC/B,cAAI,mBAAmB,mBAAmB;AACxC,kBAAM,MAAM,KAAK,SAAS,QAAQ,OAAO;AACzC,gBAAI,OAAO,EAAG,MAAK,SAAS,OAAO,KAAK,CAAC;AAAA,UAC3C;AAAA,QACF;AAAA,MACF,CAAC;AAED,WAAK,eAAe,IAAI,OAAO,KAAK;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,QAAQ,OAAoB;AAC1B,QAAI,iBAAiB,mBAAmB;AACtC,YAAM,QAAQ,KAAK,eAAe,IAAI,KAAK;AAC3C,UAAI,OAAO;AACT,cAAM;AACN,aAAK,eAAe,OAAO,KAAK;AAAA,MAClC;AAEA,iBAAW,QAAQ,MAAM,YAAY;AACnC,YAAI,gBAAgB,mBAAmB;AACrC,gBAAMC,OAAM,KAAK,SAAS,QAAQ,IAAI;AACtC,cAAIA,QAAO,EAAG,MAAK,SAAS,OAAOA,MAAK,CAAC;AAAA,QAC3C;AAAA,MACF;AAAA,IACF;AAEA,UAAM,MAAM,KAAK,SAAS,QAAQ,KAAK;AACvC,QAAI,OAAO,EAAG,MAAK,SAAS,OAAO,KAAK,CAAC;AAAA,EAC3C;AAAA,EAEA,IAAI,WAAoB;AACtB,WAAO,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,YAAY;AAAA,EAClD;AAAA,EAEA,UAAgB;AACd,eAAW,SAAS,KAAK,eAAe,OAAO,EAAG,OAAM;AAAA,EAC1D;AACF;;;AC9DO,IAAe,mBAAf,cAAwC,cAAc;AAAA,EAAtD;AAAA;AACL,SAAiB,QAAQ,IAAI,kBAAkB;AAAA;AAAA,EAErC,WAAW,OAAqD;AACxE,SAAK,MAAM,MAAM,KAAK;AAAA,EACxB;AAAA,EAEU,aAAa,OAAqD;AAC1E,SAAK,MAAM,QAAQ,KAAK;AAAA,EAC1B;AAAA,EAEA,IAAa,eAAwB;AACnC,WAAO,MAAM,gBAAgB,KAAK,MAAM;AAAA,EAC1C;AAAA,EAEA,IAAa,aAAa,OAAgB;AACxC,SAAK,YAAY,KAAK;AAAA,EACxB;AAAA,EAES,UAAgB;AACvB,SAAK,MAAM,QAAQ;AACnB,UAAM,QAAQ;AAAA,EAChB;AACF;;;ACvBO,IAAe,wBAAf,cAA6C,mBAAmB;AAAA,EAAhE;AAAA;AACL,SAAiB,QAAQ,IAAI,kBAAkB;AAAA;AAAA,EAErC,WAAW,OAA0D;AAC7E,SAAK,MAAM,MAAM,KAAK;AAAA,EACxB;AAAA,EAEU,aAAa,OAA0D;AAC/E,SAAK,MAAM,QAAQ,KAAK;AAAA,EAC1B;AAAA,EAEA,IAAa,eAAwB;AACnC,WAAO,MAAM,gBAAgB,KAAK,MAAM;AAAA,EAC1C;AAAA,EAEA,IAAa,aAAa,OAAgB;AACxC,SAAK,YAAY,KAAK;AAAA,EACxB;AAAA,EAEA,IAAa,UAAmB;AAC9B,WAAO,MAAM,WAAW,KAAK,MAAM,SAAS,KAAK,CAAC,MAAM,aAAa,sBAAsB,EAAE,OAAO;AAAA,EACtG;AAAA,EAES,UAAgB;AACvB,SAAK,MAAM,QAAQ;AACnB,UAAM,QAAQ;AAAA,EAChB;AACF;;;ACnBA,IAAI,uBAAuB;AAE3B,SAAS,eACP,OAC6C;AAC7C,MAAI,CAAC,MAAO,QAAO,CAAC;AACpB,MAAI,OAAO,UAAU,YAAY;AAC/B,QAAI,CAAC,sBAAsB;AACzB,6BAAuB;AAEvB,cAAQ;AAAA,QACN;AAAA,MAEF;AAAA,IACF;AACA,WAAO,EAAE,QAAQ,MAAM;AAAA,EACzB;AACA,SAAO,EAAE,QAAQ,MAAM,cAAc,OAAO,MAAM,YAAY;AAChE;AAEO,SAAS,QACd,WACA,OACA,SACA;AACA,QAAM,EAAE,QAAQ,YAAY,OAAO,UAAU,IAAI,eAAe,KAAK;AAcrE,WAAS,UACP,QACA,SACK;AACL,UAAM,eAAe,OAAO,QAAQ,IAAI;AAExC,QAAI,QAAQ,SAAS,UAAU;AAC7B,YAAM,WAAW;AACjB,aAAO,WAA0B;AAC/B,0BAAkB,OAAO,MAAM,YAAY;AAC3C,eAAO,SAAS,KAAK,IAAI;AAAA,MAC3B;AAAA,IACF;AAEA,QAAI,QAAQ,SAAS,YAAY;AAC/B,YAAM,iBAAiB;AAEvB,UAAI,WAAW;AACb,gBAAQ,eAAe,WAAyB;AAC9C;AAAA,YACE,OAAO,eAAe,IAAI;AAAA,YAC1B;AAAA,YACA,CAAC,UAAe,UAAU,OAAQ,MAAc,YAAY,CAAC;AAAA,UAC/D;AAAA,QACF,CAAC;AAAA,MACH;AAEA,aAAO;AAAA,QACL,MAAoB;AAClB,4BAAkB,OAAO,MAAM,YAAY;AAC3C,iBAAO,eAAe,IAAI,KAAK,IAAI;AAAA,QACrC;AAAA,QACA,IAAe,UAAe;AAC5B,gBAAM,WAAW,eAAe,IAAI,KAAK,IAAI;AAE7C,cAAI,YAAY,UAAU,QAAQ,GAAG;AACnC;AAAA,UACF;AAEA,cAAI,CAAC,KAAK,WAAW,KAAK,QAAQ,uBAAuB;AACvD,2BAAe,IAAI,KAAK,MAAM,QAAQ;AACtC;AAAA,UACF;AAEA,gBAAM,aAAa,IAAI;AAAA,YACrB;AAAA,YACA;AAAA,YACA,gBAAgB,UAAU,QAAQ;AAAA,YAClC,SAAS;AAAA,UACX;AAEA,eAAK,QAAQ;AAAA,YACX,MAAM;AACJ,6BAAe,IAAI,KAAK,MAAM,QAAQ;AACtC,cAAC,KAA2B,gBAAgB;AAC5C,kBAAI,oBAAoB,kBAAmB,UAAS,aAAa;AACjE,kBAAI,oBAAoB,kBAAmB,UAAS,WAAW;AAC/D,oBAAM,QAAQ,EAAE,UAAU,cAAc,UAAU,SAAS;AAC3D,kBAAI,CAAC,KAAK,QAAQ,gBAAgB,YAAY;AAC5C,2BAAW,MAAM,UAAU,QAAQ;AAAA,cACrC;AACA,mBAAK,aAAa,KAAK,KAAK;AAC5B,mBAAK,YAAY,KAAK,KAAK;AAC3B,kBAAI,CAAC,KAAK,QAAQ,cAAc;AAC9B,qBAAK,eAAe,KAAK,KAAK;AAAA,cAChC;AACA,kBAAI,CAAC,KAAK,QAAQ,gBAAgB,WAAW;AAC3C,0BAAU,MAAM,UAAU,QAAQ;AAAA,cACpC;AAAA,YACF;AAAA,YACA,MAAM;AACJ,6BAAe,IAAI,KAAK,MAAM,QAAQ;AACtC,cAAC,KAA2B,sBAAsB;AAClD,oBAAM,QAAQ,EAAE,UAAU,cAAc,UAAU,UAAU,UAAU,SAAS;AAC/E,mBAAK,aAAa,KAAK,KAAK;AAC5B,mBAAK,YAAY,KAAK,KAAK;AAAA,YAC7B;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,OAAO;AACL,YAAM,WAAW;AAEjB,UAAI,WAAW;AACb,gBAAQ,eAAe,WAAyB;AAC9C;AAAA,YACE,OAAO,eAAe,IAAI;AAAA,YAC1B;AAAA,YACA,CAAC,UAAe,UAAU,OAAQ,MAAc,YAAY,CAAC;AAAA,UAC/D;AAAA,QACF,CAAC;AAAA,MACH;AAEA,aAAO,SAAqB,UAAqB;AAC/C,cAAM,WAAY,KAAa,YAAY;AAE3C,YAAI,YAAY,UAAU,QAAQ,GAAG;AACnC;AAAA,QACF;AAEA,YAAI,CAAC,KAAK,WAAW,KAAK,QAAQ,uBAAuB;AACvD,mBAAS,KAAK,MAAM,QAAQ;AAC5B;AAAA,QACF;AAEA,cAAM,aAAa,IAAI;AAAA,UACrB;AAAA,UACA;AAAA,UACA,gBAAgB,UAAU,QAAQ;AAAA,UAClC,SAAS;AAAA,QACX;AAEA,aAAK,QAAQ;AAAA,UACX,MAAM;AACJ,qBAAS,KAAK,MAAM,QAAQ;AAC5B,YAAC,KAA2B,gBAAgB;AAC5C,gBAAI,oBAAoB,kBAAmB,UAAS,aAAa;AACjE,gBAAI,oBAAoB,kBAAmB,UAAS,WAAW;AAC/D,kBAAM,QAAQ,EAAE,UAAU,cAAc,UAAU,SAAS;AAC3D,gBAAI,CAAC,KAAK,QAAQ,gBAAgB,YAAY;AAC5C,yBAAW,MAAM,UAAU,QAAQ;AAAA,YACrC;AACA,iBAAK,aAAa,KAAK,KAAK;AAC5B,iBAAK,YAAY,KAAK,KAAK;AAC3B,gBAAI,CAAC,KAAK,QAAQ,cAAc;AAC9B,mBAAK,eAAe,KAAK,KAAK;AAAA,YAChC;AACA,gBAAI,CAAC,KAAK,QAAQ,gBAAgB,WAAW;AAC3C,wBAAU,MAAM,UAAU,QAAQ;AAAA,YACpC;AAAA,UACF;AAAA,UACA,MAAM;AACJ,qBAAS,KAAK,MAAM,QAAQ;AAC5B,YAAC,KAA2B,sBAAsB;AAClD,kBAAM,QAAQ,EAAE,UAAU,cAAc,UAAU,UAAU,UAAU,SAAS;AAC/E,iBAAK,aAAa,KAAK,KAAK;AAC5B,iBAAK,YAAY,KAAK,KAAK;AAAA,UAC7B;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,YAAY,QAAa,QAAsB;AACtD,SAAO,WAAW;AACpB;AAEA,SAAS,gBAAgB,UAAe,UAA6B;AACnE,QAAM,IAAI,YAAY;AACtB,MAAI,aAAa,KAAM;AACvB,UAAQ,OAAO,GAAG;AAAA,IAChB,KAAK;AACH;AAAA,IACF,KAAK;AACH;AAAA,IACF,KAAK;AACH;AAAA,IACF,KAAK;AACH;AAAA,IACF;AACE,YAAM,IAAI,MAAM,kBAAkB,OAAO,CAAC,iBAAiB;AAAA,EAC/D;AACF;;;ACpNO,IAAK,aAAL,kBAAKC,gBAAL;AAEL,EAAAA,YAAA,kBAAe;AAEf,EAAAA,YAAA,eAAY;AAEZ,EAAAA,YAAA,YAAS;AANC,SAAAA;AAAA,GAAA;;;ACLZ,IAAM,iBAAiB,uBAAO,eAAe;AA2B7C,IAAM,gBAAgB,oBAAI,QAAqD;AAC/E,IAAM,kBAAkB,oBAAI,QAA+C;AAC3E,IAAM,uBAAuB,oBAAI,QAA4C;AAC7E,IAAM,sBAAsB,oBAAI,QAAuB;AACvD,IAAM,uBAAuB,oBAAI,QAA+B;AAYzD,SAAS,mBACd,SACA,YACA,QACM;AACN,UAAQ,kBAAkB,MAAM,OAAO,MAAM,GAAG,MAAM,OAAO,MAAM,GAAG,UAAU;AAClF;AAGO,IAAM,gBAAgB;AAE7B,SAAS,oBAAoB,OAAwB;AACnD,SAAO,OAAO,UAAU,eAAe,KAAK,OAAO,cAAc;AACnE;AAEA,SAAS,iBAAiB,OAA6C;AACrE,SAAO,oBAAoB,KAAK,IAC1B,MAAsD,cAAc,IACtE;AACN;AAEO,SAAS,sBACd,OACA,UACA,SACM;AACN,MAAI,CAAC,oBAAoB,KAAK,GAAG;AAC/B,WAAO,eAAe,OAAO,gBAAgB;AAAA,MAC3C,OAAO,oBAAI,IAAkC;AAAA,MAC7C,cAAc;AAAA,IAChB,CAAC;AAAA,EACH;AACA,QAAM,MAAO,MAAsD,cAAc;AACjF,MAAI,CAAC,IAAI,IAAI,QAAQ,GAAG;AACtB,QAAI,IAAI,UAAU,OAAO;AAAA,EAC3B;AACF;AAEO,SAAS,iBAAiB,OAAiC;AAChE,QAAM,QAAkB,CAAC;AACzB,MAAI,UAAyB;AAC7B,SAAO,SAAS;AACd,UAAM,KAAK,OAAO;AAClB,cAAU,OAAO,eAAe,OAAO;AAAA,EACzC;AACA,QAAM,SAA2B,oBAAI,IAAI;AACzC,WAAS,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;AAC1C,UAAM,MAAM,iBAAiB,MAAM,CAAC,CAAC;AACrC,QAAI,CAAC,IAAK;AACV,QAAI,QAAQ,CAAC,SAAS,aAAa;AACjC,UAAI,CAAC,OAAO,IAAI,QAAQ,EAAG,QAAO,IAAI,UAAU,OAAO;AAAA,IACzD,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAIA,IAAM,gBAAgB,oBAAI,QAA2B;AAE9C,SAAS,YAAY,SAAiB,KAAoB;AAC/D,MAAI,QAAQ,cAAc,IAAI,OAAO;AACrC,MAAI,CAAC,OAAO;AACV,YAAQ,CAAC;AACT,kBAAc,IAAI,SAAS,KAAK;AAAA,EAClC;AACA,QAAM,KAAK,GAAG;AAChB;AAEO,SAAS,WAAW,SAAuB;AAEhD,gBAAc,IAAI,OAAO,EAAG,IAAI;AAClC;AAEO,SAAS,YAAY,SAA0B;AACpD,QAAM,QAAQ,cAAc,IAAI,OAAO;AACvC,SAAO,SAAS,MAAM,SAAS,IAAI,MAAM,MAAM,SAAS,CAAC,IAAI;AAC/D;AAIO,SAAS,6BAA6B,QAA6B;AACxE,MAAI,oBAAoB,IAAI,MAAM,EAAG;AACrC,sBAAoB,IAAI,MAAM;AAC9B,SAAO,QAAQ,UAAU,CAAC,QAAQ;AAChC,UAAM,OAAO,iBAAiB,OAAO,eAAe,MAAM,CAAC;AAC3D,UAAM,WAAW,KAAK,IAAI,IAAI,QAAQ;AACtC,QAAI,CAAC,SAAU;AAEf,QAAI,SAAS,SAAS;AAEpB,UAAI,OAAO,QAAQ,aAAc;AACjC;AAAA,QACE;AAAA,QACA,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,IACF,OAAO;AACL,uBAAiB,QAAQ,IAAI,UAAU,IAAI,UAAU,IAAI,QAAQ;AAAA,IACnE;AAAA,EACF,CAAC;AACH;AAEA,SAAS,iBACP,QACA,UACA,UACA,UACM;AACN,QAAM,QAAQ,sBAAsB,MAAM;AAC1C,MAAI,QAAQ,MAAM,IAAI,QAAQ;AAC9B,MAAI,CAAC,OAAO;AACV,YAAQ,EAAE,eAAe,UAAU,cAAc,SAAS;AAC1D,UAAM,IAAI,UAAU,KAAK;AAAA,EAC3B,OAAO;AACL,UAAM,eAAe;AAAA,EACvB;AACA,MAAI,MAAM,iBAAiB,MAAM,eAAe;AAC9C,UAAM,OAAO,QAAQ;AAAA,EACvB;AACF;AAEA,SAAS,mBACP,QACA,UACA,UACA,UACA,eACA,gBACM;AACN,QAAM,SAAS,wBAAwB,MAAM;AAC7C,MAAI,QAAQ,OAAO,IAAI,QAAQ;AAC/B,MAAI,CAAC,OAAO;AACV,YAAQ,CAAC;AACT,WAAO,IAAI,UAAU,KAAK;AAAA,EAC5B;AAEA,QAAM,QAAQ,wBAAwB,MAAM;AAC5C,QAAM,MAAM,KAAK,IAAI;AACrB,QAAM,WAAW,MAAM,IAAI,QAAQ;AACnC,QAAM,gBACJ,mBAAmB,UACnB,aAAa,UACb,MAAM,WAAW,kBACjB,MAAM,SAAS;AAEjB,QAAM,QAAQ,mBAAmB,QAAQ,UAAU,UAAU,UAAU,aAAa;AACpF,MAAI,cAAe,OAAM,MAAM,SAAS,CAAC,IAAI;AAAA,MACxC,OAAM,KAAK,KAAK;AACrB,QAAM,IAAI,UAAU,GAAG;AAEvB;AAAA,IACE,OAAO;AAAA,IACP,IAAI,oBAAoB,QAAQ,wBAA6B;AAAA,IAC7D,CAAC,cAAc;AACb,YAAM,CAAC,OAAO,QAAQ,IAAI,cAAc,SAAS,CAAC,UAAU,QAAQ,IAAI,CAAC,UAAU,QAAQ;AAE3F,YAAMC,UAAS,wBAAwB,MAAM;AAC7C,MAAAA,QAAO,IAAI,UAAU,CAAC,GAAIA,QAAO,IAAI,QAAQ,KAAK,CAAC,GAAI,mBAAmB,QAAQ,UAAU,OAAO,UAAU,aAAa,CAAC,CAAC;AAE5H,2BAAqB,IAAI,MAAM,GAAG,OAAO,QAAQ;AAAA,IACnD;AAAA,EACF;AACF;AAEA,SAAS,mBACP,QACA,UACA,UACA,UACA,eACS;AACT,MAAI,OAAO,kBAAkB,YAAY,cAAc,cAAc;AACnE,UAAM,MAAM,YAAY,OAAO,OAAO;AACtC,UAAM,SAAS,EAAE,MAAM,oBAAI,KAAK,EAAE;AAClC,WAAO,cAAc,aAAa,QAAQ,UAAU,UAAU,QAAQ,GAAG;AAAA,EAC3E;AACA,SAAO,EAAE,UAAU,OAAO,SAAS;AACrC;AAEA,SAAS,wBAAwB,QAA4C;AAC3E,MAAI,QAAQ,qBAAqB,IAAI,MAAM;AAC3C,MAAI,CAAC,OAAO;AACV,YAAQ,oBAAI,IAAoB;AAChC,yBAAqB,IAAI,QAAQ,KAAK;AAAA,EACxC;AACA,SAAO;AACT;AAEA,SAAS,sBAAsB,QAAqD;AAClF,MAAI,QAAQ,cAAc,IAAI,MAAM;AACpC,MAAI,CAAC,OAAO;AACV,YAAQ,oBAAI,IAA6B;AACzC,kBAAc,IAAI,QAAQ,KAAK;AAAA,EACjC;AACA,SAAO;AACT;AAEA,SAAS,wBAAwB,QAA+C;AAC9E,MAAI,QAAQ,gBAAgB,IAAI,MAAM;AACtC,MAAI,CAAC,OAAO;AACV,YAAQ,oBAAI,IAAuB;AACnC,oBAAgB,IAAI,QAAQ,KAAK;AAAA,EACnC;AACA,SAAO;AACT;AAEO,SAAS,cAAc,QAAqD;AACjF,SAAO,cAAc,IAAI,MAAM,KAAK,oBAAI,IAA6B;AACvE;AAEO,SAAS,gBAAgB,QAA+C;AAC7E,SAAO,gBAAgB,IAAI,MAAM,KAAK,oBAAI,IAAuB;AACnE;AAEO,SAAS,gBAAgB,QAA6B;AAC3D,gBAAc,OAAO,MAAM;AAC3B,kBAAgB,OAAO,MAAM;AAC7B,uBAAqB,OAAO,MAAM;AACpC;AAOO,SAAS,cAAc,QAAuB,UAAkB,gBAA+B;AACpG,QAAM,QAAQ,sBAAsB,MAAM;AAC1C,QAAM,UAAW,OAA8C,QAAQ;AACvE,MAAI,YAAY,gBAAgB;AAC9B,UAAM,OAAO,QAAQ;AACrB;AAAA,EACF;AACA,QAAM,QAAQ,MAAM,IAAI,QAAQ;AAChC,MAAI,OAAO;AACT,UAAM,gBAAgB;AAAA,EACxB,OAAO;AACL,UAAM,IAAI,UAAU,EAAE,eAAe,gBAAgB,cAAc,QAAQ,CAAC;AAAA,EAC9E;AACF;AAOO,SAAS,iBAAiB,QAA6B;AAC5D,gBAAc,OAAO,MAAM;AAC3B,kBAAgB,OAAO,MAAM;AAC/B;AAGO,SAAS,sBAAsB,QAAuB,UAAkB,SAAmC;AAChH,QAAM,SAAS,wBAAwB,MAAM;AAC7C,SAAO,IAAI,UAAU,CAAC,GAAG,SAAS,GAAI,OAAO,IAAI,QAAQ,KAAK,CAAC,CAAE,CAAC;AACpE;AAEO,SAAS,iBAAiB,MAAqB,YAA0B;AAC9E,uBAAqB,IAAI,MAAM,UAAU;AAC3C;AAEO,SAAS,cAAc,MAAyC;AACrE,SAAO,qBAAqB,IAAI,IAAI;AACtC;;;AC1QO,IAAM,yBAAN,cAGG,kBAAqB;AAAA,EAMtB,YACL,SACA,OACA,WACA,SACA;AACA,UAAM,SAAS,OAAO,SAAS;AAVjC,SAAiB,cAA8B,CAAC;AAEhD;AAAA,SAAiB,iBAAyB,oBAAI,IAAI;AAShD,SAAK,gBAAgB;AAErB,eAAW,QAAQ,KAAK,YAAY;AAClC,WAAK,eAAe,IAAI,IAAI;AAC5B,UAAI,gBAAgB,eAAe;AACjC,yBAAiB,MAAM,IAAI;AAC3B,aAAK,yBAAyB,IAAI;AAElC,YAAI,KAAK,cAAe,iBAAgB,IAAI;AAAA,MAC9C;AAAA,IACF;AAEA,SAAK,QAAQ,UAAU,CAAC,QAAQ;AAC9B,iBAAW,QAAQ,IAAI,OAAO;AAC5B,YAAI,gBAAgB,eAAe;AACjC,2BAAiB,MAAM,IAAI;AAC3B,eAAK,yBAAyB,IAAI;AAAA,QACpC;AAAA,MACF;AAEA,UAAI,KAAK,QAAQ,aAAc;AAC/B,UAAI,KAAK,QAAQ,uBAAuB;AAGtC,mBAAW,QAAQ,IAAI,MAAO,MAAK,eAAe,IAAI,IAAI;AAC1D,mBAAW,QAAQ,IAAI,QAAS,MAAK,eAAe,OAAO,IAAI;AAC/D;AAAA,MACF;AACA,UAAI,CAAC,KAAK,eAAe,EAAG;AAC5B,YAAM,aAAa,IAAI,oBAAoB,MAAM,0BAAkC;AACnF,iBAAW,QAAQ,IAAI,OAAO;AAC5B,YAAI,gBAAgB,cAAe,MAAK,UAAU,OAAO,MAAM,UAAU;AAAA,MAC3E;AACA,iBAAW,QAAQ,IAAI,SAAS;AAC9B,YAAI,gBAAgB,cAAe,MAAK,UAAU,UAAU,MAAM,UAAU;AAAA,MAC9E;AAAA,IACF,CAAC;AAGD,QAAI,KAAK,eAAe,GAAG;AACzB,WAAK,0BAA0B;AAAA,IACjC;AAAA,EACF;AAAA;AAAA,EAGA,IAAW,oBAAmE;AAC5E,QAAI,CAAC,KAAK,cAAe,QAAO;AAChC,QAAI,KAAK,iBAAiB,EAAG,QAAO;AACpC,WAAO;AAAA,MACL,WAAW,KAAK,cAAc;AAAA,MAC9B,aAAa,KAAK,cAAc;AAAA,IAClC;AAAA,EACF;AAAA;AAAA,EAGA,IAAW,oBAA8E;AACvF,WAAO,KAAK,iBAAiB,IAAI,KAAK,gBAAgB;AAAA,EACxD;AAAA;AAAA,EAGA,IAAW,kBAAkC;AAC3C,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGO,mBAAyB;AAC9B,SAAK,YAAY,SAAS;AAC1B,SAAK,YAAY;AAAA,EACnB;AAAA;AAAA,EAGO,YAAY,KAAoC;AAErD,eAAW,MAAM,CAAC,GAAG,GAAG,EAAE,QAAQ,GAAG;AACnC,UAAI,GAAG,OAAO,MAAO,MAAK,eAAe,OAAO,GAAG,IAAoB;AAAA,eAC9D,GAAG,OAAO,SAAU,MAAK,eAAe,IAAI,GAAG,IAAoB;AAAA,IAC9E;AACA,SAAK,YAAY,QAAQ,GAAG,GAAG;AAAA,EACjC;AAAA;AAAA,EAGO,eAAe,MAAS,SAAwB;AACrD,QAAI,QAAS,MAAK,eAAe,IAAI,IAAI;AAAA,QACpC,MAAK,eAAe,OAAO,IAAI;AAAA,EACtC;AAAA;AAAA,EAGO,cAAc,MAAkB;AACrC,WAAO,KAAK,eAAe,IAAI,IAAI;AAAA,EACrC;AAAA;AAAA,EAGO,wBAA6B;AAClC,WAAO,CAAC,GAAG,KAAK,cAAc;AAAA,EAChC;AAAA;AAAA,EAGO,cAAoB;AACzB,SAAK,eAAe,MAAM;AAC1B,eAAW,QAAQ,KAAK,WAAY,MAAK,eAAe,IAAI,IAAI;AAAA,EAClE;AAAA,EAEQ,mBAA4B;AAClC,QAAI,CAAC,KAAK,cAAe,QAAO;AAChC,WACE,KAAK,cAAc,cAAc,UACjC,KAAK,cAAc,YAAY;AAAA,EAEnC;AAAA,EAEQ,iBAA0B;AAChC,WAAO,CAAC,CAAC,KAAK,eAAe;AAAA,EAC/B;AAAA,EAEQ,yBAAyB,MAA2B;AAC1D,UAAM,QAAQ,sBAAsB,OAAO,eAAe,IAAI,CAAC;AAC/D,QAAI,MAAM,WAAW,GAAG;AACtB,YAAM,IAAI;AAAA,QACR,oCAAoC,KAAK,YAAY,IAAI;AAAA,MAC3D;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,4BAAkC;AACxC,UAAM,YAAY,CAAC,SAAwB;AACzC,WAAK,QAAQ,UAAU,CAAC,QAAQ;AAC9B,YAAI,KAAK,QAAQ,aAAc;AAC/B,YAAI,CAAC,KAAK,WAAW,SAAS,IAAoB,EAAG;AACrD,aAAK,UAAU,UAAU,MAAM,IAAI,oBAAoB,MAAM,IAAI,wBAA6B,CAAC;AAAA,MACjG,CAAC;AAAA,IACH;AACA,eAAW,QAAQ,KAAK,YAAY;AAClC,UAAI,gBAAgB,cAAe,WAAU,IAAI;AAAA,IACnD;AACA,SAAK,QAAQ,UAAU,CAAC,QAAQ;AAC9B,iBAAW,QAAQ,IAAI,OAAO;AAC5B,YAAI,gBAAgB,cAAe,WAAU,IAAI;AAAA,MACnD;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA,EAGQ,UAAU,MAAwB,MAAqB,YAAuC;AACpG,SAAK,YAAY,KAAK,KAAK,SAAS,MAAM,IAAI,CAAC;AAC/C,uBAAmB,KAAK,SAAS,YAAY,CAAC,cAAc;AAC1D,WAAK,YAAY,KAAK,KAAK,SAAS,cAAc,SAAS,aAAa,IAAI,IAAI,MAAM,IAAI,CAAC;AAAA,IAC7F,CAAC;AAAA,EACH;AAAA,EAEQ,SAAS,MAAwB,MAAmC;AAC1E,UAAM,OAAO,KAAK;AAClB,QAAI,OAAO,MAAM,YAAY,YAAY,KAAK,QAAQ,cAAc;AAClE,YAAM,MAAM,YAAY,KAAK,OAAO;AACpC,YAAM,SAAS,EAAE,MAAM,oBAAI,KAAK,EAAE;AAClC,aAAO,EAAE,IAAI,MAAM,MAAM,KAAK,KAAK,QAAQ,aAAa,MAAa,QAAQ,KAAK,IAAI,EAAE;AAAA,IAC1F;AACA,QAAI,SAAS,MAAO,QAAO,EAAE,IAAI,MAAM,MAAM,UAAU,yBAAyB,IAAI,EAAE;AACtF,QAAI,SAAS,SAAU,QAAO,EAAE,IAAI,MAAM,MAAM,UAAU,YAAY,IAAI,EAAE;AAC5E,WAAO,EAAE,IAAI,MAAM,MAAM,UAAU,YAAY,IAAI,GAAG,MAAM,KAAK,oBAAoB,IAAI,EAAE;AAAA,EAC7F;AAAA,EAEQ,oBAAoB,MAA8C;AACxE,UAAM,QAAQ,OAAO,eAAe,IAAI;AACxC,UAAM,OAAO,iBAAiB,KAAK;AACnC,UAAM,MAAM;AACZ,UAAM,OAAgC,CAAC;AACvC,eAAW,CAAC,QAAQ,KAAK,MAAM;AAC7B,YAAM,IAAI,IAAI,QAAQ;AACtB,WAAK,QAAQ,IAAI,MAAM,SAAY,OAAO;AAAA,IAC5C;AACA,WAAO;AAAA,EACT;AACF;AAEA,SAAS,aAAa,MAA0C;AAC9D,MAAI,SAAS,MAAO,QAAO;AAC3B,MAAI,SAAS,SAAU,QAAO;AAC9B,SAAO;AACT;AAEA,SAAS,yBAAyB,MAA8C;AAC9E,QAAM,QAAQ,OAAO,eAAe,IAAI;AACxC,QAAM,OAAO,iBAAiB,KAAK;AACnC,QAAM,UAAU,sBAAsB,KAAK;AAC3C,QAAM,aAAa,kBAAkB,KAAK;AAC1C,QAAM,MAAM;AACZ,QAAM,OAAgC,CAAC;AACvC,aAAW,UAAU,SAAS;AAC5B,QAAI,WAAW,WAAY,MAAK,MAAM,IAAI;AAAA,QACrC,MAAK,MAAM,IAAI,IAAI,MAAM;AAAA,EAChC;AACA,aAAW,CAAC,QAAQ,KAAK,MAAM;AAC7B,UAAM,IAAI,IAAI,QAAQ;AACtB,SAAK,QAAQ,IAAI,MAAM,SAAY,OAAO;AAAA,EAC5C;AACA,SAAO;AACT;;;ACnNA,SAAS,cAAwB;AAC/B,SAAO,EAAE,QAAQ,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,KAAK,CAAC,EAAE;AACzD;AAEA,SAAS,cAAc,MAAgB,MAAsB;AAC3D,OAAK,OAAO,KAAK,GAAG,KAAK,MAAM;AAC/B,OAAK,QAAQ,KAAK,GAAG,KAAK,OAAO;AACjC,OAAK,QAAQ,KAAK,GAAG,KAAK,OAAO;AACjC,OAAK,IAAI,KAAK,GAAG,KAAK,GAAG;AAC3B;AAwBA,IAAM,iBAAiB,oBAAI,QAAwB;AACnD,IAAI,oBAAoB;AACxB,SAAS,cAAc,KAAqB;AAC1C,MAAI,MAAM,eAAe,IAAI,GAAG;AAChC,MAAI,QAAQ,QAAW;AACrB,UAAM;AACN,mBAAe,IAAI,KAAK,GAAG;AAAA,EAC7B;AACA,SAAO;AACT;AAGA,SAAS,SAAS,QAAkB,KAAuB;AACzD,MAAI,QAAQ,OAAO,IAAI,GAAG;AAC1B,MAAI,CAAC,OAAO;AACV,YAAQ,EAAE,SAAS,oBAAI,IAAI,GAAG,UAAU,oBAAI,IAAI,GAAG,YAAY,KAAK;AACpE,WAAO,IAAI,KAAK,KAAK;AAAA,EACvB;AACA,SAAO;AACT;AAGA,SAAS,UAAU,QAAiC;AAClD,QAAM,OAAO,oBAAI,IAAc;AAC/B,aAAW,EAAE,SAAS,SAAS,KAAK,OAAO,OAAO,GAAG;AACnD,eAAW,KAAK,CAAC,GAAG,SAAS,GAAG,QAAQ,EAAG,MAAK,IAAI,CAAC;AAAA,EACvD;AACA,SAAO;AACT;AAGA,SAAS,cAAc,QAAgC;AACrD,SAAO,CAAC,GAAG,OAAO,OAAO,CAAC,EAAE,QAAQ,CAAC,EAAE,QAAQ,MAAM,CAAC,GAAG,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7F;AAEA,SAAS,WAAc,GAAW,GAAgB;AAChD,SAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;AACvC;AAWO,IAAM,eAAN,cAA2B,QAAQ;AAAA,EAAnC;AAAA;AAiBL,SAAiB,OAAuB,CAAC;AACzC,SAAiB,QAAQ,oBAAI,IAA0B;AACvD,SAAiB,OAAO,oBAAI,IAAyB;AACrD,SAAQ,YAAqC,oBAAI,IAAI;AAErD;AAAA,SAAiB,aAAa,oBAAI,IAAsB;AACxD,SAAQ,eAAe;AACvB,SAAQ,cAAc;AAGtB;AAAA,SAAgB,gBAAqD,IAAI,WAAoC;AAAA;AAAA;AAAA,EAvBtG,eAAe,KAA8B;AAClD,QAAI,EAAE,eAAe,gBAAgB;AACnC,YAAM,IAAI;AAAA,QACR,GAAG,IAAI,YAAY,IAAI;AAAA,MAEzB;AAAA,IACF;AAAA,EACF;AAAA,EAEgB,gBAAgB,YAA+C;AAC7E,WAAO,MAAM,gBAAgB,UAAU;AAAA,EACzC;AAAA;AAAA,EAeA,IAAW,SAAkC;AAC3C,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,IAAW,gBAAgC;AACzC,WAAO,KAAK,KAAK,OAAO,CAAC,MAAM,EAAE,2CAAiC;AAAA,EACpE;AAAA,EAEO,YAAe,KAAc,QAAoB;AACtD,gBAAY,MAAM,GAAG;AACrB,QAAI;AACF,aAAO,OAAO;AAAA,IAChB,UAAE;AACA,iBAAW,IAAI;AAAA,IACjB;AAAA,EACF;AAAA,EAEU,kBAA2B;AACnC,WAAO,KAAK,KAAK,KAAK,CAAC,MAAM,EAAE,2CAAiC;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,SAAqB,UAA6B,MAAgC;AACvF,QAAI,CAAC,MAAM,QAAQ,QAAQ,KAAK,SAAS,KAAK,CAAC,OAAO,OAAO,OAAO,QAAQ,EAAG,OAAM,gBAAgB;AACrG,eAAW,WAAW,UAAU;AAC9B,YAAM,QAAQ,KAAK,MAAM,IAAI,OAAO;AACpC,UAAI,CAAC,OAAO;AACV,YAAI,MAAuC;AACzC,kBAAQ,KAAK,gDAAgD,OAAO,YAAY;AAAA,QAClF;AACA;AAAA,MACF;AACA,UAAI,MAAM,4CAAmC,MAAK,UAAU,kCAA2B;AAAA,IACzF;AACA,QAAI,KAAM,MAAK,WAAW,IAAI;AAC9B,SAAK,MAAM;AACX,SAAK,QAAQ;AAAA,EACf;AAAA,EAEQ,WAAc,MAA+B;AACnD,SAAK,uBAAuB,MAAM;AAChC,iBAAW,OAAO,MAAM;AACtB,cAAM,MAAM,KAAK,gBAAgB,IAAI,UAAU;AAC/C,YAAI,CAAC,IAAK;AACV,cAAM,aAAa,kBAAkB,OAAO,eAAe,GAAG,CAAC;AAC/D,YAAI,WAAY,CAAC,IAA2C,UAAU,IAAI,IAAI;AAAA,MAChF;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUgB,wBAA8B;AAC5C,UAAM,MAAM,CAAC,UAAuB,KAAK,KAAK,IAAI,MAAM,MAAM,SAAS,CAAC,CAAC;AACzE,WAAO,KAAK,WAAW,cAAc,IAAI,KAAK,eAAe,CAAC,EAAE,0CAAgC,GAAG;AACjG,WAAK,KAAK;AAAA,IACZ;AACA,WAAO,KAAK,WAAW,cAAc,IAAI,KAAK,eAAe,CAAC,EAAE,MAAM,CAAC,OAAO,wCAA8B,GAAG;AAC7G,WAAK,KAAK;AAAA,IACZ;AACA,SAAK,qBAAqB,KAAK,gBAAgB,OAAO,CAAC,CAAC;AACxD,SAAK,MAAM;AAAA,EACb;AAAA;AAAA,EAImB,kBAAkB,IAAe,UAAyB;AAC3E,QAAI,CAAC,YAAY,KAAK,gBAAiB;AAEvC,eAAW,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,EAAE,GAAI;AAC7C,YAAM,SAAS,CAAC,GAAG,MAAM,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,2CAAiC;AACzF,UAAI,OAAO,WAAW,EAAG;AACzB,iBAAW,KAAK,OAAQ,GAAE,OAAO;AACjC,WAAK,UAAU,IAAI,KAAK,MAAM;AAAA,IAChC;AAAA,EACF;AAAA,EAEmB,gBAAgB,IAAqB;AACtD,QAAI,KAAK,gBAAiB;AAC1B,UAAM,SAAS,UAAU,KAAK,MAAM,EAAE;AACtC,UAAM,WAAW,KAAK;AACtB,SAAK,YAAY,oBAAI,IAAI;AACzB,UAAM,UAAyC,CAAC;AAChD,UAAM,UAAU,KAAK,eAAuB;AAC5C,eAAW,KAAK,SAAS;AACvB,YAAM,CAAC,KAAK,IAAI,SAAS,IAAI,EAAE,GAAG,KAAK,CAAC;AACxC,UAAI,OAAO;AACT,iBAAS,IAAI,EAAE,GAAG,EAAG,MAAM;AAC3B,cAAM,MAAM,UAAU,EAAE,MAAM;AAC9B,cAAM,MAAM,WAAW,EAAE,MAAM;AAC/B,gBAAQ,KAAK,CAAC,OAAO,cAAc,EAAE,QAAQ,CAAC,CAAC;AAC/C,aAAK,cAAc;AAAA,MACrB,OAAO;AACL,iBAAS,QAAQ,EAAE,GAAG,EAAE,QAAQ,IAAI,KAAK,QAAQ,CAAC,CAAC;AAAA,MACrD;AAAA,IACF;AACA,eAAW,CAAC,KAAK,MAAM,KAAK,QAAS,KAAI,SAAS;AAClD,SAAK,yBAAyB,OAAO;AAErC,eAAW,CAAC,KAAK,IAAI,KAAK,UAAU;AAClC,iBAAW,OAAO,MAAM;AACtB,aAAK,QAAQ,IAAI,KAAK;AACtB,eAAO,IAAI,GAAG,EAAG,QAAQ,OAAO,GAAG;AAAA,MACrC;AAAA,IACF;AACA,SAAK,QAAQ;AACb,SAAK,QAAQ;AAAA,EACf;AAAA,EAEmB,YAAY,IAAqB;AAClD,UAAM,SAAS,KAAK,KAAK,IAAI,EAAE;AAC/B,eAAW,KAAK,KAAK,eAAuB,GAAG;AAC7C,YAAM,QAAQ,SAAS,QAAQ,EAAE,GAAG;AACpC,YAAM,UAAU,WAAW,MAAM,SAAS,MAAM,QAAQ;AACxD,UAAI,MAAM,cAAc,QAAQ,MAAM,CAAC,MAAM,EAAE,MAAM,2CAAiC,GAAG;AAEvF,mBAAW,KAAK,QAAS,MAAK,UAAU,EAAE,4BAAwB;AAClE,mBAAW,KAAK,WAAW,MAAM,UAAU,MAAM,OAAO,EAAG,MAAK,UAAU,EAAE,wCAA8B;AAC1G,SAAC,MAAM,SAAS,MAAM,QAAQ,IAAI,CAAC,MAAM,UAAU,MAAM,OAAO;AAChE;AAAA,MACF;AAEA,YAAM,OAAO,oBAAI,IAAc;AAC/B,UAAI;AACJ,iBAAW,KAAK,MAAM,SAAS;AAC7B,YAAI,EAAE,MAAM,uCAAgC;AAC1C,eAAK,IAAI,CAAC;AACV,0BAAgB,KAAK,IAAI,iBAAiB,GAAG,EAAE,MAAM,OAAO;AAAA,QAC9D,OAAO;AACL,eAAK,UAAU,EAAE,4BAAwB;AAAA,QAC3C;AAAA,MACF;AACA,UAAI,kBAAkB,OAAW,MAAK,IAAI,KAAK,QAAQ,GAAG,aAAa,CAAC;AACxE,YAAM,WAAW,MAAM;AACvB,YAAM,UAAU;AAChB,YAAM,aAAa;AAAA,IACrB;AACA,SAAK,QAAQ;AACb,SAAK,QAAQ;AAAA,EACf;AAAA,EAEmB,qBAAqB,KAAiC;AACvE,QAAI,KAAK,gBAAiB;AAC1B,eAAW,MAAM,KAAK;AACpB,iBAAW,OAAO,UAAU,KAAK,KAAK,IAAI,EAAE,CAAE,GAAG;AAC/C,YAAI,IAAI,MAAM,gCAA6B,MAAK,QAAQ,IAAI,KAAK;AAAA,MACnE;AACA,WAAK,KAAK,OAAO,EAAE;AAAA,IACrB;AACA,SAAK,QAAQ;AAAA,EACf;AAAA,EAEmB,kBAAwB;AACzC,eAAW,KAAK,KAAK,eAAuB,GAAG;AAC7C,YAAM,MAAM,KAAK,QAAQ,CAAC;AAC1B,UAAI,EAAE,MAAM,eAAe,OAAW,MAAK,WAAW,IAAI,KAAK,gBAAgB,EAAE,MAAM,UAAU,GAAI,GAAG;AAAA,IAC1G;AACA,SAAK,QAAQ;AACb,SAAK,QAAQ;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,yBAAyB,SAAuC;AACtE,eAAW,CAAC,KAAK,GAAG,KAAK,KAAK,YAAY;AACxC,UAAI,IAAI,MAAM,6CAAmC;AAC/C,aAAK,WAAW,OAAO,GAAG;AAAA,MAC5B,WAAW,QAAQ,KAAK,CAAC,MAAM,EAAE,SAAS,QAAQ,KAAK,CAAC,CAAC,KAAK,IAAI,MAAM,SAAS,OAAO,IAAI,WAAW,SAAS,GAAG,CAAC,CAAC,GAAG;AACtH,aAAK,QAAQ,IAAI,KAAK;AACtB,aAAK,WAAW,OAAO,GAAG;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAAA,EAEmB,gBAAgB,UAAgC,QAAyB;AAC1F,QAAI,SAAS,WAAW,EAAG;AAC3B,UAAM,UAAU,SAAS,IAAI,CAAC,OAAO,KAAK,KAAK,IAAI,EAAE,CAAE;AACvD,eAAW,MAAM,SAAU,MAAK,KAAK,OAAO,EAAE;AAC9C,UAAM,OAAO,QAAQ,QAAQ,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;AACrD,UAAM,YAAY,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,2CAAiC;AAE7E,QAAI,CAAC,WAAW;AAEd,YAAM,SAAmB,oBAAI,IAAI;AACjC,iBAAW,KAAK,SAAS;AACvB,mBAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAG,YAAW,OAAO,QAAS,UAAS,QAAQ,GAAG,EAAE,QAAQ,IAAI,GAAG;AAAA,MACtG;AAEA,iBAAW,SAAS,OAAO,OAAO,EAAG,OAAM,aAAa;AACxD,WAAK,KAAK,IAAI,QAAQ,MAAM;AAC5B;AAAA,IACF;AAEA,eAAW,OAAO,CAAC,GAAG,IAAI,EAAE,QAAQ,GAAG;AACrC,UAAI,OAAO;AACX,WAAK,QAAQ,IAAI,KAAK;AAAA,IACxB;AACA,UAAM,SAAS,UAAU,KAAK,MAAM,MAAM;AAC1C,eAAW,KAAK,KAAK,eAAuB,EAAG,UAAS,QAAQ,EAAE,GAAG,EAAE,QAAQ,IAAI,KAAK,QAAQ,CAAC,CAAC;AAClG,SAAK,QAAQ;AACb,SAAK,QAAQ;AAAA,EACf;AAAA,EAEmB,qBAAqB,UAAsC;AAC5E,UAAM,YAAY,oBAAI,IAAoB;AAC1C,eAAW,MAAM,UAAU;AACzB,iBAAW,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,EAAE,GAAI;AAC7C,mBAAW,OAAO,MAAM,SAAS;AAC/B,cAAI,IAAI,MAAM,uCAAgC;AAC5C,sBAAU,IAAI,KAAK,KAAK,IAAI,UAAU,IAAI,GAAG,KAAK,GAAG,IAAI,MAAM,OAAO,CAAC;AAAA,UACzE;AAAA,QACF;AAAA,MACF;AACA,iBAAW,OAAO,UAAU,KAAK,KAAK,IAAI,EAAE,CAAE,GAAG;AAC/C,YAAI,IAAI,MAAM,sCAAgC,MAAK,QAAQ,IAAI,KAAK;AAAA,MACtE;AACA,WAAK,KAAK,OAAO,EAAE;AAAA,IACrB;AACA,eAAW,KAAK,KAAK,eAAuB,GAAG;AAC7C,YAAM,cAAc,UAAU,IAAI,EAAE,GAAG;AACvC,UAAI,gBAAgB,OAAW,MAAK,QAAQ,GAAG,WAAW;AAAA,IAC5D;AACA,SAAK,QAAQ;AACb,SAAK,QAAQ;AAAA,EACf;AAAA;AAAA,EAIQ,QAAQ,GAAyB,aAAgC;AACvE,UAAM,QAAsB,EAAE,SAAS,KAAK,gBAAgB,GAAG,EAAE,OAAO,yCAA+B;AACvG,QAAI,gBAAgB,OAAW,OAAM,cAAc;AACnD,SAAK,KAAK,KAAK,KAAK;AACpB,SAAK,MAAM,IAAI,MAAM,SAAS,KAAK;AACnC,SAAK,cAAc;AACnB,WAAO,EAAE,OAAO,QAAQ,cAAc,EAAE,QAAQ,EAAE;AAAA,EACpD;AAAA,EAEQ,QAAQ,OAA2B;AACzC,SAAK,KAAK,OAAO,KAAK,KAAK,QAAQ,KAAqB,GAAG,CAAC;AAC5D,SAAK,MAAM,OAAO,MAAM,OAAO;AAC/B,SAAK,cAAc;AAAA,EACrB;AAAA,EAEQ,UAAU,OAAqB,OAAyB;AAC9D,UAAM,QAAQ;AACd,SAAK,cAAc;AAAA,EACrB;AAAA,EAEQ,UAAgB;AACtB,QAAI,CAAC,KAAK,YAAa;AACvB,SAAK,cAAc;AACnB,SAAK,cAAc,KAAK,KAAK,IAAI;AAAA,EACnC;AAAA;AAAA,EAGQ,UAAgB;AACtB,eAAW,OAAO,KAAK,eAAgB,kBAAiB,GAAG;AAC3D,eAAW,OAAO,KAAK,oBAAoB;AACzC,UAAI,eAAe,uBAAwB,CAAC,IAAsB,iBAAiB;AAAA,IACrF;AAAA,EACF;AAAA;AAAA,EAIQ,iBAAwE;AAC9E,UAAM,SAAqC,CAAC;AAC5C,UAAM,aAAa,oBAAI,IAAiC;AACxD,UAAM,YAAY,CAAC,QAAqC;AACtD,UAAI,MAAM,WAAW,IAAI,GAAG;AAC5B,UAAI,CAAC,KAAK;AACR,cAAM,IAAI,IAAI,IAAI,UAAU;AAC5B,mBAAW,IAAI,KAAK,GAAG;AAAA,MACzB;AACA,aAAO;AAAA,IACT;AAGA,eAAW,OAAO,KAAK,gBAAgB;AACrC,YAAM,SAAS,cAAc,GAAG;AAChC,UAAI,CAAC,OAAQ;AACb,YAAM,SAAS,OAAO;AACtB,UAAI,CAAC,OAAQ;AAEb,YAAM,OAAO,iBAAiB,OAAO,eAAe,GAAG,CAAC;AACxD,YAAM,eAAe,UAAU,MAAM,EAAE,IAAI,GAAG;AAC9C,YAAM,aAAa,OAAO,cAAc,GAAG;AAC3C,YAAM,eAAe,aAAa,IAAI,OAAO;AAC7C,UAAI,gBAAgB,CAAC,YAAY;AAC/B,YAAI,OAAO,WAAW;AACpB,gBAAM,WAAW,eAAe,KAAK,IAAI;AACzC,mBAAS,QAAQ,KAAK,CAAC,QAAQ,GAAG,CAAC;AACnC,iBAAO,KAAK,EAAE,OAAO,oBAAgC,KAAK,MAAM,OAAO,SAAS,GAAG,UAAU,KAAK,aAAa,CAAC;AAAA,QAClH;AAAA,MACF,WAAW,CAAC,gBAAgB,YAAY;AACtC,YAAI,OAAO,aAAa;AACtB,gBAAM,WAAW,YAAY;AAC7B,mBAAS,QAAQ,KAAK,CAAC,QAAQ,GAAG,CAAC;AACnC,iBAAO,KAAK,EAAE,OAAO,sBAAkC,KAAK,OAAO,WAAW,GAAG,UAAU,KAAK,aAAa,CAAC;AAAA,QAChH;AAAA,MACF,WAAW,cAAc;AACvB,+BAAmC,KAAK,MAAM,MAAM;AAAA,MACtD;AAAA,IACF;AAGA,UAAM,mBAAmB,oBAAI,IAAoC;AACjE,eAAW,OAAO,KAAK,oBAAoB;AACzC,UAAI,EAAE,eAAe,wBAAyB;AAC9C,YAAM,MAAO,IAAsB;AACnC,UAAI,CAAC,KAAK,MAAO;AACjB,YAAM,QAAQ,IAAI,MAAM;AACxB,UAAI,OAAO,iBAAiB,IAAI,KAAK;AACrC,UAAI,CAAC,MAAM;AACT,eAAO,CAAC;AACR,yBAAiB,IAAI,OAAO,IAAI;AAAA,MAClC;AACA,WAAK,KAAK,GAAoB;AAAA,IAChC;AAGA,eAAW,OAAO,KAAK,gBAAgB;AACrC,YAAM,SAAS,cAAc,GAAG;AAChC,UAAI,OAAQ;AAEZ,YAAM,SAAS,oBAAI,IAAsE;AACzF,YAAM,WAAW,CAAC,UAAkB;AAClC,YAAI,IAAI,OAAO,IAAI,KAAK;AACxB,YAAI,CAAC,GAAG;AACN,cAAI,EAAE,SAAS,CAAC,GAAG,UAAU,YAAY,EAAE;AAC3C,iBAAO,IAAI,OAAO,CAAC;AAAA,QACrB;AACA,eAAO;AAAA,MACT;AACA,YAAM,OAAO,iBAAiB,OAAO,eAAe,GAAG,CAAC;AAExD,YAAM,WAAW,cAAc,GAAG;AAClC,YAAM,aAAa,gBAAgB,GAAG;AACtC,iBAAW,CAAC,UAAU,QAAQ,KAAK,MAAM;AACvC,cAAM,QAAQ,SAAS,aAAa;AACpC,YAAI,SAAS,SAAS;AACpB,gBAAM,QAAQ,WAAW,IAAI,QAAQ;AACrC,cAAI,SAAS,MAAM,SAAS,GAAG;AAC7B,kBAAM,IAAI,SAAS,KAAK;AACxB,cAAE,QAAQ,QAAQ,IAAI,CAAC,GAAG,KAAK;AAC/B,cAAE,SAAS,QAAQ,KAAK,CAAC,KAAK,UAAU,CAAC,GAAG,KAAK,CAAC,CAAC;AAAA,UACrD;AAAA,QACF,OAAO;AACL,gBAAM,QAAQ,SAAS,IAAI,QAAQ;AACnC,cAAI,OAAO;AACT,kBAAM,IAAI,SAAS,KAAK;AACxB,cAAE,QAAQ,QAAQ,IAAI,eAAe,MAAM,YAAY;AACvD,cAAE,SAAS,OAAO,KAAK,CAAC,KAAK,UAAU,MAAM,YAAY,CAAC;AAAA,UAC5D;AAAA,QACF;AAAA,MACF;AAEA,YAAM,QAAQ,iBAAiB,IAAI,GAAG,KAAK,CAAC;AAC5C,iBAAW,OAAO,OAAO;AACvB,cAAM,OAAO,sBAAsB,KAAK,UAAU,GAAG,CAAC;AACtD,YAAI,SAAS,OAAW;AACxB,cAAM,MAAM,IAAI;AAChB,cAAM,IAAI,SAAS,IAAI,aAAa,aAAa;AACjD,UAAE,QAAQ,IAAI,MAAO,QAAQ,IAAI,KAAK;AACtC,sBAAc,EAAE,UAAU,KAAK,QAAQ;AAAA,MACzC;AAEA,UAAI,OAAO,SAAS,EAAG;AAEvB,YAAM,WAAW,YAAY,GAAG;AAChC,iBAAW,CAAC,OAAO,EAAE,SAAS,SAAS,CAAC,KAAK,QAAQ;AACnD,cAAM,QAAoC;AAAA,UACxC,WAAW;AAAA,UACX;AAAA,UACA,YAAY,IAAI;AAAA,QAClB;AACA,YAAI,aAAa,QAAW;AAC1B,gBAAM,WAAW;AAAA,QACnB;AACA,eAAO,KAAK,EAAE,OAAO,UAAU,KAAK,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,CAAC;AAAA,MACjE;AAAA,IACF;AAGA,eAAW,OAAO,KAAK,oBAAoB;AACzC,UAAI,EAAE,eAAe,wBAAyB;AAC9C,YAAM,MAAO,IAAsB;AACnC,UAAI,CAAC,OAAO,IAAI,MAAO;AACvB,YAAM,OAAO,sBAAsB,KAAsB,UAAU,GAAoB,CAAC;AACxF,UAAI,SAAS,OAAW;AACxB,YAAM,YAAa,IAAI,aAAa;AACpC,aAAO,KAAK;AAAA,QACV,OAAO,EAAE,WAAW,SAAS,KAAK,MAAiC;AAAA,QACnE,UAAU,KAAK;AAAA,QACf,KAAK,GAAG,SAAS,eAAe,cAAc,GAAG,CAAC;AAAA,MACpD,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AACF;AAEA,SAAS,UAAU,KAA+B,IAAyB;AACzE,MAAI,SAAS,IAAI,IAAI,EAAE;AACvB,MAAI,CAAC,QAAQ;AACX,aAAS,oBAAI,IAAI;AACjB,QAAI,IAAI,IAAI,MAAM;AAAA,EACpB;AACA,SAAO;AACT;AAEA,SAAS,kBAA6B;AACpC,SAAO,IAAI;AAAA,IACT;AAAA,EAEF;AACF;AAOA,SAAS,cAAc,UAAgC;AACrD,QAAM,SAAS,SAAS,OAAO,IAAI,CAAC,CAAC,KAAK,MAAM,KAAK,MAAM;AACzD,UAAM,QAAQ,cAAc,GAAG,EAAE,IAAI,IAAI;AACzC,WAAO,CAAC,KAAK,MAAM,QAAQ,MAAM,gBAAgB,KAAK;AAAA,EACxD,CAAC;AACD,QAAM,UAAU,SAAS,QAAQ,IAAI,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,MAAM,IAAI,cAAc,IAAI,CAAC,CAAU;AACnG,SAAO,MAAM;AACX,eAAW,CAAC,KAAK,MAAM,QAAQ,KAAK,OAAQ,eAAc,KAAK,MAAM,QAAQ;AAC7E,eAAW,CAAC,KAAK,MAAM,OAAO,KAAK,SAAS,QAAS,uBAAsB,KAAK,MAAM,OAAO;AAC7F,eAAW,CAAC,KAAK,MAAM,KAAK,KAAK,QAAS,KAAI,eAAe,MAAM,KAAK;AACxE,eAAW,CAAC,KAAK,GAAG,KAAK,SAAS,IAAK,KAAI,YAAY,GAAG;AAAA,EAC5D;AACF;AAGA,SAAS,eAAe,MAAqB,MAAmD;AAC9F,QAAM,WAAW,YAAY;AAC7B,QAAM,MAAM;AACZ,QAAM,UAAU,gBAAgB,IAAI;AACpC,aAAW,CAAC,UAAU,QAAQ,KAAK,MAAM;AACvC,QAAI,SAAS,SAAS;AACpB,YAAM,QAAQ,QAAQ,IAAI,QAAQ;AAClC,UAAI,SAAS,MAAM,SAAS,EAAG,UAAS,QAAQ,KAAK,CAAC,MAAM,UAAU,CAAC,GAAG,KAAK,CAAC,CAAC;AAAA,IACnF,OAAO;AACL,eAAS,OAAO,KAAK,CAAC,MAAM,UAAU,IAAI,QAAQ,CAAC,CAAC;AAAA,IACtD;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,oBACP,KACA,MACA,WAC4B;AAC5B,QAAM,UAAmC,CAAC;AAC1C,aAAW,CAAC,YAAY,KAAK,MAAM;AACjC,UAAM,QAAS,IAA2C,YAAY;AACtE,YAAQ,YAAY,IAAI,eAAe,KAAK;AAAA,EAC9C;AACA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,YAAY,IAAI;AAAA,EAClB;AACF;AAEA,SAAS,sBACP,KACA,WAC4B;AAE5B,QAAM,QAAQ,OAAO,eAAe,GAAG;AACvC,QAAM,SAAU,kBAAkB,KAAK,KAAK,cAAc,KAAK;AAC/D,QAAM,WAAY,IAA2C,MAAM;AACnE,QAAM,QAAoC;AAAA,IACxC;AAAA,IACA,SAAS,CAAC;AAAA,IACV,YAAY,IAAI;AAAA,EAClB;AACA,MAAI,OAAO,aAAa,UAAU;AAChC,UAAM,WAAW;AAAA,EACnB;AACA,SAAO;AACT;AAEA,SAAS,uBACP,KACA,MACA,QACM;AACN,QAAM,QAAQ,cAAc,GAAG;AAC/B,MAAI,MAAM,SAAS,EAAG;AAEtB,QAAM,UAAU,oBAAI,IAAsB;AAC1C,aAAW,CAAC,cAAc,QAAQ,KAAK,MAAM;AAC3C,QAAI,CAAC,MAAM,IAAI,YAAY,EAAG;AAC9B,QAAI,CAAC,SAAS,UAAW;AACzB,QAAI,SAAS,QAAQ,IAAI,SAAS,SAAS;AAC3C,QAAI,CAAC,QAAQ;AACX,eAAS,CAAC;AACV,cAAQ,IAAI,SAAS,WAAW,MAAM;AAAA,IACxC;AACA,WAAO,KAAK,YAAY;AAAA,EAC1B;AAEA,QAAM,aAAa,kBAAkB,OAAO,eAAe,GAAG,CAAC;AAC/D,QAAM,cAAc,aACf,IAA2C,UAAU,IACtD;AAEJ,aAAW,CAAC,WAAW,aAAa,KAAK,SAAS;AAChD,UAAM,UAAmC,CAAC;AAC1C,UAAM,WAAW,YAAY;AAC7B,eAAW,gBAAgB,eAAe;AACxC,YAAM,QAAQ,MAAM,IAAI,YAAY,EAAG;AACvC,cAAQ,YAAY,IAAI,eAAe,KAAK;AAC5C,eAAS,OAAO,KAAK,CAAC,KAAK,cAAc,KAAK,CAAC;AAAA,IACjD;AACA,UAAM,QAAoC;AAAA,MACxC;AAAA,MACA;AAAA,MACA,YAAY,IAAI;AAAA,IAClB;AACA,QAAI,OAAO,gBAAgB,UAAU;AACnC,YAAM,WAAW;AAAA,IACnB;AACA,WAAO,KAAK,EAAE,OAAO,UAAU,KAAK,GAAG,SAAS,IAAI,IAAI,OAAO,GAAG,CAAC;AAAA,EACrE;AACF;AAOA,SAAS,sBAAsB,KAAoB,SAAyC;AAC1F,QAAM,MAAM,IAAI;AAChB,QAAM,YAAY,IAAI,YAAY,UAAa,IAAI,YAAY;AAC/D,MAAI,UAAW,QAAO,kBAAkB,KAAK,GAAG;AAChD,SAAO,oBAAoB,KAAK,OAAO;AACzC;AAEA,SAAS,kBACP,KACA,KACkB;AAClB,QAAM,UAAU,IAAI;AACpB,QAAM,aACJ,OAAO,IAAI,YAAY,YAAa,IAAI,QAAgB;AAE1D,QAAM,MAAiB,CAAC;AACxB,aAAW,MAAM,SAAS;AACxB,QAAI,YAAY;AACd,UAAI,KAAK,GAAG,GAAG;AACf;AAAA,IACF;AACA,QAAI,GAAG,OAAO,OAAO;AACnB,UAAI,KAAK,EAAE,IAAI,OAAO,MAAM,GAAG,SAAS,CAAC;AAAA,IAC3C,WAAW,GAAG,OAAO,UAAU;AAC7B,UAAI,KAAK,EAAE,IAAI,UAAU,GAAG,sBAAsB,EAAE,EAAE,CAAC;AAAA,IACzD,OAAO;AACL,UAAI,KAAK,EAAE,IAAI,UAAU,GAAG,kBAAkB,GAAG,IAAI,GAAG,GAAG,GAAG,KAAK,CAAC;AAAA,IACtE;AAAA,EACF;AAEA,MAAI,IAAI,WAAW,EAAG,QAAO;AAC7B,QAAM,WAAW,YAAY;AAC7B,WAAS,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC;AACrC,SAAO,EAAE,OAAO,EAAE,IAAI,GAAG,SAAS;AACpC;AAGA,SAAS,sBAAsB,IAA2C;AACxE,QAAM,QAAQ,sBAAsB,OAAO,eAAe,GAAG,IAAI,CAAC;AAClE,SAAO,MAAM,WAAW,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,SAAS,IAAK,GAAG;AAChE;AAEA,SAAS,oBAAoB,KAAoB,SAAyC;AACxF,QAAM,QAAmB,CAAC;AAC1B,QAAM,UAAqB,CAAC;AAC5B,QAAM,UAAqB,CAAC;AAC5B,QAAM,WAAW,YAAY;AAE7B,QAAM,cAAc,CAAC,sBAAsB,GAAG;AAE9C,aAAW,QAAQ,IAAI,YAAY;AACjC,QAAI,CAAC,IAAI,cAAc,IAAI,GAAG;AAC5B,UAAI,gBAAgB,eAAe;AACjC,cAAM,KAAK,qBAAqB,IAAI,CAAC;AACrC,sBAAc,UAAU,eAAe,MAAM,iBAAiB,OAAO,eAAe,IAAI,CAAC,CAAC,CAAC;AAAA,MAC7F,OAAO;AACL,cAAM,KAAK,IAAI;AAAA,MACjB;AACA,eAAS,QAAQ,KAAK,CAAC,KAAK,IAAI,CAAC;AAAA,IACnC,WAAW,gBAAgB,eAAe;AACxC,YAAM,QAAQ,kBAAkB,MAAM,QAAQ;AAC9C,UAAI,MAAO,SAAQ,KAAK,KAAK;AAAA,IAC/B;AAAA,EACF;AAEA,aAAW,gBAAgB,IAAI,sBAAsB,GAAG;AACtD,QAAI,QAAQ,IAAI,YAAY,EAAG;AAC/B,YAAQ,KAAK,wBAAwB,gBAAgB,YAAY,YAAY,IAAI,YAAY;AAC7F,aAAS,QAAQ,KAAK,CAAC,KAAK,YAAY,CAAC;AAAA,EAC3C;AAEA,MAAI,MAAM,WAAW,KAAK,QAAQ,WAAW,KAAK,QAAQ,WAAW,GAAG;AACtE,WAAO;AAAA,EACT;AAEA,QAAM,OAAgC,EAAE,OAAO,QAAQ;AACvD,MAAI,CAAC,YAAa,MAAK,UAAU;AACjC,SAAO,EAAE,OAAO,MAAM,SAAS;AACjC;AAEA,SAAS,sBAAsB,KAA6B;AAC1D,aAAW,QAAQ,IAAI,YAAY;AACjC,QAAI,gBAAgB,cAAe,QAAO;AAAA,EAC5C;AACA,aAAW,QAAQ,IAAI,sBAAsB,GAAG;AAC9C,QAAI,gBAAgB,cAAe,QAAO;AAAA,EAC5C;AACA,SAAO;AACT;AAEA,SAAS,qBAAqB,MAA8C;AAC1E,QAAM,QAAQ,OAAO,eAAe,IAAI;AACxC,QAAM,OAAO,iBAAiB,KAAK;AACnC,QAAM,UAAU,sBAAsB,KAAK;AAC3C,QAAM,aAAa,kBAAkB,KAAK;AAC1C,QAAM,WAAoC,CAAC;AAE3C,QAAM,MAAM;AACZ,aAAW,UAAU,SAAS;AAC5B,QAAI,WAAW,YAAY;AACzB,eAAS,MAAM,IAAI;AAAA,IACrB,OAAO;AACL,eAAS,MAAM,IAAI,IAAI,MAAM;AAAA,IAC/B;AAAA,EACF;AACA,aAAW,CAAC,QAAQ,KAAK,MAAM;AAC7B,aAAS,QAAQ,IAAI,eAAe,IAAI,QAAQ,CAAC;AAAA,EACnD;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,MAAqB,UAAyD;AACvG,QAAM,QAAQ,cAAc,IAAI;AAChC,QAAM,UAAU,gBAAgB,IAAI;AACpC,MAAI,MAAM,SAAS,KAAK,QAAQ,SAAS,EAAG,QAAO;AAEnD,QAAM,QAAQ,OAAO,eAAe,IAAI;AACxC,QAAM,UAAU,sBAAsB,KAAK;AAC3C,QAAM,MAAM;AAEZ,QAAM,QAAiC,CAAC;AACxC,aAAW,UAAU,SAAS;AAC5B,UAAM,MAAM,IAAI,IAAI,MAAM;AAAA,EAC5B;AACA,aAAW,CAAC,UAAU,CAAC,KAAK,OAAO;AACjC,UAAM,QAAQ,IAAI,eAAe,EAAE,YAAY;AAC/C,aAAS,OAAO,KAAK,CAAC,MAAM,UAAU,EAAE,YAAY,CAAC;AAAA,EACvD;AACA,aAAW,CAAC,UAAU,KAAK,KAAK,SAAS;AACvC,UAAM,QAAQ,IAAI,CAAC,GAAG,KAAK;AAC3B,aAAS,QAAQ,KAAK,CAAC,MAAM,UAAU,CAAC,GAAG,KAAK,CAAC,CAAC;AAAA,EACpD;AACA,SAAO;AACT;AAEA,SAAS,eAAe,OAAyB;AAC/C,SAAO,UAAU,SAAY,OAAO;AACtC;;;ACr0BO,SAAS,aACd,WACA,OACA,SACA;AACA,QAAM,mBAAmB,QAAQ,WAAW,OAAO;AAAA,IACjD,gBAAgB,SAAS;AAAA,EAC3B,CAAC;AAcD,WAAS,UAAU,QAAa,SAAmB;AACjD,UAAM,SAAU,iBAAyB,QAAQ,OAAO;AACxD,UAAM,eAAe,OAAO,QAAQ,IAAI;AAExC,YAAQ,eAAe,WAA+B;AACpD,4BAAsB,OAAO,eAAe,IAAI,GAAG,cAAc;AAAA,QAC/D,WAAW,SAAS;AAAA,QACpB,SAAS,SAAS;AAAA,QAClB,gBAAgB,SAAS;AAAA,MAC3B,CAAC;AACD,mCAA6B,IAAI;AAAA,IACnC,CAAC;AAED,WAAO;AAAA,EACT;AAEA,SAAO;AACT;","names":["dependents","State","proto","idx","EventState","chains"]}