{"version":3,"file":"dnd5e.mjs","sources":["module/applications/advancement/advancement-config.mjs","module/applications/advancement/advancement-flow.mjs","module/data/fields.mjs","module/data/advancement/base-advancement.mjs","module/documents/advancement/advancement.mjs","module/applications/advancement/hit-points-config.mjs","module/applications/advancement/hit-points-flow.mjs","module/utils.mjs","module/documents/advancement/hit-points.mjs","module/applications/advancement/item-grant-config.mjs","module/applications/advancement/item-grant-flow.mjs","module/data/advancement/spell-config.mjs","module/data/advancement/item-grant.mjs","module/documents/advancement/item-grant.mjs","module/applications/advancement/item-choice-config.mjs","module/documents/actor/proficiency.mjs","module/dice/dice.mjs","module/applications/actor/short-rest.mjs","module/applications/actor/long-rest.mjs","module/documents/actor/trait.mjs","module/documents/actor/actor.mjs","module/applications/advancement/item-choice-flow.mjs","module/data/advancement/item-choice.mjs","module/documents/advancement/item-choice.mjs","module/data/advancement/scale-value.mjs","module/applications/advancement/scale-value-config.mjs","module/applications/advancement/scale-value-flow.mjs","module/documents/advancement/scale-value.mjs","module/config.mjs","module/module-art.mjs","module/settings.mjs","module/documents/active-effect.mjs","module/dice/simplify-roll-formula.mjs","module/applications/item/ability-use-dialog.mjs","module/documents/item.mjs","module/applications/actor/base-config.mjs","module/applications/actor/ability-config.mjs","module/applications/actor/armor-config.mjs","module/applications/actor/hit-dice-config.mjs","module/applications/actor/hit-points-config.mjs","module/applications/actor/initiative-config.mjs","module/applications/actor/movement-config.mjs","module/applications/actor/senses-config.mjs","module/applications/actor/sheet-flags.mjs","module/applications/actor/type-config.mjs","module/applications/advancement/advancement-confirmation-dialog.mjs","module/applications/advancement/advancement-manager.mjs","module/applications/property-attribution.mjs","module/applications/actor/trait-selector.mjs","module/applications/actor/proficiency-config.mjs","module/applications/actor/tool-selector.mjs","module/applications/actor/base-sheet.mjs","module/applications/actor/character-sheet.mjs","module/applications/actor/npc-sheet.mjs","module/applications/actor/vehicle-sheet.mjs","module/applications/actor/group-sheet.mjs","module/applications/actor/skill-config.mjs","module/applications/advancement/advancement-migration-dialog.mjs","module/applications/advancement/advancement-selection.mjs","module/applications/combat/combat-tracker.mjs","module/applications/trait-selector.mjs","module/applications/item/item-sheet.mjs","module/applications/journal/journal-editor.mjs","module/applications/journal/class-sheet.mjs","module/applications/journal/srd-compendium.mjs","module/applications/damage-trait-selector.mjs","module/applications/proficiency-selector.mjs","module/canvas/ability-template.mjs","module/canvas/token.mjs","module/canvas/grid.mjs","module/data/abstract.mjs","module/data/actor/templates/attributes.mjs","module/data/shared/currency.mjs","module/data/actor/templates/common.mjs","module/data/actor/templates/creature.mjs","module/data/actor/templates/details.mjs","module/data/actor/templates/traits.mjs","module/data/actor/character.mjs","module/data/actor/group.mjs","module/data/actor/npc.mjs","module/data/actor/vehicle.mjs","module/data/actor/_module.mjs","module/data/item/templates/item-description.mjs","module/data/item/background.mjs","module/data/item/class.mjs","module/data/item/templates/action.mjs","module/data/item/templates/activated-effect.mjs","module/data/item/templates/equippable-item.mjs","module/data/item/templates/physical-item.mjs","module/data/item/consumable.mjs","module/data/item/container.mjs","module/data/item/templates/mountable.mjs","module/data/item/equipment.mjs","module/data/item/feat.mjs","module/data/item/loot.mjs","module/data/item/spell.mjs","module/data/item/subclass.mjs","module/data/item/tool.mjs","module/data/item/weapon.mjs","module/data/item/_module.mjs","module/data/journal/class.mjs","module/data/journal/_module.mjs","module/dice/d20-roll.mjs","module/dice/damage-roll.mjs","module/documents/token.mjs","module/documents/chat-message.mjs","module/documents/combat.mjs","module/documents/macro.mjs","module/documents/_module.mjs","module/migration.mjs","dnd5e.mjs"],"sourcesContent":["/**\n * Base configuration application for advancements that can be extended by other types to implement custom\n * editing interfaces.\n *\n * @param {Advancement} advancement The advancement item being edited.\n * @param {object} [options={}] Additional options passed to FormApplication.\n * @param {string} [options.dropKeyPath=null] Path within advancement configuration where dropped items are stored.\n * If populated, will enable default drop & delete behavior.\n */\nexport default class AdvancementConfig extends FormApplication {\n constructor(advancement, options={}) {\n super(advancement, options);\n this.#advancementId = advancement.id;\n this.item = advancement.item;\n }\n\n /* -------------------------------------------- */\n\n /**\n * The ID of the advancement being created or edited.\n * @type {string}\n */\n #advancementId;\n\n /* -------------------------------------------- */\n\n /**\n * Parent item to which this advancement belongs.\n * @type {Item5e}\n */\n item;\n\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n classes: [\"dnd5e\", \"advancement\", \"dialog\"],\n template: \"systems/dnd5e/templates/advancement/advancement-config.hbs\",\n width: 400,\n height: \"auto\",\n submitOnChange: true,\n closeOnSubmit: false,\n dropKeyPath: null\n });\n }\n\n /* -------------------------------------------- */\n\n /**\n * The advancement being created or edited.\n * @type {Advancement}\n */\n get advancement() {\n return this.item.advancement.byId[this.#advancementId];\n }\n\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n get title() {\n const type = this.advancement.constructor.metadata.title;\n return `${game.i18n.format(\"DND5E.AdvancementConfigureTitle\", { item: this.item.name })}: ${type}`;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async close(options={}) {\n await super.close(options);\n delete this.advancement.apps[this.appId];\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n getData() {\n const levels = Object.fromEntries(Array.fromRange(CONFIG.DND5E.maxLevel + 1).map(l => [l, l]));\n if ( [\"class\", \"subclass\"].includes(this.item.type) ) delete levels[0];\n else levels[0] = game.i18n.localize(\"DND5E.AdvancementLevelAnyHeader\");\n const context = {\n CONFIG: CONFIG.DND5E,\n ...this.advancement.toObject(false),\n src: this.advancement.toObject(),\n default: {\n title: this.advancement.constructor.metadata.title,\n icon: this.advancement.constructor.metadata.icon\n },\n levels,\n showClassRestrictions: this.item.type === \"class\",\n showLevelSelector: !this.advancement.constructor.metadata.multiLevel\n };\n return context;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Perform any changes to configuration data before it is saved to the advancement.\n * @param {object} configuration Configuration object.\n * @returns {object} Modified configuration.\n */\n async prepareConfigurationUpdate(configuration) {\n return configuration;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n activateListeners(html) {\n super.activateListeners(html);\n\n // Remove an item from the list\n if ( this.options.dropKeyPath ) html.on(\"click\", \"[data-action='delete']\", this._onItemDelete.bind(this));\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n render(force=false, options={}) {\n this.advancement.apps[this.appId] = this;\n return super.render(force, options);\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async _updateObject(event, formData) {\n let updates = foundry.utils.expandObject(formData);\n if ( updates.configuration ) updates.configuration = await this.prepareConfigurationUpdate(updates.configuration);\n await this.advancement.update(updates);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Helper method to take an object and apply updates that remove any empty keys.\n * @param {object} object Object to be cleaned.\n * @returns {object} Copy of object with only non false-ish values included and others marked\n * using `-=` syntax to be removed by update process.\n * @protected\n */\n static _cleanedObject(object) {\n return Object.entries(object).reduce((obj, [key, value]) => {\n if ( value ) obj[key] = value;\n else obj[`-=${key}`] = null;\n return obj;\n }, {});\n }\n\n /* -------------------------------------------- */\n /* Drag & Drop for Item Pools */\n /* -------------------------------------------- */\n\n /**\n * Handle deleting an existing Item entry from the Advancement.\n * @param {Event} event The originating click event.\n * @returns {Promise} The updated parent Item after the application re-renders.\n * @protected\n */\n async _onItemDelete(event) {\n event.preventDefault();\n const uuidToDelete = event.currentTarget.closest(\"[data-item-uuid]\")?.dataset.itemUuid;\n if ( !uuidToDelete ) return;\n const items = foundry.utils.getProperty(this.advancement.configuration, this.options.dropKeyPath);\n const updates = { configuration: await this.prepareConfigurationUpdate({\n [this.options.dropKeyPath]: items.filter(uuid => uuid !== uuidToDelete)\n }) };\n await this.advancement.update(updates);\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n _canDragDrop() {\n return this.isEditable;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async _onDrop(event) {\n if ( !this.options.dropKeyPath ) throw new Error(\n \"AdvancementConfig#options.dropKeyPath must be configured or #_onDrop must be overridden to support\"\n + \" drag and drop on advancement config items.\"\n );\n\n // Try to extract the data\n const data = TextEditor.getDragEventData(event);\n\n if ( data?.type !== \"Item\" ) return false;\n const item = await Item.implementation.fromDropData(data);\n\n try {\n this._validateDroppedItem(event, item);\n } catch(err) {\n return ui.notifications.error(err.message);\n }\n\n const existingItems = foundry.utils.getProperty(this.advancement.configuration, this.options.dropKeyPath);\n\n // Abort if this uuid is the parent item\n if ( item.uuid === this.item.uuid ) {\n return ui.notifications.error(game.i18n.localize(\"DND5E.AdvancementItemGrantRecursiveWarning\"));\n }\n\n // Abort if this uuid exists already\n if ( existingItems.includes(item.uuid) ) {\n return ui.notifications.warn(game.i18n.localize(\"DND5E.AdvancementItemGrantDuplicateWarning\"));\n }\n\n await this.advancement.update({[`configuration.${this.options.dropKeyPath}`]: [...existingItems, item.uuid]});\n }\n\n /* -------------------------------------------- */\n\n /**\n * Called when an item is dropped to validate the Item before it is saved. An error should be thrown\n * if the item is invalid.\n * @param {Event} event Triggering drop event.\n * @param {Item5e} item The materialized Item that was dropped.\n * @throws An error if the item is invalid.\n * @protected\n */\n _validateDroppedItem(event, item) {}\n\n}\n","/**\n * Base class for the advancement interface displayed by the advancement prompt that should be subclassed by\n * individual advancement types.\n *\n * @param {Item5e} item Item to which the advancement belongs.\n * @param {string} advancementId ID of the advancement this flow modifies.\n * @param {number} level Level for which to configure this flow.\n * @param {object} [options={}] Application rendering options.\n */\nexport default class AdvancementFlow extends FormApplication {\n constructor(item, advancementId, level, options={}) {\n super({}, options);\n\n /**\n * The item that houses the Advancement.\n * @type {Item5e}\n */\n this.item = item;\n\n /**\n * ID of the advancement this flow modifies.\n * @type {string}\n * @private\n */\n this._advancementId = advancementId;\n\n /**\n * Level for which to configure this flow.\n * @type {number}\n */\n this.level = level;\n\n /**\n * Data retained by the advancement manager during a reverse step. If restoring data using Advancement#restore,\n * this data should be used when displaying the flow's form.\n * @type {object|null}\n */\n this.retainedData = null;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n template: \"systems/dnd5e/templates/advancement/advancement-flow.hbs\",\n popOut: false\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n get id() {\n return `actor-${this.advancement.item.id}-advancement-${this.advancement.id}-${this.level}`;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n get title() {\n return this.advancement.title;\n }\n\n /* -------------------------------------------- */\n\n /**\n * The Advancement object this flow modifies.\n * @type {Advancement|null}\n */\n get advancement() {\n return this.item.advancement?.byId[this._advancementId] ?? null;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n getData() {\n return {\n appId: this.id,\n advancement: this.advancement,\n type: this.advancement.constructor.typeName,\n title: this.title,\n summary: this.advancement.summaryForLevel(this.level),\n level: this.level\n };\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async _updateObject(event, formData) {\n await this.advancement.apply(this.level, formData);\n }\n\n}\n","/**\n * Data field that selects the appropriate advancement data model if available, otherwise defaults to generic\n * `ObjectField` to prevent issues with custom advancement types that aren't currently loaded.\n */\nexport class AdvancementField extends foundry.data.fields.ObjectField {\n\n /**\n * Get the BaseAdvancement definition for the specified advancement type.\n * @param {string} type The Advancement type.\n * @returns {typeof BaseAdvancement|null} The BaseAdvancement class, or null.\n */\n getModelForType(type) {\n return CONFIG.DND5E.advancementTypes[type] ?? null;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n _cleanType(value, options) {\n if ( !(typeof value === \"object\") ) value = {};\n\n const cls = this.getModelForType(value.type);\n if ( cls ) return cls.cleanData(value, options);\n return value;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n initialize(value, model, options={}) {\n const cls = this.getModelForType(value.type);\n if ( cls ) return new cls(value, {parent: model, ...options});\n return foundry.utils.deepClone(value);\n }\n}\n\n/* -------------------------------------------- */\n\n/**\n * Data field that automatically selects the Advancement-specific configuration or value data models.\n *\n * @param {Advancement} advancementType Advancement class to which this field belongs.\n */\nexport class AdvancementDataField extends foundry.data.fields.ObjectField {\n constructor(advancementType, options={}) {\n super(options);\n this.advancementType = advancementType;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static get _defaults() {\n return foundry.utils.mergeObject(super._defaults, {required: true});\n }\n\n /**\n * Get the DataModel definition for the specified field as defined in metadata.\n * @returns {typeof DataModel|null} The DataModel class, or null.\n */\n getModel() {\n return this.advancementType.metadata?.dataModels?.[this.name];\n }\n\n /* -------------------------------------------- */\n\n /**\n * Get the defaults object for the specified field as defined in metadata.\n * @returns {object}\n */\n getDefaults() {\n return this.advancementType.metadata?.defaults?.[this.name] ?? {};\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n _cleanType(value, options) {\n if ( !(typeof value === \"object\") ) value = {};\n\n // Use a defined DataModel\n const cls = this.getModel();\n if ( cls ) return cls.cleanData(value, options);\n if ( options.partial ) return value;\n\n // Use the defined defaults\n const defaults = this.getDefaults();\n return foundry.utils.mergeObject(defaults, value, {inplace: false});\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n initialize(value, model, options={}) {\n const cls = this.getModel();\n if ( cls ) return new cls(value, {parent: model, ...options});\n return foundry.utils.deepClone(value);\n }\n}\n\n/* -------------------------------------------- */\n\n/**\n * @typedef {StringFieldOptions} FormulaFieldOptions\n * @property {boolean} [deterministic=false] Is this formula not allowed to have dice values?\n */\n\n/**\n * Special case StringField which represents a formula.\n *\n * @param {FormulaFieldOptions} [options={}] Options which configure the behavior of the field.\n * @property {boolean} deterministic=false Is this formula not allowed to have dice values?\n */\nexport class FormulaField extends foundry.data.fields.StringField {\n\n /** @inheritdoc */\n static get _defaults() {\n return foundry.utils.mergeObject(super._defaults, {\n deterministic: false\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n _validateType(value) {\n if ( this.options.deterministic ) {\n const roll = new Roll(value);\n if ( !roll.isDeterministic ) throw new Error(\"must not contain dice terms\");\n Roll.safeEval(roll.formula);\n }\n else Roll.validate(value);\n super._validateType(value);\n }\n}\n\n/* -------------------------------------------- */\n\n/**\n * Special case StringField that includes automatic validation for identifiers.\n */\nexport class IdentifierField extends foundry.data.fields.StringField {\n /** @override */\n _validateType(value) {\n if ( !dnd5e.utils.validators.isValidIdentifier(value) ) {\n throw new Error(game.i18n.localize(\"DND5E.IdentifierError\"));\n }\n }\n}\n\n/* -------------------------------------------- */\n\n/**\n * @callback MappingFieldInitialValueBuilder\n * @param {string} key The key within the object where this new value is being generated.\n * @param {*} initial The generic initial data provided by the contained model.\n * @param {object} existing Any existing mapping data.\n * @returns {object} Value to use as default for this key.\n */\n\n/**\n * @typedef {DataFieldOptions} MappingFieldOptions\n * @property {string[]} [initialKeys] Keys that will be created if no data is provided.\n * @property {MappingFieldInitialValueBuilder} [initialValue] Function to calculate the initial value for a key.\n * @property {boolean} [initialKeysOnly=false] Should the keys in the initialized data be limited to the keys provided\n * by `options.initialKeys`?\n */\n\n/**\n * A subclass of ObjectField that represents a mapping of keys to the provided DataField type.\n *\n * @param {DataField} model The class of DataField which should be embedded in this field.\n * @param {MappingFieldOptions} [options={}] Options which configure the behavior of the field.\n * @property {string[]} [initialKeys] Keys that will be created if no data is provided.\n * @property {MappingFieldInitialValueBuilder} [initialValue] Function to calculate the initial value for a key.\n * @property {boolean} [initialKeysOnly=false] Should the keys in the initialized data be limited to the keys provided\n * by `options.initialKeys`?\n */\nexport class MappingField extends foundry.data.fields.ObjectField {\n constructor(model, options) {\n if ( !(model instanceof foundry.data.fields.DataField) ) {\n throw new Error(\"MappingField must have a DataField as its contained element\");\n }\n super(options);\n\n /**\n * The embedded DataField definition which is contained in this field.\n * @type {DataField}\n */\n this.model = model;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static get _defaults() {\n return foundry.utils.mergeObject(super._defaults, {\n initialKeys: null,\n initialValue: null,\n initialKeysOnly: false\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n _cleanType(value, options) {\n Object.entries(value).forEach(([k, v]) => value[k] = this.model.clean(v, options));\n return value;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n getInitialValue(data) {\n let keys = this.initialKeys;\n const initial = super.getInitialValue(data);\n if ( !keys || !foundry.utils.isEmpty(initial) ) return initial;\n if ( !(keys instanceof Array) ) keys = Object.keys(keys);\n for ( const key of keys ) initial[key] = this._getInitialValueForKey(key);\n return initial;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Get the initial value for the provided key.\n * @param {string} key Key within the object being built.\n * @param {object} [object] Any existing mapping data.\n * @returns {*} Initial value based on provided field type.\n */\n _getInitialValueForKey(key, object) {\n const initial = this.model.getInitialValue();\n return this.initialValue?.(key, initial, object) ?? initial;\n }\n\n /* -------------------------------------------- */\n\n /** @override */\n _validateType(value, options={}) {\n if ( foundry.utils.getType(value) !== \"Object\" ) throw new Error(\"must be an Object\");\n const errors = this._validateValues(value, options);\n if ( !foundry.utils.isEmpty(errors) ) throw new foundry.data.fields.ModelValidationError(errors);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Validate each value of the object.\n * @param {object} value The object to validate.\n * @param {object} options Validation options.\n * @returns {Object} An object of value-specific errors by key.\n */\n _validateValues(value, options) {\n const errors = {};\n for ( const [k, v] of Object.entries(value) ) {\n const error = this.model.validate(v, options);\n if ( error ) errors[k] = error;\n }\n return errors;\n }\n\n /* -------------------------------------------- */\n\n /** @override */\n initialize(value, model, options={}) {\n if ( !value ) return value;\n const obj = {};\n const initialKeys = (this.initialKeys instanceof Array) ? this.initialKeys : Object.keys(this.initialKeys ?? {});\n const keys = this.initialKeysOnly ? initialKeys : Object.keys(value);\n for ( const key of keys ) {\n const data = value[key] ?? this._getInitialValueForKey(key, value);\n obj[key] = this.model.initialize(data, model, options);\n }\n return obj;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n _getField(path) {\n if ( path.length === 0 ) return this;\n else if ( path.length === 1 ) return this.model;\n path.shift();\n return this.model._getField(path);\n }\n}\n","import { AdvancementDataField } from \"../fields.mjs\";\n\nexport default class BaseAdvancement extends foundry.abstract.DataModel {\n\n /**\n * Name of this advancement type that will be stored in config and used for lookups.\n * @type {string}\n * @protected\n */\n static get typeName() {\n return this.name.replace(/Advancement$/, \"\");\n }\n\n /* -------------------------------------------- */\n\n static defineSchema() {\n return {\n _id: new foundry.data.fields.DocumentIdField({initial: () => foundry.utils.randomID()}),\n type: new foundry.data.fields.StringField({\n required: true, initial: this.typeName, validate: v => v === this.typeName,\n validationError: `must be the same as the Advancement type name ${this.typeName}`\n }),\n configuration: new AdvancementDataField(this, {required: true}),\n value: new AdvancementDataField(this, {required: true}),\n level: new foundry.data.fields.NumberField({\n integer: true, initial: this.metadata?.multiLevel ? undefined : 1, min: 0, label: \"DND5E.Level\"\n }),\n title: new foundry.data.fields.StringField({initial: undefined, label: \"DND5E.AdvancementCustomTitle\"}),\n icon: new foundry.data.fields.FilePathField({\n initial: undefined, categories: [\"IMAGE\"], label: \"DND5E.AdvancementCustomIcon\"\n }),\n classRestriction: new foundry.data.fields.StringField({\n initial: undefined, choices: [\"primary\", \"secondary\"], label: \"DND5E.AdvancementClassRestriction\"\n })\n };\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n toObject(source=true) {\n if ( !source ) return super.toObject(source);\n const clone = foundry.utils.deepClone(this._source);\n // Remove any undefined keys from the source data\n Object.keys(clone).filter(k => clone[k] === undefined).forEach(k => delete clone[k]);\n return clone;\n }\n}\n","import AdvancementConfig from \"../../applications/advancement/advancement-config.mjs\";\nimport AdvancementFlow from \"../../applications/advancement/advancement-flow.mjs\";\nimport BaseAdvancement from \"../../data/advancement/base-advancement.mjs\";\n\n/**\n * Error that can be thrown during the advancement update preparation process.\n */\nclass AdvancementError extends Error {\n constructor(...args) {\n super(...args);\n this.name = \"AdvancementError\";\n }\n}\n\n/**\n * Abstract base class which various advancement types can subclass.\n * @param {Item5e} item Item to which this advancement belongs.\n * @param {object} [data={}] Raw data stored in the advancement object.\n * @param {object} [options={}] Options which affect DataModel construction.\n * @abstract\n */\nexport default class Advancement extends BaseAdvancement {\n constructor(data, {parent=null, ...options}={}) {\n if ( parent instanceof Item ) parent = parent.system;\n super(data, {parent, ...options});\n\n /**\n * A collection of Application instances which should be re-rendered whenever this document is updated.\n * The keys of this object are the application ids and the values are Application instances. Each\n * Application in this object will have its render method called by {@link Document#render}.\n * @type {Object}\n */\n Object.defineProperty(this, \"apps\", {\n value: {},\n writable: false,\n enumerable: false\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n _initialize(options) {\n super._initialize(options);\n return this.prepareData();\n }\n\n static ERROR = AdvancementError;\n\n /* -------------------------------------------- */\n\n /**\n * Information on how an advancement type is configured.\n *\n * @typedef {object} AdvancementMetadata\n * @property {object} dataModels\n * @property {DataModel} configuration Data model used for validating configuration data.\n * @property {DataModel} value Data model used for validating value data.\n * @property {number} order Number used to determine default sorting order of advancement items.\n * @property {string} icon Icon used for this advancement type if no user icon is specified.\n * @property {string} title Title to be displayed if no user title is specified.\n * @property {string} hint Description of this type shown in the advancement selection dialog.\n * @property {boolean} multiLevel Can this advancement affect more than one level? If this is set to true,\n * the level selection control in the configuration window is hidden and the\n * advancement should provide its own implementation of `Advancement#levels`\n * and potentially its own level configuration interface.\n * @property {Set} validItemTypes Set of types to which this advancement can be added.\n * @property {object} apps\n * @property {*} apps.config Subclass of AdvancementConfig that allows for editing of this advancement type.\n * @property {*} apps.flow Subclass of AdvancementFlow that is displayed while fulfilling this advancement.\n */\n\n /**\n * Configuration information for this advancement type.\n * @type {AdvancementMetadata}\n */\n static get metadata() {\n return {\n order: 100,\n icon: \"icons/svg/upgrade.svg\",\n title: game.i18n.localize(\"DND5E.AdvancementTitle\"),\n hint: \"\",\n multiLevel: false,\n validItemTypes: new Set([\"background\", \"class\", \"subclass\"]),\n apps: {\n config: AdvancementConfig,\n flow: AdvancementFlow\n }\n };\n }\n\n /* -------------------------------------------- */\n /* Instance Properties */\n /* -------------------------------------------- */\n\n /**\n * Unique identifier for this advancement within its item.\n * @type {string}\n */\n get id() {\n return this._id;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Globally unique identifier for this advancement.\n * @type {string}\n */\n get uuid() {\n return `${this.item.uuid}.Advancement.${this.id}`;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Item to which this advancement belongs.\n * @type {Item5e}\n */\n get item() {\n return this.parent.parent;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Actor to which this advancement's item belongs, if the item is embedded.\n * @type {Actor5e|null}\n */\n get actor() {\n return this.item.parent ?? null;\n }\n\n /* -------------------------------------------- */\n\n /**\n * List of levels in which this advancement object should be displayed. Will be a list of class levels if this\n * advancement is being applied to classes or subclasses, otherwise a list of character levels.\n * @returns {number[]}\n */\n get levels() {\n return this.level !== undefined ? [this.level] : [];\n }\n\n /* -------------------------------------------- */\n\n /**\n * Should this advancement be applied to a class based on its class restriction setting? This will always return\n * true for advancements that are not within an embedded class item.\n * @type {boolean}\n * @protected\n */\n get appliesToClass() {\n const originalClass = this.item.isOriginalClass;\n return (originalClass === null) || !this.classRestriction\n || (this.classRestriction === \"primary\" && originalClass)\n || (this.classRestriction === \"secondary\" && !originalClass);\n }\n\n /* -------------------------------------------- */\n /* Preparation Methods */\n /* -------------------------------------------- */\n\n /**\n * Prepare data for the Advancement.\n */\n prepareData() {\n this.title = this.title || this.constructor.metadata.title;\n this.icon = this.icon || this.constructor.metadata.icon;\n }\n\n /* -------------------------------------------- */\n /* Display Methods */\n /* -------------------------------------------- */\n\n /**\n * Has the player made choices for this advancement at the specified level?\n * @param {number} level Level for which to check configuration.\n * @returns {boolean} Have any available choices been made?\n */\n configuredForLevel(level) {\n return true;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Value used for sorting this advancement at a certain level.\n * @param {number} level Level for which this entry is being sorted.\n * @returns {string} String that can be used for sorting.\n */\n sortingValueForLevel(level) {\n return `${this.constructor.metadata.order.paddedString(4)} ${this.titleForLevel(level)}`;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Title displayed in advancement list for a specific level.\n * @param {number} level Level for which to generate a title.\n * @param {object} [options={}]\n * @param {object} [options.configMode=false] Is the advancement's item sheet in configuration mode? When in\n * config mode, the choices already made on this actor should not\n * be displayed.\n * @returns {string} HTML title with any level-specific information.\n */\n titleForLevel(level, { configMode=false }={}) {\n return this.title;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Summary content displayed beneath the title in the advancement list.\n * @param {number} level Level for which to generate the summary.\n * @param {object} [options={}]\n * @param {object} [options.configMode=false] Is the advancement's item sheet in configuration mode? When in\n * config mode, the choices already made on this actor should not\n * be displayed.\n * @returns {string} HTML content of the summary.\n */\n summaryForLevel(level, { configMode=false }={}) {\n return \"\";\n }\n\n /* -------------------------------------------- */\n\n /**\n * Render all of the Application instances which are connected to this advancement.\n * @param {boolean} [force=false] Force rendering\n * @param {object} [context={}] Optional context\n */\n render(force=false, context={}) {\n for ( const app of Object.values(this.apps) ) app.render(force, context);\n }\n\n /* -------------------------------------------- */\n /* Editing Methods */\n /* -------------------------------------------- */\n\n /**\n * Update this advancement.\n * @param {object} updates Updates to apply to this advancement.\n * @returns {Promise} This advancement after updates have been applied.\n */\n async update(updates) {\n await this.item.updateAdvancement(this.id, updates);\n return this;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Update this advancement's data on the item without performing a database commit.\n * @param {object} updates Updates to apply to this advancement.\n * @returns {Advancement} This advancement after updates have been applied.\n */\n updateSource(updates) {\n super.updateSource(updates);\n return this;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Can an advancement of this type be added to the provided item?\n * @param {Item5e} item Item to check against.\n * @returns {boolean} Should this be enabled as an option on the `AdvancementSelection` dialog?\n */\n static availableForItem(item) {\n return true;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Serialize salient information for this Advancement when dragging it.\n * @returns {object} An object of drag data.\n */\n toDragData() {\n const dragData = { type: \"Advancement\" };\n if ( this.id ) dragData.uuid = this.uuid;\n else dragData.data = this.toObject();\n return dragData;\n }\n\n /* -------------------------------------------- */\n /* Application Methods */\n /* -------------------------------------------- */\n\n /**\n * Locally apply this advancement to the actor.\n * @param {number} level Level being advanced.\n * @param {object} data Data from the advancement form.\n * @abstract\n */\n async apply(level, data) { }\n\n /* -------------------------------------------- */\n\n /**\n * Locally apply this advancement from stored data, if possible. If stored data can not be restored for any reason,\n * throw an AdvancementError to display the advancement flow UI.\n * @param {number} level Level being advanced.\n * @param {object} data Data from `Advancement#reverse` needed to restore this advancement.\n * @abstract\n */\n async restore(level, data) { }\n\n /* -------------------------------------------- */\n\n /**\n * Locally remove this advancement's changes from the actor.\n * @param {number} level Level being removed.\n * @returns {object} Data that can be passed to the `Advancement#restore` method to restore this reversal.\n * @abstract\n */\n async reverse(level) { }\n\n}\n","import AdvancementConfig from \"./advancement-config.mjs\";\n\n/**\n * Configuration application for hit points.\n */\nexport default class HitPointsConfig extends AdvancementConfig {\n\n /** @inheritdoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n template: \"systems/dnd5e/templates/advancement/hit-points-config.hbs\"\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n getData() {\n return foundry.utils.mergeObject(super.getData(), {\n hitDie: this.advancement.hitDie\n });\n }\n}\n","import AdvancementFlow from \"./advancement-flow.mjs\";\nimport Advancement from \"../../documents/advancement/advancement.mjs\";\n\n/**\n * Inline application that presents hit points selection upon level up.\n */\nexport default class HitPointsFlow extends AdvancementFlow {\n\n /** @inheritdoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n template: \"systems/dnd5e/templates/advancement/hit-points-flow.hbs\"\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n getData() {\n const source = this.retainedData ?? this.advancement.value;\n const value = source[this.level];\n\n // If value is empty, `useAverage` should default to the value selected at the previous level\n let useAverage = value === \"avg\";\n if ( !value ) {\n const lastValue = source[this.level - 1];\n if ( lastValue === \"avg\" ) useAverage = true;\n }\n\n return foundry.utils.mergeObject(super.getData(), {\n isFirstClassLevel: (this.level === 1) && this.advancement.item.isOriginalClass,\n hitDie: this.advancement.hitDie,\n dieValue: this.advancement.hitDieValue,\n data: {\n value: Number.isInteger(value) ? value : \"\",\n useAverage\n }\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n activateListeners(html) {\n this.form.querySelector(\".averageCheckbox\")?.addEventListener(\"change\", event => {\n this.form.querySelector(\".rollResult\").disabled = event.target.checked;\n this.form.querySelector(\".rollButton\").disabled = event.target.checked;\n this._updateRollResult();\n });\n this.form.querySelector(\".rollButton\")?.addEventListener(\"click\", async () => {\n const roll = await this.advancement.actor.rollClassHitPoints(this.advancement.item);\n this.form.querySelector(\".rollResult\").value = roll.total;\n });\n this._updateRollResult();\n }\n\n /* -------------------------------------------- */\n\n /**\n * Update the roll result display when the average result is taken.\n * @protected\n */\n _updateRollResult() {\n if ( !this.form.elements.useAverage?.checked ) return;\n this.form.elements.value.value = (this.advancement.hitDieValue / 2) + 1;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n _updateObject(event, formData) {\n let value;\n if ( formData.useMax ) value = \"max\";\n else if ( formData.useAverage ) value = \"avg\";\n else if ( Number.isInteger(formData.value) ) value = parseInt(formData.value);\n\n if ( value !== undefined ) return this.advancement.apply(this.level, { [this.level]: value });\n\n this.form.querySelector(\".rollResult\")?.classList.add(\"error\");\n const errorType = formData.value ? \"Invalid\" : \"Empty\";\n throw new Advancement.ERROR(game.i18n.localize(`DND5E.AdvancementHitPoints${errorType}Error`));\n }\n\n}\n","/* -------------------------------------------- */\n/* Formulas */\n/* -------------------------------------------- */\n\n/**\n * Convert a bonus value to a simple integer for displaying on the sheet.\n * @param {number|string|null} bonus Bonus formula.\n * @param {object} [data={}] Data to use for replacing @ strings.\n * @returns {number} Simplified bonus as an integer.\n * @protected\n */\nexport function simplifyBonus(bonus, data={}) {\n if ( !bonus ) return 0;\n if ( Number.isNumeric(bonus) ) return Number(bonus);\n try {\n const roll = new Roll(bonus, data);\n return roll.isDeterministic ? Roll.safeEval(roll.formula) : 0;\n } catch(error) {\n console.error(error);\n return 0;\n }\n}\n\n/* -------------------------------------------- */\n/* Object Helpers */\n/* -------------------------------------------- */\n\n/**\n * Sort the provided object by its values or by an inner sortKey.\n * @param {object} obj The object to sort.\n * @param {string} [sortKey] An inner key upon which to sort.\n * @returns {object} A copy of the original object that has been sorted.\n */\nexport function sortObjectEntries(obj, sortKey) {\n let sorted = Object.entries(obj);\n if ( sortKey ) sorted = sorted.sort((a, b) => a[1][sortKey].localeCompare(b[1][sortKey]));\n else sorted = sorted.sort((a, b) => a[1].localeCompare(b[1]));\n return Object.fromEntries(sorted);\n}\n\n/* -------------------------------------------- */\n\n/**\n * Retrieve the indexed data for a Document using its UUID. Will never return a result for embedded documents.\n * @param {string} uuid The UUID of the Document index to retrieve.\n * @returns {object} Document's index if one could be found.\n */\nexport function indexFromUuid(uuid) {\n const parts = uuid.split(\".\");\n let index;\n\n // Compendium Documents\n if ( parts[0] === \"Compendium\" ) {\n const [, scope, packName, id] = parts;\n const pack = game.packs.get(`${scope}.${packName}`);\n index = pack?.index.get(id);\n }\n\n // World Documents\n else if ( parts.length < 3 ) {\n const [docName, id] = parts;\n const collection = CONFIG[docName].collection.instance;\n index = collection.get(id);\n }\n\n return index || null;\n}\n\n/* -------------------------------------------- */\n\n/**\n * Creates an HTML document link for the provided UUID.\n * @param {string} uuid UUID for which to produce the link.\n * @returns {string} Link to the item or empty string if item wasn't found.\n */\nexport function linkForUuid(uuid) {\n return TextEditor._createContentLink([\"\", \"UUID\", uuid]).outerHTML;\n}\n\n/* -------------------------------------------- */\n/* Validators */\n/* -------------------------------------------- */\n\n/**\n * Ensure the provided string contains only the characters allowed in identifiers.\n * @param {string} identifier\n * @returns {boolean}\n */\nfunction isValidIdentifier(identifier) {\n return /^([a-z0-9_-]+)$/i.test(identifier);\n}\n\nexport const validators = {\n isValidIdentifier: isValidIdentifier\n};\n\n/* -------------------------------------------- */\n/* Handlebars Template Helpers */\n/* -------------------------------------------- */\n\n/**\n * Define a set of template paths to pre-load. Pre-loaded templates are compiled and cached for fast access when\n * rendering. These paths will also be available as Handlebars partials by using the file name\n * (e.g. \"dnd5e.actor-traits\").\n * @returns {Promise}\n */\nexport async function preloadHandlebarsTemplates() {\n const partials = [\n // Shared Partials\n \"systems/dnd5e/templates/actors/parts/active-effects.hbs\",\n \"systems/dnd5e/templates/apps/parts/trait-list.hbs\",\n\n // Actor Sheet Partials\n \"systems/dnd5e/templates/actors/parts/actor-traits.hbs\",\n \"systems/dnd5e/templates/actors/parts/actor-inventory.hbs\",\n \"systems/dnd5e/templates/actors/parts/actor-features.hbs\",\n \"systems/dnd5e/templates/actors/parts/actor-spellbook.hbs\",\n \"systems/dnd5e/templates/actors/parts/actor-warnings.hbs\",\n\n // Item Sheet Partials\n \"systems/dnd5e/templates/items/parts/item-action.hbs\",\n \"systems/dnd5e/templates/items/parts/item-activation.hbs\",\n \"systems/dnd5e/templates/items/parts/item-advancement.hbs\",\n \"systems/dnd5e/templates/items/parts/item-description.hbs\",\n \"systems/dnd5e/templates/items/parts/item-mountable.hbs\",\n \"systems/dnd5e/templates/items/parts/item-spellcasting.hbs\",\n \"systems/dnd5e/templates/items/parts/item-summary.hbs\",\n\n // Journal Partials\n \"systems/dnd5e/templates/journal/parts/journal-table.hbs\",\n\n // Advancement Partials\n \"systems/dnd5e/templates/advancement/parts/advancement-controls.hbs\",\n \"systems/dnd5e/templates/advancement/parts/advancement-spell-config.hbs\"\n ];\n\n const paths = {};\n for ( const path of partials ) {\n paths[path.replace(\".hbs\", \".html\")] = path;\n paths[`dnd5e.${path.split(\"/\").pop().replace(\".hbs\", \"\")}`] = path;\n }\n\n return loadTemplates(paths);\n}\n\n/* -------------------------------------------- */\n\n/**\n * A helper that fetch the appropriate item context from root and adds it to the first block parameter.\n * @param {object} context Current evaluation context.\n * @param {object} options Handlebars options.\n * @returns {string}\n */\nfunction itemContext(context, options) {\n if ( arguments.length !== 2 ) throw new Error(\"#dnd5e-itemContext requires exactly one argument\");\n if ( foundry.utils.getType(context) === \"function\" ) context = context.call(this);\n\n const ctx = options.data.root.itemContext?.[context.id];\n if ( !ctx ) {\n const inverse = options.inverse(this);\n if ( inverse ) return options.inverse(this);\n }\n\n return options.fn(context, { data: options.data, blockParams: [ctx] });\n}\n\n/* -------------------------------------------- */\n\n/**\n * Register custom Handlebars helpers used by 5e.\n */\nexport function registerHandlebarsHelpers() {\n Handlebars.registerHelper({\n getProperty: foundry.utils.getProperty,\n \"dnd5e-linkForUuid\": linkForUuid,\n \"dnd5e-itemContext\": itemContext\n });\n}\n\n/* -------------------------------------------- */\n/* Config Pre-Localization */\n/* -------------------------------------------- */\n\n/**\n * Storage for pre-localization configuration.\n * @type {object}\n * @private\n */\nconst _preLocalizationRegistrations = {};\n\n/**\n * Mark the provided config key to be pre-localized during the init stage.\n * @param {string} configKeyPath Key path within `CONFIG.DND5E` to localize.\n * @param {object} [options={}]\n * @param {string} [options.key] If each entry in the config enum is an object,\n * localize and sort using this property.\n * @param {string[]} [options.keys=[]] Array of localization keys. First key listed will be used for sorting\n * if multiple are provided.\n * @param {boolean} [options.sort=false] Sort this config enum, using the key if set.\n */\nexport function preLocalize(configKeyPath, { key, keys=[], sort=false }={}) {\n if ( key ) keys.unshift(key);\n _preLocalizationRegistrations[configKeyPath] = { keys, sort };\n}\n\n/* -------------------------------------------- */\n\n/**\n * Execute previously defined pre-localization tasks on the provided config object.\n * @param {object} config The `CONFIG.DND5E` object to localize and sort. *Will be mutated.*\n */\nexport function performPreLocalization(config) {\n for ( const [keyPath, settings] of Object.entries(_preLocalizationRegistrations) ) {\n const target = foundry.utils.getProperty(config, keyPath);\n _localizeObject(target, settings.keys);\n if ( settings.sort ) foundry.utils.setProperty(config, keyPath, sortObjectEntries(target, settings.keys[0]));\n }\n}\n\n/* -------------------------------------------- */\n\n/**\n * Localize the values of a configuration object by translating them in-place.\n * @param {object} obj The configuration object to localize.\n * @param {string[]} [keys] List of inner keys that should be localized if this is an object.\n * @private\n */\nfunction _localizeObject(obj, keys) {\n for ( const [k, v] of Object.entries(obj) ) {\n const type = typeof v;\n if ( type === \"string\" ) {\n obj[k] = game.i18n.localize(v);\n continue;\n }\n\n if ( type !== \"object\" ) {\n console.error(new Error(\n `Pre-localized configuration values must be a string or object, ${type} found for \"${k}\" instead.`\n ));\n continue;\n }\n if ( !keys?.length ) {\n console.error(new Error(\n \"Localization keys must be provided for pre-localizing when target is an object.\"\n ));\n continue;\n }\n\n for ( const key of keys ) {\n if ( !v[key] ) continue;\n v[key] = game.i18n.localize(v[key]);\n }\n }\n}\n\n/* -------------------------------------------- */\n/* Migration */\n/* -------------------------------------------- */\n\n/**\n * Synchronize the spells for all Actors in some collection with source data from an Item compendium pack.\n * @param {CompendiumCollection} actorPack An Actor compendium pack which will be updated\n * @param {CompendiumCollection} spellsPack An Item compendium pack which provides source data for spells\n * @returns {Promise}\n */\nexport async function synchronizeActorSpells(actorPack, spellsPack) {\n\n // Load all actors and spells\n const actors = await actorPack.getDocuments();\n const spells = await spellsPack.getDocuments();\n const spellsMap = spells.reduce((obj, item) => {\n obj[item.name] = item;\n return obj;\n }, {});\n\n // Unlock the pack\n await actorPack.configure({locked: false});\n\n // Iterate over actors\n SceneNavigation.displayProgressBar({label: \"Synchronizing Spell Data\", pct: 0});\n for ( const [i, actor] of actors.entries() ) {\n const {toDelete, toCreate} = _synchronizeActorSpells(actor, spellsMap);\n if ( toDelete.length ) await actor.deleteEmbeddedDocuments(\"Item\", toDelete);\n if ( toCreate.length ) await actor.createEmbeddedDocuments(\"Item\", toCreate, {keepId: true});\n console.debug(`${actor.name} | Synchronized ${toCreate.length} spells`);\n SceneNavigation.displayProgressBar({label: actor.name, pct: ((i / actors.length) * 100).toFixed(0)});\n }\n\n // Re-lock the pack\n await actorPack.configure({locked: true});\n SceneNavigation.displayProgressBar({label: \"Synchronizing Spell Data\", pct: 100});\n}\n\n/* -------------------------------------------- */\n\n/**\n * A helper function to synchronize spell data for a specific Actor.\n * @param {Actor5e} actor\n * @param {Object} spellsMap\n * @returns {{toDelete: string[], toCreate: object[]}}\n * @private\n */\nfunction _synchronizeActorSpells(actor, spellsMap) {\n const spells = actor.itemTypes.spell;\n const toDelete = [];\n const toCreate = [];\n if ( !spells.length ) return {toDelete, toCreate};\n\n for ( const spell of spells ) {\n const source = spellsMap[spell.name];\n if ( !source ) {\n console.warn(`${actor.name} | ${spell.name} | Does not exist in spells compendium pack`);\n continue;\n }\n\n // Combine source data with the preparation and uses data from the actor\n const spellData = source.toObject();\n const {preparation, uses, save} = spell.toObject().system;\n Object.assign(spellData.system, {preparation, uses});\n spellData.system.save.dc = save.dc;\n foundry.utils.setProperty(spellData, \"flags.core.sourceId\", source.uuid);\n\n // Record spells to be deleted and created\n toDelete.push(spell.id);\n toCreate.push(spellData);\n }\n return {toDelete, toCreate};\n}\n","import Advancement from \"./advancement.mjs\";\nimport HitPointsConfig from \"../../applications/advancement/hit-points-config.mjs\";\nimport HitPointsFlow from \"../../applications/advancement/hit-points-flow.mjs\";\nimport { simplifyBonus } from \"../../utils.mjs\";\n\n/**\n * Advancement that presents the player with the option to roll hit points at each level or select the average value.\n * Keeps track of player hit point rolls or selection for each class level. **Can only be added to classes and each\n * class can only have one.**\n */\nexport default class HitPointsAdvancement extends Advancement {\n\n /** @inheritdoc */\n static get metadata() {\n return foundry.utils.mergeObject(super.metadata, {\n order: 10,\n icon: \"systems/dnd5e/icons/svg/hit-points.svg\",\n title: game.i18n.localize(\"DND5E.AdvancementHitPointsTitle\"),\n hint: game.i18n.localize(\"DND5E.AdvancementHitPointsHint\"),\n multiLevel: true,\n validItemTypes: new Set([\"class\"]),\n apps: {\n config: HitPointsConfig,\n flow: HitPointsFlow\n }\n });\n }\n\n /* -------------------------------------------- */\n /* Instance Properties */\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n get levels() {\n return Array.fromRange(CONFIG.DND5E.maxLevel + 1).slice(1);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Shortcut to the hit die used by the class.\n * @returns {string}\n */\n get hitDie() {\n return this.item.system.hitDice;\n }\n\n /* -------------------------------------------- */\n\n /**\n * The face value of the hit die used.\n * @returns {number}\n */\n get hitDieValue() {\n return Number(this.hitDie.substring(1));\n }\n\n /* -------------------------------------------- */\n /* Display Methods */\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n configuredForLevel(level) {\n return this.valueForLevel(level) !== null;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n titleForLevel(level, { configMode=false }={}) {\n const hp = this.valueForLevel(level);\n if ( !hp || configMode ) return this.title;\n return `${this.title}: ${hp}`;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Hit points given at the provided level.\n * @param {number} level Level for which to get hit points.\n * @returns {number|null} Hit points for level or null if none have been taken.\n */\n valueForLevel(level) {\n return this.constructor.valueForLevel(this.value, this.hitDieValue, level);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Hit points given at the provided level.\n * @param {object} data Contents of `value` used to determine this value.\n * @param {number} hitDieValue Face value of the hit die used by this advancement.\n * @param {number} level Level for which to get hit points.\n * @returns {number|null} Hit points for level or null if none have been taken.\n */\n static valueForLevel(data, hitDieValue, level) {\n const value = data[level];\n if ( !value ) return null;\n\n if ( value === \"max\" ) return hitDieValue;\n if ( value === \"avg\" ) return (hitDieValue / 2) + 1;\n return value;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Total hit points provided by this advancement.\n * @returns {number} Hit points currently selected.\n */\n total() {\n return Object.keys(this.value).reduce((total, level) => total + this.valueForLevel(parseInt(level)), 0);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Total hit points taking the provided ability modifier into account, with a minimum of 1 per level.\n * @param {number} mod Modifier to add per level.\n * @returns {number} Total hit points plus modifier.\n */\n getAdjustedTotal(mod) {\n return Object.keys(this.value).reduce((total, level) => {\n return total + Math.max(this.valueForLevel(parseInt(level)) + mod, 1);\n }, 0);\n }\n\n /* -------------------------------------------- */\n /* Editing Methods */\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static availableForItem(item) {\n return !item.advancement.byType.HitPoints?.length;\n }\n\n /* -------------------------------------------- */\n /* Application Methods */\n /* -------------------------------------------- */\n\n /**\n * Add the ability modifier and any bonuses to the provided hit points value to get the number to apply.\n * @param {number} value Hit points taken at a given level.\n * @returns {number} Hit points adjusted with ability modifier and per-level bonuses.\n */\n #getApplicableValue(value) {\n const abilityId = CONFIG.DND5E.hitPointsAbility || \"con\";\n value = Math.max(value + (this.actor.system.abilities[abilityId]?.mod ?? 0), 1);\n value += simplifyBonus(this.actor.system.attributes.hp.bonuses.level, this.actor.getRollData());\n return value;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n apply(level, data) {\n let value = this.constructor.valueForLevel(data, this.hitDieValue, level);\n if ( value === undefined ) return;\n this.actor.updateSource({\n \"system.attributes.hp.value\": this.actor.system.attributes.hp.value + this.#getApplicableValue(value)\n });\n this.updateSource({ value: data });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n restore(level, data) {\n this.apply(level, data);\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n reverse(level) {\n let value = this.valueForLevel(level);\n if ( value === undefined ) return;\n this.actor.updateSource({\n \"system.attributes.hp.value\": this.actor.system.attributes.hp.value - this.#getApplicableValue(value)\n });\n const source = { [level]: this.value[level] };\n this.updateSource({ [`value.-=${level}`]: null });\n return source;\n }\n}\n","import AdvancementConfig from \"./advancement-config.mjs\";\n\n/**\n * Configuration application for item grants.\n */\nexport default class ItemGrantConfig extends AdvancementConfig {\n\n /** @inheritdoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n classes: [\"dnd5e\", \"advancement\", \"item-grant\"],\n dragDrop: [{ dropSelector: \".drop-target\" }],\n dropKeyPath: \"items\",\n template: \"systems/dnd5e/templates/advancement/item-grant-config.hbs\"\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n getData(options={}) {\n const context = super.getData(options);\n context.showSpellConfig = context.configuration.items.map(uuid => fromUuidSync(uuid)).some(i => i?.type === \"spell\");\n return context;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n _validateDroppedItem(event, item) {\n this.advancement._validateItemType(item);\n }\n}\n","import AdvancementFlow from \"./advancement-flow.mjs\";\n\n/**\n * Inline application that presents the player with a list of items to be added.\n */\nexport default class ItemGrantFlow extends AdvancementFlow {\n\n /** @inheritdoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n template: \"systems/dnd5e/templates/advancement/item-grant-flow.hbs\"\n });\n }\n\n /* -------------------------------------------- */\n\n /**\n * Produce the rendering context for this flow.\n * @returns {object}\n */\n async getContext() {\n const config = this.advancement.configuration.items;\n const added = this.retainedData?.items.map(i => foundry.utils.getProperty(i, \"flags.dnd5e.sourceId\"))\n ?? this.advancement.value.added;\n const checked = new Set(Object.values(added ?? {}));\n return {\n optional: this.advancement.configuration.optional,\n items: (await Promise.all(config.map(uuid => fromUuid(uuid)))).reduce((arr, item) => {\n if ( !item ) return arr;\n item.checked = added ? checked.has(item.uuid) : true;\n arr.push(item);\n return arr;\n }, [])\n };\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async getData(options={}) {\n return foundry.utils.mergeObject(super.getData(options), await this.getContext());\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n activateListeners(html) {\n super.activateListeners(html);\n html.find(\"a[data-uuid]\").click(this._onClickFeature.bind(this));\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle clicking on a feature during item grant to preview the feature.\n * @param {MouseEvent} event The triggering event.\n * @protected\n */\n async _onClickFeature(event) {\n event.preventDefault();\n const uuid = event.currentTarget.dataset.uuid;\n const item = await fromUuid(uuid);\n item?.sheet.render(true);\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async _updateObject(event, formData) {\n const retainedData = this.retainedData?.items.reduce((obj, i) => {\n obj[foundry.utils.getProperty(i, \"flags.dnd5e.sourceId\")] = i;\n return obj;\n }, {});\n await this.advancement.apply(this.level, formData, retainedData);\n }\n}\n","import { FormulaField } from \"../fields.mjs\";\n\nexport default class SpellConfigurationData extends foundry.abstract.DataModel {\n static defineSchema() {\n return {\n ability: new foundry.data.fields.StringField({label: \"DND5E.AbilityModifier\"}),\n preparation: new foundry.data.fields.StringField({label: \"DND5E.SpellPreparationMode\"}),\n uses: new foundry.data.fields.SchemaField({\n max: new FormulaField({deterministic: true, label: \"DND5E.UsesMax\"}),\n per: new foundry.data.fields.StringField({label: \"DND5E.UsesPeriod\"})\n }, {label: \"DND5E.LimitedUses\"})\n };\n }\n\n /* -------------------------------------------- */\n\n /**\n * Changes that this spell configuration indicates should be performed on spells.\n * @type {object}\n */\n get spellChanges() {\n const updates = {};\n if ( this.ability ) updates[\"system.ability\"] = this.ability;\n if ( this.preparation ) updates[\"system.preparation.mode\"] = this.preparation;\n if ( this.uses.max && this.uses.per ) {\n updates[\"system.uses.max\"] = this.uses.max;\n updates[\"system.uses.per\"] = this.uses.per;\n if ( Number.isNumeric(this.uses.max) ) updates[\"system.uses.value\"] = parseInt(this.uses.max);\n else {\n try {\n const rollData = this.parent.parent.actor.getRollData({ deterministic: true });\n const formula = Roll.replaceFormulaData(this.uses.max, rollData, {missing: 0});\n updates[\"system.uses.value\"] = Roll.safeEval(formula);\n } catch(e) { }\n }\n }\n return updates;\n }\n}\n","import SpellConfigurationData from \"./spell-config.mjs\";\n\nexport default class ItemGrantConfigurationData extends foundry.abstract.DataModel {\n /** @inheritdoc */\n static defineSchema() {\n return {\n items: new foundry.data.fields.ArrayField(new foundry.data.fields.StringField(), {\n required: true, label: \"DOCUMENT.Items\"\n }),\n optional: new foundry.data.fields.BooleanField({\n required: true, label: \"DND5E.AdvancementItemGrantOptional\", hint: \"DND5E.AdvancementItemGrantOptionalHint\"\n }),\n spell: new foundry.data.fields.EmbeddedDataField(SpellConfigurationData, {\n required: true, nullable: true, initial: null\n })\n };\n }\n}\n","import Advancement from \"./advancement.mjs\";\nimport ItemGrantConfig from \"../../applications/advancement/item-grant-config.mjs\";\nimport ItemGrantFlow from \"../../applications/advancement/item-grant-flow.mjs\";\nimport ItemGrantConfigurationData from \"../../data/advancement/item-grant.mjs\";\n\n/**\n * Advancement that automatically grants one or more items to the player. Presents the player with the option of\n * skipping any or all of the items.\n */\nexport default class ItemGrantAdvancement extends Advancement {\n\n /** @inheritdoc */\n static get metadata() {\n return foundry.utils.mergeObject(super.metadata, {\n dataModels: {\n configuration: ItemGrantConfigurationData\n },\n order: 40,\n icon: \"systems/dnd5e/icons/svg/item-grant.svg\",\n title: game.i18n.localize(\"DND5E.AdvancementItemGrantTitle\"),\n hint: game.i18n.localize(\"DND5E.AdvancementItemGrantHint\"),\n apps: {\n config: ItemGrantConfig,\n flow: ItemGrantFlow\n }\n });\n }\n\n /* -------------------------------------------- */\n\n /**\n * The item types that are supported in Item Grant.\n * @type {Set}\n */\n static VALID_TYPES = new Set([\"feat\", \"spell\", \"consumable\", \"backpack\", \"equipment\", \"loot\", \"tool\", \"weapon\"]);\n\n /* -------------------------------------------- */\n /* Display Methods */\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n configuredForLevel(level) {\n return !foundry.utils.isEmpty(this.value);\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n summaryForLevel(level, { configMode=false }={}) {\n // Link to compendium items\n if ( !this.value.added || configMode ) {\n return this.configuration.items.reduce((html, uuid) => html + dnd5e.utils.linkForUuid(uuid), \"\");\n }\n\n // Link to items on the actor\n else {\n return Object.keys(this.value.added).map(id => {\n const item = this.actor.items.get(id);\n return item?.toAnchor({classes: [\"content-link\"]}).outerHTML ?? \"\";\n }).join(\"\");\n }\n }\n\n /* -------------------------------------------- */\n /* Application Methods */\n /* -------------------------------------------- */\n\n /**\n * Location where the added items are stored for the specified level.\n * @param {number} level Level being advanced.\n * @returns {string}\n */\n storagePath(level) {\n return \"value.added\";\n }\n\n /* -------------------------------------------- */\n\n /**\n * Locally apply this advancement to the actor.\n * @param {number} level Level being advanced.\n * @param {object} data Data from the advancement form.\n * @param {object} [retainedData={}] Item data grouped by UUID. If present, this data will be used rather than\n * fetching new data from the source.\n */\n async apply(level, data, retainedData={}) {\n const items = [];\n const updates = {};\n const spellChanges = this.configuration.spell?.spellChanges ?? {};\n for ( const [uuid, selected] of Object.entries(data) ) {\n if ( !selected ) continue;\n\n let itemData = retainedData[uuid];\n if ( !itemData ) {\n const source = await fromUuid(uuid);\n if ( !source ) continue;\n itemData = source.clone({\n _id: foundry.utils.randomID(),\n \"flags.dnd5e.sourceId\": uuid,\n \"flags.dnd5e.advancementOrigin\": `${this.item.id}.${this.id}`\n }, {keepId: true}).toObject();\n }\n if ( itemData.type === \"spell\" ) foundry.utils.mergeObject(itemData, spellChanges);\n\n items.push(itemData);\n updates[itemData._id] = uuid;\n }\n this.actor.updateSource({items});\n this.updateSource({[this.storagePath(level)]: updates});\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n restore(level, data) {\n const updates = {};\n for ( const item of data.items ) {\n this.actor.updateSource({items: [item]});\n updates[item._id] = item.flags.dnd5e.sourceId;\n }\n this.updateSource({[this.storagePath(level)]: updates});\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n reverse(level) {\n const items = [];\n const keyPath = this.storagePath(level);\n for ( const id of Object.keys(foundry.utils.getProperty(this, keyPath) ?? {}) ) {\n const item = this.actor.items.get(id);\n if ( item ) items.push(item.toObject());\n this.actor.items.delete(id);\n }\n this.updateSource({[keyPath.replace(/\\.([\\w\\d]+)$/, \".-=$1\")]: null});\n return { items };\n }\n\n /* -------------------------------------------- */\n\n /**\n * Verify that the provided item can be used with this advancement based on the configuration.\n * @param {Item5e} item Item that needs to be tested.\n * @param {object} config\n * @param {boolean} [config.strict=true] Should an error be thrown when an invalid type is encountered?\n * @returns {boolean} Is this type valid?\n * @throws An error if the item is invalid and strict is `true`.\n */\n _validateItemType(item, { strict=true }={}) {\n if ( this.constructor.VALID_TYPES.has(item.type) ) return true;\n const type = game.i18n.localize(CONFIG.Item.typeLabels[item.type]);\n if ( strict ) throw new Error(game.i18n.format(\"DND5E.AdvancementItemTypeInvalidWarning\", {type}));\n return false;\n }\n}\n","import AdvancementConfig from \"./advancement-config.mjs\";\n\n/**\n * Configuration application for item choices.\n */\nexport default class ItemChoiceConfig extends AdvancementConfig {\n\n /** @inheritdoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n classes: [\"dnd5e\", \"advancement\", \"item-choice\", \"two-column\"],\n dragDrop: [{ dropSelector: \".drop-target\" }],\n dropKeyPath: \"pool\",\n template: \"systems/dnd5e/templates/advancement/item-choice-config.hbs\",\n width: 540\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n getData(options={}) {\n const context = {\n ...super.getData(options),\n showSpellConfig: this.advancement.configuration.type === \"spell\",\n validTypes: this.advancement.constructor.VALID_TYPES.reduce((obj, type) => {\n obj[type] = game.i18n.localize(CONFIG.Item.typeLabels[type]);\n return obj;\n }, {})\n };\n if ( this.advancement.configuration.type === \"feat\" ) {\n const selectedType = CONFIG.DND5E.featureTypes[this.advancement.configuration.restriction.type];\n context.typeRestriction = {\n typeLabel: game.i18n.localize(\"DND5E.ItemFeatureType\"),\n typeOptions: CONFIG.DND5E.featureTypes,\n subtypeLabel: game.i18n.format(\"DND5E.ItemFeatureSubtype\", {category: selectedType?.label}),\n subtypeOptions: selectedType?.subtypes\n };\n }\n return context;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async prepareConfigurationUpdate(configuration) {\n if ( configuration.choices ) configuration.choices = this.constructor._cleanedObject(configuration.choices);\n\n // Ensure items are still valid if type restriction or spell restriction are changed\n const pool = [];\n for ( const uuid of (configuration.pool ?? this.advancement.configuration.pool) ) {\n if ( this.advancement._validateItemType(await fromUuid(uuid), {\n type: configuration.type, restriction: configuration.restriction ?? {}, strict: false\n }) ) pool.push(uuid);\n }\n configuration.pool = pool;\n\n return configuration;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n _validateDroppedItem(event, item) {\n this.advancement._validateItemType(item);\n }\n}\n","/**\n * Object describing the proficiency for a specific ability or skill.\n *\n * @param {number} proficiency Actor's flat proficiency bonus based on their current level.\n * @param {number} multiplier Value by which to multiply the actor's base proficiency value.\n * @param {boolean} [roundDown] Should half-values be rounded up or down?\n */\nexport default class Proficiency {\n constructor(proficiency, multiplier, roundDown=true) {\n\n /**\n * Base proficiency value of the actor.\n * @type {number}\n * @private\n */\n this._baseProficiency = Number(proficiency ?? 0);\n\n /**\n * Value by which to multiply the actor's base proficiency value.\n * @type {number}\n */\n this.multiplier = Number(multiplier ?? 0);\n\n /**\n * Direction decimal results should be rounded (\"up\" or \"down\").\n * @type {string}\n */\n this.rounding = roundDown ? \"down\" : \"up\";\n }\n\n /* -------------------------------------------- */\n\n /**\n * Calculate an actor's proficiency modifier based on level or CR.\n * @param {number} level Level or CR To use for calculating proficiency modifier.\n * @returns {number} Proficiency modifier.\n */\n static calculateMod(level) {\n return Math.floor((level + 7) / 4);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Flat proficiency value regardless of proficiency mode.\n * @type {number}\n */\n get flat() {\n const roundMethod = (this.rounding === \"down\") ? Math.floor : Math.ceil;\n return roundMethod(this.multiplier * this._baseProficiency);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Dice-based proficiency value regardless of proficiency mode.\n * @type {string}\n */\n get dice() {\n if ( (this._baseProficiency === 0) || (this.multiplier === 0) ) return \"0\";\n const roundTerm = (this.rounding === \"down\") ? \"floor\" : \"ceil\";\n if ( this.multiplier === 0.5 ) {\n return `${roundTerm}(1d${this._baseProficiency * 2} / 2)`;\n } else {\n return `${this.multiplier}d${this._baseProficiency * 2}`;\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * Either flat or dice proficiency term based on configured setting.\n * @type {string}\n */\n get term() {\n return (game.settings.get(\"dnd5e\", \"proficiencyModifier\") === \"dice\") ? this.dice : String(this.flat);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Whether the proficiency is greater than zero.\n * @type {boolean}\n */\n get hasProficiency() {\n return (this._baseProficiency > 0) && (this.multiplier > 0);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Override the default `toString` method to return flat proficiency for backwards compatibility in formula.\n * @returns {string} Flat proficiency value.\n */\n toString() {\n return this.term;\n }\n}\n","/* -------------------------------------------- */\n/* D20 Roll */\n/* -------------------------------------------- */\n\n/**\n * Configuration data for a D20 roll.\n *\n * @typedef {object} D20RollConfiguration\n *\n * @property {string[]} [parts=[]] The dice roll component parts, excluding the initial d20.\n * @property {object} [data={}] Data that will be used when parsing this roll.\n * @property {Event} [event] The triggering event for this roll.\n *\n * ## D20 Properties\n * @property {boolean} [advantage] Apply advantage to this roll (unless overridden by modifier keys or dialog)?\n * @property {boolean} [disadvantage] Apply disadvantage to this roll (unless overridden by modifier keys or dialog)?\n * @property {number|null} [critical=20] The value of the d20 result which represents a critical success,\n * `null` will prevent critical successes.\n * @property {number|null} [fumble=1] The value of the d20 result which represents a critical failure,\n * `null` will prevent critical failures.\n * @property {number} [targetValue] The value of the d20 result which should represent a successful roll.\n *\n * ## Flags\n * @property {boolean} [elvenAccuracy] Allow Elven Accuracy to modify this roll?\n * @property {boolean} [halflingLucky] Allow Halfling Luck to modify this roll?\n * @property {boolean} [reliableTalent] Allow Reliable Talent to modify this roll?\n *\n * ## Roll Configuration Dialog\n * @property {boolean} [fastForward] Should the roll configuration dialog be skipped?\n * @property {boolean} [chooseModifier=false] If the configuration dialog is shown, should the ability modifier be\n * configurable within that interface?\n * @property {string} [template] The HTML template used to display the roll configuration dialog.\n * @property {string} [title] Title of the roll configuration dialog.\n * @property {object} [dialogOptions] Additional options passed to the roll configuration dialog.\n *\n * ## Chat Message\n * @property {boolean} [chatMessage=true] Should a chat message be created for this roll?\n * @property {object} [messageData={}] Additional data which is applied to the created chat message.\n * @property {string} [rollMode] Value of `CONST.DICE_ROLL_MODES` to apply as default for the chat message.\n * @property {object} [flavor] Flavor text to use in the created chat message.\n */\n\n/**\n * A standardized helper function for managing core 5e d20 rolls.\n * Holding SHIFT, ALT, or CTRL when the attack is rolled will \"fast-forward\".\n * This chooses the default options of a normal attack with no bonus, Advantage, or Disadvantage respectively\n *\n * @param {D20RollConfiguration} configuration Configuration data for the D20 roll.\n * @returns {Promise} The evaluated D20Roll, or null if the workflow was cancelled.\n */\nexport async function d20Roll({\n parts=[], data={}, event,\n advantage, disadvantage, critical=20, fumble=1, targetValue,\n elvenAccuracy, halflingLucky, reliableTalent,\n fastForward, chooseModifier=false, template, title, dialogOptions,\n chatMessage=true, messageData={}, rollMode, flavor\n}={}) {\n\n // Handle input arguments\n const formula = [\"1d20\"].concat(parts).join(\" + \");\n const {advantageMode, isFF} = CONFIG.Dice.D20Roll.determineAdvantageMode({\n advantage, disadvantage, fastForward, event\n });\n const defaultRollMode = rollMode || game.settings.get(\"core\", \"rollMode\");\n if ( chooseModifier && !isFF ) {\n data.mod = \"@mod\";\n if ( \"abilityCheckBonus\" in data ) data.abilityCheckBonus = \"@abilityCheckBonus\";\n }\n\n // Construct the D20Roll instance\n const roll = new CONFIG.Dice.D20Roll(formula, data, {\n flavor: flavor || title,\n advantageMode,\n defaultRollMode,\n rollMode,\n critical,\n fumble,\n targetValue,\n elvenAccuracy,\n halflingLucky,\n reliableTalent\n });\n\n // Prompt a Dialog to further configure the D20Roll\n if ( !isFF ) {\n const configured = await roll.configureDialog({\n title,\n chooseModifier,\n defaultRollMode,\n defaultAction: advantageMode,\n defaultAbility: data?.item?.ability || data?.defaultAbility,\n template\n }, dialogOptions);\n if ( configured === null ) return null;\n } else roll.options.rollMode ??= defaultRollMode;\n\n // Evaluate the configured roll\n await roll.evaluate({async: true});\n\n // Create a Chat Message\n if ( roll && chatMessage ) await roll.toMessage(messageData);\n return roll;\n}\n\n/* -------------------------------------------- */\n/* Damage Roll */\n/* -------------------------------------------- */\n\n/**\n * Configuration data for a damage roll.\n *\n * @typedef {object} DamageRollConfiguration\n *\n * @property {string[]} [parts=[]] The dice roll component parts.\n * @property {object} [data={}] Data that will be used when parsing this roll.\n * @property {Event} [event] The triggering event for this roll.\n *\n * ## Critical Handling\n * @property {boolean} [allowCritical=true] Is this damage roll allowed to be rolled as critical?\n * @property {boolean} [critical] Apply critical to this roll (unless overridden by modifier key or dialog)?\n * @property {number} [criticalBonusDice] A number of bonus damage dice that are added for critical hits.\n * @property {number} [criticalMultiplier] Multiplier to use when calculating critical damage.\n * @property {boolean} [multiplyNumeric] Should numeric terms be multiplied when this roll criticals?\n * @property {boolean} [powerfulCritical] Should the critical dice be maximized rather than rolled?\n * @property {string} [criticalBonusDamage] An extra damage term that is applied only on a critical hit.\n *\n * ## Roll Configuration Dialog\n * @property {boolean} [fastForward] Should the roll configuration dialog be skipped?\n * @property {string} [template] The HTML template used to render the roll configuration dialog.\n * @property {string} [title] Title of the roll configuration dialog.\n * @property {object} [dialogOptions] Additional options passed to the roll configuration dialog.\n *\n * ## Chat Message\n * @property {boolean} [chatMessage=true] Should a chat message be created for this roll?\n * @property {object} [messageData={}] Additional data which is applied to the created chat message.\n * @property {string} [rollMode] Value of `CONST.DICE_ROLL_MODES` to apply as default for the chat message.\n * @property {string} [flavor] Flavor text to use in the created chat message.\n */\n\n/**\n * A standardized helper function for managing core 5e damage rolls.\n * Holding SHIFT, ALT, or CTRL when the attack is rolled will \"fast-forward\".\n * This chooses the default options of a normal attack with no bonus, Critical, or no bonus respectively\n *\n * @param {DamageRollConfiguration} configuration Configuration data for the Damage roll.\n * @returns {Promise} The evaluated DamageRoll, or null if the workflow was canceled.\n */\nexport async function damageRoll({\n parts=[], data={}, event,\n allowCritical=true, critical, criticalBonusDice, criticalMultiplier,\n multiplyNumeric, powerfulCritical, criticalBonusDamage,\n fastForward, template, title, dialogOptions,\n chatMessage=true, messageData={}, rollMode, flavor\n}={}) {\n\n // Handle input arguments\n const defaultRollMode = rollMode || game.settings.get(\"core\", \"rollMode\");\n\n // Construct the DamageRoll instance\n const formula = parts.join(\" + \");\n const {isCritical, isFF} = _determineCriticalMode({critical, fastForward, event});\n const roll = new CONFIG.Dice.DamageRoll(formula, data, {\n flavor: flavor || title,\n rollMode,\n critical: isFF ? isCritical : false,\n criticalBonusDice,\n criticalMultiplier,\n criticalBonusDamage,\n multiplyNumeric: multiplyNumeric ?? game.settings.get(\"dnd5e\", \"criticalDamageModifiers\"),\n powerfulCritical: powerfulCritical ?? game.settings.get(\"dnd5e\", \"criticalDamageMaxDice\")\n });\n\n // Prompt a Dialog to further configure the DamageRoll\n if ( !isFF ) {\n const configured = await roll.configureDialog({\n title,\n defaultRollMode: defaultRollMode,\n defaultCritical: isCritical,\n template,\n allowCritical\n }, dialogOptions);\n if ( configured === null ) return null;\n }\n\n // Evaluate the configured roll\n await roll.evaluate({async: true});\n\n // Create a Chat Message\n if ( roll && chatMessage ) await roll.toMessage(messageData);\n return roll;\n}\n\n/* -------------------------------------------- */\n\n/**\n * Determines whether this d20 roll should be fast-forwarded, and whether advantage or disadvantage should be applied\n * @param {object} [config]\n * @param {Event} [config.event] Event that triggered the roll.\n * @param {boolean} [config.critical] Is this roll treated as a critical by default?\n * @param {boolean} [config.fastForward] Should the roll dialog be skipped?\n * @returns {{isFF: boolean, isCritical: boolean}} Whether the roll is fast-forward, and whether it is a critical hit\n */\nfunction _determineCriticalMode({event, critical=false, fastForward}={}) {\n const isFF = fastForward ?? (event && (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey));\n if ( event?.altKey ) critical = true;\n return {isFF: !!isFF, isCritical: critical};\n}\n","/**\n * A helper Dialog subclass for rolling Hit Dice on short rest.\n *\n * @param {Actor5e} actor Actor that is taking the short rest.\n * @param {object} [dialogData={}] An object of dialog data which configures how the modal window is rendered.\n * @param {object} [options={}] Dialog rendering options.\n */\nexport default class ShortRestDialog extends Dialog {\n constructor(actor, dialogData={}, options={}) {\n super(dialogData, options);\n\n /**\n * Store a reference to the Actor document which is resting\n * @type {Actor}\n */\n this.actor = actor;\n\n /**\n * Track the most recently used HD denomination for re-rendering the form\n * @type {string}\n */\n this._denom = null;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n template: \"systems/dnd5e/templates/apps/short-rest.hbs\",\n classes: [\"dnd5e\", \"dialog\"]\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n getData() {\n const data = super.getData();\n\n // Determine Hit Dice\n data.availableHD = this.actor.items.reduce((hd, item) => {\n if ( item.type === \"class\" ) {\n const {levels, hitDice, hitDiceUsed} = item.system;\n const denom = hitDice ?? \"d6\";\n const available = parseInt(levels ?? 1) - parseInt(hitDiceUsed ?? 0);\n hd[denom] = denom in hd ? hd[denom] + available : available;\n }\n return hd;\n }, {});\n data.canRoll = this.actor.system.attributes.hd > 0;\n data.denomination = this._denom;\n\n // Determine rest type\n const variant = game.settings.get(\"dnd5e\", \"restVariant\");\n data.promptNewDay = variant !== \"epic\"; // It's never a new day when only resting 1 minute\n data.newDay = false; // It may be a new day, but not by default\n return data;\n }\n\n /* -------------------------------------------- */\n\n\n /** @inheritDoc */\n activateListeners(html) {\n super.activateListeners(html);\n let btn = html.find(\"#roll-hd\");\n btn.click(this._onRollHitDie.bind(this));\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle rolling a Hit Die as part of a Short Rest action\n * @param {Event} event The triggering click event\n * @protected\n */\n async _onRollHitDie(event) {\n event.preventDefault();\n const btn = event.currentTarget;\n this._denom = btn.form.hd.value;\n await this.actor.rollHitDie(this._denom);\n this.render();\n }\n\n /* -------------------------------------------- */\n\n /**\n * A helper constructor function which displays the Short Rest dialog and returns a Promise once it's workflow has\n * been resolved.\n * @param {object} [options={}]\n * @param {Actor5e} [options.actor] Actor that is taking the short rest.\n * @returns {Promise} Promise that resolves when the rest is completed or rejects when canceled.\n */\n static async shortRestDialog({ actor }={}) {\n return new Promise((resolve, reject) => {\n const dlg = new this(actor, {\n title: `${game.i18n.localize(\"DND5E.ShortRest\")}: ${actor.name}`,\n buttons: {\n rest: {\n icon: '',\n label: game.i18n.localize(\"DND5E.Rest\"),\n callback: html => {\n let newDay = false;\n if ( game.settings.get(\"dnd5e\", \"restVariant\") !== \"epic\" ) {\n newDay = html.find('input[name=\"newDay\"]')[0].checked;\n }\n resolve(newDay);\n }\n },\n cancel: {\n icon: '',\n label: game.i18n.localize(\"Cancel\"),\n callback: reject\n }\n },\n close: reject\n });\n dlg.render(true);\n });\n }\n}\n","/**\n * A helper Dialog subclass for completing a long rest.\n *\n * @param {Actor5e} actor Actor that is taking the long rest.\n * @param {object} [dialogData={}] An object of dialog data which configures how the modal window is rendered.\n * @param {object} [options={}] Dialog rendering options.\n */\nexport default class LongRestDialog extends Dialog {\n constructor(actor, dialogData={}, options={}) {\n super(dialogData, options);\n this.actor = actor;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n template: \"systems/dnd5e/templates/apps/long-rest.hbs\",\n classes: [\"dnd5e\", \"dialog\"]\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n getData() {\n const data = super.getData();\n const variant = game.settings.get(\"dnd5e\", \"restVariant\");\n data.promptNewDay = variant !== \"gritty\"; // It's always a new day when resting 1 week\n data.newDay = variant === \"normal\"; // It's probably a new day when resting normally (8 hours)\n return data;\n }\n\n /* -------------------------------------------- */\n\n /**\n * A helper constructor function which displays the Long Rest confirmation dialog and returns a Promise once it's\n * workflow has been resolved.\n * @param {object} [options={}]\n * @param {Actor5e} [options.actor] Actor that is taking the long rest.\n * @returns {Promise} Promise that resolves when the rest is completed or rejects when canceled.\n */\n static async longRestDialog({ actor } = {}) {\n return new Promise((resolve, reject) => {\n const dlg = new this(actor, {\n title: `${game.i18n.localize(\"DND5E.LongRest\")}: ${actor.name}`,\n buttons: {\n rest: {\n icon: '',\n label: game.i18n.localize(\"DND5E.Rest\"),\n callback: html => {\n let newDay = true;\n if (game.settings.get(\"dnd5e\", \"restVariant\") !== \"gritty\") {\n newDay = html.find('input[name=\"newDay\"]')[0].checked;\n }\n resolve(newDay);\n }\n },\n cancel: {\n icon: '',\n label: game.i18n.localize(\"Cancel\"),\n callback: reject\n }\n },\n default: \"rest\",\n close: reject\n });\n dlg.render(true);\n });\n }\n}\n","/**\n * Cached version of the base items compendia indices with the needed subtype fields.\n * @type {object}\n * @private\n */\nconst _cachedIndices = {};\n\n/* -------------------------------------------- */\n/* Trait Lists */\n/* -------------------------------------------- */\n\n/**\n * Get the key path to the specified trait on an actor.\n * @param {string} trait Trait as defined in `CONFIG.DND5E.traits`.\n * @returns {string} Key path to this trait's object within an actor's system data.\n */\nexport function actorKeyPath(trait) {\n const traitConfig = CONFIG.DND5E.traits[trait];\n if ( traitConfig.actorKeyPath ) return traitConfig.actorKeyPath;\n return `traits.${trait}`;\n}\n\n/* -------------------------------------------- */\n\n/**\n * Fetch the categories object for the specified trait.\n * @param {string} trait Trait as defined in `CONFIG.DND5E.traits`.\n * @returns {object} Trait categories defined within `CONFIG.DND5E`.\n */\nexport function categories(trait) {\n const traitConfig = CONFIG.DND5E.traits[trait];\n return CONFIG.DND5E[traitConfig.configKey ?? trait];\n}\n\n/* -------------------------------------------- */\n\n/**\n * Get a list of choices for a specific trait.\n * @param {string} trait Trait as defined in `CONFIG.DND5E.traits`.\n * @param {Set} [chosen=[]] Optional list of keys to be marked as chosen.\n * @returns {object} Object mapping proficiency ids to choice objects.\n */\nexport async function choices(trait, chosen=new Set()) {\n const traitConfig = CONFIG.DND5E.traits[trait];\n if ( foundry.utils.getType(chosen) === \"Array\" ) chosen = new Set(chosen);\n\n let data = Object.entries(categories(trait)).reduce((obj, [key, label]) => {\n obj[key] = { label, chosen: chosen.has(key) };\n return obj;\n }, {});\n\n if ( traitConfig.children ) {\n for ( const [categoryKey, childrenKey] of Object.entries(traitConfig.children) ) {\n const children = CONFIG.DND5E[childrenKey];\n if ( !children || !data[categoryKey] ) continue;\n data[categoryKey].children = Object.entries(children).reduce((obj, [key, label]) => {\n obj[key] = { label, chosen: chosen.has(key) };\n return obj;\n }, {});\n }\n }\n\n if ( traitConfig.subtypes ) {\n const keyPath = `system.${traitConfig.subtypes.keyPath}`;\n const map = CONFIG.DND5E[`${trait}ProficienciesMap`];\n\n // Merge all IDs lists together\n const ids = traitConfig.subtypes.ids.reduce((obj, key) => {\n if ( CONFIG.DND5E[key] ) Object.assign(obj, CONFIG.DND5E[key]);\n return obj;\n }, {});\n\n // Fetch base items for all IDs\n const baseItems = await Promise.all(Object.entries(ids).map(async ([key, id]) => {\n const index = await getBaseItem(id);\n return [key, index];\n }));\n\n // Sort base items as children of categories based on subtypes\n for ( const [key, index] of baseItems ) {\n if ( !index ) continue;\n\n // Get the proper subtype, using proficiency map if needed\n let type = foundry.utils.getProperty(index, keyPath);\n if ( map?.[type] ) type = map[type];\n\n const entry = { label: index.name, chosen: chosen.has(key) };\n\n // No category for this type, add at top level\n if ( !data[type] ) data[key] = entry;\n\n // Add as child to appropriate category\n else {\n data[type].children ??= {};\n data[type].children[key] = entry;\n }\n }\n }\n\n // Sort Categories\n if ( traitConfig.sortCategories ) data = dnd5e.utils.sortObjectEntries(data, \"label\");\n\n // Sort Children\n for ( const category of Object.values(data) ) {\n if ( !category.children ) continue;\n category.children = dnd5e.utils.sortObjectEntries(category.children, \"label\");\n }\n\n return data;\n}\n\n/* -------------------------------------------- */\n\n/**\n * Fetch an item for the provided ID. If the provided ID contains a compendium pack name\n * it will be fetched from that pack, otherwise it will be fetched from the compendium defined\n * in `DND5E.sourcePacks.ITEMS`.\n * @param {string} identifier Simple ID or compendium name and ID separated by a dot.\n * @param {object} [options]\n * @param {boolean} [options.indexOnly] If set to true, only the index data will be fetched (will never return\n * Promise).\n * @param {boolean} [options.fullItem] If set to true, the full item will be returned as long as `indexOnly` is\n * false.\n * @returns {Promise|object} Promise for a `Document` if `indexOnly` is false & `fullItem` is true,\n * otherwise else a simple object containing the minimal index data.\n */\nexport function getBaseItem(identifier, { indexOnly=false, fullItem=false }={}) {\n let pack = CONFIG.DND5E.sourcePacks.ITEMS;\n let [scope, collection, id] = identifier.split(\".\");\n if ( scope && collection ) pack = `${scope}.${collection}`;\n if ( !id ) id = identifier;\n\n const packObject = game.packs.get(pack);\n\n // Full Item5e document required, always async.\n if ( fullItem && !indexOnly ) return packObject?.getDocument(id);\n\n const cache = _cachedIndices[pack];\n const loading = cache instanceof Promise;\n\n // Return extended index if cached, otherwise normal index, guaranteed to never be async.\n if ( indexOnly ) {\n const index = packObject?.index.get(id);\n return loading ? index : cache?.[id] ?? index;\n }\n\n // Returned cached version of extended index if available.\n if ( loading ) return cache.then(() => _cachedIndices[pack][id]);\n else if ( cache ) return cache[id];\n if ( !packObject ) return;\n\n // Build the extended index and return a promise for the data\n const promise = packObject.getIndex({ fields: traitIndexFields() }).then(index => {\n const store = index.reduce((obj, entry) => {\n obj[entry._id] = entry;\n return obj;\n }, {});\n _cachedIndices[pack] = store;\n return store[id];\n });\n _cachedIndices[pack] = promise;\n return promise;\n}\n\n/* -------------------------------------------- */\n\n/**\n * List of fields on items that should be indexed for retrieving subtypes.\n * @returns {string[]} Index list to pass to `Compendium#getIndex`.\n * @protected\n */\nexport function traitIndexFields() {\n const fields = [];\n for ( const traitConfig of Object.values(CONFIG.DND5E.traits) ) {\n if ( !traitConfig.subtypes ) continue;\n fields.push(`system.${traitConfig.subtypes.keyPath}`);\n }\n return fields;\n}\n\n/* -------------------------------------------- */\n/* Localized Formatting Methods */\n/* -------------------------------------------- */\n\n/**\n * Get the localized label for a specific trait type.\n * @param {string} trait Trait as defined in `CONFIG.DND5E.traits`.\n * @param {number} [count] Count used to determine pluralization. If no count is provided, will default to\n * the 'other' pluralization.\n * @returns {string} Localized label.\n */\nexport function traitLabel(trait, count) {\n let typeCap;\n if ( trait.length === 2 ) typeCap = trait.toUpperCase();\n else typeCap = trait.capitalize();\n\n const pluralRule = ( count !== undefined ) ? new Intl.PluralRules(game.i18n.lang).select(count) : \"other\";\n return game.i18n.localize(`DND5E.Trait${typeCap}Plural.${pluralRule}`);\n}\n\n/* -------------------------------------------- */\n\n/**\n * Retrieve the proper display label for the provided key.\n * @param {string} trait Trait as defined in `CONFIG.DND5E.traits`.\n * @param {string} key Key for which to generate the label.\n * @returns {string} Retrieved label.\n */\nexport function keyLabel(trait, key) {\n const traitConfig = CONFIG.DND5E.traits[trait];\n if ( categories(trait)[key] ) {\n const category = categories(trait)[key];\n if ( !traitConfig.labelKey ) return category;\n return foundry.utils.getProperty(category, traitConfig.labelKey);\n }\n\n for ( const childrenKey of Object.values(traitConfig.children ?? {}) ) {\n if ( CONFIG.DND5E[childrenKey]?.[key] ) return CONFIG.DND5E[childrenKey]?.[key];\n }\n\n for ( const idsKey of traitConfig.subtypes?.ids ?? [] ) {\n if ( !CONFIG.DND5E[idsKey]?.[key] ) continue;\n const index = getBaseItem(CONFIG.DND5E[idsKey][key], { indexOnly: true });\n if ( index ) return index.name;\n else break;\n }\n\n return key;\n}\n\n/* -------------------------------------------- */\n\n/**\n * Create a human readable description of the provided choice.\n * @param {string} trait Trait as defined in `CONFIG.DND5E.traits`.\n * @param {TraitChoice} choice Data for a specific choice.\n * @returns {string}\n */\nexport function choiceLabel(trait, choice) {\n // Select from any trait values\n if ( !choice.pool ) {\n return game.i18n.format(\"DND5E.TraitConfigChooseAny\", {\n count: choice.count,\n type: traitLabel(trait, choice.count).toLowerCase()\n });\n }\n\n // Select from a list of options\n const choices = choice.pool.map(key => keyLabel(trait, key));\n const listFormatter = new Intl.ListFormat(game.i18n.lang, { type: \"disjunction\" });\n return game.i18n.format(\"DND5E.TraitConfigChooseList\", {\n count: choice.count,\n list: listFormatter.format(choices)\n });\n}\n","import Proficiency from \"./proficiency.mjs\";\nimport { d20Roll } from \"../../dice/dice.mjs\";\nimport { simplifyBonus } from \"../../utils.mjs\";\nimport ShortRestDialog from \"../../applications/actor/short-rest.mjs\";\nimport LongRestDialog from \"../../applications/actor/long-rest.mjs\";\nimport * as Trait from \"./trait.mjs\";\n\n/**\n * Extend the base Actor class to implement additional system-specific logic.\n */\nexport default class Actor5e extends Actor {\n\n /**\n * The data source for Actor5e.classes allowing it to be lazily computed.\n * @type {Object}\n * @private\n */\n _classes;\n\n /* -------------------------------------------- */\n /* Properties */\n /* -------------------------------------------- */\n\n /**\n * A mapping of classes belonging to this Actor.\n * @type {Object}\n */\n get classes() {\n if ( this._classes !== undefined ) return this._classes;\n if ( ![\"character\", \"npc\"].includes(this.type) ) return this._classes = {};\n return this._classes = this.items.filter(item => item.type === \"class\").reduce((obj, cls) => {\n obj[cls.identifier] = cls;\n return obj;\n }, {});\n }\n\n /* -------------------------------------------- */\n\n /**\n * Is this Actor currently polymorphed into some other creature?\n * @type {boolean}\n */\n get isPolymorphed() {\n return this.getFlag(\"dnd5e\", \"isPolymorphed\") || false;\n }\n\n /* -------------------------------------------- */\n\n /**\n * The Actor's currently equipped armor, if any.\n * @type {Item5e|null}\n */\n get armor() {\n return this.system.attributes.ac.equippedArmor ?? null;\n }\n\n /* -------------------------------------------- */\n\n /**\n * The Actor's currently equipped shield, if any.\n * @type {Item5e|null}\n */\n get shield() {\n return this.system.attributes.ac.equippedShield ?? null;\n }\n\n /* -------------------------------------------- */\n /* Methods */\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n _initializeSource(source, options={}) {\n source = super._initializeSource(source, options);\n if ( !source._id || !options.pack || dnd5e.moduleArt.suppressArt ) return source;\n const uuid = `Compendium.${options.pack}.${source._id}`;\n const art = game.dnd5e.moduleArt.map.get(uuid);\n if ( art?.actor || art?.token ) {\n if ( art.actor ) source.img = art.actor;\n if ( typeof art.token === \"string\" ) source.prototypeToken.texture.src = art.token;\n else if ( art.token ) foundry.utils.mergeObject(source.prototypeToken, art.token);\n const biography = source.system.details?.biography;\n if ( art.credit && biography ) {\n if ( typeof biography.value !== \"string\" ) biography.value = \"\";\n biography.value += `

${art.credit}

`;\n }\n }\n return source;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n prepareData() {\n // Do not attempt to prepare non-system types.\n if ( !game.template.Actor.types.includes(this.type) ) return;\n this._classes = undefined;\n this._preparationWarnings = [];\n super.prepareData();\n this.items.forEach(item => item.prepareFinalAttributes());\n }\n\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n prepareBaseData() {\n\n // Delegate preparation to type-subclass\n if ( this.type === \"group\" ) { // Eventually other types will also support this\n return this.system._prepareBaseData();\n }\n\n this._prepareBaseArmorClass();\n\n // Type-specific preparation\n switch ( this.type ) {\n case \"character\":\n return this._prepareCharacterData();\n case \"npc\":\n return this._prepareNPCData();\n case \"vehicle\":\n return this._prepareVehicleData();\n }\n }\n\n /* --------------------------------------------- */\n\n /** @inheritDoc */\n applyActiveEffects() {\n this._prepareScaleValues();\n // The Active Effects do not have access to their parent at preparation time, so we wait until this stage to\n // determine whether they are suppressed or not.\n this.effects.forEach(e => e.determineSuppression());\n return super.applyActiveEffects();\n }\n\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n prepareDerivedData() {\n\n // Delegate preparation to type-subclass\n if ( this.type === \"group\" ) { // Eventually other types will also support this\n return this.system._prepareDerivedData();\n }\n\n const flags = this.flags.dnd5e || {};\n this.labels = {};\n\n // Retrieve data for polymorphed actors\n let originalSaves = null;\n let originalSkills = null;\n if ( this.isPolymorphed ) {\n const transformOptions = flags.transformOptions;\n const original = game.actors?.get(flags.originalActor);\n if ( original ) {\n if ( transformOptions.mergeSaves ) originalSaves = original.system.abilities;\n if ( transformOptions.mergeSkills ) originalSkills = original.system.skills;\n }\n }\n\n // Prepare abilities, skills, & everything else\n const globalBonuses = this.system.bonuses?.abilities ?? {};\n const rollData = this.getRollData();\n const checkBonus = simplifyBonus(globalBonuses?.check, rollData);\n this._prepareAbilities(rollData, globalBonuses, checkBonus, originalSaves);\n this._prepareSkills(rollData, globalBonuses, checkBonus, originalSkills);\n this._prepareTools(rollData, globalBonuses, checkBonus);\n this._prepareArmorClass();\n this._prepareEncumbrance();\n this._prepareHitPoints(rollData);\n this._prepareInitiative(rollData, checkBonus);\n this._prepareSpellcasting();\n }\n\n /* -------------------------------------------- */\n\n /**\n * Return the amount of experience required to gain a certain character level.\n * @param {number} level The desired level.\n * @returns {number} The XP required.\n */\n getLevelExp(level) {\n const levels = CONFIG.DND5E.CHARACTER_EXP_LEVELS;\n return levels[Math.min(level, levels.length - 1)];\n }\n\n /* -------------------------------------------- */\n\n /**\n * Return the amount of experience granted by killing a creature of a certain CR.\n * @param {number} cr The creature's challenge rating.\n * @returns {number} The amount of experience granted per kill.\n */\n getCRExp(cr) {\n if ( cr < 1.0 ) return Math.max(200 * cr, 10);\n return CONFIG.DND5E.CR_EXP_LEVELS[cr];\n }\n\n /* -------------------------------------------- */\n\n /**\n * @inheritdoc\n * @param {object} [options]\n * @param {boolean} [options.deterministic] Whether to force deterministic values for data properties that could be\n * either a die term or a flat term.\n */\n getRollData({ deterministic=false }={}) {\n const data = {...super.getRollData()};\n if ( this.type === \"group\" ) return data;\n data.prof = new Proficiency(this.system.attributes.prof, 1);\n if ( deterministic ) data.prof = data.prof.flat;\n data.attributes = foundry.utils.deepClone(data.attributes);\n data.attributes.spellmod = data.abilities[data.attributes.spellcasting || \"int\"]?.mod ?? 0;\n data.classes = {};\n for ( const [identifier, cls] of Object.entries(this.classes) ) {\n data.classes[identifier] = {...cls.system};\n if ( cls.subclass ) data.classes[identifier].subclass = cls.subclass.system;\n }\n return data;\n }\n\n /* -------------------------------------------- */\n /* Base Data Preparation Helpers */\n /* -------------------------------------------- */\n\n /**\n * Initialize derived AC fields for Active Effects to target.\n * Mutates the system.attributes.ac object.\n * @protected\n */\n _prepareBaseArmorClass() {\n const ac = this.system.attributes.ac;\n ac.armor = 10;\n ac.shield = ac.bonus = ac.cover = 0;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Derive any values that have been scaled by the Advancement system.\n * Mutates the value of the `system.scale` object.\n * @protected\n */\n _prepareScaleValues() {\n this.system.scale = Object.entries(this.classes).reduce((scale, [identifier, cls]) => {\n scale[identifier] = cls.scaleValues;\n if ( cls.subclass ) scale[cls.subclass.identifier] = cls.subclass.scaleValues;\n return scale;\n }, {});\n }\n\n /* -------------------------------------------- */\n\n /**\n * Perform any Character specific preparation.\n * Mutates several aspects of the system data object.\n * @protected\n */\n _prepareCharacterData() {\n this.system.details.level = 0;\n this.system.attributes.hd = 0;\n this.system.attributes.attunement.value = 0;\n\n for ( const item of this.items ) {\n // Class levels & hit dice\n if ( item.type === \"class\" ) {\n const classLevels = parseInt(item.system.levels) || 1;\n this.system.details.level += classLevels;\n this.system.attributes.hd += classLevels - (parseInt(item.system.hitDiceUsed) || 0);\n }\n\n // Attuned items\n else if ( item.system.attunement === CONFIG.DND5E.attunementTypes.ATTUNED ) {\n this.system.attributes.attunement.value += 1;\n }\n }\n\n // Character proficiency bonus\n this.system.attributes.prof = Proficiency.calculateMod(this.system.details.level);\n\n // Experience required for next level\n const xp = this.system.details.xp;\n xp.max = this.getLevelExp(this.system.details.level || 1);\n const prior = this.getLevelExp(this.system.details.level - 1 || 0);\n const required = xp.max - prior;\n const pct = Math.round((xp.value - prior) * 100 / required);\n xp.pct = Math.clamped(pct, 0, 100);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Perform any NPC specific preparation.\n * Mutates several aspects of the system data object.\n * @protected\n */\n _prepareNPCData() {\n const cr = this.system.details.cr;\n\n // Attuned items\n this.system.attributes.attunement.value = this.items.filter(i => {\n return i.system.attunement === CONFIG.DND5E.attunementTypes.ATTUNED;\n }).length;\n\n // Kill Experience\n this.system.details.xp ??= {};\n this.system.details.xp.value = this.getCRExp(cr);\n\n // Proficiency\n this.system.attributes.prof = Proficiency.calculateMod(Math.max(cr, 1));\n\n // Spellcaster Level\n if ( this.system.attributes.spellcasting && !Number.isNumeric(this.system.details.spellLevel) ) {\n this.system.details.spellLevel = Math.max(cr, 1);\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * Perform any Vehicle specific preparation.\n * Mutates several aspects of the system data object.\n * @protected\n */\n _prepareVehicleData() {\n this.system.attributes.prof = 0;\n }\n\n /* -------------------------------------------- */\n /* Derived Data Preparation Helpers */\n /* -------------------------------------------- */\n\n /**\n * Prepare abilities.\n * @param {object} bonusData Data produced by `getRollData` to be applied to bonus formulas.\n * @param {object} globalBonuses Global bonus data.\n * @param {number} checkBonus Global ability check bonus.\n * @param {object} originalSaves A transformed actor's original actor's abilities.\n * @protected\n */\n _prepareAbilities(bonusData, globalBonuses, checkBonus, originalSaves) {\n const flags = this.flags.dnd5e ?? {};\n const dcBonus = simplifyBonus(this.system.bonuses?.spell?.dc, bonusData);\n const saveBonus = simplifyBonus(globalBonuses.save, bonusData);\n for ( const [id, abl] of Object.entries(this.system.abilities) ) {\n if ( flags.diamondSoul ) abl.proficient = 1; // Diamond Soul is proficient in all saves\n abl.mod = Math.floor((abl.value - 10) / 2);\n\n const isRA = this._isRemarkableAthlete(id);\n abl.checkProf = new Proficiency(this.system.attributes.prof, (isRA || flags.jackOfAllTrades) ? 0.5 : 0, !isRA);\n const saveBonusAbl = simplifyBonus(abl.bonuses?.save, bonusData);\n abl.saveBonus = saveBonusAbl + saveBonus;\n\n abl.saveProf = new Proficiency(this.system.attributes.prof, abl.proficient);\n const checkBonusAbl = simplifyBonus(abl.bonuses?.check, bonusData);\n abl.checkBonus = checkBonusAbl + checkBonus;\n\n abl.save = abl.mod + abl.saveBonus;\n if ( Number.isNumeric(abl.saveProf.term) ) abl.save += abl.saveProf.flat;\n abl.dc = 8 + abl.mod + this.system.attributes.prof + dcBonus;\n\n // If we merged saves when transforming, take the highest bonus here.\n if ( originalSaves && abl.proficient ) abl.save = Math.max(abl.save, originalSaves[id].save);\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare skill checks. Mutates the values of system.skills.\n * @param {object} bonusData Data produced by `getRollData` to be applied to bonus formulas.\n * @param {object} globalBonuses Global bonus data.\n * @param {number} checkBonus Global ability check bonus.\n * @param {object} originalSkills A transformed actor's original actor's skills.\n * @protected\n */\n _prepareSkills(bonusData, globalBonuses, checkBonus, originalSkills) {\n if ( this.type === \"vehicle\" ) return;\n const flags = this.flags.dnd5e ?? {};\n\n // Skill modifiers\n const feats = CONFIG.DND5E.characterFlags;\n const skillBonus = simplifyBonus(globalBonuses.skill, bonusData);\n for ( const [id, skl] of Object.entries(this.system.skills) ) {\n const ability = this.system.abilities[skl.ability];\n const baseBonus = simplifyBonus(skl.bonuses?.check, bonusData);\n let roundDown = true;\n\n // Remarkable Athlete\n if ( this._isRemarkableAthlete(skl.ability) && (skl.value < 0.5) ) {\n skl.value = 0.5;\n roundDown = false;\n }\n\n // Jack of All Trades\n else if ( flags.jackOfAllTrades && (skl.value < 0.5) ) {\n skl.value = 0.5;\n }\n\n // Polymorph Skill Proficiencies\n if ( originalSkills ) {\n skl.value = Math.max(skl.value, originalSkills[id].value);\n }\n\n // Compute modifier\n const checkBonusAbl = simplifyBonus(ability?.bonuses?.check, bonusData);\n skl.bonus = baseBonus + checkBonus + checkBonusAbl + skillBonus;\n skl.mod = ability?.mod ?? 0;\n skl.prof = new Proficiency(this.system.attributes.prof, skl.value, roundDown);\n skl.proficient = skl.value;\n skl.total = skl.mod + skl.bonus;\n if ( Number.isNumeric(skl.prof.term) ) skl.total += skl.prof.flat;\n\n // Compute passive bonus\n const passive = flags.observantFeat && (feats.observantFeat.skills.includes(id)) ? 5 : 0;\n const passiveBonus = simplifyBonus(skl.bonuses?.passive, bonusData);\n skl.passive = 10 + skl.mod + skl.bonus + skl.prof.flat + passive + passiveBonus;\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare tool checks. Mutates the values of system.tools.\n * @param {object} bonusData Data produced by `getRollData` to be applied to bonus formulae.\n * @param {object} globalBonuses Global bonus data.\n * @param {number} checkBonus Global ability check bonus.\n * @protected\n */\n _prepareTools(bonusData, globalBonuses, checkBonus) {\n if ( this.type === \"vehicle\" ) return;\n const flags = this.flags.dnd5e ?? {};\n for ( const tool of Object.values(this.system.tools) ) {\n const ability = this.system.abilities[tool.ability];\n const baseBonus = simplifyBonus(tool.bonuses.check, bonusData);\n let roundDown = true;\n\n // Remarkable Athlete.\n if ( this._isRemarkableAthlete(tool.ability) && (tool.value < 0.5) ) {\n tool.value = 0.5;\n roundDown = false;\n }\n\n // Jack of All Trades.\n else if ( flags.jackOfAllTrades && (tool.value < 0.5) ) tool.value = 0.5;\n\n const checkBonusAbl = simplifyBonus(ability?.bonuses?.check, bonusData);\n tool.bonus = baseBonus + checkBonus + checkBonusAbl;\n tool.mod = ability?.mod ?? 0;\n tool.prof = new Proficiency(this.system.attributes.prof, tool.value, roundDown);\n tool.total = tool.mod + tool.bonus;\n if ( Number.isNumeric(tool.prof.term) ) tool.total += tool.prof.flat;\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare a character's AC value from their equipped armor and shield.\n * Mutates the value of the `system.attributes.ac` object.\n */\n _prepareArmorClass() {\n const ac = this.system.attributes.ac;\n\n // Apply automatic migrations for older data structures\n let cfg = CONFIG.DND5E.armorClasses[ac.calc];\n if ( !cfg ) {\n ac.calc = \"flat\";\n if ( Number.isNumeric(ac.value) ) ac.flat = Number(ac.value);\n cfg = CONFIG.DND5E.armorClasses.flat;\n }\n\n // Identify Equipped Items\n const armorTypes = new Set(Object.keys(CONFIG.DND5E.armorTypes));\n const {armors, shields} = this.itemTypes.equipment.reduce((obj, equip) => {\n const armor = equip.system.armor;\n if ( !equip.system.equipped || !armorTypes.has(armor?.type) ) return obj;\n if ( armor.type === \"shield\" ) obj.shields.push(equip);\n else obj.armors.push(equip);\n return obj;\n }, {armors: [], shields: []});\n\n // Determine base AC\n switch ( ac.calc ) {\n\n // Flat AC (no additional bonuses)\n case \"flat\":\n ac.value = Number(ac.flat);\n return;\n\n // Natural AC (includes bonuses)\n case \"natural\":\n ac.base = Number(ac.flat);\n break;\n\n default:\n let formula = ac.calc === \"custom\" ? ac.formula : cfg.formula;\n if ( armors.length ) {\n if ( armors.length > 1 ) this._preparationWarnings.push({\n message: game.i18n.localize(\"DND5E.WarnMultipleArmor\"), type: \"warning\"\n });\n const armorData = armors[0].system.armor;\n const isHeavy = armorData.type === \"heavy\";\n ac.armor = armorData.value ?? ac.armor;\n ac.dex = isHeavy ? 0 : Math.min(armorData.dex ?? Infinity, this.system.abilities.dex?.mod ?? 0);\n ac.equippedArmor = armors[0];\n }\n else ac.dex = this.system.abilities.dex?.mod ?? 0;\n\n const rollData = this.getRollData({ deterministic: true });\n rollData.attributes.ac = ac;\n try {\n const replaced = Roll.replaceFormulaData(formula, rollData);\n ac.base = Roll.safeEval(replaced);\n } catch(err) {\n this._preparationWarnings.push({\n message: game.i18n.localize(\"DND5E.WarnBadACFormula\"), link: \"armor\", type: \"error\"\n });\n const replaced = Roll.replaceFormulaData(CONFIG.DND5E.armorClasses.default.formula, rollData);\n ac.base = Roll.safeEval(replaced);\n }\n break;\n }\n\n // Equipped Shield\n if ( shields.length ) {\n if ( shields.length > 1 ) this._preparationWarnings.push({\n message: game.i18n.localize(\"DND5E.WarnMultipleShields\"), type: \"warning\"\n });\n ac.shield = shields[0].system.armor.value ?? 0;\n ac.equippedShield = shields[0];\n }\n\n // Compute total AC and return\n ac.value = ac.base + ac.shield + ac.bonus + ac.cover;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare the level and percentage of encumbrance for an Actor.\n * Optionally include the weight of carried currency by applying the standard rule from the PHB pg. 143.\n * Mutates the value of the `system.attributes.encumbrance` object.\n * @protected\n */\n _prepareEncumbrance() {\n const encumbrance = this.system.attributes.encumbrance ??= {};\n\n // Get the total weight from items\n const physicalItems = [\"weapon\", \"equipment\", \"consumable\", \"tool\", \"backpack\", \"loot\"];\n let weight = this.items.reduce((weight, i) => {\n if ( !physicalItems.includes(i.type) ) return weight;\n const q = i.system.quantity || 0;\n const w = i.system.weight || 0;\n return weight + (q * w);\n }, 0);\n\n // [Optional] add Currency Weight (for non-transformed actors)\n const currency = this.system.currency;\n if ( game.settings.get(\"dnd5e\", \"currencyWeight\") && currency ) {\n const numCoins = Object.values(currency).reduce((val, denom) => val + Math.max(denom, 0), 0);\n const currencyPerWeight = game.settings.get(\"dnd5e\", \"metricWeightUnits\")\n ? CONFIG.DND5E.encumbrance.currencyPerWeight.metric\n : CONFIG.DND5E.encumbrance.currencyPerWeight.imperial;\n weight += numCoins / currencyPerWeight;\n }\n\n // Determine the Encumbrance size class\n let mod = {tiny: 0.5, sm: 1, med: 1, lg: 2, huge: 4, grg: 8}[this.system.traits.size] || 1;\n if ( this.flags.dnd5e?.powerfulBuild ) mod = Math.min(mod * 2, 8);\n\n const strengthMultiplier = game.settings.get(\"dnd5e\", \"metricWeightUnits\")\n ? CONFIG.DND5E.encumbrance.strMultiplier.metric\n : CONFIG.DND5E.encumbrance.strMultiplier.imperial;\n\n // Populate final Encumbrance values\n encumbrance.value = weight.toNearest(0.1);\n encumbrance.max = ((this.system.abilities.str?.value ?? 10) * strengthMultiplier * mod).toNearest(0.1);\n encumbrance.pct = Math.clamped((encumbrance.value * 100) / encumbrance.max, 0, 100);\n encumbrance.encumbered = encumbrance.pct > (200 / 3);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare hit points for characters.\n * @param {object} rollData Data produced by `getRollData` to be applied to bonus formulas.\n * @protected\n */\n _prepareHitPoints(rollData) {\n if ( this.type !== \"character\" || (this.system._source.attributes.hp.max !== null) ) return;\n const hp = this.system.attributes.hp;\n\n const abilityId = CONFIG.DND5E.hitPointsAbility || \"con\";\n const abilityMod = (this.system.abilities[abilityId]?.mod ?? 0);\n const base = Object.values(this.classes).reduce((total, item) => {\n const advancement = item.advancement.byType.HitPoints?.[0];\n return total + (advancement?.getAdjustedTotal(abilityMod) ?? 0);\n }, 0);\n const levelBonus = simplifyBonus(hp.bonuses.level, rollData) * this.system.details.level;\n const overallBonus = simplifyBonus(hp.bonuses.overall, rollData);\n\n hp.max = base + levelBonus + overallBonus;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare the initiative data for an actor.\n * Mutates the value of the system.attributes.init object.\n * @param {object} bonusData Data produced by getRollData to be applied to bonus formulas\n * @param {number} globalCheckBonus Global ability check bonus\n * @protected\n */\n _prepareInitiative(bonusData, globalCheckBonus=0) {\n const init = this.system.attributes.init ??= {};\n const flags = this.flags.dnd5e || {};\n\n // Compute initiative modifier\n const abilityId = init.ability || CONFIG.DND5E.initiativeAbility;\n const ability = this.system.abilities?.[abilityId] || {};\n init.mod = ability.mod ?? 0;\n\n // Initiative proficiency\n const prof = this.system.attributes.prof ?? 0;\n const ra = flags.remarkableAthlete && [\"str\", \"dex\", \"con\"].includes(abilityId);\n init.prof = new Proficiency(prof, (flags.jackOfAllTrades || ra) ? 0.5 : 0, !ra);\n\n // Total initiative includes all numeric terms\n const initBonus = simplifyBonus(init.bonus, bonusData);\n const abilityBonus = simplifyBonus(ability.bonuses?.check, bonusData);\n init.total = init.mod + initBonus + abilityBonus + globalCheckBonus\n + (flags.initiativeAlert ? 5 : 0)\n + (Number.isNumeric(init.prof.term) ? init.prof.flat : 0);\n }\n\n /* -------------------------------------------- */\n /* Spellcasting Preparation */\n /* -------------------------------------------- */\n\n /**\n * Prepare data related to the spell-casting capabilities of the Actor.\n * Mutates the value of the system.spells object.\n * @protected\n */\n _prepareSpellcasting() {\n if ( !this.system.spells ) return;\n\n // Spellcasting DC\n const spellcastingAbility = this.system.abilities[this.system.attributes.spellcasting];\n this.system.attributes.spelldc = spellcastingAbility ? spellcastingAbility.dc : 8 + this.system.attributes.prof;\n\n // Translate the list of classes into spellcasting progression\n const progression = { slot: 0, pact: 0 };\n const types = {};\n\n // NPCs don't get spell levels from classes\n if ( this.type === \"npc\" ) {\n progression.slot = this.system.details.spellLevel ?? 0;\n types.leveled = 1;\n }\n\n else {\n // Grab all classes with spellcasting\n const classes = this.items.filter(cls => {\n if ( cls.type !== \"class\" ) return false;\n const type = cls.spellcasting.type;\n if ( !type ) return false;\n types[type] ??= 0;\n types[type] += 1;\n return true;\n });\n\n for ( const cls of classes ) this.constructor.computeClassProgression(\n progression, cls, { actor: this, count: types[cls.spellcasting.type] }\n );\n }\n\n for ( const type of Object.keys(CONFIG.DND5E.spellcastingTypes) ) {\n this.constructor.prepareSpellcastingSlots(this.system.spells, type, progression, { actor: this });\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * Contribute to the actor's spellcasting progression.\n * @param {object} progression Spellcasting progression data. *Will be mutated.*\n * @param {Item5e} cls Class for whom this progression is being computed.\n * @param {object} [config={}]\n * @param {Actor5e|null} [config.actor] Actor for whom the data is being prepared.\n * @param {SpellcastingDescription} [config.spellcasting] Spellcasting descriptive object.\n * @param {number} [config.count=1] Number of classes with this type of spellcasting.\n */\n static computeClassProgression(progression, cls, {actor, spellcasting, count=1}={}) {\n const type = cls.spellcasting.type;\n spellcasting = spellcasting ?? cls.spellcasting;\n\n /**\n * A hook event that fires while computing the spellcasting progression for each class on each actor.\n * The actual hook names include the spellcasting type (e.g. `dnd5e.computeLeveledProgression`).\n * @param {object} progression Spellcasting progression data. *Will be mutated.*\n * @param {Actor5e|null} [actor] Actor for whom the data is being prepared.\n * @param {Item5e} cls Class for whom this progression is being computed.\n * @param {SpellcastingDescription} spellcasting Spellcasting descriptive object.\n * @param {number} count Number of classes with this type of spellcasting.\n * @returns {boolean} Explicitly return false to prevent default progression from being calculated.\n * @function dnd5e.computeSpellcastingProgression\n * @memberof hookEvents\n */\n const allowed = Hooks.call(\n `dnd5e.compute${type.capitalize()}Progression`, progression, actor, cls, spellcasting, count\n );\n\n if ( allowed && (type === \"pact\") ) {\n this.computePactProgression(progression, actor, cls, spellcasting, count);\n } else if ( allowed && (type === \"leveled\") ) {\n this.computeLeveledProgression(progression, actor, cls, spellcasting, count);\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * Contribute to the actor's spellcasting progression for a class with leveled spellcasting.\n * @param {object} progression Spellcasting progression data. *Will be mutated.*\n * @param {Actor5e} actor Actor for whom the data is being prepared.\n * @param {Item5e} cls Class for whom this progression is being computed.\n * @param {SpellcastingDescription} spellcasting Spellcasting descriptive object.\n * @param {number} count Number of classes with this type of spellcasting.\n */\n static computeLeveledProgression(progression, actor, cls, spellcasting, count) {\n const prog = CONFIG.DND5E.spellcastingTypes.leveled.progression[spellcasting.progression];\n if ( !prog ) return;\n const rounding = prog.roundUp ? Math.ceil : Math.floor;\n progression.slot += rounding(spellcasting.levels / prog.divisor ?? 1);\n // Single-classed, non-full progression rounds up, rather than down.\n if ( (count === 1) && (prog.divisor > 1) && progression.slot ) {\n progression.slot = Math.ceil(spellcasting.levels / prog.divisor);\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * Contribute to the actor's spellcasting progression for a class with pact spellcasting.\n * @param {object} progression Spellcasting progression data. *Will be mutated.*\n * @param {Actor5e} actor Actor for whom the data is being prepared.\n * @param {Item5e} cls Class for whom this progression is being computed.\n * @param {SpellcastingDescription} spellcasting Spellcasting descriptive object.\n * @param {number} count Number of classes with this type of spellcasting.\n */\n static computePactProgression(progression, actor, cls, spellcasting, count) {\n progression.pact += spellcasting.levels;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare actor's spell slots using progression data.\n * @param {object} spells The `data.spells` object within actor's data. *Will be mutated.*\n * @param {string} type Type of spellcasting slots being prepared.\n * @param {object} progression Spellcasting progression data.\n * @param {object} [config]\n * @param {Actor5e} [config.actor] Actor for whom the data is being prepared.\n */\n static prepareSpellcastingSlots(spells, type, progression, {actor}={}) {\n /**\n * A hook event that fires to convert the provided spellcasting progression into spell slots.\n * The actual hook names include the spellcasting type (e.g. `dnd5e.prepareLeveledSlots`).\n * @param {object} spells The `data.spells` object within actor's data. *Will be mutated.*\n * @param {Actor5e} actor Actor for whom the data is being prepared.\n * @param {object} progression Spellcasting progression data.\n * @returns {boolean} Explicitly return false to prevent default preparation from being performed.\n * @function dnd5e.prepareSpellcastingSlots\n * @memberof hookEvents\n */\n const allowed = Hooks.call(`dnd5e.prepare${type.capitalize()}Slots`, spells, actor, progression);\n\n if ( allowed && (type === \"pact\") ) this.preparePactSlots(spells, actor, progression);\n else if ( allowed && (type === \"leveled\") ) this.prepareLeveledSlots(spells, actor, progression);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare leveled spell slots using progression data.\n * @param {object} spells The `data.spells` object within actor's data. *Will be mutated.*\n * @param {Actor5e} actor Actor for whom the data is being prepared.\n * @param {object} progression Spellcasting progression data.\n */\n static prepareLeveledSlots(spells, actor, progression) {\n const levels = Math.clamped(progression.slot, 0, CONFIG.DND5E.maxLevel);\n const slots = CONFIG.DND5E.SPELL_SLOT_TABLE[Math.min(levels, CONFIG.DND5E.SPELL_SLOT_TABLE.length) - 1] ?? [];\n for ( const [n, slot] of Object.entries(spells) ) {\n const level = parseInt(n.slice(-1));\n if ( Number.isNaN(level) ) continue;\n slot.max = Number.isNumeric(slot.override) ? Math.max(parseInt(slot.override), 0) : slots[level - 1] ?? 0;\n slot.value = parseInt(slot.value); // TODO: DataModels should remove the need for this\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare pact spell slots using progression data.\n * @param {object} spells The `data.spells` object within actor's data. *Will be mutated.*\n * @param {Actor5e} actor Actor for whom the data is being prepared.\n * @param {object} progression Spellcasting progression data.\n */\n static preparePactSlots(spells, actor, progression) {\n // Pact spell data:\n // - pact.level: Slot level for pact casting\n // - pact.max: Total number of pact slots\n // - pact.value: Currently available pact slots\n // - pact.override: Override number of available spell slots\n\n let pactLevel = Math.clamped(progression.pact, 0, CONFIG.DND5E.maxLevel);\n spells.pact ??= {};\n const override = Number.isNumeric(spells.pact.override) ? parseInt(spells.pact.override) : null;\n\n // Pact slot override\n if ( (pactLevel === 0) && (actor.type === \"npc\") && (override !== null) ) {\n pactLevel = actor.system.details.spellLevel;\n }\n\n // TODO: Allow pact level and slot count to be configured\n if ( pactLevel > 0 ) {\n spells.pact.level = Math.ceil(Math.min(10, pactLevel) / 2); // TODO: Allow custom max pact level\n if ( override === null ) {\n spells.pact.max = Math.max(1, Math.min(pactLevel, 2), Math.min(pactLevel - 8, 3), Math.min(pactLevel - 13, 4));\n } else {\n spells.pact.max = Math.max(override, 1);\n }\n spells.pact.value = Math.min(spells.pact.value, spells.pact.max);\n }\n\n else {\n spells.pact.max = override || 0;\n spells.pact.level = spells.pact.max > 0 ? 1 : 0;\n }\n }\n\n /* -------------------------------------------- */\n /* Event Handlers */\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async _preCreate(data, options, user) {\n await super._preCreate(data, options, user);\n const sourceId = this.getFlag(\"core\", \"sourceId\");\n if ( sourceId?.startsWith(\"Compendium.\") ) return;\n\n // Configure prototype token settings\n if ( \"size\" in (this.system.traits || {}) ) {\n const s = CONFIG.DND5E.tokenSizes[this.system.traits.size || \"med\"];\n const prototypeToken = {width: s, height: s};\n if ( this.type === \"character\" ) Object.assign(prototypeToken, {\n sight: { enabled: true }, actorLink: true, disposition: 1\n });\n this.updateSource({prototypeToken});\n }\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async _preUpdate(changed, options, user) {\n await super._preUpdate(changed, options, user);\n\n // Apply changes in Actor size to Token width/height\n if ( \"size\" in (this.system.traits || {}) ) {\n const newSize = foundry.utils.getProperty(changed, \"system.traits.size\");\n if ( newSize && (newSize !== this.system.traits?.size) ) {\n let size = CONFIG.DND5E.tokenSizes[newSize];\n if ( !foundry.utils.hasProperty(changed, \"prototypeToken.width\") ) {\n changed.prototypeToken ||= {};\n changed.prototypeToken.height = size;\n changed.prototypeToken.width = size;\n }\n }\n }\n\n // Reset death save counters\n if ( \"hp\" in (this.system.attributes || {}) ) {\n const isDead = this.system.attributes.hp.value <= 0;\n if ( isDead && (foundry.utils.getProperty(changed, \"system.attributes.hp.value\") > 0) ) {\n foundry.utils.setProperty(changed, \"system.attributes.death.success\", 0);\n foundry.utils.setProperty(changed, \"system.attributes.death.failure\", 0);\n }\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * Assign a class item as the original class for the Actor based on which class has the most levels.\n * @returns {Promise} Instance of the updated actor.\n * @protected\n */\n _assignPrimaryClass() {\n const classes = this.itemTypes.class.sort((a, b) => b.system.levels - a.system.levels);\n const newPC = classes[0]?.id || \"\";\n return this.update({\"system.details.originalClass\": newPC});\n }\n\n /* -------------------------------------------- */\n /* Gameplay Mechanics */\n /* -------------------------------------------- */\n\n /** @override */\n async modifyTokenAttribute(attribute, value, isDelta, isBar) {\n if ( attribute === \"attributes.hp\" ) {\n const hp = this.system.attributes.hp;\n const delta = isDelta ? (-1 * value) : (hp.value + hp.temp) - value;\n return this.applyDamage(delta);\n }\n return super.modifyTokenAttribute(attribute, value, isDelta, isBar);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Apply a certain amount of damage or healing to the health pool for Actor\n * @param {number} amount An amount of damage (positive) or healing (negative) to sustain\n * @param {number} multiplier A multiplier which allows for resistance, vulnerability, or healing\n * @returns {Promise} A Promise which resolves once the damage has been applied\n */\n async applyDamage(amount=0, multiplier=1) {\n amount = Math.floor(parseInt(amount) * multiplier);\n const hp = this.system.attributes.hp;\n if ( !hp ) return this; // Group actors don't have HP at the moment\n\n // Deduct damage from temp HP first\n const tmp = parseInt(hp.temp) || 0;\n const dt = amount > 0 ? Math.min(tmp, amount) : 0;\n\n // Remaining goes to health\n const tmpMax = parseInt(hp.tempmax) || 0;\n const dh = Math.clamped(hp.value - (amount - dt), 0, Math.max(0, hp.max + tmpMax));\n\n // Update the Actor\n const updates = {\n \"system.attributes.hp.temp\": tmp - dt,\n \"system.attributes.hp.value\": dh\n };\n\n // Delegate damage application to a hook\n // TODO replace this in the future with a better modifyTokenAttribute function in the core\n const allowed = Hooks.call(\"modifyTokenAttribute\", {\n attribute: \"attributes.hp\",\n value: amount,\n isDelta: false,\n isBar: true\n }, updates);\n return allowed !== false ? this.update(updates, {dhp: -amount}) : this;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Apply a certain amount of temporary hit point, but only if it's more than the actor currently has.\n * @param {number} amount An amount of temporary hit points to set\n * @returns {Promise} A Promise which resolves once the temp HP has been applied\n */\n async applyTempHP(amount=0) {\n amount = parseInt(amount);\n const hp = this.system.attributes.hp;\n\n // Update the actor if the new amount is greater than the current\n const tmp = parseInt(hp.temp) || 0;\n return amount > tmp ? this.update({\"system.attributes.hp.temp\": amount}) : this;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Get a color used to represent the current hit points of an Actor.\n * @param {number} current The current HP value\n * @param {number} max The maximum HP value\n * @returns {Color} The color used to represent the HP percentage\n */\n static getHPColor(current, max) {\n const pct = Math.clamped(current, 0, max) / max;\n return Color.fromRGB([(1-(pct/2)), pct, 0]);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Determine whether the provided ability is usable for remarkable athlete.\n * @param {string} ability Ability type to check.\n * @returns {boolean} Whether the actor has the remarkable athlete flag and the ability is physical.\n * @private\n */\n _isRemarkableAthlete(ability) {\n return this.getFlag(\"dnd5e\", \"remarkableAthlete\")\n && CONFIG.DND5E.characterFlags.remarkableAthlete.abilities.includes(ability);\n }\n\n /* -------------------------------------------- */\n /* Rolling */\n /* -------------------------------------------- */\n\n /**\n * Roll a Skill Check\n * Prompt the user for input regarding Advantage/Disadvantage and any Situational Bonus\n * @param {string} skillId The skill id (e.g. \"ins\")\n * @param {object} options Options which configure how the skill check is rolled\n * @returns {Promise} A Promise which resolves to the created Roll instance\n */\n async rollSkill(skillId, options={}) {\n const skl = this.system.skills[skillId];\n const abl = this.system.abilities[skl.ability];\n const globalBonuses = this.system.bonuses?.abilities ?? {};\n const parts = [\"@mod\", \"@abilityCheckBonus\"];\n const data = this.getRollData();\n\n // Add ability modifier\n data.mod = skl.mod;\n data.defaultAbility = skl.ability;\n\n // Include proficiency bonus\n if ( skl.prof.hasProficiency ) {\n parts.push(\"@prof\");\n data.prof = skl.prof.term;\n }\n\n // Global ability check bonus\n if ( globalBonuses.check ) {\n parts.push(\"@checkBonus\");\n data.checkBonus = Roll.replaceFormulaData(globalBonuses.check, data);\n }\n\n // Ability-specific check bonus\n if ( abl?.bonuses?.check ) data.abilityCheckBonus = Roll.replaceFormulaData(abl.bonuses.check, data);\n else data.abilityCheckBonus = 0;\n\n // Skill-specific skill bonus\n if ( skl.bonuses?.check ) {\n const checkBonusKey = `${skillId}CheckBonus`;\n parts.push(`@${checkBonusKey}`);\n data[checkBonusKey] = Roll.replaceFormulaData(skl.bonuses.check, data);\n }\n\n // Global skill check bonus\n if ( globalBonuses.skill ) {\n parts.push(\"@skillBonus\");\n data.skillBonus = Roll.replaceFormulaData(globalBonuses.skill, data);\n }\n\n // Reliable Talent applies to any skill check we have full or better proficiency in\n const reliableTalent = (skl.value >= 1 && this.getFlag(\"dnd5e\", \"reliableTalent\"));\n\n // Roll and return\n const flavor = game.i18n.format(\"DND5E.SkillPromptTitle\", {skill: CONFIG.DND5E.skills[skillId]?.label ?? \"\"});\n const rollData = foundry.utils.mergeObject({\n data: data,\n title: `${flavor}: ${this.name}`,\n flavor,\n chooseModifier: true,\n halflingLucky: this.getFlag(\"dnd5e\", \"halflingLucky\"),\n reliableTalent,\n messageData: {\n speaker: options.speaker || ChatMessage.getSpeaker({actor: this}),\n \"flags.dnd5e.roll\": {type: \"skill\", skillId }\n }\n }, options);\n rollData.parts = parts.concat(options.parts ?? []);\n\n /**\n * A hook event that fires before a skill check is rolled for an Actor.\n * @function dnd5e.preRollSkill\n * @memberof hookEvents\n * @param {Actor5e} actor Actor for which the skill check is being rolled.\n * @param {D20RollConfiguration} config Configuration data for the pending roll.\n * @param {string} skillId ID of the skill being rolled as defined in `DND5E.skills`.\n * @returns {boolean} Explicitly return `false` to prevent skill check from being rolled.\n */\n if ( Hooks.call(\"dnd5e.preRollSkill\", this, rollData, skillId) === false ) return;\n\n const roll = await d20Roll(rollData);\n\n /**\n * A hook event that fires after a skill check has been rolled for an Actor.\n * @function dnd5e.rollSkill\n * @memberof hookEvents\n * @param {Actor5e} actor Actor for which the skill check has been rolled.\n * @param {D20Roll} roll The resulting roll.\n * @param {string} skillId ID of the skill that was rolled as defined in `DND5E.skills`.\n */\n if ( roll ) Hooks.callAll(\"dnd5e.rollSkill\", this, roll, skillId);\n\n return roll;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Roll a Tool Check.\n * Prompt the user for input regarding Advantage/Disadvantage and any Situational Bonuses.\n * @param {string} toolId The identifier of the tool being rolled.\n * @param {object} options Options which configure how the tool check is rolled.\n * @returns {Promise} A Promise which resolves to the created Roll instance.\n */\n async rollToolCheck(toolId, options={}) {\n // Prepare roll data.\n const tool = this.system.tools[toolId];\n const ability = this.system.abilities[tool?.ability ?? \"int\"];\n const globalBonuses = this.system.bonuses?.abilities ?? {};\n const parts = [\"@mod\", \"@abilityCheckBonus\"];\n const data = this.getRollData();\n\n // Add ability modifier.\n data.mod = tool?.mod ?? 0;\n data.defaultAbility = options.ability || (tool?.ability ?? \"int\");\n\n // Add proficiency.\n if ( tool?.prof.hasProficiency ) {\n parts.push(\"@prof\");\n data.prof = tool.prof.term;\n }\n\n // Global ability check bonus.\n if ( globalBonuses.check ) {\n parts.push(\"@checkBonus\");\n data.checkBonus = Roll.replaceFormulaData(globalBonuses.check, data);\n }\n\n // Ability-specific check bonus.\n if ( ability?.bonuses.check ) data.abilityCheckBonus = Roll.replaceFormulaData(ability.bonuses.check, data);\n else data.abilityCheckBonus = 0;\n\n // Tool-specific check bonus.\n if ( tool?.bonuses.check || options.bonus ) {\n parts.push(\"@toolBonus\");\n const bonus = [];\n if ( tool?.bonuses.check ) bonus.push(Roll.replaceFormulaData(tool.bonuses.check, data));\n if ( options.bonus ) bonus.push(Roll.replaceFormulaData(options.bonus, data));\n data.toolBonus = bonus.join(\" + \");\n }\n\n const flavor = game.i18n.format(\"DND5E.ToolPromptTitle\", {tool: Trait.keyLabel(\"tool\", toolId) ?? \"\"});\n const rollData = foundry.utils.mergeObject({\n data, flavor,\n title: `${flavor}: ${this.name}`,\n chooseModifier: true,\n halflingLucky: this.getFlag(\"dnd5e\", \"halflingLucky\"),\n messageData: {\n speaker: options.speaker || ChatMessage.implementation.getSpeaker({actor: this}),\n \"flags.dnd5e.roll\": {type: \"tool\", toolId}\n }\n }, options);\n rollData.parts = parts.concat(options.parts ?? []);\n\n /**\n * A hook event that fires before a tool check is rolled for an Actor.\n * @function dnd5e.preRollRool\n * @memberof hookEvents\n * @param {Actor5e} actor Actor for which the tool check is being rolled.\n * @param {D20RollConfiguration} config Configuration data for the pending roll.\n * @param {string} toolId Identifier of the tool being rolled.\n * @returns {boolean} Explicitly return `false` to prevent skill check from being rolled.\n */\n if ( Hooks.call(\"dnd5e.preRollToolCheck\", this, rollData, toolId) === false ) return;\n\n const roll = await d20Roll(rollData);\n\n /**\n * A hook event that fires after a tool check has been rolled for an Actor.\n * @function dnd5e.rollTool\n * @memberof hookEvents\n * @param {Actor5e} actor Actor for which the tool check has been rolled.\n * @param {D20Roll} roll The resulting roll.\n * @param {string} toolId Identifier of the tool that was rolled.\n */\n if ( roll ) Hooks.callAll(\"dnd5e.rollToolCheck\", this, roll, toolId);\n\n return roll;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Roll a generic ability test or saving throw.\n * Prompt the user for input on which variety of roll they want to do.\n * @param {string} abilityId The ability id (e.g. \"str\")\n * @param {object} options Options which configure how ability tests or saving throws are rolled\n */\n rollAbility(abilityId, options={}) {\n const label = CONFIG.DND5E.abilities[abilityId]?.label ?? \"\";\n new Dialog({\n title: `${game.i18n.format(\"DND5E.AbilityPromptTitle\", {ability: label})}: ${this.name}`,\n content: `

${game.i18n.format(\"DND5E.AbilityPromptText\", {ability: label})}

`,\n buttons: {\n test: {\n label: game.i18n.localize(\"DND5E.ActionAbil\"),\n callback: () => this.rollAbilityTest(abilityId, options)\n },\n save: {\n label: game.i18n.localize(\"DND5E.ActionSave\"),\n callback: () => this.rollAbilitySave(abilityId, options)\n }\n }\n }).render(true);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Roll an Ability Test\n * Prompt the user for input regarding Advantage/Disadvantage and any Situational Bonus\n * @param {string} abilityId The ability ID (e.g. \"str\")\n * @param {object} options Options which configure how ability tests are rolled\n * @returns {Promise} A Promise which resolves to the created Roll instance\n */\n async rollAbilityTest(abilityId, options={}) {\n const label = CONFIG.DND5E.abilities[abilityId]?.label ?? \"\";\n const abl = this.system.abilities[abilityId];\n const globalBonuses = this.system.bonuses?.abilities ?? {};\n const parts = [];\n const data = this.getRollData();\n\n // Add ability modifier\n parts.push(\"@mod\");\n data.mod = abl?.mod ?? 0;\n\n // Include proficiency bonus\n if ( abl?.checkProf.hasProficiency ) {\n parts.push(\"@prof\");\n data.prof = abl.checkProf.term;\n }\n\n // Add ability-specific check bonus\n if ( abl?.bonuses?.check ) {\n const checkBonusKey = `${abilityId}CheckBonus`;\n parts.push(`@${checkBonusKey}`);\n data[checkBonusKey] = Roll.replaceFormulaData(abl.bonuses.check, data);\n }\n\n // Add global actor bonus\n if ( globalBonuses.check ) {\n parts.push(\"@checkBonus\");\n data.checkBonus = Roll.replaceFormulaData(globalBonuses.check, data);\n }\n\n // Roll and return\n const flavor = game.i18n.format(\"DND5E.AbilityPromptTitle\", {ability: label});\n const rollData = foundry.utils.mergeObject({\n data,\n title: `${flavor}: ${this.name}`,\n flavor,\n halflingLucky: this.getFlag(\"dnd5e\", \"halflingLucky\"),\n messageData: {\n speaker: options.speaker || ChatMessage.getSpeaker({actor: this}),\n \"flags.dnd5e.roll\": {type: \"ability\", abilityId }\n }\n }, options);\n rollData.parts = parts.concat(options.parts ?? []);\n\n /**\n * A hook event that fires before an ability test is rolled for an Actor.\n * @function dnd5e.preRollAbilityTest\n * @memberof hookEvents\n * @param {Actor5e} actor Actor for which the ability test is being rolled.\n * @param {D20RollConfiguration} config Configuration data for the pending roll.\n * @param {string} abilityId ID of the ability being rolled as defined in `DND5E.abilities`.\n * @returns {boolean} Explicitly return `false` to prevent ability test from being rolled.\n */\n if ( Hooks.call(\"dnd5e.preRollAbilityTest\", this, rollData, abilityId) === false ) return;\n\n const roll = await d20Roll(rollData);\n\n /**\n * A hook event that fires after an ability test has been rolled for an Actor.\n * @function dnd5e.rollAbilityTest\n * @memberof hookEvents\n * @param {Actor5e} actor Actor for which the ability test has been rolled.\n * @param {D20Roll} roll The resulting roll.\n * @param {string} abilityId ID of the ability that was rolled as defined in `DND5E.abilities`.\n */\n if ( roll ) Hooks.callAll(\"dnd5e.rollAbilityTest\", this, roll, abilityId);\n\n return roll;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Roll an Ability Saving Throw\n * Prompt the user for input regarding Advantage/Disadvantage and any Situational Bonus\n * @param {string} abilityId The ability ID (e.g. \"str\")\n * @param {object} options Options which configure how ability tests are rolled\n * @returns {Promise} A Promise which resolves to the created Roll instance\n */\n async rollAbilitySave(abilityId, options={}) {\n const label = CONFIG.DND5E.abilities[abilityId]?.label ?? \"\";\n const abl = this.system.abilities[abilityId];\n const globalBonuses = this.system.bonuses?.abilities ?? {};\n const parts = [];\n const data = this.getRollData();\n\n // Add ability modifier\n parts.push(\"@mod\");\n data.mod = abl?.mod ?? 0;\n\n // Include proficiency bonus\n if ( abl?.saveProf.hasProficiency ) {\n parts.push(\"@prof\");\n data.prof = abl.saveProf.term;\n }\n\n // Include ability-specific saving throw bonus\n if ( abl?.bonuses?.save ) {\n const saveBonusKey = `${abilityId}SaveBonus`;\n parts.push(`@${saveBonusKey}`);\n data[saveBonusKey] = Roll.replaceFormulaData(abl.bonuses.save, data);\n }\n\n // Include a global actor ability save bonus\n if ( globalBonuses.save ) {\n parts.push(\"@saveBonus\");\n data.saveBonus = Roll.replaceFormulaData(globalBonuses.save, data);\n }\n\n // Roll and return\n const flavor = game.i18n.format(\"DND5E.SavePromptTitle\", {ability: label});\n const rollData = foundry.utils.mergeObject({\n data,\n title: `${flavor}: ${this.name}`,\n flavor,\n halflingLucky: this.getFlag(\"dnd5e\", \"halflingLucky\"),\n messageData: {\n speaker: options.speaker || ChatMessage.getSpeaker({actor: this}),\n \"flags.dnd5e.roll\": {type: \"save\", abilityId }\n }\n }, options);\n rollData.parts = parts.concat(options.parts ?? []);\n\n /**\n * A hook event that fires before an ability save is rolled for an Actor.\n * @function dnd5e.preRollAbilitySave\n * @memberof hookEvents\n * @param {Actor5e} actor Actor for which the ability save is being rolled.\n * @param {D20RollConfiguration} config Configuration data for the pending roll.\n * @param {string} abilityId ID of the ability being rolled as defined in `DND5E.abilities`.\n * @returns {boolean} Explicitly return `false` to prevent ability save from being rolled.\n */\n if ( Hooks.call(\"dnd5e.preRollAbilitySave\", this, rollData, abilityId) === false ) return;\n\n const roll = await d20Roll(rollData);\n\n /**\n * A hook event that fires after an ability save has been rolled for an Actor.\n * @function dnd5e.rollAbilitySave\n * @memberof hookEvents\n * @param {Actor5e} actor Actor for which the ability save has been rolled.\n * @param {D20Roll} roll The resulting roll.\n * @param {string} abilityId ID of the ability that was rolled as defined in `DND5E.abilities`.\n */\n if ( roll ) Hooks.callAll(\"dnd5e.rollAbilitySave\", this, roll, abilityId);\n\n return roll;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Perform a death saving throw, rolling a d20 plus any global save bonuses\n * @param {object} options Additional options which modify the roll\n * @returns {Promise} A Promise which resolves to the Roll instance\n */\n async rollDeathSave(options={}) {\n const death = this.system.attributes.death;\n\n // Display a warning if we are not at zero HP or if we already have reached 3\n if ( (this.system.attributes.hp.value > 0) || (death.failure >= 3) || (death.success >= 3) ) {\n ui.notifications.warn(game.i18n.localize(\"DND5E.DeathSaveUnnecessary\"));\n return null;\n }\n\n // Evaluate a global saving throw bonus\n const speaker = options.speaker || ChatMessage.getSpeaker({actor: this});\n const globalBonuses = this.system.bonuses?.abilities ?? {};\n const parts = [];\n const data = this.getRollData();\n\n // Diamond Soul adds proficiency\n if ( this.getFlag(\"dnd5e\", \"diamondSoul\") ) {\n parts.push(\"@prof\");\n data.prof = new Proficiency(this.system.attributes.prof, 1).term;\n }\n\n // Include a global actor ability save bonus\n if ( globalBonuses.save ) {\n parts.push(\"@saveBonus\");\n data.saveBonus = Roll.replaceFormulaData(globalBonuses.save, data);\n }\n\n // Evaluate the roll\n const flavor = game.i18n.localize(\"DND5E.DeathSavingThrow\");\n const rollData = foundry.utils.mergeObject({\n data,\n title: `${flavor}: ${this.name}`,\n flavor,\n halflingLucky: this.getFlag(\"dnd5e\", \"halflingLucky\"),\n targetValue: 10,\n messageData: {\n speaker: speaker,\n \"flags.dnd5e.roll\": {type: \"death\"}\n }\n }, options);\n rollData.parts = parts.concat(options.parts ?? []);\n\n /**\n * A hook event that fires before a death saving throw is rolled for an Actor.\n * @function dnd5e.preRollDeathSave\n * @memberof hookEvents\n * @param {Actor5e} actor Actor for which the death saving throw is being rolled.\n * @param {D20RollConfiguration} config Configuration data for the pending roll.\n * @returns {boolean} Explicitly return `false` to prevent death saving throw from being rolled.\n */\n if ( Hooks.call(\"dnd5e.preRollDeathSave\", this, rollData) === false ) return;\n\n const roll = await d20Roll(rollData);\n if ( !roll ) return null;\n\n // Take action depending on the result\n const details = {};\n\n // Save success\n if ( roll.total >= (roll.options.targetValue ?? 10) ) {\n let successes = (death.success || 0) + 1;\n\n // Critical Success = revive with 1hp\n if ( roll.isCritical ) {\n details.updates = {\n \"system.attributes.death.success\": 0,\n \"system.attributes.death.failure\": 0,\n \"system.attributes.hp.value\": 1\n };\n details.chatString = \"DND5E.DeathSaveCriticalSuccess\";\n }\n\n // 3 Successes = survive and reset checks\n else if ( successes === 3 ) {\n details.updates = {\n \"system.attributes.death.success\": 0,\n \"system.attributes.death.failure\": 0\n };\n details.chatString = \"DND5E.DeathSaveSuccess\";\n }\n\n // Increment successes\n else details.updates = {\"system.attributes.death.success\": Math.clamped(successes, 0, 3)};\n }\n\n // Save failure\n else {\n let failures = (death.failure || 0) + (roll.isFumble ? 2 : 1);\n details.updates = {\"system.attributes.death.failure\": Math.clamped(failures, 0, 3)};\n if ( failures >= 3 ) { // 3 Failures = death\n details.chatString = \"DND5E.DeathSaveFailure\";\n }\n }\n\n /**\n * A hook event that fires after a death saving throw has been rolled for an Actor, but before\n * updates have been performed.\n * @function dnd5e.rollDeathSave\n * @memberof hookEvents\n * @param {Actor5e} actor Actor for which the death saving throw has been rolled.\n * @param {D20Roll} roll The resulting roll.\n * @param {object} details\n * @param {object} details.updates Updates that will be applied to the actor as a result of this save.\n * @param {string} details.chatString Localizable string displayed in the create chat message. If not set, then\n * no chat message will be displayed.\n * @returns {boolean} Explicitly return `false` to prevent updates from being performed.\n */\n if ( Hooks.call(\"dnd5e.rollDeathSave\", this, roll, details) === false ) return roll;\n\n if ( !foundry.utils.isEmpty(details.updates) ) await this.update(details.updates);\n\n // Display success/failure chat message\n if ( details.chatString ) {\n let chatData = { content: game.i18n.format(details.chatString, {name: this.name}), speaker };\n ChatMessage.applyRollMode(chatData, roll.options.rollMode);\n await ChatMessage.create(chatData);\n }\n\n // Return the rolled result\n return roll;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Get an un-evaluated D20Roll instance used to roll initiative for this Actor.\n * @param {object} [options] Options which modify the roll\n * @param {D20Roll.ADV_MODE} [options.advantageMode] A specific advantage mode to apply\n * @param {string} [options.flavor] Special flavor text to apply\n * @returns {D20Roll} The constructed but unevaluated D20Roll\n */\n getInitiativeRoll(options={}) {\n\n // Use a temporarily cached initiative roll\n if ( this._cachedInitiativeRoll ) return this._cachedInitiativeRoll.clone();\n\n // Obtain required data\n const init = this.system.attributes?.init;\n const abilityId = init?.ability || CONFIG.DND5E.initiativeAbility;\n const data = this.getRollData();\n const flags = this.flags.dnd5e || {};\n if ( flags.initiativeAdv ) options.advantageMode ??= dnd5e.dice.D20Roll.ADV_MODE.ADVANTAGE;\n\n // Standard initiative formula\n const parts = [\"1d20\"];\n\n // Special initiative bonuses\n if ( init ) {\n parts.push(init.mod);\n if ( init.prof.term !== \"0\" ) {\n parts.push(\"@prof\");\n data.prof = init.prof.term;\n }\n if ( init.bonus ) {\n parts.push(\"@bonus\");\n data.bonus = Roll.replaceFormulaData(init.bonus, data);\n }\n }\n\n // Ability check bonuses\n if ( \"abilities\" in this.system ) {\n const abilityBonus = this.system.abilities[abilityId]?.bonuses?.check;\n if ( abilityBonus ) {\n parts.push(\"@abilityBonus\");\n data.abilityBonus = Roll.replaceFormulaData(abilityBonus, data);\n }\n }\n\n // Global check bonus\n if ( \"bonuses\" in this.system ) {\n const globalCheckBonus = this.system.bonuses.abilities?.check;\n if ( globalCheckBonus ) {\n parts.push(\"@globalBonus\");\n data.globalBonus = Roll.replaceFormulaData(globalCheckBonus, data);\n }\n }\n\n // Alert feat\n if ( flags.initiativeAlert ) {\n parts.push(\"@alertBonus\");\n data.alertBonus = 5;\n }\n\n // Ability score tiebreaker\n const tiebreaker = game.settings.get(\"dnd5e\", \"initiativeDexTiebreaker\");\n if ( tiebreaker && (\"abilities\" in this.system) ) {\n const abilityValue = this.system.abilities[abilityId]?.value;\n if ( Number.isNumeric(abilityValue) ) parts.push(String(abilityValue / 100));\n }\n\n options = foundry.utils.mergeObject({\n flavor: options.flavor ?? game.i18n.localize(\"DND5E.Initiative\"),\n halflingLucky: flags.halflingLucky ?? false,\n critical: null,\n fumble: null\n }, options);\n\n // Create the d20 roll\n const formula = parts.join(\" + \");\n return new CONFIG.Dice.D20Roll(formula, data, options);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Roll initiative for this Actor with a dialog that provides an opportunity to elect advantage or other bonuses.\n * @param {object} [rollOptions] Options forwarded to the Actor#getInitiativeRoll method\n * @returns {Promise} A promise which resolves once initiative has been rolled for the Actor\n */\n async rollInitiativeDialog(rollOptions={}) {\n // Create and configure the Initiative roll\n const roll = this.getInitiativeRoll(rollOptions);\n const choice = await roll.configureDialog({\n defaultRollMode: game.settings.get(\"core\", \"rollMode\"),\n title: `${game.i18n.localize(\"DND5E.InitiativeRoll\")}: ${this.name}`,\n chooseModifier: false,\n defaultAction: rollOptions.advantageMode ?? dnd5e.dice.D20Roll.ADV_MODE.NORMAL\n });\n if ( choice === null ) return; // Closed dialog\n\n // Temporarily cache the configured roll and use it to roll initiative for the Actor\n this._cachedInitiativeRoll = roll;\n await this.rollInitiative({createCombatants: true});\n delete this._cachedInitiativeRoll;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async rollInitiative(options={}) {\n /**\n * A hook event that fires before initiative is rolled for an Actor.\n * @function dnd5e.preRollInitiative\n * @memberof hookEvents\n * @param {Actor5e} actor The Actor that is rolling initiative.\n * @param {D20Roll} roll The initiative roll.\n */\n if ( Hooks.call(\"dnd5e.preRollInitiative\", this, this._cachedInitiativeRoll) === false ) return;\n\n const combat = await super.rollInitiative(options);\n const combatants = this.isToken ? this.getActiveTokens(false, true).reduce((arr, t) => {\n const combatant = game.combat.getCombatantByToken(t.id);\n if ( combatant ) arr.push(combatant);\n return arr;\n }, []) : [game.combat.getCombatantByActor(this.id)];\n\n /**\n * A hook event that fires after an Actor has rolled for initiative.\n * @function dnd5e.rollInitiative\n * @memberof hookEvents\n * @param {Actor5e} actor The Actor that rolled initiative.\n * @param {Combatant[]} combatants The associated Combatants in the Combat.\n */\n Hooks.callAll(\"dnd5e.rollInitiative\", this, combatants);\n return combat;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Roll a hit die of the appropriate type, gaining hit points equal to the die roll plus your CON modifier.\n * @param {string} [denomination] The hit denomination of hit die to roll. Example \"d8\".\n * If no denomination is provided, the first available HD will be used\n * @param {object} options Additional options which modify the roll.\n * @returns {Promise} The created Roll instance, or null if no hit die was rolled\n */\n async rollHitDie(denomination, options={}) {\n // If no denomination was provided, choose the first available\n let cls = null;\n if ( !denomination ) {\n cls = this.itemTypes.class.find(c => c.system.hitDiceUsed < c.system.levels);\n if ( !cls ) return null;\n denomination = cls.system.hitDice;\n }\n\n // Otherwise, locate a class (if any) which has an available hit die of the requested denomination\n else cls = this.items.find(i => {\n return (i.system.hitDice === denomination) && ((i.system.hitDiceUsed || 0) < (i.system.levels || 1));\n });\n\n // If no class is available, display an error notification\n if ( !cls ) {\n ui.notifications.error(game.i18n.format(\"DND5E.HitDiceWarn\", {name: this.name, formula: denomination}));\n return null;\n }\n\n // Prepare roll data\n const flavor = game.i18n.localize(\"DND5E.HitDiceRoll\");\n const rollConfig = foundry.utils.mergeObject({\n formula: `max(0, 1${denomination} + @abilities.con.mod)`,\n data: this.getRollData(),\n chatMessage: true,\n messageData: {\n speaker: ChatMessage.getSpeaker({actor: this}),\n flavor,\n title: `${flavor}: ${this.name}`,\n rollMode: game.settings.get(\"core\", \"rollMode\"),\n \"flags.dnd5e.roll\": {type: \"hitDie\"}\n }\n }, options);\n\n /**\n * A hook event that fires before a hit die is rolled for an Actor.\n * @function dnd5e.preRollHitDie\n * @memberof hookEvents\n * @param {Actor5e} actor Actor for which the hit die is to be rolled.\n * @param {object} config Configuration data for the pending roll.\n * @param {string} config.formula Formula that will be rolled.\n * @param {object} config.data Data used when evaluating the roll.\n * @param {boolean} config.chatMessage Should a chat message be created for this roll?\n * @param {object} config.messageData Data used to create the chat message.\n * @param {string} denomination Size of hit die to be rolled.\n * @returns {boolean} Explicitly return `false` to prevent hit die from being rolled.\n */\n if ( Hooks.call(\"dnd5e.preRollHitDie\", this, rollConfig, denomination) === false ) return;\n\n const roll = await new Roll(rollConfig.formula, rollConfig.data).roll({async: true});\n if ( rollConfig.chatMessage ) roll.toMessage(rollConfig.messageData);\n\n const hp = this.system.attributes.hp;\n const dhp = Math.min(Math.max(0, hp.max + (hp.tempmax ?? 0)) - hp.value, roll.total);\n const updates = {\n actor: {\"system.attributes.hp.value\": hp.value + dhp},\n class: {\"system.hitDiceUsed\": cls.system.hitDiceUsed + 1}\n };\n\n /**\n * A hook event that fires after a hit die has been rolled for an Actor, but before updates have been performed.\n * @function dnd5e.rollHitDie\n * @memberof hookEvents\n * @param {Actor5e} actor Actor for which the hit die has been rolled.\n * @param {Roll} roll The resulting roll.\n * @param {object} updates\n * @param {object} updates.actor Updates that will be applied to the actor.\n * @param {object} updates.class Updates that will be applied to the class.\n * @returns {boolean} Explicitly return `false` to prevent updates from being performed.\n */\n if ( Hooks.call(\"dnd5e.rollHitDie\", this, roll, updates) === false ) return roll;\n\n // Re-evaluate dhp in the event that it was changed in the previous hook\n const updateOptions = { dhp: (updates.actor?.[\"system.attributes.hp.value\"] ?? hp.value) - hp.value };\n\n // Perform updates\n if ( !foundry.utils.isEmpty(updates.actor) ) await this.update(updates.actor, updateOptions);\n if ( !foundry.utils.isEmpty(updates.class) ) await cls.update(updates.class);\n\n return roll;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Roll hit points for a specific class as part of a level-up workflow.\n * @param {Item5e} item The class item whose hit dice to roll.\n * @param {object} options\n * @param {boolean} [options.chatMessage=true] Display the chat message for this roll.\n * @returns {Promise} The completed roll.\n * @see {@link dnd5e.preRollClassHitPoints}\n */\n async rollClassHitPoints(item, { chatMessage=true }={}) {\n if ( item.type !== \"class\" ) throw new Error(\"Hit points can only be rolled for a class item.\");\n const rollData = {\n formula: `1${item.system.hitDice}`,\n data: item.getRollData(),\n chatMessage\n };\n const flavor = game.i18n.format(\"DND5E.AdvancementHitPointsRollMessage\", { class: item.name });\n const messageData = {\n title: `${flavor}: ${this.name}`,\n flavor,\n speaker: ChatMessage.getSpeaker({ actor: this }),\n \"flags.dnd5e.roll\": { type: \"hitPoints\" }\n };\n\n /**\n * A hook event that fires before hit points are rolled for a character's class.\n * @function dnd5e.preRollClassHitPoints\n * @memberof hookEvents\n * @param {Actor5e} actor Actor for which the hit points are being rolled.\n * @param {Item5e} item The class item whose hit dice will be rolled.\n * @param {object} rollData\n * @param {string} rollData.formula The string formula to parse.\n * @param {object} rollData.data The data object against which to parse attributes within the formula.\n * @param {object} messageData The data object to use when creating the message.\n */\n Hooks.callAll(\"dnd5e.preRollClassHitPoints\", this, item, rollData, messageData);\n\n const roll = new Roll(rollData.formula, rollData.data);\n await roll.evaluate({async: true});\n\n /**\n * A hook event that fires after hit points haven been rolled for a character's class.\n * @function dnd5e.rollClassHitPoints\n * @memberof hookEvents\n * @param {Actor5e} actor Actor for which the hit points have been rolled.\n * @param {Roll} roll The resulting roll.\n */\n Hooks.callAll(\"dnd5e.rollClassHitPoints\", this, roll);\n\n if ( rollData.chatMessage ) await roll.toMessage(messageData);\n return roll;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Roll hit points for an NPC based on the HP formula.\n * @param {object} options\n * @param {boolean} [options.chatMessage=true] Display the chat message for this roll.\n * @returns {Promise} The completed roll.\n * @see {@link dnd5e.preRollNPCHitPoints}\n */\n async rollNPCHitPoints({ chatMessage=true }={}) {\n if ( this.type !== \"npc\" ) throw new Error(\"NPC hit points can only be rolled for NPCs\");\n const rollData = {\n formula: this.system.attributes.hp.formula,\n data: this.getRollData(),\n chatMessage\n };\n const flavor = game.i18n.format(\"DND5E.HPFormulaRollMessage\");\n const messageData = {\n title: `${flavor}: ${this.name}`,\n flavor,\n speaker: ChatMessage.getSpeaker({ actor: this }),\n \"flags.dnd5e.roll\": { type: \"hitPoints\" }\n };\n\n /**\n * A hook event that fires before hit points are rolled for an NPC.\n * @function dnd5e.preRollNPCHitPoints\n * @memberof hookEvents\n * @param {Actor5e} actor Actor for which the hit points are being rolled.\n * @param {object} rollData\n * @param {string} rollData.formula The string formula to parse.\n * @param {object} rollData.data The data object against which to parse attributes within the formula.\n * @param {object} messageData The data object to use when creating the message.\n */\n Hooks.callAll(\"dnd5e.preRollNPCHitPoints\", this, rollData, messageData);\n\n const roll = new Roll(rollData.formula, rollData.data);\n await roll.evaluate({async: true});\n\n /**\n * A hook event that fires after hit points are rolled for an NPC.\n * @function dnd5e.rollNPCHitPoints\n * @memberof hookEvents\n * @param {Actor5e} actor Actor for which the hit points have been rolled.\n * @param {Roll} roll The resulting roll.\n */\n Hooks.callAll(\"dnd5e.rollNPCHitPoints\", this, roll);\n\n if ( rollData.chatMessage ) await roll.toMessage(messageData);\n return roll;\n }\n\n /* -------------------------------------------- */\n /* Resting */\n /* -------------------------------------------- */\n\n /**\n * Configuration options for a rest.\n *\n * @typedef {object} RestConfiguration\n * @property {boolean} dialog Present a dialog window which allows for rolling hit dice as part of the\n * Short Rest and selecting whether a new day has occurred.\n * @property {boolean} chat Should a chat message be created to summarize the results of the rest?\n * @property {boolean} newDay Does this rest carry over to a new day?\n * @property {boolean} [autoHD] Should hit dice be spent automatically during a short rest?\n * @property {number} [autoHDThreshold] How many hit points should be missing before hit dice are\n * automatically spent during a short rest.\n */\n\n /**\n * Results from a rest operation.\n *\n * @typedef {object} RestResult\n * @property {number} dhp Hit points recovered during the rest.\n * @property {number} dhd Hit dice recovered or spent during the rest.\n * @property {object} updateData Updates applied to the actor.\n * @property {object[]} updateItems Updates applied to actor's items.\n * @property {boolean} longRest Whether the rest type was a long rest.\n * @property {boolean} newDay Whether a new day occurred during the rest.\n * @property {Roll[]} rolls Any rolls that occurred during the rest process, not including hit dice.\n */\n\n /* -------------------------------------------- */\n\n /**\n * Take a short rest, possibly spending hit dice and recovering resources, item uses, and pact slots.\n * @param {RestConfiguration} [config] Configuration options for a short rest.\n * @returns {Promise} A Promise which resolves once the short rest workflow has completed.\n */\n async shortRest(config={}) {\n config = foundry.utils.mergeObject({\n dialog: true, chat: true, newDay: false, autoHD: false, autoHDThreshold: 3\n }, config);\n\n /**\n * A hook event that fires before a short rest is started.\n * @function dnd5e.preShortRest\n * @memberof hookEvents\n * @param {Actor5e} actor The actor that is being rested.\n * @param {RestConfiguration} config Configuration options for the rest.\n * @returns {boolean} Explicitly return `false` to prevent the rest from being started.\n */\n if ( Hooks.call(\"dnd5e.preShortRest\", this, config) === false ) return;\n\n // Take note of the initial hit points and number of hit dice the Actor has\n const hd0 = this.system.attributes.hd;\n const hp0 = this.system.attributes.hp.value;\n\n // Display a Dialog for rolling hit dice\n if ( config.dialog ) {\n try { config.newDay = await ShortRestDialog.shortRestDialog({actor: this, canRoll: hd0 > 0});\n } catch(err) { return; }\n }\n\n // Automatically spend hit dice\n else if ( config.autoHD ) await this.autoSpendHitDice({ threshold: config.autoHDThreshold });\n\n // Return the rest result\n const dhd = this.system.attributes.hd - hd0;\n const dhp = this.system.attributes.hp.value - hp0;\n return this._rest(config.chat, config.newDay, false, dhd, dhp);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Take a long rest, recovering hit points, hit dice, resources, item uses, and spell slots.\n * @param {RestConfiguration} [config] Configuration options for a long rest.\n * @returns {Promise} A Promise which resolves once the long rest workflow has completed.\n */\n async longRest(config={}) {\n config = foundry.utils.mergeObject({\n dialog: true, chat: true, newDay: true\n }, config);\n\n /**\n * A hook event that fires before a long rest is started.\n * @function dnd5e.preLongRest\n * @memberof hookEvents\n * @param {Actor5e} actor The actor that is being rested.\n * @param {RestConfiguration} config Configuration options for the rest.\n * @returns {boolean} Explicitly return `false` to prevent the rest from being started.\n */\n if ( Hooks.call(\"dnd5e.preLongRest\", this, config) === false ) return;\n\n if ( config.dialog ) {\n try { config.newDay = await LongRestDialog.longRestDialog({actor: this}); }\n catch(err) { return; }\n }\n\n return this._rest(config.chat, config.newDay, true);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Perform all of the changes needed for a short or long rest.\n *\n * @param {boolean} chat Summarize the results of the rest workflow as a chat message.\n * @param {boolean} newDay Has a new day occurred during this rest?\n * @param {boolean} longRest Is this a long rest?\n * @param {number} [dhd=0] Number of hit dice spent during so far during the rest.\n * @param {number} [dhp=0] Number of hit points recovered so far during the rest.\n * @returns {Promise} Consolidated results of the rest workflow.\n * @private\n */\n async _rest(chat, newDay, longRest, dhd=0, dhp=0) {\n let hitPointsRecovered = 0;\n let hitPointUpdates = {};\n let hitDiceRecovered = 0;\n let hitDiceUpdates = [];\n const rolls = [];\n\n // Recover hit points & hit dice on long rest\n if ( longRest ) {\n ({ updates: hitPointUpdates, hitPointsRecovered } = this._getRestHitPointRecovery());\n ({ updates: hitDiceUpdates, hitDiceRecovered } = this._getRestHitDiceRecovery());\n }\n\n // Figure out the rest of the changes\n const result = {\n dhd: dhd + hitDiceRecovered,\n dhp: dhp + hitPointsRecovered,\n updateData: {\n ...hitPointUpdates,\n ...this._getRestResourceRecovery({ recoverShortRestResources: !longRest, recoverLongRestResources: longRest }),\n ...this._getRestSpellRecovery({ recoverSpells: longRest })\n },\n updateItems: [\n ...hitDiceUpdates,\n ...(await this._getRestItemUsesRecovery({ recoverLongRestUses: longRest, recoverDailyUses: newDay, rolls }))\n ],\n longRest,\n newDay\n };\n result.rolls = rolls;\n\n /**\n * A hook event that fires after rest result is calculated, but before any updates are performed.\n * @function dnd5e.preRestCompleted\n * @memberof hookEvents\n * @param {Actor5e} actor The actor that is being rested.\n * @param {RestResult} result Details on the rest to be completed.\n * @returns {boolean} Explicitly return `false` to prevent the rest updates from being performed.\n */\n if ( Hooks.call(\"dnd5e.preRestCompleted\", this, result) === false ) return result;\n\n // Perform updates\n await this.update(result.updateData);\n await this.updateEmbeddedDocuments(\"Item\", result.updateItems);\n\n // Display a Chat Message summarizing the rest effects\n if ( chat ) await this._displayRestResultMessage(result, longRest);\n\n /**\n * A hook event that fires when the rest process is completed for an actor.\n * @function dnd5e.restCompleted\n * @memberof hookEvents\n * @param {Actor5e} actor The actor that just completed resting.\n * @param {RestResult} result Details on the rest completed.\n */\n Hooks.callAll(\"dnd5e.restCompleted\", this, result);\n\n // Return data summarizing the rest effects\n return result;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Display a chat message with the result of a rest.\n *\n * @param {RestResult} result Result of the rest operation.\n * @param {boolean} [longRest=false] Is this a long rest?\n * @returns {Promise} Chat message that was created.\n * @protected\n */\n async _displayRestResultMessage(result, longRest=false) {\n const { dhd, dhp, newDay } = result;\n const diceRestored = dhd !== 0;\n const healthRestored = dhp !== 0;\n const length = longRest ? \"Long\" : \"Short\";\n\n // Summarize the rest duration\n let restFlavor;\n switch (game.settings.get(\"dnd5e\", \"restVariant\")) {\n case \"normal\":\n restFlavor = (longRest && newDay) ? \"DND5E.LongRestOvernight\" : `DND5E.${length}RestNormal`;\n break;\n case \"gritty\":\n restFlavor = (!longRest && newDay) ? \"DND5E.ShortRestOvernight\" : `DND5E.${length}RestGritty`;\n break;\n case \"epic\":\n restFlavor = `DND5E.${length}RestEpic`;\n break;\n }\n\n // Determine the chat message to display\n let message;\n if ( diceRestored && healthRestored ) message = `DND5E.${length}RestResult`;\n else if ( longRest && !diceRestored && healthRestored ) message = \"DND5E.LongRestResultHitPoints\";\n else if ( longRest && diceRestored && !healthRestored ) message = \"DND5E.LongRestResultHitDice\";\n else message = `DND5E.${length}RestResultShort`;\n\n // Create a chat message\n let chatData = {\n user: game.user.id,\n speaker: {actor: this, alias: this.name},\n flavor: game.i18n.localize(restFlavor),\n rolls: result.rolls,\n content: game.i18n.format(message, {\n name: this.name,\n dice: longRest ? dhd : -dhd,\n health: dhp\n })\n };\n ChatMessage.applyRollMode(chatData, game.settings.get(\"core\", \"rollMode\"));\n return ChatMessage.create(chatData);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Automatically spend hit dice to recover hit points up to a certain threshold.\n * @param {object} [options]\n * @param {number} [options.threshold=3] A number of missing hit points which would trigger an automatic HD roll.\n * @returns {Promise} Number of hit dice spent.\n */\n async autoSpendHitDice({ threshold=3 }={}) {\n const hp = this.system.attributes.hp;\n const max = Math.max(0, hp.max + hp.tempmax);\n let diceRolled = 0;\n while ( (this.system.attributes.hp.value + threshold) <= max ) {\n const r = await this.rollHitDie();\n if ( r === null ) break;\n diceRolled += 1;\n }\n return diceRolled;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Recovers actor hit points and eliminates any temp HP.\n * @param {object} [options]\n * @param {boolean} [options.recoverTemp=true] Reset temp HP to zero.\n * @param {boolean} [options.recoverTempMax=true] Reset temp max HP to zero.\n * @returns {object} Updates to the actor and change in hit points.\n * @protected\n */\n _getRestHitPointRecovery({recoverTemp=true, recoverTempMax=true}={}) {\n const hp = this.system.attributes.hp;\n let max = hp.max;\n let updates = {};\n if ( recoverTempMax ) updates[\"system.attributes.hp.tempmax\"] = 0;\n else max = Math.max(0, max + (hp.tempmax || 0));\n updates[\"system.attributes.hp.value\"] = max;\n if ( recoverTemp ) updates[\"system.attributes.hp.temp\"] = 0;\n return { updates, hitPointsRecovered: max - hp.value };\n }\n\n /* -------------------------------------------- */\n\n /**\n * Recovers actor resources.\n * @param {object} [options]\n * @param {boolean} [options.recoverShortRestResources=true] Recover resources that recharge on a short rest.\n * @param {boolean} [options.recoverLongRestResources=true] Recover resources that recharge on a long rest.\n * @returns {object} Updates to the actor.\n * @protected\n */\n _getRestResourceRecovery({recoverShortRestResources=true, recoverLongRestResources=true}={}) {\n let updates = {};\n for ( let [k, r] of Object.entries(this.system.resources) ) {\n if ( Number.isNumeric(r.max) && ((recoverShortRestResources && r.sr) || (recoverLongRestResources && r.lr)) ) {\n updates[`system.resources.${k}.value`] = Number(r.max);\n }\n }\n return updates;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Recovers spell slots and pact slots.\n * @param {object} [options]\n * @param {boolean} [options.recoverPact=true] Recover all expended pact slots.\n * @param {boolean} [options.recoverSpells=true] Recover all expended spell slots.\n * @returns {object} Updates to the actor.\n * @protected\n */\n _getRestSpellRecovery({recoverPact=true, recoverSpells=true}={}) {\n const spells = this.system.spells;\n let updates = {};\n if ( recoverPact ) {\n const pact = spells.pact;\n updates[\"system.spells.pact.value\"] = pact.override || pact.max;\n }\n if ( recoverSpells ) {\n for ( let [k, v] of Object.entries(spells) ) {\n updates[`system.spells.${k}.value`] = Number.isNumeric(v.override) ? v.override : (v.max ?? 0);\n }\n }\n return updates;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Recovers class hit dice during a long rest.\n *\n * @param {object} [options]\n * @param {number} [options.maxHitDice] Maximum number of hit dice to recover.\n * @returns {object} Array of item updates and number of hit dice recovered.\n * @protected\n */\n _getRestHitDiceRecovery({maxHitDice}={}) {\n // Determine the number of hit dice which may be recovered\n if ( maxHitDice === undefined ) maxHitDice = Math.max(Math.floor(this.system.details.level / 2), 1);\n\n // Sort classes which can recover HD, assuming players prefer recovering larger HD first.\n const sortedClasses = Object.values(this.classes).sort((a, b) => {\n return (parseInt(b.system.hitDice.slice(1)) || 0) - (parseInt(a.system.hitDice.slice(1)) || 0);\n });\n\n // Update hit dice usage\n let updates = [];\n let hitDiceRecovered = 0;\n for ( let item of sortedClasses ) {\n const hitDiceUsed = item.system.hitDiceUsed;\n if ( (hitDiceRecovered < maxHitDice) && (hitDiceUsed > 0) ) {\n let delta = Math.min(hitDiceUsed || 0, maxHitDice - hitDiceRecovered);\n hitDiceRecovered += delta;\n updates.push({_id: item.id, \"system.hitDiceUsed\": hitDiceUsed - delta});\n }\n }\n return { updates, hitDiceRecovered };\n }\n\n /* -------------------------------------------- */\n\n /**\n * Recovers item uses during short or long rests.\n * @param {object} [options]\n * @param {boolean} [options.recoverShortRestUses=true] Recover uses for items that recharge after a short rest.\n * @param {boolean} [options.recoverLongRestUses=true] Recover uses for items that recharge after a long rest.\n * @param {boolean} [options.recoverDailyUses=true] Recover uses for items that recharge on a new day.\n * @param {Roll[]} [options.rolls] Rolls that have been performed as part of this rest.\n * @returns {Promise} Array of item updates.\n * @protected\n */\n async _getRestItemUsesRecovery({recoverShortRestUses=true, recoverLongRestUses=true,\n recoverDailyUses=true, rolls}={}) {\n let recovery = [];\n if ( recoverShortRestUses ) recovery.push(\"sr\");\n if ( recoverLongRestUses ) recovery.push(\"lr\");\n if ( recoverDailyUses ) recovery.push(\"day\");\n let updates = [];\n for ( let item of this.items ) {\n const uses = item.system.uses;\n if ( recovery.includes(uses?.per) ) {\n updates.push({_id: item.id, \"system.uses.value\": uses.max});\n }\n if ( recoverLongRestUses && item.system.recharge?.value ) {\n updates.push({_id: item.id, \"system.recharge.charged\": true});\n }\n\n // Items that roll to gain charges on a new day\n if ( recoverDailyUses && uses?.recovery && (uses?.per === \"charges\") ) {\n const roll = new Roll(uses.recovery, item.getRollData());\n if ( recoverLongRestUses && (game.settings.get(\"dnd5e\", \"restVariant\") === \"gritty\") ) {\n roll.alter(7, 0, {multiplyNumeric: true});\n }\n\n let total = 0;\n try {\n total = (await roll.evaluate({async: true})).total;\n } catch(err) {\n ui.notifications.warn(game.i18n.format(\"DND5E.ItemRecoveryFormulaWarning\", {\n name: item.name,\n formula: uses.recovery\n }));\n }\n\n const newValue = Math.clamped(uses.value + total, 0, uses.max);\n if ( newValue !== uses.value ) {\n const diff = newValue - uses.value;\n const isMax = newValue === uses.max;\n const locKey = `DND5E.Item${diff < 0 ? \"Loss\" : \"Recovery\"}Roll${isMax ? \"Max\" : \"\"}`;\n updates.push({_id: item.id, \"system.uses.value\": newValue});\n rolls.push(roll);\n await roll.toMessage({\n user: game.user.id,\n speaker: {actor: this, alias: this.name},\n flavor: game.i18n.format(locKey, {name: item.name, count: Math.abs(diff)})\n });\n }\n }\n }\n return updates;\n }\n\n /* -------------------------------------------- */\n /* Conversion & Transformation */\n /* -------------------------------------------- */\n\n /**\n * Convert all carried currency to the highest possible denomination using configured conversion rates.\n * See CONFIG.DND5E.currencies for configuration.\n * @returns {Promise}\n */\n convertCurrency() {\n const currency = foundry.utils.deepClone(this.system.currency);\n const currencies = Object.entries(CONFIG.DND5E.currencies);\n currencies.sort((a, b) => a[1].conversion - b[1].conversion);\n\n // Count total converted units of the base currency\n let basis = currencies.reduce((change, [denomination, config]) => {\n if ( !config.conversion ) return change;\n return change + (currency[denomination] / config.conversion);\n }, 0);\n\n // Convert base units into the highest denomination possible\n for ( const [denomination, config] of currencies) {\n if ( !config.conversion ) continue;\n const amount = Math.floor(basis * config.conversion);\n currency[denomination] = amount;\n basis -= (amount / config.conversion);\n }\n\n // Save the updated currency object\n return this.update({\"system.currency\": currency});\n }\n\n /* -------------------------------------------- */\n\n /**\n * Options that determine what properties of the original actor are kept and which are replaced with\n * the target actor.\n *\n * @typedef {object} TransformationOptions\n * @property {boolean} [keepPhysical=false] Keep physical abilities (str, dex, con)\n * @property {boolean} [keepMental=false] Keep mental abilities (int, wis, cha)\n * @property {boolean} [keepSaves=false] Keep saving throw proficiencies\n * @property {boolean} [keepSkills=false] Keep skill proficiencies\n * @property {boolean} [mergeSaves=false] Take the maximum of the save proficiencies\n * @property {boolean} [mergeSkills=false] Take the maximum of the skill proficiencies\n * @property {boolean} [keepClass=false] Keep proficiency bonus\n * @property {boolean} [keepFeats=false] Keep features\n * @property {boolean} [keepSpells=false] Keep spells\n * @property {boolean} [keepItems=false] Keep items\n * @property {boolean} [keepBio=false] Keep biography\n * @property {boolean} [keepVision=false] Keep vision\n * @property {boolean} [keepSelf=false] Keep self\n * @property {boolean} [keepAE=false] Keep all effects\n * @property {boolean} [keepOriginAE=true] Keep effects which originate on this actor\n * @property {boolean} [keepOtherOriginAE=true] Keep effects which originate on another actor\n * @property {boolean} [keepSpellAE=true] Keep effects which originate from actors spells\n * @property {boolean} [keepFeatAE=true] Keep effects which originate from actors features\n * @property {boolean} [keepEquipmentAE=true] Keep effects which originate on actors equipment\n * @property {boolean} [keepClassAE=true] Keep effects which originate from actors class/subclass\n * @property {boolean} [keepBackgroundAE=true] Keep effects which originate from actors background\n * @property {boolean} [transformTokens=true] Transform linked tokens too\n */\n\n /**\n * Transform this Actor into another one.\n *\n * @param {Actor5e} target The target Actor.\n * @param {TransformationOptions} [options={}] Options that determine how the transformation is performed.\n * @param {boolean} [options.renderSheet=true] Render the sheet of the transformed actor after the polymorph\n * @returns {Promise>|null} Updated token if the transformation was performed.\n */\n async transformInto(target, { keepPhysical=false, keepMental=false, keepSaves=false, keepSkills=false,\n mergeSaves=false, mergeSkills=false, keepClass=false, keepFeats=false, keepSpells=false, keepItems=false,\n keepBio=false, keepVision=false, keepSelf=false, keepAE=false, keepOriginAE=true, keepOtherOriginAE=true,\n keepSpellAE=true, keepEquipmentAE=true, keepFeatAE=true, keepClassAE=true, keepBackgroundAE=true,\n transformTokens=true}={}, {renderSheet=true}={}) {\n\n // Ensure the player is allowed to polymorph\n const allowed = game.settings.get(\"dnd5e\", \"allowPolymorphing\");\n if ( !allowed && !game.user.isGM ) {\n return ui.notifications.warn(game.i18n.localize(\"DND5E.PolymorphWarn\"));\n }\n\n // Get the original Actor data and the new source data\n const o = this.toObject();\n o.flags.dnd5e = o.flags.dnd5e || {};\n o.flags.dnd5e.transformOptions = {mergeSkills, mergeSaves};\n const source = target.toObject();\n\n if ( keepSelf ) {\n o.img = source.img;\n o.name = `${o.name} (${game.i18n.localize(\"DND5E.PolymorphSelf\")})`;\n }\n\n // Prepare new data to merge from the source\n const d = foundry.utils.mergeObject({\n type: o.type, // Remain the same actor type\n name: `${o.name} (${source.name})`, // Append the new shape to your old name\n system: source.system, // Get the systemdata model of your new form\n items: source.items, // Get the items of your new form\n effects: o.effects.concat(source.effects), // Combine active effects from both forms\n img: source.img, // New appearance\n ownership: o.ownership, // Use the original actor permissions\n folder: o.folder, // Be displayed in the same sidebar folder\n flags: o.flags, // Use the original actor flags\n prototypeToken: { name: `${o.name} (${source.name})`, texture: {}, sight: {}, detectionModes: [] } // Set a new empty token\n }, keepSelf ? o : {}); // Keeps most of original actor\n\n // Specifically delete some data attributes\n delete d.system.resources; // Don't change your resource pools\n delete d.system.currency; // Don't lose currency\n delete d.system.bonuses; // Don't lose global bonuses\n\n // Specific additional adjustments\n d.system.details.alignment = o.system.details.alignment; // Don't change alignment\n d.system.attributes.exhaustion = o.system.attributes.exhaustion; // Keep your prior exhaustion level\n d.system.attributes.inspiration = o.system.attributes.inspiration; // Keep inspiration\n d.system.spells = o.system.spells; // Keep spell slots\n d.system.attributes.ac.flat = target.system.attributes.ac.value; // Override AC\n\n // Token appearance updates\n for ( const k of [\"width\", \"height\", \"alpha\", \"lockRotation\"] ) {\n d.prototypeToken[k] = source.prototypeToken[k];\n }\n for ( const k of [\"offsetX\", \"offsetY\", \"scaleX\", \"scaleY\", \"src\", \"tint\"] ) {\n d.prototypeToken.texture[k] = source.prototypeToken.texture[k];\n }\n for ( const k of [\"bar1\", \"bar2\", \"displayBars\", \"displayName\", \"disposition\", \"rotation\", \"elevation\"] ) {\n d.prototypeToken[k] = o.prototypeToken[k];\n }\n\n if ( !keepSelf ) {\n const sightSource = keepVision ? o.prototypeToken : source.prototypeToken;\n for ( const k of [\"range\", \"angle\", \"visionMode\", \"color\", \"attenuation\", \"brightness\", \"saturation\", \"contrast\", \"enabled\"] ) {\n d.prototypeToken.sight[k] = sightSource.sight[k];\n }\n d.prototypeToken.detectionModes = sightSource.detectionModes;\n\n // Transfer ability scores\n const abilities = d.system.abilities;\n for ( let k of Object.keys(abilities) ) {\n const oa = o.system.abilities[k];\n const prof = abilities[k].proficient;\n const type = CONFIG.DND5E.abilities[k]?.type;\n if ( keepPhysical && (type === \"physical\") ) abilities[k] = oa;\n else if ( keepMental && (type === \"mental\") ) abilities[k] = oa;\n if ( keepSaves ) abilities[k].proficient = oa.proficient;\n else if ( mergeSaves ) abilities[k].proficient = Math.max(prof, oa.proficient);\n }\n\n // Transfer skills\n if ( keepSkills ) d.system.skills = o.system.skills;\n else if ( mergeSkills ) {\n for ( let [k, s] of Object.entries(d.system.skills) ) {\n s.value = Math.max(s.value, o.system.skills[k].value);\n }\n }\n\n // Keep specific items from the original data\n d.items = d.items.concat(o.items.filter(i => {\n if ( [\"class\", \"subclass\"].includes(i.type) ) return keepClass;\n else if ( i.type === \"feat\" ) return keepFeats;\n else if ( i.type === \"spell\" ) return keepSpells;\n else return keepItems;\n }));\n\n // Transfer classes for NPCs\n if ( !keepClass && d.system.details.cr ) {\n const cls = new dnd5e.dataModels.item.ClassData({levels: d.system.details.cr});\n d.items.push({\n type: \"class\",\n name: game.i18n.localize(\"DND5E.PolymorphTmpClass\"),\n system: cls.toObject()\n });\n }\n\n // Keep biography\n if ( keepBio ) d.system.details.biography = o.system.details.biography;\n\n // Keep senses\n if ( keepVision ) d.system.traits.senses = o.system.traits.senses;\n\n // Remove active effects\n const oEffects = foundry.utils.deepClone(d.effects);\n const originEffectIds = new Set(oEffects.filter(effect => {\n return !effect.origin || effect.origin === this.uuid;\n }).map(e => e._id));\n d.effects = d.effects.filter(e => {\n if ( keepAE ) return true;\n const origin = e.origin?.startsWith(\"Actor\") || e.origin?.startsWith(\"Item\") ? fromUuidSync(e.origin) : {};\n const originIsSelf = origin?.parent?.uuid === this.uuid;\n const isOriginEffect = originEffectIds.has(e._id);\n if ( isOriginEffect ) return keepOriginAE;\n if ( !isOriginEffect && !originIsSelf ) return keepOtherOriginAE;\n if ( origin.type === \"spell\" ) return keepSpellAE;\n if ( origin.type === \"feat\" ) return keepFeatAE;\n if ( origin.type === \"background\" ) return keepBackgroundAE;\n if ( [\"subclass\", \"class\"].includes(origin.type) ) return keepClassAE;\n if ( [\"equipment\", \"weapon\", \"tool\", \"loot\", \"backpack\"].includes(origin.type) ) return keepEquipmentAE;\n return true;\n });\n }\n\n // Set a random image if source is configured that way\n if ( source.prototypeToken.randomImg ) {\n const images = await target.getTokenImages();\n d.prototypeToken.texture.src = images[Math.floor(Math.random() * images.length)];\n }\n\n // Set new data flags\n if ( !this.isPolymorphed || !d.flags.dnd5e.originalActor ) d.flags.dnd5e.originalActor = this.id;\n d.flags.dnd5e.isPolymorphed = true;\n\n // Gather previous actor data\n const previousActorIds = this.getFlag(\"dnd5e\", \"previousActorIds\") || [];\n previousActorIds.push(this._id);\n foundry.utils.setProperty(d.flags, \"dnd5e.previousActorIds\", previousActorIds);\n\n // Update unlinked Tokens, and grab a copy of any actorData adjustments to re-apply\n if ( this.isToken ) {\n const tokenData = d.prototypeToken;\n delete d.prototypeToken;\n let previousActorData;\n if ( game.dnd5e.isV10 ) {\n tokenData.actorData = d;\n previousActorData = this.token.toObject().actorData;\n } else {\n tokenData.delta = d;\n previousActorData = this.token.delta.toObject();\n }\n foundry.utils.setProperty(tokenData, \"flags.dnd5e.previousActorData\", previousActorData);\n await this.sheet?.close();\n const update = await this.token.update(tokenData);\n if ( renderSheet ) this.sheet?.render(true);\n return update;\n }\n\n // Close sheet for non-transformed Actor\n await this.sheet?.close();\n\n /**\n * A hook event that fires just before the actor is transformed.\n * @function dnd5e.transformActor\n * @memberof hookEvents\n * @param {Actor5e} actor The original actor before transformation.\n * @param {Actor5e} target The target actor into which to transform.\n * @param {object} data The data that will be used to create the new transformed actor.\n * @param {TransformationOptions} options Options that determine how the transformation is performed.\n * @param {object} [options]\n */\n Hooks.callAll(\"dnd5e.transformActor\", this, target, d, {\n keepPhysical, keepMental, keepSaves, keepSkills, mergeSaves, mergeSkills, keepClass, keepFeats, keepSpells,\n keepItems, keepBio, keepVision, keepSelf, keepAE, keepOriginAE, keepOtherOriginAE, keepSpellAE,\n keepEquipmentAE, keepFeatAE, keepClassAE, keepBackgroundAE, transformTokens\n }, {renderSheet});\n\n // Create new Actor with transformed data\n const newActor = await this.constructor.create(d, {renderSheet});\n\n // Update placed Token instances\n if ( !transformTokens ) return;\n const tokens = this.getActiveTokens(true);\n const updates = tokens.map(t => {\n const newTokenData = foundry.utils.deepClone(d.prototypeToken);\n newTokenData._id = t.id;\n newTokenData.actorId = newActor.id;\n newTokenData.actorLink = true;\n\n const dOriginalActor = foundry.utils.getProperty(d, \"flags.dnd5e.originalActor\");\n foundry.utils.setProperty(newTokenData, \"flags.dnd5e.originalActor\", dOriginalActor);\n foundry.utils.setProperty(newTokenData, \"flags.dnd5e.isPolymorphed\", true);\n return newTokenData;\n });\n return canvas.scene?.updateEmbeddedDocuments(\"Token\", updates);\n }\n\n /* -------------------------------------------- */\n\n /**\n * If this actor was transformed with transformTokens enabled, then its\n * active tokens need to be returned to their original state. If not, then\n * we can safely just delete this actor.\n * @param {object} [options]\n * @param {boolean} [options.renderSheet=true] Render Sheet after revert the transformation.\n * @returns {Promise|null} Original actor if it was reverted.\n */\n async revertOriginalForm({renderSheet=true}={}) {\n if ( !this.isPolymorphed ) return;\n if ( !this.isOwner ) return ui.notifications.warn(game.i18n.localize(\"DND5E.PolymorphRevertWarn\"));\n\n /**\n * A hook event that fires just before the actor is reverted to original form.\n * @function dnd5e.revertOriginalForm\n * @memberof hookEvents\n * @param {Actor} this The original actor before transformation.\n * @param {object} [options]\n */\n Hooks.callAll(\"dnd5e.revertOriginalForm\", this, {renderSheet});\n const previousActorIds = this.getFlag(\"dnd5e\", \"previousActorIds\") ?? [];\n const isOriginalActor = !previousActorIds.length;\n const isRendered = this.sheet.rendered;\n\n // Obtain a reference to the original actor\n const original = game.actors.get(this.getFlag(\"dnd5e\", \"originalActor\"));\n\n // If we are reverting an unlinked token, grab the previous actorData, and create a new token\n if ( this.isToken ) {\n const baseActor = original ? original : game.actors.get(this.token.actorId);\n if ( !baseActor ) {\n ui.notifications.warn(game.i18n.format(\"DND5E.PolymorphRevertNoOriginalActorWarn\", {\n reference: this.getFlag(\"dnd5e\", \"originalActor\")\n }));\n return;\n }\n const prototypeTokenData = await baseActor.getTokenDocument();\n const actorData = this.token.getFlag(\"dnd5e\", \"previousActorData\");\n const tokenUpdate = this.token.toObject();\n if ( game.dnd5e.isV10 ) tokenUpdate.actorData = actorData ?? {};\n else {\n actorData._id = tokenUpdate.delta._id;\n tokenUpdate.delta = actorData;\n }\n\n for ( const k of [\"width\", \"height\", \"alpha\", \"lockRotation\", \"name\"] ) {\n tokenUpdate[k] = prototypeTokenData[k];\n }\n for ( const k of [\"offsetX\", \"offsetY\", \"scaleX\", \"scaleY\", \"src\", \"tint\"] ) {\n tokenUpdate.texture[k] = prototypeTokenData.texture[k];\n }\n tokenUpdate.sight = prototypeTokenData.sight;\n tokenUpdate.detectionModes = prototypeTokenData.detectionModes;\n\n await this.sheet.close();\n await canvas.scene?.deleteEmbeddedDocuments(\"Token\", [this.token._id]);\n const token = await TokenDocument.implementation.create(tokenUpdate, {\n parent: canvas.scene, keepId: true, render: true\n });\n if ( isOriginalActor ) {\n await this.unsetFlag(\"dnd5e\", \"isPolymorphed\");\n await this.unsetFlag(\"dnd5e\", \"previousActorIds\");\n await this.token.unsetFlag(\"dnd5e\", \"previousActorData\");\n }\n if ( isRendered && renderSheet ) token.actor?.sheet?.render(true);\n return token;\n }\n\n if ( !original ) {\n ui.notifications.warn(game.i18n.format(\"DND5E.PolymorphRevertNoOriginalActorWarn\", {\n reference: this.getFlag(\"dnd5e\", \"originalActor\")\n }));\n return;\n }\n\n // Get the Tokens which represent this actor\n if ( canvas.ready ) {\n const tokens = this.getActiveTokens(true);\n const tokenData = await original.getTokenDocument();\n const tokenUpdates = tokens.map(t => {\n const update = duplicate(tokenData);\n update._id = t.id;\n delete update.x;\n delete update.y;\n return update;\n });\n await canvas.scene.updateEmbeddedDocuments(\"Token\", tokenUpdates);\n }\n if ( isOriginalActor ) {\n await this.unsetFlag(\"dnd5e\", \"isPolymorphed\");\n await this.unsetFlag(\"dnd5e\", \"previousActorIds\");\n }\n\n // Delete the polymorphed version(s) of the actor, if possible\n if ( game.user.isGM ) {\n const idsToDelete = previousActorIds.filter(id =>\n id !== original.id // Is not original Actor Id\n && game.actors?.get(id) // Actor still exists\n ).concat([this.id]); // Add this id\n\n await Actor.implementation.deleteDocuments(idsToDelete);\n } else if ( isRendered ) {\n this.sheet?.close();\n }\n if ( isRendered && renderSheet ) original.sheet?.render(isRendered);\n return original;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Add additional system-specific sidebar directory context menu options for Actor documents\n * @param {jQuery} html The sidebar HTML\n * @param {Array} entryOptions The default array of context menu options\n */\n static addDirectoryContextOptions(html, entryOptions) {\n entryOptions.push({\n name: \"DND5E.PolymorphRestoreTransformation\",\n icon: '',\n callback: li => {\n const actor = game.actors.get(li.data(\"documentId\"));\n return actor.revertOriginalForm();\n },\n condition: li => {\n const allowed = game.settings.get(\"dnd5e\", \"allowPolymorphing\");\n if ( !allowed && !game.user.isGM ) return false;\n const actor = game.actors.get(li.data(\"documentId\"));\n return actor && actor.isPolymorphed;\n }\n });\n }\n\n /* -------------------------------------------- */\n\n /**\n * Format a type object into a string.\n * @param {object} typeData The type data to convert to a string.\n * @returns {string}\n */\n static formatCreatureType(typeData) {\n if ( typeof typeData === \"string\" ) return typeData; // Backwards compatibility\n let localizedType;\n if ( typeData.value === \"custom\" ) {\n localizedType = typeData.custom;\n } else {\n let code = CONFIG.DND5E.creatureTypes[typeData.value];\n localizedType = game.i18n.localize(typeData.swarm ? `${code}Pl` : code);\n }\n let type = localizedType;\n if ( typeData.swarm ) {\n type = game.i18n.format(\"DND5E.CreatureSwarmPhrase\", {\n size: game.i18n.localize(CONFIG.DND5E.actorSizes[typeData.swarm]),\n type: localizedType\n });\n }\n if (typeData.subtype) type = `${type} (${typeData.subtype})`;\n return type;\n }\n\n /* -------------------------------------------- */\n /* Event Listeners and Handlers */\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n _onUpdate(data, options, userId) {\n super._onUpdate(data, options, userId);\n this._displayScrollingDamage(options.dhp);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Display changes to health as scrolling combat text.\n * Adapt the font size relative to the Actor's HP total to emphasize more significant blows.\n * @param {number} dhp The change in hit points that was applied\n * @private\n */\n _displayScrollingDamage(dhp) {\n if ( !dhp ) return;\n dhp = Number(dhp);\n const tokens = this.isToken ? [this.token?.object] : this.getActiveTokens(true);\n for ( const t of tokens ) {\n const pct = Math.clamped(Math.abs(dhp) / this.system.attributes.hp.max, 0, 1);\n canvas.interface.createScrollingText(t.center, dhp.signedString(), {\n anchor: CONST.TEXT_ANCHOR_POINTS.TOP,\n fontSize: 16 + (32 * pct), // Range between [16, 48]\n fill: CONFIG.DND5E.tokenHPColors[dhp < 0 ? \"damage\" : \"healing\"],\n stroke: 0x000000,\n strokeThickness: 4,\n jitter: 0.25\n });\n }\n }\n}\n","import Actor5e from \"../../documents/actor/actor.mjs\";\nimport ItemGrantFlow from \"./item-grant-flow.mjs\";\n\n/**\n * Inline application that presents the player with a choice of items.\n */\nexport default class ItemChoiceFlow extends ItemGrantFlow {\n\n /**\n * Set of selected UUIDs.\n * @type {Set}\n */\n selected;\n\n /**\n * Cached items from the advancement's pool.\n * @type {Item5e[]}\n */\n pool;\n\n /**\n * List of dropped items.\n * @type {Item5e[]}\n */\n dropped;\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n dragDrop: [{ dropSelector: \".drop-target\" }],\n template: \"systems/dnd5e/templates/advancement/item-choice-flow.hbs\"\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async getContext() {\n this.selected ??= new Set(\n this.retainedData?.items.map(i => foundry.utils.getProperty(i, \"flags.dnd5e.sourceId\"))\n ?? Object.values(this.advancement.value[this.level] ?? {})\n );\n this.pool ??= await Promise.all(this.advancement.configuration.pool.map(uuid => fromUuid(uuid)));\n if ( !this.dropped ) {\n this.dropped = [];\n for ( const data of this.retainedData?.items ?? [] ) {\n const uuid = foundry.utils.getProperty(data, \"flags.dnd5e.sourceId\");\n if ( this.pool.find(i => uuid === i.uuid) ) continue;\n const item = await fromUuid(uuid);\n item.dropped = true;\n this.dropped.push(item);\n }\n }\n\n const max = this.advancement.configuration.choices[this.level];\n const choices = { max, current: this.selected.size, full: this.selected.size >= max };\n\n const previousLevels = {};\n const previouslySelected = new Set();\n for ( const [level, data] of Object.entries(this.advancement.value.added ?? {}) ) {\n if ( level > this.level ) continue;\n previousLevels[level] = await Promise.all(Object.values(data).map(uuid => fromUuid(uuid)));\n Object.values(data).forEach(uuid => previouslySelected.add(uuid));\n }\n\n const items = [...this.pool, ...this.dropped].reduce((items, i) => {\n i.checked = this.selected.has(i.uuid);\n i.disabled = !i.checked && choices.full;\n if ( !previouslySelected.has(i.uuid) ) items.push(i);\n return items;\n }, []);\n\n return { choices, items, previousLevels };\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n activateListeners(html) {\n super.activateListeners(html);\n html.find(\".item-delete\").click(this._onItemDelete.bind(this));\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n _onChangeInput(event) {\n if ( event.target.checked ) this.selected.add(event.target.name);\n else this.selected.delete(event.target.name);\n this.render();\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle deleting a dropped item.\n * @param {Event} event The originating click event.\n * @protected\n */\n async _onItemDelete(event) {\n event.preventDefault();\n const uuidToDelete = event.currentTarget.closest(\".item-name\")?.querySelector(\"input\")?.name;\n if ( !uuidToDelete ) return;\n this.dropped.findSplice(i => i.uuid === uuidToDelete);\n this.selected.delete(uuidToDelete);\n this.render();\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async _onDrop(event) {\n if ( this.selected.size >= this.advancement.configuration.choices[this.level] ) return false;\n\n // Try to extract the data\n let data;\n try {\n data = JSON.parse(event.dataTransfer.getData(\"text/plain\"));\n } catch(err) {\n return false;\n }\n\n if ( data.type !== \"Item\" ) return false;\n const item = await Item.implementation.fromDropData(data);\n\n try {\n this.advancement._validateItemType(item);\n } catch(err) {\n return ui.notifications.error(err.message);\n }\n\n // If the item is already been marked as selected, no need to go further\n if ( this.selected.has(item.uuid) ) return false;\n\n // Check to ensure the dropped item hasn't been selected at a lower level\n for ( const [level, data] of Object.entries(this.advancement.value.added ?? {}) ) {\n if ( level >= this.level ) continue;\n if ( Object.values(data).includes(item.uuid) ) {\n return ui.notifications.error(game.i18n.localize(\"DND5E.AdvancementItemChoicePreviouslyChosenWarning\"));\n }\n }\n\n // If spell level is restricted to available level, ensure the spell is of the appropriate level\n const spellLevel = this.advancement.configuration.restriction.level;\n if ( (this.advancement.configuration.type === \"spell\") && spellLevel === \"available\" ) {\n const maxSlot = this._maxSpellSlotLevel();\n if ( item.system.level > maxSlot ) return ui.notifications.error(game.i18n.format(\n \"DND5E.AdvancementItemChoiceSpellLevelAvailableWarning\", { level: CONFIG.DND5E.spellLevels[maxSlot] }\n ));\n }\n\n // Mark the item as selected\n this.selected.add(item.uuid);\n\n // If the item doesn't already exist in the pool, add it\n if ( !this.pool.find(i => i.uuid === item.uuid) ) {\n this.dropped.push(item);\n item.dropped = true;\n }\n\n this.render();\n }\n\n /* -------------------------------------------- */\n\n /**\n * Determine the maximum spell slot level for the actor to which this advancement is being applied.\n * @returns {number}\n */\n _maxSpellSlotLevel() {\n const spellcasting = this.advancement.item.spellcasting;\n let spells;\n\n // For advancements on classes or subclasses, use the largest slot available for that class\n if ( spellcasting ) {\n const progression = { slot: 0, pact: {} };\n const maxSpellLevel = CONFIG.DND5E.SPELL_SLOT_TABLE[CONFIG.DND5E.SPELL_SLOT_TABLE.length - 1].length;\n spells = Object.fromEntries(Array.fromRange(maxSpellLevel, 1).map(l => [`spell${l}`, {}]));\n Actor5e.computeClassProgression(progression, this.advancement.item, { spellcasting });\n Actor5e.prepareSpellcastingSlots(spells, spellcasting.type, progression);\n }\n\n // For all other items, use the largest slot possible\n else spells = this.advancement.actor.system.spells;\n\n const largestSlot = Object.entries(spells).reduce((slot, [key, data]) => {\n if ( data.max === 0 ) return slot;\n const level = parseInt(key.replace(\"spell\", \"\"));\n if ( !Number.isNaN(level) && level > slot ) return level;\n return slot;\n }, -1);\n return Math.max(spells.pact?.level ?? 0, largestSlot);\n }\n}\n","import { MappingField } from \"../fields.mjs\";\nimport SpellConfigurationData from \"./spell-config.mjs\";\n\nexport default class ItemChoiceConfigurationData extends foundry.abstract.DataModel {\n static defineSchema() {\n return {\n hint: new foundry.data.fields.StringField({label: \"DND5E.AdvancementHint\"}),\n choices: new MappingField(new foundry.data.fields.NumberField(), {\n hint: \"DND5E.AdvancementItemChoiceLevelsHint\"\n }),\n allowDrops: new foundry.data.fields.BooleanField({\n initial: true, label: \"DND5E.AdvancementConfigureAllowDrops\",\n hint: \"DND5E.AdvancementConfigureAllowDropsHint\"\n }),\n type: new foundry.data.fields.StringField({\n blank: false, nullable: true, initial: null,\n label: \"DND5E.AdvancementItemChoiceType\", hint: \"DND5E.AdvancementItemChoiceTypeHint\"\n }),\n pool: new foundry.data.fields.ArrayField(new foundry.data.fields.StringField(), {label: \"DOCUMENT.Items\"}),\n spell: new foundry.data.fields.EmbeddedDataField(SpellConfigurationData, {nullable: true, initial: null}),\n restriction: new foundry.data.fields.SchemaField({\n type: new foundry.data.fields.StringField({label: \"DND5E.Type\"}),\n subtype: new foundry.data.fields.StringField({label: \"DND5E.Subtype\"}),\n level: new foundry.data.fields.StringField({label: \"DND5E.SpellLevel\"})\n })\n };\n }\n}\n","import ItemGrantAdvancement from \"./item-grant.mjs\";\nimport ItemChoiceConfig from \"../../applications/advancement/item-choice-config.mjs\";\nimport ItemChoiceFlow from \"../../applications/advancement/item-choice-flow.mjs\";\nimport ItemChoiceConfigurationData from \"../../data/advancement/item-choice.mjs\";\n\n/**\n * Advancement that presents the player with a choice of multiple items that they can take. Keeps track of which\n * items were selected at which levels.\n */\nexport default class ItemChoiceAdvancement extends ItemGrantAdvancement {\n\n /** @inheritdoc */\n static get metadata() {\n return foundry.utils.mergeObject(super.metadata, {\n dataModels: {\n configuration: ItemChoiceConfigurationData\n },\n order: 50,\n icon: \"systems/dnd5e/icons/svg/item-choice.svg\",\n title: game.i18n.localize(\"DND5E.AdvancementItemChoiceTitle\"),\n hint: game.i18n.localize(\"DND5E.AdvancementItemChoiceHint\"),\n multiLevel: true,\n apps: {\n config: ItemChoiceConfig,\n flow: ItemChoiceFlow\n }\n });\n }\n\n /* -------------------------------------------- */\n /* Instance Properties */\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n get levels() {\n return Array.from(Object.keys(this.configuration.choices));\n }\n\n /* -------------------------------------------- */\n /* Display Methods */\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n configuredForLevel(level) {\n return this.value.added?.[level] !== undefined;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n titleForLevel(level, { configMode=false }={}) {\n return `${this.title} (${game.i18n.localize(\"DND5E.AdvancementChoices\")})`;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n summaryForLevel(level, { configMode=false }={}) {\n const items = this.value.added?.[level];\n if ( !items || configMode ) return \"\";\n return Object.values(items).reduce((html, uuid) => html + game.dnd5e.utils.linkForUuid(uuid), \"\");\n }\n\n /* -------------------------------------------- */\n /* Application Methods */\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n storagePath(level) {\n return `value.added.${level}`;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Verify that the provided item can be used with this advancement based on the configuration.\n * @param {Item5e} item Item that needs to be tested.\n * @param {object} config\n * @param {string} config.type Type restriction on this advancement.\n * @param {object} config.restriction Additional restrictions to be applied.\n * @param {boolean} [config.strict=true] Should an error be thrown when an invalid type is encountered?\n * @returns {boolean} Is this type valid?\n * @throws An error if the item is invalid and strict is `true`.\n */\n _validateItemType(item, { type, restriction, strict=true }={}) {\n super._validateItemType(item, { strict });\n type ??= this.configuration.type;\n restriction ??= this.configuration.restriction;\n\n // Type restriction is set and the item type does not match the selected type\n if ( type && (type !== item.type) ) {\n const typeLabel = game.i18n.localize(CONFIG.Item.typeLabels[restriction]);\n if ( strict ) throw new Error(game.i18n.format(\"DND5E.AdvancementItemChoiceTypeWarning\", {type: typeLabel}));\n return false;\n }\n\n // If additional type restrictions applied, make sure they are valid\n if ( (type === \"feat\") && restriction.type ) {\n const typeConfig = CONFIG.DND5E.featureTypes[restriction.type];\n const subtype = typeConfig.subtypes?.[restriction.subtype];\n let errorLabel;\n if ( restriction.type !== item.system.type.value ) errorLabel = typeConfig.label;\n else if ( subtype && (restriction.subtype !== item.system.type.subtype) ) errorLabel = subtype;\n if ( errorLabel ) {\n if ( strict ) throw new Error(game.i18n.format(\"DND5E.AdvancementItemChoiceTypeWarning\", {type: errorLabel}));\n return false;\n }\n }\n\n // If spell level is restricted, ensure the spell is of the appropriate level\n const l = parseInt(restriction.level);\n if ( (type === \"spell\") && !Number.isNaN(l) && (item.system.level !== l) ) {\n const level = CONFIG.DND5E.spellLevels[l];\n if ( strict ) throw new Error(game.i18n.format(\"DND5E.AdvancementItemChoiceSpellLevelSpecificWarning\", {level}));\n return false;\n }\n\n return true;\n }\n}\n","import { IdentifierField, MappingField } from \"../fields.mjs\";\n\n/**\n * Data model for the Scale Value advancement type.\n *\n * @property {string} identifier Identifier used to select this scale value in roll formulas.\n * @property {string} type Type of data represented by this scale value.\n * @property {object} [distance]\n * @property {string} [distance.units] If distance type is selected, the units each value uses.\n * @property {Object} scale Scale values for each level. Value format is determined by type.\n */\nexport class ScaleValueConfigurationData extends foundry.abstract.DataModel {\n /** @inheritdoc */\n static defineSchema() {\n return {\n identifier: new IdentifierField({required: true, label: \"DND5E.Identifier\"}),\n type: new foundry.data.fields.StringField({\n required: true, initial: \"string\", choices: TYPES, label: \"DND5E.AdvancementScaleValueTypeLabel\"\n }),\n distance: new foundry.data.fields.SchemaField({\n units: new foundry.data.fields.StringField({required: true, label: \"DND5E.MovementUnits\"})\n }),\n scale: new MappingField(new ScaleValueEntryField(), {required: true})\n };\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static migrateData(source) {\n super.migrateData(source);\n if ( source.type === \"numeric\" ) source.type = \"number\";\n Object.values(source.scale ?? {}).forEach(v => TYPES[source.type].migrateData(v));\n }\n}\n\n\n/**\n * Data field that automatically selects the appropriate ScaleValueType based on the selected type.\n */\nexport class ScaleValueEntryField extends foundry.data.fields.ObjectField {\n /** @override */\n _cleanType(value, options) {\n if ( !(typeof value === \"object\") ) value = {};\n\n // Use a defined DataModel\n const cls = TYPES[options.source?.type];\n if ( cls ) return cls.cleanData(value, options);\n\n return value;\n }\n\n /* -------------------------------------------- */\n\n /** @override */\n initialize(value, model) {\n const cls = TYPES[model.type];\n if ( !value || !cls ) return value;\n return new cls(value, {parent: model});\n }\n\n /* -------------------------------------------- */\n\n /** @override */\n toObject(value) {\n return value.toObject(false);\n }\n}\n\n\n/**\n * Base scale value data type that stores generic string values.\n *\n * @property {string} value String value.\n */\nexport class ScaleValueType extends foundry.abstract.DataModel {\n /** @inheritdoc */\n static defineSchema() {\n return {\n value: new foundry.data.fields.StringField({required: true})\n };\n }\n\n /* -------------------------------------------- */\n\n /**\n * Information on how a scale value of this type is configured.\n *\n * @typedef {object} ScaleValueTypeMetadata\n * @property {string} label Name of this type.\n * @property {string} hint Hint for this type shown in the scale value configuration.\n * @property {boolean} isNumeric When using the default editing interface, should numeric inputs be used?\n */\n\n /**\n * Configuration information for this scale value type.\n * @type {ScaleValueTypeMetadata}\n */\n static get metadata() {\n return {\n label: \"DND5E.AdvancementScaleValueTypeString\",\n hint: \"DND5E.AdvancementScaleValueTypeHintString\",\n isNumeric: false\n };\n }\n\n /* -------------------------------------------- */\n\n /**\n * Attempt to convert another scale value type to this one.\n * @param {ScaleValueType} original Original type to attempt to convert.\n * @param {object} [options] Options which affect DataModel construction.\n * @returns {ScaleValueType|null}\n */\n static convertFrom(original, options) {\n return new this({value: original.formula}, options);\n }\n\n /* -------------------------------------------- */\n\n /**\n * This scale value prepared to be used in roll formulas.\n * @type {string|null}\n */\n get formula() { return this.value; }\n\n /* -------------------------------------------- */\n\n /**\n * This scale value formatted for display.\n * @type {string|null}\n */\n get display() { return this.formula; }\n\n /* -------------------------------------------- */\n\n /**\n * Shortcut to the prepared value when used in roll formulas.\n * @returns {string}\n */\n toString() {\n return this.formula;\n }\n}\n\n\n/**\n * Scale value data type that stores numeric values.\n *\n * @property {number} value Numeric value.\n */\nexport class ScaleValueTypeNumber extends ScaleValueType {\n /** @inheritdoc */\n static defineSchema() {\n return {\n value: new foundry.data.fields.NumberField({required: true})\n };\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static get metadata() {\n return foundry.utils.mergeObject(super.metadata, {\n label: \"DND5E.AdvancementScaleValueTypeNumber\",\n hint: \"DND5E.AdvancementScaleValueTypeHintNumber\",\n isNumeric: true\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static convertFrom(original, options) {\n const value = Number(original.formula);\n if ( Number.isNaN(value) ) return null;\n return new this({value}, options);\n }\n}\n\n\n/**\n * Scale value data type that stores challenge ratings.\n *\n * @property {number} value CR value.\n */\nexport class ScaleValueTypeCR extends ScaleValueTypeNumber {\n /** @inheritdoc */\n static defineSchema() {\n return {\n value: new foundry.data.fields.NumberField({required: true, min: 0})\n // TODO: Add CR validator\n };\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static get metadata() {\n return foundry.utils.mergeObject(super.metadata, {\n label: \"DND5E.AdvancementScaleValueTypeCR\",\n hint: \"DND5E.AdvancementScaleValueTypeHintCR\"\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n get display() {\n switch ( this.value ) {\n case 0.125: return \"⅛\";\n case 0.25: return \"¼\";\n case 0.5: return \"½\";\n default: return super.display;\n }\n }\n}\n\n\n/**\n * Scale value data type that stores dice values.\n *\n * @property {number} number Number of dice.\n * @property {number} faces Die faces.\n */\nexport class ScaleValueTypeDice extends ScaleValueType {\n /** @inheritdoc */\n static defineSchema() {\n return {\n number: new foundry.data.fields.NumberField({nullable: true, integer: true, positive: true}),\n faces: new foundry.data.fields.NumberField({required: true, integer: true, positive: true})\n };\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static get metadata() {\n return foundry.utils.mergeObject(super.metadata, {\n label: \"DND5E.AdvancementScaleValueTypeDice\",\n hint: \"DND5E.AdvancementScaleValueTypeHintDice\"\n });\n }\n\n /* -------------------------------------------- */\n\n /**\n * List of die faces that can be chosen.\n * @type {number[]}\n */\n static FACES = [2, 3, 4, 6, 8, 10, 12, 20, 100];\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static convertFrom(original, options) {\n const [number, faces] = (original.formula ?? \"\").split(\"d\");\n if ( !faces || !Number.isNumeric(number) || !Number.isNumeric(faces) ) return null;\n return new this({number: Number(number) || null, faces: Number(faces)}, options);\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n get formula() {\n if ( !this.faces ) return null;\n return `${this.number ?? \"\"}${this.die}`;\n }\n\n /* -------------------------------------------- */\n\n /**\n * The die value to be rolled with the leading \"d\" (e.g. \"d4\").\n * @type {string}\n */\n get die() {\n if ( !this.faces ) return \"\";\n return `d${this.faces}`;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static migrateData(source) {\n if ( source.n ) source.number = source.n;\n if ( source.die ) source.faces = source.die;\n }\n}\n\n\n/**\n * Scale value data type that stores distance values.\n *\n * @property {number} value Numeric value.\n */\nexport class ScaleValueTypeDistance extends ScaleValueTypeNumber {\n /** @inheritdoc */\n static get metadata() {\n return foundry.utils.mergeObject(super.metadata, {\n label: \"DND5E.AdvancementScaleValueTypeDistance\",\n hint: \"DND5E.AdvancementScaleValueTypeHintDistance\"\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n get display() {\n return `${this.value} ${CONFIG.DND5E.movementUnits[this.parent.configuration.distance?.units ?? \"ft\"]}`;\n }\n}\n\n\n/**\n * The available types of scaling value.\n * @enum {ScaleValueType}\n */\nexport const TYPES = {\n string: ScaleValueType,\n number: ScaleValueTypeNumber,\n cr: ScaleValueTypeCR,\n dice: ScaleValueTypeDice,\n distance: ScaleValueTypeDistance\n};\n","import AdvancementConfig from \"./advancement-config.mjs\";\nimport { TYPES } from \"../../data/advancement/scale-value.mjs\";\n\n/**\n * Configuration application for scale values.\n */\nexport default class ScaleValueConfig extends AdvancementConfig {\n\n /** @inheritdoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n classes: [\"dnd5e\", \"advancement\", \"scale-value\", \"two-column\"],\n template: \"systems/dnd5e/templates/advancement/scale-value-config.hbs\",\n width: 540\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n getData() {\n const config = this.advancement.configuration;\n const type = TYPES[config.type];\n return foundry.utils.mergeObject(super.getData(), {\n classIdentifier: this.item.identifier,\n previewIdentifier: config.identifier || this.advancement.title?.slugify()\n || this.advancement.constructor.metadata.title.slugify(),\n type: type.metadata,\n types: Object.fromEntries(\n Object.entries(TYPES).map(([key, d]) => [key, game.i18n.localize(d.metadata.label)])\n ),\n faces: Object.fromEntries(TYPES.dice.FACES.map(die => [die, `d${die}`])),\n levels: this._prepareLevelData(),\n movementUnits: CONFIG.DND5E.movementUnits\n });\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare the data to display at each of the scale levels.\n * @returns {object}\n * @protected\n */\n _prepareLevelData() {\n let lastValue = null;\n return Array.fromRange(CONFIG.DND5E.maxLevel + 1).slice(1).reduce((obj, level) => {\n obj[level] = { placeholder: this._formatPlaceholder(lastValue), value: null };\n const value = this.advancement.configuration.scale[level];\n if ( value ) {\n this._mergeScaleValues(value, lastValue);\n obj[level].className = \"new-scale-value\";\n obj[level].value = value;\n lastValue = value;\n }\n return obj;\n }, {});\n }\n\n /* -------------------------------------------- */\n\n /**\n * Formats the placeholder for this scale value.\n * @param {*} placeholder\n * @returns {object}\n * @protected\n */\n _formatPlaceholder(placeholder) {\n if ( this.advancement.configuration.type === \"dice\" ) {\n return { number: placeholder?.number ?? \"\", faces: placeholder?.faces ? `d${placeholder.faces}` : \"\" };\n }\n return { value: placeholder?.value ?? \"\" };\n }\n\n /* -------------------------------------------- */\n\n /**\n * For scale values with multiple properties, have missing properties inherit from earlier filled-in values.\n * @param {*} value The primary value.\n * @param {*} lastValue The previous value.\n */\n _mergeScaleValues(value, lastValue) {\n for ( const k of Object.keys(lastValue ?? {}) ) {\n if ( value[k] == null ) value[k] = lastValue[k];\n }\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static _cleanedObject(object) {\n return Object.entries(object).reduce((obj, [key, value]) => {\n if ( Object.keys(value ?? {}).some(k => value[k]) ) obj[key] = value;\n else obj[`-=${key}`] = null;\n return obj;\n }, {});\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n prepareConfigurationUpdate(configuration) {\n // Ensure multiple values in a row are not the same\n let lastValue = null;\n for ( const [lvl, value] of Object.entries(configuration.scale) ) {\n if ( this.advancement.testEquality(lastValue, value) ) configuration.scale[lvl] = null;\n else if ( Object.keys(value ?? {}).some(k => value[k]) ) {\n this._mergeScaleValues(value, lastValue);\n lastValue = value;\n }\n }\n configuration.scale = this.constructor._cleanedObject(configuration.scale);\n return configuration;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n activateListeners(html) {\n super.activateListeners(html);\n this.form.querySelector(\"input[name='title']\").addEventListener(\"input\", this._onChangeTitle.bind(this));\n this.form.querySelector(\".identifier-hint-copy\").addEventListener(\"click\", this._onIdentifierHintCopy.bind(this));\n }\n\n /* -------------------------------------------- */\n\n /**\n * Copies the full scale identifier hint to the clipboard.\n * @param {Event} event The triggering click event.\n * @protected\n */\n _onIdentifierHintCopy(event) {\n const data = this.getData();\n game.clipboard.copyPlainText(`@scale.${data.classIdentifier}.${data.previewIdentifier}`);\n game.tooltip.activate(event.target, {text: game.i18n.localize(\"DND5E.IdentifierCopied\"), direction: \"UP\"});\n }\n\n /* -------------------------------------------- */\n\n /**\n * If no identifier is manually entered, slugify the custom title and display as placeholder.\n * @param {Event} event Change event to the title input.\n */\n _onChangeTitle(event) {\n const slug = (event.target.value || this.advancement.constructor.metadata.title).slugify();\n this.form.querySelector(\"input[name='configuration.identifier']\").placeholder = slug;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async _updateObject(event, formData) {\n const updates = foundry.utils.expandObject(formData);\n const typeChange = \"configuration.type\" in formData;\n if ( typeChange && (updates.configuration.type !== this.advancement.configuration.type) ) {\n // Clear existing scale value data to prevent error during type update\n await this.advancement.update(Array.fromRange(CONFIG.DND5E.maxLevel, 1).reduce((obj, lvl) => {\n obj[`configuration.scale.-=${lvl}`] = null;\n return obj;\n }, {}));\n updates.configuration.scale ??= {};\n const OriginalType = TYPES[this.advancement.configuration.type];\n const NewType = TYPES[updates.configuration.type];\n for ( const [lvl, data] of Object.entries(updates.configuration.scale) ) {\n const original = new OriginalType(data, { parent: this.advancement });\n updates.configuration.scale[lvl] = NewType.convertFrom(original)?.toObject();\n }\n }\n return super._updateObject(event, foundry.utils.flattenObject(updates));\n }\n}\n","import AdvancementFlow from \"./advancement-flow.mjs\";\n\n/**\n * Inline application that displays any changes to a scale value.\n */\nexport default class ScaleValueFlow extends AdvancementFlow {\n\n /** @inheritdoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n template: \"systems/dnd5e/templates/advancement/scale-value-flow.hbs\"\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n getData() {\n return foundry.utils.mergeObject(super.getData(), {\n initial: this.advancement.valueForLevel(this.level - 1)?.display,\n final: this.advancement.valueForLevel(this.level).display\n });\n }\n}\n","import Advancement from \"./advancement.mjs\";\nimport ScaleValueConfig from \"../../applications/advancement/scale-value-config.mjs\";\nimport ScaleValueFlow from \"../../applications/advancement/scale-value-flow.mjs\";\nimport { ScaleValueConfigurationData, TYPES } from \"../../data/advancement/scale-value.mjs\";\n\n/**\n * Advancement that represents a value that scales with class level. **Can only be added to classes or subclasses.**\n */\nexport default class ScaleValueAdvancement extends Advancement {\n\n /** @inheritdoc */\n static get metadata() {\n return foundry.utils.mergeObject(super.metadata, {\n dataModels: {\n configuration: ScaleValueConfigurationData\n },\n order: 60,\n icon: \"systems/dnd5e/icons/svg/scale-value.svg\",\n title: game.i18n.localize(\"DND5E.AdvancementScaleValueTitle\"),\n hint: game.i18n.localize(\"DND5E.AdvancementScaleValueHint\"),\n multiLevel: true,\n validItemTypes: new Set([\"class\", \"subclass\"]),\n apps: {\n config: ScaleValueConfig,\n flow: ScaleValueFlow\n }\n });\n }\n\n /* -------------------------------------------- */\n\n /**\n * The available types of scaling value.\n * @enum {ScaleValueType}\n */\n static TYPES = TYPES;\n\n /* -------------------------------------------- */\n /* Instance Properties */\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n get levels() {\n return Array.from(Object.keys(this.configuration.scale).map(l => Number(l)));\n }\n\n /* -------------------------------------------- */\n\n /**\n * Identifier for this scale value, either manual value or the slugified title.\n * @type {string}\n */\n get identifier() {\n return this.configuration.identifier || this.title.slugify();\n }\n\n /* -------------------------------------------- */\n /* Display Methods */\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n titleForLevel(level, { configMode=false }={}) {\n const value = this.valueForLevel(level)?.display;\n if ( !value ) return this.title;\n return `${this.title}: ${value}`;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Scale value for the given level.\n * @param {number} level Level for which to get the scale value.\n * @returns {ScaleValueType} Scale value at the given level or null if none exists.\n */\n valueForLevel(level) {\n const key = Object.keys(this.configuration.scale).reverse().find(l => Number(l) <= level);\n const data = this.configuration.scale[key];\n const TypeClass = this.constructor.TYPES[this.configuration.type];\n if ( !data || !TypeClass ) return null;\n return new TypeClass(data, { parent: this });\n }\n\n /* -------------------------------------------- */\n\n /**\n * Compare two scaling values and determine if they are equal.\n * @param {*} a\n * @param {*} b\n * @returns {boolean}\n */\n testEquality(a, b) {\n const keys = Object.keys(a ?? {});\n if ( keys.length !== Object.keys(b ?? {}).length ) return false;\n for ( const k of keys ) {\n if ( a[k] !== b[k] ) return false;\n }\n return true;\n }\n\n}\n","import * as advancement from \"./documents/advancement/_module.mjs\";\nimport { preLocalize } from \"./utils.mjs\";\n\n// Namespace Configuration Values\nconst DND5E = {};\n\n// ASCII Artwork\nDND5E.ASCII = `_______________________________\n______ ______ _____ _____\n| _ \\\\___ | _ \\\\ ___| ___|\n| | | ( _ ) | | | |___ \\\\| |__\n| | | / _ \\\\/\\\\ | | | \\\\ \\\\ __|\n| |/ / (_> < |/ //\\\\__/ / |___\n|___/ \\\\___/\\\\/___/ \\\\____/\\\\____/\n_______________________________`;\n\n/**\n * Configuration data for abilities.\n *\n * @typedef {object} AbilityConfiguration\n * @property {string} label Localized label.\n * @property {string} abbreviation Localized abbreviation.\n * @property {string} [type] Whether this is a \"physical\" or \"mental\" ability.\n * @property {Object} [defaults] Default values for this ability based on actor type.\n * If a string is used, the system will attempt to fetch.\n * the value of the specified ability.\n */\n\n/**\n * The set of Ability Scores used within the system.\n * @enum {AbilityConfiguration}\n */\nDND5E.abilities = {\n str: {\n label: \"DND5E.AbilityStr\",\n abbreviation: \"DND5E.AbilityStrAbbr\",\n type: \"physical\"\n },\n dex: {\n label: \"DND5E.AbilityDex\",\n abbreviation: \"DND5E.AbilityDexAbbr\",\n type: \"physical\"\n },\n con: {\n label: \"DND5E.AbilityCon\",\n abbreviation: \"DND5E.AbilityConAbbr\",\n type: \"physical\"\n },\n int: {\n label: \"DND5E.AbilityInt\",\n abbreviation: \"DND5E.AbilityIntAbbr\",\n type: \"mental\",\n defaults: { vehicle: 0 }\n },\n wis: {\n label: \"DND5E.AbilityWis\",\n abbreviation: \"DND5E.AbilityWisAbbr\",\n type: \"mental\",\n defaults: { vehicle: 0 }\n },\n cha: {\n label: \"DND5E.AbilityCha\",\n abbreviation: \"DND5E.AbilityChaAbbr\",\n type: \"mental\",\n defaults: { vehicle: 0 }\n },\n hon: {\n label: \"DND5E.AbilityHon\",\n abbreviation: \"DND5E.AbilityHonAbbr\",\n type: \"mental\",\n defaults: { npc: \"cha\", vehicle: 0 }\n },\n san: {\n label: \"DND5E.AbilitySan\",\n abbreviation: \"DND5E.AbilitySanAbbr\",\n type: \"mental\",\n defaults: { npc: \"wis\", vehicle: 0 }\n }\n};\npreLocalize(\"abilities\", { keys: [\"label\", \"abbreviation\"] });\npatchConfig(\"abilities\", \"label\", { since: 2.2, until: 2.4 });\n\nObject.defineProperty(DND5E, \"abilityAbbreviations\", {\n get() {\n foundry.utils.logCompatibilityWarning(\n \"The `abilityAbbreviations` configuration object has been merged with `abilities`.\",\n { since: \"DnD5e 2.2\", until: \"DnD5e 2.4\" }\n );\n return Object.fromEntries(Object.entries(DND5E.abilities).map(([k, v]) => [k, v.abbreviation]));\n }\n});\n\n/**\n * Configure which ability score is used as the default modifier for initiative rolls.\n * @type {string}\n */\nDND5E.initiativeAbility = \"dex\";\n\n/**\n * Configure which ability score is used when calculating hit points per level.\n * @type {string}\n */\nDND5E.hitPointsAbility = \"con\";\n\n/* -------------------------------------------- */\n\n/**\n * Configuration data for skills.\n *\n * @typedef {object} SkillConfiguration\n * @property {string} label Localized label.\n * @property {string} ability Key for the default ability used by this skill.\n */\n\n/**\n * The set of skill which can be trained with their default ability scores.\n * @enum {SkillConfiguration}\n */\nDND5E.skills = {\n acr: { label: \"DND5E.SkillAcr\", ability: \"dex\" },\n ani: { label: \"DND5E.SkillAni\", ability: \"wis\" },\n arc: { label: \"DND5E.SkillArc\", ability: \"int\" },\n ath: { label: \"DND5E.SkillAth\", ability: \"str\" },\n dec: { label: \"DND5E.SkillDec\", ability: \"cha\" },\n his: { label: \"DND5E.SkillHis\", ability: \"int\" },\n ins: { label: \"DND5E.SkillIns\", ability: \"wis\" },\n itm: { label: \"DND5E.SkillItm\", ability: \"cha\" },\n inv: { label: \"DND5E.SkillInv\", ability: \"int\" },\n med: { label: \"DND5E.SkillMed\", ability: \"wis\" },\n nat: { label: \"DND5E.SkillNat\", ability: \"int\" },\n prc: { label: \"DND5E.SkillPrc\", ability: \"wis\" },\n prf: { label: \"DND5E.SkillPrf\", ability: \"cha\" },\n per: { label: \"DND5E.SkillPer\", ability: \"cha\" },\n rel: { label: \"DND5E.SkillRel\", ability: \"int\" },\n slt: { label: \"DND5E.SkillSlt\", ability: \"dex\" },\n ste: { label: \"DND5E.SkillSte\", ability: \"dex\" },\n sur: { label: \"DND5E.SkillSur\", ability: \"wis\" }\n};\npreLocalize(\"skills\", { key: \"label\", sort: true });\n\n/* -------------------------------------------- */\n\n/**\n * Character alignment options.\n * @enum {string}\n */\nDND5E.alignments = {\n lg: \"DND5E.AlignmentLG\",\n ng: \"DND5E.AlignmentNG\",\n cg: \"DND5E.AlignmentCG\",\n ln: \"DND5E.AlignmentLN\",\n tn: \"DND5E.AlignmentTN\",\n cn: \"DND5E.AlignmentCN\",\n le: \"DND5E.AlignmentLE\",\n ne: \"DND5E.AlignmentNE\",\n ce: \"DND5E.AlignmentCE\"\n};\npreLocalize(\"alignments\");\n\n/* -------------------------------------------- */\n\n/**\n * An enumeration of item attunement types.\n * @enum {number}\n */\nDND5E.attunementTypes = {\n NONE: 0,\n REQUIRED: 1,\n ATTUNED: 2\n};\n\n/**\n * An enumeration of item attunement states.\n * @type {{\"0\": string, \"1\": string, \"2\": string}}\n */\nDND5E.attunements = {\n 0: \"DND5E.AttunementNone\",\n 1: \"DND5E.AttunementRequired\",\n 2: \"DND5E.AttunementAttuned\"\n};\npreLocalize(\"attunements\");\n\n/* -------------------------------------------- */\n\n/**\n * General weapon categories.\n * @enum {string}\n */\nDND5E.weaponProficiencies = {\n sim: \"DND5E.WeaponSimpleProficiency\",\n mar: \"DND5E.WeaponMartialProficiency\"\n};\npreLocalize(\"weaponProficiencies\");\n\n/**\n * A mapping between `DND5E.weaponTypes` and `DND5E.weaponProficiencies` that\n * is used to determine if character has proficiency when adding an item.\n * @enum {(boolean|string)}\n */\nDND5E.weaponProficienciesMap = {\n natural: true,\n simpleM: \"sim\",\n simpleR: \"sim\",\n martialM: \"mar\",\n martialR: \"mar\"\n};\n\n/**\n * The basic weapon types in 5e. This enables specific weapon proficiencies or\n * starting equipment provided by classes and backgrounds.\n * @enum {string}\n */\nDND5E.weaponIds = {\n battleaxe: \"I0WocDSuNpGJayPb\",\n blowgun: \"wNWK6yJMHG9ANqQV\",\n club: \"nfIRTECQIG81CvM4\",\n dagger: \"0E565kQUBmndJ1a2\",\n dart: \"3rCO8MTIdPGSW6IJ\",\n flail: \"UrH3sMdnUDckIHJ6\",\n glaive: \"rOG1OM2ihgPjOvFW\",\n greataxe: \"1Lxk6kmoRhG8qQ0u\",\n greatclub: \"QRCsxkCwWNwswL9o\",\n greatsword: \"xMkP8BmFzElcsMaR\",\n halberd: \"DMejWAc8r8YvDPP1\",\n handaxe: \"eO7Fbv5WBk5zvGOc\",\n handcrossbow: \"qaSro7kFhxD6INbZ\",\n heavycrossbow: \"RmP0mYRn2J7K26rX\",\n javelin: \"DWLMnODrnHn8IbAG\",\n lance: \"RnuxdHUAIgxccVwj\",\n lightcrossbow: \"ddWvQRLmnnIS0eLF\",\n lighthammer: \"XVK6TOL4sGItssAE\",\n longbow: \"3cymOVja8jXbzrdT\",\n longsword: \"10ZP2Bu3vnCuYMIB\",\n mace: \"Ajyq6nGwF7FtLhDQ\",\n maul: \"DizirD7eqjh8n95A\",\n morningstar: \"dX8AxCh9o0A9CkT3\",\n net: \"aEiM49V8vWpWw7rU\",\n pike: \"tC0kcqZT9HHAO0PD\",\n quarterstaff: \"g2dWN7PQiMRYWzyk\",\n rapier: \"Tobce1hexTnDk4sV\",\n scimitar: \"fbC0Mg1a73wdFbqO\",\n shortsword: \"osLzOwQdPtrK3rQH\",\n sickle: \"i4NeNZ30ycwPDHMx\",\n spear: \"OG4nBBydvmfWYXIk\",\n shortbow: \"GJv6WkD7D2J6rP6M\",\n sling: \"3gynWO9sN4OLGMWD\",\n trident: \"F65ANO66ckP8FDMa\",\n warpick: \"2YdfjN1PIIrSHZii\",\n warhammer: \"F0Df164Xv1gWcYt0\",\n whip: \"QKTyxoO0YDnAsbYe\"\n};\n\n/* -------------------------------------------- */\n\n/**\n * The categories into which Tool items can be grouped.\n *\n * @enum {string}\n */\nDND5E.toolTypes = {\n art: \"DND5E.ToolArtisans\",\n game: \"DND5E.ToolGamingSet\",\n music: \"DND5E.ToolMusicalInstrument\"\n};\npreLocalize(\"toolTypes\", { sort: true });\n\n/**\n * The categories of tool proficiencies that a character can gain.\n *\n * @enum {string}\n */\nDND5E.toolProficiencies = {\n ...DND5E.toolTypes,\n vehicle: \"DND5E.ToolVehicle\"\n};\npreLocalize(\"toolProficiencies\", { sort: true });\n\n/**\n * The basic tool types in 5e. This enables specific tool proficiencies or\n * starting equipment provided by classes and backgrounds.\n * @enum {string}\n */\nDND5E.toolIds = {\n alchemist: \"SztwZhbhZeCqyAes\",\n bagpipes: \"yxHi57T5mmVt0oDr\",\n brewer: \"Y9S75go1hLMXUD48\",\n calligrapher: \"jhjo20QoiD5exf09\",\n card: \"YwlHI3BVJapz4a3E\",\n carpenter: \"8NS6MSOdXtUqD7Ib\",\n cartographer: \"fC0lFK8P4RuhpfaU\",\n chess: \"23y8FvWKf9YLcnBL\",\n cobbler: \"hM84pZnpCqKfi8XH\",\n cook: \"Gflnp29aEv5Lc1ZM\",\n dice: \"iBuTM09KD9IoM5L8\",\n disg: \"IBhDAr7WkhWPYLVn\",\n drum: \"69Dpr25pf4BjkHKb\",\n dulcimer: \"NtdDkjmpdIMiX7I2\",\n flute: \"eJOrPcAz9EcquyRQ\",\n forg: \"cG3m4YlHfbQlLEOx\",\n glassblower: \"rTbVrNcwApnuTz5E\",\n herb: \"i89okN7GFTWHsvPy\",\n horn: \"aa9KuBy4dst7WIW9\",\n jeweler: \"YfBwELTgPFHmQdHh\",\n leatherworker: \"PUMfwyVUbtyxgYbD\",\n lute: \"qBydtUUIkv520DT7\",\n lyre: \"EwG1EtmbgR3bM68U\",\n mason: \"skUih6tBvcBbORzA\",\n navg: \"YHCmjsiXxZ9UdUhU\",\n painter: \"ccm5xlWhx74d6lsK\",\n panflute: \"G5m5gYIx9VAUWC3J\",\n pois: \"il2GNi8C0DvGLL9P\",\n potter: \"hJS8yEVkqgJjwfWa\",\n shawm: \"G3cqbejJpfB91VhP\",\n smith: \"KndVe2insuctjIaj\",\n thief: \"woWZ1sO5IUVGzo58\",\n tinker: \"0d08g1i5WXnNrCNA\",\n viol: \"baoe3U5BfMMMxhCU\",\n weaver: \"ap9prThUB2y9lDyj\",\n woodcarver: \"xKErqkLo4ASYr5EP\"\n};\n\n/* -------------------------------------------- */\n\n/**\n * Time periods that accept a numeric value.\n * @enum {string}\n */\nDND5E.scalarTimePeriods = {\n turn: \"DND5E.TimeTurn\",\n round: \"DND5E.TimeRound\",\n minute: \"DND5E.TimeMinute\",\n hour: \"DND5E.TimeHour\",\n day: \"DND5E.TimeDay\",\n month: \"DND5E.TimeMonth\",\n year: \"DND5E.TimeYear\"\n};\npreLocalize(\"scalarTimePeriods\");\n\n/* -------------------------------------------- */\n\n/**\n * Time periods for spells that don't have a defined ending.\n * @enum {string}\n */\nDND5E.permanentTimePeriods = {\n disp: \"DND5E.TimeDisp\",\n dstr: \"DND5E.TimeDispTrig\",\n perm: \"DND5E.TimePerm\"\n};\npreLocalize(\"permanentTimePeriods\");\n\n/* -------------------------------------------- */\n\n/**\n * Time periods that don't accept a numeric value.\n * @enum {string}\n */\nDND5E.specialTimePeriods = {\n inst: \"DND5E.TimeInst\",\n spec: \"DND5E.Special\"\n};\npreLocalize(\"specialTimePeriods\");\n\n/* -------------------------------------------- */\n\n/**\n * The various lengths of time over which effects can occur.\n * @enum {string}\n */\nDND5E.timePeriods = {\n ...DND5E.specialTimePeriods,\n ...DND5E.permanentTimePeriods,\n ...DND5E.scalarTimePeriods\n};\npreLocalize(\"timePeriods\");\n\n/* -------------------------------------------- */\n\n/**\n * Various ways in which an item or ability can be activated.\n * @enum {string}\n */\nDND5E.abilityActivationTypes = {\n action: \"DND5E.Action\",\n bonus: \"DND5E.BonusAction\",\n reaction: \"DND5E.Reaction\",\n minute: DND5E.timePeriods.minute,\n hour: DND5E.timePeriods.hour,\n day: DND5E.timePeriods.day,\n special: DND5E.timePeriods.spec,\n legendary: \"DND5E.LegendaryActionLabel\",\n mythic: \"DND5E.MythicActionLabel\",\n lair: \"DND5E.LairActionLabel\",\n crew: \"DND5E.VehicleCrewAction\"\n};\npreLocalize(\"abilityActivationTypes\");\n\n/* -------------------------------------------- */\n\n/**\n * Different things that an ability can consume upon use.\n * @enum {string}\n */\nDND5E.abilityConsumptionTypes = {\n ammo: \"DND5E.ConsumeAmmunition\",\n attribute: \"DND5E.ConsumeAttribute\",\n hitDice: \"DND5E.ConsumeHitDice\",\n material: \"DND5E.ConsumeMaterial\",\n charges: \"DND5E.ConsumeCharges\"\n};\npreLocalize(\"abilityConsumptionTypes\", { sort: true });\n\n/* -------------------------------------------- */\n\n/**\n * Creature sizes.\n * @enum {string}\n */\nDND5E.actorSizes = {\n tiny: \"DND5E.SizeTiny\",\n sm: \"DND5E.SizeSmall\",\n med: \"DND5E.SizeMedium\",\n lg: \"DND5E.SizeLarge\",\n huge: \"DND5E.SizeHuge\",\n grg: \"DND5E.SizeGargantuan\"\n};\npreLocalize(\"actorSizes\");\n\n/**\n * Default token image size for the values of `DND5E.actorSizes`.\n * @enum {number}\n */\nDND5E.tokenSizes = {\n tiny: 0.5,\n sm: 1,\n med: 1,\n lg: 2,\n huge: 3,\n grg: 4\n};\n\n/**\n * Colors used to visualize temporary and temporary maximum HP in token health bars.\n * @enum {number}\n */\nDND5E.tokenHPColors = {\n damage: 0xFF0000,\n healing: 0x00FF00,\n temp: 0x66CCFF,\n tempmax: 0x440066,\n negmax: 0x550000\n};\n\n/* -------------------------------------------- */\n\n/**\n * Default types of creatures.\n * *Note: Not pre-localized to allow for easy fetching of pluralized forms.*\n * @enum {string}\n */\nDND5E.creatureTypes = {\n aberration: \"DND5E.CreatureAberration\",\n beast: \"DND5E.CreatureBeast\",\n celestial: \"DND5E.CreatureCelestial\",\n construct: \"DND5E.CreatureConstruct\",\n dragon: \"DND5E.CreatureDragon\",\n elemental: \"DND5E.CreatureElemental\",\n fey: \"DND5E.CreatureFey\",\n fiend: \"DND5E.CreatureFiend\",\n giant: \"DND5E.CreatureGiant\",\n humanoid: \"DND5E.CreatureHumanoid\",\n monstrosity: \"DND5E.CreatureMonstrosity\",\n ooze: \"DND5E.CreatureOoze\",\n plant: \"DND5E.CreaturePlant\",\n undead: \"DND5E.CreatureUndead\"\n};\n\n/* -------------------------------------------- */\n\n/**\n * Classification types for item action types.\n * @enum {string}\n */\nDND5E.itemActionTypes = {\n mwak: \"DND5E.ActionMWAK\",\n rwak: \"DND5E.ActionRWAK\",\n msak: \"DND5E.ActionMSAK\",\n rsak: \"DND5E.ActionRSAK\",\n save: \"DND5E.ActionSave\",\n heal: \"DND5E.ActionHeal\",\n abil: \"DND5E.ActionAbil\",\n util: \"DND5E.ActionUtil\",\n other: \"DND5E.ActionOther\"\n};\npreLocalize(\"itemActionTypes\");\n\n/* -------------------------------------------- */\n\n/**\n * Different ways in which item capacity can be limited.\n * @enum {string}\n */\nDND5E.itemCapacityTypes = {\n items: \"DND5E.ItemContainerCapacityItems\",\n weight: \"DND5E.ItemContainerCapacityWeight\"\n};\npreLocalize(\"itemCapacityTypes\", { sort: true });\n\n/* -------------------------------------------- */\n\n/**\n * List of various item rarities.\n * @enum {string}\n */\nDND5E.itemRarity = {\n common: \"DND5E.ItemRarityCommon\",\n uncommon: \"DND5E.ItemRarityUncommon\",\n rare: \"DND5E.ItemRarityRare\",\n veryRare: \"DND5E.ItemRarityVeryRare\",\n legendary: \"DND5E.ItemRarityLegendary\",\n artifact: \"DND5E.ItemRarityArtifact\"\n};\npreLocalize(\"itemRarity\");\n\n/* -------------------------------------------- */\n\n/**\n * Enumerate the lengths of time over which an item can have limited use ability.\n * @enum {string}\n */\nDND5E.limitedUsePeriods = {\n sr: \"DND5E.ShortRest\",\n lr: \"DND5E.LongRest\",\n day: \"DND5E.Day\",\n charges: \"DND5E.Charges\"\n};\npreLocalize(\"limitedUsePeriods\");\n\n/* -------------------------------------------- */\n\n/**\n * Specific equipment types that modify base AC.\n * @enum {string}\n */\nDND5E.armorTypes = {\n light: \"DND5E.EquipmentLight\",\n medium: \"DND5E.EquipmentMedium\",\n heavy: \"DND5E.EquipmentHeavy\",\n natural: \"DND5E.EquipmentNatural\",\n shield: \"DND5E.EquipmentShield\"\n};\npreLocalize(\"armorTypes\");\n\n/* -------------------------------------------- */\n\n/**\n * Equipment types that aren't armor.\n * @enum {string}\n */\nDND5E.miscEquipmentTypes = {\n clothing: \"DND5E.EquipmentClothing\",\n trinket: \"DND5E.EquipmentTrinket\",\n vehicle: \"DND5E.EquipmentVehicle\"\n};\npreLocalize(\"miscEquipmentTypes\", { sort: true });\n\n/* -------------------------------------------- */\n\n/**\n * The set of equipment types for armor, clothing, and other objects which can be worn by the character.\n * @enum {string}\n */\nDND5E.equipmentTypes = {\n ...DND5E.miscEquipmentTypes,\n ...DND5E.armorTypes\n};\npreLocalize(\"equipmentTypes\", { sort: true });\n\n/* -------------------------------------------- */\n\n/**\n * The various types of vehicles in which characters can be proficient.\n * @enum {string}\n */\nDND5E.vehicleTypes = {\n air: \"DND5E.VehicleTypeAir\",\n land: \"DND5E.VehicleTypeLand\",\n space: \"DND5E.VehicleTypeSpace\",\n water: \"DND5E.VehicleTypeWater\"\n};\npreLocalize(\"vehicleTypes\", { sort: true });\n\n/* -------------------------------------------- */\n\n/**\n * The set of Armor Proficiencies which a character may have.\n * @type {object}\n */\nDND5E.armorProficiencies = {\n lgt: DND5E.equipmentTypes.light,\n med: DND5E.equipmentTypes.medium,\n hvy: DND5E.equipmentTypes.heavy,\n shl: \"DND5E.EquipmentShieldProficiency\"\n};\npreLocalize(\"armorProficiencies\");\n\n/**\n * A mapping between `DND5E.equipmentTypes` and `DND5E.armorProficiencies` that\n * is used to determine if character has proficiency when adding an item.\n * @enum {(boolean|string)}\n */\nDND5E.armorProficienciesMap = {\n natural: true,\n clothing: true,\n light: \"lgt\",\n medium: \"med\",\n heavy: \"hvy\",\n shield: \"shl\"\n};\n\n/**\n * The basic armor types in 5e. This enables specific armor proficiencies,\n * automated AC calculation in NPCs, and starting equipment.\n * @enum {string}\n */\nDND5E.armorIds = {\n breastplate: \"SK2HATQ4abKUlV8i\",\n chainmail: \"rLMflzmxpe8JGTOA\",\n chainshirt: \"p2zChy24ZJdVqMSH\",\n halfplate: \"vsgmACFYINloIdPm\",\n hide: \"n1V07puo0RQxPGuF\",\n leather: \"WwdpHLXGX5r8uZu5\",\n padded: \"GtKV1b5uqFQqpEni\",\n plate: \"OjkIqlW2UpgFcjZa\",\n ringmail: \"nsXZejlmgalj4he9\",\n scalemail: \"XmnlF5fgIO3tg6TG\",\n splint: \"cKpJmsJmU8YaiuqG\",\n studded: \"TIV3B1vbrVHIhQAm\"\n};\n\n/**\n * The basic shield in 5e.\n * @enum {string}\n */\nDND5E.shieldIds = {\n shield: \"sSs3hSzkKBMNBgTs\"\n};\n\n/**\n * Common armor class calculations.\n * @enum {{ label: string, [formula]: string }}\n */\nDND5E.armorClasses = {\n flat: {\n label: \"DND5E.ArmorClassFlat\",\n formula: \"@attributes.ac.flat\"\n },\n natural: {\n label: \"DND5E.ArmorClassNatural\",\n formula: \"@attributes.ac.flat\"\n },\n default: {\n label: \"DND5E.ArmorClassEquipment\",\n formula: \"@attributes.ac.armor + @attributes.ac.dex\"\n },\n mage: {\n label: \"DND5E.ArmorClassMage\",\n formula: \"13 + @abilities.dex.mod\"\n },\n draconic: {\n label: \"DND5E.ArmorClassDraconic\",\n formula: \"13 + @abilities.dex.mod\"\n },\n unarmoredMonk: {\n label: \"DND5E.ArmorClassUnarmoredMonk\",\n formula: \"10 + @abilities.dex.mod + @abilities.wis.mod\"\n },\n unarmoredBarb: {\n label: \"DND5E.ArmorClassUnarmoredBarbarian\",\n formula: \"10 + @abilities.dex.mod + @abilities.con.mod\"\n },\n custom: {\n label: \"DND5E.ArmorClassCustom\"\n }\n};\npreLocalize(\"armorClasses\", { key: \"label\" });\n\n/* -------------------------------------------- */\n\n/**\n * Enumerate the valid consumable types which are recognized by the system.\n * @enum {string}\n */\nDND5E.consumableTypes = {\n ammo: \"DND5E.ConsumableAmmo\",\n potion: \"DND5E.ConsumablePotion\",\n poison: \"DND5E.ConsumablePoison\",\n food: \"DND5E.ConsumableFood\",\n scroll: \"DND5E.ConsumableScroll\",\n wand: \"DND5E.ConsumableWand\",\n rod: \"DND5E.ConsumableRod\",\n trinket: \"DND5E.ConsumableTrinket\"\n};\npreLocalize(\"consumableTypes\", { sort: true });\n\n/* -------------------------------------------- */\n\n/**\n * Configuration data for an item with the \"feature\" type.\n *\n * @typedef {object} FeatureTypeConfiguration\n * @property {string} label Localized label for this type.\n * @property {Object} [subtypes] Enum containing localized labels for subtypes.\n */\n\n/**\n * Types of \"features\" items.\n * @enum {FeatureTypeConfiguration}\n */\nDND5E.featureTypes = {\n background: {\n label: \"DND5E.Feature.Background\"\n },\n class: {\n label: \"DND5E.Feature.Class\",\n subtypes: {\n artificerInfusion: \"DND5E.ClassFeature.ArtificerInfusion\",\n channelDivinity: \"DND5E.ClassFeature.ChannelDivinity\",\n defensiveTactic: \"DND5E.ClassFeature.DefensiveTactic\",\n eldritchInvocation: \"DND5E.ClassFeature.EldritchInvocation\",\n elementalDiscipline: \"DND5E.ClassFeature.ElementalDiscipline\",\n fightingStyle: \"DND5E.ClassFeature.FightingStyle\",\n huntersPrey: \"DND5E.ClassFeature.HuntersPrey\",\n ki: \"DND5E.ClassFeature.Ki\",\n maneuver: \"DND5E.ClassFeature.Maneuver\",\n metamagic: \"DND5E.ClassFeature.Metamagic\",\n multiattack: \"DND5E.ClassFeature.Multiattack\",\n pact: \"DND5E.ClassFeature.PactBoon\",\n psionicPower: \"DND5E.ClassFeature.PsionicPower\",\n rune: \"DND5E.ClassFeature.Rune\",\n superiorHuntersDefense: \"DND5E.ClassFeature.SuperiorHuntersDefense\"\n }\n },\n monster: {\n label: \"DND5E.Feature.Monster\"\n },\n race: {\n label: \"DND5E.Feature.Race\"\n },\n feat: {\n label: \"DND5E.Feature.Feat\"\n }\n};\npreLocalize(\"featureTypes\", { key: \"label\" });\npreLocalize(\"featureTypes.class.subtypes\", { sort: true });\n\n/* -------------------------------------------- */\n\n/**\n * @typedef {object} CurrencyConfiguration\n * @property {string} label Localized label for the currency.\n * @property {string} abbreviation Localized abbreviation for the currency.\n * @property {number} conversion Number by which this currency should be multiplied to arrive at a standard value.\n */\n\n/**\n * The valid currency denominations with localized labels, abbreviations, and conversions.\n * The conversion number defines how many of that currency are equal to one GP.\n * @enum {CurrencyConfiguration}\n */\nDND5E.currencies = {\n pp: {\n label: \"DND5E.CurrencyPP\",\n abbreviation: \"DND5E.CurrencyAbbrPP\",\n conversion: 0.1\n },\n gp: {\n label: \"DND5E.CurrencyGP\",\n abbreviation: \"DND5E.CurrencyAbbrGP\",\n conversion: 1\n },\n ep: {\n label: \"DND5E.CurrencyEP\",\n abbreviation: \"DND5E.CurrencyAbbrEP\",\n conversion: 2\n },\n sp: {\n label: \"DND5E.CurrencySP\",\n abbreviation: \"DND5E.CurrencyAbbrSP\",\n conversion: 10\n },\n cp: {\n label: \"DND5E.CurrencyCP\",\n abbreviation: \"DND5E.CurrencyAbbrCP\",\n conversion: 100\n }\n};\npreLocalize(\"currencies\", { keys: [\"label\", \"abbreviation\"] });\n\n/* -------------------------------------------- */\n/* Damage Types */\n/* -------------------------------------------- */\n\n/**\n * Types of damage that are considered physical.\n * @enum {string}\n */\nDND5E.physicalDamageTypes = {\n bludgeoning: \"DND5E.DamageBludgeoning\",\n piercing: \"DND5E.DamagePiercing\",\n slashing: \"DND5E.DamageSlashing\"\n};\npreLocalize(\"physicalDamageTypes\", { sort: true });\n\n/* -------------------------------------------- */\n\n/**\n * Types of damage the can be caused by abilities.\n * @enum {string}\n */\nDND5E.damageTypes = {\n ...DND5E.physicalDamageTypes,\n acid: \"DND5E.DamageAcid\",\n cold: \"DND5E.DamageCold\",\n fire: \"DND5E.DamageFire\",\n force: \"DND5E.DamageForce\",\n lightning: \"DND5E.DamageLightning\",\n necrotic: \"DND5E.DamageNecrotic\",\n poison: \"DND5E.DamagePoison\",\n psychic: \"DND5E.DamagePsychic\",\n radiant: \"DND5E.DamageRadiant\",\n thunder: \"DND5E.DamageThunder\"\n};\npreLocalize(\"damageTypes\", { sort: true });\n\n/* -------------------------------------------- */\n\n/**\n * Types of damage to which an actor can possess resistance, immunity, or vulnerability.\n * @enum {string}\n * @deprecated\n */\nDND5E.damageResistanceTypes = {\n ...DND5E.damageTypes,\n physical: \"DND5E.DamagePhysical\"\n};\npreLocalize(\"damageResistanceTypes\", { sort: true });\n\n/* -------------------------------------------- */\n/* Movement */\n/* -------------------------------------------- */\n\n/**\n * Different types of healing that can be applied using abilities.\n * @enum {string}\n */\nDND5E.healingTypes = {\n healing: \"DND5E.Healing\",\n temphp: \"DND5E.HealingTemp\"\n};\npreLocalize(\"healingTypes\");\n\n/* -------------------------------------------- */\n\n/**\n * The valid units of measure for movement distances in the game system.\n * By default this uses the imperial units of feet and miles.\n * @enum {string}\n */\nDND5E.movementTypes = {\n burrow: \"DND5E.MovementBurrow\",\n climb: \"DND5E.MovementClimb\",\n fly: \"DND5E.MovementFly\",\n swim: \"DND5E.MovementSwim\",\n walk: \"DND5E.MovementWalk\"\n};\npreLocalize(\"movementTypes\", { sort: true });\n\n/* -------------------------------------------- */\n/* Measurement */\n/* -------------------------------------------- */\n\n/**\n * The valid units of measure for movement distances in the game system.\n * By default this uses the imperial units of feet and miles.\n * @enum {string}\n */\nDND5E.movementUnits = {\n ft: \"DND5E.DistFt\",\n mi: \"DND5E.DistMi\",\n m: \"DND5E.DistM\",\n km: \"DND5E.DistKm\"\n};\npreLocalize(\"movementUnits\");\n\n/* -------------------------------------------- */\n\n/**\n * The types of range that are used for measuring actions and effects.\n * @enum {string}\n */\nDND5E.rangeTypes = {\n self: \"DND5E.DistSelf\",\n touch: \"DND5E.DistTouch\",\n spec: \"DND5E.Special\",\n any: \"DND5E.DistAny\"\n};\npreLocalize(\"rangeTypes\");\n\n/* -------------------------------------------- */\n\n/**\n * The valid units of measure for the range of an action or effect. A combination of `DND5E.movementUnits` and\n * `DND5E.rangeUnits`.\n * @enum {string}\n */\nDND5E.distanceUnits = {\n ...DND5E.movementUnits,\n ...DND5E.rangeTypes\n};\npreLocalize(\"distanceUnits\");\n\n/* -------------------------------------------- */\n\n/**\n * Configure aspects of encumbrance calculation so that it could be configured by modules.\n * @enum {{ imperial: number, metric: number }}\n */\nDND5E.encumbrance = {\n currencyPerWeight: {\n imperial: 50,\n metric: 110\n },\n strMultiplier: {\n imperial: 15,\n metric: 6.8\n },\n vehicleWeightMultiplier: {\n imperial: 2000, // 2000 lbs in an imperial ton\n metric: 1000 // 1000 kg in a metric ton\n }\n};\n\n/* -------------------------------------------- */\n/* Targeting */\n/* -------------------------------------------- */\n\n/**\n * Targeting types that apply to one or more distinct targets.\n * @enum {string}\n */\nDND5E.individualTargetTypes = {\n self: \"DND5E.TargetSelf\",\n ally: \"DND5E.TargetAlly\",\n enemy: \"DND5E.TargetEnemy\",\n creature: \"DND5E.TargetCreature\",\n object: \"DND5E.TargetObject\",\n space: \"DND5E.TargetSpace\"\n};\npreLocalize(\"individualTargetTypes\");\n\n/* -------------------------------------------- */\n\n/**\n * Information needed to represent different area of effect target types.\n *\n * @typedef {object} AreaTargetDefinition\n * @property {string} label Localized label for this type.\n * @property {string} template Type of `MeasuredTemplate` create for this target type.\n */\n\n/**\n * Targeting types that cover an area.\n * @enum {AreaTargetDefinition}\n */\nDND5E.areaTargetTypes = {\n radius: {\n label: \"DND5E.TargetRadius\",\n template: \"circle\"\n },\n sphere: {\n label: \"DND5E.TargetSphere\",\n template: \"circle\"\n },\n cylinder: {\n label: \"DND5E.TargetCylinder\",\n template: \"circle\"\n },\n cone: {\n label: \"DND5E.TargetCone\",\n template: \"cone\"\n },\n square: {\n label: \"DND5E.TargetSquare\",\n template: \"rect\"\n },\n cube: {\n label: \"DND5E.TargetCube\",\n template: \"rect\"\n },\n line: {\n label: \"DND5E.TargetLine\",\n template: \"ray\"\n },\n wall: {\n label: \"DND5E.TargetWall\",\n template: \"ray\"\n }\n};\npreLocalize(\"areaTargetTypes\", { key: \"label\", sort: true });\n\n/* -------------------------------------------- */\n\n/**\n * The types of single or area targets which can be applied to abilities.\n * @enum {string}\n */\nDND5E.targetTypes = {\n ...DND5E.individualTargetTypes,\n ...Object.fromEntries(Object.entries(DND5E.areaTargetTypes).map(([k, v]) => [k, v.label]))\n};\npreLocalize(\"targetTypes\", { sort: true });\n\n/* -------------------------------------------- */\n\n/**\n * Denominations of hit dice which can apply to classes.\n * @type {string[]}\n */\nDND5E.hitDieTypes = [\"d4\", \"d6\", \"d8\", \"d10\", \"d12\"];\n\n/* -------------------------------------------- */\n\n/**\n * The set of possible sensory perception types which an Actor may have.\n * @enum {string}\n */\nDND5E.senses = {\n blindsight: \"DND5E.SenseBlindsight\",\n darkvision: \"DND5E.SenseDarkvision\",\n tremorsense: \"DND5E.SenseTremorsense\",\n truesight: \"DND5E.SenseTruesight\"\n};\npreLocalize(\"senses\", { sort: true });\n\n/* -------------------------------------------- */\n/* Spellcasting */\n/* -------------------------------------------- */\n\n/**\n * Define the standard slot progression by character level.\n * The entries of this array represent the spell slot progression for a full spell-caster.\n * @type {number[][]}\n */\nDND5E.SPELL_SLOT_TABLE = [\n [2],\n [3],\n [4, 2],\n [4, 3],\n [4, 3, 2],\n [4, 3, 3],\n [4, 3, 3, 1],\n [4, 3, 3, 2],\n [4, 3, 3, 3, 1],\n [4, 3, 3, 3, 2],\n [4, 3, 3, 3, 2, 1],\n [4, 3, 3, 3, 2, 1],\n [4, 3, 3, 3, 2, 1, 1],\n [4, 3, 3, 3, 2, 1, 1],\n [4, 3, 3, 3, 2, 1, 1, 1],\n [4, 3, 3, 3, 2, 1, 1, 1],\n [4, 3, 3, 3, 2, 1, 1, 1, 1],\n [4, 3, 3, 3, 3, 1, 1, 1, 1],\n [4, 3, 3, 3, 3, 2, 1, 1, 1],\n [4, 3, 3, 3, 3, 2, 2, 1, 1]\n];\n\n/* -------------------------------------------- */\n\n/**\n * Various different ways a spell can be prepared.\n */\nDND5E.spellPreparationModes = {\n prepared: \"DND5E.SpellPrepPrepared\",\n pact: \"DND5E.PactMagic\",\n always: \"DND5E.SpellPrepAlways\",\n atwill: \"DND5E.SpellPrepAtWill\",\n innate: \"DND5E.SpellPrepInnate\"\n};\npreLocalize(\"spellPreparationModes\");\n\n/* -------------------------------------------- */\n\n/**\n * Subset of `DND5E.spellPreparationModes` that consume spell slots.\n * @type {boolean[]}\n */\nDND5E.spellUpcastModes = [\"always\", \"pact\", \"prepared\"];\n\n/* -------------------------------------------- */\n\n/**\n * Configuration data for different types of spellcasting supported.\n *\n * @typedef {object} SpellcastingTypeConfiguration\n * @property {string} label Localized label.\n * @property {Object} [progression] Any progression modes for this type.\n */\n\n/**\n * Configuration data for a spellcasting progression mode.\n *\n * @typedef {object} SpellcastingProgressionConfiguration\n * @property {string} label Localized label.\n * @property {number} [divisor=1] Value by which the class levels are divided to determine spellcasting level.\n * @property {boolean} [roundUp=false] Should fractional values should be rounded up by default?\n */\n\n/**\n * Different spellcasting types and their progression.\n * @type {SpellcastingTypeConfiguration}\n */\nDND5E.spellcastingTypes = {\n leveled: {\n label: \"DND5E.SpellProgLeveled\",\n progression: {\n full: {\n label: \"DND5E.SpellProgFull\",\n divisor: 1\n },\n half: {\n label: \"DND5E.SpellProgHalf\",\n divisor: 2\n },\n third: {\n label: \"DND5E.SpellProgThird\",\n divisor: 3\n },\n artificer: {\n label: \"DND5E.SpellProgArt\",\n divisor: 2,\n roundUp: true\n }\n }\n },\n pact: {\n label: \"DND5E.SpellProgPact\"\n }\n};\npreLocalize(\"spellcastingTypes\", { key: \"label\", sort: true });\npreLocalize(\"spellcastingTypes.leveled.progression\", { key: \"label\" });\n\n/* -------------------------------------------- */\n\n/**\n * Ways in which a class can contribute to spellcasting levels.\n * @enum {string}\n */\nDND5E.spellProgression = {\n none: \"DND5E.SpellNone\",\n full: \"DND5E.SpellProgFull\",\n half: \"DND5E.SpellProgHalf\",\n third: \"DND5E.SpellProgThird\",\n pact: \"DND5E.SpellProgPact\",\n artificer: \"DND5E.SpellProgArt\"\n};\npreLocalize(\"spellProgression\", { key: \"label\" });\n\n/* -------------------------------------------- */\n\n/**\n * Valid spell levels.\n * @enum {string}\n */\nDND5E.spellLevels = {\n 0: \"DND5E.SpellLevel0\",\n 1: \"DND5E.SpellLevel1\",\n 2: \"DND5E.SpellLevel2\",\n 3: \"DND5E.SpellLevel3\",\n 4: \"DND5E.SpellLevel4\",\n 5: \"DND5E.SpellLevel5\",\n 6: \"DND5E.SpellLevel6\",\n 7: \"DND5E.SpellLevel7\",\n 8: \"DND5E.SpellLevel8\",\n 9: \"DND5E.SpellLevel9\"\n};\npreLocalize(\"spellLevels\");\n\n/* -------------------------------------------- */\n\n/**\n * The available choices for how spell damage scaling may be computed.\n * @enum {string}\n */\nDND5E.spellScalingModes = {\n none: \"DND5E.SpellNone\",\n cantrip: \"DND5E.SpellCantrip\",\n level: \"DND5E.SpellLevel\"\n};\npreLocalize(\"spellScalingModes\", { sort: true });\n\n/* -------------------------------------------- */\n\n/**\n * Types of components that can be required when casting a spell.\n * @enum {object}\n */\nDND5E.spellComponents = {\n vocal: {\n label: \"DND5E.ComponentVerbal\",\n abbr: \"DND5E.ComponentVerbalAbbr\"\n },\n somatic: {\n label: \"DND5E.ComponentSomatic\",\n abbr: \"DND5E.ComponentSomaticAbbr\"\n },\n material: {\n label: \"DND5E.ComponentMaterial\",\n abbr: \"DND5E.ComponentMaterialAbbr\"\n }\n};\npreLocalize(\"spellComponents\", {keys: [\"label\", \"abbr\"]});\n\n/* -------------------------------------------- */\n\n/**\n * Supplementary rules keywords that inform a spell's use.\n * @enum {object}\n */\nDND5E.spellTags = {\n concentration: {\n label: \"DND5E.Concentration\",\n abbr: \"DND5E.ConcentrationAbbr\"\n },\n ritual: {\n label: \"DND5E.Ritual\",\n abbr: \"DND5E.RitualAbbr\"\n }\n};\npreLocalize(\"spellTags\", {keys: [\"label\", \"abbr\"]});\n\n/* -------------------------------------------- */\n\n/**\n * Schools to which a spell can belong.\n * @enum {string}\n */\nDND5E.spellSchools = {\n abj: \"DND5E.SchoolAbj\",\n con: \"DND5E.SchoolCon\",\n div: \"DND5E.SchoolDiv\",\n enc: \"DND5E.SchoolEnc\",\n evo: \"DND5E.SchoolEvo\",\n ill: \"DND5E.SchoolIll\",\n nec: \"DND5E.SchoolNec\",\n trs: \"DND5E.SchoolTrs\"\n};\npreLocalize(\"spellSchools\", { sort: true });\n\n/* -------------------------------------------- */\n\n/**\n * Spell scroll item ID within the `DND5E.sourcePacks` compendium for each level.\n * @enum {string}\n */\nDND5E.spellScrollIds = {\n 0: \"rQ6sO7HDWzqMhSI3\",\n 1: \"9GSfMg0VOA2b4uFN\",\n 2: \"XdDp6CKh9qEvPTuS\",\n 3: \"hqVKZie7x9w3Kqds\",\n 4: \"DM7hzgL836ZyUFB1\",\n 5: \"wa1VF8TXHmkrrR35\",\n 6: \"tI3rWx4bxefNCexS\",\n 7: \"mtyw4NS1s7j2EJaD\",\n 8: \"aOrinPg7yuDZEuWr\",\n 9: \"O4YbkJkLlnsgUszZ\"\n};\n\n/* -------------------------------------------- */\n/* Weapon Details */\n/* -------------------------------------------- */\n\n/**\n * The set of types which a weapon item can take.\n * @enum {string}\n */\nDND5E.weaponTypes = {\n simpleM: \"DND5E.WeaponSimpleM\",\n simpleR: \"DND5E.WeaponSimpleR\",\n martialM: \"DND5E.WeaponMartialM\",\n martialR: \"DND5E.WeaponMartialR\",\n natural: \"DND5E.WeaponNatural\",\n improv: \"DND5E.WeaponImprov\",\n siege: \"DND5E.WeaponSiege\"\n};\npreLocalize(\"weaponTypes\");\n\n/* -------------------------------------------- */\n\n/**\n * A subset of weapon properties that determine the physical characteristics of the weapon.\n * These properties are used for determining physical resistance bypasses.\n * @enum {string}\n */\nDND5E.physicalWeaponProperties = {\n ada: \"DND5E.WeaponPropertiesAda\",\n mgc: \"DND5E.WeaponPropertiesMgc\",\n sil: \"DND5E.WeaponPropertiesSil\"\n};\npreLocalize(\"physicalWeaponProperties\", { sort: true });\n\n/* -------------------------------------------- */\n\n/**\n * The set of weapon property flags which can exist on a weapon.\n * @enum {string}\n */\nDND5E.weaponProperties = {\n ...DND5E.physicalWeaponProperties,\n amm: \"DND5E.WeaponPropertiesAmm\",\n fin: \"DND5E.WeaponPropertiesFin\",\n fir: \"DND5E.WeaponPropertiesFir\",\n foc: \"DND5E.WeaponPropertiesFoc\",\n hvy: \"DND5E.WeaponPropertiesHvy\",\n lgt: \"DND5E.WeaponPropertiesLgt\",\n lod: \"DND5E.WeaponPropertiesLod\",\n rch: \"DND5E.WeaponPropertiesRch\",\n rel: \"DND5E.WeaponPropertiesRel\",\n ret: \"DND5E.WeaponPropertiesRet\",\n spc: \"DND5E.WeaponPropertiesSpc\",\n thr: \"DND5E.WeaponPropertiesThr\",\n two: \"DND5E.WeaponPropertiesTwo\",\n ver: \"DND5E.WeaponPropertiesVer\"\n};\npreLocalize(\"weaponProperties\", { sort: true });\n\n/* -------------------------------------------- */\n\n/**\n * Compendium packs used for localized items.\n * @enum {string}\n */\nDND5E.sourcePacks = {\n ITEMS: \"dnd5e.items\"\n};\n\n/* -------------------------------------------- */\n\n/**\n * Settings to configure how actors are merged when polymorphing is applied.\n * @enum {string}\n */\nDND5E.polymorphSettings = {\n keepPhysical: \"DND5E.PolymorphKeepPhysical\",\n keepMental: \"DND5E.PolymorphKeepMental\",\n keepSaves: \"DND5E.PolymorphKeepSaves\",\n keepSkills: \"DND5E.PolymorphKeepSkills\",\n mergeSaves: \"DND5E.PolymorphMergeSaves\",\n mergeSkills: \"DND5E.PolymorphMergeSkills\",\n keepClass: \"DND5E.PolymorphKeepClass\",\n keepFeats: \"DND5E.PolymorphKeepFeats\",\n keepSpells: \"DND5E.PolymorphKeepSpells\",\n keepItems: \"DND5E.PolymorphKeepItems\",\n keepBio: \"DND5E.PolymorphKeepBio\",\n keepVision: \"DND5E.PolymorphKeepVision\",\n keepSelf: \"DND5E.PolymorphKeepSelf\"\n};\npreLocalize(\"polymorphSettings\", { sort: true });\n\n/**\n * Settings to configure how actors are effects are merged when polymorphing is applied.\n * @enum {string}\n */\nDND5E.polymorphEffectSettings = {\n keepAE: \"DND5E.PolymorphKeepAE\",\n keepOtherOriginAE: \"DND5E.PolymorphKeepOtherOriginAE\",\n keepOriginAE: \"DND5E.PolymorphKeepOriginAE\",\n keepEquipmentAE: \"DND5E.PolymorphKeepEquipmentAE\",\n keepFeatAE: \"DND5E.PolymorphKeepFeatureAE\",\n keepSpellAE: \"DND5E.PolymorphKeepSpellAE\",\n keepClassAE: \"DND5E.PolymorphKeepClassAE\",\n keepBackgroundAE: \"DND5E.PolymorphKeepBackgroundAE\"\n};\npreLocalize(\"polymorphEffectSettings\", { sort: true });\n\n/**\n * Settings to configure how actors are merged when preset polymorphing is applied.\n * @enum {object}\n */\nDND5E.transformationPresets = {\n wildshape: {\n icon: '',\n label: \"DND5E.PolymorphWildShape\",\n options: {\n keepBio: true,\n keepClass: true,\n keepMental: true,\n mergeSaves: true,\n mergeSkills: true,\n keepEquipmentAE: false\n }\n },\n polymorph: {\n icon: '',\n label: \"DND5E.Polymorph\",\n options: {\n keepEquipmentAE: false,\n keepClassAE: false,\n keepFeatAE: false,\n keepBackgroundAE: false\n }\n },\n polymorphSelf: {\n icon: '',\n label: \"DND5E.PolymorphSelf\",\n options: {\n keepSelf: true\n }\n }\n};\npreLocalize(\"transformationPresets\", { sort: true, keys: [\"label\"] });\n\n/* -------------------------------------------- */\n\n/**\n * Skill, ability, and tool proficiency levels.\n * The key for each level represents its proficiency multiplier.\n * @enum {string}\n */\nDND5E.proficiencyLevels = {\n 0: \"DND5E.NotProficient\",\n 1: \"DND5E.Proficient\",\n 0.5: \"DND5E.HalfProficient\",\n 2: \"DND5E.Expertise\"\n};\npreLocalize(\"proficiencyLevels\");\n\n/* -------------------------------------------- */\n\n/**\n * The amount of cover provided by an object. In cases where multiple pieces\n * of cover are in play, we take the highest value.\n * @enum {string}\n */\nDND5E.cover = {\n 0: \"DND5E.None\",\n .5: \"DND5E.CoverHalf\",\n .75: \"DND5E.CoverThreeQuarters\",\n 1: \"DND5E.CoverTotal\"\n};\npreLocalize(\"cover\");\n\n/* -------------------------------------------- */\n\n/**\n * A selection of actor attributes that can be tracked on token resource bars.\n * @type {string[]}\n * @deprecated since v10\n */\nDND5E.trackableAttributes = [\n \"attributes.ac.value\", \"attributes.init.bonus\", \"attributes.movement\", \"attributes.senses\", \"attributes.spelldc\",\n \"attributes.spellLevel\", \"details.cr\", \"details.spellLevel\", \"details.xp.value\", \"skills.*.passive\",\n \"abilities.*.value\"\n];\n\n/* -------------------------------------------- */\n\n/**\n * A selection of actor and item attributes that are valid targets for item resource consumption.\n * @type {string[]}\n */\nDND5E.consumableResources = [\n \"item.quantity\", \"item.weight\", \"item.duration.value\", \"currency\", \"details.xp.value\", \"abilities.*.value\",\n \"attributes.senses\", \"attributes.movement\", \"attributes.ac.flat\", \"item.armor.value\", \"item.target\", \"item.range\",\n \"item.save.dc\"\n];\n\n/* -------------------------------------------- */\n\n/**\n * Conditions that can affect an actor.\n * @enum {string}\n */\nDND5E.conditionTypes = {\n blinded: \"DND5E.ConBlinded\",\n charmed: \"DND5E.ConCharmed\",\n deafened: \"DND5E.ConDeafened\",\n diseased: \"DND5E.ConDiseased\",\n exhaustion: \"DND5E.ConExhaustion\",\n frightened: \"DND5E.ConFrightened\",\n grappled: \"DND5E.ConGrappled\",\n incapacitated: \"DND5E.ConIncapacitated\",\n invisible: \"DND5E.ConInvisible\",\n paralyzed: \"DND5E.ConParalyzed\",\n petrified: \"DND5E.ConPetrified\",\n poisoned: \"DND5E.ConPoisoned\",\n prone: \"DND5E.ConProne\",\n restrained: \"DND5E.ConRestrained\",\n stunned: \"DND5E.ConStunned\",\n unconscious: \"DND5E.ConUnconscious\"\n};\npreLocalize(\"conditionTypes\", { sort: true });\n\n/**\n * Languages a character can learn.\n * @enum {string}\n */\nDND5E.languages = {\n common: \"DND5E.LanguagesCommon\",\n aarakocra: \"DND5E.LanguagesAarakocra\",\n abyssal: \"DND5E.LanguagesAbyssal\",\n aquan: \"DND5E.LanguagesAquan\",\n auran: \"DND5E.LanguagesAuran\",\n celestial: \"DND5E.LanguagesCelestial\",\n deep: \"DND5E.LanguagesDeepSpeech\",\n draconic: \"DND5E.LanguagesDraconic\",\n druidic: \"DND5E.LanguagesDruidic\",\n dwarvish: \"DND5E.LanguagesDwarvish\",\n elvish: \"DND5E.LanguagesElvish\",\n giant: \"DND5E.LanguagesGiant\",\n gith: \"DND5E.LanguagesGith\",\n gnomish: \"DND5E.LanguagesGnomish\",\n goblin: \"DND5E.LanguagesGoblin\",\n gnoll: \"DND5E.LanguagesGnoll\",\n halfling: \"DND5E.LanguagesHalfling\",\n ignan: \"DND5E.LanguagesIgnan\",\n infernal: \"DND5E.LanguagesInfernal\",\n orc: \"DND5E.LanguagesOrc\",\n primordial: \"DND5E.LanguagesPrimordial\",\n sylvan: \"DND5E.LanguagesSylvan\",\n terran: \"DND5E.LanguagesTerran\",\n cant: \"DND5E.LanguagesThievesCant\",\n undercommon: \"DND5E.LanguagesUndercommon\"\n};\npreLocalize(\"languages\", { sort: true });\n\n/**\n * Maximum allowed character level.\n * @type {number}\n */\nDND5E.maxLevel = 20;\n\n/**\n * XP required to achieve each character level.\n * @type {number[]}\n */\nDND5E.CHARACTER_EXP_LEVELS = [\n 0, 300, 900, 2700, 6500, 14000, 23000, 34000, 48000, 64000, 85000, 100000,\n 120000, 140000, 165000, 195000, 225000, 265000, 305000, 355000\n];\n\n/**\n * XP granted for each challenge rating.\n * @type {number[]}\n */\nDND5E.CR_EXP_LEVELS = [\n 10, 200, 450, 700, 1100, 1800, 2300, 2900, 3900, 5000, 5900, 7200, 8400, 10000, 11500, 13000, 15000, 18000,\n 20000, 22000, 25000, 33000, 41000, 50000, 62000, 75000, 90000, 105000, 120000, 135000, 155000\n];\n\n/**\n * @typedef {object} CharacterFlagConfig\n * @property {string} name\n * @property {string} hint\n * @property {string} section\n * @property {typeof boolean|string|number} type\n * @property {string} placeholder\n * @property {string[]} [abilities]\n * @property {Object} [choices]\n * @property {string[]} [skills]\n */\n\n/* -------------------------------------------- */\n\n/**\n * Trait configuration information.\n *\n * @typedef {object} TraitConfiguration\n * @property {string} label Localization key for the trait name.\n * @property {string} [actorKeyPath] If the trait doesn't directly map to an entry as `traits.[key]`, where is\n * this trait's data stored on the actor?\n * @property {string} [configKey] If the list of trait options doesn't match the name of the trait, where can\n * the options be found within `CONFIG.DND5E`?\n * @property {string} [labelKey] If config is an enum of objects, where can the label be found?\n * @property {object} [subtypes] Configuration for traits that take some sort of base item.\n * @property {string} [subtypes.keyPath] Path to subtype value on base items, should match a category key.\n * @property {string[]} [subtypes.ids] Key for base item ID objects within `CONFIG.DND5E`.\n * @property {object} [children] Mapping of category key to an object defining its children.\n * @property {boolean} [sortCategories] Whether top-level categories should be sorted.\n */\n\n/**\n * Configurable traits on actors.\n * @enum {TraitConfiguration}\n */\nDND5E.traits = {\n saves: {\n label: \"DND5E.ClassSaves\",\n configKey: \"abilities\",\n labelKey: \"label\"\n },\n skills: {\n label: \"DND5E.TraitSkillProf\",\n labelKey: \"label\"\n },\n languages: {\n label: \"DND5E.Languages\"\n },\n di: {\n label: \"DND5E.DamImm\",\n configKey: \"damageTypes\"\n },\n dr: {\n label: \"DND5E.DamRes\",\n configKey: \"damageTypes\"\n },\n dv: {\n label: \"DND5E.DamVuln\",\n configKey: \"damageTypes\"\n },\n ci: {\n label: \"DND5E.ConImm\",\n configKey: \"conditionTypes\"\n },\n weapon: {\n label: \"DND5E.TraitWeaponProf\",\n actorKeyPath: \"traits.weaponProf\",\n configKey: \"weaponProficiencies\",\n subtypes: { keyPath: \"weaponType\", ids: [\"weaponIds\"] }\n },\n armor: {\n label: \"DND5E.TraitArmorProf\",\n actorKeyPath: \"traits.armorProf\",\n configKey: \"armorProficiencies\",\n subtypes: { keyPath: \"armor.type\", ids: [\"armorIds\", \"shieldIds\"] }\n },\n tool: {\n label: \"DND5E.TraitToolProf\",\n actorKeyPath: \"tools\",\n configKey: \"toolProficiencies\",\n subtypes: { keyPath: \"toolType\", ids: [\"toolIds\"] },\n children: { vehicle: \"vehicleTypes\" },\n sortCategories: true\n }\n};\npreLocalize(\"traits\", { key: \"label\" });\n\n/* -------------------------------------------- */\n\n/**\n * Special character flags.\n * @enum {CharacterFlagConfig}\n */\nDND5E.characterFlags = {\n diamondSoul: {\n name: \"DND5E.FlagsDiamondSoul\",\n hint: \"DND5E.FlagsDiamondSoulHint\",\n section: \"DND5E.Feats\",\n type: Boolean\n },\n elvenAccuracy: {\n name: \"DND5E.FlagsElvenAccuracy\",\n hint: \"DND5E.FlagsElvenAccuracyHint\",\n section: \"DND5E.RacialTraits\",\n abilities: [\"dex\", \"int\", \"wis\", \"cha\"],\n type: Boolean\n },\n halflingLucky: {\n name: \"DND5E.FlagsHalflingLucky\",\n hint: \"DND5E.FlagsHalflingLuckyHint\",\n section: \"DND5E.RacialTraits\",\n type: Boolean\n },\n initiativeAdv: {\n name: \"DND5E.FlagsInitiativeAdv\",\n hint: \"DND5E.FlagsInitiativeAdvHint\",\n section: \"DND5E.Feats\",\n type: Boolean\n },\n initiativeAlert: {\n name: \"DND5E.FlagsAlert\",\n hint: \"DND5E.FlagsAlertHint\",\n section: \"DND5E.Feats\",\n type: Boolean\n },\n jackOfAllTrades: {\n name: \"DND5E.FlagsJOAT\",\n hint: \"DND5E.FlagsJOATHint\",\n section: \"DND5E.Feats\",\n type: Boolean\n },\n observantFeat: {\n name: \"DND5E.FlagsObservant\",\n hint: \"DND5E.FlagsObservantHint\",\n skills: [\"prc\", \"inv\"],\n section: \"DND5E.Feats\",\n type: Boolean\n },\n powerfulBuild: {\n name: \"DND5E.FlagsPowerfulBuild\",\n hint: \"DND5E.FlagsPowerfulBuildHint\",\n section: \"DND5E.RacialTraits\",\n type: Boolean\n },\n reliableTalent: {\n name: \"DND5E.FlagsReliableTalent\",\n hint: \"DND5E.FlagsReliableTalentHint\",\n section: \"DND5E.Feats\",\n type: Boolean\n },\n remarkableAthlete: {\n name: \"DND5E.FlagsRemarkableAthlete\",\n hint: \"DND5E.FlagsRemarkableAthleteHint\",\n abilities: [\"str\", \"dex\", \"con\"],\n section: \"DND5E.Feats\",\n type: Boolean\n },\n weaponCriticalThreshold: {\n name: \"DND5E.FlagsWeaponCritThreshold\",\n hint: \"DND5E.FlagsWeaponCritThresholdHint\",\n section: \"DND5E.Feats\",\n type: Number,\n placeholder: 20\n },\n spellCriticalThreshold: {\n name: \"DND5E.FlagsSpellCritThreshold\",\n hint: \"DND5E.FlagsSpellCritThresholdHint\",\n section: \"DND5E.Feats\",\n type: Number,\n placeholder: 20\n },\n meleeCriticalDamageDice: {\n name: \"DND5E.FlagsMeleeCriticalDice\",\n hint: \"DND5E.FlagsMeleeCriticalDiceHint\",\n section: \"DND5E.Feats\",\n type: Number,\n placeholder: 0\n }\n};\npreLocalize(\"characterFlags\", { keys: [\"name\", \"hint\", \"section\"] });\n\n/**\n * Flags allowed on actors. Any flags not in the list may be deleted during a migration.\n * @type {string[]}\n */\nDND5E.allowedActorFlags = [\"isPolymorphed\", \"originalActor\"].concat(Object.keys(DND5E.characterFlags));\n\n/* -------------------------------------------- */\n\n/**\n * Advancement types that can be added to items.\n * @enum {*}\n */\nDND5E.advancementTypes = {\n HitPoints: advancement.HitPointsAdvancement,\n ItemChoice: advancement.ItemChoiceAdvancement,\n ItemGrant: advancement.ItemGrantAdvancement,\n ScaleValue: advancement.ScaleValueAdvancement\n};\n\n/* -------------------------------------------- */\n\n/**\n * Patch an existing config enum to allow conversion from string values to object values without\n * breaking existing modules that are expecting strings.\n * @param {string} key Key within DND5E that has been replaced with an enum of objects.\n * @param {string} fallbackKey Key within the new config object from which to get the fallback value.\n * @param {object} [options] Additional options passed through to logCompatibilityWarning.\n */\nfunction patchConfig(key, fallbackKey, options) {\n /** @override */\n function toString() {\n const message = `The value of CONFIG.DND5E.${key} has been changed to an object.`\n +` The former value can be acccessed from .${fallbackKey}.`;\n foundry.utils.logCompatibilityWarning(message, options);\n return this[fallbackKey];\n }\n\n Object.values(DND5E[key]).forEach(o => o.toString = toString);\n}\n\n/* -------------------------------------------- */\n\nexport default DND5E;\n","/**\n * @typedef {object} ModuleArtInfo\n * @property {string} actor The path to the actor's portrait image.\n * @property {string|object} token The path to the token image, or a richer object specifying additional token\n * adjustments.\n */\n\n/**\n * A class responsible for managing module-provided art in compendia.\n */\nexport class ModuleArt {\n constructor() {\n /**\n * The stored map of actor UUIDs to their art information.\n * @type {Map}\n */\n Object.defineProperty(this, \"map\", {value: new Map(), writable: false});\n }\n\n /* -------------------------------------------- */\n\n /**\n * Set to true to temporarily prevent actors from loading module art.\n * @type {boolean}\n */\n suppressArt = false;\n\n /* -------------------------------------------- */\n\n /**\n * Register any art mapping information included in active modules.\n * @returns {Promise}\n */\n async registerModuleArt() {\n this.map.clear();\n for ( const module of game.modules ) {\n const flags = module.flags?.[module.id];\n const artPath = this.constructor.getModuleArtPath(module);\n if ( !artPath ) continue;\n try {\n const mapping = await foundry.utils.fetchJsonWithTimeout(artPath);\n await this.#parseArtMapping(module.id, mapping, flags[\"dnd5e-art-credit\"]);\n } catch( e ) {\n console.error(e);\n }\n }\n\n // Load system mapping.\n try {\n const mapping = await foundry.utils.fetchJsonWithTimeout(\"systems/dnd5e/json/fa-token-mapping.json\");\n const credit = `\n \n Token artwork by\n Forgotten Adventures.\n \n `;\n await this.#parseArtMapping(game.system.id, mapping, credit);\n } catch( e ) {\n console.error(e);\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * Parse a provided module art mapping and store it for reference later.\n * @param {string} moduleId The module ID.\n * @param {object} mapping A mapping containing pack names, a list of actor IDs, and paths to the art provided by\n * the module for them.\n * @param {string} [credit] An optional credit line to attach to the Actor's biography.\n * @returns {Promise}\n */\n async #parseArtMapping(moduleId, mapping, credit) {\n let settings = game.settings.get(\"dnd5e\", \"moduleArtConfiguration\")?.[moduleId];\n settings ??= {portraits: true, tokens: true};\n for ( const [packName, actors] of Object.entries(mapping) ) {\n const pack = game.packs.get(packName);\n if ( !pack ) continue;\n for ( let [actorId, info] of Object.entries(actors) ) {\n const entry = pack.index.get(actorId);\n if ( !entry || !(settings.portraits || settings.tokens) ) continue;\n if ( settings.portraits ) entry.img = info.actor;\n else delete info.actor;\n if ( !settings.tokens ) delete info.token;\n if ( credit ) info.credit = credit;\n const uuid = `Compendium.${packName}.${actorId}`;\n info = foundry.utils.mergeObject(this.map.get(uuid) ?? {}, info, {inplace: false});\n this.map.set(`Compendium.${packName}.${actorId}`, info);\n }\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * If a module provides art, return the path to is JSON mapping.\n * @param {Module} module The module.\n * @returns {string|null}\n */\n static getModuleArtPath(module) {\n const flags = module.flags?.[module.id];\n const artPath = flags?.[\"dnd5e-art\"];\n if ( !artPath || !module.active ) return null;\n return artPath;\n }\n}\n\n/**\n * A class responsible for allowing GMs to configure art provided by installed modules.\n */\nexport class ModuleArtConfig extends FormApplication {\n /** @inheritdoc */\n constructor(object={}, options={}) {\n object = foundry.utils.mergeObject(game.settings.get(\"dnd5e\", \"moduleArtConfiguration\"), object, {inplace: false});\n super(object, options);\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n title: game.i18n.localize(\"DND5E.ModuleArtConfigL\"),\n id: \"module-art-config\",\n template: \"systems/dnd5e/templates/apps/module-art-config.html\",\n popOut: true,\n width: 600,\n height: \"auto\"\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n getData(options={}) {\n const context = super.getData(options);\n context.config = [];\n for ( const module of game.modules ) {\n if ( !ModuleArt.getModuleArtPath(module) ) continue;\n const settings = this.object[module.id] ?? {portraits: true, tokens: true};\n context.config.push({label: module.title, id: module.id, ...settings});\n }\n context.config.sort((a, b) => a.label.localeCompare(b.label, game.i18n.lang));\n context.config.unshift({label: game.system.title, id: game.system.id, ...this.object.dnd5e});\n return context;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async _updateObject(event, formData) {\n await game.settings.set(\"dnd5e\", \"moduleArtConfiguration\", foundry.utils.expandObject(formData));\n return SettingsConfig.reloadConfirm({world: true});\n }\n}\n","import { ModuleArtConfig } from \"./module-art.mjs\";\n\n/**\n * Register all of the system's settings.\n */\nexport default function registerSystemSettings() {\n // Internal System Migration Version\n game.settings.register(\"dnd5e\", \"systemMigrationVersion\", {\n name: \"System Migration Version\",\n scope: \"world\",\n config: false,\n type: String,\n default: \"\"\n });\n\n // Rest Recovery Rules\n game.settings.register(\"dnd5e\", \"restVariant\", {\n name: \"SETTINGS.5eRestN\",\n hint: \"SETTINGS.5eRestL\",\n scope: \"world\",\n config: true,\n default: \"normal\",\n type: String,\n choices: {\n normal: \"SETTINGS.5eRestPHB\",\n gritty: \"SETTINGS.5eRestGritty\",\n epic: \"SETTINGS.5eRestEpic\"\n }\n });\n\n // Diagonal Movement Rule\n game.settings.register(\"dnd5e\", \"diagonalMovement\", {\n name: \"SETTINGS.5eDiagN\",\n hint: \"SETTINGS.5eDiagL\",\n scope: \"world\",\n config: true,\n default: \"555\",\n type: String,\n choices: {\n 555: \"SETTINGS.5eDiagPHB\",\n 5105: \"SETTINGS.5eDiagDMG\",\n EUCL: \"SETTINGS.5eDiagEuclidean\"\n },\n onChange: rule => canvas.grid.diagonalRule = rule\n });\n\n // Proficiency modifier type\n game.settings.register(\"dnd5e\", \"proficiencyModifier\", {\n name: \"SETTINGS.5eProfN\",\n hint: \"SETTINGS.5eProfL\",\n scope: \"world\",\n config: true,\n default: \"bonus\",\n type: String,\n choices: {\n bonus: \"SETTINGS.5eProfBonus\",\n dice: \"SETTINGS.5eProfDice\"\n }\n });\n\n // Use Honor ability score\n game.settings.register(\"dnd5e\", \"honorScore\", {\n name: \"SETTINGS.5eHonorN\",\n hint: \"SETTINGS.5eHonorL\",\n scope: \"world\",\n config: true,\n default: false,\n type: Boolean,\n requiresReload: true\n });\n\n // Use Sanity ability score\n game.settings.register(\"dnd5e\", \"sanityScore\", {\n name: \"SETTINGS.5eSanityN\",\n hint: \"SETTINGS.5eSanityL\",\n scope: \"world\",\n config: true,\n default: false,\n type: Boolean,\n requiresReload: true\n });\n\n // Apply Dexterity as Initiative Tiebreaker\n game.settings.register(\"dnd5e\", \"initiativeDexTiebreaker\", {\n name: \"SETTINGS.5eInitTBN\",\n hint: \"SETTINGS.5eInitTBL\",\n scope: \"world\",\n config: true,\n default: false,\n type: Boolean\n });\n\n // Record Currency Weight\n game.settings.register(\"dnd5e\", \"currencyWeight\", {\n name: \"SETTINGS.5eCurWtN\",\n hint: \"SETTINGS.5eCurWtL\",\n scope: \"world\",\n config: true,\n default: true,\n type: Boolean\n });\n\n // Disable Experience Tracking\n game.settings.register(\"dnd5e\", \"disableExperienceTracking\", {\n name: \"SETTINGS.5eNoExpN\",\n hint: \"SETTINGS.5eNoExpL\",\n scope: \"world\",\n config: true,\n default: false,\n type: Boolean\n });\n\n // Disable Advancements\n game.settings.register(\"dnd5e\", \"disableAdvancements\", {\n name: \"SETTINGS.5eNoAdvancementsN\",\n hint: \"SETTINGS.5eNoAdvancementsL\",\n scope: \"world\",\n config: true,\n default: false,\n type: Boolean\n });\n\n // Collapse Item Cards (by default)\n game.settings.register(\"dnd5e\", \"autoCollapseItemCards\", {\n name: \"SETTINGS.5eAutoCollapseCardN\",\n hint: \"SETTINGS.5eAutoCollapseCardL\",\n scope: \"client\",\n config: true,\n default: false,\n type: Boolean,\n onChange: s => {\n ui.chat.render();\n }\n });\n\n // Allow Polymorphing\n game.settings.register(\"dnd5e\", \"allowPolymorphing\", {\n name: \"SETTINGS.5eAllowPolymorphingN\",\n hint: \"SETTINGS.5eAllowPolymorphingL\",\n scope: \"world\",\n config: true,\n default: false,\n type: Boolean\n });\n\n // Polymorph Settings\n game.settings.register(\"dnd5e\", \"polymorphSettings\", {\n scope: \"client\",\n default: {\n keepPhysical: false,\n keepMental: false,\n keepSaves: false,\n keepSkills: false,\n mergeSaves: false,\n mergeSkills: false,\n keepClass: false,\n keepFeats: false,\n keepSpells: false,\n keepItems: false,\n keepBio: false,\n keepVision: true,\n keepSelf: false,\n keepAE: false,\n keepOriginAE: true,\n keepOtherOriginAE: true,\n keepFeatAE: true,\n keepSpellAE: true,\n keepEquipmentAE: true,\n keepClassAE: true,\n keepBackgroundAE: true,\n transformTokens: true\n }\n });\n\n // Metric Unit Weights\n game.settings.register(\"dnd5e\", \"metricWeightUnits\", {\n name: \"SETTINGS.5eMetricN\",\n hint: \"SETTINGS.5eMetricL\",\n scope: \"world\",\n config: true,\n type: Boolean,\n default: false\n });\n\n // Critical Damage Modifiers\n game.settings.register(\"dnd5e\", \"criticalDamageModifiers\", {\n name: \"SETTINGS.5eCriticalModifiersN\",\n hint: \"SETTINGS.5eCriticalModifiersL\",\n scope: \"world\",\n config: true,\n type: Boolean,\n default: false\n });\n\n // Critical Damage Maximize\n game.settings.register(\"dnd5e\", \"criticalDamageMaxDice\", {\n name: \"SETTINGS.5eCriticalMaxDiceN\",\n hint: \"SETTINGS.5eCriticalMaxDiceL\",\n scope: \"world\",\n config: true,\n type: Boolean,\n default: false\n });\n\n // Strict validation\n game.settings.register(\"dnd5e\", \"strictValidation\", {\n scope: \"world\",\n config: false,\n type: Boolean,\n default: true\n });\n\n // Dynamic art.\n game.settings.registerMenu(\"dnd5e\", \"moduleArtConfiguration\", {\n name: \"DND5E.ModuleArtConfigN\",\n label: \"DND5E.ModuleArtConfigL\",\n hint: \"DND5E.ModuleArtConfigH\",\n icon: \"fa-solid fa-palette\",\n type: ModuleArtConfig,\n restricted: true\n });\n\n game.settings.register(\"dnd5e\", \"moduleArtConfiguration\", {\n name: \"Module Art Configuration\",\n scope: \"world\",\n config: false,\n type: Object,\n default: {\n dnd5e: {\n portraits: true,\n tokens: true\n }\n }\n });\n}\n","/**\n * Extend the base ActiveEffect class to implement system-specific logic.\n */\nexport default class ActiveEffect5e extends ActiveEffect {\n\n /**\n * Is this active effect currently suppressed?\n * @type {boolean}\n */\n isSuppressed = false;\n\n /* --------------------------------------------- */\n\n /** @inheritdoc */\n apply(actor, change) {\n if ( this.isSuppressed ) return null;\n if ( change.key.startsWith(\"flags.dnd5e.\") ) change = this._prepareFlagChange(actor, change);\n return super.apply(actor, change);\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n _applyAdd(actor, change, current, delta, changes) {\n if ( current instanceof Set ) {\n if ( Array.isArray(delta) ) delta.forEach(item => current.add(item));\n else current.add(delta);\n return;\n }\n super._applyAdd(actor, change, current, delta, changes);\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n _applyOverride(actor, change, current, delta, changes) {\n if ( current instanceof Set ) {\n current.clear();\n if ( Array.isArray(delta) ) delta.forEach(item => current.add(item));\n else current.add(delta);\n return;\n }\n return super._applyOverride(actor, change, current, delta, changes);\n }\n\n /* --------------------------------------------- */\n\n /**\n * Transform the data type of the change to match the type expected for flags.\n * @param {Actor5e} actor The Actor to whom this effect should be applied.\n * @param {EffectChangeData} change The change being applied.\n * @returns {EffectChangeData} The change with altered types if necessary.\n */\n _prepareFlagChange(actor, change) {\n const { key, value } = change;\n const data = CONFIG.DND5E.characterFlags[key.replace(\"flags.dnd5e.\", \"\")];\n if ( !data ) return change;\n\n // Set flag to initial value if it isn't present\n const current = foundry.utils.getProperty(actor, key) ?? null;\n if ( current === null ) {\n let initialValue = null;\n if ( data.placeholder ) initialValue = data.placeholder;\n else if ( data.type === Boolean ) initialValue = false;\n else if ( data.type === Number ) initialValue = 0;\n foundry.utils.setProperty(actor, key, initialValue);\n }\n\n // Coerce change data into the correct type\n if ( data.type === Boolean ) {\n if ( value === \"false\" ) change.value = false;\n else change.value = Boolean(value);\n }\n return change;\n }\n\n /* --------------------------------------------- */\n\n /**\n * Determine whether this Active Effect is suppressed or not.\n */\n determineSuppression() {\n this.isSuppressed = false;\n if ( this.disabled || (this.parent.documentName !== \"Actor\") ) return;\n const parts = this.origin?.split(\".\") ?? [];\n const [parentType, parentId, documentType, documentId, syntheticItem, syntheticItemId] = parts;\n let item;\n // Case 1: This is a linked or sidebar actor\n if ( parentType === \"Actor\" ) {\n if ( (parentId !== this.parent.id) || (documentType !== \"Item\") ) return;\n item = this.parent.items.get(documentId);\n }\n // Case 2: This is a synthetic actor on the scene\n else if ( parentType === \"Scene\" ) {\n if ( (documentId !== this.parent.token?.id) || (syntheticItem !== \"Item\") ) return;\n item = this.parent.items.get(syntheticItemId);\n }\n if ( !item ) return;\n this.isSuppressed = item.areEffectsSuppressed;\n }\n\n /* --------------------------------------------- */\n\n /**\n * Manage Active Effect instances through the Actor Sheet via effect control buttons.\n * @param {MouseEvent} event The left-click event on the effect control\n * @param {Actor5e|Item5e} owner The owning document which manages this effect\n * @returns {Promise|null} Promise that resolves when the changes are complete.\n */\n static onManageActiveEffect(event, owner) {\n event.preventDefault();\n const a = event.currentTarget;\n const li = a.closest(\"li\");\n const effect = li.dataset.effectId ? owner.effects.get(li.dataset.effectId) : null;\n switch ( a.dataset.action ) {\n case \"create\":\n return owner.createEmbeddedDocuments(\"ActiveEffect\", [{\n label: game.i18n.localize(\"DND5E.EffectNew\"),\n icon: \"icons/svg/aura.svg\",\n origin: owner.uuid,\n \"duration.rounds\": li.dataset.effectType === \"temporary\" ? 1 : undefined,\n disabled: li.dataset.effectType === \"inactive\"\n }]);\n case \"edit\":\n return effect.sheet.render(true);\n case \"delete\":\n return effect.delete();\n case \"toggle\":\n return effect.update({disabled: !effect.disabled});\n }\n }\n\n /* --------------------------------------------- */\n\n /**\n * Prepare the data structure for Active Effects which are currently applied to an Actor or Item.\n * @param {ActiveEffect5e[]} effects The array of Active Effect instances to prepare sheet data for\n * @returns {object} Data for rendering\n */\n static prepareActiveEffectCategories(effects) {\n // Define effect header categories\n const categories = {\n temporary: {\n type: \"temporary\",\n label: game.i18n.localize(\"DND5E.EffectTemporary\"),\n effects: []\n },\n passive: {\n type: \"passive\",\n label: game.i18n.localize(\"DND5E.EffectPassive\"),\n effects: []\n },\n inactive: {\n type: \"inactive\",\n label: game.i18n.localize(\"DND5E.EffectInactive\"),\n effects: []\n },\n suppressed: {\n type: \"suppressed\",\n label: game.i18n.localize(\"DND5E.EffectUnavailable\"),\n effects: [],\n info: [game.i18n.localize(\"DND5E.EffectUnavailableInfo\")]\n }\n };\n\n // Iterate over active effects, classifying them into categories\n for ( let e of effects ) {\n if ( game.dnd5e.isV10 ) e._getSourceName(); // Trigger a lookup for the source name\n if ( e.isSuppressed ) categories.suppressed.effects.push(e);\n else if ( e.disabled ) categories.inactive.effects.push(e);\n else if ( e.isTemporary ) categories.temporary.effects.push(e);\n else categories.passive.effects.push(e);\n }\n categories.suppressed.hidden = !categories.suppressed.effects.length;\n return categories;\n }\n}\n","/**\n * A standardized helper function for simplifying the constant parts of a multipart roll formula.\n *\n * @param {string} formula The original roll formula.\n * @param {object} [options] Formatting options.\n * @param {boolean} [options.preserveFlavor=false] Preserve flavor text in the simplified formula.\n *\n * @returns {string} The resulting simplified formula.\n */\nexport default function simplifyRollFormula(formula, { preserveFlavor=false } = {}) {\n // Create a new roll and verify that the formula is valid before attempting simplification.\n let roll;\n try { roll = new Roll(formula); }\n catch(err) { console.warn(`Unable to simplify formula '${formula}': ${err}`); }\n Roll.validate(roll.formula);\n\n // Optionally strip flavor annotations.\n if ( !preserveFlavor ) roll.terms = Roll.parse(roll.formula.replace(RollTerm.FLAVOR_REGEXP, \"\"));\n\n // Perform arithmetic simplification on the existing roll terms.\n roll.terms = _simplifyOperatorTerms(roll.terms);\n\n // If the formula contains multiplication or division we cannot easily simplify\n if ( /[*/]/.test(roll.formula) ) {\n if ( roll.isDeterministic && !/d\\(/.test(roll.formula) && (!/\\[/.test(roll.formula) || !preserveFlavor) ) {\n return Roll.safeEval(roll.formula).toString();\n }\n else return roll.constructor.getFormula(roll.terms);\n }\n\n // Flatten the roll formula and eliminate string terms.\n roll.terms = _expandParentheticalTerms(roll.terms);\n roll.terms = Roll.simplifyTerms(roll.terms);\n\n // Group terms by type and perform simplifications on various types of roll term.\n let { poolTerms, diceTerms, mathTerms, numericTerms } = _groupTermsByType(roll.terms);\n numericTerms = _simplifyNumericTerms(numericTerms ?? []);\n diceTerms = _simplifyDiceTerms(diceTerms ?? []);\n\n // Recombine the terms into a single term array and remove an initial + operator if present.\n const simplifiedTerms = [diceTerms, poolTerms, mathTerms, numericTerms].flat().filter(Boolean);\n if ( simplifiedTerms[0]?.operator === \"+\" ) simplifiedTerms.shift();\n return roll.constructor.getFormula(simplifiedTerms);\n}\n\n/* -------------------------------------------- */\n\n/**\n * A helper function to perform arithmetic simplification and remove redundant operator terms.\n * @param {RollTerm[]} terms An array of roll terms.\n * @returns {RollTerm[]} A new array of roll terms with redundant operators removed.\n */\nfunction _simplifyOperatorTerms(terms) {\n return terms.reduce((acc, term) => {\n const prior = acc[acc.length - 1];\n const ops = new Set([prior?.operator, term.operator]);\n\n // If one of the terms is not an operator, add the current term as is.\n if ( ops.has(undefined) ) acc.push(term);\n\n // Replace consecutive \"+ -\" operators with a \"-\" operator.\n else if ( (ops.has(\"+\")) && (ops.has(\"-\")) ) acc.splice(-1, 1, new OperatorTerm({ operator: \"-\" }));\n\n // Replace double \"-\" operators with a \"+\" operator.\n else if ( (ops.has(\"-\")) && (ops.size === 1) ) acc.splice(-1, 1, new OperatorTerm({ operator: \"+\" }));\n\n // Don't include \"+\" operators that directly follow \"+\", \"*\", or \"/\". Otherwise, add the term as is.\n else if ( !ops.has(\"+\") ) acc.push(term);\n\n return acc;\n }, []);\n}\n\n/* -------------------------------------------- */\n\n/**\n * A helper function for combining unannotated numeric terms in an array into a single numeric term.\n * @param {object[]} terms An array of roll terms.\n * @returns {object[]} A new array of terms with unannotated numeric terms combined into one.\n */\nfunction _simplifyNumericTerms(terms) {\n const simplified = [];\n const { annotated, unannotated } = _separateAnnotatedTerms(terms);\n\n // Combine the unannotated numerical bonuses into a single new NumericTerm.\n if ( unannotated.length ) {\n const staticBonus = Roll.safeEval(Roll.getFormula(unannotated));\n if ( staticBonus === 0 ) return [...annotated];\n\n // If the staticBonus is greater than 0, add a \"+\" operator so the formula remains valid.\n if ( staticBonus > 0 ) simplified.push(new OperatorTerm({ operator: \"+\"}));\n simplified.push(new NumericTerm({ number: staticBonus} ));\n }\n return [...simplified, ...annotated];\n}\n\n/* -------------------------------------------- */\n\n/**\n * A helper function to group dice of the same size and sign into single dice terms.\n * @param {object[]} terms An array of DiceTerms and associated OperatorTerms.\n * @returns {object[]} A new array of simplified dice terms.\n */\nfunction _simplifyDiceTerms(terms) {\n const { annotated, unannotated } = _separateAnnotatedTerms(terms);\n\n // Split the unannotated terms into different die sizes and signs\n const diceQuantities = unannotated.reduce((obj, curr, i) => {\n if ( curr instanceof OperatorTerm ) return obj;\n const key = `${unannotated[i - 1].operator}${curr.faces}`;\n obj[key] = (obj[key] ?? 0) + curr.number;\n return obj;\n }, {});\n\n // Add new die and operator terms to simplified for each die size and sign\n const simplified = Object.entries(diceQuantities).flatMap(([key, number]) => ([\n new OperatorTerm({ operator: key.charAt(0) }),\n new Die({ number, faces: parseInt(key.slice(1)) })\n ]));\n return [...simplified, ...annotated];\n}\n\n/* -------------------------------------------- */\n\n/**\n * A helper function to extract the contents of parenthetical terms into their own terms.\n * @param {object[]} terms An array of roll terms.\n * @returns {object[]} A new array of terms with no parenthetical terms.\n */\nfunction _expandParentheticalTerms(terms) {\n terms = terms.reduce((acc, term) => {\n if ( term instanceof ParentheticalTerm ) {\n if ( term.isDeterministic ) term = new NumericTerm({ number: Roll.safeEval(term.term) });\n else {\n const subterms = new Roll(term.term).terms;\n term = _expandParentheticalTerms(subterms);\n }\n }\n acc.push(term);\n return acc;\n }, []);\n return _simplifyOperatorTerms(terms.flat());\n}\n\n/* -------------------------------------------- */\n\n/**\n * A helper function to group terms into PoolTerms, DiceTerms, MathTerms, and NumericTerms.\n * MathTerms are included as NumericTerms if they are deterministic.\n * @param {RollTerm[]} terms An array of roll terms.\n * @returns {object} An object mapping term types to arrays containing roll terms of that type.\n */\nfunction _groupTermsByType(terms) {\n // Add an initial operator so that terms can be rearranged arbitrarily.\n if ( !(terms[0] instanceof OperatorTerm) ) terms.unshift(new OperatorTerm({ operator: \"+\" }));\n\n return terms.reduce((obj, term, i) => {\n let type;\n if ( term instanceof DiceTerm ) type = DiceTerm;\n else if ( (term instanceof MathTerm) && (term.isDeterministic) ) type = NumericTerm;\n else type = term.constructor;\n const key = `${type.name.charAt(0).toLowerCase()}${type.name.substring(1)}s`;\n\n // Push the term and the preceding OperatorTerm.\n (obj[key] = obj[key] ?? []).push(terms[i - 1], term);\n return obj;\n }, {});\n}\n\n/* -------------------------------------------- */\n\n/**\n * A helper function to separate annotated terms from unannotated terms.\n * @param {object[]} terms An array of DiceTerms and associated OperatorTerms.\n * @returns {Array | Array[]} A pair of term arrays, one containing annotated terms.\n */\nfunction _separateAnnotatedTerms(terms) {\n return terms.reduce((obj, curr, i) => {\n if ( curr instanceof OperatorTerm ) return obj;\n obj[curr.flavor ? \"annotated\" : \"unannotated\"].push(terms[i - 1], curr);\n return obj;\n }, { annotated: [], unannotated: [] });\n}\n","/**\n * A specialized Dialog subclass for ability usage.\n *\n * @param {Item5e} item Item that is being used.\n * @param {object} [dialogData={}] An object of dialog data which configures how the modal window is rendered.\n * @param {object} [options={}] Dialog rendering options.\n */\nexport default class AbilityUseDialog extends Dialog {\n constructor(item, dialogData={}, options={}) {\n super(dialogData, options);\n this.options.classes = [\"dnd5e\", \"dialog\"];\n\n /**\n * Store a reference to the Item document being used\n * @type {Item5e}\n */\n this.item = item;\n }\n\n /* -------------------------------------------- */\n /* Rendering */\n /* -------------------------------------------- */\n\n /**\n * A constructor function which displays the Spell Cast Dialog app for a given Actor and Item.\n * Returns a Promise which resolves to the dialog FormData once the workflow has been completed.\n * @param {Item5e} item Item being used.\n * @returns {Promise} Promise that is resolved when the use dialog is acted upon.\n */\n static async create(item) {\n if ( !item.isOwned ) throw new Error(\"You cannot display an ability usage dialog for an unowned item\");\n\n // Prepare data\n const uses = item.system.uses ?? {};\n const resource = item.system.consume ?? {};\n const quantity = item.system.quantity ?? 0;\n const recharge = item.system.recharge ?? {};\n const recharges = !!recharge.value;\n const sufficientUses = (quantity > 0 && !uses.value) || uses.value > 0;\n\n // Prepare dialog form data\n const data = {\n item: item,\n title: game.i18n.format(\"DND5E.AbilityUseHint\", {type: game.i18n.localize(CONFIG.Item.typeLabels[item.type]), name: item.name}),\n note: this._getAbilityUseNote(item, uses, recharge),\n consumeSpellSlot: false,\n consumeRecharge: recharges,\n consumeResource: resource.target && (!item.hasAttack || (resource.type !== \"ammo\")),\n consumeUses: uses.per && (uses.max > 0),\n canUse: recharges ? recharge.charged : sufficientUses,\n createTemplate: game.user.can(\"TEMPLATE_CREATE\") && item.hasAreaTarget,\n errors: []\n };\n if ( item.type === \"spell\" ) this._getSpellData(item.actor.system, item.system, data);\n\n // Render the ability usage template\n const html = await renderTemplate(\"systems/dnd5e/templates/apps/ability-use.hbs\", data);\n\n // Create the Dialog and return data as a Promise\n const icon = data.isSpell ? \"fa-magic\" : \"fa-fist-raised\";\n const label = game.i18n.localize(`DND5E.AbilityUse${data.isSpell ? \"Cast\" : \"Use\"}`);\n return new Promise(resolve => {\n const dlg = new this(item, {\n title: `${item.name}: ${game.i18n.localize(\"DND5E.AbilityUseConfig\")}`,\n content: html,\n buttons: {\n use: {\n icon: ``,\n label: label,\n callback: html => {\n const fd = new FormDataExtended(html[0].querySelector(\"form\"));\n resolve(fd.object);\n }\n }\n },\n default: \"use\",\n close: () => resolve(null)\n });\n dlg.render(true);\n });\n }\n\n /* -------------------------------------------- */\n /* Helpers */\n /* -------------------------------------------- */\n\n /**\n * Get dialog data related to limited spell slots.\n * @param {object} actorData System data from the actor using the spell.\n * @param {object} itemData System data from the spell being used.\n * @param {object} data Data for the dialog being presented.\n * @returns {object} Modified dialog data.\n * @private\n */\n static _getSpellData(actorData, itemData, data) {\n\n // Determine whether the spell may be up-cast\n const lvl = itemData.level;\n const consumeSpellSlot = (lvl > 0) && CONFIG.DND5E.spellUpcastModes.includes(itemData.preparation.mode);\n\n // If can't upcast, return early and don't bother calculating available spell slots\n if (!consumeSpellSlot) {\n return foundry.utils.mergeObject(data, { isSpell: true, consumeSpellSlot });\n }\n\n // Determine the levels which are feasible\n let lmax = 0;\n const spellLevels = Array.fromRange(10).reduce((arr, i) => {\n if ( i < lvl ) return arr;\n const label = CONFIG.DND5E.spellLevels[i];\n const l = actorData.spells[`spell${i}`] || {max: 0, override: null};\n let max = parseInt(l.override || l.max || 0);\n let slots = Math.clamped(parseInt(l.value || 0), 0, max);\n if ( max > 0 ) lmax = i;\n arr.push({\n level: i,\n label: i > 0 ? game.i18n.format(\"DND5E.SpellLevelSlot\", {level: label, n: slots}) : label,\n canCast: max > 0,\n hasSlots: slots > 0\n });\n return arr;\n }, []).filter(sl => sl.level <= lmax);\n\n // If this character has pact slots, present them as an option for casting the spell.\n const pact = actorData.spells.pact;\n if (pact.level >= lvl) {\n spellLevels.push({\n level: \"pact\",\n label: `${game.i18n.format(\"DND5E.SpellLevelPact\", {level: pact.level, n: pact.value})}`,\n canCast: true,\n hasSlots: pact.value > 0\n });\n }\n const canCast = spellLevels.some(l => l.hasSlots);\n if ( !canCast ) data.errors.push(game.i18n.format(\"DND5E.SpellCastNoSlots\", {\n level: CONFIG.DND5E.spellLevels[lvl],\n name: data.item.name\n }));\n\n // Merge spell casting data\n return foundry.utils.mergeObject(data, { isSpell: true, consumeSpellSlot, spellLevels });\n }\n\n /* -------------------------------------------- */\n\n /**\n * Get the ability usage note that is displayed.\n * @param {object} item Data for the item being used.\n * @param {{value: number, max: number, per: string}} uses Object uses and recovery configuration.\n * @param {{charged: boolean, value: string}} recharge Object recharge configuration.\n * @returns {string} Localized string indicating available uses.\n * @private\n */\n static _getAbilityUseNote(item, uses, recharge) {\n\n // Zero quantity\n const quantity = item.system.quantity;\n if ( quantity <= 0 ) return game.i18n.localize(\"DND5E.AbilityUseUnavailableHint\");\n\n // Abilities which use Recharge\n if ( recharge.value ) {\n return game.i18n.format(recharge.charged ? \"DND5E.AbilityUseChargedHint\" : \"DND5E.AbilityUseRechargeHint\", {\n type: game.i18n.localize(CONFIG.Item.typeLabels[item.type])\n });\n }\n\n // Does not use any resource\n if ( !uses.per || !uses.max ) return \"\";\n\n // Consumables\n if ( item.type === \"consumable\" ) {\n let str = \"DND5E.AbilityUseNormalHint\";\n if ( uses.value > 1 ) str = \"DND5E.AbilityUseConsumableChargeHint\";\n else if ( item.system.quantity === 1 && uses.autoDestroy ) str = \"DND5E.AbilityUseConsumableDestroyHint\";\n else if ( item.system.quantity > 1 ) str = \"DND5E.AbilityUseConsumableQuantityHint\";\n return game.i18n.format(str, {\n type: game.i18n.localize(`DND5E.Consumable${item.system.consumableType.capitalize()}`),\n value: uses.value,\n quantity: item.system.quantity,\n max: uses.max,\n per: CONFIG.DND5E.limitedUsePeriods[uses.per]\n });\n }\n\n // Other Items\n else {\n return game.i18n.format(\"DND5E.AbilityUseNormalHint\", {\n type: game.i18n.localize(CONFIG.Item.typeLabels[item.type]),\n value: uses.value,\n max: uses.max,\n per: CONFIG.DND5E.limitedUsePeriods[uses.per]\n });\n }\n }\n}\n","import {d20Roll, damageRoll} from \"../dice/dice.mjs\";\nimport simplifyRollFormula from \"../dice/simplify-roll-formula.mjs\";\nimport Advancement from \"./advancement/advancement.mjs\";\nimport AbilityUseDialog from \"../applications/item/ability-use-dialog.mjs\";\nimport Proficiency from \"./actor/proficiency.mjs\";\n\n/**\n * Override and extend the basic Item implementation.\n */\nexport default class Item5e extends Item {\n\n /**\n * Caches an item linked to this one, such as a subclass associated with a class.\n * @type {Item5e}\n * @private\n */\n _classLink;\n\n /* -------------------------------------------- */\n /* Item Properties */\n /* -------------------------------------------- */\n\n /**\n * Which ability score modifier is used by this item?\n * @type {string|null}\n * @see {@link ActionTemplate#abilityMod}\n */\n get abilityMod() {\n return this.system.abilityMod ?? null;\n }\n\n /* --------------------------------------------- */\n\n /**\n * What is the critical hit threshold for this item, if applicable?\n * @type {number|null}\n * @see {@link ActionTemplate#criticalThreshold}\n */\n get criticalThreshold() {\n return this.system.criticalThreshold ?? null;\n }\n\n /* --------------------------------------------- */\n\n /**\n * Does the Item implement an ability check as part of its usage?\n * @type {boolean}\n * @see {@link ActionTemplate#hasAbilityCheck}\n */\n get hasAbilityCheck() {\n return this.system.hasAbilityCheck ?? false;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Does this item support advancement and have advancements defined?\n * @type {boolean}\n */\n get hasAdvancement() {\n return !!this.system.advancement?.length;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Does the Item have an area of effect target?\n * @type {boolean}\n * @see {@link ActivatedEffectTemplate#hasAreaTarget}\n */\n get hasAreaTarget() {\n return this.system.hasAreaTarget ?? false;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Does the Item implement an attack roll as part of its usage?\n * @type {boolean}\n * @see {@link ActionTemplate#hasAttack}\n */\n get hasAttack() {\n return this.system.hasAttack ?? false;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Does the Item implement a damage roll as part of its usage?\n * @type {boolean}\n * @see {@link ActionTemplate#hasDamage}\n */\n get hasDamage() {\n return this.system.hasDamage ?? false;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Does the Item target one or more distinct targets?\n * @type {boolean}\n * @see {@link ActivatedEffectTemplate#hasIndividualTarget}\n */\n get hasIndividualTarget() {\n return this.system.hasIndividualTarget ?? false;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Is this Item limited in its ability to be used by charges or by recharge?\n * @type {boolean}\n * @see {@link ActivatedEffectTemplate#hasLimitedUses}\n * @see {@link FeatData#hasLimitedUses}\n */\n get hasLimitedUses() {\n return this.system.hasLimitedUses ?? false;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Does the Item implement a saving throw as part of its usage?\n * @type {boolean}\n * @see {@link ActionTemplate#hasSave}\n */\n get hasSave() {\n return this.system.hasSave ?? false;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Does the Item have a target?\n * @type {boolean}\n * @see {@link ActivatedEffectTemplate#hasTarget}\n */\n get hasTarget() {\n return this.system.hasTarget ?? false;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Return an item's identifier.\n * @type {string}\n */\n get identifier() {\n return this.system.identifier || this.name.slugify({strict: true});\n }\n\n /* -------------------------------------------- */\n\n /**\n * Is this item any of the armor subtypes?\n * @type {boolean}\n * @see {@link EquipmentTemplate#isArmor}\n */\n get isArmor() {\n return this.system.isArmor ?? false;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Does the item provide an amount of healing instead of conventional damage?\n * @type {boolean}\n * @see {@link ActionTemplate#isHealing}\n */\n get isHealing() {\n return this.system.isHealing ?? false;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Is this item a separate large object like a siege engine or vehicle component that is\n * usually mounted on fixtures rather than equipped, and has its own AC and HP?\n * @type {boolean}\n * @see {@link EquipmentData#isMountable}\n * @see {@link WeaponData#isMountable}\n */\n get isMountable() {\n return this.system.isMountable ?? false;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Is this class item the original class for the containing actor? If the item is not a class or it is not\n * embedded in an actor then this will return `null`.\n * @type {boolean|null}\n */\n get isOriginalClass() {\n if ( this.type !== \"class\" || !this.isEmbedded ) return null;\n return this.id === this.parent.system.details.originalClass;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Does the Item implement a versatile damage roll as part of its usage?\n * @type {boolean}\n * @see {@link ActionTemplate#isVersatile}\n */\n get isVersatile() {\n return this.system.isVersatile ?? false;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Class associated with this subclass. Always returns null on non-subclass or non-embedded items.\n * @type {Item5e|null}\n */\n get class() {\n if ( !this.isEmbedded || (this.type !== \"subclass\") ) return null;\n const cid = this.system.classIdentifier;\n return this._classLink ??= this.parent.items.find(i => (i.type === \"class\") && (i.identifier === cid));\n }\n\n /* -------------------------------------------- */\n\n /**\n * Subclass associated with this class. Always returns null on non-class or non-embedded items.\n * @type {Item5e|null}\n */\n get subclass() {\n if ( !this.isEmbedded || (this.type !== \"class\") ) return null;\n const items = this.parent.items;\n const cid = this.identifier;\n return this._classLink ??= items.find(i => (i.type === \"subclass\") && (i.system.classIdentifier === cid));\n }\n\n /* -------------------------------------------- */\n\n /**\n * Retrieve scale values for current level from advancement data.\n * @type {object}\n */\n get scaleValues() {\n if ( ![\"class\", \"subclass\"].includes(this.type) || !this.advancement.byType.ScaleValue ) return {};\n const level = this.type === \"class\" ? this.system.levels : this.class?.system.levels ?? 0;\n return this.advancement.byType.ScaleValue.reduce((obj, advancement) => {\n obj[advancement.identifier] = advancement.valueForLevel(level);\n return obj;\n }, {});\n }\n\n /* -------------------------------------------- */\n\n /**\n * Spellcasting details for a class or subclass.\n *\n * @typedef {object} SpellcastingDescription\n * @property {string} type Spellcasting type as defined in ``CONFIG.DND5E.spellcastingTypes`.\n * @property {string|null} progression Progression within the specified spellcasting type if supported.\n * @property {string} ability Ability used when casting spells from this class or subclass.\n * @property {number|null} levels Number of levels of this class or subclass's class if embedded.\n */\n\n /**\n * Retrieve the spellcasting for a class or subclass. For classes, this will return the spellcasting\n * of the subclass if it overrides the class. For subclasses, this will return the class's spellcasting\n * if no spellcasting is defined on the subclass.\n * @type {SpellcastingDescription|null} Spellcasting object containing progression & ability.\n */\n get spellcasting() {\n const spellcasting = this.system.spellcasting;\n if ( !spellcasting ) return null;\n const isSubclass = this.type === \"subclass\";\n const classSC = isSubclass ? this.class?.system.spellcasting : spellcasting;\n const subclassSC = isSubclass ? spellcasting : this.subclass?.system.spellcasting;\n const finalSC = foundry.utils.deepClone(\n ( subclassSC && (subclassSC.progression !== \"none\") ) ? subclassSC : classSC\n );\n if ( !finalSC ) return null;\n finalSC.levels = this.isEmbedded ? (this.system.levels ?? this.class?.system.levels) : null;\n\n // Temp method for determining spellcasting type until this data is available directly using advancement\n if ( CONFIG.DND5E.spellcastingTypes[finalSC.progression] ) finalSC.type = finalSC.progression;\n else finalSC.type = Object.entries(CONFIG.DND5E.spellcastingTypes).find(([type, data]) => {\n return !!data.progression?.[finalSC.progression];\n })?.[0];\n\n return finalSC;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Should this item's active effects be suppressed.\n * @type {boolean}\n */\n get areEffectsSuppressed() {\n const requireEquipped = (this.type !== \"consumable\")\n || [\"rod\", \"trinket\", \"wand\"].includes(this.system.consumableType);\n if ( requireEquipped && (this.system.equipped === false) ) return true;\n return this.system.attunement === CONFIG.DND5E.attunementTypes.REQUIRED;\n }\n\n /* -------------------------------------------- */\n /* Data Preparation */\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n prepareDerivedData() {\n super.prepareDerivedData();\n this.labels = {};\n\n // Clear out linked item cache\n this._classLink = undefined;\n\n // Advancement\n this._prepareAdvancement();\n\n // Specialized preparation per Item type\n switch ( this.type ) {\n case \"equipment\":\n this._prepareEquipment(); break;\n case \"feat\":\n this._prepareFeat(); break;\n case \"spell\":\n this._prepareSpell(); break;\n }\n\n // Activated Items\n this._prepareActivation();\n this._prepareAction();\n\n // Un-owned items can have their final preparation done here, otherwise this needs to happen in the owning Actor\n if ( !this.isOwned ) this.prepareFinalAttributes();\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare derived data for an equipment-type item and define labels.\n * @protected\n */\n _prepareEquipment() {\n this.labels.armor = this.system.armor.value ? `${this.system.armor.value} ${game.i18n.localize(\"DND5E.AC\")}` : \"\";\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare derived data for a feat-type item and define labels.\n * @protected\n */\n _prepareFeat() {\n const act = this.system.activation;\n const types = CONFIG.DND5E.abilityActivationTypes;\n if ( act?.type === types.legendary ) this.labels.featType = game.i18n.localize(\"DND5E.LegendaryActionLabel\");\n else if ( act?.type === types.lair ) this.labels.featType = game.i18n.localize(\"DND5E.LairActionLabel\");\n else if ( act?.type ) {\n this.labels.featType = game.i18n.localize(this.system.damage.length ? \"DND5E.Attack\" : \"DND5E.Action\");\n }\n else this.labels.featType = game.i18n.localize(\"DND5E.Passive\");\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare derived data for a spell-type item and define labels.\n * @protected\n */\n _prepareSpell() {\n const tags = Object.fromEntries(Object.entries(CONFIG.DND5E.spellTags).map(([k, v]) => {\n v.tag = true;\n return [k, v];\n }));\n const attributes = {...CONFIG.DND5E.spellComponents, ...tags};\n this.system.preparation.mode ||= \"prepared\";\n this.labels.level = CONFIG.DND5E.spellLevels[this.system.level];\n this.labels.school = CONFIG.DND5E.spellSchools[this.system.school];\n this.labels.components = Object.entries(this.system.components).reduce((obj, [c, active]) => {\n const config = attributes[c];\n if ( !config || (active !== true) ) return obj;\n obj.all.push({abbr: config.abbr, tag: config.tag});\n if ( config.tag ) obj.tags.push(config.label);\n else obj.vsm.push(config.abbr);\n return obj;\n }, {all: [], vsm: [], tags: []});\n this.labels.components.vsm = new Intl.ListFormat(game.i18n.lang, { style: \"narrow\", type: \"conjunction\" })\n .format(this.labels.components.vsm);\n this.labels.materials = this.system?.materials?.value ?? null;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare derived data for activated items and define labels.\n * @protected\n */\n _prepareActivation() {\n if ( !(\"activation\" in this.system) ) return;\n const C = CONFIG.DND5E;\n\n // Ability Activation Label\n const act = this.system.activation ?? {};\n if ( [\"none\", \"\"].includes(act.type) ) act.type = null; // Backwards compatibility\n this.labels.activation = act.type ? [act.cost, C.abilityActivationTypes[act.type]].filterJoin(\" \") : \"\";\n\n // Target Label\n let tgt = this.system.target ?? {};\n if ( [\"none\", \"\"].includes(tgt.type) ) tgt.type = null; // Backwards compatibility\n if ( [null, \"self\"].includes(tgt.type) ) tgt.value = tgt.units = null;\n else if ( tgt.units === \"touch\" ) tgt.value = null;\n this.labels.target = tgt.type\n ? [tgt.value, C.distanceUnits[tgt.units], C.targetTypes[tgt.type]].filterJoin(\" \") : \"\";\n\n // Range Label\n let rng = this.system.range ?? {};\n if ( [\"none\", \"\"].includes(rng.units) ) rng.units = null; // Backwards compatibility\n if ( [null, \"touch\", \"self\"].includes(rng.units) ) rng.value = rng.long = null;\n this.labels.range = rng.units\n ? [rng.value, rng.long ? `/ ${rng.long}` : null, C.distanceUnits[rng.units]].filterJoin(\" \") : \"\";\n\n // Recharge Label\n let chg = this.system.recharge ?? {};\n const chgSuffix = `${chg.value}${parseInt(chg.value) < 6 ? \"+\" : \"\"}`;\n this.labels.recharge = `${game.i18n.localize(\"DND5E.Recharge\")} [${chgSuffix}]`;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare derived data and labels for items which have an action which deals damage.\n * @protected\n */\n _prepareAction() {\n if ( !(\"actionType\" in this.system) ) return;\n let dmg = this.system.damage || {};\n if ( dmg.parts ) {\n const types = CONFIG.DND5E.damageTypes;\n this.labels.damage = dmg.parts.map(d => d[0]).join(\" + \").replace(/\\+ -/g, \"- \");\n this.labels.damageTypes = dmg.parts.map(d => types[d[1]]).join(\", \");\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare advancement objects from stored advancement data.\n * @protected\n */\n _prepareAdvancement() {\n const minAdvancementLevel = [\"class\", \"subclass\"].includes(this.type) ? 1 : 0;\n this.advancement = {\n byId: {},\n byLevel: Object.fromEntries(\n Array.fromRange(CONFIG.DND5E.maxLevel + 1).slice(minAdvancementLevel).map(l => [l, []])\n ),\n byType: {},\n needingConfiguration: []\n };\n for ( const advancement of this.system.advancement ?? [] ) {\n if ( !(advancement instanceof Advancement) ) continue;\n this.advancement.byId[advancement.id] = advancement;\n this.advancement.byType[advancement.type] ??= [];\n this.advancement.byType[advancement.type].push(advancement);\n advancement.levels.forEach(l => this.advancement.byLevel[l].push(advancement));\n if ( !advancement.levels.length ) this.advancement.needingConfiguration.push(advancement);\n }\n Object.entries(this.advancement.byLevel).forEach(([lvl, data]) => data.sort((a, b) => {\n return a.sortingValueForLevel(lvl).localeCompare(b.sortingValueForLevel(lvl));\n }));\n }\n\n /* -------------------------------------------- */\n\n /**\n * Compute item attributes which might depend on prepared actor data. If this item is embedded this method will\n * be called after the actor's data is prepared.\n * Otherwise, it will be called at the end of `Item5e#prepareDerivedData`.\n */\n prepareFinalAttributes() {\n\n // Proficiency\n if ( this.actor?.system.attributes?.prof ) {\n const isProficient = (this.type === \"spell\") || this.system.proficient; // Always proficient in spell attacks.\n this.system.prof = new Proficiency(this.actor?.system.attributes.prof, isProficient);\n }\n\n // Class data\n if ( this.type === \"class\" ) this.system.isOriginalClass = this.isOriginalClass;\n\n // Action usage\n if ( \"actionType\" in this.system ) {\n this.labels.abilityCheck = game.i18n.format(\"DND5E.AbilityPromptTitle\", {\n ability: CONFIG.DND5E.abilities[this.system.ability]?.label ?? \"\"\n });\n\n // Saving throws\n this.getSaveDC();\n\n // To Hit\n this.getAttackToHit();\n\n // Limited Uses\n this.prepareMaxUses();\n\n // Duration\n this.prepareDurationValue();\n\n // Damage Label\n this.getDerivedDamageLabel();\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * Populate a label with the compiled and simplified damage formula based on owned item\n * actor data. This is only used for display purposes and is not related to `Item5e#rollDamage`.\n * @returns {{damageType: string, formula: string, label: string}[]}\n */\n getDerivedDamageLabel() {\n if ( !this.hasDamage || !this.isOwned ) return [];\n const rollData = this.getRollData();\n const damageLabels = { ...CONFIG.DND5E.damageTypes, ...CONFIG.DND5E.healingTypes };\n const derivedDamage = this.system.damage?.parts?.map(damagePart => {\n let formula;\n try {\n const roll = new Roll(damagePart[0], rollData);\n formula = simplifyRollFormula(roll.formula, { preserveFlavor: true });\n }\n catch(err) {\n console.warn(`Unable to simplify formula for ${this.name}: ${err}`);\n }\n const damageType = damagePart[1];\n return { formula, damageType, label: `${formula} ${damageLabels[damageType] ?? \"\"}` };\n });\n return this.labels.derivedDamage = derivedDamage;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Update the derived spell DC for an item that requires a saving throw.\n * @returns {number|null}\n */\n getSaveDC() {\n if ( !this.hasSave ) return null;\n const save = this.system.save;\n\n // Actor spell-DC based scaling\n if ( save.scaling === \"spell\" ) {\n save.dc = this.isOwned ? this.actor.system.attributes.spelldc : null;\n }\n\n // Ability-score based scaling\n else if ( save.scaling !== \"flat\" ) {\n save.dc = this.isOwned ? this.actor.system.abilities[save.scaling].dc : null;\n }\n\n // Update labels\n const abl = CONFIG.DND5E.abilities[save.ability]?.label ?? \"\";\n this.labels.save = game.i18n.format(\"DND5E.SaveDC\", {dc: save.dc || \"\", ability: abl});\n return save.dc;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Update a label to the Item detailing its total to hit bonus from the following sources:\n * - item document's innate attack bonus\n * - item's actor's proficiency bonus if applicable\n * - item's actor's global bonuses to the given item type\n * - item's ammunition if applicable\n * @returns {{rollData: object, parts: string[]}|null} Data used in the item's Attack roll.\n */\n getAttackToHit() {\n if ( !this.hasAttack ) return null;\n const rollData = this.getRollData();\n const parts = [];\n\n // Include the item's innate attack bonus as the initial value and label\n const ab = this.system.attackBonus;\n if ( ab ) {\n parts.push(ab);\n this.labels.toHit = !/^[+-]/.test(ab) ? `+ ${ab}` : ab;\n }\n\n // Take no further action for un-owned items\n if ( !this.isOwned ) return {rollData, parts};\n\n // Ability score modifier\n parts.push(\"@mod\");\n\n // Add proficiency bonus if an explicit proficiency flag is present or for non-item features\n if ( ![\"weapon\", \"consumable\"].includes(this.type) || this.system.proficient ) {\n parts.push(\"@prof\");\n if ( this.system.prof?.hasProficiency ) rollData.prof = this.system.prof.term;\n }\n\n // Actor-level global bonus to attack rolls\n const actorBonus = this.actor.system.bonuses?.[this.system.actionType] || {};\n if ( actorBonus.attack ) parts.push(actorBonus.attack);\n\n // One-time bonus provided by consumed ammunition\n if ( (this.system.consume?.type === \"ammo\") && this.actor.items ) {\n const ammoItem = this.actor.items.get(this.system.consume.target);\n if ( ammoItem ) {\n const ammoItemQuantity = ammoItem.system.quantity;\n const ammoCanBeConsumed = ammoItemQuantity && (ammoItemQuantity - (this.system.consume.amount ?? 0) >= 0);\n const ammoItemAttackBonus = ammoItem.system.attackBonus;\n const ammoIsTypeConsumable = (ammoItem.type === \"consumable\") && (ammoItem.system.consumableType === \"ammo\");\n if ( ammoCanBeConsumed && ammoItemAttackBonus && ammoIsTypeConsumable ) {\n parts.push(\"@ammo\");\n rollData.ammo = ammoItemAttackBonus;\n }\n }\n }\n\n // Condense the resulting attack bonus formula into a simplified label\n const roll = new Roll(parts.join(\"+\"), rollData);\n const formula = simplifyRollFormula(roll.formula) || \"0\";\n this.labels.toHit = !/^[+-]/.test(formula) ? `+ ${formula}` : formula;\n return {rollData, parts};\n }\n\n /* -------------------------------------------- */\n\n /**\n * Populates the max uses of an item.\n * If the item is an owned item and the `max` is not numeric, calculate based on actor data.\n */\n prepareMaxUses() {\n const uses = this.system.uses;\n if ( !uses?.max ) return;\n let max = uses.max;\n if ( this.isOwned && !Number.isNumeric(max) ) {\n const property = game.i18n.localize(\"DND5E.UsesMax\");\n try {\n const rollData = this.getRollData({ deterministic: true });\n max = Roll.safeEval(this.replaceFormulaData(max, rollData, { property }));\n } catch(e) {\n const message = game.i18n.format(\"DND5E.FormulaMalformedError\", { property, name: this.name });\n this.actor._preparationWarnings.push({ message, link: this.uuid, type: \"error\" });\n console.error(message, e);\n return;\n }\n }\n uses.max = Number(max);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Populate the duration value of an item. If the item is an owned item and the\n * duration value is not numeric, calculate based on actor data.\n */\n prepareDurationValue() {\n const duration = this.system.duration;\n if ( !duration?.value ) return;\n let value = duration.value;\n\n // If this is an owned item and the value is not numeric, we need to calculate it\n if ( this.isOwned && !Number.isNumeric(value) ) {\n const property = game.i18n.localize(\"DND5E.Duration\");\n try {\n const rollData = this.getRollData({ deterministic: true });\n value = Roll.safeEval(this.replaceFormulaData(value, rollData, { property }));\n } catch(e) {\n const message = game.i18n.format(\"DND5E.FormulaMalformedError\", { property, name: this.name });\n this.actor._preparationWarnings.push({ message, link: this.uuid, type: \"error\" });\n console.error(message, e);\n return;\n }\n }\n duration.value = Number(value);\n\n // Now that duration value is a number, set the label\n if ( [\"inst\", \"perm\"].includes(duration.units) ) duration.value = null;\n this.labels.duration = [duration.value, CONFIG.DND5E.timePeriods[duration.units]].filterJoin(\" \");\n }\n\n /* -------------------------------------------- */\n\n /**\n * Replace referenced data attributes in the roll formula with values from the provided data.\n * If the attribute is not found in the provided data, display a warning on the actor.\n * @param {string} formula The original formula within which to replace.\n * @param {object} data The data object which provides replacements.\n * @param {object} options\n * @param {string} options.property Name of the property to which this formula belongs.\n * @returns {string} Formula with replaced data.\n */\n replaceFormulaData(formula, data, { property }) {\n const dataRgx = new RegExp(/@([a-z.0-9_-]+)/gi);\n const missingReferences = new Set();\n formula = formula.replace(dataRgx, (match, term) => {\n let value = foundry.utils.getProperty(data, term);\n if ( value == null ) {\n missingReferences.add(match);\n return \"0\";\n }\n return String(value).trim();\n });\n if ( (missingReferences.size > 0) && this.actor ) {\n const listFormatter = new Intl.ListFormat(game.i18n.lang, { style: \"long\", type: \"conjunction\" });\n const message = game.i18n.format(\"DND5E.FormulaMissingReferenceWarn\", {\n property, name: this.name, references: listFormatter.format(missingReferences)\n });\n this.actor._preparationWarnings.push({ message, link: this.uuid, type: \"warning\" });\n }\n return formula;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Configuration data for an item usage being prepared.\n *\n * @typedef {object} ItemUseConfiguration\n * @property {boolean} createMeasuredTemplate Trigger a template creation\n * @property {boolean} consumeQuantity Should the item's quantity be consumed?\n * @property {boolean} consumeRecharge Should a recharge be consumed?\n * @property {boolean} consumeResource Should a linked (non-ammo) resource be consumed?\n * @property {number|string|null} consumeSpellLevel Specific spell level to consume, or \"pact\" for pact level.\n * @property {boolean} consumeSpellSlot Should any spell slot be consumed?\n * @property {boolean} consumeUsage Should limited uses be consumed?\n * @property {boolean} needsConfiguration Is user-configuration needed?\n */\n\n /**\n * Additional options used for configuring item usage.\n *\n * @typedef {object} ItemUseOptions\n * @property {boolean} configureDialog Display a configuration dialog for the item usage, if applicable?\n * @property {string} rollMode The roll display mode with which to display (or not) the card.\n * @property {boolean} createMessage Whether to automatically create a chat message (if true) or simply return\n * the prepared chat message data (if false).\n * @property {object} flags Additional flags added to the chat message.\n * @property {Event} event The browser event which triggered the item usage, if any.\n */\n\n /**\n * Trigger an item usage, optionally creating a chat message with followup actions.\n * @param {ItemUseOptions} [options] Options used for configuring item usage.\n * @returns {Promise} Chat message if options.createMessage is true, message data if it is\n * false, and nothing if the roll wasn't performed.\n * @deprecated since 2.0 in favor of `Item5e#use`, targeted for removal in 2.4\n */\n async roll(options={}) {\n foundry.utils.logCompatibilityWarning(\n \"Item5e#roll has been renamed Item5e#use. Support for the old name will be removed in future versions.\",\n { since: \"DnD5e 2.0\", until: \"DnD5e 2.4\" }\n );\n return this.use(undefined, options);\n }\n\n /**\n * Trigger an item usage, optionally creating a chat message with followup actions.\n * @param {ItemUseConfiguration} [config] Initial configuration data for the usage.\n * @param {ItemUseOptions} [options] Options used for configuring item usage.\n * @returns {Promise} Chat message if options.createMessage is true, message data if it is\n * false, and nothing if the roll wasn't performed.\n */\n async use(config={}, options={}) {\n let item = this;\n const is = item.system;\n const as = item.actor.system;\n\n // Ensure the options object is ready\n options = foundry.utils.mergeObject({\n configureDialog: true,\n createMessage: true,\n \"flags.dnd5e.use\": {type: this.type, itemId: this.id, itemUuid: this.uuid}\n }, options);\n\n // Reference aspects of the item data necessary for usage\n const resource = is.consume || {}; // Resource consumption\n const isSpell = item.type === \"spell\"; // Does the item require a spell slot?\n const requireSpellSlot = isSpell && (is.level > 0) && CONFIG.DND5E.spellUpcastModes.includes(is.preparation.mode);\n\n // Define follow-up actions resulting from the item usage\n config = foundry.utils.mergeObject({\n createMeasuredTemplate: item.hasAreaTarget,\n consumeQuantity: is.uses?.autoDestroy ?? false,\n consumeRecharge: !!is.recharge?.value,\n consumeResource: !!resource.target && (!item.hasAttack || (resource.type !== \"ammo\")),\n consumeSpellLevel: requireSpellSlot ? is.preparation.mode === \"pact\" ? \"pact\" : is.level : null,\n consumeSpellSlot: requireSpellSlot,\n consumeUsage: !!is.uses?.per && (is.uses?.max > 0)\n }, config);\n\n // Display a configuration dialog to customize the usage\n if ( config.needsConfiguration === undefined ) config.needsConfiguration = config.createMeasuredTemplate\n || config.consumeRecharge || config.consumeResource || config.consumeSpellSlot || config.consumeUsage;\n\n /**\n * A hook event that fires before an item usage is configured.\n * @function dnd5e.preUseItem\n * @memberof hookEvents\n * @param {Item5e} item Item being used.\n * @param {ItemUseConfiguration} config Configuration data for the item usage being prepared.\n * @param {ItemUseOptions} options Additional options used for configuring item usage.\n * @returns {boolean} Explicitly return `false` to prevent item from being used.\n */\n if ( Hooks.call(\"dnd5e.preUseItem\", item, config, options) === false ) return;\n\n // Display configuration dialog\n if ( (options.configureDialog !== false) && config.needsConfiguration ) {\n const configuration = await AbilityUseDialog.create(item);\n if ( !configuration ) return;\n foundry.utils.mergeObject(config, configuration);\n }\n\n // Handle spell upcasting\n if ( isSpell && (config.consumeSpellSlot || config.consumeSpellLevel) ) {\n const upcastLevel = config.consumeSpellLevel === \"pact\" ? as.spells.pact.level\n : parseInt(config.consumeSpellLevel);\n if ( upcastLevel && (upcastLevel !== is.level) ) {\n item = item.clone({\"system.level\": upcastLevel}, {keepId: true});\n item.prepareData();\n item.prepareFinalAttributes();\n }\n }\n if ( isSpell ) foundry.utils.mergeObject(options.flags, {\"dnd5e.use.spellLevel\": item.system.level});\n\n /**\n * A hook event that fires before an item's resource consumption has been calculated.\n * @function dnd5e.preItemUsageConsumption\n * @memberof hookEvents\n * @param {Item5e} item Item being used.\n * @param {ItemUseConfiguration} config Configuration data for the item usage being prepared.\n * @param {ItemUseOptions} options Additional options used for configuring item usage.\n * @returns {boolean} Explicitly return `false` to prevent item from being used.\n */\n if ( Hooks.call(\"dnd5e.preItemUsageConsumption\", item, config, options) === false ) return;\n\n // Determine whether the item can be used by testing for resource consumption\n const usage = item._getUsageUpdates(config);\n if ( !usage ) return;\n\n /**\n * A hook event that fires after an item's resource consumption has been calculated but before any\n * changes have been made.\n * @function dnd5e.itemUsageConsumption\n * @memberof hookEvents\n * @param {Item5e} item Item being used.\n * @param {ItemUseConfiguration} config Configuration data for the item usage being prepared.\n * @param {ItemUseOptions} options Additional options used for configuring item usage.\n * @param {object} usage\n * @param {object} usage.actorUpdates Updates that will be applied to the actor.\n * @param {object} usage.itemUpdates Updates that will be applied to the item being used.\n * @param {object[]} usage.resourceUpdates Updates that will be applied to other items on the actor.\n * @returns {boolean} Explicitly return `false` to prevent item from being used.\n */\n if ( Hooks.call(\"dnd5e.itemUsageConsumption\", item, config, options, usage) === false ) return;\n\n // Commit pending data updates\n const { actorUpdates, itemUpdates, resourceUpdates } = usage;\n if ( !foundry.utils.isEmpty(itemUpdates) ) await item.update(itemUpdates);\n if ( config.consumeQuantity && (item.system.quantity === 0) ) await item.delete();\n if ( !foundry.utils.isEmpty(actorUpdates) ) await this.actor.update(actorUpdates);\n if ( resourceUpdates.length ) await this.actor.updateEmbeddedDocuments(\"Item\", resourceUpdates);\n\n // Prepare card data & display it if options.createMessage is true\n const cardData = await item.displayCard(options);\n\n // Initiate measured template creation\n let templates;\n if ( config.createMeasuredTemplate ) {\n try {\n templates = await (dnd5e.canvas.AbilityTemplate.fromItem(item))?.drawPreview();\n } catch(err) {}\n }\n\n /**\n * A hook event that fires when an item is used, after the measured template has been created if one is needed.\n * @function dnd5e.useItem\n * @memberof hookEvents\n * @param {Item5e} item Item being used.\n * @param {ItemUseConfiguration} config Configuration data for the roll.\n * @param {ItemUseOptions} options Additional options for configuring item usage.\n * @param {MeasuredTemplateDocument[]|null} templates The measured templates if they were created.\n */\n Hooks.callAll(\"dnd5e.useItem\", item, config, options, templates ?? null);\n\n return cardData;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Verify that the consumed resources used by an Item are available and prepare the updates that should\n * be performed. If required resources are not available, display an error and return false.\n * @param {ItemUseConfiguration} config Configuration data for an item usage being prepared.\n * @returns {object|boolean} A set of data changes to apply when the item is used, or false.\n * @protected\n */\n _getUsageUpdates({\n consumeQuantity, consumeRecharge, consumeResource, consumeSpellSlot,\n consumeSpellLevel, consumeUsage}) {\n const actorUpdates = {};\n const itemUpdates = {};\n const resourceUpdates = [];\n\n // Consume Recharge\n if ( consumeRecharge ) {\n const recharge = this.system.recharge || {};\n if ( recharge.charged === false ) {\n ui.notifications.warn(game.i18n.format(\"DND5E.ItemNoUses\", {name: this.name}));\n return false;\n }\n itemUpdates[\"system.recharge.charged\"] = false;\n }\n\n // Consume Limited Resource\n if ( consumeResource ) {\n const canConsume = this._handleConsumeResource(itemUpdates, actorUpdates, resourceUpdates);\n if ( canConsume === false ) return false;\n }\n\n // Consume Spell Slots\n if ( consumeSpellSlot && consumeSpellLevel ) {\n if ( Number.isNumeric(consumeSpellLevel) ) consumeSpellLevel = `spell${consumeSpellLevel}`;\n const level = this.actor?.system.spells[consumeSpellLevel];\n const spells = Number(level?.value ?? 0);\n if ( spells === 0 ) {\n const labelKey = consumeSpellLevel === \"pact\" ? \"DND5E.SpellProgPact\" : `DND5E.SpellLevel${this.system.level}`;\n const label = game.i18n.localize(labelKey);\n ui.notifications.warn(game.i18n.format(\"DND5E.SpellCastNoSlots\", {name: this.name, level: label}));\n return false;\n }\n actorUpdates[`system.spells.${consumeSpellLevel}.value`] = Math.max(spells - 1, 0);\n }\n\n // Consume Limited Usage\n if ( consumeUsage ) {\n const uses = this.system.uses || {};\n const available = Number(uses.value ?? 0);\n let used = false;\n const remaining = Math.max(available - 1, 0);\n if ( available >= 1 ) {\n used = true;\n itemUpdates[\"system.uses.value\"] = remaining;\n }\n\n // Reduce quantity if not reducing usages or if usages hit zero, and we are set to consumeQuantity\n if ( consumeQuantity && (!used || (remaining === 0)) ) {\n const q = Number(this.system.quantity ?? 1);\n if ( q >= 1 ) {\n used = true;\n itemUpdates[\"system.quantity\"] = Math.max(q - 1, 0);\n itemUpdates[\"system.uses.value\"] = uses.max ?? 1;\n }\n }\n\n // If the item was not used, return a warning\n if ( !used ) {\n ui.notifications.warn(game.i18n.format(\"DND5E.ItemNoUses\", {name: this.name}));\n return false;\n }\n }\n\n // Return the configured usage\n return {itemUpdates, actorUpdates, resourceUpdates};\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle update actions required when consuming an external resource\n * @param {object} itemUpdates An object of data updates applied to this item\n * @param {object} actorUpdates An object of data updates applied to the item owner (Actor)\n * @param {object[]} resourceUpdates An array of updates to apply to other items owned by the actor\n * @returns {boolean|void} Return false to block further progress, or return nothing to continue\n * @protected\n */\n _handleConsumeResource(itemUpdates, actorUpdates, resourceUpdates) {\n const consume = this.system.consume || {};\n if ( !consume.type ) return;\n\n // No consumed target\n const typeLabel = CONFIG.DND5E.abilityConsumptionTypes[consume.type];\n if ( !consume.target ) {\n ui.notifications.warn(game.i18n.format(\"DND5E.ConsumeWarningNoResource\", {name: this.name, type: typeLabel}));\n return false;\n }\n\n // Identify the consumed resource and its current quantity\n let resource = null;\n let amount = Number(consume.amount ?? 1);\n let quantity = 0;\n switch ( consume.type ) {\n case \"attribute\":\n resource = foundry.utils.getProperty(this.actor.system, consume.target);\n quantity = resource || 0;\n break;\n case \"ammo\":\n case \"material\":\n resource = this.actor.items.get(consume.target);\n quantity = resource ? resource.system.quantity : 0;\n break;\n case \"hitDice\":\n const denom = ![\"smallest\", \"largest\"].includes(consume.target) ? consume.target : false;\n resource = Object.values(this.actor.classes).filter(cls => !denom || (cls.system.hitDice === denom));\n quantity = resource.reduce((count, cls) => count + cls.system.levels - cls.system.hitDiceUsed, 0);\n break;\n case \"charges\":\n resource = this.actor.items.get(consume.target);\n if ( !resource ) break;\n const uses = resource.system.uses;\n if ( uses.per && uses.max ) quantity = uses.value;\n else if ( resource.system.recharge?.value ) {\n quantity = resource.system.recharge.charged ? 1 : 0;\n amount = 1;\n }\n break;\n }\n\n // Verify that a consumed resource is available\n if ( resource === undefined ) {\n ui.notifications.warn(game.i18n.format(\"DND5E.ConsumeWarningNoSource\", {name: this.name, type: typeLabel}));\n return false;\n }\n\n // Verify that the required quantity is available\n let remaining = quantity - amount;\n if ( remaining < 0 ) {\n ui.notifications.warn(game.i18n.format(\"DND5E.ConsumeWarningNoQuantity\", {name: this.name, type: typeLabel}));\n return false;\n }\n\n // Define updates to provided data objects\n switch ( consume.type ) {\n case \"attribute\":\n actorUpdates[`system.${consume.target}`] = remaining;\n break;\n case \"ammo\":\n case \"material\":\n resourceUpdates.push({_id: consume.target, \"system.quantity\": remaining});\n break;\n case \"hitDice\":\n if ( [\"smallest\", \"largest\"].includes(consume.target) ) resource = resource.sort((lhs, rhs) => {\n let sort = lhs.system.hitDice.localeCompare(rhs.system.hitDice, \"en\", {numeric: true});\n if ( consume.target === \"largest\" ) sort *= -1;\n return sort;\n });\n let toConsume = consume.amount;\n for ( const cls of resource ) {\n const available = (toConsume > 0 ? cls.system.levels : 0) - cls.system.hitDiceUsed;\n const delta = toConsume > 0 ? Math.min(toConsume, available) : Math.max(toConsume, available);\n if ( delta !== 0 ) {\n resourceUpdates.push({_id: cls.id, \"system.hitDiceUsed\": cls.system.hitDiceUsed + delta});\n toConsume -= delta;\n if ( toConsume === 0 ) break;\n }\n }\n break;\n case \"charges\":\n const uses = resource.system.uses || {};\n const recharge = resource.system.recharge || {};\n const update = {_id: consume.target};\n if ( uses.per && uses.max ) update[\"system.uses.value\"] = remaining;\n else if ( recharge.value ) update[\"system.recharge.charged\"] = false;\n resourceUpdates.push(update);\n break;\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * Display the chat card for an Item as a Chat Message\n * @param {ItemUseOptions} [options] Options which configure the display of the item chat card.\n * @returns {ChatMessage|object} Chat message if `createMessage` is true, otherwise an object containing\n * message data.\n */\n async displayCard(options={}) {\n\n // Render the chat card template\n const token = this.actor.token;\n const templateData = {\n actor: this.actor,\n tokenId: token?.uuid || null,\n item: this,\n data: await this.getChatData(),\n labels: this.labels,\n hasAttack: this.hasAttack,\n isHealing: this.isHealing,\n hasDamage: this.hasDamage,\n isVersatile: this.isVersatile,\n isSpell: this.type === \"spell\",\n hasSave: this.hasSave,\n hasAreaTarget: this.hasAreaTarget,\n isTool: this.type === \"tool\",\n hasAbilityCheck: this.hasAbilityCheck\n };\n const html = await renderTemplate(\"systems/dnd5e/templates/chat/item-card.hbs\", templateData);\n\n // Create the ChatMessage data object\n const chatData = {\n user: game.user.id,\n type: CONST.CHAT_MESSAGE_TYPES.OTHER,\n content: html,\n flavor: this.system.chatFlavor || this.name,\n speaker: ChatMessage.getSpeaker({actor: this.actor, token}),\n flags: {\"core.canPopout\": true}\n };\n\n // If the Item was destroyed in the process of displaying its card - embed the item data in the chat message\n if ( (this.type === \"consumable\") && !this.actor.items.has(this.id) ) {\n chatData.flags[\"dnd5e.itemData\"] = templateData.item.toObject();\n }\n\n // Merge in the flags from options\n chatData.flags = foundry.utils.mergeObject(chatData.flags, options.flags);\n\n /**\n * A hook event that fires before an item chat card is created.\n * @function dnd5e.preDisplayCard\n * @memberof hookEvents\n * @param {Item5e} item Item for which the chat card is being displayed.\n * @param {object} chatData Data used to create the chat message.\n * @param {ItemUseOptions} options Options which configure the display of the item chat card.\n */\n Hooks.callAll(\"dnd5e.preDisplayCard\", this, chatData, options);\n\n // Apply the roll mode to adjust message visibility\n ChatMessage.applyRollMode(chatData, options.rollMode ?? game.settings.get(\"core\", \"rollMode\"));\n\n // Create the Chat Message or return its data\n const card = (options.createMessage !== false) ? await ChatMessage.create(chatData) : chatData;\n\n /**\n * A hook event that fires after an item chat card is created.\n * @function dnd5e.displayCard\n * @memberof hookEvents\n * @param {Item5e} item Item for which the chat card is being displayed.\n * @param {ChatMessage|object} card The created ChatMessage instance or ChatMessageData depending on whether\n * options.createMessage was set to `true`.\n */\n Hooks.callAll(\"dnd5e.displayCard\", this, card);\n\n return card;\n }\n\n /* -------------------------------------------- */\n /* Chat Cards */\n /* -------------------------------------------- */\n\n /**\n * Prepare an object of chat data used to display a card for the Item in the chat log.\n * @param {object} htmlOptions Options used by the TextEditor.enrichHTML function.\n * @returns {object} An object of chat data to render.\n */\n async getChatData(htmlOptions={}) {\n const data = this.toObject().system;\n\n // Rich text description\n data.description.value = await TextEditor.enrichHTML(data.description.value, {\n async: true,\n relativeTo: this,\n rollData: this.getRollData(),\n ...htmlOptions\n });\n\n // Type specific properties\n data.properties = [\n ...this.system.chatProperties ?? [],\n ...this.system.equippableItemChatProperties ?? [],\n ...this.system.activatedEffectChatProperties ?? []\n ].filter(p => p);\n\n return data;\n }\n\n /* -------------------------------------------- */\n /* Item Rolls - Attack, Damage, Saves, Checks */\n /* -------------------------------------------- */\n\n /**\n * Place an attack roll using an item (weapon, feat, spell, or equipment)\n * Rely upon the d20Roll logic for the core implementation\n *\n * @param {D20RollConfiguration} options Roll options which are configured and provided to the d20Roll function\n * @returns {Promise} A Promise which resolves to the created Roll instance\n */\n async rollAttack(options={}) {\n const flags = this.actor.flags.dnd5e ?? {};\n if ( !this.hasAttack ) throw new Error(\"You may not place an Attack Roll with this Item.\");\n let title = `${this.name} - ${game.i18n.localize(\"DND5E.AttackRoll\")}`;\n\n // Get the parts and rollData for this item's attack\n const {parts, rollData} = this.getAttackToHit();\n if ( options.spellLevel ) rollData.item.level = options.spellLevel;\n\n // Handle ammunition consumption\n delete this._ammo;\n let ammo = null;\n let ammoUpdate = [];\n const consume = this.system.consume;\n if ( consume?.type === \"ammo\" ) {\n ammo = this.actor.items.get(consume.target);\n if ( ammo?.system ) {\n const q = ammo.system.quantity;\n const consumeAmount = consume.amount ?? 0;\n if ( q && (q - consumeAmount >= 0) ) {\n this._ammo = ammo;\n title += ` [${ammo.name}]`;\n }\n }\n\n // Get pending ammunition update\n const usage = this._getUsageUpdates({consumeResource: true});\n if ( usage === false ) return null;\n ammoUpdate = usage.resourceUpdates ?? [];\n }\n\n // Flags\n const elvenAccuracy = (flags.elvenAccuracy\n && CONFIG.DND5E.characterFlags.elvenAccuracy.abilities.includes(this.abilityMod)) || undefined;\n\n // Compose roll options\n const rollConfig = foundry.utils.mergeObject({\n actor: this.actor,\n data: rollData,\n critical: this.criticalThreshold,\n title,\n flavor: title,\n elvenAccuracy,\n halflingLucky: flags.halflingLucky,\n dialogOptions: {\n width: 400,\n top: options.event ? options.event.clientY - 80 : null,\n left: window.innerWidth - 710\n },\n messageData: {\n \"flags.dnd5e.roll\": {type: \"attack\", itemId: this.id, itemUuid: this.uuid},\n speaker: ChatMessage.getSpeaker({actor: this.actor})\n }\n }, options);\n rollConfig.parts = parts.concat(options.parts ?? []);\n\n /**\n * A hook event that fires before an attack is rolled for an Item.\n * @function dnd5e.preRollAttack\n * @memberof hookEvents\n * @param {Item5e} item Item for which the roll is being performed.\n * @param {D20RollConfiguration} config Configuration data for the pending roll.\n * @returns {boolean} Explicitly return false to prevent the roll from being performed.\n */\n if ( Hooks.call(\"dnd5e.preRollAttack\", this, rollConfig) === false ) return;\n\n const roll = await d20Roll(rollConfig);\n if ( roll === null ) return null;\n\n /**\n * A hook event that fires after an attack has been rolled for an Item.\n * @function dnd5e.rollAttack\n * @memberof hookEvents\n * @param {Item5e} item Item for which the roll was performed.\n * @param {D20Roll} roll The resulting roll.\n * @param {object[]} ammoUpdate Updates that will be applied to ammo Items as a result of this attack.\n */\n Hooks.callAll(\"dnd5e.rollAttack\", this, roll, ammoUpdate);\n\n // Commit ammunition consumption on attack rolls resource consumption if the attack roll was made\n if ( ammoUpdate.length ) await this.actor?.updateEmbeddedDocuments(\"Item\", ammoUpdate);\n return roll;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Place a damage roll using an item (weapon, feat, spell, or equipment)\n * Rely upon the damageRoll logic for the core implementation.\n * @param {object} [config]\n * @param {MouseEvent} [config.event] An event which triggered this roll, if any\n * @param {boolean} [config.critical] Should damage be rolled as a critical hit?\n * @param {number} [config.spellLevel] If the item is a spell, override the level for damage scaling\n * @param {boolean} [config.versatile] If the item is a weapon, roll damage using the versatile formula\n * @param {DamageRollConfiguration} [config.options] Additional options passed to the damageRoll function\n * @returns {Promise} A Promise which resolves to the created Roll instance, or null if the action\n * cannot be performed.\n */\n async rollDamage({critical, event=null, spellLevel=null, versatile=false, options={}}={}) {\n if ( !this.hasDamage ) throw new Error(\"You may not make a Damage Roll with this Item.\");\n const messageData = {\n \"flags.dnd5e.roll\": {type: \"damage\", itemId: this.id, itemUuid: this.uuid},\n speaker: ChatMessage.getSpeaker({actor: this.actor})\n };\n\n // Get roll data\n const dmg = this.system.damage;\n const parts = dmg.parts.map(d => d[0]);\n const rollData = this.getRollData();\n if ( spellLevel ) rollData.item.level = spellLevel;\n\n // Configure the damage roll\n const actionFlavor = game.i18n.localize(this.system.actionType === \"heal\" ? \"DND5E.Healing\" : \"DND5E.DamageRoll\");\n const title = `${this.name} - ${actionFlavor}`;\n const rollConfig = {\n actor: this.actor,\n critical,\n data: rollData,\n event,\n title: title,\n flavor: this.labels.damageTypes.length ? `${title} (${this.labels.damageTypes})` : title,\n dialogOptions: {\n width: 400,\n top: event ? event.clientY - 80 : null,\n left: window.innerWidth - 710\n },\n messageData\n };\n\n // Adjust damage from versatile usage\n if ( versatile && dmg.versatile ) {\n parts[0] = dmg.versatile;\n messageData[\"flags.dnd5e.roll\"].versatile = true;\n }\n\n // Scale damage from up-casting spells\n const scaling = this.system.scaling;\n if ( (this.type === \"spell\") ) {\n if ( scaling.mode === \"cantrip\" ) {\n let level;\n if ( this.actor.type === \"character\" ) level = this.actor.system.details.level;\n else if ( this.system.preparation.mode === \"innate\" ) level = Math.ceil(this.actor.system.details.cr);\n else level = this.actor.system.details.spellLevel;\n this._scaleCantripDamage(parts, scaling.formula, level, rollData);\n }\n else if ( spellLevel && (scaling.mode === \"level\") && scaling.formula ) {\n this._scaleSpellDamage(parts, this.system.level, spellLevel, scaling.formula, rollData);\n }\n }\n\n // Add damage bonus formula\n const actorBonus = foundry.utils.getProperty(this.actor.system, `bonuses.${this.system.actionType}`) || {};\n if ( actorBonus.damage && (parseInt(actorBonus.damage) !== 0) ) {\n parts.push(actorBonus.damage);\n }\n\n // Only add the ammunition damage if the ammunition is a consumable with type 'ammo'\n if ( this._ammo && (this._ammo.type === \"consumable\") && (this._ammo.system.consumableType === \"ammo\") ) {\n parts.push(\"@ammo\");\n rollData.ammo = this._ammo.system.damage.parts.map(p => p[0]).join(\"+\");\n rollConfig.flavor += ` [${this._ammo.name}]`;\n delete this._ammo;\n }\n\n // Factor in extra critical damage dice from the Barbarian's \"Brutal Critical\"\n if ( this.system.actionType === \"mwak\" ) {\n rollConfig.criticalBonusDice = this.actor.getFlag(\"dnd5e\", \"meleeCriticalDamageDice\") ?? 0;\n }\n\n // Factor in extra weapon-specific critical damage\n if ( this.system.critical?.damage ) rollConfig.criticalBonusDamage = this.system.critical.damage;\n\n foundry.utils.mergeObject(rollConfig, options);\n rollConfig.parts = parts.concat(options.parts ?? []);\n\n /**\n * A hook event that fires before a damage is rolled for an Item.\n * @function dnd5e.preRollDamage\n * @memberof hookEvents\n * @param {Item5e} item Item for which the roll is being performed.\n * @param {DamageRollConfiguration} config Configuration data for the pending roll.\n * @returns {boolean} Explicitly return false to prevent the roll from being performed.\n */\n if ( Hooks.call(\"dnd5e.preRollDamage\", this, rollConfig) === false ) return;\n\n const roll = await damageRoll(rollConfig);\n\n /**\n * A hook event that fires after a damage has been rolled for an Item.\n * @function dnd5e.rollDamage\n * @memberof hookEvents\n * @param {Item5e} item Item for which the roll was performed.\n * @param {DamageRoll} roll The resulting roll.\n */\n if ( roll ) Hooks.callAll(\"dnd5e.rollDamage\", this, roll);\n\n // Call the roll helper utility\n return roll;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Adjust a cantrip damage formula to scale it for higher level characters and monsters.\n * @param {string[]} parts The original parts of the damage formula.\n * @param {string} scale The scaling formula.\n * @param {number} level Level at which the spell is being cast.\n * @param {object} rollData A data object that should be applied to the scaled damage roll.\n * @returns {string[]} The parts of the damage formula with the scaling applied.\n * @private\n */\n _scaleCantripDamage(parts, scale, level, rollData) {\n const add = Math.floor((level + 1) / 6);\n if ( add === 0 ) return [];\n return this._scaleDamage(parts, scale || parts.join(\" + \"), add, rollData);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Adjust the spell damage formula to scale it for spell level up-casting.\n * @param {string[]} parts The original parts of the damage formula.\n * @param {number} baseLevel Default level for the spell.\n * @param {number} spellLevel Level at which the spell is being cast.\n * @param {string} formula The scaling formula.\n * @param {object} rollData A data object that should be applied to the scaled damage roll.\n * @returns {string[]} The parts of the damage formula with the scaling applied.\n * @private\n */\n _scaleSpellDamage(parts, baseLevel, spellLevel, formula, rollData) {\n const upcastLevels = Math.max(spellLevel - baseLevel, 0);\n if ( upcastLevels === 0 ) return parts;\n return this._scaleDamage(parts, formula, upcastLevels, rollData);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Scale an array of damage parts according to a provided scaling formula and scaling multiplier.\n * @param {string[]} parts The original parts of the damage formula.\n * @param {string} scaling The scaling formula.\n * @param {number} times A number of times to apply the scaling formula.\n * @param {object} rollData A data object that should be applied to the scaled damage roll\n * @returns {string[]} The parts of the damage formula with the scaling applied.\n * @private\n */\n _scaleDamage(parts, scaling, times, rollData) {\n if ( times <= 0 ) return parts;\n const p0 = new Roll(parts[0], rollData);\n const s = new Roll(scaling, rollData).alter(times);\n\n // Attempt to simplify by combining like dice terms\n let simplified = false;\n if ( (s.terms[0] instanceof Die) && (s.terms.length === 1) ) {\n const d0 = p0.terms[0];\n const s0 = s.terms[0];\n if ( (d0 instanceof Die) && (d0.faces === s0.faces) && d0.modifiers.equals(s0.modifiers) ) {\n d0.number += s0.number;\n parts[0] = p0.formula;\n simplified = true;\n }\n }\n\n // Otherwise, add to the first part\n if ( !simplified ) parts[0] = `${parts[0]} + ${s.formula}`;\n return parts;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare data needed to roll an attack using an item (weapon, feat, spell, or equipment)\n * and then pass it off to `d20Roll`.\n * @param {object} [options]\n * @param {boolean} [options.spellLevel] Level at which a spell is cast.\n * @returns {Promise} A Promise which resolves to the created Roll instance.\n */\n async rollFormula({spellLevel}={}) {\n if ( !this.system.formula ) throw new Error(\"This Item does not have a formula to roll!\");\n\n const rollConfig = {\n formula: this.system.formula,\n data: this.getRollData(),\n chatMessage: true\n };\n if ( spellLevel ) rollConfig.data.item.level = spellLevel;\n\n /**\n * A hook event that fires before a formula is rolled for an Item.\n * @function dnd5e.preRollFormula\n * @memberof hookEvents\n * @param {Item5e} item Item for which the roll is being performed.\n * @param {object} config Configuration data for the pending roll.\n * @param {string} config.formula Formula that will be rolled.\n * @param {object} config.data Data used when evaluating the roll.\n * @param {boolean} config.chatMessage Should a chat message be created for this roll?\n * @returns {boolean} Explicitly return false to prevent the roll from being performed.\n */\n if ( Hooks.call(\"dnd5e.preRollFormula\", this, rollConfig) === false ) return;\n\n const roll = await new Roll(rollConfig.formula, rollConfig.data).roll({async: true});\n\n if ( rollConfig.chatMessage ) {\n roll.toMessage({\n speaker: ChatMessage.getSpeaker({actor: this.actor}),\n flavor: `${this.name} - ${game.i18n.localize(\"DND5E.OtherFormula\")}`,\n rollMode: game.settings.get(\"core\", \"rollMode\"),\n messageData: {\"flags.dnd5e.roll\": {type: \"other\", itemId: this.id, itemUuid: this.uuid}}\n });\n }\n\n /**\n * A hook event that fires after a formula has been rolled for an Item.\n * @function dnd5e.rollFormula\n * @memberof hookEvents\n * @param {Item5e} item Item for which the roll was performed.\n * @param {Roll} roll The resulting roll.\n */\n Hooks.callAll(\"dnd5e.rollFormula\", this, roll);\n\n return roll;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Perform an ability recharge test for an item which uses the d6 recharge mechanic.\n * @returns {Promise} A Promise which resolves to the created Roll instance\n */\n async rollRecharge() {\n const recharge = this.system.recharge ?? {};\n if ( !recharge.value ) return;\n\n const rollConfig = {\n formula: \"1d6\",\n data: this.getRollData(),\n target: parseInt(recharge.value),\n chatMessage: true\n };\n\n /**\n * A hook event that fires before the Item is rolled to recharge.\n * @function dnd5e.preRollRecharge\n * @memberof hookEvents\n * @param {Item5e} item Item for which the roll is being performed.\n * @param {object} config Configuration data for the pending roll.\n * @param {string} config.formula Formula that will be used to roll the recharge.\n * @param {object} config.data Data used when evaluating the roll.\n * @param {number} config.target Total required to be considered recharged.\n * @param {boolean} config.chatMessage Should a chat message be created for this roll?\n * @returns {boolean} Explicitly return false to prevent the roll from being performed.\n */\n if ( Hooks.call(\"dnd5e.preRollRecharge\", this, rollConfig) === false ) return;\n\n const roll = await new Roll(rollConfig.formula, rollConfig.data).roll({async: true});\n const success = roll.total >= rollConfig.target;\n\n if ( rollConfig.chatMessage ) {\n const resultMessage = game.i18n.localize(`DND5E.ItemRecharge${success ? \"Success\" : \"Failure\"}`);\n roll.toMessage({\n flavor: `${game.i18n.format(\"DND5E.ItemRechargeCheck\", {name: this.name})} - ${resultMessage}`,\n speaker: ChatMessage.getSpeaker({actor: this.actor, token: this.actor.token})\n });\n }\n\n /**\n * A hook event that fires after the Item has rolled to recharge, but before any changes have been performed.\n * @function dnd5e.rollRecharge\n * @memberof hookEvents\n * @param {Item5e} item Item for which the roll was performed.\n * @param {Roll} roll The resulting roll.\n * @returns {boolean} Explicitly return false to prevent the item from being recharged.\n */\n if ( Hooks.call(\"dnd5e.rollRecharge\", this, roll) === false ) return roll;\n\n // Update the Item data\n if ( success ) this.update({\"system.recharge.charged\": true});\n\n return roll;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare data needed to roll a tool check and then pass it off to `d20Roll`.\n * @param {D20RollConfiguration} [options] Roll configuration options provided to the d20Roll function.\n * @returns {Promise} A Promise which resolves to the created Roll instance.\n */\n async rollToolCheck(options={}) {\n if ( this.type !== \"tool\" ) throw new Error(\"Wrong item type!\");\n return this.actor?.rollToolCheck(this.system.baseItem, {\n ability: this.system.ability,\n bonus: this.system.bonus,\n ...options\n });\n }\n\n /* -------------------------------------------- */\n\n /**\n * @inheritdoc\n * @param {object} [options]\n * @param {boolean} [options.deterministic] Whether to force deterministic values for data properties that could be\n * either a die term or a flat term.\n */\n getRollData({ deterministic=false }={}) {\n if ( !this.actor ) return null;\n const actorRollData = this.actor.getRollData({ deterministic });\n const rollData = {\n ...actorRollData,\n item: this.toObject().system\n };\n\n // Include an ability score modifier if one exists\n const abl = this.abilityMod;\n if ( abl && (\"abilities\" in rollData) ) {\n const ability = rollData.abilities[abl];\n if ( !ability ) {\n console.warn(`Item ${this.name} in Actor ${this.actor.name} has an invalid item ability modifier of ${abl} defined`);\n }\n rollData.mod = ability?.mod ?? 0;\n }\n return rollData;\n }\n\n /* -------------------------------------------- */\n /* Chat Message Helpers */\n /* -------------------------------------------- */\n\n /**\n * Apply listeners to chat messages.\n * @param {HTML} html Rendered chat message.\n */\n static chatListeners(html) {\n html.on(\"click\", \".card-buttons button\", this._onChatCardAction.bind(this));\n html.on(\"click\", \".item-name\", this._onChatCardToggleContent.bind(this));\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle execution of a chat card action via a click event on one of the card buttons\n * @param {Event} event The originating click event\n * @returns {Promise} A promise which resolves once the handler workflow is complete\n * @private\n */\n static async _onChatCardAction(event) {\n event.preventDefault();\n\n // Extract card data\n const button = event.currentTarget;\n button.disabled = true;\n const card = button.closest(\".chat-card\");\n const messageId = card.closest(\".message\").dataset.messageId;\n const message = game.messages.get(messageId);\n const action = button.dataset.action;\n\n // Recover the actor for the chat card\n const actor = await this._getChatCardActor(card);\n if ( !actor ) return;\n\n // Validate permission to proceed with the roll\n const isTargetted = action === \"save\";\n if ( !( isTargetted || game.user.isGM || actor.isOwner ) ) return;\n\n // Get the Item from stored flag data or by the item ID on the Actor\n const storedData = message.getFlag(\"dnd5e\", \"itemData\");\n const item = storedData ? new this(storedData, {parent: actor}) : actor.items.get(card.dataset.itemId);\n if ( !item ) {\n const err = game.i18n.format(\"DND5E.ActionWarningNoItem\", {item: card.dataset.itemId, name: actor.name});\n return ui.notifications.error(err);\n }\n const spellLevel = parseInt(card.dataset.spellLevel) || null;\n\n // Handle different actions\n let targets;\n switch ( action ) {\n case \"attack\":\n await item.rollAttack({\n event: event,\n spellLevel: spellLevel\n });\n break;\n case \"damage\":\n case \"versatile\":\n await item.rollDamage({\n event: event,\n spellLevel: spellLevel,\n versatile: action === \"versatile\"\n });\n break;\n case \"formula\":\n await item.rollFormula({event, spellLevel}); break;\n case \"save\":\n targets = this._getChatCardTargets(card);\n for ( let token of targets ) {\n const speaker = ChatMessage.getSpeaker({scene: canvas.scene, token: token.document});\n await token.actor.rollAbilitySave(button.dataset.ability, { event, speaker });\n }\n break;\n case \"toolCheck\":\n await item.rollToolCheck({event}); break;\n case \"placeTemplate\":\n try {\n await dnd5e.canvas.AbilityTemplate.fromItem(item)?.drawPreview();\n } catch(err) {}\n break;\n case \"abilityCheck\":\n targets = this._getChatCardTargets(card);\n for ( let token of targets ) {\n const speaker = ChatMessage.getSpeaker({scene: canvas.scene, token: token.document});\n await token.actor.rollAbilityTest(button.dataset.ability, { event, speaker });\n }\n break;\n }\n\n // Re-enable the button\n button.disabled = false;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle toggling the visibility of chat card content when the name is clicked\n * @param {Event} event The originating click event\n * @private\n */\n static _onChatCardToggleContent(event) {\n event.preventDefault();\n const header = event.currentTarget;\n const card = header.closest(\".chat-card\");\n const content = card.querySelector(\".card-content\");\n content.style.display = content.style.display === \"none\" ? \"block\" : \"none\";\n }\n\n /* -------------------------------------------- */\n\n /**\n * Get the Actor which is the author of a chat card\n * @param {HTMLElement} card The chat card being used\n * @returns {Actor|null} The Actor document or null\n * @private\n */\n static async _getChatCardActor(card) {\n\n // Case 1 - a synthetic actor from a Token\n if ( card.dataset.tokenId ) {\n const token = await fromUuid(card.dataset.tokenId);\n if ( !token ) return null;\n return token.actor;\n }\n\n // Case 2 - use Actor ID directory\n const actorId = card.dataset.actorId;\n return game.actors.get(actorId) || null;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Get the Actor which is the author of a chat card\n * @param {HTMLElement} card The chat card being used\n * @returns {Actor[]} An Array of Actor documents, if any\n * @private\n */\n static _getChatCardTargets(card) {\n let targets = canvas.tokens.controlled.filter(t => !!t.actor);\n if ( !targets.length && game.user.character ) targets = targets.concat(game.user.character.getActiveTokens());\n if ( !targets.length ) ui.notifications.warn(game.i18n.localize(\"DND5E.ActionWarningNoToken\"));\n return targets;\n }\n\n /* -------------------------------------------- */\n /* Advancements */\n /* -------------------------------------------- */\n\n /**\n * Create a new advancement of the specified type.\n * @param {string} type Type of advancement to create.\n * @param {object} [data] Data to use when creating the advancement.\n * @param {object} [options]\n * @param {boolean} [options.showConfig=true] Should the new advancement's configuration application be shown?\n * @param {boolean} [options.source=false] Should a source-only update be performed?\n * @returns {Promise|Item5e} Promise for advancement config for new advancement if local\n * is `false`, or item with newly added advancement.\n */\n createAdvancement(type, data={}, { showConfig=true, source=false }={}) {\n if ( !this.system.advancement ) return this;\n\n const Advancement = CONFIG.DND5E.advancementTypes[type];\n if ( !Advancement ) throw new Error(`${type} not found in CONFIG.DND5E.advancementTypes`);\n\n if ( !Advancement.metadata.validItemTypes.has(this.type) || !Advancement.availableForItem(this) ) {\n throw new Error(`${type} advancement cannot be added to ${this.name}`);\n }\n\n const advancement = new Advancement(data, {parent: this});\n const advancementCollection = this.toObject().system.advancement;\n advancementCollection.push(advancement.toObject());\n if ( source ) return this.updateSource({\"system.advancement\": advancementCollection});\n return this.update({\"system.advancement\": advancementCollection}).then(() => {\n if ( !showConfig ) return this;\n const config = new Advancement.metadata.apps.config(this.advancement.byId[advancement.id]);\n return config.render(true);\n });\n }\n\n /* -------------------------------------------- */\n\n /**\n * Update an advancement belonging to this item.\n * @param {string} id ID of the advancement to update.\n * @param {object} updates Updates to apply to this advancement.\n * @param {object} [options={}]\n * @param {boolean} [options.source=false] Should a source-only update be performed?\n * @returns {Promise|Item5e} This item with the changes applied, promised if source is `false`.\n */\n updateAdvancement(id, updates, { source=false }={}) {\n if ( !this.system.advancement ) return this;\n const idx = this.system.advancement.findIndex(a => a._id === id);\n if ( idx === -1 ) throw new Error(`Advancement of ID ${id} could not be found to update`);\n\n const advancement = this.advancement.byId[id];\n advancement.updateSource(updates);\n if ( source ) {\n advancement.render();\n return this;\n }\n\n const advancementCollection = this.toObject().system.advancement;\n advancementCollection[idx] = advancement.toObject();\n return this.update({\"system.advancement\": advancementCollection}).then(r => {\n advancement.render();\n return r;\n });\n }\n\n /* -------------------------------------------- */\n\n /**\n * Remove an advancement from this item.\n * @param {string} id ID of the advancement to remove.\n * @param {object} [options={}]\n * @param {boolean} [options.source=false] Should a source-only update be performed?\n * @returns {Promise|Item5e} This item with the changes applied.\n */\n deleteAdvancement(id, { source=false }={}) {\n if ( !this.system.advancement ) return this;\n\n const advancementCollection = this.toObject().system.advancement.filter(a => a._id !== id);\n if ( source ) return this.updateSource({\"system.advancement\": advancementCollection});\n return this.update({\"system.advancement\": advancementCollection});\n }\n\n /* -------------------------------------------- */\n\n /**\n * Duplicate an advancement, resetting its value to default and giving it a new ID.\n * @param {string} id ID of the advancement to duplicate.\n * @param {object} [options]\n * @param {boolean} [options.showConfig=true] Should the new advancement's configuration application be shown?\n * @param {boolean} [options.source=false] Should a source-only update be performed?\n * @returns {Promise|Item5e} Promise for advancement config for duplicate advancement if source\n * is `false`, or item with newly duplicated advancement.\n */\n duplicateAdvancement(id, options) {\n const original = this.advancement.byId[id];\n if ( !original ) return this;\n const duplicate = original.toObject();\n delete duplicate._id;\n if ( original.constructor.metadata.dataModels?.value ) {\n duplicate.value = (new original.constructor.metadata.dataModels.value()).toObject();\n } else {\n duplicate.value = original.constructor.metadata.defaults?.value ?? {};\n }\n return this.createAdvancement(original.constructor.typeName, duplicate, options);\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n getEmbeddedDocument(embeddedName, id, options) {\n if ( embeddedName !== \"Advancement\" ) return super.getEmbeddedDocument(embeddedName, id, options);\n const advancement = this.advancement.byId[id];\n if ( options?.strict && (advancement === undefined) ) {\n throw new Error(`The key ${id} does not exist in the ${embeddedName} Collection`);\n }\n return advancement;\n }\n\n /* -------------------------------------------- */\n /* Event Handlers */\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async _preCreate(data, options, user) {\n await super._preCreate(data, options, user);\n\n // Create class identifier based on name\n if ( [\"class\", \"subclass\"].includes(this.type) && !this.system.identifier ) {\n await this.updateSource({ \"system.identifier\": data.name.slugify({strict: true}) });\n }\n\n if ( !this.isEmbedded || (this.parent.type === \"vehicle\") ) return;\n const isNPC = this.parent.type === \"npc\";\n let updates;\n switch (data.type) {\n case \"equipment\":\n updates = this._onCreateOwnedEquipment(data, isNPC);\n break;\n case \"spell\":\n updates = this._onCreateOwnedSpell(data, isNPC);\n break;\n case \"tool\":\n updates = this._onCreateOwnedTool(data, isNPC);\n break;\n case \"weapon\":\n updates = this._onCreateOwnedWeapon(data, isNPC);\n break;\n }\n if ( updates ) return this.updateSource(updates);\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async _onCreate(data, options, userId) {\n super._onCreate(data, options, userId);\n if ( (userId !== game.user.id) || !this.parent ) return;\n\n // Assign a new original class\n if ( (this.parent.type === \"character\") && (this.type === \"class\") ) {\n const pc = this.parent.items.get(this.parent.system.details.originalClass);\n if ( !pc ) await this.parent._assignPrimaryClass();\n }\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async _preUpdate(changed, options, user) {\n await super._preUpdate(changed, options, user);\n if ( (this.type !== \"class\") || !(\"levels\" in (changed.system || {})) ) return;\n\n // Check to make sure the updated class level isn't below zero\n if ( changed.system.levels <= 0 ) {\n ui.notifications.warn(game.i18n.localize(\"DND5E.MaxClassLevelMinimumWarn\"));\n changed.system.levels = 1;\n }\n\n // Check to make sure the updated class level doesn't exceed level cap\n if ( changed.system.levels > CONFIG.DND5E.maxLevel ) {\n ui.notifications.warn(game.i18n.format(\"DND5E.MaxClassLevelExceededWarn\", {max: CONFIG.DND5E.maxLevel}));\n changed.system.levels = CONFIG.DND5E.maxLevel;\n }\n if ( !this.isEmbedded || (this.parent.type !== \"character\") ) return;\n\n // Check to ensure the updated character doesn't exceed level cap\n const newCharacterLevel = this.actor.system.details.level + (changed.system.levels - this.system.levels);\n if ( newCharacterLevel > CONFIG.DND5E.maxLevel ) {\n ui.notifications.warn(game.i18n.format(\"DND5E.MaxCharacterLevelExceededWarn\", {max: CONFIG.DND5E.maxLevel}));\n changed.system.levels -= newCharacterLevel - CONFIG.DND5E.maxLevel;\n }\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n _onDelete(options, userId) {\n super._onDelete(options, userId);\n if ( (userId !== game.user.id) || !this.parent ) return;\n\n // Assign a new original class\n if ( (this.type === \"class\") && (this.id === this.parent.system.details.originalClass) ) {\n this.parent._assignPrimaryClass();\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * Pre-creation logic for the automatic configuration of owned equipment type Items.\n *\n * @param {object} data Data for the newly created item.\n * @param {boolean} isNPC Is this actor an NPC?\n * @returns {object} Updates to apply to the item data.\n * @private\n */\n _onCreateOwnedEquipment(data, isNPC) {\n const updates = {};\n if ( foundry.utils.getProperty(data, \"system.equipped\") === undefined ) {\n updates[\"system.equipped\"] = isNPC; // NPCs automatically equip equipment\n }\n if ( foundry.utils.getProperty(data, \"system.proficient\") === undefined ) {\n if ( isNPC ) {\n updates[\"system.proficient\"] = true; // NPCs automatically have equipment proficiency\n } else {\n const armorProf = CONFIG.DND5E.armorProficienciesMap[this.system.armor?.type]; // Player characters check proficiency\n const actorArmorProfs = this.parent.system.traits?.armorProf?.value || new Set();\n updates[\"system.proficient\"] = (armorProf === true) || actorArmorProfs.has(armorProf)\n || actorArmorProfs.has(this.system.baseItem);\n }\n }\n return updates;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Pre-creation logic for the automatic configuration of owned spell type Items.\n *\n * @param {object} data Data for the newly created item.\n * @param {boolean} isNPC Is this actor an NPC?\n * @returns {object} Updates to apply to the item data.\n * @private\n */\n _onCreateOwnedSpell(data, isNPC) {\n const updates = {};\n if ( foundry.utils.getProperty(data, \"system.preparation.prepared\") === undefined ) {\n updates[\"system.preparation.prepared\"] = isNPC; // NPCs automatically prepare spells\n }\n return updates;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Pre-creation logic for the automatic configuration of owned tool type Items.\n * @param {object} data Data for the newly created item.\n * @param {boolean} isNPC Is this actor an NPC?\n * @returns {object} Updates to apply to the item data.\n * @private\n */\n _onCreateOwnedTool(data, isNPC) {\n const updates = {};\n if ( data.system?.proficient === undefined ) {\n if ( isNPC ) updates[\"system.proficient\"] = 1;\n else {\n const actorToolProfs = this.parent.system.tools || {};\n const toolProf = actorToolProfs[this.system.baseItem]?.value;\n const generalProf = actorToolProfs[this.system.toolType]?.value;\n updates[\"system.proficient\"] = toolProf ?? generalProf ?? 0;\n }\n }\n return updates;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Pre-creation logic for the automatic configuration of owned weapon type Items.\n * @param {object} data Data for the newly created item.\n * @param {boolean} isNPC Is this actor an NPC?\n * @returns {object} Updates to apply to the item data.\n * @private\n */\n _onCreateOwnedWeapon(data, isNPC) {\n\n // NPCs automatically equip items and are proficient with them\n if ( isNPC ) {\n const updates = {};\n if ( !foundry.utils.hasProperty(data, \"system.equipped\") ) updates[\"system.equipped\"] = true;\n if ( !foundry.utils.hasProperty(data, \"system.proficient\") ) updates[\"system.proficient\"] = true;\n return updates;\n }\n if ( data.system?.proficient !== undefined ) return {};\n\n // Some weapon types are always proficient\n const weaponProf = CONFIG.DND5E.weaponProficienciesMap[this.system.weaponType];\n const updates = {};\n if ( weaponProf === true ) updates[\"system.proficient\"] = true;\n\n // Characters may have proficiency in this weapon type (or specific base weapon)\n else {\n const actorProfs = this.parent.system.traits?.weaponProf?.value || new Set();\n updates[\"system.proficient\"] = actorProfs.has(weaponProf) || actorProfs.has(this.system.baseItem);\n }\n return updates;\n }\n\n /* -------------------------------------------- */\n /* Factory Methods */\n /* -------------------------------------------- */\n\n /**\n * Create a consumable spell scroll Item from a spell Item.\n * @param {Item5e} spell The spell to be made into a scroll\n * @returns {Item5e} The created scroll consumable item\n */\n static async createScrollFromSpell(spell) {\n\n // Get spell data\n const itemData = (spell instanceof Item5e) ? spell.toObject() : spell;\n let {\n actionType, description, source, activation, duration, target, range, damage, formula, save, level, attackBonus\n } = itemData.system;\n\n // Get scroll data\n const scrollUuid = `Compendium.${CONFIG.DND5E.sourcePacks.ITEMS}.${CONFIG.DND5E.spellScrollIds[level]}`;\n const scrollItem = await fromUuid(scrollUuid);\n const scrollData = scrollItem.toObject();\n delete scrollData._id;\n\n // Split the scroll description into an intro paragraph and the remaining details\n const scrollDescription = scrollData.system.description.value;\n const pdel = \"

\";\n const scrollIntroEnd = scrollDescription.indexOf(pdel);\n const scrollIntro = scrollDescription.slice(0, scrollIntroEnd + pdel.length);\n const scrollDetails = scrollDescription.slice(scrollIntroEnd + pdel.length);\n\n // Create a composite description from the scroll description and the spell details\n const desc = `${scrollIntro}

${itemData.name} (Level ${level})


${description.value}

Scroll Details


${scrollDetails}`;\n\n // Used a fixed attack modifier and saving throw according to the level of spell scroll.\n if ( [\"mwak\", \"rwak\", \"msak\", \"rsak\"].includes(actionType) ) {\n attackBonus = `${scrollData.system.attackBonus} - @mod`;\n }\n if ( save.ability ) {\n save.scaling = \"flat\";\n save.dc = scrollData.system.save.dc;\n }\n\n // Create the spell scroll data\n const spellScrollData = foundry.utils.mergeObject(scrollData, {\n name: `${game.i18n.localize(\"DND5E.SpellScroll\")}: ${itemData.name}`,\n img: itemData.img,\n system: {\n description: {value: desc.trim()}, source, actionType, activation, duration, target, range, damage, formula,\n save, level, attackBonus\n }\n });\n return new this(spellScrollData);\n }\n\n /* -------------------------------------------- */\n /* Deprecations */\n /* -------------------------------------------- */\n\n /**\n * Retrieve an item's critical hit threshold. Uses the smallest value from among the following sources:\n * - item document\n * - item document's actor (if it has one)\n * - item document's ammunition (if it has any)\n * - the constant '20'\n * @returns {number|null} The minimum value that must be rolled to be considered a critical hit.\n * @deprecated since dnd5e 2.2, targeted for removal in 2.4\n */\n getCriticalThreshold() {\n foundry.utils.logCompatibilityWarning(\n \"Item5e#getCriticalThreshold has been replaced with the Item5e#criticalThreshold getter.\",\n { since: \"DnD5e 2.2\", until: \"DnD5e 2.4\" }\n );\n return this.criticalThreshold;\n }\n}\n","/**\n * An abstract class containing common functionality between actor sheet configuration apps.\n * @extends {DocumentSheet}\n * @abstract\n */\nexport default class BaseConfigSheet extends DocumentSheet {\n /** @inheritdoc */\n activateListeners(html) {\n super.activateListeners(html);\n if ( this.isEditable ) {\n for ( const override of this._getActorOverrides() ) {\n html.find(`input[name=\"${override}\"],select[name=\"${override}\"]`).each((i, el) => {\n el.disabled = true;\n el.dataset.tooltip = \"DND5E.ActiveEffectOverrideWarning\";\n });\n }\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * Retrieve the list of fields that are currently modified by Active Effects on the Actor.\n * @returns {string[]}\n * @protected\n */\n _getActorOverrides() {\n return Object.keys(foundry.utils.flattenObject(this.object.overrides || {}));\n }\n}\n","import BaseConfigSheet from \"./base-config.mjs\";\n\n/**\n * A simple form to set save throw configuration for a given ability score.\n *\n * @param {Actor5e} actor The Actor instance being displayed within the sheet.\n * @param {ApplicationOptions} options Additional application configuration options.\n * @param {string} abilityId The ability key as defined in CONFIG.DND5E.abilities.\n */\nexport default class ActorAbilityConfig extends BaseConfigSheet {\n constructor(actor, options, abilityId) {\n super(actor, options);\n this._abilityId = abilityId;\n }\n\n /* -------------------------------------------- */\n\n /** @override */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n classes: [\"dnd5e\"],\n template: \"systems/dnd5e/templates/apps/ability-config.hbs\",\n width: 500,\n height: \"auto\"\n });\n }\n\n /* -------------------------------------------- */\n\n /** @override */\n get title() {\n return `${game.i18n.format(\"DND5E.AbilityConfigureTitle\", {\n ability: CONFIG.DND5E.abilities[this._abilityId].label})}: ${this.document.name}`;\n }\n\n /* -------------------------------------------- */\n\n /** @override */\n getData(options) {\n const src = this.document.toObject();\n const ability = CONFIG.DND5E.abilities[this._abilityId].label;\n return {\n ability: src.system.abilities[this._abilityId] ?? this.document.system.abilities[this._abilityId] ?? {},\n labelSaves: game.i18n.format(\"DND5E.AbilitySaveConfigure\", {ability}),\n labelChecks: game.i18n.format(\"DND5E.AbilityCheckConfigure\", {ability}),\n abilityId: this._abilityId,\n proficiencyLevels: {\n 0: CONFIG.DND5E.proficiencyLevels[0],\n 1: CONFIG.DND5E.proficiencyLevels[1]\n },\n bonusGlobalSave: src.system.bonuses?.abilities?.save,\n bonusGlobalCheck: src.system.bonuses?.abilities?.check\n };\n }\n}\n","import BaseConfigSheet from \"./base-config.mjs\";\n\n/**\n * Interface for managing a character's armor calculation.\n */\nexport default class ActorArmorConfig extends BaseConfigSheet {\n constructor(...args) {\n super(...args);\n\n /**\n * Cloned copy of the actor for previewing changes.\n * @type {Actor5e}\n */\n this.clone = this.document.clone();\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n classes: [\"dnd5e\", \"actor-armor-config\"],\n template: \"systems/dnd5e/templates/apps/actor-armor.hbs\",\n width: 320,\n height: \"auto\",\n sheetConfig: false\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n get title() {\n return `${game.i18n.localize(\"DND5E.ArmorConfig\")}: ${this.document.name}`;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async getData() {\n const ac = this.clone.system.attributes.ac;\n const isFlat = [\"flat\", \"natural\"].includes(ac.calc);\n\n // Get configuration data for the calculation mode, reset to flat if configuration is unavailable\n let cfg = CONFIG.DND5E.armorClasses[ac.calc];\n if ( !cfg ) {\n ac.calc = \"flat\";\n cfg = CONFIG.DND5E.armorClasses.flat;\n this.clone.updateSource({ \"system.attributes.ac.calc\": \"flat\" });\n }\n\n return {\n ac, isFlat,\n calculations: CONFIG.DND5E.armorClasses,\n valueDisabled: !isFlat,\n formula: ac.calc === \"custom\" ? ac.formula : cfg.formula,\n formulaDisabled: ac.calc !== \"custom\"\n };\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n _getActorOverrides() {\n return Object.keys(foundry.utils.flattenObject(this.object.overrides?.system?.attributes || {}));\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async _updateObject(event, formData) {\n const ac = foundry.utils.expandObject(formData).ac;\n return this.document.update({\"system.attributes.ac\": ac});\n }\n\n /* -------------------------------------------- */\n /* Event Listeners and Handlers */\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async _onChangeInput(event) {\n await super._onChangeInput(event);\n\n // Update clone with new data & re-render\n this.clone.updateSource({ [`system.attributes.${event.currentTarget.name}`]: event.currentTarget.value });\n this.render();\n }\n}\n","import BaseConfigSheet from \"./base-config.mjs\";\n\n/**\n * A simple form to set actor hit dice amounts.\n */\nexport default class ActorHitDiceConfig extends BaseConfigSheet {\n\n /** @inheritDoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n classes: [\"dnd5e\", \"hd-config\", \"dialog\"],\n template: \"systems/dnd5e/templates/apps/hit-dice-config.hbs\",\n width: 360,\n height: \"auto\"\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n get title() {\n return `${game.i18n.localize(\"DND5E.HitDiceConfig\")}: ${this.object.name}`;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n getData(options) {\n return {\n classes: this.object.items.reduce((classes, item) => {\n if (item.type === \"class\") {\n classes.push({\n classItemId: item.id,\n name: item.name,\n diceDenom: item.system.hitDice,\n currentHitDice: item.system.levels - item.system.hitDiceUsed,\n maxHitDice: item.system.levels,\n canRoll: (item.system.levels - item.system.hitDiceUsed) > 0\n });\n }\n return classes;\n }, []).sort((a, b) => parseInt(b.diceDenom.slice(1)) - parseInt(a.diceDenom.slice(1)))\n };\n }\n\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n activateListeners(html) {\n super.activateListeners(html);\n\n // Hook up -/+ buttons to adjust the current value in the form\n html.find(\"button.increment,button.decrement\").click(event => {\n const button = event.currentTarget;\n const current = button.parentElement.querySelector(\".current\");\n const max = button.parentElement.querySelector(\".max\");\n const direction = button.classList.contains(\"increment\") ? 1 : -1;\n current.value = Math.clamped(parseInt(current.value) + direction, 0, parseInt(max.value));\n });\n\n html.find(\"button.roll-hd\").click(this._onRollHitDie.bind(this));\n }\n\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n async _updateObject(event, formData) {\n const actorItems = this.object.items;\n const classUpdates = Object.entries(formData).map(([id, hd]) => ({\n _id: id,\n \"system.hitDiceUsed\": actorItems.get(id).system.levels - hd\n }));\n return this.object.updateEmbeddedDocuments(\"Item\", classUpdates);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Rolls the hit die corresponding with the class row containing the event's target button.\n * @param {MouseEvent} event Triggering click event.\n * @protected\n */\n async _onRollHitDie(event) {\n event.preventDefault();\n const button = event.currentTarget;\n await this.object.rollHitDie(button.dataset.hdDenom);\n\n // Re-render dialog to reflect changed hit dice quantities\n this.render();\n }\n}\n","import BaseConfigSheet from \"./base-config.mjs\";\n\n/**\n * A form for configuring actor hit points and bonuses.\n */\nexport default class ActorHitPointsConfig extends BaseConfigSheet {\n constructor(...args) {\n super(...args);\n\n /**\n * Cloned copy of the actor for previewing changes.\n * @type {Actor5e}\n */\n this.clone = this.object.clone();\n }\n\n /* -------------------------------------------- */\n\n /** @override */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n classes: [\"dnd5e\", \"actor-hit-points-config\"],\n template: \"systems/dnd5e/templates/apps/hit-points-config.hbs\",\n width: 320,\n height: \"auto\",\n sheetConfig: false\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n get title() {\n return `${game.i18n.localize(\"DND5E.HitPointsConfig\")}: ${this.document.name}`;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n getData(options) {\n return {\n hp: this.clone.system.attributes.hp,\n source: this.clone.toObject().system.attributes.hp,\n isCharacter: this.document.type === \"character\"\n };\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n _getActorOverrides() {\n return Object.keys(foundry.utils.flattenObject(this.object.overrides?.system?.attributes || {}));\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async _updateObject(event, formData) {\n const hp = foundry.utils.expandObject(formData).hp;\n this.clone.updateSource({\"system.attributes.hp\": hp});\n const maxDelta = this.clone.system.attributes.hp.max - this.document.system.attributes.hp.max;\n hp.value = Math.max(this.document.system.attributes.hp.value + maxDelta, 0);\n return this.document.update({\"system.attributes.hp\": hp});\n }\n\n /* -------------------------------------------- */\n /* Event Listeners and Handlers */\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n activateListeners(html) {\n super.activateListeners(html);\n html.find(\".roll-hit-points\").click(this._onRollHPFormula.bind(this));\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async _onChangeInput(event) {\n await super._onChangeInput(event);\n const t = event.currentTarget;\n\n // Update clone with new data & re-render\n this.clone.updateSource({ [`system.attributes.${t.name}`]: t.value || null });\n if ( t.name !== \"hp.formula\" ) this.render();\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle rolling NPC health values using the provided formula.\n * @param {Event} event The original click event.\n * @protected\n */\n async _onRollHPFormula(event) {\n event.preventDefault();\n try {\n const roll = await this.clone.rollNPCHitPoints();\n this.clone.updateSource({\"system.attributes.hp.max\": roll.total});\n this.render();\n } catch(error) {\n ui.notifications.error(game.i18n.localize(\"DND5E.HPFormulaError\"));\n throw error;\n }\n }\n}\n","import BaseConfigSheet from \"./base-config.mjs\";\n\n/**\n * A simple sub-application of the ActorSheet which is used to configure properties related to initiative.\n */\nexport default class ActorInitiativeConfig extends BaseConfigSheet {\n\n /** @override */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n classes: [\"dnd5e\"],\n template: \"systems/dnd5e/templates/apps/initiative-config.hbs\",\n width: 360,\n height: \"auto\"\n });\n }\n\n /* -------------------------------------------- */\n\n /** @override */\n get title() {\n return `${game.i18n.localize(\"DND5E.InitiativeConfig\")}: ${this.document.name}`;\n }\n\n /* -------------------------------------------- */\n\n /** @override */\n getData(options={}) {\n const source = this.document.toObject();\n const init = source.system.attributes.init || {};\n const flags = source.flags.dnd5e || {};\n return {\n ability: init.ability,\n abilities: CONFIG.DND5E.abilities,\n bonus: init.bonus,\n initiativeAlert: flags.initiativeAlert,\n initiativeAdv: flags.initiativeAdv\n };\n }\n\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n _getSubmitData(updateData={}) {\n const formData = super._getSubmitData(updateData);\n formData.flags = {dnd5e: {}};\n for ( const flag of [\"initiativeAlert\", \"initiativeAdv\"] ) {\n const k = `flags.dnd5e.${flag}`;\n if ( formData[k] ) formData.flags.dnd5e[flag] = true;\n else formData.flags.dnd5e[`-=${flag}`] = null;\n delete formData[k];\n }\n return formData;\n }\n}\n","import BaseConfigSheet from \"./base-config.mjs\";\n\n/**\n * A simple form to set actor movement speeds.\n */\nexport default class ActorMovementConfig extends BaseConfigSheet {\n\n /** @override */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n classes: [\"dnd5e\"],\n template: \"systems/dnd5e/templates/apps/movement-config.hbs\",\n width: 300,\n height: \"auto\"\n });\n }\n\n /* -------------------------------------------- */\n\n /** @override */\n get title() {\n return `${game.i18n.localize(\"DND5E.MovementConfig\")}: ${this.document.name}`;\n }\n\n /* -------------------------------------------- */\n\n /** @override */\n getData(options={}) {\n const source = this.document.toObject();\n\n // Current movement values\n const movement = source.system.attributes?.movement || {};\n for ( let [k, v] of Object.entries(movement) ) {\n if ( [\"units\", \"hover\"].includes(k) ) continue;\n movement[k] = Number.isNumeric(v) ? v.toNearest(0.1) : 0;\n }\n\n // Allowed speeds\n const speeds = source.type === \"group\" ? {\n land: \"DND5E.MovementLand\",\n water: \"DND5E.MovementWater\",\n air: \"DND5E.MovementAir\"\n } : {\n walk: \"DND5E.MovementWalk\",\n burrow: \"DND5E.MovementBurrow\",\n climb: \"DND5E.MovementClimb\",\n fly: \"DND5E.MovementFly\",\n swim: \"DND5E.MovementSwim\"\n };\n\n // Return rendering context\n return {\n speeds,\n movement,\n selectUnits: source.type !== \"group\",\n canHover: source.type !== \"group\",\n units: CONFIG.DND5E.movementUnits\n };\n }\n}\n","import BaseConfigSheet from \"./base-config.mjs\";\n\n/**\n * A simple form to configure Actor senses.\n */\nexport default class ActorSensesConfig extends BaseConfigSheet {\n\n /** @inheritdoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n classes: [\"dnd5e\"],\n template: \"systems/dnd5e/templates/apps/senses-config.hbs\",\n width: 300,\n height: \"auto\"\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n get title() {\n return `${game.i18n.localize(\"DND5E.SensesConfig\")}: ${this.document.name}`;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n getData(options) {\n const source = this.document.toObject().system.attributes?.senses || {};\n const data = {\n senses: {},\n special: source.special ?? \"\",\n units: source.units, movementUnits: CONFIG.DND5E.movementUnits\n };\n for ( let [name, label] of Object.entries(CONFIG.DND5E.senses) ) {\n const v = Number(source[name]);\n data.senses[name] = {\n label: game.i18n.localize(label),\n value: Number.isNumeric(v) ? v.toNearest(0.1) : 0\n };\n }\n return data;\n }\n}\n","import BaseConfigSheet from \"./base-config.mjs\";\n\n/**\n * An application class which provides advanced configuration for special character flags which modify an Actor.\n */\nexport default class ActorSheetFlags extends BaseConfigSheet {\n\n /** @inheritDoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n id: \"actor-flags\",\n classes: [\"dnd5e\"],\n template: \"systems/dnd5e/templates/apps/actor-flags.hbs\",\n width: 500,\n closeOnSubmit: true\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n get title() {\n return `${game.i18n.localize(\"DND5E.FlagsTitle\")}: ${this.object.name}`;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n getData() {\n const data = {};\n data.actor = this.object;\n data.classes = this._getClasses();\n data.flags = this._getFlags();\n data.bonuses = this._getBonuses();\n return data;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare an object of sorted classes.\n * @returns {object}\n * @private\n */\n _getClasses() {\n const classes = this.object.items.filter(i => i.type === \"class\");\n return classes.sort((a, b) => a.name.localeCompare(b.name)).reduce((obj, i) => {\n obj[i.id] = i.name;\n return obj;\n }, {});\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare an object of flags data which groups flags by section\n * Add some additional data for rendering\n * @returns {object}\n * @private\n */\n _getFlags() {\n const flags = {};\n const baseData = this.document.toJSON();\n for ( let [k, v] of Object.entries(CONFIG.DND5E.characterFlags) ) {\n if ( !flags.hasOwnProperty(v.section) ) flags[v.section] = {};\n let flag = foundry.utils.deepClone(v);\n flag.type = v.type.name;\n flag.isCheckbox = v.type === Boolean;\n flag.isSelect = v.hasOwnProperty(\"choices\");\n flag.value = foundry.utils.getProperty(baseData.flags, `dnd5e.${k}`);\n flags[v.section][`flags.dnd5e.${k}`] = flag;\n }\n return flags;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Get the bonuses fields and their localization strings\n * @returns {Array}\n * @private\n */\n _getBonuses() {\n const src = this.object.toObject();\n const bonuses = [\n {name: \"system.bonuses.mwak.attack\", label: \"DND5E.BonusMWAttack\"},\n {name: \"system.bonuses.mwak.damage\", label: \"DND5E.BonusMWDamage\"},\n {name: \"system.bonuses.rwak.attack\", label: \"DND5E.BonusRWAttack\"},\n {name: \"system.bonuses.rwak.damage\", label: \"DND5E.BonusRWDamage\"},\n {name: \"system.bonuses.msak.attack\", label: \"DND5E.BonusMSAttack\"},\n {name: \"system.bonuses.msak.damage\", label: \"DND5E.BonusMSDamage\"},\n {name: \"system.bonuses.rsak.attack\", label: \"DND5E.BonusRSAttack\"},\n {name: \"system.bonuses.rsak.damage\", label: \"DND5E.BonusRSDamage\"},\n {name: \"system.bonuses.abilities.check\", label: \"DND5E.BonusAbilityCheck\"},\n {name: \"system.bonuses.abilities.save\", label: \"DND5E.BonusAbilitySave\"},\n {name: \"system.bonuses.abilities.skill\", label: \"DND5E.BonusAbilitySkill\"},\n {name: \"system.bonuses.spell.dc\", label: \"DND5E.BonusSpellDC\"}\n ];\n for ( let b of bonuses ) {\n b.value = foundry.utils.getProperty(src, b.name) || \"\";\n }\n return bonuses;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n async _updateObject(event, formData) {\n const actor = this.object;\n let updateData = foundry.utils.expandObject(formData);\n const src = actor.toObject();\n\n // Unset any flags which are \"false\"\n const flags = updateData.flags.dnd5e;\n for ( let [k, v] of Object.entries(flags) ) {\n if ( [undefined, null, \"\", false, 0].includes(v) ) {\n delete flags[k];\n if ( foundry.utils.hasProperty(src.flags, `dnd5e.${k}`) ) flags[`-=${k}`] = null;\n }\n }\n\n // Clear any bonuses which are whitespace only\n for ( let b of Object.values(updateData.system.bonuses ) ) {\n for ( let [k, v] of Object.entries(b) ) {\n b[k] = v.trim();\n }\n }\n\n // Diff the data against any applied overrides and apply\n await actor.update(updateData, {diff: false});\n }\n}\n","import Actor5e from \"../../documents/actor/actor.mjs\";\n\n/**\n * A specialized form used to select from a checklist of attributes, traits, or properties\n */\nexport default class ActorTypeConfig extends FormApplication {\n\n /** @inheritDoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n classes: [\"dnd5e\", \"actor-type\", \"trait-selector\"],\n template: \"systems/dnd5e/templates/apps/actor-type.hbs\",\n width: 280,\n height: \"auto\",\n choices: {},\n allowCustom: true,\n minimum: 0,\n maximum: null\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n get title() {\n return `${game.i18n.localize(\"DND5E.CreatureTypeTitle\")}: ${this.object.name}`;\n }\n\n /* -------------------------------------------- */\n\n /** @override */\n get id() {\n return `actor-type-${this.object.id}`;\n }\n\n /* -------------------------------------------- */\n\n /** @override */\n getData(options={}) {\n\n // Get current value or new default\n let attr = foundry.utils.getProperty(this.object.system, \"details.type\");\n if ( foundry.utils.getType(attr) !== \"Object\" ) attr = {\n value: (attr in CONFIG.DND5E.creatureTypes) ? attr : \"humanoid\",\n subtype: \"\",\n swarm: \"\",\n custom: \"\"\n };\n\n // Populate choices\n const types = {};\n for ( let [k, v] of Object.entries(CONFIG.DND5E.creatureTypes) ) {\n types[k] = {\n label: game.i18n.localize(v),\n chosen: attr.value === k\n };\n }\n\n // Return data for rendering\n return {\n types: types,\n custom: {\n value: attr.custom,\n label: game.i18n.localize(\"DND5E.CreatureTypeSelectorCustom\"),\n chosen: attr.value === \"custom\"\n },\n subtype: attr.subtype,\n swarm: attr.swarm,\n sizes: Array.from(Object.entries(CONFIG.DND5E.actorSizes)).reverse().reduce((obj, e) => {\n obj[e[0]] = e[1];\n return obj;\n }, {}),\n preview: Actor5e.formatCreatureType(attr) || \"–\"\n };\n }\n\n /* -------------------------------------------- */\n\n /** @override */\n async _updateObject(event, formData) {\n const typeObject = foundry.utils.expandObject(formData);\n return this.object.update({\"system.details.type\": typeObject});\n }\n\n /* -------------------------------------------- */\n /* Event Listeners and Handlers */\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n activateListeners(html) {\n super.activateListeners(html);\n html.find(\"input[name='custom']\").focusin(this._onCustomFieldFocused.bind(this));\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n _onChangeInput(event) {\n super._onChangeInput(event);\n const typeObject = foundry.utils.expandObject(this._getSubmitData());\n this.form.preview.value = Actor5e.formatCreatureType(typeObject) || \"—\";\n }\n\n /* -------------------------------------------- */\n\n /**\n * Select the custom radio button when the custom text field is focused.\n * @param {FocusEvent} event The original focusin event\n * @private\n */\n _onCustomFieldFocused(event) {\n this.form.querySelector(\"input[name='value'][value='custom']\").checked = true;\n this._onChangeInput(event);\n }\n}\n","/**\n * Dialog to confirm the deletion of an embedded item with advancement or decreasing a class level.\n */\nexport default class AdvancementConfirmationDialog extends Dialog {\n\n /** @inheritdoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n template: \"systems/dnd5e/templates/advancement/advancement-confirmation-dialog.hbs\",\n jQuery: false\n });\n }\n\n /* -------------------------------------------- */\n\n /**\n * A helper function that displays the dialog prompting for an item deletion.\n * @param {Item5e} item Item to be deleted.\n * @returns {Promise} Resolves with whether advancements should be unapplied. Rejects with null.\n */\n static forDelete(item) {\n return this.createDialog(\n item,\n game.i18n.localize(\"DND5E.AdvancementDeleteConfirmationTitle\"),\n game.i18n.localize(\"DND5E.AdvancementDeleteConfirmationMessage\"),\n {\n icon: '',\n label: game.i18n.localize(\"Delete\")\n }\n );\n }\n\n /* -------------------------------------------- */\n\n /**\n * A helper function that displays the dialog prompting for leveling down.\n * @param {Item5e} item The class whose level is being changed.\n * @returns {Promise} Resolves with whether advancements should be unapplied. Rejects with null.\n */\n static forLevelDown(item) {\n return this.createDialog(\n item,\n game.i18n.localize(\"DND5E.AdvancementLevelDownConfirmationTitle\"),\n game.i18n.localize(\"DND5E.AdvancementLevelDownConfirmationMessage\"),\n {\n icon: '',\n label: game.i18n.localize(\"DND5E.LevelActionDecrease\")\n }\n );\n }\n\n /* -------------------------------------------- */\n\n /**\n * A helper constructor function which displays the confirmation dialog.\n * @param {Item5e} item Item to be changed.\n * @param {string} title Localized dialog title.\n * @param {string} message Localized dialog message.\n * @param {object} continueButton Object containing label and icon for the action button.\n * @returns {Promise} Resolves with whether advancements should be unapplied. Rejects with null.\n */\n static createDialog(item, title, message, continueButton) {\n return new Promise((resolve, reject) => {\n const dialog = new this({\n title: `${title}: ${item.name}`,\n content: message,\n buttons: {\n continue: foundry.utils.mergeObject(continueButton, {\n callback: html => {\n const checkbox = html.querySelector('input[name=\"apply-advancement\"]');\n resolve(checkbox.checked);\n }\n }),\n cancel: {\n icon: '',\n label: game.i18n.localize(\"Cancel\"),\n callback: html => reject(null)\n }\n },\n default: \"continue\",\n close: () => reject(null)\n });\n dialog.render(true);\n });\n }\n\n}\n","import Advancement from \"../../documents/advancement/advancement.mjs\";\n\n/**\n * Internal type used to manage each step within the advancement process.\n *\n * @typedef {object} AdvancementStep\n * @property {string} type Step type from \"forward\", \"reverse\", \"restore\", or \"delete\".\n * @property {AdvancementFlow} [flow] Flow object for the advancement being applied by this step.\n * @property {Item5e} [item] For \"delete\" steps only, the item to be removed.\n * @property {object} [class] Contains data on class if step was triggered by class level change.\n * @property {Item5e} [class.item] Class item that caused this advancement step.\n * @property {number} [class.level] Level the class should be during this step.\n * @property {boolean} [automatic=false] Should the manager attempt to apply this step without user interaction?\n */\n\n/**\n * Application for controlling the advancement workflow and displaying the interface.\n *\n * @param {Actor5e} actor Actor on which this advancement is being performed.\n * @param {object} [options={}] Additional application options.\n */\nexport default class AdvancementManager extends Application {\n constructor(actor, options={}) {\n super(options);\n\n /**\n * The original actor to which changes will be applied when the process is complete.\n * @type {Actor5e}\n */\n this.actor = actor;\n\n /**\n * A clone of the original actor to which the changes can be applied during the advancement process.\n * @type {Actor5e}\n */\n this.clone = actor.clone();\n\n /**\n * Individual steps that will be applied in order.\n * @type {object}\n */\n this.steps = [];\n\n /**\n * Step being currently displayed.\n * @type {number|null}\n * @private\n */\n this._stepIndex = null;\n\n /**\n * Is the prompt currently advancing through un-rendered steps?\n * @type {boolean}\n * @private\n */\n this._advancing = false;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n classes: [\"dnd5e\", \"advancement\", \"flow\"],\n template: \"systems/dnd5e/templates/advancement/advancement-manager.hbs\",\n width: 460,\n height: \"auto\"\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n get title() {\n const visibleSteps = this.steps.filter(s => !s.automatic);\n const visibleIndex = visibleSteps.indexOf(this.step);\n const step = visibleIndex < 0 ? \"\" : game.i18n.format(\"DND5E.AdvancementManagerSteps\", {\n current: visibleIndex + 1,\n total: visibleSteps.length\n });\n return `${game.i18n.localize(\"DND5E.AdvancementManagerTitle\")} ${step}`;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n get id() {\n return `actor-${this.actor.id}-advancement`;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Get the step that is currently in progress.\n * @type {object|null}\n */\n get step() {\n return this.steps[this._stepIndex] ?? null;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Get the step before the current one.\n * @type {object|null}\n */\n get previousStep() {\n return this.steps[this._stepIndex - 1] ?? null;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Get the step after the current one.\n * @type {object|null}\n */\n get nextStep() {\n const nextIndex = this._stepIndex === null ? 0 : this._stepIndex + 1;\n return this.steps[nextIndex] ?? null;\n }\n\n /* -------------------------------------------- */\n /* Factory Methods */\n /* -------------------------------------------- */\n\n /**\n * Construct a manager for a newly added advancement from drag-drop.\n * @param {Actor5e} actor Actor from which the advancement should be updated.\n * @param {string} itemId ID of the item to which the advancements are being dropped.\n * @param {Advancement[]} advancements Dropped advancements to add.\n * @param {object} options Rendering options passed to the application.\n * @returns {AdvancementManager} Prepared manager. Steps count can be used to determine if advancements are needed.\n */\n static forNewAdvancement(actor, itemId, advancements, options) {\n const manager = new this(actor, options);\n const clonedItem = manager.clone.items.get(itemId);\n if ( !clonedItem || !advancements.length ) return manager;\n\n const currentLevel = this.currentLevel(clonedItem, manager.clone);\n const minimumLevel = advancements.reduce((min, a) => Math.min(a.levels[0] ?? Infinity, min), Infinity);\n if ( minimumLevel > currentLevel ) return manager;\n\n const oldFlows = Array.fromRange(currentLevel + 1).slice(minimumLevel)\n .flatMap(l => this.flowsForLevel(clonedItem, l));\n\n // Revert advancements through minimum level\n oldFlows.reverse().forEach(flow => manager.steps.push({ type: \"reverse\", flow, automatic: true }));\n\n // Add new advancements\n const advancementArray = clonedItem.toObject().system.advancement;\n advancementArray.push(...advancements.map(a => {\n const obj = a.toObject();\n if ( obj.constructor.dataModels?.value ) a.value = (new a.constructor.metadata.dataModels.value()).toObject();\n else obj.value = foundry.utils.deepClone(a.constructor.metadata.defaults?.value ?? {});\n return obj;\n }));\n clonedItem.updateSource({\"system.advancement\": advancementArray});\n\n const newFlows = Array.fromRange(currentLevel + 1).slice(minimumLevel)\n .flatMap(l => this.flowsForLevel(clonedItem, l));\n\n // Restore existing advancements and apply new advancements\n newFlows.forEach(flow => {\n const matchingFlow = oldFlows.find(f => (f.advancement.id === flow.advancement.id) && (f.level === flow.level));\n if ( matchingFlow ) manager.steps.push({ type: \"restore\", flow: matchingFlow, automatic: true });\n else manager.steps.push({ type: \"forward\", flow });\n });\n\n return manager;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Construct a manager for a newly added item.\n * @param {Actor5e} actor Actor to which the item is being added.\n * @param {object} itemData Data for the item being added.\n * @param {object} options Rendering options passed to the application.\n * @returns {AdvancementManager} Prepared manager. Steps count can be used to determine if advancements are needed.\n */\n static forNewItem(actor, itemData, options={}) {\n const manager = new this(actor, options);\n\n // Prepare data for adding to clone\n const dataClone = foundry.utils.deepClone(itemData);\n dataClone._id = foundry.utils.randomID();\n if ( itemData.type === \"class\" ) {\n dataClone.system.levels = 0;\n if ( !manager.clone.system.details.originalClass ) {\n manager.clone.updateSource({\"system.details.originalClass\": dataClone._id});\n }\n }\n\n // Add item to clone & get new instance from clone\n manager.clone.updateSource({items: [dataClone]});\n const clonedItem = manager.clone.items.get(dataClone._id);\n\n // For class items, prepare level change data\n if ( itemData.type === \"class\" ) {\n return manager.createLevelChangeSteps(clonedItem, itemData.system?.levels ?? 1);\n }\n\n // All other items, just create some flows up to current character level (or class level for subclasses)\n let targetLevel = manager.clone.system.details.level;\n if ( clonedItem.type === \"subclass\" ) targetLevel = clonedItem.class?.system.levels ?? 0;\n Array.fromRange(targetLevel + 1)\n .flatMap(l => this.flowsForLevel(clonedItem, l))\n .forEach(flow => manager.steps.push({ type: \"forward\", flow }));\n\n return manager;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Construct a manager for modifying choices on an item at a specific level.\n * @param {Actor5e} actor Actor from which the choices should be modified.\n * @param {object} itemId ID of the item whose choices are to be changed.\n * @param {number} level Level at which the choices are being changed.\n * @param {object} options Rendering options passed to the application.\n * @returns {AdvancementManager} Prepared manager. Steps count can be used to determine if advancements are needed.\n */\n static forModifyChoices(actor, itemId, level, options) {\n const manager = new this(actor, options);\n const clonedItem = manager.clone.items.get(itemId);\n if ( !clonedItem ) return manager;\n\n const flows = Array.fromRange(this.currentLevel(clonedItem, manager.clone) + 1).slice(level)\n .flatMap(l => this.flowsForLevel(clonedItem, l));\n\n // Revert advancements through changed level\n flows.reverse().forEach(flow => manager.steps.push({ type: \"reverse\", flow, automatic: true }));\n\n // Create forward advancements for level being changed\n flows.reverse().filter(f => f.level === level).forEach(flow => manager.steps.push({ type: \"forward\", flow }));\n\n // Create restore advancements for other levels\n flows.filter(f => f.level > level).forEach(flow => manager.steps.push({ type: \"restore\", flow, automatic: true }));\n\n return manager;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Construct a manager for an advancement that needs to be deleted.\n * @param {Actor5e} actor Actor from which the advancement should be unapplied.\n * @param {string} itemId ID of the item from which the advancement should be deleted.\n * @param {string} advancementId ID of the advancement to delete.\n * @param {object} options Rendering options passed to the application.\n * @returns {AdvancementManager} Prepared manager. Steps count can be used to determine if advancements are needed.\n */\n static forDeletedAdvancement(actor, itemId, advancementId, options) {\n const manager = new this(actor, options);\n const clonedItem = manager.clone.items.get(itemId);\n const advancement = clonedItem?.advancement.byId[advancementId];\n if ( !advancement ) return manager;\n\n const minimumLevel = advancement.levels[0];\n const currentLevel = this.currentLevel(clonedItem, manager.clone);\n\n // If minimum level is greater than current level, no changes to remove\n if ( (minimumLevel > currentLevel) || !advancement.appliesToClass ) return manager;\n\n advancement.levels\n .reverse()\n .filter(l => l <= currentLevel)\n .map(l => new advancement.constructor.metadata.apps.flow(clonedItem, advancementId, l))\n .forEach(flow => manager.steps.push({ type: \"reverse\", flow, automatic: true }));\n\n if ( manager.steps.length ) manager.steps.push({ type: \"delete\", advancement, automatic: true });\n\n return manager;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Construct a manager for an item that needs to be deleted.\n * @param {Actor5e} actor Actor from which the item should be deleted.\n * @param {string} itemId ID of the item to be deleted.\n * @param {object} options Rendering options passed to the application.\n * @returns {AdvancementManager} Prepared manager. Steps count can be used to determine if advancements are needed.\n */\n static forDeletedItem(actor, itemId, options) {\n const manager = new this(actor, options);\n const clonedItem = manager.clone.items.get(itemId);\n if ( !clonedItem ) return manager;\n\n // For class items, prepare level change data\n if ( clonedItem.type === \"class\" ) {\n return manager.createLevelChangeSteps(clonedItem, clonedItem.system.levels * -1);\n }\n\n // All other items, just create some flows down from current character level\n Array.fromRange(manager.clone.system.details.level + 1)\n .flatMap(l => this.flowsForLevel(clonedItem, l))\n .reverse()\n .forEach(flow => manager.steps.push({ type: \"reverse\", flow, automatic: true }));\n\n // Add a final step to remove the item only if there are advancements to apply\n if ( manager.steps.length ) manager.steps.push({ type: \"delete\", item: clonedItem, automatic: true });\n return manager;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Construct a manager for a change in a class's levels.\n * @param {Actor5e} actor Actor whose level has changed.\n * @param {string} classId ID of the class being changed.\n * @param {number} levelDelta Levels by which to increase or decrease the class.\n * @param {object} options Rendering options passed to the application.\n * @returns {AdvancementManager} Prepared manager. Steps count can be used to determine if advancements are needed.\n */\n static forLevelChange(actor, classId, levelDelta, options={}) {\n const manager = new this(actor, options);\n const clonedItem = manager.clone.items.get(classId);\n if ( !clonedItem ) return manager;\n return manager.createLevelChangeSteps(clonedItem, levelDelta);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Create steps based on the provided level change data.\n * @param {string} classItem Class being changed.\n * @param {number} levelDelta Levels by which to increase or decrease the class.\n * @returns {AdvancementManager} Manager with new steps.\n * @private\n */\n createLevelChangeSteps(classItem, levelDelta) {\n const pushSteps = (flows, data) => this.steps.push(...flows.map(flow => ({ flow, ...data })));\n const getItemFlows = characterLevel => this.clone.items.contents.flatMap(i => {\n if ( [\"class\", \"subclass\"].includes(i.type) ) return [];\n return this.constructor.flowsForLevel(i, characterLevel);\n });\n\n // Level increased\n for ( let offset = 1; offset <= levelDelta; offset++ ) {\n const classLevel = classItem.system.levels + offset;\n const characterLevel = this.actor.system.details.level + offset;\n const stepData = { type: \"forward\", class: {item: classItem, level: classLevel} };\n pushSteps(this.constructor.flowsForLevel(classItem, classLevel), stepData);\n pushSteps(this.constructor.flowsForLevel(classItem.subclass, classLevel), stepData);\n pushSteps(getItemFlows(characterLevel), stepData);\n }\n\n // Level decreased\n for ( let offset = 0; offset > levelDelta; offset-- ) {\n const classLevel = classItem.system.levels + offset;\n const characterLevel = this.actor.system.details.level + offset;\n const stepData = { type: \"reverse\", class: {item: classItem, level: classLevel}, automatic: true };\n pushSteps(getItemFlows(characterLevel).reverse(), stepData);\n pushSteps(this.constructor.flowsForLevel(classItem.subclass, classLevel).reverse(), stepData);\n pushSteps(this.constructor.flowsForLevel(classItem, classLevel).reverse(), stepData);\n if ( classLevel === 1 ) this.steps.push({ type: \"delete\", item: classItem, automatic: true });\n }\n\n // Ensure the class level ends up at the appropriate point\n this.steps.push({\n type: \"forward\", automatic: true,\n class: {item: classItem, level: classItem.system.levels += levelDelta}\n });\n\n return this;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Creates advancement flows for all advancements at a specific level.\n * @param {Item5e} item Item that has advancement.\n * @param {number} level Level in question.\n * @returns {AdvancementFlow[]} Created flow applications.\n * @protected\n */\n static flowsForLevel(item, level) {\n return (item?.advancement.byLevel[level] ?? [])\n .filter(a => a.appliesToClass)\n .map(a => new a.constructor.metadata.apps.flow(item, a.id, level));\n }\n\n /* -------------------------------------------- */\n\n /**\n * Determine the proper working level either from the provided item or from the cloned actor.\n * @param {Item5e} item Item being advanced. If class or subclass, its level will be used.\n * @param {Actor5e} actor Actor being advanced.\n * @returns {number} Working level.\n */\n static currentLevel(item, actor) {\n return item.system.levels ?? item.class?.system.levels ?? actor.system.details.level;\n }\n\n /* -------------------------------------------- */\n /* Form Rendering */\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n getData() {\n if ( !this.step ) return {};\n\n // Prepare information for subheading\n const item = this.step.flow.item;\n let level = this.step.flow.level;\n if ( (this.step.class) && [\"class\", \"subclass\"].includes(item.type) ) level = this.step.class.level;\n\n const visibleSteps = this.steps.filter(s => !s.automatic);\n const visibleIndex = visibleSteps.indexOf(this.step);\n\n return {\n actor: this.clone,\n flowId: this.step.flow.id,\n header: item.name,\n subheader: level ? game.i18n.format(\"DND5E.AdvancementLevelHeader\", { level }) : \"\",\n steps: {\n current: visibleIndex + 1,\n total: visibleSteps.length,\n hasPrevious: visibleIndex > 0,\n hasNext: visibleIndex < visibleSteps.length - 1\n }\n };\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n render(...args) {\n if ( this.steps.length && (this._stepIndex === null) ) this._stepIndex = 0;\n\n // Ensure the level on the class item matches the specified level\n if ( this.step?.class ) {\n let level = this.step.class.level;\n if ( this.step.type === \"reverse\" ) level -= 1;\n this.step.class.item.updateSource({\"system.levels\": level});\n this.clone.reset();\n }\n\n /**\n * A hook event that fires when an AdvancementManager is about to be processed.\n * @function dnd5e.preAdvancementManagerRender\n * @memberof hookEvents\n * @param {AdvancementManager} advancementManager The advancement manager about to be rendered\n */\n const allowed = Hooks.call(\"dnd5e.preAdvancementManagerRender\", this);\n\n // Abort if not allowed\n if ( allowed === false ) return this;\n\n if ( this.step?.automatic ) {\n if ( this._advancing ) return this;\n this._forward();\n return this;\n }\n\n return super.render(...args);\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async _render(force, options) {\n await super._render(force, options);\n if ( (this._state !== Application.RENDER_STATES.RENDERED) || !this.step ) return;\n\n // Render the step\n this.step.flow._element = null;\n await this.step.flow._render(force, options);\n this.setPosition();\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n activateListeners(html) {\n super.activateListeners(html);\n html.find(\"button[data-action]\").click(event => {\n const buttons = html.find(\"button\");\n buttons.attr(\"disabled\", true);\n html.find(\".error\").removeClass(\"error\");\n try {\n switch ( event.currentTarget.dataset.action ) {\n case \"restart\":\n if ( !this.previousStep ) return;\n return this._restart(event);\n case \"previous\":\n if ( !this.previousStep ) return;\n return this._backward(event);\n case \"next\":\n case \"complete\":\n return this._forward(event);\n }\n } finally {\n buttons.attr(\"disabled\", false);\n }\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async close(options={}) {\n if ( !options.skipConfirmation ) {\n return new Dialog({\n title: `${game.i18n.localize(\"DND5E.AdvancementManagerCloseTitle\")}: ${this.actor.name}`,\n content: game.i18n.localize(\"DND5E.AdvancementManagerCloseMessage\"),\n buttons: {\n close: {\n icon: '',\n label: game.i18n.localize(\"DND5E.AdvancementManagerCloseButtonStop\"),\n callback: () => super.close(options)\n },\n continue: {\n icon: '',\n label: game.i18n.localize(\"DND5E.AdvancementManagerCloseButtonContinue\")\n }\n },\n default: \"close\"\n }).render(true);\n }\n await super.close(options);\n }\n\n /* -------------------------------------------- */\n /* Process */\n /* -------------------------------------------- */\n\n /**\n * Advance through the steps until one requiring user interaction is encountered.\n * @param {Event} [event] Triggering click event if one occurred.\n * @returns {Promise}\n * @private\n */\n async _forward(event) {\n this._advancing = true;\n try {\n do {\n const flow = this.step.flow;\n\n // Apply changes based on step type\n if ( (this.step.type === \"delete\") && this.step.item ) this.clone.items.delete(this.step.item.id);\n else if ( (this.step.type === \"delete\") && this.step.advancement ) {\n this.step.advancement.item.deleteAdvancement(this.step.advancement.id, { source: true });\n }\n else if ( this.step.type === \"restore\" ) await flow.advancement.restore(flow.level, flow.retainedData);\n else if ( this.step.type === \"reverse\" ) flow.retainedData = await flow.advancement.reverse(flow.level);\n else if ( flow ) await flow._updateObject(event, flow._getSubmitData());\n\n this._stepIndex++;\n\n // Ensure the level on the class item matches the specified level\n if ( this.step?.class ) {\n let level = this.step.class.level;\n if ( this.step.type === \"reverse\" ) level -= 1;\n this.step.class.item.updateSource({\"system.levels\": level});\n }\n this.clone.reset();\n } while ( this.step?.automatic );\n } catch(error) {\n if ( !(error instanceof Advancement.ERROR) ) throw error;\n ui.notifications.error(error.message);\n this.step.automatic = false;\n if ( this.step.type === \"restore\" ) this.step.type = \"forward\";\n } finally {\n this._advancing = false;\n }\n\n if ( this.step ) this.render(true);\n else this._complete();\n }\n\n /* -------------------------------------------- */\n\n /**\n * Reverse through the steps until one requiring user interaction is encountered.\n * @param {Event} [event] Triggering click event if one occurred.\n * @param {object} [options] Additional options to configure behavior.\n * @param {boolean} [options.render=true] Whether to render the Application after the step has been reversed. Used\n * by the restart workflow.\n * @returns {Promise}\n * @private\n */\n async _backward(event, { render=true }={}) {\n this._advancing = true;\n try {\n do {\n this._stepIndex--;\n if ( !this.step ) break;\n const flow = this.step.flow;\n\n // Reverse step based on step type\n if ( (this.step.type === \"delete\") && this.step.item ) this.clone.updateSource({items: [this.step.item]});\n else if ( (this.step.type === \"delete\") && this.step.advancement ) this.advancement.item.createAdvancement(\n this.advancement.typeName, this.advancement._source, { source: true }\n );\n else if ( this.step.type === \"reverse\" ) await flow.advancement.restore(flow.level, flow.retainedData);\n else if ( flow ) flow.retainedData = await flow.advancement.reverse(flow.level);\n this.clone.reset();\n } while ( this.step?.automatic );\n } catch(error) {\n if ( !(error instanceof Advancement.ERROR) ) throw error;\n ui.notifications.error(error.message);\n this.step.automatic = false;\n } finally {\n this._advancing = false;\n }\n\n if ( !render ) return;\n if ( this.step ) this.render(true);\n else this.close({ skipConfirmation: true });\n }\n\n /* -------------------------------------------- */\n\n /**\n * Reset back to the manager's initial state.\n * @param {MouseEvent} [event] The triggering click event if one occurred.\n * @returns {Promise}\n * @private\n */\n async _restart(event) {\n const restart = await Dialog.confirm({\n title: game.i18n.localize(\"DND5E.AdvancementManagerRestartConfirmTitle\"),\n content: game.i18n.localize(\"DND5E.AdvancementManagerRestartConfirm\")\n });\n if ( !restart ) return;\n // While there is still a renderable step.\n while ( this.steps.slice(0, this._stepIndex).some(s => !s.automatic) ) {\n await this._backward(event, {render: false});\n }\n this.render(true);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Apply changes to actual actor after all choices have been made.\n * @param {Event} event Button click that triggered the change.\n * @returns {Promise}\n * @private\n */\n async _complete(event) {\n const updates = this.clone.toObject();\n const items = updates.items;\n delete updates.items;\n\n // Gather changes to embedded items\n const { toCreate, toUpdate, toDelete } = items.reduce((obj, item) => {\n if ( !this.actor.items.get(item._id) ) {\n obj.toCreate.push(item);\n } else {\n obj.toUpdate.push(item);\n obj.toDelete.findSplice(id => id === item._id);\n }\n return obj;\n }, { toCreate: [], toUpdate: [], toDelete: this.actor.items.map(i => i.id) });\n\n /**\n * A hook event that fires at the final stage of a character's advancement process, before actor and item updates\n * are applied.\n * @function dnd5e.preAdvancementManagerComplete\n * @memberof hookEvents\n * @param {AdvancementManager} advancementManager The advancement manager.\n * @param {object} actorUpdates Updates to the actor.\n * @param {object[]} toCreate Items that will be created on the actor.\n * @param {object[]} toUpdate Items that will be updated on the actor.\n * @param {string[]} toDelete IDs of items that will be deleted on the actor.\n */\n if ( Hooks.call(\"dnd5e.preAdvancementManagerComplete\", this, updates, toCreate, toUpdate, toDelete) === false ) {\n console.log(\"AdvancementManager completion was prevented by the 'preAdvancementManagerComplete' hook.\");\n return this.close({ skipConfirmation: true });\n }\n\n // Apply changes from clone to original actor\n await Promise.all([\n this.actor.update(updates, { isAdvancement: true }),\n this.actor.createEmbeddedDocuments(\"Item\", toCreate, { keepId: true, isAdvancement: true }),\n this.actor.updateEmbeddedDocuments(\"Item\", toUpdate, { isAdvancement: true }),\n this.actor.deleteEmbeddedDocuments(\"Item\", toDelete, { isAdvancement: true })\n ]);\n\n /**\n * A hook event that fires when an AdvancementManager is done modifying an actor.\n * @function dnd5e.advancementManagerComplete\n * @memberof hookEvents\n * @param {AdvancementManager} advancementManager The advancement manager that just completed\n */\n Hooks.callAll(\"dnd5e.advancementManagerComplete\", this);\n\n // Close prompt\n return this.close({ skipConfirmation: true });\n }\n\n}\n","/**\n * Description for a single part of a property attribution.\n * @typedef {object} AttributionDescription\n * @property {string} label Descriptive label that will be displayed. If the label is in the form\n * of an @ property, the system will try to turn it into a human-readable label.\n * @property {number} mode Application mode for this step as defined in\n * [CONST.ACTIVE_EFFECT_MODES](https://foundryvtt.com/api/module-constants.html#.ACTIVE_EFFECT_MODES).\n * @property {number} value Value of this step.\n */\n\n/**\n * Interface for viewing what factors went into determining a specific property.\n *\n * @param {Document} object The Document that owns the property being attributed.\n * @param {AttributionDescription[]} attributions An array of all the attribution data.\n * @param {string} property Dot separated path to the property.\n * @param {object} [options={}] Application rendering options.\n */\nexport default class PropertyAttribution extends Application {\n constructor(object, attributions, property, options={}) {\n super(options);\n this.object = object;\n this.attributions = attributions;\n this.property = property;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n id: \"property-attribution\",\n classes: [\"dnd5e\", \"property-attribution\"],\n template: \"systems/dnd5e/templates/apps/property-attribution.hbs\",\n width: 320,\n height: \"auto\"\n });\n }\n\n /* -------------------------------------------- */\n\n /**\n * Render this view as a tooltip rather than a whole window.\n * @param {HTMLElement} element The element to which the tooltip should be attached.\n */\n async renderTooltip(element) {\n const data = this.getData(this.options);\n const text = (await this._renderInner(data))[0].outerHTML;\n game.tooltip.activate(element, { text, cssClass: \"property-attribution\" });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n getData() {\n const property = foundry.utils.getProperty(this.object.system, this.property);\n let total;\n if ( Number.isNumeric(property)) total = property;\n else if ( typeof property === \"object\" && Number.isNumeric(property.value) ) total = property.value;\n const sources = foundry.utils.duplicate(this.attributions);\n return {\n caption: this.options.title,\n sources: sources.map(entry => {\n if ( entry.label.startsWith(\"@\") ) entry.label = this.getPropertyLabel(entry.label.slice(1));\n if ( (entry.mode === CONST.ACTIVE_EFFECT_MODES.ADD) && (entry.value < 0) ) {\n entry.negative = true;\n entry.value = entry.value * -1;\n }\n return entry;\n }),\n total: total\n };\n }\n\n /* -------------------------------------------- */\n\n /**\n * Produce a human-readable and localized name for the provided property.\n * @param {string} property Dot separated path to the property.\n * @returns {string} Property name for display.\n */\n getPropertyLabel(property) {\n const parts = property.split(\".\");\n if ( parts[0] === \"abilities\" && parts[1] ) {\n return CONFIG.DND5E.abilities[parts[1]]?.label ?? property;\n } else if ( (property === \"attributes.ac.dex\") && CONFIG.DND5E.abilities.dex ) {\n return CONFIG.DND5E.abilities.dex.label;\n } else if ( (parts[0] === \"prof\") || (property === \"attributes.prof\") ) {\n return game.i18n.localize(\"DND5E.Proficiency\");\n }\n return property;\n }\n}\n","import * as Trait from \"../../documents/actor/trait.mjs\";\nimport BaseConfigSheet from \"./base-config.mjs\";\n\n/**\n * A specialized application used to modify actor traits.\n *\n * @param {Actor5e} actor Actor for whose traits are being edited.\n * @param {string} trait Trait key as defined in CONFIG.traits.\n * @param {object} [options={}]\n * @param {boolean} [options.allowCustom=true] Support user custom trait entries.\n */\nexport default class TraitSelector extends BaseConfigSheet {\n constructor(actor, trait, options={}) {\n if ( !CONFIG.DND5E.traits[trait] ) throw new Error(\n `Cannot instantiate TraitSelector with a trait not defined in CONFIG.DND5E.traits: ${trait}.`\n );\n if ( [\"saves\", \"skills\"].includes(trait) ) throw new Error(\n `TraitSelector does not support selection of ${trait}. That should be handled through `\n + \"that type's more specialized configuration application.\"\n );\n\n super(actor, options);\n\n /**\n * Trait key as defined in CONFIG.traits.\n * @type {string}\n */\n this.trait = trait;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n id: \"trait-selector\",\n classes: [\"dnd5e\", \"trait-selector\", \"subconfig\"],\n template: \"systems/dnd5e/templates/apps/trait-selector.hbs\",\n width: 320,\n height: \"auto\",\n sheetConfig: false,\n allowCustom: true\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n get id() {\n return `${this.constructor.name}-${this.trait}-Actor-${this.document.id}`;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n get title() {\n return `${this.document.name}: ${Trait.traitLabel(this.trait)}`;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async getData() {\n const path = `system.${Trait.actorKeyPath(this.trait)}`;\n const data = foundry.utils.getProperty(this.document, path);\n if ( !data ) return super.getData();\n\n return {\n ...super.getData(),\n choices: await Trait.choices(this.trait, data.value),\n custom: data.custom,\n customPath: \"custom\" in data ? `${path}.custom` : null,\n bypasses: \"bypasses\" in data ? Object.entries(CONFIG.DND5E.physicalWeaponProperties).reduce((obj, [k, v]) => {\n obj[k] = { label: v, chosen: data.bypasses.has(k) };\n return obj;\n }, {}) : null,\n bypassesPath: \"bypasses\" in data ? `${path}.bypasses` : null\n };\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n activateListeners(html) {\n super.activateListeners(html);\n\n for ( const checkbox of html[0].querySelectorAll(\"input[type='checkbox']\") ) {\n if ( checkbox.checked ) this._onToggleCategory(checkbox);\n }\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n _getActorOverrides() {\n const overrides = super._getActorOverrides();\n const path = `system.${Trait.actorKeyPath(this.trait)}.value`;\n const src = new Set(foundry.utils.getProperty(this.document._source, path));\n const current = foundry.utils.getProperty(this.document, path);\n const delta = current.difference(src);\n for ( const choice of delta ) {\n overrides.push(`choices.${choice}`);\n }\n return overrides;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async _onChangeInput(event) {\n super._onChangeInput(event);\n\n if ( event.target.name?.startsWith(\"choices\") ) this._onToggleCategory(event.target);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Enable/disable all children when a category is checked.\n * @param {HTMLElement} checkbox Checkbox that was changed.\n * @protected\n */\n _onToggleCategory(checkbox) {\n const children = checkbox.closest(\"li\")?.querySelector(\"ol\");\n if ( !children ) return;\n\n for ( const child of children.querySelectorAll(\"input[type='checkbox']\") ) {\n child.checked = child.disabled = checkbox.checked;\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * Filter a list of choices that begin with the provided key for update.\n * @param {string} prefix They initial form prefix under which the choices are grouped.\n * @param {string} path Path in actor data where the final choices will be saved.\n * @param {object} formData Form data being prepared. *Will be mutated.*\n * @protected\n */\n _prepareChoices(prefix, path, formData) {\n const chosen = [];\n for ( const key of Object.keys(formData).filter(k => k.startsWith(`${prefix}.`)) ) {\n if ( formData[key] ) chosen.push(key.replace(`${prefix}.`, \"\"));\n delete formData[key];\n }\n formData[path] = chosen;\n }\n\n /* -------------------------------------------- */\n\n /** @override */\n async _updateObject(event, formData) {\n const path = `system.${Trait.actorKeyPath(this.trait)}`;\n const data = foundry.utils.getProperty(this.document, path);\n\n this._prepareChoices(\"choices\", `${path}.value`, formData);\n if ( \"bypasses\" in data ) this._prepareChoices(\"bypasses\", `${path}.bypasses`, formData);\n\n return this.object.update(formData);\n }\n}\n","import BaseConfigSheet from \"./base-config.mjs\";\nimport * as Trait from \"../../documents/actor/trait.mjs\";\n\n/**\n * @typedef {FormApplicationOptions} ProficiencyConfigOptions\n * @property {string} key The ID of the skill or tool being configured.\n * @property {string} property The property on the actor being configured, either 'skills', or 'tools'.\n */\n\n/**\n * An application responsible for configuring proficiencies and bonuses in tools and skills.\n *\n * @param {Actor5e} actor The Actor being configured.\n * @param {ProficiencyConfigOptions} options Additional configuration options.\n */\nexport default class ProficiencyConfig extends BaseConfigSheet {\n\n /** @inheritdoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n classes: [\"dnd5e\"],\n template: \"systems/dnd5e/templates/apps/proficiency-config.hbs\",\n width: 500,\n height: \"auto\"\n });\n }\n\n /* -------------------------------------------- */\n\n /**\n * Are we configuring a tool?\n * @returns {boolean}\n */\n get isTool() {\n return this.options.property === \"tools\";\n }\n\n /* -------------------------------------------- */\n\n /**\n * Are we configuring a skill?\n * @returns {boolean}\n */\n get isSkill() {\n return this.options.property === \"skills\";\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n get title() {\n const label = this.isSkill ? CONFIG.DND5E.skills[this.options.key].label : Trait.keyLabel(\"tool\", this.options.key);\n return `${game.i18n.format(\"DND5E.ProficiencyConfigureTitle\", {label})}: ${this.document.name}`;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n get id() {\n return `ProficiencyConfig-${this.document.documentName}-${this.document.id}-${this.options.key}`;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n getData(options={}) {\n return {\n abilities: CONFIG.DND5E.abilities,\n proficiencyLevels: CONFIG.DND5E.proficiencyLevels,\n entry: this.document.system[this.options.property]?.[this.options.key],\n isTool: this.isTool,\n isSkill: this.isSkill,\n key: this.options.key,\n property: this.options.property\n };\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async _updateObject(event, formData) {\n if ( this.isTool ) return super._updateObject(event, formData);\n const passive = formData[`system.skills.${this.options.key}.bonuses.passive`];\n const passiveRoll = new Roll(passive);\n if ( !passiveRoll.isDeterministic ) {\n const message = game.i18n.format(\"DND5E.FormulaCannotContainDiceError\", {\n name: game.i18n.localize(\"DND5E.SkillBonusPassive\")\n });\n ui.notifications.error(message);\n throw new Error(message);\n }\n return super._updateObject(event, formData);\n }\n}\n","import TraitSelector from \"./trait-selector.mjs\";\nimport * as Trait from \"../../documents/actor/trait.mjs\";\n\n/**\n * A specialized version of the TraitSelector used for selecting tool and vehicle proficiencies.\n * @extends {TraitSelector}\n */\nexport default class ToolSelector extends TraitSelector {\n /** @inheritdoc */\n async getData() {\n return {\n ...super.getData(),\n choices: await Trait.choices(this.trait, Object.keys(this.document.system.tools))\n };\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n _getActorOverrides() {\n return Object.keys(foundry.utils.flattenObject(this.document.overrides));\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async _updateObject(event, formData) {\n return this.document.update(Object.entries(formData).reduce((obj, [k, v]) => {\n const [, key] = k.split(\".\");\n const tool = this.document.system.tools[key];\n if ( tool && !v ) obj[`system.tools.-=${key}`] = null;\n else if ( !tool && v ) obj[`system.tools.${key}`] = {value: 1};\n return obj;\n }, {}));\n }\n}\n","import ActiveEffect5e from \"../../documents/active-effect.mjs\";\nimport * as Trait from \"../../documents/actor/trait.mjs\";\nimport Item5e from \"../../documents/item.mjs\";\n\nimport ActorAbilityConfig from \"./ability-config.mjs\";\nimport ActorArmorConfig from \"./armor-config.mjs\";\nimport ActorHitDiceConfig from \"./hit-dice-config.mjs\";\nimport ActorHitPointsConfig from \"./hit-points-config.mjs\";\nimport ActorInitiativeConfig from \"./initiative-config.mjs\";\nimport ActorMovementConfig from \"./movement-config.mjs\";\nimport ActorSensesConfig from \"./senses-config.mjs\";\nimport ActorSheetFlags from \"./sheet-flags.mjs\";\nimport ActorTypeConfig from \"./type-config.mjs\";\n\nimport AdvancementConfirmationDialog from \"../advancement/advancement-confirmation-dialog.mjs\";\nimport AdvancementManager from \"../advancement/advancement-manager.mjs\";\n\nimport PropertyAttribution from \"../property-attribution.mjs\";\nimport TraitSelector from \"./trait-selector.mjs\";\nimport ProficiencyConfig from \"./proficiency-config.mjs\";\nimport ToolSelector from \"./tool-selector.mjs\";\n\n/**\n * Extend the basic ActorSheet class to suppose system-specific logic and functionality.\n * @abstract\n */\nexport default class ActorSheet5e extends ActorSheet {\n\n /**\n * Track the set of item filters which are applied\n * @type {Object}\n * @protected\n */\n _filters = {\n inventory: new Set(),\n spellbook: new Set(),\n features: new Set(),\n effects: new Set()\n };\n\n /* -------------------------------------------- */\n\n /**\n * IDs for items on the sheet that have been expanded.\n * @type {Set}\n * @protected\n */\n _expanded = new Set();\n\n /* -------------------------------------------- */\n\n /** @override */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n scrollY: [\n \".inventory .inventory-list\",\n \".features .inventory-list\",\n \".spellbook .inventory-list\",\n \".effects .inventory-list\",\n \".center-pane\"\n ],\n tabs: [{navSelector: \".tabs\", contentSelector: \".sheet-body\", initial: \"description\"}],\n width: 720,\n height: Math.max(680, Math.max(\n 237 + (Object.keys(CONFIG.DND5E.abilities).length * 70),\n 240 + (Object.keys(CONFIG.DND5E.skills).length * 24)\n ))\n });\n }\n\n /* -------------------------------------------- */\n\n /**\n * A set of item types that should be prevented from being dropped on this type of actor sheet.\n * @type {Set}\n */\n static unsupportedItemTypes = new Set();\n\n /* -------------------------------------------- */\n\n /** @override */\n get template() {\n if ( !game.user.isGM && this.actor.limited ) return \"systems/dnd5e/templates/actors/limited-sheet.hbs\";\n return `systems/dnd5e/templates/actors/${this.actor.type}-sheet.hbs`;\n }\n\n /* -------------------------------------------- */\n /* Context Preparation */\n /* -------------------------------------------- */\n\n /** @override */\n async getData(options) {\n\n // The Actor's data\n const source = this.actor.toObject();\n\n // Basic data\n const context = {\n actor: this.actor,\n source: source.system,\n system: this.actor.system,\n items: Array.from(this.actor.items),\n itemContext: {},\n abilities: foundry.utils.deepClone(this.actor.system.abilities),\n skills: foundry.utils.deepClone(this.actor.system.skills ?? {}),\n tools: foundry.utils.deepClone(this.actor.system.tools ?? {}),\n labels: this._getLabels(),\n movement: this._getMovementSpeed(this.actor.system),\n senses: this._getSenses(this.actor.system),\n effects: ActiveEffect5e.prepareActiveEffectCategories(this.actor.effects),\n warnings: foundry.utils.deepClone(this.actor._preparationWarnings),\n filters: this._filters,\n owner: this.actor.isOwner,\n limited: this.actor.limited,\n options: this.options,\n editable: this.isEditable,\n cssClass: this.actor.isOwner ? \"editable\" : \"locked\",\n isCharacter: this.actor.type === \"character\",\n isNPC: this.actor.type === \"npc\",\n isVehicle: this.actor.type === \"vehicle\",\n config: CONFIG.DND5E,\n rollableClass: this.isEditable ? \"rollable\" : \"\",\n rollData: this.actor.getRollData()\n };\n\n // Sort Owned Items\n context.items.sort((a, b) => (a.sort || 0) - (b.sort || 0));\n\n // Temporary HP\n const hp = {...context.system.attributes.hp};\n if ( hp.temp === 0 ) delete hp.temp;\n if ( hp.tempmax === 0 ) delete hp.tempmax;\n context.hp = hp;\n\n // Ability Scores\n for ( const [a, abl] of Object.entries(context.abilities) ) {\n abl.icon = this._getProficiencyIcon(abl.proficient);\n abl.hover = CONFIG.DND5E.proficiencyLevels[abl.proficient];\n abl.label = CONFIG.DND5E.abilities[a]?.label;\n abl.baseProf = source.system.abilities[a]?.proficient ?? 0;\n }\n\n // Skills & tools.\n [\"skills\", \"tools\"].forEach(prop => {\n for ( const [key, entry] of Object.entries(context[prop]) ) {\n entry.abbreviation = CONFIG.DND5E.abilities[entry.ability]?.abbreviation;\n entry.icon = this._getProficiencyIcon(entry.value);\n entry.hover = CONFIG.DND5E.proficiencyLevels[entry.value];\n entry.label = prop === \"skills\" ? CONFIG.DND5E.skills[key]?.label : Trait.keyLabel(\"tool\", key);\n entry.baseValue = source.system[prop]?.[key]?.value ?? 0;\n }\n });\n\n // Update traits\n context.traits = this._prepareTraits(context.system);\n\n // Prepare owned items\n this._prepareItems(context);\n context.expandedData = {};\n for ( const id of this._expanded ) {\n const item = this.actor.items.get(id);\n if ( item ) context.expandedData[id] = await item.getChatData({secrets: this.actor.isOwner});\n }\n\n // Biography HTML enrichment\n context.biographyHTML = await TextEditor.enrichHTML(context.system.details.biography.value, {\n secrets: this.actor.isOwner,\n rollData: context.rollData,\n async: true,\n relativeTo: this.actor\n });\n\n return context;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare labels object for the context.\n * @returns {object} Object containing various labels.\n * @protected\n */\n _getLabels() {\n const labels = {...this.actor.labels};\n\n // Currency Labels\n labels.currencies = Object.entries(CONFIG.DND5E.currencies).reduce((obj, [k, c]) => {\n obj[k] = c.label;\n return obj;\n }, {});\n\n // Proficiency\n labels.proficiency = game.settings.get(\"dnd5e\", \"proficiencyModifier\") === \"dice\"\n ? `d${this.actor.system.attributes.prof * 2}`\n : `+${this.actor.system.attributes.prof}`;\n\n return labels;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare the display of movement speed data for the Actor.\n * @param {object} systemData System data for the Actor being prepared.\n * @param {boolean} [largestPrimary=false] Show the largest movement speed as \"primary\", otherwise show \"walk\".\n * @returns {{primary: string, special: string}}\n * @protected\n */\n _getMovementSpeed(systemData, largestPrimary=false) {\n const movement = systemData.attributes.movement ?? {};\n\n // Prepare an array of available movement speeds\n let speeds = [\n [movement.burrow, `${game.i18n.localize(\"DND5E.MovementBurrow\")} ${movement.burrow}`],\n [movement.climb, `${game.i18n.localize(\"DND5E.MovementClimb\")} ${movement.climb}`],\n [movement.fly, `${game.i18n.localize(\"DND5E.MovementFly\")} ${movement.fly}${movement.hover ? ` (${game.i18n.localize(\"DND5E.MovementHover\")})` : \"\"}`],\n [movement.swim, `${game.i18n.localize(\"DND5E.MovementSwim\")} ${movement.swim}`]\n ];\n if ( largestPrimary ) {\n speeds.push([movement.walk, `${game.i18n.localize(\"DND5E.MovementWalk\")} ${movement.walk}`]);\n }\n\n // Filter and sort speeds on their values\n speeds = speeds.filter(s => s[0]).sort((a, b) => b[0] - a[0]);\n\n // Case 1: Largest as primary\n if ( largestPrimary ) {\n let primary = speeds.shift();\n return {\n primary: `${primary ? primary[1] : \"0\"} ${movement.units}`,\n special: speeds.map(s => s[1]).join(\", \")\n };\n }\n\n // Case 2: Walk as primary\n else {\n return {\n primary: `${movement.walk || 0} ${movement.units}`,\n special: speeds.length ? speeds.map(s => s[1]).join(\", \") : \"\"\n };\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare senses object for display.\n * @param {object} systemData System data for the Actor being prepared.\n * @returns {object} Senses grouped by key with localized and formatted string.\n * @protected\n */\n _getSenses(systemData) {\n const senses = systemData.attributes.senses ?? {};\n const tags = {};\n for ( let [k, label] of Object.entries(CONFIG.DND5E.senses) ) {\n const v = senses[k] ?? 0;\n if ( v === 0 ) continue;\n tags[k] = `${game.i18n.localize(label)} ${v} ${senses.units}`;\n }\n if ( senses.special ) tags.special = senses.special;\n return tags;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async activateEditor(name, options={}, initialContent=\"\") {\n options.relativeLinks = true;\n return super.activateEditor(name, options, initialContent);\n }\n\n /* --------------------------------------------- */\n /* Property Attribution */\n /* --------------------------------------------- */\n\n /**\n * Break down all of the Active Effects affecting a given target property.\n * @param {string} target The data property being targeted.\n * @returns {AttributionDescription[]} Any active effects that modify that property.\n * @protected\n */\n _prepareActiveEffectAttributions(target) {\n return this.actor.effects.reduce((arr, e) => {\n let source = e.sourceName;\n if ( e.origin === this.actor.uuid ) source = e.label;\n if ( !source || e.disabled || e.isSuppressed ) return arr;\n const value = e.changes.reduce((n, change) => {\n if ( (change.key !== target) || !Number.isNumeric(change.value) ) return n;\n if ( change.mode !== CONST.ACTIVE_EFFECT_MODES.ADD ) return n;\n return n + Number(change.value);\n }, 0);\n if ( !value ) return arr;\n arr.push({value, label: source, mode: CONST.ACTIVE_EFFECT_MODES.ADD});\n return arr;\n }, []);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Produce a list of armor class attribution objects.\n * @param {object} rollData Data provided by Actor5e#getRollData\n * @returns {AttributionDescription[]} List of attribution descriptions.\n * @protected\n */\n _prepareArmorClassAttribution(rollData) {\n const ac = rollData.attributes.ac;\n const cfg = CONFIG.DND5E.armorClasses[ac.calc];\n const attribution = [];\n\n // Base AC Attribution\n switch ( ac.calc ) {\n\n // Flat AC\n case \"flat\":\n return [{\n label: game.i18n.localize(\"DND5E.ArmorClassFlat\"),\n mode: CONST.ACTIVE_EFFECT_MODES.OVERRIDE,\n value: ac.flat\n }];\n\n // Natural armor\n case \"natural\":\n attribution.push({\n label: game.i18n.localize(\"DND5E.ArmorClassNatural\"),\n mode: CONST.ACTIVE_EFFECT_MODES.OVERRIDE,\n value: ac.flat\n });\n break;\n\n default:\n const formula = ac.calc === \"custom\" ? ac.formula : cfg.formula;\n let base = ac.base;\n const dataRgx = new RegExp(/@([a-z.0-9_-]+)/gi);\n for ( const [match, term] of formula.matchAll(dataRgx) ) {\n const value = String(foundry.utils.getProperty(rollData, term));\n if ( (term === \"attributes.ac.armor\") || (value === \"0\") ) continue;\n if ( Number.isNumeric(value) ) base -= Number(value);\n attribution.push({\n label: match,\n mode: CONST.ACTIVE_EFFECT_MODES.ADD,\n value\n });\n }\n const armorInFormula = formula.includes(\"@attributes.ac.armor\");\n let label = game.i18n.localize(\"DND5E.PropertyBase\");\n if ( armorInFormula ) label = this.actor.armor?.name ?? game.i18n.localize(\"DND5E.ArmorClassUnarmored\");\n attribution.unshift({\n label,\n mode: CONST.ACTIVE_EFFECT_MODES.OVERRIDE,\n value: base\n });\n break;\n }\n\n // Shield\n if ( ac.shield !== 0 ) attribution.push({\n label: this.actor.shield?.name ?? game.i18n.localize(\"DND5E.EquipmentShield\"),\n mode: CONST.ACTIVE_EFFECT_MODES.ADD,\n value: ac.shield\n });\n\n // Bonus\n if ( ac.bonus !== 0 ) attribution.push(...this._prepareActiveEffectAttributions(\"system.attributes.ac.bonus\"));\n\n // Cover\n if ( ac.cover !== 0 ) attribution.push({\n label: game.i18n.localize(\"DND5E.Cover\"),\n mode: CONST.ACTIVE_EFFECT_MODES.ADD,\n value: ac.cover\n });\n return attribution;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare the data structure for traits data like languages, resistances & vulnerabilities, and proficiencies.\n * @param {object} systemData System data for the Actor being prepared.\n * @returns {object} Prepared trait data.\n * @protected\n */\n _prepareTraits(systemData) {\n const traits = {};\n for ( const [trait, traitConfig] of Object.entries(CONFIG.DND5E.traits) ) {\n const key = traitConfig.actorKeyPath ?? `traits.${trait}`;\n const data = foundry.utils.deepClone(foundry.utils.getProperty(systemData, key));\n const choices = CONFIG.DND5E[traitConfig.configKey];\n if ( !data ) continue;\n\n foundry.utils.setProperty(traits, key, data);\n let values = data.value;\n if ( !values ) values = [];\n else if ( values instanceof Set ) values = Array.from(values);\n else if ( !Array.isArray(values) ) values = [values];\n\n // Split physical damage types from others if bypasses is set\n const physical = [];\n if ( data.bypasses?.size ) {\n values = values.filter(t => {\n if ( !CONFIG.DND5E.physicalDamageTypes[t] ) return true;\n physical.push(t);\n return false;\n });\n }\n\n data.selected = values.reduce((obj, key) => {\n obj[key] = Trait.keyLabel(trait, key) ?? key;\n return obj;\n }, {});\n\n // Display bypassed damage types\n if ( physical.length ) {\n const damageTypesFormatter = new Intl.ListFormat(game.i18n.lang, { style: \"long\", type: \"conjunction\" });\n const bypassFormatter = new Intl.ListFormat(game.i18n.lang, { style: \"long\", type: \"disjunction\" });\n data.selected.physical = game.i18n.format(\"DND5E.DamagePhysicalBypasses\", {\n damageTypes: damageTypesFormatter.format(physical.map(t => choices[t])),\n bypassTypes: bypassFormatter.format(data.bypasses.map(t => CONFIG.DND5E.physicalWeaponProperties[t]))\n });\n }\n\n // Add custom entries\n if ( data.custom ) data.custom.split(\";\").forEach((c, i) => data.selected[`custom${i+1}`] = c.trim());\n data.cssClass = !foundry.utils.isEmpty(data.selected) ? \"\" : \"inactive\";\n }\n return traits;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare the data structure for items which appear on the actor sheet.\n * Each subclass overrides this method to implement type-specific logic.\n * @protected\n */\n _prepareItems() {}\n\n /* -------------------------------------------- */\n\n /**\n * Insert a spell into the spellbook object when rendering the character sheet.\n * @param {object} context Sheet rendering context data being prepared for render.\n * @param {object[]} spells Spells to be included in the spellbook.\n * @returns {object[]} Spellbook sections in the proper order.\n * @protected\n */\n _prepareSpellbook(context, spells) {\n const owner = this.actor.isOwner;\n const levels = context.actor.system.spells;\n const spellbook = {};\n\n // Define section and label mappings\n const sections = {atwill: -20, innate: -10, pact: 0.5 };\n const useLabels = {\"-20\": \"-\", \"-10\": \"-\", 0: \"∞\"};\n\n // Format a spellbook entry for a certain indexed level\n const registerSection = (sl, i, label, {prepMode=\"prepared\", value, max, override}={}) => {\n const aeOverride = foundry.utils.hasProperty(this.actor.overrides, `system.spells.spell${i}.override`);\n spellbook[i] = {\n order: i,\n label: label,\n usesSlots: i > 0,\n canCreate: owner,\n canPrepare: (context.actor.type === \"character\") && (i >= 1),\n spells: [],\n uses: useLabels[i] || value || 0,\n slots: useLabels[i] || max || 0,\n override: override || 0,\n dataset: {type: \"spell\", level: prepMode in sections ? 1 : i, \"preparation.mode\": prepMode},\n prop: sl,\n editable: context.editable && !aeOverride\n };\n };\n\n // Determine the maximum spell level which has a slot\n const maxLevel = Array.fromRange(10).reduce((max, i) => {\n if ( i === 0 ) return max;\n const level = levels[`spell${i}`];\n if ( (level.max || level.override ) && ( i > max ) ) max = i;\n return max;\n }, 0);\n\n // Level-based spellcasters have cantrips and leveled slots\n if ( maxLevel > 0 ) {\n registerSection(\"spell0\", 0, CONFIG.DND5E.spellLevels[0]);\n for (let lvl = 1; lvl <= maxLevel; lvl++) {\n const sl = `spell${lvl}`;\n registerSection(sl, lvl, CONFIG.DND5E.spellLevels[lvl], levels[sl]);\n }\n }\n\n // Pact magic users have cantrips and a pact magic section\n if ( levels.pact && levels.pact.max ) {\n if ( !spellbook[\"0\"] ) registerSection(\"spell0\", 0, CONFIG.DND5E.spellLevels[0]);\n const l = levels.pact;\n const config = CONFIG.DND5E.spellPreparationModes.pact;\n const level = game.i18n.localize(`DND5E.SpellLevel${levels.pact.level}`);\n const label = `${config} — ${level}`;\n registerSection(\"pact\", sections.pact, label, {\n prepMode: \"pact\",\n value: l.value,\n max: l.max,\n override: l.override\n });\n }\n\n // Iterate over every spell item, adding spells to the spellbook by section\n spells.forEach(spell => {\n const mode = spell.system.preparation.mode || \"prepared\";\n let s = spell.system.level || 0;\n const sl = `spell${s}`;\n\n // Specialized spellcasting modes (if they exist)\n if ( mode in sections ) {\n s = sections[mode];\n if ( !spellbook[s] ) {\n const l = levels[mode] || {};\n const config = CONFIG.DND5E.spellPreparationModes[mode];\n registerSection(mode, s, config, {\n prepMode: mode,\n value: l.value,\n max: l.max,\n override: l.override\n });\n }\n }\n\n // Sections for higher-level spells which the caster \"should not\" have, but spell items exist for\n else if ( !spellbook[s] ) {\n registerSection(sl, s, CONFIG.DND5E.spellLevels[s], {levels: levels[sl]});\n }\n\n // Add the spell to the relevant heading\n spellbook[s].spells.push(spell);\n });\n\n // Sort the spellbook by section level\n const sorted = Object.values(spellbook);\n sorted.sort((a, b) => a.order - b.order);\n return sorted;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Determine whether an Owned Item will be shown based on the current set of filters.\n * @param {object[]} items Copies of item data to be filtered.\n * @param {Set} filters Filters applied to the item list.\n * @returns {object[]} Subset of input items limited by the provided filters.\n * @protected\n */\n _filterItems(items, filters) {\n return items.filter(item => {\n\n // Action usage\n for ( let f of [\"action\", \"bonus\", \"reaction\"] ) {\n if ( filters.has(f) && (item.system.activation?.type !== f) ) return false;\n }\n\n // Spell-specific filters\n if ( filters.has(\"ritual\") && (item.system.components.ritual !== true) ) return false;\n if ( filters.has(\"concentration\") && (item.system.components.concentration !== true) ) return false;\n if ( filters.has(\"prepared\") ) {\n if ( (item.system.level === 0) || [\"innate\", \"always\"].includes(item.system.preparation.mode) ) return true;\n if ( this.actor.type === \"npc\" ) return true;\n return item.system.preparation.prepared;\n }\n\n // Equipment-specific filters\n if ( filters.has(\"equipped\") && (item.system.equipped !== true) ) return false;\n return true;\n });\n }\n\n /* -------------------------------------------- */\n\n /**\n * Get the font-awesome icon used to display a certain level of skill proficiency.\n * @param {number} level A proficiency mode defined in `CONFIG.DND5E.proficiencyLevels`.\n * @returns {string} HTML string for the chosen icon.\n * @private\n */\n _getProficiencyIcon(level) {\n const icons = {\n 0: '',\n 0.5: '',\n 1: '',\n 2: ''\n };\n return icons[level] || icons[0];\n }\n\n /* -------------------------------------------- */\n /* Event Listeners and Handlers */\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n activateListeners(html) {\n // Activate Item Filters\n const filterLists = html.find(\".filter-list\");\n filterLists.each(this._initializeFilterItemList.bind(this));\n filterLists.on(\"click\", \".filter-item\", this._onToggleFilter.bind(this));\n\n // Item summaries\n html.find(\".item .item-name.rollable h4\").click(event => this._onItemSummary(event));\n\n // View Item Sheets\n html.find(\".item-edit\").click(this._onItemEdit.bind(this));\n\n // Property attributions\n html.find(\"[data-attribution]\").mouseover(this._onPropertyAttribution.bind(this));\n html.find(\".attributable\").mouseover(this._onPropertyAttribution.bind(this));\n\n // Preparation Warnings\n html.find(\".warnings\").click(this._onWarningLink.bind(this));\n\n // Editable Only Listeners\n if ( this.isEditable ) {\n // Input focus and update\n const inputs = html.find(\"input\");\n inputs.focus(ev => ev.currentTarget.select());\n inputs.addBack().find('[type=\"text\"][data-dtype=\"Number\"]').change(this._onChangeInputDelta.bind(this));\n\n // Ability Proficiency\n html.find(\".ability-proficiency\").click(this._onToggleAbilityProficiency.bind(this));\n\n // Toggle Skill Proficiency\n html.find(\".skill-proficiency\").on(\"click contextmenu\", event => this._onCycleProficiency(event, \"skill\"));\n\n // Toggle Tool Proficiency\n html.find(\".tool-proficiency\").on(\"click contextmenu\", event => this._onCycleProficiency(event, \"tool\"));\n\n // Trait Selector\n html.find(\".trait-selector\").click(this._onTraitSelector.bind(this));\n\n // Configure Special Flags\n html.find(\".config-button\").click(this._onConfigMenu.bind(this));\n\n // Owned Item management\n html.find(\".item-create\").click(this._onItemCreate.bind(this));\n html.find(\".item-delete\").click(this._onItemDelete.bind(this));\n html.find(\".item-uses input\").click(ev => ev.target.select()).change(this._onUsesChange.bind(this));\n html.find(\".slot-max-override\").click(this._onSpellSlotOverride.bind(this));\n\n // Active Effect management\n html.find(\".effect-control\").click(ev => ActiveEffect5e.onManageActiveEffect(ev, this.actor));\n this._disableOverriddenFields(html);\n }\n\n // Owner Only Listeners\n if ( this.actor.isOwner ) {\n\n // Ability Checks\n html.find(\".ability-name\").click(this._onRollAbilityTest.bind(this));\n\n // Roll Skill Checks\n html.find(\".skill-name\").click(this._onRollSkillCheck.bind(this));\n\n // Roll Tool Checks.\n html.find(\".tool-name\").on(\"click\", this._onRollToolCheck.bind(this));\n\n // Item Rolling\n html.find(\".rollable .item-image\").click(event => this._onItemUse(event));\n html.find(\".item .item-recharge\").click(event => this._onItemRecharge(event));\n\n // Item Context Menu\n new ContextMenu(html, \".item-list .item\", [], {onOpen: this._onItemContext.bind(this)});\n }\n\n // Otherwise, remove rollable classes\n else {\n html.find(\".rollable\").each((i, el) => el.classList.remove(\"rollable\"));\n }\n\n // Handle default listeners last so system listeners are triggered first\n super.activateListeners(html);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Disable any fields that are overridden by active effects and display an informative tooltip.\n * @param {jQuery} html The sheet's rendered HTML.\n * @protected\n */\n _disableOverriddenFields(html) {\n const proficiencyToggles = {\n ability: /system\\.abilities\\.([^.]+)\\.proficient/,\n skill: /system\\.skills\\.([^.]+)\\.value/,\n tool: /system\\.tools\\.([^.]+)\\.value/\n };\n\n for ( const override of Object.keys(foundry.utils.flattenObject(this.actor.overrides)) ) {\n html.find(`input[name=\"${override}\"],select[name=\"${override}\"]`).each((i, el) => {\n el.disabled = true;\n el.dataset.tooltip = \"DND5E.ActiveEffectOverrideWarning\";\n });\n\n for ( const [key, regex] of Object.entries(proficiencyToggles) ) {\n const [, match] = override.match(regex) || [];\n if ( match ) {\n const toggle = html.find(`li[data-${key}=\"${match}\"] .proficiency-toggle`);\n toggle.addClass(\"disabled\");\n toggle.attr(\"data-tooltip\", \"DND5E.ActiveEffectOverrideWarning\");\n }\n }\n\n const [, spell] = override.match(/system\\.spells\\.(spell\\d)\\.override/) || [];\n if ( spell ) {\n html.find(`.spell-max[data-level=\"${spell}\"]`).attr(\"data-tooltip\", \"DND5E.ActiveEffectOverrideWarning\");\n }\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle activation of a context menu for an embedded Item or ActiveEffect document.\n * Dynamically populate the array of context menu options.\n * @param {HTMLElement} element The HTML element for which the context menu is activated\n * @protected\n */\n _onItemContext(element) {\n\n // Active Effects\n if ( element.classList.contains(\"effect\") ) {\n const effect = this.actor.effects.get(element.dataset.effectId);\n if ( !effect ) return;\n ui.context.menuItems = this._getActiveEffectContextOptions(effect);\n Hooks.call(\"dnd5e.getActiveEffectContextOptions\", effect, ui.context.menuItems);\n }\n\n // Items\n else {\n const item = this.actor.items.get(element.dataset.itemId);\n if ( !item ) return;\n ui.context.menuItems = this._getItemContextOptions(item);\n Hooks.call(\"dnd5e.getItemContextOptions\", item, ui.context.menuItems);\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare an array of context menu options which are available for owned ActiveEffect documents.\n * @param {ActiveEffect5e} effect The ActiveEffect for which the context menu is activated\n * @returns {ContextMenuEntry[]} An array of context menu options offered for the ActiveEffect\n * @protected\n */\n _getActiveEffectContextOptions(effect) {\n return [\n {\n name: \"DND5E.ContextMenuActionEdit\",\n icon: \"\",\n callback: () => effect.sheet.render(true)\n },\n {\n name: \"DND5E.ContextMenuActionDuplicate\",\n icon: \"\",\n callback: () => effect.clone({label: game.i18n.format(\"DOCUMENT.CopyOf\", {name: effect.label})}, {save: true})\n },\n {\n name: \"DND5E.ContextMenuActionDelete\",\n icon: \"\",\n callback: () => effect.deleteDialog()\n },\n {\n name: effect.disabled ? \"DND5E.ContextMenuActionEnable\" : \"DND5E.ContextMenuActionDisable\",\n icon: effect.disabled ? \"\" : \"\",\n callback: () => effect.update({disabled: !effect.disabled})\n }\n ];\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare an array of context menu options which are available for owned Item documents.\n * @param {Item5e} item The Item for which the context menu is activated\n * @returns {ContextMenuEntry[]} An array of context menu options offered for the Item\n * @protected\n */\n _getItemContextOptions(item) {\n\n // Standard Options\n const options = [\n {\n name: \"DND5E.ContextMenuActionEdit\",\n icon: \"\",\n callback: () => item.sheet.render(true)\n },\n {\n name: \"DND5E.ContextMenuActionDuplicate\",\n icon: \"\",\n condition: () => ![\"race\", \"background\", \"class\", \"subclass\"].includes(item.type),\n callback: () => item.clone({name: game.i18n.format(\"DOCUMENT.CopyOf\", {name: item.name})}, {save: true})\n },\n {\n name: \"DND5E.ContextMenuActionDelete\",\n icon: \"\",\n callback: () => item.deleteDialog()\n }\n ];\n\n // Toggle Attunement State\n if ( (\"attunement\" in item.system) && (item.system.attunement !== CONFIG.DND5E.attunementTypes.NONE) ) {\n const isAttuned = item.system.attunement === CONFIG.DND5E.attunementTypes.ATTUNED;\n options.push({\n name: isAttuned ? \"DND5E.ContextMenuActionUnattune\" : \"DND5E.ContextMenuActionAttune\",\n icon: \"\",\n callback: () => item.update({\n \"system.attunement\": CONFIG.DND5E.attunementTypes[isAttuned ? \"REQUIRED\" : \"ATTUNED\"]\n })\n });\n }\n\n // Toggle Equipped State\n if ( \"equipped\" in item.system ) options.push({\n name: item.system.equipped ? \"DND5E.ContextMenuActionUnequip\" : \"DND5E.ContextMenuActionEquip\",\n icon: \"\",\n callback: () => item.update({\"system.equipped\": !item.system.equipped})\n });\n\n // Toggle Prepared State\n if ( (\"preparation\" in item.system) && (item.system.preparation?.mode === \"prepared\") ) options.push({\n name: item.system?.preparation?.prepared ? \"DND5E.ContextMenuActionUnprepare\" : \"DND5E.ContextMenuActionPrepare\",\n icon: \"\",\n callback: () => item.update({\"system.preparation.prepared\": !item.system.preparation?.prepared})\n });\n return options;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Initialize Item list filters by activating the set of filters which are currently applied\n * @param {number} i Index of the filter in the list.\n * @param {HTML} ul HTML object for the list item surrounding the filter.\n * @private\n */\n _initializeFilterItemList(i, ul) {\n const set = this._filters[ul.dataset.filter];\n const filters = ul.querySelectorAll(\".filter-item\");\n for ( let li of filters ) {\n if ( set.has(li.dataset.filter) ) li.classList.add(\"active\");\n }\n }\n\n /* -------------------------------------------- */\n /* Event Listeners and Handlers */\n /* -------------------------------------------- */\n\n /**\n * Handle input changes to numeric form fields, allowing them to accept delta-typed inputs.\n * @param {Event} event Triggering event.\n * @protected\n */\n _onChangeInputDelta(event) {\n const input = event.target;\n const value = input.value;\n if ( [\"+\", \"-\"].includes(value[0]) ) {\n const delta = parseFloat(value);\n input.value = Number(foundry.utils.getProperty(this.actor, input.name)) + delta;\n } else if ( value[0] === \"=\" ) input.value = value.slice(1);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle spawning the TraitSelector application which allows a checkbox of multiple trait options.\n * @param {Event} event The click event which originated the selection.\n * @private\n */\n _onConfigMenu(event) {\n event.preventDefault();\n event.stopPropagation();\n const button = event.currentTarget;\n let app;\n switch ( button.dataset.action ) {\n case \"armor\":\n app = new ActorArmorConfig(this.actor);\n break;\n case \"hit-dice\":\n app = new ActorHitDiceConfig(this.actor);\n break;\n case \"hit-points\":\n app = new ActorHitPointsConfig(this.actor);\n break;\n case \"initiative\":\n app = new ActorInitiativeConfig(this.actor);\n break;\n case \"movement\":\n app = new ActorMovementConfig(this.actor);\n break;\n case \"flags\":\n app = new ActorSheetFlags(this.actor);\n break;\n case \"senses\":\n app = new ActorSensesConfig(this.actor);\n break;\n case \"type\":\n app = new ActorTypeConfig(this.actor);\n break;\n case \"ability\": {\n const ability = event.currentTarget.closest(\"[data-ability]\").dataset.ability;\n app = new ActorAbilityConfig(this.actor, null, ability);\n break;\n }\n case \"skill\": {\n const skill = event.currentTarget.closest(\"[data-key]\").dataset.key;\n app = new ProficiencyConfig(this.actor, {property: \"skills\", key: skill});\n break;\n }\n case \"tool\": {\n const tool = event.currentTarget.closest(\"[data-key]\").dataset.key;\n app = new ProficiencyConfig(this.actor, {property: \"tools\", key: tool});\n break;\n }\n }\n app?.render(true);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle cycling proficiency in a skill or tool.\n * @param {Event} event A click or contextmenu event which triggered this action.\n * @returns {Promise|void} Updated data for this actor after changes are applied.\n * @protected\n */\n _onCycleProficiency(event) {\n if ( event.currentTarget.classList.contains(\"disabled\") ) return;\n event.preventDefault();\n const parent = event.currentTarget.closest(\".proficiency-row\");\n const field = parent.querySelector('[name$=\".value\"]');\n const {property, key} = parent.dataset;\n const value = this.actor._source.system[property]?.[key]?.value ?? 0;\n\n // Cycle to the next or previous skill level.\n const levels = [0, 1, .5, 2];\n const idx = levels.indexOf(value);\n const next = idx + (event.type === \"contextmenu\" ? 3 : 1);\n field.value = levels[next % levels.length];\n\n // Update the field value and save the form.\n return this._onSubmit(event);\n }\n\n /* -------------------------------------------- */\n\n /** @override */\n async _onDropActor(event, data) {\n const canPolymorph = game.user.isGM || (this.actor.isOwner && game.settings.get(\"dnd5e\", \"allowPolymorphing\"));\n if ( !canPolymorph ) return false;\n\n // Get the target actor\n const cls = getDocumentClass(\"Actor\");\n const sourceActor = await cls.fromDropData(data);\n if ( !sourceActor ) return;\n\n // Define a function to record polymorph settings for future use\n const rememberOptions = html => {\n const options = {};\n html.find(\"input\").each((i, el) => {\n options[el.name] = el.checked;\n });\n const settings = foundry.utils.mergeObject(game.settings.get(\"dnd5e\", \"polymorphSettings\") ?? {}, options);\n game.settings.set(\"dnd5e\", \"polymorphSettings\", settings);\n return settings;\n };\n\n // Create and render the Dialog\n return new Dialog({\n title: game.i18n.localize(\"DND5E.PolymorphPromptTitle\"),\n content: {\n options: game.settings.get(\"dnd5e\", \"polymorphSettings\"),\n settings: CONFIG.DND5E.polymorphSettings,\n effectSettings: CONFIG.DND5E.polymorphEffectSettings,\n isToken: this.actor.isToken\n },\n default: \"accept\",\n buttons: {\n accept: {\n icon: '',\n label: game.i18n.localize(\"DND5E.PolymorphAcceptSettings\"),\n callback: html => this.actor.transformInto(sourceActor, rememberOptions(html))\n },\n wildshape: {\n icon: CONFIG.DND5E.transformationPresets.wildshape.icon,\n label: CONFIG.DND5E.transformationPresets.wildshape.label,\n callback: html => this.actor.transformInto(sourceActor, foundry.utils.mergeObject(\n CONFIG.DND5E.transformationPresets.wildshape.options,\n { transformTokens: rememberOptions(html).transformTokens }\n ))\n },\n polymorph: {\n icon: CONFIG.DND5E.transformationPresets.polymorph.icon,\n label: CONFIG.DND5E.transformationPresets.polymorph.label,\n callback: html => this.actor.transformInto(sourceActor, foundry.utils.mergeObject(\n CONFIG.DND5E.transformationPresets.polymorph.options,\n { transformTokens: rememberOptions(html).transformTokens }\n ))\n },\n self: {\n icon: CONFIG.DND5E.transformationPresets.polymorphSelf.icon,\n label: CONFIG.DND5E.transformationPresets.polymorphSelf.label,\n callback: html => this.actor.transformInto(sourceActor, foundry.utils.mergeObject(\n CONFIG.DND5E.transformationPresets.polymorphSelf.options,\n { transformTokens: rememberOptions(html).transformTokens }\n ))\n },\n cancel: {\n icon: '',\n label: game.i18n.localize(\"Cancel\")\n }\n }\n }, {\n classes: [\"dialog\", \"dnd5e\", \"polymorph\"],\n width: 900,\n template: \"systems/dnd5e/templates/apps/polymorph-prompt.hbs\"\n }).render(true);\n }\n\n /* -------------------------------------------- */\n\n /** @override */\n async _onDropItemCreate(itemData) {\n let items = itemData instanceof Array ? itemData : [itemData];\n const itemsWithoutAdvancement = items.filter(i => !i.system.advancement?.length);\n const multipleAdvancements = (items.length - itemsWithoutAdvancement.length) > 1;\n if ( multipleAdvancements && !game.settings.get(\"dnd5e\", \"disableAdvancements\") ) {\n ui.notifications.warn(game.i18n.format(\"DND5E.WarnCantAddMultipleAdvancements\"));\n items = itemsWithoutAdvancement;\n }\n\n const toCreate = [];\n for ( const item of items ) {\n const result = await this._onDropSingleItem(item);\n if ( result ) toCreate.push(result);\n }\n\n // Create the owned items as normal\n return this.actor.createEmbeddedDocuments(\"Item\", toCreate);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handles dropping of a single item onto this character sheet.\n * @param {object} itemData The item data to create.\n * @returns {Promise} The item data to create after processing, or false if the item should not be\n * created or creation has been otherwise handled.\n * @protected\n */\n async _onDropSingleItem(itemData) {\n\n // Check to make sure items of this type are allowed on this actor\n if ( this.constructor.unsupportedItemTypes.has(itemData.type) ) {\n ui.notifications.warn(game.i18n.format(\"DND5E.ActorWarningInvalidItem\", {\n itemType: game.i18n.localize(CONFIG.Item.typeLabels[itemData.type]),\n actorType: game.i18n.localize(CONFIG.Actor.typeLabels[this.actor.type])\n }));\n return false;\n }\n\n // Create a Consumable spell scroll on the Inventory tab\n if ( (itemData.type === \"spell\")\n && (this._tabs[0].active === \"inventory\" || this.actor.type === \"vehicle\") ) {\n const scroll = await Item5e.createScrollFromSpell(itemData);\n return scroll.toObject();\n }\n\n // Clean up data\n this._onDropResetData(itemData);\n\n // Stack identical consumables\n const stacked = this._onDropStackConsumables(itemData);\n if ( stacked ) return false;\n\n // Bypass normal creation flow for any items with advancement\n if ( itemData.system.advancement?.length && !game.settings.get(\"dnd5e\", \"disableAdvancements\") ) {\n const manager = AdvancementManager.forNewItem(this.actor, itemData);\n if ( manager.steps.length ) {\n manager.render(true);\n return false;\n }\n }\n return itemData;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Reset certain pieces of data stored on items when they are dropped onto the actor.\n * @param {object} itemData The item data requested for creation. **Will be mutated.**\n */\n _onDropResetData(itemData) {\n if ( !itemData.system ) return;\n [\"equipped\", \"proficient\", \"prepared\"].forEach(k => delete itemData.system[k]);\n if ( \"attunement\" in itemData.system ) {\n itemData.system.attunement = Math.min(itemData.system.attunement, CONFIG.DND5E.attunementTypes.REQUIRED);\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * Stack identical consumables when a new one is dropped rather than creating a duplicate item.\n * @param {object} itemData The item data requested for creation.\n * @returns {Promise|null} If a duplicate was found, returns the adjusted item stack.\n */\n _onDropStackConsumables(itemData) {\n const droppedSourceId = itemData.flags.core?.sourceId;\n if ( itemData.type !== \"consumable\" || !droppedSourceId ) return null;\n const similarItem = this.actor.items.find(i => {\n const sourceId = i.getFlag(\"core\", \"sourceId\");\n return sourceId && (sourceId === droppedSourceId) && (i.type === \"consumable\") && (i.name === itemData.name);\n });\n if ( !similarItem ) return null;\n return similarItem.update({\n \"system.quantity\": similarItem.system.quantity + Math.max(itemData.system.quantity, 1)\n });\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle enabling editing for a spell slot override value.\n * @param {MouseEvent} event The originating click event.\n * @private\n */\n async _onSpellSlotOverride(event) {\n const span = event.currentTarget.parentElement;\n const level = span.dataset.level;\n const override = this.actor.system.spells[level].override || span.dataset.slots;\n const input = document.createElement(\"INPUT\");\n input.type = \"text\";\n input.name = `system.spells.${level}.override`;\n input.value = override;\n input.placeholder = span.dataset.slots;\n input.dataset.dtype = \"Number\";\n\n // Replace the HTML\n const parent = span.parentElement;\n parent.removeChild(span);\n parent.appendChild(input);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Change the uses amount of an Owned Item within the Actor.\n * @param {Event} event The triggering click event.\n * @returns {Promise} Updated item.\n * @private\n */\n async _onUsesChange(event) {\n event.preventDefault();\n const itemId = event.currentTarget.closest(\".item\").dataset.itemId;\n const item = this.actor.items.get(itemId);\n const uses = Math.clamped(0, parseInt(event.target.value), item.system.uses.max);\n event.target.value = uses;\n return item.update({\"system.uses.value\": uses});\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle using an item from the Actor sheet, obtaining the Item instance, and dispatching to its use method.\n * @param {Event} event The triggering click event.\n * @returns {Promise} Results of the usage.\n * @protected\n */\n _onItemUse(event) {\n event.preventDefault();\n const itemId = event.currentTarget.closest(\".item\").dataset.itemId;\n const item = this.actor.items.get(itemId);\n return item.use({}, {event});\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle attempting to recharge an item usage by rolling a recharge check.\n * @param {Event} event The originating click event.\n * @returns {Promise} The resulting recharge roll.\n * @private\n */\n _onItemRecharge(event) {\n event.preventDefault();\n const itemId = event.currentTarget.closest(\".item\").dataset.itemId;\n const item = this.actor.items.get(itemId);\n return item.rollRecharge();\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle toggling and items expanded description.\n * @param {Event} event Triggering event.\n * @private\n */\n async _onItemSummary(event) {\n event.preventDefault();\n const li = $(event.currentTarget).parents(\".item\");\n const item = this.actor.items.get(li.data(\"item-id\"));\n const chatData = await item.getChatData({secrets: this.actor.isOwner});\n\n // Toggle summary\n if ( li.hasClass(\"expanded\") ) {\n const summary = li.children(\".item-summary\");\n summary.slideUp(200, () => summary.remove());\n this._expanded.delete(item.id);\n } else {\n const summary = $(await renderTemplate(\"systems/dnd5e/templates/items/parts/item-summary.hbs\", chatData));\n li.append(summary.hide());\n summary.slideDown(200);\n this._expanded.add(item.id);\n }\n li.toggleClass(\"expanded\");\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle creating a new Owned Item for the actor using initial data defined in the HTML dataset.\n * @param {Event} event The originating click event.\n * @returns {Promise} The newly created item.\n * @private\n */\n _onItemCreate(event) {\n event.preventDefault();\n const header = event.currentTarget;\n const type = header.dataset.type;\n\n // Check to make sure the newly created class doesn't take player over level cap\n if ( type === \"class\" && (this.actor.system.details.level + 1 > CONFIG.DND5E.maxLevel) ) {\n const err = game.i18n.format(\"DND5E.MaxCharacterLevelExceededWarn\", {max: CONFIG.DND5E.maxLevel});\n return ui.notifications.error(err);\n }\n\n const itemData = {\n name: game.i18n.format(\"DND5E.ItemNew\", {type: game.i18n.localize(CONFIG.Item.typeLabels[type])}),\n type: type,\n system: foundry.utils.expandObject({ ...header.dataset })\n };\n delete itemData.system.type;\n return this.actor.createEmbeddedDocuments(\"Item\", [itemData]);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle editing an existing Owned Item for the Actor.\n * @param {Event} event The originating click event.\n * @returns {ItemSheet5e} The rendered item sheet.\n * @private\n */\n _onItemEdit(event) {\n event.preventDefault();\n const li = event.currentTarget.closest(\".item\");\n const item = this.actor.items.get(li.dataset.itemId);\n return item.sheet.render(true);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle deleting an existing Owned Item for the Actor.\n * @param {Event} event The originating click event.\n * @returns {Promise|undefined} The deleted item if something was deleted or the\n * advancement manager if advancements need removing.\n * @private\n */\n async _onItemDelete(event) {\n event.preventDefault();\n const li = event.currentTarget.closest(\".item\");\n const item = this.actor.items.get(li.dataset.itemId);\n if ( !item ) return;\n\n // If item has advancement, handle it separately\n if ( !game.settings.get(\"dnd5e\", \"disableAdvancements\") ) {\n const manager = AdvancementManager.forDeletedItem(this.actor, item.id);\n if ( manager.steps.length ) {\n if ( [\"class\", \"subclass\"].includes(item.type) ) {\n try {\n const shouldRemoveAdvancements = await AdvancementConfirmationDialog.forDelete(item);\n if ( shouldRemoveAdvancements ) return manager.render(true);\n } catch(err) {\n return;\n }\n } else {\n return manager.render(true);\n }\n }\n }\n\n return item.deleteDialog();\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle displaying the property attribution tooltip when a property is hovered over.\n * @param {Event} event The originating mouse event.\n * @private\n */\n async _onPropertyAttribution(event) {\n const element = event.target;\n let property = element.dataset.attribution;\n if ( !property ) {\n property = element.dataset.property;\n if ( !property ) return;\n foundry.utils.logCompatibilityWarning(\n \"Defining attributable properties on sheets with the `.attributable` class and `data-property` value\"\n + \" has been deprecated in favor of a single `data-attribution` value.\",\n { since: \"DnD5e 2.1.3\", until: \"DnD5e 2.4\" }\n );\n }\n\n const rollData = this.actor.getRollData({ deterministic: true });\n const title = game.i18n.localize(element.dataset.attributionCaption);\n let attributions;\n switch ( property ) {\n case \"attributes.ac\":\n attributions = this._prepareArmorClassAttribution(rollData); break;\n }\n if ( !attributions ) return;\n new PropertyAttribution(this.actor, attributions, property, {title}).renderTooltip(element);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle rolling an Ability test or saving throw.\n * @param {Event} event The originating click event.\n * @private\n */\n _onRollAbilityTest(event) {\n event.preventDefault();\n let ability = event.currentTarget.parentElement.dataset.ability;\n this.actor.rollAbility(ability, {event: event});\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle rolling a Skill check.\n * @param {Event} event The originating click event.\n * @returns {Promise} The resulting roll.\n * @private\n */\n _onRollSkillCheck(event) {\n event.preventDefault();\n const skill = event.currentTarget.closest(\"[data-key]\").dataset.key;\n return this.actor.rollSkill(skill, {event: event});\n }\n\n /* -------------------------------------------- */\n\n _onRollToolCheck(event) {\n event.preventDefault();\n const tool = event.currentTarget.closest(\"[data-key]\").dataset.key;\n return this.actor.rollToolCheck(tool, {event});\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle toggling Ability score proficiency level.\n * @param {Event} event The originating click event.\n * @returns {Promise|void} Updated actor instance.\n * @private\n */\n _onToggleAbilityProficiency(event) {\n if ( event.currentTarget.classList.contains(\"disabled\") ) return;\n event.preventDefault();\n const field = event.currentTarget.previousElementSibling;\n return this.actor.update({[field.name]: 1 - parseInt(field.value)});\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle toggling of filters to display a different set of owned items.\n * @param {Event} event The click event which triggered the toggle.\n * @returns {ActorSheet5e} This actor sheet with toggled filters.\n * @private\n */\n _onToggleFilter(event) {\n event.preventDefault();\n const li = event.currentTarget;\n const set = this._filters[li.parentElement.dataset.filter];\n const filter = li.dataset.filter;\n if ( set.has(filter) ) set.delete(filter);\n else set.add(filter);\n return this.render();\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle spawning the TraitSelector application which allows a checkbox of multiple trait options.\n * @param {Event} event The click event which originated the selection.\n * @returns {TraitSelector} Newly displayed application.\n * @private\n */\n _onTraitSelector(event) {\n event.preventDefault();\n const trait = event.currentTarget.dataset.trait;\n if ( trait === \"tool\" ) return new ToolSelector(this.actor, trait).render(true);\n return new TraitSelector(this.actor, trait).render(true);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle links within preparation warnings.\n * @param {Event} event The click event on the warning.\n * @protected\n */\n async _onWarningLink(event) {\n event.preventDefault();\n const a = event.target;\n if ( !a || !a.dataset.target ) return;\n switch ( a.dataset.target ) {\n case \"armor\":\n (new ActorArmorConfig(this.actor)).render(true);\n return;\n default:\n const item = await fromUuid(a.dataset.target);\n item?.sheet.render(true);\n }\n }\n\n /* -------------------------------------------- */\n\n /** @override */\n _getHeaderButtons() {\n let buttons = super._getHeaderButtons();\n if ( this.actor.isPolymorphed ) {\n buttons.unshift({\n label: \"DND5E.PolymorphRestoreTransformation\",\n class: \"restore-transformation\",\n icon: \"fas fa-backward\",\n onclick: () => this.actor.revertOriginalForm()\n });\n }\n return buttons;\n }\n}\n","import ActorSheet5e from \"./base-sheet.mjs\";\nimport AdvancementConfirmationDialog from \"../advancement/advancement-confirmation-dialog.mjs\";\nimport AdvancementManager from \"../advancement/advancement-manager.mjs\";\n\n/**\n * An Actor sheet for player character type actors.\n */\nexport default class ActorSheet5eCharacter extends ActorSheet5e {\n\n /** @inheritDoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n classes: [\"dnd5e\", \"sheet\", \"actor\", \"character\"]\n });\n }\n\n /* -------------------------------------------- */\n /* Context Preparation */\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n async getData(options={}) {\n const context = await super.getData(options);\n\n // Resources\n context.resources = [\"primary\", \"secondary\", \"tertiary\"].reduce((arr, r) => {\n const res = context.actor.system.resources[r] || {};\n res.name = r;\n res.placeholder = game.i18n.localize(`DND5E.Resource${r.titleCase()}`);\n if (res && res.value === 0) delete res.value;\n if (res && res.max === 0) delete res.max;\n return arr.concat([res]);\n }, []);\n\n const classes = this.actor.itemTypes.class;\n return foundry.utils.mergeObject(context, {\n disableExperience: game.settings.get(\"dnd5e\", \"disableExperienceTracking\"),\n classLabels: classes.map(c => c.name).join(\", \"),\n multiclassLabels: classes.map(c => [c.subclass?.name ?? \"\", c.name, c.system.levels].filterJoin(\" \")).join(\", \"),\n weightUnit: game.i18n.localize(`DND5E.Abbreviation${\n game.settings.get(\"dnd5e\", \"metricWeightUnits\") ? \"Kg\" : \"Lbs\"}`),\n encumbrance: context.system.attributes.encumbrance\n });\n }\n\n /* -------------------------------------------- */\n\n /** @override */\n _prepareItems(context) {\n\n // Categorize items as inventory, spellbook, features, and classes\n const inventory = {};\n for ( const type of [\"weapon\", \"equipment\", \"consumable\", \"tool\", \"backpack\", \"loot\"] ) {\n inventory[type] = {label: `${CONFIG.Item.typeLabels[type]}Pl`, items: [], dataset: {type}};\n }\n\n // Partition items by category\n let {items, spells, feats, backgrounds, classes, subclasses} = context.items.reduce((obj, item) => {\n const {quantity, uses, recharge, target} = item.system;\n\n // Item details\n const ctx = context.itemContext[item.id] ??= {};\n ctx.isStack = Number.isNumeric(quantity) && (quantity !== 1);\n ctx.attunement = {\n [CONFIG.DND5E.attunementTypes.REQUIRED]: {\n icon: \"fa-sun\",\n cls: \"not-attuned\",\n title: \"DND5E.AttunementRequired\"\n },\n [CONFIG.DND5E.attunementTypes.ATTUNED]: {\n icon: \"fa-sun\",\n cls: \"attuned\",\n title: \"DND5E.AttunementAttuned\"\n }\n }[item.system.attunement];\n\n // Prepare data needed to display expanded sections\n ctx.isExpanded = this._expanded.has(item.id);\n\n // Item usage\n ctx.hasUses = uses && (uses.max > 0);\n ctx.isOnCooldown = recharge && !!recharge.value && (recharge.charged === false);\n ctx.isDepleted = ctx.isOnCooldown && (uses.per && (uses.value > 0));\n ctx.hasTarget = !!target && !([\"none\", \"\"].includes(target.type));\n\n // Item toggle state\n this._prepareItemToggleState(item, ctx);\n\n // Classify items into types\n if ( item.type === \"spell\" ) obj.spells.push(item);\n else if ( item.type === \"feat\" ) obj.feats.push(item);\n else if ( item.type === \"background\" ) obj.backgrounds.push(item);\n else if ( item.type === \"class\" ) obj.classes.push(item);\n else if ( item.type === \"subclass\" ) obj.subclasses.push(item);\n else if ( Object.keys(inventory).includes(item.type) ) obj.items.push(item);\n return obj;\n }, { items: [], spells: [], feats: [], backgrounds: [], classes: [], subclasses: [] });\n\n // Apply active item filters\n items = this._filterItems(items, this._filters.inventory);\n spells = this._filterItems(spells, this._filters.spellbook);\n feats = this._filterItems(feats, this._filters.features);\n\n // Organize items\n for ( let i of items ) {\n const ctx = context.itemContext[i.id] ??= {};\n ctx.totalWeight = (i.system.quantity * i.system.weight).toNearest(0.1);\n inventory[i.type].items.push(i);\n }\n\n // Organize Spellbook and count the number of prepared spells (excluding always, at will, etc...)\n const spellbook = this._prepareSpellbook(context, spells);\n const nPrepared = spells.filter(spell => {\n const prep = spell.system.preparation;\n return (spell.system.level > 0) && (prep.mode === \"prepared\") && prep.prepared;\n }).length;\n\n // Sort classes and interleave matching subclasses, put unmatched subclasses into features so they don't disappear\n classes.sort((a, b) => b.system.levels - a.system.levels);\n const maxLevelDelta = CONFIG.DND5E.maxLevel - this.actor.system.details.level;\n classes = classes.reduce((arr, cls) => {\n const ctx = context.itemContext[cls.id] ??= {};\n ctx.availableLevels = Array.fromRange(CONFIG.DND5E.maxLevel + 1).slice(1).map(level => {\n const delta = level - cls.system.levels;\n return { level, delta, disabled: delta > maxLevelDelta };\n });\n arr.push(cls);\n const identifier = cls.system.identifier || cls.name.slugify({strict: true});\n const subclass = subclasses.findSplice(s => s.system.classIdentifier === identifier);\n if ( subclass ) arr.push(subclass);\n return arr;\n }, []);\n for ( const subclass of subclasses ) {\n feats.push(subclass);\n const message = game.i18n.format(\"DND5E.SubclassMismatchWarn\", {\n name: subclass.name, class: subclass.system.classIdentifier\n });\n context.warnings.push({ message, type: \"warning\" });\n }\n\n // Organize Features\n const features = {\n background: {\n label: CONFIG.Item.typeLabels.background, items: backgrounds,\n hasActions: false, dataset: {type: \"background\"} },\n classes: {\n label: `${CONFIG.Item.typeLabels.class}Pl`, items: classes,\n hasActions: false, dataset: {type: \"class\"}, isClass: true },\n active: {\n label: \"DND5E.FeatureActive\", items: [],\n hasActions: true, dataset: {type: \"feat\", \"activation.type\": \"action\"} },\n passive: {\n label: \"DND5E.FeaturePassive\", items: [],\n hasActions: false, dataset: {type: \"feat\"} }\n };\n for ( const feat of feats ) {\n if ( feat.system.activation?.type ) features.active.items.push(feat);\n else features.passive.items.push(feat);\n }\n\n // Assign and return\n context.inventoryFilters = true;\n context.inventory = Object.values(inventory);\n context.spellbook = spellbook;\n context.preparedSpells = nPrepared;\n context.features = Object.values(features);\n context.labels.background = backgrounds[0]?.name;\n }\n\n /* -------------------------------------------- */\n\n /**\n * A helper method to establish the displayed preparation state for an item.\n * @param {Item5e} item Item being prepared for display.\n * @param {object} context Context data for display.\n * @protected\n */\n _prepareItemToggleState(item, context) {\n if ( item.type === \"spell\" ) {\n const prep = item.system.preparation || {};\n const isAlways = prep.mode === \"always\";\n const isPrepared = !!prep.prepared;\n context.toggleClass = isPrepared ? \"active\" : \"\";\n if ( isAlways ) context.toggleClass = \"fixed\";\n if ( isAlways ) context.toggleTitle = CONFIG.DND5E.spellPreparationModes.always;\n else if ( isPrepared ) context.toggleTitle = CONFIG.DND5E.spellPreparationModes.prepared;\n else context.toggleTitle = game.i18n.localize(\"DND5E.SpellUnprepared\");\n }\n else {\n const isActive = !!item.system.equipped;\n context.toggleClass = isActive ? \"active\" : \"\";\n context.toggleTitle = game.i18n.localize(isActive ? \"DND5E.Equipped\" : \"DND5E.Unequipped\");\n context.canToggle = \"equipped\" in item.system;\n }\n }\n\n /* -------------------------------------------- */\n /* Event Listeners and Handlers\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n activateListeners(html) {\n super.activateListeners(html);\n if ( !this.isEditable ) return;\n html.find(\".level-selector\").change(this._onLevelChange.bind(this));\n html.find(\".item-toggle\").click(this._onToggleItem.bind(this));\n html.find(\".short-rest\").click(this._onShortRest.bind(this));\n html.find(\".long-rest\").click(this._onLongRest.bind(this));\n html.find(\".rollable[data-action]\").click(this._onSheetAction.bind(this));\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle mouse click events for character sheet actions.\n * @param {MouseEvent} event The originating click event.\n * @returns {Promise} Dialog or roll result.\n * @private\n */\n _onSheetAction(event) {\n event.preventDefault();\n const button = event.currentTarget;\n switch ( button.dataset.action ) {\n case \"convertCurrency\":\n return Dialog.confirm({\n title: `${game.i18n.localize(\"DND5E.CurrencyConvert\")}`,\n content: `

${game.i18n.localize(\"DND5E.CurrencyConvertHint\")}

`,\n yes: () => this.actor.convertCurrency()\n });\n case \"rollDeathSave\":\n return this.actor.rollDeathSave({event: event});\n case \"rollInitiative\":\n return this.actor.rollInitiativeDialog({event});\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * Respond to a new level being selected from the level selector.\n * @param {Event} event The originating change.\n * @returns {Promise} Manager if advancements needed, otherwise updated class item.\n * @private\n */\n async _onLevelChange(event) {\n event.preventDefault();\n const delta = Number(event.target.value);\n const classId = event.target.closest(\".item\")?.dataset.itemId;\n if ( !delta || !classId ) return;\n const classItem = this.actor.items.get(classId);\n if ( !game.settings.get(\"dnd5e\", \"disableAdvancements\") ) {\n const manager = AdvancementManager.forLevelChange(this.actor, classId, delta);\n if ( manager.steps.length ) {\n if ( delta > 0 ) return manager.render(true);\n try {\n const shouldRemoveAdvancements = await AdvancementConfirmationDialog.forLevelDown(classItem);\n if ( shouldRemoveAdvancements ) return manager.render(true);\n }\n catch(err) {\n return;\n }\n }\n }\n return classItem.update({\"system.levels\": classItem.system.levels + delta});\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle toggling the state of an Owned Item within the Actor.\n * @param {Event} event The triggering click event.\n * @returns {Promise} Item with the updates applied.\n * @private\n */\n _onToggleItem(event) {\n event.preventDefault();\n const itemId = event.currentTarget.closest(\".item\").dataset.itemId;\n const item = this.actor.items.get(itemId);\n const attr = item.type === \"spell\" ? \"system.preparation.prepared\" : \"system.equipped\";\n return item.update({[attr]: !foundry.utils.getProperty(item, attr)});\n }\n\n /* -------------------------------------------- */\n\n /**\n * Take a short rest, calling the relevant function on the Actor instance.\n * @param {Event} event The triggering click event.\n * @returns {Promise} Result of the rest action.\n * @private\n */\n async _onShortRest(event) {\n event.preventDefault();\n await this._onSubmit(event);\n return this.actor.shortRest();\n }\n\n /* -------------------------------------------- */\n\n /**\n * Take a long rest, calling the relevant function on the Actor instance.\n * @param {Event} event The triggering click event.\n * @returns {Promise} Result of the rest action.\n * @private\n */\n async _onLongRest(event) {\n event.preventDefault();\n await this._onSubmit(event);\n return this.actor.longRest();\n }\n\n /* -------------------------------------------- */\n\n /** @override */\n async _onDropSingleItem(itemData) {\n\n // Increment the number of class levels a character instead of creating a new item\n if ( itemData.type === \"class\" ) {\n const charLevel = this.actor.system.details.level;\n itemData.system.levels = Math.min(itemData.system.levels, CONFIG.DND5E.maxLevel - charLevel);\n if ( itemData.system.levels <= 0 ) {\n const err = game.i18n.format(\"DND5E.MaxCharacterLevelExceededWarn\", { max: CONFIG.DND5E.maxLevel });\n ui.notifications.error(err);\n return false;\n }\n\n const cls = this.actor.itemTypes.class.find(c => c.identifier === itemData.system.identifier);\n if ( cls ) {\n const priorLevel = cls.system.levels;\n if ( !game.settings.get(\"dnd5e\", \"disableAdvancements\") ) {\n const manager = AdvancementManager.forLevelChange(this.actor, cls.id, itemData.system.levels);\n if ( manager.steps.length ) {\n manager.render(true);\n return false;\n }\n }\n cls.update({\"system.levels\": priorLevel + itemData.system.levels});\n return false;\n }\n }\n\n // If a subclass is dropped, ensure it doesn't match another subclass with the same identifier\n else if ( itemData.type === \"subclass\" ) {\n const other = this.actor.itemTypes.subclass.find(i => i.identifier === itemData.system.identifier);\n if ( other ) {\n const err = game.i18n.format(\"DND5E.SubclassDuplicateError\", {identifier: other.identifier});\n ui.notifications.error(err);\n return false;\n }\n const cls = this.actor.itemTypes.class.find(i => i.identifier === itemData.system.classIdentifier);\n if ( cls && cls.subclass ) {\n const err = game.i18n.format(\"DND5E.SubclassAssignmentError\", {class: cls.name, subclass: cls.subclass.name});\n ui.notifications.error(err);\n return false;\n }\n }\n return super._onDropSingleItem(itemData);\n }\n}\n","import ActorSheet5e from \"./base-sheet.mjs\";\n\n/**\n * An Actor sheet for NPC type characters.\n */\nexport default class ActorSheet5eNPC extends ActorSheet5e {\n\n /** @inheritDoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n classes: [\"dnd5e\", \"sheet\", \"actor\", \"npc\"],\n width: 600\n });\n }\n\n /* -------------------------------------------- */\n\n /** @override */\n static unsupportedItemTypes = new Set([\"background\", \"class\", \"subclass\"]);\n\n /* -------------------------------------------- */\n /* Context Preparation */\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n async getData(options) {\n const context = await super.getData(options);\n\n // Challenge Rating\n const cr = parseFloat(context.system.details.cr ?? 0);\n const crLabels = {0: \"0\", 0.125: \"1/8\", 0.25: \"1/4\", 0.5: \"1/2\"};\n\n return foundry.utils.mergeObject(context, {\n labels: {\n cr: cr >= 1 ? String(cr) : crLabels[cr] ?? 1,\n type: this.actor.constructor.formatCreatureType(context.system.details.type),\n armorType: this.getArmorLabel()\n }\n });\n }\n\n /* -------------------------------------------- */\n\n /** @override */\n _prepareItems(context) {\n\n // Categorize Items as Features and Spells\n const features = {\n weapons: { label: game.i18n.localize(\"DND5E.AttackPl\"), items: [], hasActions: true,\n dataset: {type: \"weapon\", \"weapon-type\": \"natural\"} },\n actions: { label: game.i18n.localize(\"DND5E.ActionPl\"), items: [], hasActions: true,\n dataset: {type: \"feat\", \"activation.type\": \"action\"} },\n passive: { label: game.i18n.localize(\"DND5E.Features\"), items: [], dataset: {type: \"feat\"} },\n equipment: { label: game.i18n.localize(\"DND5E.Inventory\"), items: [], dataset: {type: \"loot\"}}\n };\n\n // Start by classifying items into groups for rendering\n let [spells, other] = context.items.reduce((arr, item) => {\n const {quantity, uses, recharge, target} = item.system;\n const ctx = context.itemContext[item.id] ??= {};\n ctx.isStack = Number.isNumeric(quantity) && (quantity !== 1);\n ctx.isExpanded = this._expanded.has(item.id);\n ctx.hasUses = uses && (uses.max > 0);\n ctx.isOnCooldown = recharge && !!recharge.value && (recharge.charged === false);\n ctx.isDepleted = item.isOnCooldown && (uses.per && (uses.value > 0));\n ctx.hasTarget = !!target && !([\"none\", \"\"].includes(target.type));\n ctx.canToggle = false;\n if ( item.type === \"spell\" ) arr[0].push(item);\n else arr[1].push(item);\n return arr;\n }, [[], []]);\n\n // Apply item filters\n spells = this._filterItems(spells, this._filters.spellbook);\n other = this._filterItems(other, this._filters.features);\n\n // Organize Spellbook\n const spellbook = this._prepareSpellbook(context, spells);\n\n // Organize Features\n for ( let item of other ) {\n if ( item.type === \"weapon\" ) features.weapons.items.push(item);\n else if ( item.type === \"feat\" ) {\n if ( item.system.activation.type ) features.actions.items.push(item);\n else features.passive.items.push(item);\n }\n else features.equipment.items.push(item);\n }\n\n // Assign and return\n context.inventoryFilters = true;\n context.features = Object.values(features);\n context.spellbook = spellbook;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Format NPC armor information into a localized string.\n * @returns {string} Formatted armor label.\n */\n getArmorLabel() {\n const ac = this.actor.system.attributes.ac;\n const label = [];\n if ( ac.calc === \"default\" ) label.push(this.actor.armor?.name || game.i18n.localize(\"DND5E.ArmorClassUnarmored\"));\n else label.push(game.i18n.localize(CONFIG.DND5E.armorClasses[ac.calc].label));\n if ( this.actor.shield ) label.push(this.actor.shield.name);\n return label.filterJoin(\", \");\n }\n\n /* -------------------------------------------- */\n /* Object Updates */\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n async _updateObject(event, formData) {\n\n // Format NPC Challenge Rating\n const crs = {\"1/8\": 0.125, \"1/4\": 0.25, \"1/2\": 0.5};\n let crv = \"system.details.cr\";\n let cr = formData[crv];\n cr = crs[cr] || parseFloat(cr);\n if ( cr ) formData[crv] = cr < 1 ? cr : parseInt(cr);\n\n // Parent ActorSheet update steps\n return super._updateObject(event, formData);\n }\n}\n","import ActorSheet5e from \"./base-sheet.mjs\";\n\n/**\n * An Actor sheet for Vehicle type actors.\n */\nexport default class ActorSheet5eVehicle extends ActorSheet5e {\n\n /** @inheritDoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n classes: [\"dnd5e\", \"sheet\", \"actor\", \"vehicle\"]\n });\n }\n\n /* -------------------------------------------- */\n\n /** @override */\n static unsupportedItemTypes = new Set([\"background\", \"class\", \"subclass\"]);\n\n /* -------------------------------------------- */\n\n /**\n * Creates a new cargo entry for a vehicle Actor.\n * @type {object}\n */\n static get newCargo() {\n return {name: \"\", quantity: 1};\n }\n\n /* -------------------------------------------- */\n /* Context Preparation */\n /* -------------------------------------------- */\n\n /**\n * Compute the total weight of the vehicle's cargo.\n * @param {number} totalWeight The cumulative item weight from inventory items\n * @param {object} actorData The data object for the Actor being rendered\n * @returns {{max: number, value: number, pct: number}}\n * @private\n */\n _computeEncumbrance(totalWeight, actorData) {\n\n // Compute currency weight\n const totalCoins = Object.values(actorData.system.currency).reduce((acc, denom) => acc + denom, 0);\n\n const currencyPerWeight = game.settings.get(\"dnd5e\", \"metricWeightUnits\")\n ? CONFIG.DND5E.encumbrance.currencyPerWeight.metric\n : CONFIG.DND5E.encumbrance.currencyPerWeight.imperial;\n totalWeight += totalCoins / currencyPerWeight;\n\n // Vehicle weights are an order of magnitude greater.\n totalWeight /= game.settings.get(\"dnd5e\", \"metricWeightUnits\")\n ? CONFIG.DND5E.encumbrance.vehicleWeightMultiplier.metric\n : CONFIG.DND5E.encumbrance.vehicleWeightMultiplier.imperial;\n\n // Compute overall encumbrance\n const max = actorData.system.attributes.capacity.cargo;\n const pct = Math.clamped((totalWeight * 100) / max, 0, 100);\n return {value: totalWeight.toNearest(0.1), max, pct};\n }\n\n /* -------------------------------------------- */\n\n /** @override */\n _getMovementSpeed(actorData, largestPrimary=true) {\n return super._getMovementSpeed(actorData, largestPrimary);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare items that are mounted to a vehicle and require one or more crew to operate.\n * @param {object} item Copy of the item data being prepared for display.\n * @param {object} context Display context for the item.\n * @protected\n */\n _prepareCrewedItem(item, context) {\n\n // Determine crewed status\n const isCrewed = item.system.crewed;\n context.toggleClass = isCrewed ? \"active\" : \"\";\n context.toggleTitle = game.i18n.localize(`DND5E.${isCrewed ? \"Crewed\" : \"Uncrewed\"}`);\n\n // Handle crew actions\n if ( item.type === \"feat\" && item.system.activation.type === \"crew\" ) {\n context.cover = game.i18n.localize(`DND5E.${item.system.cover ? \"CoverTotal\" : \"None\"}`);\n if ( item.system.cover === .5 ) context.cover = \"½\";\n else if ( item.system.cover === .75 ) context.cover = \"¾\";\n else if ( item.system.cover === null ) context.cover = \"—\";\n }\n\n // Prepare vehicle weapons\n if ( (item.type === \"equipment\") || (item.type === \"weapon\") ) {\n context.threshold = item.system.hp.dt ? item.system.hp.dt : \"—\";\n }\n }\n\n /* -------------------------------------------- */\n\n /** @override */\n _prepareItems(context) {\n const cargoColumns = [{\n label: game.i18n.localize(\"DND5E.Quantity\"),\n css: \"item-qty\",\n property: \"quantity\",\n editable: \"Number\"\n }];\n\n const equipmentColumns = [{\n label: game.i18n.localize(\"DND5E.Quantity\"),\n css: \"item-qty\",\n property: \"system.quantity\",\n editable: \"Number\"\n }, {\n label: game.i18n.localize(\"DND5E.AC\"),\n css: \"item-ac\",\n property: \"system.armor.value\"\n }, {\n label: game.i18n.localize(\"DND5E.HP\"),\n css: \"item-hp\",\n property: \"system.hp.value\",\n editable: \"Number\"\n }, {\n label: game.i18n.localize(\"DND5E.Threshold\"),\n css: \"item-threshold\",\n property: \"threshold\"\n }];\n\n const features = {\n actions: {\n label: game.i18n.localize(\"DND5E.ActionPl\"),\n items: [],\n hasActions: true,\n crewable: true,\n dataset: {type: \"feat\", \"activation.type\": \"crew\"},\n columns: [{\n label: game.i18n.localize(\"DND5E.Cover\"),\n css: \"item-cover\",\n property: \"cover\"\n }]\n },\n equipment: {\n label: game.i18n.localize(CONFIG.Item.typeLabels.equipment),\n items: [],\n crewable: true,\n dataset: {type: \"equipment\", \"armor.type\": \"vehicle\"},\n columns: equipmentColumns\n },\n passive: {\n label: game.i18n.localize(\"DND5E.Features\"),\n items: [],\n dataset: {type: \"feat\"}\n },\n reactions: {\n label: game.i18n.localize(\"DND5E.ReactionPl\"),\n items: [],\n dataset: {type: \"feat\", \"activation.type\": \"reaction\"}\n },\n weapons: {\n label: game.i18n.localize(`${CONFIG.Item.typeLabels.weapon}Pl`),\n items: [],\n crewable: true,\n dataset: {type: \"weapon\", \"weapon-type\": \"siege\"},\n columns: equipmentColumns\n }\n };\n\n context.items.forEach(item => {\n const {uses, recharge} = item.system;\n const ctx = context.itemContext[item.id] ??= {};\n ctx.canToggle = false;\n ctx.isExpanded = this._expanded.has(item.id);\n ctx.hasUses = uses && (uses.max > 0);\n ctx.isOnCooldown = recharge && !!recharge.value && (recharge.charged === false);\n ctx.isDepleted = item.isOnCooldown && (uses.per && (uses.value > 0));\n });\n\n const cargo = {\n crew: {\n label: game.i18n.localize(\"DND5E.VehicleCrew\"),\n items: context.actor.system.cargo.crew,\n css: \"cargo-row crew\",\n editableName: true,\n dataset: {type: \"crew\"},\n columns: cargoColumns\n },\n passengers: {\n label: game.i18n.localize(\"DND5E.VehiclePassengers\"),\n items: context.actor.system.cargo.passengers,\n css: \"cargo-row passengers\",\n editableName: true,\n dataset: {type: \"passengers\"},\n columns: cargoColumns\n },\n cargo: {\n label: game.i18n.localize(\"DND5E.VehicleCargo\"),\n items: [],\n dataset: {type: \"loot\"},\n columns: [{\n label: game.i18n.localize(\"DND5E.Quantity\"),\n css: \"item-qty\",\n property: \"system.quantity\",\n editable: \"Number\"\n }, {\n label: game.i18n.localize(\"DND5E.Price\"),\n css: \"item-price\",\n property: \"system.price.value\",\n editable: \"Number\"\n }, {\n label: game.i18n.localize(\"DND5E.Weight\"),\n css: \"item-weight\",\n property: \"system.weight\",\n editable: \"Number\"\n }]\n }\n };\n\n // Classify items owned by the vehicle and compute total cargo weight\n let totalWeight = 0;\n for ( const item of context.items ) {\n const ctx = context.itemContext[item.id] ??= {};\n this._prepareCrewedItem(item, ctx);\n\n // Handle cargo explicitly\n const isCargo = item.flags.dnd5e?.vehicleCargo === true;\n if ( isCargo ) {\n totalWeight += (item.system.weight || 0) * item.system.quantity;\n cargo.cargo.items.push(item);\n continue;\n }\n\n // Handle non-cargo item types\n switch ( item.type ) {\n case \"weapon\":\n features.weapons.items.push(item);\n break;\n case \"equipment\":\n features.equipment.items.push(item);\n break;\n case \"feat\":\n const act = item.system.activation;\n if ( !act.type || (act.type === \"none\") ) features.passive.items.push(item);\n else if (act.type === \"reaction\") features.reactions.items.push(item);\n else features.actions.items.push(item);\n break;\n default:\n totalWeight += (item.system.weight || 0) * item.system.quantity;\n cargo.cargo.items.push(item);\n }\n }\n\n // Update the rendering context data\n context.inventoryFilters = false;\n context.features = Object.values(features);\n context.cargo = Object.values(cargo);\n context.encumbrance = this._computeEncumbrance(totalWeight, context);\n }\n\n /* -------------------------------------------- */\n /* Event Listeners and Handlers */\n /* -------------------------------------------- */\n\n /** @override */\n activateListeners(html) {\n super.activateListeners(html);\n if ( !this.isEditable ) return;\n\n html.find(\".item-toggle\").click(this._onToggleItem.bind(this));\n html.find(\".item-hp input\")\n .click(evt => evt.target.select())\n .change(this._onHPChange.bind(this));\n\n html.find(\".item:not(.cargo-row) input[data-property]\")\n .click(evt => evt.target.select())\n .change(this._onEditInSheet.bind(this));\n\n html.find(\".cargo-row input\")\n .click(evt => evt.target.select())\n .change(this._onCargoRowChange.bind(this));\n\n html.find(\".item:not(.cargo-row) .item-qty input\")\n .click(evt => evt.target.select())\n .change(this._onQtyChange.bind(this));\n\n if (this.actor.system.attributes.actions.stations) {\n html.find(\".counter.actions, .counter.action-thresholds\").hide();\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle saving a cargo row (i.e. crew or passenger) in-sheet.\n * @param {Event} event Triggering event.\n * @returns {Promise|null} Actor after update if any changes were made.\n * @private\n */\n _onCargoRowChange(event) {\n event.preventDefault();\n const target = event.currentTarget;\n const row = target.closest(\".item\");\n const idx = Number(row.dataset.itemIndex);\n const property = row.classList.contains(\"crew\") ? \"crew\" : \"passengers\";\n\n // Get the cargo entry\n const cargo = foundry.utils.deepClone(this.actor.system.cargo[property]);\n const entry = cargo[idx];\n if ( !entry ) return null;\n\n // Update the cargo value\n const key = target.dataset.property ?? \"name\";\n const type = target.dataset.dtype;\n let value = target.value;\n if (type === \"Number\") value = Number(value);\n entry[key] = value;\n\n // Perform the Actor update\n return this.actor.update({[`system.cargo.${property}`]: cargo});\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle editing certain values like quantity, price, and weight in-sheet.\n * @param {Event} event Triggering event.\n * @returns {Promise} Item with updates applied.\n * @private\n */\n _onEditInSheet(event) {\n event.preventDefault();\n const itemID = event.currentTarget.closest(\".item\").dataset.itemId;\n const item = this.actor.items.get(itemID);\n const property = event.currentTarget.dataset.property;\n const type = event.currentTarget.dataset.dtype;\n let value = event.currentTarget.value;\n switch (type) {\n case \"Number\": value = parseInt(value); break;\n case \"Boolean\": value = value === \"true\"; break;\n }\n return item.update({[`${property}`]: value});\n }\n\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n _onItemCreate(event) {\n event.preventDefault();\n // Handle creating a new crew or passenger row.\n const target = event.currentTarget;\n const type = target.dataset.type;\n if (type === \"crew\" || type === \"passengers\") {\n const cargo = foundry.utils.deepClone(this.actor.system.cargo[type]);\n cargo.push(this.constructor.newCargo);\n return this.actor.update({[`system.cargo.${type}`]: cargo});\n }\n return super._onItemCreate(event);\n }\n\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n _onItemDelete(event) {\n event.preventDefault();\n // Handle deleting a crew or passenger row.\n const row = event.currentTarget.closest(\".item\");\n if (row.classList.contains(\"cargo-row\")) {\n const idx = Number(row.dataset.itemIndex);\n const type = row.classList.contains(\"crew\") ? \"crew\" : \"passengers\";\n const cargo = foundry.utils.deepClone(this.actor.system.cargo[type]).filter((_, i) => i !== idx);\n return this.actor.update({[`system.cargo.${type}`]: cargo});\n }\n return super._onItemDelete(event);\n }\n\n /* -------------------------------------------- */\n\n /** @override */\n async _onDropSingleItem(itemData) {\n const cargoTypes = [\"weapon\", \"equipment\", \"consumable\", \"tool\", \"loot\", \"backpack\"];\n const isCargo = cargoTypes.includes(itemData.type) && (this._tabs[0].active === \"cargo\");\n foundry.utils.setProperty(itemData, \"flags.dnd5e.vehicleCargo\", isCargo);\n return super._onDropSingleItem(itemData);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Special handling for editing HP to clamp it within appropriate range.\n * @param {Event} event Triggering event.\n * @returns {Promise} Item after the update is applied.\n * @private\n */\n _onHPChange(event) {\n event.preventDefault();\n const itemID = event.currentTarget.closest(\".item\").dataset.itemId;\n const item = this.actor.items.get(itemID);\n let hp = Math.clamped(0, parseInt(event.currentTarget.value), item.system.hp.max);\n if ( Number.isNaN(hp) ) hp = 0;\n return item.update({\"system.hp.value\": hp});\n }\n\n /* -------------------------------------------- */\n\n /**\n * Special handling for editing quantity value of equipment and weapons inside the features tab.\n * @param {Event} event Triggering event.\n * @returns {Promise} Item after the update is applied.\n * @private\n */\n _onQtyChange(event) {\n event.preventDefault();\n const itemID = event.currentTarget.closest(\".item\").dataset.itemId;\n const item = this.actor.items.get(itemID);\n let qty = parseInt(event.currentTarget.value);\n if ( Number.isNaN(qty) ) qty = 0;\n return item.update({\"system.quantity\": qty});\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle toggling an item's crewed status.\n * @param {Event} event Triggering event.\n * @returns {Promise} Item after the toggling is applied.\n * @private\n */\n _onToggleItem(event) {\n event.preventDefault();\n const itemID = event.currentTarget.closest(\".item\").dataset.itemId;\n const item = this.actor.items.get(itemID);\n return item.update({\"system.crewed\": !item.system.crewed});\n }\n}\n","import ActorMovementConfig from \"./movement-config.mjs\";\nimport ActorSheet5e from \"./base-sheet.mjs\";\nimport Item5e from \"../../documents/item.mjs\";\n\n/**\n * A character sheet for group-type Actors.\n * The functionality of this sheet is sufficiently different from other Actor types that we extend the base\n * Foundry VTT ActorSheet instead of the ActorSheet5e abstraction used for character, npc, and vehicle types.\n */\nexport default class GroupActorSheet extends ActorSheet {\n\n /**\n * IDs for items on the sheet that have been expanded.\n * @type {Set}\n * @protected\n */\n _expanded = new Set();\n\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n classes: [\"dnd5e\", \"sheet\", \"actor\", \"group\"],\n template: \"systems/dnd5e/templates/actors/group-sheet.hbs\",\n tabs: [{navSelector: \".tabs\", contentSelector: \".sheet-body\", initial: \"members\"}],\n scrollY: [\".inventory .inventory-list\"],\n width: 620,\n height: 620\n });\n }\n\n /* -------------------------------------------- */\n\n /**\n * A set of item types that should be prevented from being dropped on this type of actor sheet.\n * @type {Set}\n */\n static unsupportedItemTypes = new Set([\"background\", \"class\", \"subclass\", \"feat\"]);\n\n /* -------------------------------------------- */\n /* Context Preparation */\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n async getData(options={}) {\n const context = super.getData(options);\n context.system = context.data.system;\n context.items = Array.from(this.actor.items);\n\n // Membership\n const {sections, stats} = this.#prepareMembers();\n Object.assign(context, stats);\n context.sections = sections;\n\n // Movement\n context.movement = this.#prepareMovementSpeed();\n\n // Inventory\n context.itemContext = {};\n context.inventory = this.#prepareInventory(context);\n context.expandedData = {};\n for ( const id of this._expanded ) {\n const item = this.actor.items.get(id);\n if ( item ) context.expandedData[id] = await item.getChatData({secrets: this.actor.isOwner});\n }\n context.inventoryFilters = false;\n context.rollableClass = this.isEditable ? \"rollable\" : \"\";\n\n // Biography HTML\n context.descriptionFull = await TextEditor.enrichHTML(this.actor.system.description.full, {\n secrets: this.actor.isOwner,\n rollData: context.rollData,\n async: true,\n relativeTo: this.actor\n });\n\n // Summary tag\n context.summary = this.#getSummary(stats);\n\n // Text labels\n context.labels = {\n currencies: Object.entries(CONFIG.DND5E.currencies).reduce((obj, [k, c]) => {\n obj[k] = c.label;\n return obj;\n }, {})\n };\n return context;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare a localized summary of group membership.\n * @param {{nMembers: number, nVehicles: number}} stats The number of members in the group\n * @returns {string} The formatted summary string\n */\n #getSummary(stats) {\n const formatter = new Intl.ListFormat(game.i18n.lang, {style: \"long\", type: \"conjunction\"});\n const members = [];\n if ( stats.nMembers ) members.push(`${stats.nMembers} ${game.i18n.localize(\"DND5E.GroupMembers\")}`);\n if ( stats.nVehicles ) members.push(`${stats.nVehicles} ${game.i18n.localize(\"DND5E.GroupVehicles\")}`);\n return game.i18n.format(\"DND5E.GroupSummary\", {members: formatter.format(members)});\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare membership data for the sheet.\n * @returns {{sections: object, stats: object}}\n */\n #prepareMembers() {\n const stats = {\n currentHP: 0,\n maxHP: 0,\n nMembers: 0,\n nVehicles: 0\n };\n const sections = {\n character: {label: `${CONFIG.Actor.typeLabels.character}Pl`, members: []},\n npc: {label: `${CONFIG.Actor.typeLabels.npc}Pl`, members: []},\n vehicle: {label: `${CONFIG.Actor.typeLabels.vehicle}Pl`, members: []}\n };\n for ( const member of this.object.system.members ) {\n const m = {\n actor: member,\n id: member.id,\n name: member.name,\n img: member.img,\n hp: {},\n displayHPValues: member.testUserPermission(game.user, \"OBSERVER\")\n };\n\n // HP bar\n const hp = member.system.attributes.hp;\n m.hp.current = hp.value + (hp.temp || 0);\n m.hp.max = Math.max(0, hp.max + (hp.tempmax || 0));\n m.hp.pct = Math.clamped((m.hp.current / m.hp.max) * 100, 0, 100).toFixed(2);\n m.hp.color = dnd5e.documents.Actor5e.getHPColor(m.hp.current, m.hp.max).css;\n stats.currentHP += m.hp.current;\n stats.maxHP += m.hp.max;\n\n if ( member.type === \"vehicle\" ) stats.nVehicles++;\n else stats.nMembers++;\n sections[member.type].members.push(m);\n }\n for ( const [k, section] of Object.entries(sections) ) {\n if ( !section.members.length ) delete sections[k];\n }\n return {sections, stats};\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare movement speed data for rendering on the sheet.\n * @returns {{secondary: string, primary: string}}\n */\n #prepareMovementSpeed() {\n const movement = this.object.system.attributes.movement;\n let speeds = [\n [movement.land, `${game.i18n.localize(\"DND5E.MovementLand\")} ${movement.land}`],\n [movement.water, `${game.i18n.localize(\"DND5E.MovementWater\")} ${movement.water}`],\n [movement.air, `${game.i18n.localize(\"DND5E.MovementAir\")} ${movement.air}`]\n ];\n speeds = speeds.filter(s => s[0]).sort((a, b) => b[0] - a[0]);\n const primary = speeds.shift();\n return {\n primary: `${primary ? primary[1] : \"0\"}`,\n secondary: speeds.map(s => s[1]).join(\", \")\n };\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare inventory items for rendering on the sheet.\n * @param {object} context Prepared rendering context.\n * @returns {Object}\n */\n #prepareInventory(context) {\n\n // Categorize as weapons, equipment, containers, and loot\n const sections = {};\n for ( const type of [\"weapon\", \"equipment\", \"consumable\", \"backpack\", \"loot\"] ) {\n sections[type] = {label: `${CONFIG.Item.typeLabels[type]}Pl`, items: [], hasActions: false, dataset: {type}};\n }\n\n // Classify items\n for ( const item of context.items ) {\n const ctx = context.itemContext[item.id] ??= {};\n const {quantity} = item.system;\n ctx.isStack = Number.isNumeric(quantity) && (quantity > 1);\n ctx.canToggle = false;\n ctx.isExpanded = this._expanded.has(item.id);\n if ( (item.type in sections) && (item.type !== \"loot\") ) sections[item.type].items.push(item);\n else sections.loot.items.push(item);\n }\n return sections;\n }\n\n /* -------------------------------------------- */\n /* Rendering Workflow */\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n async _render(force, options={}) {\n for ( const member of this.object.system.members) {\n member.apps[this.id] = this;\n }\n return super._render(force, options);\n }\n\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n async close(options={}) {\n for ( const member of this.object.system.members ) {\n delete member.apps[this.id];\n }\n return super.close(options);\n }\n\n /* -------------------------------------------- */\n /* Event Listeners and Handlers */\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n activateListeners(html) {\n super.activateListeners(html);\n html.find(\".group-member .name\").click(this._onClickMemberName.bind(this));\n if ( this.isEditable ) {\n html.find(\".action-button\").click(this._onClickActionButton.bind(this));\n html.find(\".item-control\").click(this._onClickItemControl.bind(this));\n html.find(\".item .rollable h4\").click(event => this._onClickItemName(event));\n new ContextMenu(html, \".item-list .item\", [], {onOpen: this._onItemContext.bind(this)});\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle clicks to action buttons on the group sheet.\n * @param {PointerEvent} event The initiating click event\n * @protected\n */\n _onClickActionButton(event) {\n event.preventDefault();\n const button = event.currentTarget;\n switch ( button.dataset.action ) {\n case \"convertCurrency\":\n Dialog.confirm({\n title: `${game.i18n.localize(\"DND5E.CurrencyConvert\")}`,\n content: `

${game.i18n.localize(\"DND5E.CurrencyConvertHint\")}

`,\n yes: () => this.actor.convertCurrency()\n });\n break;\n case \"removeMember\":\n const removeMemberId = button.closest(\"li.group-member\").dataset.actorId;\n this.object.system.removeMember(removeMemberId);\n break;\n case \"movementConfig\":\n const movementConfig = new ActorMovementConfig(this.object);\n movementConfig.render(true);\n break;\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle clicks to item control buttons on the group sheet.\n * @param {PointerEvent} event The initiating click event\n * @protected\n */\n _onClickItemControl(event) {\n event.preventDefault();\n const button = event.currentTarget;\n switch ( button.dataset.action ) {\n case \"itemCreate\":\n this._createItem(button);\n break;\n case \"itemDelete\":\n const deleteLi = event.currentTarget.closest(\".item\");\n const deleteItem = this.actor.items.get(deleteLi.dataset.itemId);\n deleteItem.deleteDialog();\n break;\n case \"itemEdit\":\n const editLi = event.currentTarget.closest(\".item\");\n const editItem = this.actor.items.get(editLi.dataset.itemId);\n editItem.sheet.render(true);\n break;\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle workflows to create a new Item directly within the Group Actor sheet.\n * @param {HTMLElement} button The clicked create button\n * @returns {Item5e} The created embedded Item\n * @protected\n */\n _createItem(button) {\n const type = button.dataset.type;\n const system = {...button.dataset};\n delete system.type;\n const name = game.i18n.format(\"DND5E.ItemNew\", {type: game.i18n.localize(CONFIG.Item.typeLabels[type])});\n const itemData = {name, type, system};\n return this.actor.createEmbeddedDocuments(\"Item\", [itemData]);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle activation of a context menu for an embedded Item document.\n * Dynamically populate the array of context menu options.\n * Reuse the item context options provided by the base ActorSheet5e class.\n * @param {HTMLElement} element The HTML element for which the context menu is activated\n * @protected\n */\n _onItemContext(element) {\n const item = this.actor.items.get(element.dataset.itemId);\n if ( !item ) return;\n ui.context.menuItems = ActorSheet5e.prototype._getItemContextOptions.call(this, item);\n Hooks.call(\"dnd5e.getItemContextOptions\", item, ui.context.menuItems);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle clicks on member names in the members list.\n * @param {PointerEvent} event The initiating click event\n * @protected\n */\n _onClickMemberName(event) {\n event.preventDefault();\n const member = event.currentTarget.closest(\"li.group-member\");\n const actor = game.actors.get(member.dataset.actorId);\n if ( actor ) actor.sheet.render(true, {focus: true});\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle clicks on an item name to expand its description\n * @param {PointerEvent} event The initiating click event\n * @protected\n */\n _onClickItemName(event) {\n game.system.applications.actor.ActorSheet5e.prototype._onItemSummary.call(this, event);\n }\n\n /* -------------------------------------------- */\n\n /** @override */\n async _onDropActor(event, data) {\n if ( !this.isEditable ) return;\n const cls = getDocumentClass(\"Actor\");\n const sourceActor = await cls.fromDropData(data);\n if ( !sourceActor ) return;\n return this.object.system.addMember(sourceActor);\n }\n\n /* -------------------------------------------- */\n\n /** @override */\n async _onDropItemCreate(itemData) {\n const items = itemData instanceof Array ? itemData : [itemData];\n\n const toCreate = [];\n for ( const item of items ) {\n const result = await this._onDropSingleItem(item);\n if ( result ) toCreate.push(result);\n }\n\n // Create the owned items as normal\n return this.actor.createEmbeddedDocuments(\"Item\", toCreate);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handles dropping of a single item onto this group sheet.\n * @param {object} itemData The item data to create.\n * @returns {Promise} The item data to create after processing, or false if the item should not be\n * created or creation has been otherwise handled.\n * @protected\n */\n async _onDropSingleItem(itemData) {\n\n // Check to make sure items of this type are allowed on this actor\n if ( this.constructor.unsupportedItemTypes.has(itemData.type) ) {\n ui.notifications.warn(game.i18n.format(\"DND5E.ActorWarningInvalidItem\", {\n itemType: game.i18n.localize(CONFIG.Item.typeLabels[itemData.type]),\n actorType: game.i18n.localize(CONFIG.Actor.typeLabels[this.actor.type])\n }));\n return false;\n }\n\n // Create a Consumable spell scroll on the Inventory tab\n if ( itemData.type === \"spell\" ) {\n const scroll = await Item5e.createScrollFromSpell(itemData);\n return scroll.toObject();\n }\n\n // TODO: Stack identical consumables\n\n return itemData;\n }\n}\n","import BaseConfigSheet from \"./base-config.mjs\";\n\n/**\n * A simple form to set skill configuration for a given skill.\n *\n * @param {Actor} actor The Actor instance being displayed within the sheet.\n * @param {ApplicationOptions} options Additional application configuration options.\n * @param {string} skillId The skill key as defined in CONFIG.DND5E.skills.\n * @deprecated since dnd5e 2.2, targeted for removal in 2.4\n */\nexport default class ActorSkillConfig extends BaseConfigSheet {\n constructor(actor, options, skillId) {\n super(actor, options);\n this._skillId = skillId;\n\n foundry.utils.logCompatibilityWarning(\"ActorSkillConfig has been deprecated in favor of the more general \"\n + \"ProficiencyConfig available at 'dnd5e.applications.actor.ProficiencyConfig'. Support for the old application \"\n + \"will be removed in a future version.\", {since: \"DnD5e 2.2\", until: \"DnD5e 2.4\"});\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n classes: [\"dnd5e\"],\n template: \"systems/dnd5e/templates/apps/skill-config.hbs\",\n width: 500,\n height: \"auto\"\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n get title() {\n const label = CONFIG.DND5E.skills[this._skillId].label;\n return `${game.i18n.format(\"DND5E.SkillConfigureTitle\", {skill: label})}: ${this.document.name}`;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n getData(options) {\n const src = this.document.toObject();\n return {\n abilities: CONFIG.DND5E.abilities,\n skill: src.system.skills?.[this._skillId] ?? this.document.system.skills[this._skillId] ?? {},\n skillId: this._skillId,\n proficiencyLevels: CONFIG.DND5E.proficiencyLevels,\n bonusGlobal: src.system.bonuses?.abilities.skill\n };\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n _updateObject(event, formData) {\n const passive = formData[`system.skills.${this._skillId}.bonuses.passive`];\n const passiveRoll = new Roll(passive);\n if ( !passiveRoll.isDeterministic ) {\n const message = game.i18n.format(\"DND5E.FormulaCannotContainDiceError\", {\n name: game.i18n.localize(\"DND5E.SkillBonusPassive\")\n });\n ui.notifications.error(message);\n throw new Error(message);\n }\n super._updateObject(event, formData);\n }\n}\n","/**\n * Dialog to select which new advancements should be added to an item.\n */\nexport default class AdvancementMigrationDialog extends Dialog {\n\n /** @inheritdoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n classes: [\"dnd5e\", \"advancement-migration\", \"dialog\"],\n jQuery: false,\n width: 500\n });\n }\n\n /* -------------------------------------------- */\n\n /**\n * A helper constructor function which displays the migration dialog.\n * @param {Item5e} item Item to which the advancements are being added.\n * @param {Advancement[]} advancements New advancements that should be displayed in the prompt.\n * @returns {Promise} Resolves with the advancements that should be added, if any.\n */\n static createDialog(item, advancements) {\n const advancementContext = advancements.map(a => ({\n id: a.id, icon: a.icon, title: a.title,\n summary: a.levels.length === 1 ? a.summaryForLevel(a.levels[0]) : \"\"\n }));\n return new Promise(async (resolve, reject) => {\n const dialog = new this({\n title: `${game.i18n.localize(\"DND5E.AdvancementMigrationTitle\")}: ${item.name}`,\n content: await renderTemplate(\n \"systems/dnd5e/templates/advancement/advancement-migration-dialog.hbs\",\n { item, advancements: advancementContext }\n ),\n buttons: {\n continue: {\n icon: '',\n label: game.i18n.localize(\"DND5E.AdvancementMigrationConfirm\"),\n callback: html => resolve(advancements.filter(a => html.querySelector(`[name=\"${a.id}\"]`)?.checked))\n },\n cancel: {\n icon: '',\n label: game.i18n.localize(\"Cancel\"),\n callback: html => reject(null)\n }\n },\n default: \"continue\",\n close: () => reject(null)\n });\n dialog.render(true);\n });\n }\n\n}\n","import Advancement from \"../../documents/advancement/advancement.mjs\";\n\n/**\n * Presents a list of advancement types to create when clicking the new advancement button.\n * Once a type is selected, this hands the process over to the advancement's individual editing interface.\n *\n * @param {Item5e} item Item to which this advancement will be added.\n * @param {object} [dialogData={}] An object of dialog data which configures how the modal window is rendered.\n * @param {object} [options={}] Dialog rendering options.\n */\nexport default class AdvancementSelection extends Dialog {\n constructor(item, dialogData={}, options={}) {\n super(dialogData, options);\n\n /**\n * Store a reference to the Item to which this Advancement is being added.\n * @type {Item5e}\n */\n this.item = item;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n classes: [\"dnd5e\", \"sheet\", \"advancement\"],\n template: \"systems/dnd5e/templates/advancement/advancement-selection.hbs\",\n title: \"DND5E.AdvancementSelectionTitle\",\n width: 500,\n height: \"auto\"\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n get id() {\n return `item-${this.item.id}-advancement-selection`;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n getData() {\n const context = { types: {} };\n for ( const [name, advancement] of Object.entries(CONFIG.DND5E.advancementTypes) ) {\n if ( !(advancement.prototype instanceof Advancement)\n || !advancement.metadata.validItemTypes.has(this.item.type) ) continue;\n context.types[name] = {\n label: advancement.metadata.title,\n icon: advancement.metadata.icon,\n hint: advancement.metadata.hint,\n disabled: !advancement.availableForItem(this.item)\n };\n }\n context.types = dnd5e.utils.sortObjectEntries(context.types, \"label\");\n return context;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n activateListeners(html) {\n super.activateListeners(html);\n html.on(\"change\", \"input\", this._onChangeInput.bind(this));\n }\n\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n _onChangeInput(event) {\n const submit = this.element[0].querySelector(\"button[data-button='submit']\");\n submit.disabled = !this.element[0].querySelector(\"input[name='type']:checked\");\n }\n\n /* -------------------------------------------- */\n\n /**\n * A helper constructor function which displays the selection dialog and returns a Promise once its workflow has\n * been resolved.\n * @param {Item5e} item Item to which the advancement should be added.\n * @param {object} [config={}]\n * @param {boolean} [config.rejectClose=false] Trigger a rejection if the window was closed without a choice.\n * @param {object} [config.options={}] Additional rendering options passed to the Dialog.\n * @returns {Promise} Result of `Item5e#createAdvancement`.\n */\n static async createDialog(item, { rejectClose=false, options={} }={}) {\n return new Promise((resolve, reject) => {\n const dialog = new this(item, {\n title: `${game.i18n.localize(\"DND5E.AdvancementSelectionTitle\")}: ${item.name}`,\n buttons: {\n submit: {\n callback: html => {\n const formData = new FormDataExtended(html.querySelector(\"form\"));\n const type = formData.get(\"type\");\n resolve(item.createAdvancement(type));\n }\n }\n },\n close: () => {\n if ( rejectClose ) reject(\"No advancement type was selected\");\n else resolve(null);\n }\n }, foundry.utils.mergeObject(options, { jQuery: false }));\n dialog.render(true);\n });\n }\n\n}\n","/**\n * An extension of the base CombatTracker class to provide some 5e-specific functionality.\n * @extends {CombatTracker}\n */\nexport default class CombatTracker5e extends CombatTracker {\n /** @inheritdoc */\n async _onCombatantControl(event) {\n const btn = event.currentTarget;\n const combatantId = btn.closest(\".combatant\").dataset.combatantId;\n const combatant = this.viewed.combatants.get(combatantId);\n if ( (btn.dataset.control === \"rollInitiative\") && combatant?.actor ) return combatant.actor.rollInitiativeDialog();\n return super._onCombatantControl(event);\n }\n}\n","/**\n * A specialized form used to select from a checklist of attributes, traits, or properties.\n * @deprecated since dnd5e 2.1, targeted for removal in 2.3\n */\nexport default class TraitSelector extends DocumentSheet {\n constructor(...args) {\n super(...args);\n\n if ( !this.options.suppressWarning ) foundry.utils.logCompatibilityWarning(\n `${this.constructor.name} has been deprecated in favor of a more specialized TraitSelector `\n + \"available at 'dnd5e.applications.actor.TraitSelector'. Support for the old application will \"\n + \"be removed in a future version.\",\n { since: \"DnD5e 2.1\", until: \"DnD5e 2.3\" }\n );\n }\n\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n id: \"trait-selector\",\n classes: [\"dnd5e\", \"trait-selector\", \"subconfig\"],\n title: \"Actor Trait Selection\",\n template: \"systems/dnd5e/templates/apps/trait-selector.hbs\",\n width: 320,\n height: \"auto\",\n choices: {},\n allowCustom: true,\n minimum: 0,\n maximum: null,\n labelKey: null,\n valueKey: \"value\",\n customKey: \"custom\"\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n get title() {\n return this.options.title || super.title;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Return a reference to the target attribute\n * @type {string}\n */\n get attribute() {\n return this.options.name;\n }\n\n /* -------------------------------------------- */\n\n /** @override */\n getData() {\n const attr = foundry.utils.getProperty(this.object, this.attribute);\n const o = this.options;\n const value = (o.valueKey) ? foundry.utils.getProperty(attr, o.valueKey) ?? [] : attr;\n const custom = (o.customKey) ? foundry.utils.getProperty(attr, o.customKey) ?? \"\" : \"\";\n\n // Populate choices\n const choices = Object.entries(o.choices).reduce((obj, e) => {\n let [k, v] = e;\n const label = o.labelKey ? foundry.utils.getProperty(v, o.labelKey) ?? v : v;\n obj[k] = { label, chosen: attr ? value.includes(k) : false };\n return obj;\n }, {});\n\n // Return data\n return {\n choices: choices,\n custom: custom,\n customPath: o.allowCustom ? \"custom\" : null\n };\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare the update data to include choices in the provided object.\n * @param {object} formData Form data to search for choices.\n * @returns {object} Updates to apply to target.\n */\n _prepareUpdateData(formData) {\n const o = this.options;\n formData = foundry.utils.expandObject(formData);\n\n // Obtain choices\n const chosen = Object.entries(formData.choices).filter(([, v]) => v).map(([k]) => k);\n\n // Object including custom data\n const updateData = {};\n if ( o.valueKey ) updateData[`${this.attribute}.${o.valueKey}`] = chosen;\n else updateData[this.attribute] = chosen;\n if ( o.allowCustom ) updateData[`${this.attribute}.${o.customKey}`] = formData.custom;\n\n // Validate the number chosen\n if ( o.minimum && (chosen.length < o.minimum) ) {\n return ui.notifications.error(`You must choose at least ${o.minimum} options`);\n }\n if ( o.maximum && (chosen.length > o.maximum) ) {\n return ui.notifications.error(`You may choose no more than ${o.maximum} options`);\n }\n\n return updateData;\n }\n\n /* -------------------------------------------- */\n\n /** @override */\n async _updateObject(event, formData) {\n const updateData = this._prepareUpdateData(formData);\n if ( updateData ) this.object.update(updateData);\n }\n}\n","import AdvancementManager from \"../advancement/advancement-manager.mjs\";\nimport AdvancementMigrationDialog from \"../advancement/advancement-migration-dialog.mjs\";\nimport TraitSelector from \"../trait-selector.mjs\";\nimport ActiveEffect5e from \"../../documents/active-effect.mjs\";\nimport * as Trait from \"../../documents/actor/trait.mjs\";\n\n/**\n * Override and extend the core ItemSheet implementation to handle specific item types.\n */\nexport default class ItemSheet5e extends ItemSheet {\n constructor(...args) {\n super(...args);\n\n // Expand the default size of the class sheet\n if ( this.object.type === \"class\" ) {\n this.options.width = this.position.width = 600;\n this.options.height = this.position.height = 680;\n }\n else if ( this.object.type === \"subclass\" ) {\n this.options.height = this.position.height = 540;\n }\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n width: 560,\n height: 400,\n classes: [\"dnd5e\", \"sheet\", \"item\"],\n resizable: true,\n scrollY: [\".tab.details\"],\n tabs: [{navSelector: \".tabs\", contentSelector: \".sheet-body\", initial: \"description\"}],\n dragDrop: [\n {dragSelector: \"[data-effect-id]\", dropSelector: \".effects-list\"},\n {dragSelector: \".advancement-item\", dropSelector: \".advancement\"}\n ]\n });\n }\n\n /* -------------------------------------------- */\n\n /**\n * Whether advancements on embedded items should be configurable.\n * @type {boolean}\n */\n advancementConfigurationMode = false;\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n get template() {\n return `systems/dnd5e/templates/items/${this.item.type}.hbs`;\n }\n\n /* -------------------------------------------- */\n /* Context Preparation */\n /* -------------------------------------------- */\n\n /** @override */\n async getData(options) {\n const context = await super.getData(options);\n const item = context.item;\n const source = item.toObject();\n\n // Game system configuration\n context.config = CONFIG.DND5E;\n\n // Item rendering data\n foundry.utils.mergeObject(context, {\n source: source.system,\n system: item.system,\n labels: item.labels,\n isEmbedded: item.isEmbedded,\n advancementEditable: (this.advancementConfigurationMode || !item.isEmbedded) && context.editable,\n rollData: this.item.getRollData(),\n\n // Item Type, Status, and Details\n itemType: game.i18n.localize(CONFIG.Item.typeLabels[this.item.type]),\n itemStatus: this._getItemStatus(),\n itemProperties: this._getItemProperties(),\n baseItems: await this._getItemBaseTypes(),\n isPhysical: item.system.hasOwnProperty(\"quantity\"),\n\n // Action Details\n isHealing: item.system.actionType === \"heal\",\n isFlatDC: item.system.save?.scaling === \"flat\",\n isLine: [\"line\", \"wall\"].includes(item.system.target?.type),\n\n // Vehicles\n isCrewed: item.system.activation?.type === \"crew\",\n\n // Armor Class\n hasDexModifier: item.isArmor && (item.system.armor?.type !== \"shield\"),\n\n // Advancement\n advancement: this._getItemAdvancement(item),\n\n // Prepare Active Effects\n effects: ActiveEffect5e.prepareActiveEffectCategories(item.effects)\n });\n context.abilityConsumptionTargets = this._getItemConsumptionTargets();\n\n // Special handling for specific item types\n switch ( item.type ) {\n case \"feat\":\n const featureType = CONFIG.DND5E.featureTypes[item.system.type?.value];\n if ( featureType ) {\n context.itemType = featureType.label;\n context.featureSubtypes = featureType.subtypes;\n }\n break;\n case \"spell\":\n context.spellComponents = {...CONFIG.DND5E.spellComponents, ...CONFIG.DND5E.spellTags};\n break;\n }\n\n // Enrich HTML description\n context.descriptionHTML = await TextEditor.enrichHTML(item.system.description.value, {\n secrets: item.isOwner,\n async: true,\n relativeTo: this.item,\n rollData: context.rollData\n });\n return context;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Get the display object used to show the advancement tab.\n * @param {Item5e} item The item for which the advancement is being prepared.\n * @returns {object} Object with advancement data grouped by levels.\n */\n _getItemAdvancement(item) {\n if ( !item.system.advancement ) return {};\n const advancement = {};\n const configMode = !item.parent || this.advancementConfigurationMode;\n const maxLevel = !configMode\n ? (item.system.levels ?? item.class?.system.levels ?? item.parent.system.details?.level ?? -1) : -1;\n\n // Improperly configured advancements\n if ( item.advancement.needingConfiguration.length ) {\n advancement.unconfigured = {\n items: item.advancement.needingConfiguration.map(a => ({\n id: a.id,\n order: a.constructor.order,\n title: a.title,\n icon: a.icon,\n classRestriction: a.classRestriction,\n configured: false\n })),\n configured: \"partial\"\n };\n }\n\n // All other advancements by level\n for ( let [level, advancements] of Object.entries(item.advancement.byLevel) ) {\n if ( !configMode ) advancements = advancements.filter(a => a.appliesToClass);\n const items = advancements.map(advancement => ({\n id: advancement.id,\n order: advancement.sortingValueForLevel(level),\n title: advancement.titleForLevel(level, { configMode }),\n icon: advancement.icon,\n classRestriction: advancement.classRestriction,\n summary: advancement.summaryForLevel(level, { configMode }),\n configured: advancement.configuredForLevel(level)\n }));\n if ( !items.length ) continue;\n advancement[level] = {\n items: items.sort((a, b) => a.order.localeCompare(b.order)),\n configured: (level > maxLevel) ? false : items.some(a => !a.configured) ? \"partial\" : \"full\"\n };\n }\n return advancement;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Get the base weapons and tools based on the selected type.\n * @returns {Promise} Object with base items for this type formatted for selectOptions.\n * @protected\n */\n async _getItemBaseTypes() {\n const type = this.item.type === \"equipment\" ? \"armor\" : this.item.type;\n const baseIds = CONFIG.DND5E[`${type}Ids`];\n if ( baseIds === undefined ) return {};\n\n const typeProperty = type === \"armor\" ? \"armor.type\" : `${type}Type`;\n const baseType = foundry.utils.getProperty(this.item.system, typeProperty);\n\n const items = {};\n for ( const [name, id] of Object.entries(baseIds) ) {\n const baseItem = await Trait.getBaseItem(id);\n if ( baseType !== foundry.utils.getProperty(baseItem?.system, typeProperty) ) continue;\n items[name] = baseItem.name;\n }\n return Object.fromEntries(Object.entries(items).sort((lhs, rhs) => lhs[1].localeCompare(rhs[1])));\n }\n\n /* -------------------------------------------- */\n\n /**\n * Get the valid item consumption targets which exist on the actor\n * @returns {Object} An object of potential consumption targets\n * @private\n */\n _getItemConsumptionTargets() {\n const consume = this.item.system.consume || {};\n if ( !consume.type ) return [];\n const actor = this.item.actor;\n if ( !actor ) return {};\n\n // Ammunition\n if ( consume.type === \"ammo\" ) {\n return actor.itemTypes.consumable.reduce((ammo, i) => {\n if ( i.system.consumableType === \"ammo\" ) ammo[i.id] = `${i.name} (${i.system.quantity})`;\n return ammo;\n }, {});\n }\n\n // Attributes\n else if ( consume.type === \"attribute\" ) {\n const attrData = game.dnd5e.isV10 ? actor.system : actor.type;\n const attributes = TokenDocument.implementation.getConsumedAttributes(attrData);\n attributes.bar.forEach(a => a.push(\"value\"));\n return attributes.bar.concat(attributes.value).reduce((obj, a) => {\n let k = a.join(\".\");\n obj[k] = k;\n return obj;\n }, {});\n }\n\n // Hit Dice\n else if ( consume.type === \"hitDice\" ) {\n return {\n smallest: game.i18n.localize(\"DND5E.ConsumeHitDiceSmallest\"),\n ...CONFIG.DND5E.hitDieTypes.reduce((obj, hd) => { obj[hd] = hd; return obj; }, {}),\n largest: game.i18n.localize(\"DND5E.ConsumeHitDiceLargest\")\n };\n }\n\n // Materials\n else if ( consume.type === \"material\" ) {\n return actor.items.reduce((obj, i) => {\n if ( [\"consumable\", \"loot\"].includes(i.type) && !i.system.activation ) {\n obj[i.id] = `${i.name} (${i.system.quantity})`;\n }\n return obj;\n }, {});\n }\n\n // Charges\n else if ( consume.type === \"charges\" ) {\n return actor.items.reduce((obj, i) => {\n\n // Limited-use items\n const uses = i.system.uses || {};\n if ( uses.per && uses.max ) {\n const label = uses.per === \"charges\"\n ? ` (${game.i18n.format(\"DND5E.AbilityUseChargesLabel\", {value: uses.value})})`\n : ` (${game.i18n.format(\"DND5E.AbilityUseConsumableLabel\", {max: uses.max, per: uses.per})})`;\n obj[i.id] = i.name + label;\n }\n\n // Recharging items\n const recharge = i.system.recharge || {};\n if ( recharge.value ) obj[i.id] = `${i.name} (${game.i18n.format(\"DND5E.Recharge\")})`;\n return obj;\n }, {});\n }\n else return {};\n }\n\n /* -------------------------------------------- */\n\n /**\n * Get the text item status which is shown beneath the Item type in the top-right corner of the sheet.\n * @returns {string|null} Item status string if applicable to item's type.\n * @protected\n */\n _getItemStatus() {\n switch ( this.item.type ) {\n case \"class\":\n return game.i18n.format(\"DND5E.LevelCount\", {ordinal: this.item.system.levels.ordinalString()});\n case \"equipment\":\n case \"weapon\":\n return game.i18n.localize(this.item.system.equipped ? \"DND5E.Equipped\" : \"DND5E.Unequipped\");\n case \"feat\":\n const typeConfig = CONFIG.DND5E.featureTypes[this.item.system.type.value];\n if ( typeConfig?.subtypes ) return typeConfig.subtypes[this.item.system.type.subtype] ?? null;\n break;\n case \"spell\":\n return CONFIG.DND5E.spellPreparationModes[this.item.system.preparation];\n case \"tool\":\n return game.i18n.localize(this.item.system.proficient ? \"DND5E.Proficient\" : \"DND5E.NotProficient\");\n }\n return null;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Get the Array of item properties which are used in the small sidebar of the description tab.\n * @returns {string[]} List of property labels to be shown.\n * @private\n */\n _getItemProperties() {\n const props = [];\n const labels = this.item.labels;\n switch ( this.item.type ) {\n case \"equipment\":\n props.push(CONFIG.DND5E.equipmentTypes[this.item.system.armor.type]);\n if ( this.item.isArmor || this.item.isMountable ) props.push(labels.armor);\n break;\n case \"feat\":\n props.push(labels.featType);\n break;\n case \"spell\":\n props.push(labels.components.vsm, labels.materials, ...labels.components.tags);\n break;\n case \"weapon\":\n for ( const [k, v] of Object.entries(this.item.system.properties) ) {\n if ( v === true ) props.push(CONFIG.DND5E.weaponProperties[k]);\n }\n break;\n }\n\n // Action type\n if ( this.item.system.actionType ) {\n props.push(CONFIG.DND5E.itemActionTypes[this.item.system.actionType]);\n }\n\n // Action usage\n if ( (this.item.type !== \"weapon\") && !foundry.utils.isEmpty(this.item.system.activation) ) {\n props.push(labels.activation, labels.range, labels.target, labels.duration);\n }\n return props.filter(p => !!p);\n }\n\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n setPosition(position={}) {\n if ( !(this._minimized || position.height) ) {\n position.height = (this._tabs[0].active === \"details\") ? \"auto\" : Math.max(this.height, this.options.height);\n }\n return super.setPosition(position);\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async activateEditor(name, options={}, initialContent=\"\") {\n options.relativeLinks = true;\n options.plugins = {\n menu: ProseMirror.ProseMirrorMenu.build(ProseMirror.defaultSchema, {\n compact: true,\n destroyOnSave: true,\n onSave: () => this.saveEditor(name, {remove: true})\n })\n };\n return super.activateEditor(name, options, initialContent);\n }\n\n /* -------------------------------------------- */\n /* Form Submission */\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n _getSubmitData(updateData={}) {\n const formData = foundry.utils.expandObject(super._getSubmitData(updateData));\n\n // Handle Damage array\n const damage = formData.system?.damage;\n if ( damage ) damage.parts = Object.values(damage?.parts || {}).map(d => [d[0] || \"\", d[1] || \"\"]);\n\n // Check max uses formula\n const uses = formData.system?.uses;\n if ( uses?.max ) {\n const maxRoll = new Roll(uses.max);\n if ( !maxRoll.isDeterministic ) {\n uses.max = this.item._source.system.uses.max;\n this.form.querySelector(\"input[name='system.uses.max']\").value = uses.max;\n return ui.notifications.error(game.i18n.format(\"DND5E.FormulaCannotContainDiceError\", {\n name: game.i18n.localize(\"DND5E.LimitedUses\")\n }));\n }\n }\n\n // Check duration value formula\n const duration = formData.system?.duration;\n if ( duration?.value ) {\n const durationRoll = new Roll(duration.value);\n if ( !durationRoll.isDeterministic ) {\n duration.value = this.item._source.system.duration.value;\n this.form.querySelector(\"input[name='system.duration.value']\").value = duration.value;\n return ui.notifications.error(game.i18n.format(\"DND5E.FormulaCannotContainDiceError\", {\n name: game.i18n.localize(\"DND5E.Duration\")\n }));\n }\n }\n\n // Check class identifier\n if ( formData.system?.identifier && !dnd5e.utils.validators.isValidIdentifier(formData.system.identifier) ) {\n formData.system.identifier = this.item._source.system.identifier;\n this.form.querySelector(\"input[name='system.identifier']\").value = formData.system.identifier;\n return ui.notifications.error(game.i18n.localize(\"DND5E.IdentifierError\"));\n }\n\n // Return the flattened submission data\n return foundry.utils.flattenObject(formData);\n }\n\n /* -------------------------------------------- */\n\n /** @inheritDoc */\n activateListeners(html) {\n super.activateListeners(html);\n if ( this.isEditable ) {\n html.find(\".damage-control\").click(this._onDamageControl.bind(this));\n html.find(\".trait-selector\").click(this._onConfigureTraits.bind(this));\n html.find(\".effect-control\").click(ev => {\n const unsupported = game.dnd5e.isV10 && this.item.isOwned;\n if ( unsupported ) return ui.notifications.warn(\"Managing Active Effects within an Owned Item is not currently supported and will be added in a subsequent update.\");\n ActiveEffect5e.onManageActiveEffect(ev, this.item);\n });\n html.find(\".advancement .item-control\").click(event => {\n const t = event.currentTarget;\n if ( t.dataset.action ) this._onAdvancementAction(t, t.dataset.action);\n });\n }\n\n // Advancement context menu\n const contextOptions = this._getAdvancementContextMenuOptions();\n /**\n * A hook event that fires when the context menu for the advancements list is constructed.\n * @function dnd5e.getItemAdvancementContext\n * @memberof hookEvents\n * @param {jQuery} html The HTML element to which the context options are attached.\n * @param {ContextMenuEntry[]} entryOptions The context menu entries.\n */\n Hooks.call(\"dnd5e.getItemAdvancementContext\", html, contextOptions);\n if ( contextOptions ) new ContextMenu(html, \".advancement-item\", contextOptions);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Get the set of ContextMenu options which should be applied for advancement entries.\n * @returns {ContextMenuEntry[]} Context menu entries.\n * @protected\n */\n _getAdvancementContextMenuOptions() {\n const condition = li => (this.advancementConfigurationMode || !this.isEmbedded) && this.isEditable;\n return [\n {\n name: \"DND5E.AdvancementControlEdit\",\n icon: \"\",\n condition,\n callback: li => this._onAdvancementAction(li[0], \"edit\")\n },\n {\n name: \"DND5E.AdvancementControlDuplicate\",\n icon: \"\",\n condition: li => {\n const id = li[0].closest(\".advancement-item\")?.dataset.id;\n const advancement = this.item.advancement.byId[id];\n return condition(li) && advancement?.constructor.availableForItem(this.item);\n },\n callback: li => this._onAdvancementAction(li[0], \"duplicate\")\n },\n {\n name: \"DND5E.AdvancementControlDelete\",\n icon: \"\",\n condition,\n callback: li => this._onAdvancementAction(li[0], \"delete\")\n }\n ];\n }\n\n /* -------------------------------------------- */\n\n /**\n * Add or remove a damage part from the damage formula.\n * @param {Event} event The original click event.\n * @returns {Promise|null} Item with updates applied.\n * @private\n */\n async _onDamageControl(event) {\n event.preventDefault();\n const a = event.currentTarget;\n\n // Add new damage component\n if ( a.classList.contains(\"add-damage\") ) {\n await this._onSubmit(event); // Submit any unsaved changes\n const damage = this.item.system.damage;\n return this.item.update({\"system.damage.parts\": damage.parts.concat([[\"\", \"\"]])});\n }\n\n // Remove a damage component\n if ( a.classList.contains(\"delete-damage\") ) {\n await this._onSubmit(event); // Submit any unsaved changes\n const li = a.closest(\".damage-part\");\n const damage = foundry.utils.deepClone(this.item.system.damage);\n damage.parts.splice(Number(li.dataset.damagePart), 1);\n return this.item.update({\"system.damage.parts\": damage.parts});\n }\n }\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n _onDragStart(event) {\n const li = event.currentTarget;\n if ( event.target.classList.contains(\"content-link\") ) return;\n\n // Create drag data\n let dragData;\n\n // Active Effect\n if ( li.dataset.effectId ) {\n const effect = this.item.effects.get(li.dataset.effectId);\n dragData = effect.toDragData();\n } else if ( li.classList.contains(\"advancement-item\") ) {\n dragData = this.item.advancement.byId[li.dataset.id]?.toDragData();\n }\n\n if ( !dragData ) return;\n\n // Set data transfer\n event.dataTransfer.setData(\"text/plain\", JSON.stringify(dragData));\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n _onDrop(event) {\n const data = TextEditor.getDragEventData(event);\n const item = this.item;\n\n /**\n * A hook event that fires when some useful data is dropped onto an ItemSheet5e.\n * @function dnd5e.dropItemSheetData\n * @memberof hookEvents\n * @param {Item5e} item The Item5e\n * @param {ItemSheet5e} sheet The ItemSheet5e application\n * @param {object} data The data that has been dropped onto the sheet\n * @returns {boolean} Explicitly return `false` to prevent normal drop handling.\n */\n const allowed = Hooks.call(\"dnd5e.dropItemSheetData\", item, this, data);\n if ( allowed === false ) return;\n\n switch ( data.type ) {\n case \"ActiveEffect\":\n return this._onDropActiveEffect(event, data);\n case \"Advancement\":\n case \"Item\":\n return this._onDropAdvancement(event, data);\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle the dropping of ActiveEffect data onto an Item Sheet\n * @param {DragEvent} event The concluding DragEvent which contains drop data\n * @param {object} data The data transfer extracted from the event\n * @returns {Promise} The created ActiveEffect object or false if it couldn't be created.\n * @protected\n */\n async _onDropActiveEffect(event, data) {\n const effect = await ActiveEffect.implementation.fromDropData(data);\n if ( !this.item.isOwner || !effect ) return false;\n if ( (this.item.uuid === effect.parent.uuid) || (this.item.uuid === effect.origin) ) return false;\n return ActiveEffect.create({\n ...effect.toObject(),\n origin: this.item.uuid\n }, {parent: this.item});\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle the dropping of an advancement or item with advancements onto the advancements tab.\n * @param {DragEvent} event The concluding DragEvent which contains drop data.\n * @param {object} data The data transfer extracted from the event.\n */\n async _onDropAdvancement(event, data) {\n let advancements;\n let showDialog = false;\n if ( data.type === \"Advancement\" ) {\n advancements = [await fromUuid(data.uuid)];\n } else if ( data.type === \"Item\" ) {\n const item = await Item.implementation.fromDropData(data);\n if ( !item ) return false;\n advancements = Object.values(item.advancement.byId);\n showDialog = true;\n } else {\n return false;\n }\n advancements = advancements.filter(a => {\n return !this.item.advancement.byId[a.id]\n && a.constructor.metadata.validItemTypes.has(this.item.type)\n && a.constructor.availableForItem(this.item);\n });\n\n // Display dialog prompting for which advancements to add\n if ( showDialog ) {\n try {\n advancements = await AdvancementMigrationDialog.createDialog(this.item, advancements);\n } catch(err) {\n return false;\n }\n }\n\n if ( !advancements.length ) return false;\n if ( this.item.isEmbedded && !game.settings.get(\"dnd5e\", \"disableAdvancements\") ) {\n const manager = AdvancementManager.forNewAdvancement(this.item.actor, this.item.id, advancements);\n if ( manager.steps.length ) return manager.render(true);\n }\n\n // If no advancements need to be applied, just add them to the item\n const advancementArray = foundry.utils.deepClone(this.item.system.advancement);\n advancementArray.push(...advancements.map(a => a.toObject()));\n this.item.update({\"system.advancement\": advancementArray});\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle spawning the TraitSelector application for selection various options.\n * @param {Event} event The click event which originated the selection.\n * @private\n */\n _onConfigureTraits(event) {\n event.preventDefault();\n const a = event.currentTarget;\n const options = {\n name: a.dataset.target,\n title: a.parentElement.innerText,\n choices: [],\n allowCustom: false,\n suppressWarning: true\n };\n switch (a.dataset.options) {\n case \"saves\":\n options.choices = CONFIG.DND5E.abilities;\n options.valueKey = null;\n options.labelKey = \"label\";\n break;\n case \"skills.choices\":\n options.choices = CONFIG.DND5E.skills;\n options.valueKey = null;\n options.labelKey = \"label\";\n break;\n case \"skills\":\n const skills = this.item.system.skills;\n const choices = skills.choices?.length ? skills.choices : Object.keys(CONFIG.DND5E.skills);\n options.choices = Object.fromEntries(Object.entries(CONFIG.DND5E.skills).filter(([s]) => choices.includes(s)));\n options.maximum = skills.number;\n options.labelKey = \"label\";\n break;\n }\n new TraitSelector(this.item, options).render(true);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle one of the advancement actions from the buttons or context menu.\n * @param {Element} target Button or context menu entry that triggered this action.\n * @param {string} action Action being triggered.\n * @returns {Promise|void}\n */\n _onAdvancementAction(target, action) {\n const id = target.closest(\".advancement-item\")?.dataset.id;\n const advancement = this.item.advancement.byId[id];\n let manager;\n if ( [\"edit\", \"delete\", \"duplicate\"].includes(action) && !advancement ) return;\n switch (action) {\n case \"add\": return game.dnd5e.applications.advancement.AdvancementSelection.createDialog(this.item);\n case \"edit\": return new advancement.constructor.metadata.apps.config(advancement).render(true);\n case \"delete\":\n if ( this.item.isEmbedded && !game.settings.get(\"dnd5e\", \"disableAdvancements\") ) {\n manager = AdvancementManager.forDeletedAdvancement(this.item.actor, this.item.id, id);\n if ( manager.steps.length ) return manager.render(true);\n }\n return this.item.deleteAdvancement(id);\n case \"duplicate\": return this.item.duplicateAdvancement(id);\n case \"modify-choices\":\n const level = target.closest(\"li\")?.dataset.level;\n manager = AdvancementManager.forModifyChoices(this.item.actor, this.item.id, Number(level));\n if ( manager.steps.length ) manager.render(true);\n return;\n case \"toggle-configuration\":\n this.advancementConfigurationMode = !this.advancementConfigurationMode;\n return this.render();\n }\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async _onSubmit(...args) {\n if ( this._tabs[0].active === \"details\" ) this.position.height = \"auto\";\n await super._onSubmit(...args);\n }\n}\n","/**\n * Pop out ProseMirror editor window for journal entries with multiple text areas that need editing.\n *\n * @param {JournalEntryPage} document Journal entry page to be edited.\n * @param {object} options\n * @param {string} options.textKeyPath The path to the specific HTML field being edited.\n */\nexport default class JournalEditor extends DocumentSheet {\n\n /** @inheritdoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n classes: [\"journal-editor\"],\n template: \"systems/dnd5e/templates/journal/journal-editor.hbs\",\n width: 550,\n height: 640,\n textKeyPath: null,\n resizable: true\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n get title() {\n if ( this.options.title ) return `${this.document.name}: ${this.options.title}`;\n else return this.document.name;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async getData() {\n const data = super.getData();\n const rawText = foundry.utils.getProperty(this.document, this.options.textKeyPath) ?? \"\";\n return foundry.utils.mergeObject(data, {\n enriched: await TextEditor.enrichHTML(rawText, {\n relativeTo: this.document, secrets: this.document.isOwner, async: true\n })\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n _updateObject(event, formData) {\n this.document.update(formData);\n }\n\n}\n","import Actor5e from \"../../documents/actor/actor.mjs\";\nimport Proficiency from \"../../documents/actor/proficiency.mjs\";\nimport JournalEditor from \"./journal-editor.mjs\";\n\n/**\n * Journal entry page that displays an automatically generated summary of a class along with additional description.\n */\nexport default class JournalClassPageSheet extends JournalPageSheet {\n\n /** @inheritdoc */\n static get defaultOptions() {\n const options = foundry.utils.mergeObject(super.defaultOptions, {\n dragDrop: [{dropSelector: \".drop-target\"}],\n submitOnChange: true\n });\n options.classes.push(\"class-journal\");\n return options;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n get template() {\n return `systems/dnd5e/templates/journal/page-class-${this.isEditable ? \"edit\" : \"view\"}.hbs`;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n toc = {};\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async getData(options) {\n const context = super.getData(options);\n context.system = context.document.system;\n\n context.title = Object.fromEntries(\n Array.fromRange(4, 1).map(n => [`level${n}`, context.data.title.level + n - 1])\n );\n\n const linked = await fromUuid(this.document.system.item);\n context.subclasses = await this._getSubclasses(this.document.system.subclassItems);\n\n if ( !linked ) return context;\n context.linked = {\n document: linked,\n name: linked.name,\n lowercaseName: linked.name.toLowerCase()\n };\n\n context.advancement = this._getAdvancement(linked);\n context.enriched = await this._getDescriptions(context.document);\n context.table = await this._getTable(linked);\n context.optionalTable = await this._getOptionalTable(linked);\n context.features = await this._getFeatures(linked);\n context.optionalFeatures = await this._getFeatures(linked, true);\n context.subclasses?.sort((lhs, rhs) => lhs.name.localeCompare(rhs.name));\n\n return context;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare features granted by various advancement types.\n * @param {Item5e} item Class item belonging to this journal.\n * @returns {object} Prepared advancement section.\n */\n _getAdvancement(item) {\n const advancement = {};\n\n const hp = item.advancement.byType.HitPoints?.[0];\n if ( hp ) {\n advancement.hp = {\n hitDice: `1${hp.hitDie}`,\n max: hp.hitDieValue,\n average: Math.floor(hp.hitDieValue / 2) + 1\n };\n }\n\n return advancement;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Enrich all of the entries within the descriptions object on the sheet's system data.\n * @param {JournalEntryPage} page Journal page being enriched.\n * @returns {Promise} Object with enriched descriptions.\n */\n async _getDescriptions(page) {\n const descriptions = await Promise.all(Object.entries(page.system.description ?? {})\n .map(async ([id, text]) => {\n const enriched = await TextEditor.enrichHTML(text, {\n relativeTo: this.object,\n secrets: this.object.isOwner,\n async: true\n });\n return [id, enriched];\n })\n );\n return Object.fromEntries(descriptions);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare table based on non-optional GrantItem advancement & ScaleValue advancement.\n * @param {Item5e} item Class item belonging to this journal.\n * @param {number} [initialLevel=1] Level at which the table begins.\n * @returns {object} Prepared table.\n */\n async _getTable(item, initialLevel=1) {\n const hasFeatures = !!item.advancement.byType.ItemGrant;\n const scaleValues = (item.advancement.byType.ScaleValue ?? []);\n const spellProgression = await this._getSpellProgression(item);\n\n const headers = [[{content: game.i18n.localize(\"DND5E.Level\")}]];\n if ( item.type === \"class\" ) headers[0].push({content: game.i18n.localize(\"DND5E.ProficiencyBonus\")});\n if ( hasFeatures ) headers[0].push({content: game.i18n.localize(\"DND5E.Features\")});\n headers[0].push(...scaleValues.map(a => ({content: a.title})));\n if ( spellProgression ) {\n if ( spellProgression.headers.length > 1 ) {\n headers[0].forEach(h => h.rowSpan = 2);\n headers[0].push(...spellProgression.headers[0]);\n headers[1] = spellProgression.headers[1];\n } else {\n headers[0].push(...spellProgression.headers[0]);\n }\n }\n\n const cols = [{ class: \"level\", span: 1 }];\n if ( item.type === \"class\" ) cols.push({class: \"prof\", span: 1});\n if ( hasFeatures ) cols.push({class: \"features\", span: 1});\n if ( scaleValues.length ) cols.push({class: \"scale\", span: scaleValues.length});\n if ( spellProgression ) cols.push(...spellProgression.cols);\n\n const makeLink = async uuid => (await fromUuid(uuid))?.toAnchor({classes: [\"content-link\"]}).outerHTML;\n\n const rows = [];\n for ( const level of Array.fromRange((CONFIG.DND5E.maxLevel - (initialLevel - 1)), initialLevel) ) {\n const features = [];\n for ( const advancement of item.advancement.byLevel[level] ) {\n switch ( advancement.constructor.typeName ) {\n case \"ItemGrant\":\n if ( advancement.configuration.optional ) continue;\n features.push(...await Promise.all(advancement.configuration.items.map(makeLink)));\n break;\n }\n }\n\n // Level & proficiency bonus\n const cells = [{class: \"level\", content: level.ordinalString()}];\n if ( item.type === \"class\" ) cells.push({class: \"prof\", content: `+${Proficiency.calculateMod(level)}`});\n if ( hasFeatures ) cells.push({class: \"features\", content: features.join(\", \")});\n scaleValues.forEach(s => cells.push({class: \"scale\", content: s.valueForLevel(level)?.display}));\n const spellCells = spellProgression?.rows[rows.length];\n if ( spellCells ) cells.push(...spellCells);\n\n // Skip empty rows on subclasses\n if ( (item.type === \"subclass\") && !features.length && !scaleValues.length && !spellCells ) continue;\n\n rows.push(cells);\n }\n\n return { headers, cols, rows };\n }\n\n /* -------------------------------------------- */\n\n /**\n * Build out the spell progression data.\n * @param {Item5e} item Class item belonging to this journal.\n * @returns {object} Prepared spell progression table.\n */\n async _getSpellProgression(item) {\n const spellcasting = foundry.utils.deepClone(item.spellcasting);\n if ( !spellcasting || (spellcasting.progression === \"none\") ) return null;\n\n const table = { rows: [] };\n\n if ( spellcasting.type === \"leveled\" ) {\n const spells = {};\n const maxSpellLevel = CONFIG.DND5E.SPELL_SLOT_TABLE[CONFIG.DND5E.SPELL_SLOT_TABLE.length - 1].length;\n Array.fromRange(maxSpellLevel, 1).forEach(l => spells[`spell${l}`] = {});\n\n let largestSlot;\n for ( const level of Array.fromRange(CONFIG.DND5E.maxLevel, 1).reverse() ) {\n const progression = { slot: 0 };\n spellcasting.levels = level;\n Actor5e.computeClassProgression(progression, item, { spellcasting });\n Actor5e.prepareSpellcastingSlots(spells, \"leveled\", progression);\n\n if ( !largestSlot ) largestSlot = Object.entries(spells).reduce((slot, [key, data]) => {\n if ( !data.max ) return slot;\n const level = parseInt(key.slice(5));\n if ( !Number.isNaN(level) && (level > slot) ) return level;\n return slot;\n }, -1);\n\n table.rows.push(Array.fromRange(largestSlot, 1).map(spellLevel => {\n return {class: \"spell-slots\", content: spells[`spell${spellLevel}`]?.max || \"—\"};\n }));\n }\n\n // Prepare headers & columns\n table.headers = [\n [{content: game.i18n.localize(\"JOURNALENTRYPAGE.DND5E.Class.SpellSlotsPerSpellLevel\"), colSpan: largestSlot}],\n Array.fromRange(largestSlot, 1).map(spellLevel => ({content: spellLevel.ordinalString()}))\n ];\n table.cols = [{class: \"spellcasting\", span: largestSlot}];\n table.rows.reverse();\n }\n\n else if ( spellcasting.type === \"pact\" ) {\n const spells = { pact: {} };\n\n table.headers = [[\n { content: game.i18n.localize(\"JOURNALENTRYPAGE.DND5E.Class.SpellSlots\") },\n { content: game.i18n.localize(\"JOURNALENTRYPAGE.DND5E.Class.SpellSlotLevel\") }\n ]];\n table.cols = [{class: \"spellcasting\", span: 2}];\n\n // Loop through each level, gathering \"Spell Slots\" & \"Slot Level\" for each one\n for ( const level of Array.fromRange(CONFIG.DND5E.maxLevel, 1) ) {\n const progression = { pact: 0 };\n spellcasting.levels = level;\n Actor5e.computeClassProgression(progression, item, { spellcasting });\n Actor5e.prepareSpellcastingSlots(spells, \"pact\", progression);\n table.rows.push([\n { class: \"spell-slots\", content: `${spells.pact.max}` },\n { class: \"slot-level\", content: spells.pact.level.ordinalString() }\n ]);\n }\n }\n\n else {\n /**\n * A hook event that fires to generate the table for custom spellcasting types.\n * The actual hook names include the spellcasting type (e.g. `dnd5e.buildPsionicSpellcastingTable`).\n * @param {object} table Table definition being built. *Will be mutated.*\n * @param {Item5e} item Class for which the spellcasting table is being built.\n * @param {SpellcastingDescription} spellcasting Spellcasting descriptive object.\n * @function dnd5e.buildSpellcastingTable\n * @memberof hookEvents\n */\n Hooks.callAll(\n `dnd5e.build${spellcasting.type.capitalize()}SpellcastingTable`, table, item, spellcasting\n );\n }\n\n return table;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare options table based on optional GrantItem advancement.\n * @param {Item5e} item Class item belonging to this journal.\n * @returns {object|null} Prepared optional features table.\n */\n async _getOptionalTable(item) {\n const headers = [[\n { content: game.i18n.localize(\"DND5E.Level\") },\n { content: game.i18n.localize(\"DND5E.Features\") }\n ]];\n\n const cols = [\n { class: \"level\", span: 1 },\n { class: \"features\", span: 1 }\n ];\n\n const makeLink = async uuid => (await fromUuid(uuid))?.toAnchor({classes: [\"content-link\"]}).outerHTML;\n\n const rows = [];\n for ( const level of Array.fromRange(CONFIG.DND5E.maxLevel, 1) ) {\n const features = [];\n for ( const advancement of item.advancement.byLevel[level] ) {\n switch ( advancement.constructor.typeName ) {\n case \"ItemGrant\":\n if ( !advancement.configuration.optional ) continue;\n features.push(...await Promise.all(advancement.configuration.items.map(makeLink)));\n break;\n }\n }\n if ( !features.length ) continue;\n\n // Level & proficiency bonus\n const cells = [\n { class: \"level\", content: level.ordinalString() },\n { class: \"features\", content: features.join(\", \") }\n ];\n rows.push(cells);\n }\n if ( !rows.length ) return null;\n\n return { headers, cols, rows };\n }\n\n /* -------------------------------------------- */\n\n /**\n * Fetch data for each class feature listed.\n * @param {Item5e} item Class or subclass item belonging to this journal.\n * @param {boolean} [optional=false] Should optional features be fetched rather than required features?\n * @returns {object[]} Prepared features.\n */\n async _getFeatures(item, optional=false) {\n const prepareFeature = async uuid => {\n const document = await fromUuid(uuid);\n return {\n document,\n name: document.name,\n description: await TextEditor.enrichHTML(document.system.description.value, {\n relativeTo: item, secrets: false, async: true\n })\n };\n };\n\n let features = [];\n for ( const advancement of item.advancement.byType.ItemGrant ?? [] ) {\n if ( !!advancement.configuration.optional !== optional ) continue;\n features.push(...advancement.configuration.items.map(prepareFeature));\n }\n features = await Promise.all(features);\n return features;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Fetch each subclass and their features.\n * @param {string[]} uuids UUIDs for the subclasses to fetch.\n * @returns {object[]|null} Prepared subclasses.\n */\n async _getSubclasses(uuids) {\n const prepareSubclass = async uuid => {\n const document = await fromUuid(uuid);\n return this._getSubclass(document);\n };\n\n const subclasses = await Promise.all(uuids.map(prepareSubclass));\n return subclasses.length ? subclasses : null;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Prepare data for the provided subclass.\n * @param {Item5e} item Subclass item being prepared.\n * @returns {object} Presentation data for this subclass.\n */\n async _getSubclass(item) {\n const initialLevel = Object.entries(item.advancement.byLevel).find(([lvl, d]) => d.length)?.[0] ?? 1;\n return {\n document: item,\n name: item.name,\n description: await TextEditor.enrichHTML(item.system.description.value, {\n relativeTo: item, secrets: false, async: true\n }),\n features: await this._getFeatures(item),\n table: await this._getTable(item, parseInt(initialLevel))\n };\n }\n\n /* -------------------------------------------- */\n /* Rendering */\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async _renderInner(...args) {\n const html = await super._renderInner(...args);\n this.toc = JournalEntryPage.buildTOC(html.get());\n return html;\n }\n\n /* -------------------------------------------- */\n /* Event Handlers */\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n activateListeners(html) {\n super.activateListeners(html);\n html[0].querySelectorAll(\".item-delete\").forEach(e => {\n e.addEventListener(\"click\", this._onDeleteItem.bind(this));\n });\n html[0].querySelectorAll(\".launch-text-editor\").forEach(e => {\n e.addEventListener(\"click\", this._onLaunchTextEditor.bind(this));\n });\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle deleting a dropped item.\n * @param {Event} event The triggering click event.\n * @returns {JournalClassSummary5ePageSheet}\n */\n async _onDeleteItem(event) {\n event.preventDefault();\n const container = event.currentTarget.closest(\"[data-item-uuid]\");\n const uuidToDelete = container?.dataset.itemUuid;\n if ( !uuidToDelete ) return;\n switch (container.dataset.itemType) {\n case \"class\":\n await this.document.update({\"system.item\": \"\"});\n return this.render();\n case \"subclass\":\n const itemSet = this.document.system.subclassItems;\n itemSet.delete(uuidToDelete);\n await this.document.update({\"system.subclassItems\": Array.from(itemSet)});\n return this.render();\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle launching the individual text editing window.\n * @param {Event} event The triggering click event.\n */\n _onLaunchTextEditor(event) {\n event.preventDefault();\n const textKeyPath = event.currentTarget.dataset.target;\n const label = event.target.closest(\".form-group\").querySelector(\"label\");\n const editor = new JournalEditor(this.document, { textKeyPath, title: label?.innerText });\n editor.render(true);\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async _onDrop(event) {\n const data = TextEditor.getDragEventData(event);\n\n if ( data?.type !== \"Item\" ) return false;\n const item = await Item.implementation.fromDropData(data);\n switch ( item.type ) {\n case \"class\":\n await this.document.update({\"system.item\": item.uuid});\n return this.render();\n case \"subclass\":\n const itemSet = this.document.system.subclassItems;\n itemSet.add(item.uuid);\n await this.document.update({\"system.subclassItems\": Array.from(itemSet)});\n return this.render();\n default:\n return false;\n }\n }\n}\n","export default class SRDCompendium extends Compendium {\n /** @inheritdoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n classes: [\"srd-compendium\"],\n template: \"systems/dnd5e/templates/journal/srd-compendium.hbs\",\n width: 800,\n height: 950,\n resizable: true\n });\n }\n\n /* -------------------------------------------- */\n\n /**\n * The IDs of some special pages that we use when configuring the display of the compendium.\n * @type {Object}\n * @protected\n */\n static _SPECIAL_PAGES = {\n disclaimer: \"xxt7YT2t76JxNTel\",\n magicItemList: \"sfJtvPjEs50Ruzi4\",\n spellList: \"plCB5ei1JbVtBseb\"\n };\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async getData(options) {\n const data = await super.getData(options);\n const documents = await this.collection.getDocuments();\n const getOrder = o => ({chapter: 0, appendix: 100}[o.flags?.dnd5e?.type] ?? 200) + (o.flags?.dnd5e?.position ?? 0);\n data.disclaimer = this.collection.get(this.constructor._SPECIAL_PAGES.disclaimer).pages.contents[0].text.content;\n data.chapters = documents.reduce((arr, entry) => {\n const type = entry.getFlag(\"dnd5e\", \"type\");\n if ( !type ) return arr;\n const e = entry.toObject();\n e.showPages = (e.pages.length > 1) && (type === \"chapter\");\n arr.push(e);\n return arr;\n }, []).sort((a, b) => getOrder(a) - getOrder(b));\n // Add spells A-Z to the end of Chapter 10.\n const spellList = this.collection.get(this.constructor._SPECIAL_PAGES.spellList);\n data.chapters[9].pages.push({_id: spellList.id, name: spellList.name, entry: true});\n // Add magic items A-Z to the end of Chapter 11.\n const magicItemList = this.collection.get(this.constructor._SPECIAL_PAGES.magicItemList);\n data.chapters[10].pages.push({_id: magicItemList.id, name: magicItemList.name, entry: true});\n return data;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n activateListeners(html) {\n super.activateListeners(html);\n html.find(\"a\").on(\"click\", this._onClickLink.bind(this));\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle clicking a link to a journal entry or page.\n * @param {MouseEvent} event The triggering click event.\n * @protected\n */\n async _onClickLink(event) {\n const target = event.currentTarget;\n const entryId = target.closest(\"[data-entry-id]\")?.dataset.entryId;\n const pageId = target.closest(\"[data-page-id]\")?.dataset.pageId;\n if ( !entryId ) return;\n const options = {};\n if ( pageId ) options.pageId = pageId;\n const entry = await this.collection.getDocument(entryId);\n entry?.sheet.render(true, options);\n }\n}\n","import TraitSelector from \"./trait-selector.mjs\";\n\n/**\n * @deprecated since dnd5e 2.1, targeted for removal in 2.3\n */\nexport default class DamageTraitSelector extends TraitSelector {\n\n /** @inheritdoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n template: \"systems/dnd5e/templates/apps/damage-trait-selector.hbs\"\n });\n }\n\n /* -------------------------------------------- */\n\n /** @override */\n getData() {\n const data = super.getData();\n const attr = foundry.utils.getProperty(this.object, this.attribute);\n\n data.bypasses = Object.entries(this.options.bypasses).reduce((obj, [k, v]) => {\n obj[k] = { label: v, chosen: attr ? attr.bypasses.includes(k) : false };\n return obj;\n }, {});\n\n return data;\n }\n\n /* -------------------------------------------- */\n\n /** @override */\n async _updateObject(event, formData) {\n const data = foundry.utils.expandObject(formData);\n const updateData = this._prepareUpdateData(data.choices);\n if ( !updateData ) return;\n updateData[`${this.attribute}.bypasses`] = Object.entries(data.bypasses).filter(([, v]) => v).map(([k]) => k);\n this.object.update(updateData);\n }\n\n}\n","import TraitSelector from \"./trait-selector.mjs\";\nimport * as Trait from \"../documents/actor/trait.mjs\";\n\n/**\n * An application for selecting proficiencies with categories that can contain children.\n * @deprecated since dnd5e 2.1, targeted for removal in 2.3\n */\nexport default class ProficiencySelector extends TraitSelector {\n\n /** @inheritdoc */\n static get defaultOptions() {\n return foundry.utils.mergeObject(super.defaultOptions, {\n title: \"Actor Proficiency Selection\",\n type: \"\"\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async getData() {\n const attr = foundry.utils.getProperty(this.object, this.attribute);\n const chosen = (this.options.valueKey) ? foundry.utils.getProperty(attr, this.options.valueKey) ?? [] : attr;\n\n const data = super.getData();\n data.choices = await Trait.choices(this.options.type, chosen);\n return data;\n }\n\n /* -------------------------------------------- */\n\n /**\n * A static helper method to get a list of choices for a proficiency type.\n *\n * @param {string} type Proficiency type to select, either `armor`, `tool`, or `weapon`.\n * @param {string[]} [chosen] Optional list of items to be marked as chosen.\n * @returns {Object} Object mapping proficiency ids to choice objects.\n * @deprecated since dnd5e 2.1, targeted for removal in 2.3\n */\n static async getChoices(type, chosen=[]) {\n foundry.utils.logCompatibilityWarning(\n \"ProficiencySelector#getChoices has been deprecated in favor of Trait#choices.\",\n { since: \"DnD5e 2.1\", until: \"DnD5e 2.3\" }\n );\n return Trait.choices(type, chosen);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Fetch an item for the provided ID. If the provided ID contains a compendium pack name\n * it will be fetched from that pack, otherwise it will be fetched from the compendium defined\n * in `DND5E.sourcePacks.ITEMS`.\n *\n * @param {string} identifier Simple ID or compendium name and ID separated by a dot.\n * @param {object} [options]\n * @param {boolean} [options.indexOnly] If set to true, only the index data will be fetched (will never return\n * Promise).\n * @param {boolean} [options.fullItem] If set to true, the full item will be returned as long as `indexOnly` is\n * false.\n * @returns {Promise|object} Promise for a `Document` if `indexOnly` is false & `fullItem` is true,\n * otherwise else a simple object containing the minimal index data.\n * @deprecated since dnd5e 2.1, targeted for removal in 2.3\n */\n static getBaseItem(identifier, options) {\n foundry.utils.logCompatibilityWarning(\n \"ProficiencySelector#getBaseItem has been deprecated in favor of Trait#getBaseItem.\",\n { since: \"DnD5e 2.1\", until: \"DnD5e 2.3\" }\n );\n return Trait.getBaseItem(identifier, options);\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n activateListeners(html) {\n super.activateListeners(html);\n\n for ( const checkbox of html[0].querySelectorAll(\"input[type='checkbox']\") ) {\n if ( checkbox.checked ) this._onToggleCategory(checkbox);\n }\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async _onChangeInput(event) {\n super._onChangeInput(event);\n\n if ( event.target.tagName === \"INPUT\" ) this._onToggleCategory(event.target);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Enable/disable all children when a category is checked.\n *\n * @param {HTMLElement} checkbox Checkbox that was changed.\n * @private\n */\n _onToggleCategory(checkbox) {\n const children = checkbox.closest(\"li\")?.querySelector(\"ol\");\n if ( !children ) return;\n\n for ( const child of children.querySelectorAll(\"input[type='checkbox']\") ) {\n child.checked = child.disabled = checkbox.checked;\n }\n }\n\n}\n","/**\n * A helper class for building MeasuredTemplates for 5e spells and abilities\n */\nexport default class AbilityTemplate extends MeasuredTemplate {\n\n /**\n * Track the timestamp when the last mouse move event was captured.\n * @type {number}\n */\n #moveTime = 0;\n\n /* -------------------------------------------- */\n\n /**\n * The initially active CanvasLayer to re-activate after the workflow is complete.\n * @type {CanvasLayer}\n */\n #initialLayer;\n\n /* -------------------------------------------- */\n\n /**\n * Track the bound event handlers so they can be properly canceled later.\n * @type {object}\n */\n #events;\n\n /* -------------------------------------------- */\n\n /**\n * A factory method to create an AbilityTemplate instance using provided data from an Item5e instance\n * @param {Item5e} item The Item object for which to construct the template\n * @returns {AbilityTemplate|null} The template object, or null if the item does not produce a template\n */\n static fromItem(item) {\n const target = item.system.target ?? {};\n const templateShape = dnd5e.config.areaTargetTypes[target.type]?.template;\n if ( !templateShape ) return null;\n\n // Prepare template data\n const templateData = {\n t: templateShape,\n user: game.user.id,\n distance: target.value,\n direction: 0,\n x: 0,\n y: 0,\n fillColor: game.user.color,\n flags: { dnd5e: { origin: item.uuid } }\n };\n\n // Additional type-specific data\n switch ( templateShape ) {\n case \"cone\":\n templateData.angle = CONFIG.MeasuredTemplate.defaults.angle;\n break;\n case \"rect\": // 5e rectangular AoEs are always cubes\n templateData.distance = Math.hypot(target.value, target.value);\n templateData.width = target.value;\n templateData.direction = 45;\n break;\n case \"ray\": // 5e rays are most commonly 1 square (5 ft) in width\n templateData.width = target.width ?? canvas.dimensions.distance;\n break;\n default:\n break;\n }\n\n // Return the template constructed from the item data\n const cls = CONFIG.MeasuredTemplate.documentClass;\n const template = new cls(templateData, {parent: canvas.scene});\n const object = new this(template);\n object.item = item;\n object.actorSheet = item.actor?.sheet || null;\n return object;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Creates a preview of the spell template.\n * @returns {Promise} A promise that resolves with the final measured template if created.\n */\n drawPreview() {\n const initialLayer = canvas.activeLayer;\n\n // Draw the template and switch to the template layer\n this.draw();\n this.layer.activate();\n this.layer.preview.addChild(this);\n\n // Hide the sheet that originated the preview\n this.actorSheet?.minimize();\n\n // Activate interactivity\n return this.activatePreviewListeners(initialLayer);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Activate listeners for the template preview\n * @param {CanvasLayer} initialLayer The initially active CanvasLayer to re-activate after the workflow is complete\n * @returns {Promise} A promise that resolves with the final measured template if created.\n */\n activatePreviewListeners(initialLayer) {\n return new Promise((resolve, reject) => {\n this.#initialLayer = initialLayer;\n this.#events = {\n cancel: this._onCancelPlacement.bind(this),\n confirm: this._onConfirmPlacement.bind(this),\n move: this._onMovePlacement.bind(this),\n resolve,\n reject,\n rotate: this._onRotatePlacement.bind(this)\n };\n\n // Activate listeners\n canvas.stage.on(\"mousemove\", this.#events.move);\n canvas.stage.on(\"mousedown\", this.#events.confirm);\n canvas.app.view.oncontextmenu = this.#events.cancel;\n canvas.app.view.onwheel = this.#events.rotate;\n });\n }\n\n /* -------------------------------------------- */\n\n /**\n * Shared code for when template placement ends by being confirmed or canceled.\n * @param {Event} event Triggering event that ended the placement.\n */\n async _finishPlacement(event) {\n this.layer._onDragLeftCancel(event);\n canvas.stage.off(\"mousemove\", this.#events.move);\n canvas.stage.off(\"mousedown\", this.#events.confirm);\n canvas.app.view.oncontextmenu = null;\n canvas.app.view.onwheel = null;\n this.#initialLayer.activate();\n await this.actorSheet?.maximize();\n }\n\n /* -------------------------------------------- */\n\n /**\n * Move the template preview when the mouse moves.\n * @param {Event} event Triggering mouse event.\n */\n _onMovePlacement(event) {\n event.stopPropagation();\n const now = Date.now(); // Apply a 20ms throttle\n if ( now - this.#moveTime <= 20 ) return;\n const center = event.data.getLocalPosition(this.layer);\n const interval = canvas.grid.type === CONST.GRID_TYPES.GRIDLESS ? 0 : 2;\n const snapped = canvas.grid.getSnappedPosition(center.x, center.y, interval);\n this.document.updateSource({x: snapped.x, y: snapped.y});\n this.refresh();\n this.#moveTime = now;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Rotate the template preview by 3Ëš increments when the mouse wheel is rotated.\n * @param {Event} event Triggering mouse event.\n */\n _onRotatePlacement(event) {\n if ( event.ctrlKey ) event.preventDefault(); // Avoid zooming the browser window\n event.stopPropagation();\n const delta = canvas.grid.type > CONST.GRID_TYPES.SQUARE ? 30 : 15;\n const snap = event.shiftKey ? delta : 5;\n const update = {direction: this.document.direction + (snap * Math.sign(event.deltaY))};\n this.document.updateSource(update);\n this.refresh();\n }\n\n /* -------------------------------------------- */\n\n /**\n * Confirm placement when the left mouse button is clicked.\n * @param {Event} event Triggering mouse event.\n */\n async _onConfirmPlacement(event) {\n await this._finishPlacement(event);\n const interval = canvas.grid.type === CONST.GRID_TYPES.GRIDLESS ? 0 : 2;\n const destination = canvas.grid.getSnappedPosition(this.document.x, this.document.y, interval);\n this.document.updateSource(destination);\n this.#events.resolve(canvas.scene.createEmbeddedDocuments(\"MeasuredTemplate\", [this.document.toObject()]));\n }\n\n /* -------------------------------------------- */\n\n /**\n * Cancel placement when the right mouse button is clicked.\n * @param {Event} event Triggering mouse event.\n */\n async _onCancelPlacement(event) {\n await this._finishPlacement(event);\n this.#events.reject();\n }\n\n}\n","/**\n * Extend the base Token class to implement additional system-specific logic.\n */\nexport default class Token5e extends Token {\n\n /** @inheritdoc */\n _drawBar(number, bar, data) {\n if ( data.attribute === \"attributes.hp\" ) return this._drawHPBar(number, bar, data);\n return super._drawBar(number, bar, data);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Specialized drawing function for HP bars.\n * @param {number} number The Bar number\n * @param {PIXI.Graphics} bar The Bar container\n * @param {object} data Resource data for this bar\n * @private\n */\n _drawHPBar(number, bar, data) {\n\n // Extract health data\n let {value, max, temp, tempmax} = this.document.actor.system.attributes.hp;\n temp = Number(temp || 0);\n tempmax = Number(tempmax || 0);\n\n // Differentiate between effective maximum and displayed maximum\n const effectiveMax = Math.max(0, max + tempmax);\n let displayMax = max + (tempmax > 0 ? tempmax : 0);\n\n // Allocate percentages of the total\n const tempPct = Math.clamped(temp, 0, displayMax) / displayMax;\n const colorPct = Math.clamped(value, 0, effectiveMax) / displayMax;\n const hpColor = dnd5e.documents.Actor5e.getHPColor(value, effectiveMax);\n\n // Determine colors to use\n const blk = 0x000000;\n const c = CONFIG.DND5E.tokenHPColors;\n\n // Determine the container size (logic borrowed from core)\n const w = this.w;\n let h = Math.max((canvas.dimensions.size / 12), 8);\n if ( this.document.height >= 2 ) h *= 1.6;\n const bs = Math.clamped(h / 8, 1, 2);\n const bs1 = bs+1;\n\n // Overall bar container\n bar.clear();\n bar.beginFill(blk, 0.5).lineStyle(bs, blk, 1.0).drawRoundedRect(0, 0, w, h, 3);\n\n // Temporary maximum HP\n if (tempmax > 0) {\n const pct = max / effectiveMax;\n bar.beginFill(c.tempmax, 1.0).lineStyle(1, blk, 1.0).drawRoundedRect(pct*w, 0, (1-pct)*w, h, 2);\n }\n\n // Maximum HP penalty\n else if (tempmax < 0) {\n const pct = (max + tempmax) / max;\n bar.beginFill(c.negmax, 1.0).lineStyle(1, blk, 1.0).drawRoundedRect(pct*w, 0, (1-pct)*w, h, 2);\n }\n\n // Health bar\n bar.beginFill(hpColor, 1.0).lineStyle(bs, blk, 1.0).drawRoundedRect(0, 0, colorPct*w, h, 2);\n\n // Temporary hit points\n if ( temp > 0 ) {\n bar.beginFill(c.temp, 1.0).lineStyle(0).drawRoundedRect(bs1, bs1, (tempPct*w)-(2*bs1), h-(2*bs1), 1);\n }\n\n // Set position\n let posY = (number === 0) ? (this.h - h) : 0;\n bar.position.set(0, posY);\n }\n}\n","/** @inheritDoc */\nexport function measureDistances(segments, options={}) {\n if ( !options.gridSpaces ) return BaseGrid.prototype.measureDistances.call(this, segments, options);\n\n // Track the total number of diagonals\n let nDiagonal = 0;\n const rule = this.parent.diagonalRule;\n const d = canvas.dimensions;\n\n // Iterate over measured segments\n return segments.map(s => {\n let r = s.ray;\n\n // Determine the total distance traveled\n let nx = Math.abs(Math.ceil(r.dx / d.size));\n let ny = Math.abs(Math.ceil(r.dy / d.size));\n\n // Determine the number of straight and diagonal moves\n let nd = Math.min(nx, ny);\n let ns = Math.abs(ny - nx);\n nDiagonal += nd;\n\n // Alternative DMG Movement\n if (rule === \"5105\") {\n let nd10 = Math.floor(nDiagonal / 2) - Math.floor((nDiagonal - nd) / 2);\n let spaces = (nd10 * 2) + (nd - nd10) + ns;\n return spaces * canvas.dimensions.distance;\n }\n\n // Euclidean Measurement\n else if (rule === \"EUCL\") {\n return Math.round(Math.hypot(nx, ny) * canvas.scene.grid.distance);\n }\n\n // Standard PHB Movement\n else return (ns + nd) * canvas.scene.grid.distance;\n });\n}\n","/**\n * Data Model variant with some extra methods to support template mix-ins.\n *\n * **Note**: This uses some advanced Javascript techniques that are not necessary for most data models.\n * Please refer to the [advancement data models]{@link BaseAdvancement} for an example of a more typical usage.\n *\n * In template.json, each Actor or Item type can incorporate several templates which are chunks of data that are\n * common across all the types that use them. One way to represent them in the schema for a given Document type is to\n * duplicate schema definitions for the templates and write them directly into the Data Model for the Document type.\n * This works fine for small templates or systems that do not need many Document types but for more complex systems\n * this boilerplate can become prohibitive.\n *\n * Here we have opted to instead create a separate Data Model for each template available. These define their own\n * schemas which are then mixed-in to the final schema for the Document type's Data Model. A Document type Data Model\n * can define its own schema unique to it, and then add templates in direct correspondence to those in template.json\n * via SystemDataModel.mixin.\n */\nexport default class SystemDataModel extends foundry.abstract.DataModel {\n\n /** @inheritdoc */\n static _enableV10Validation = true;\n\n /**\n * System type that this system data model represents (e.g. \"character\", \"npc\", \"vehicle\").\n * @type {string}\n */\n static _systemType;\n\n /* -------------------------------------------- */\n\n /**\n * Base templates used for construction.\n * @type {*[]}\n * @private\n */\n static _schemaTemplates = [];\n\n /* -------------------------------------------- */\n\n /**\n * A list of properties that should not be mixed-in to the final type.\n * @type {Set}\n * @private\n */\n static _immiscible = new Set([\"length\", \"mixed\", \"name\", \"prototype\", \"migrateData\", \"defineSchema\"]);\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static defineSchema() {\n const schema = {};\n for ( const template of this._schemaTemplates ) {\n if ( !template.defineSchema ) {\n throw new Error(`Invalid dnd5e template mixin ${template} defined on class ${this.constructor}`);\n }\n this.mergeSchema(schema, template.defineSchema());\n }\n return schema;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Merge two schema definitions together as well as possible.\n * @param {DataSchema} a First schema that forms the basis for the merge. *Will be mutated.*\n * @param {DataSchema} b Second schema that will be merged in, overwriting any non-mergeable properties.\n * @returns {DataSchema} Fully merged schema.\n */\n static mergeSchema(a, b) {\n Object.assign(a, b);\n return a;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static migrateData(source) {\n for ( const template of this._schemaTemplates ) {\n template.migrateData?.(source);\n }\n return super.migrateData(source);\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n validate(options={}) {\n if ( this.constructor._enableV10Validation === false ) return true;\n return super.validate(options);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Mix multiple templates with the base type.\n * @param {...*} templates Template classes to mix.\n * @returns {typeof SystemDataModel} Final prepared type.\n */\n static mixin(...templates) {\n const Base = class extends this {};\n Object.defineProperty(Base, \"_schemaTemplates\", {\n value: Object.seal([...this._schemaTemplates, ...templates]),\n writable: false,\n configurable: false\n });\n\n for ( const template of templates ) {\n // Take all static methods and fields from template and mix in to base class\n for ( const [key, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(template)) ) {\n if ( this._immiscible.has(key) ) continue;\n Object.defineProperty(Base, key, descriptor);\n }\n\n // Take all instance methods and fields from template and mix in to base class\n for ( const [key, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(template.prototype)) ) {\n if ( [\"constructor\"].includes(key) ) continue;\n Object.defineProperty(Base.prototype, key, descriptor);\n }\n }\n\n return Base;\n }\n}\n","import { FormulaField } from \"../../fields.mjs\";\n\n/**\n * Shared contents of the attributes schema between various actor types.\n */\nexport default class AttributesFields {\n /**\n * Fields shared between characters, NPCs, and vehicles.\n *\n * @type {object}\n * @property {object} init\n * @property {number} init.value Calculated initiative modifier.\n * @property {number} init.bonus Fixed bonus provided to initiative rolls.\n * @property {object} movement\n * @property {number} movement.burrow Actor burrowing speed.\n * @property {number} movement.climb Actor climbing speed.\n * @property {number} movement.fly Actor flying speed.\n * @property {number} movement.swim Actor swimming speed.\n * @property {number} movement.walk Actor walking speed.\n * @property {string} movement.units Movement used to measure the various speeds.\n * @property {boolean} movement.hover Is this flying creature able to hover in place.\n */\n static get common() {\n return {\n init: new foundry.data.fields.SchemaField({\n ability: new foundry.data.fields.StringField({label: \"DND5E.AbilityModifier\"}),\n bonus: new FormulaField({label: \"DND5E.InitiativeBonus\"})\n }, { label: \"DND5E.Initiative\" }),\n movement: new foundry.data.fields.SchemaField({\n burrow: new foundry.data.fields.NumberField({\n nullable: false, min: 0, step: 0.1, initial: 0, label: \"DND5E.MovementBurrow\"\n }),\n climb: new foundry.data.fields.NumberField({\n nullable: false, min: 0, step: 0.1, initial: 0, label: \"DND5E.MovementClimb\"\n }),\n fly: new foundry.data.fields.NumberField({\n nullable: false, min: 0, step: 0.1, initial: 0, label: \"DND5E.MovementFly\"\n }),\n swim: new foundry.data.fields.NumberField({\n nullable: false, min: 0, step: 0.1, initial: 0, label: \"DND5E.MovementSwim\"\n }),\n walk: new foundry.data.fields.NumberField({\n nullable: false, min: 0, step: 0.1, initial: 30, label: \"DND5E.MovementWalk\"\n }),\n units: new foundry.data.fields.StringField({initial: \"ft\", label: \"DND5E.MovementUnits\"}),\n hover: new foundry.data.fields.BooleanField({label: \"DND5E.MovementHover\"})\n }, {label: \"DND5E.Movement\"})\n };\n }\n\n /* -------------------------------------------- */\n\n /**\n * Fields shared between characters and NPCs.\n *\n * @type {object}\n * @property {object} attunement\n * @property {number} attunement.max Maximum number of attuned items.\n * @property {object} senses\n * @property {number} senses.darkvision Creature's darkvision range.\n * @property {number} senses.blindsight Creature's blindsight range.\n * @property {number} senses.tremorsense Creature's tremorsense range.\n * @property {number} senses.truesight Creature's truesight range.\n * @property {string} senses.units Distance units used to measure senses.\n * @property {string} senses.special Description of any special senses or restrictions.\n * @property {string} spellcasting Primary spellcasting ability.\n */\n static get creature() {\n return {\n attunement: new foundry.data.fields.SchemaField({\n max: new foundry.data.fields.NumberField({\n required: true, nullable: false, integer: true, min: 0, initial: 3, label: \"DND5E.AttunementMax\"\n })\n }, {label: \"DND5E.Attunement\"}),\n senses: new foundry.data.fields.SchemaField({\n darkvision: new foundry.data.fields.NumberField({\n required: true, nullable: false, integer: true, min: 0, initial: 0, label: \"DND5E.SenseDarkvision\"\n }),\n blindsight: new foundry.data.fields.NumberField({\n required: true, nullable: false, integer: true, min: 0, initial: 0, label: \"DND5E.SenseBlindsight\"\n }),\n tremorsense: new foundry.data.fields.NumberField({\n required: true, nullable: false, integer: true, min: 0, initial: 0, label: \"DND5E.SenseTremorsense\"\n }),\n truesight: new foundry.data.fields.NumberField({\n required: true, nullable: false, integer: true, min: 0, initial: 0, label: \"DND5E.SenseTruesight\"\n }),\n units: new foundry.data.fields.StringField({required: true, initial: \"ft\", label: \"DND5E.SenseUnits\"}),\n special: new foundry.data.fields.StringField({required: true, label: \"DND5E.SenseSpecial\"})\n }, {label: \"DND5E.Senses\"}),\n spellcasting: new foundry.data.fields.StringField({\n required: true, blank: true, initial: \"int\", label: \"DND5E.SpellAbility\"\n })\n };\n }\n\n /* -------------------------------------------- */\n\n /**\n * Migrate the old init.value and incorporate it into init.bonus.\n * @param {object} source The source attributes object.\n * @internal\n */\n static _migrateInitiative(source) {\n const init = source?.init;\n if ( !init?.value || (typeof init?.bonus === \"string\") ) return;\n if ( init.bonus ) init.bonus += init.value < 0 ? ` - ${init.value * -1}` : ` + ${init.value}`;\n else init.bonus = `${init.value}`;\n }\n}\n","import { MappingField } from \"../fields.mjs\";\n\n/**\n * A template for currently held currencies.\n *\n * @property {object} currency Object containing currencies as numbers.\n * @mixin\n */\nexport default class CurrencyTemplate extends foundry.abstract.DataModel {\n /** @inheritdoc */\n static defineSchema() {\n return {\n currency: new MappingField(new foundry.data.fields.NumberField({\n required: true, nullable: false, integer: true, min: 0, initial: 0\n }), {initialKeys: CONFIG.DND5E.currencies, initialKeysOnly: true, label: \"DND5E.Currency\"})\n };\n }\n}\n","import SystemDataModel from \"../../abstract.mjs\";\nimport { FormulaField, MappingField } from \"../../fields.mjs\";\nimport CurrencyTemplate from \"../../shared/currency.mjs\";\n\n/**\n * @typedef {object} AbilityData\n * @property {number} value Ability score.\n * @property {number} proficient Proficiency value for saves.\n * @property {object} bonuses Bonuses that modify ability checks and saves.\n * @property {string} bonuses.check Numeric or dice bonus to ability checks.\n * @property {string} bonuses.save Numeric or dice bonus to ability saving throws.\n */\n\n/**\n * A template for all actors that share the common template.\n *\n * @property {Object} abilities Actor's abilities.\n * @mixin\n */\nexport default class CommonTemplate extends SystemDataModel.mixin(CurrencyTemplate) {\n\n /** @inheritdoc */\n static defineSchema() {\n return this.mergeSchema(super.defineSchema(), {\n abilities: new MappingField(new foundry.data.fields.SchemaField({\n value: new foundry.data.fields.NumberField({\n required: true, nullable: false, integer: true, min: 0, initial: 10, label: \"DND5E.AbilityScore\"\n }),\n proficient: new foundry.data.fields.NumberField({required: true, initial: 0, label: \"DND5E.ProficiencyLevel\"}),\n bonuses: new foundry.data.fields.SchemaField({\n check: new FormulaField({required: true, label: \"DND5E.AbilityCheckBonus\"}),\n save: new FormulaField({required: true, label: \"DND5E.SaveBonus\"})\n }, {label: \"DND5E.AbilityBonuses\"})\n }), {\n initialKeys: CONFIG.DND5E.abilities, initialValue: this._initialAbilityValue.bind(this),\n initialKeysOnly: true, label: \"DND5E.Abilities\"\n })\n });\n }\n\n /* -------------------------------------------- */\n\n /**\n * Populate the proper initial value for abilities.\n * @param {string} key Key for which the initial data will be created.\n * @param {object} initial The initial skill object created by SkillData.\n * @param {object} existing Any existing mapping data.\n * @returns {object} Initial ability object.\n * @private\n */\n static _initialAbilityValue(key, initial, existing) {\n const config = CONFIG.DND5E.abilities[key];\n if ( config ) {\n let defaultValue = config.defaults?.[this._systemType] ?? initial.value;\n if ( typeof defaultValue === \"string\" ) defaultValue = existing?.[defaultValue]?.value ?? initial.value;\n initial.value = defaultValue;\n }\n return initial;\n }\n\n /* -------------------------------------------- */\n /* Migrations */\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static migrateData(source) {\n super.migrateData(source);\n CommonTemplate.#migrateACData(source);\n CommonTemplate.#migrateMovementData(source);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Migrate the actor ac.value to new ac.flat override field.\n * @param {object} source The candidate source data from which the model will be constructed.\n */\n static #migrateACData(source) {\n if ( !source.attributes?.ac ) return;\n const ac = source.attributes.ac;\n\n // If the actor has a numeric ac.value, then their AC has not been migrated to the auto-calculation schema yet.\n if ( Number.isNumeric(ac.value) ) {\n ac.flat = parseInt(ac.value);\n ac.calc = this._systemType === \"npc\" ? \"natural\" : \"flat\";\n return;\n }\n\n // Migrate ac.base in custom formulas to ac.armor\n if ( (typeof ac.formula === \"string\") && ac.formula.includes(\"@attributes.ac.base\") ) {\n ac.formula = ac.formula.replaceAll(\"@attributes.ac.base\", \"@attributes.ac.armor\");\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * Migrate the actor speed string to movement object.\n * @param {object} source The candidate source data from which the model will be constructed.\n */\n static #migrateMovementData(source) {\n const original = source.attributes?.speed?.value ?? source.attributes?.speed;\n if ( (typeof original !== \"string\") || (source.attributes.movement?.walk !== undefined) ) return;\n source.attributes.movement ??= {};\n const s = original.split(\" \");\n if ( s.length > 0 ) source.attributes.movement.walk = Number.isNumeric(s[0]) ? parseInt(s[0]) : 0;\n }\n}\n","import { FormulaField, MappingField } from \"../../fields.mjs\";\nimport CommonTemplate from \"./common.mjs\";\n\n/**\n * @typedef {object} SkillData\n * @property {number} value Proficiency level creature has in this skill.\n * @property {string} ability Default ability used for this skill.\n * @property {object} bonuses Bonuses for this skill.\n * @property {string} bonuses.check Numeric or dice bonus to skill's check.\n * @property {string} bonuses.passive Numeric bonus to skill's passive check.\n */\n\n/**\n * A template for all actors that are creatures\n *\n * @property {object} bonuses\n * @property {AttackBonusesData} bonuses.mwak Bonuses to melee weapon attacks.\n * @property {AttackBonusesData} bonuses.rwak Bonuses to ranged weapon attacks.\n * @property {AttackBonusesData} bonuses.msak Bonuses to melee spell attacks.\n * @property {AttackBonusesData} bonuses.rsak Bonuses to ranged spell attacks.\n * @property {object} bonuses.abilities Bonuses to ability scores.\n * @property {string} bonuses.abilities.check Numeric or dice bonus to ability checks.\n * @property {string} bonuses.abilities.save Numeric or dice bonus to ability saves.\n * @property {string} bonuses.abilities.skill Numeric or dice bonus to skill checks.\n * @property {object} bonuses.spell Bonuses to spells.\n * @property {string} bonuses.spell.dc Numeric bonus to spellcasting DC.\n * @property {Object} skills Actor's skills.\n * @property {Object} spells Actor's spell slots.\n */\nexport default class CreatureTemplate extends CommonTemplate {\n static defineSchema() {\n return this.mergeSchema(super.defineSchema(), {\n bonuses: new foundry.data.fields.SchemaField({\n mwak: makeAttackBonuses({label: \"DND5E.BonusMWAttack\"}),\n rwak: makeAttackBonuses({label: \"DND5E.BonusRWAttack\"}),\n msak: makeAttackBonuses({label: \"DND5E.BonusMSAttack\"}),\n rsak: makeAttackBonuses({label: \"DND5E.BonusRSAttack\"}),\n abilities: new foundry.data.fields.SchemaField({\n check: new FormulaField({required: true, label: \"DND5E.BonusAbilityCheck\"}),\n save: new FormulaField({required: true, label: \"DND5E.BonusAbilitySave\"}),\n skill: new FormulaField({required: true, label: \"DND5E.BonusAbilitySkill\"})\n }, {label: \"DND5E.BonusAbility\"}),\n spell: new foundry.data.fields.SchemaField({\n dc: new FormulaField({required: true, deterministic: true, label: \"DND5E.BonusSpellDC\"})\n }, {label: \"DND5E.BonusSpell\"})\n }, {label: \"DND5E.Bonuses\"}),\n skills: new MappingField(new foundry.data.fields.SchemaField({\n value: new foundry.data.fields.NumberField({\n required: true, min: 0, max: 2, step: 0.5, initial: 0, label: \"DND5E.ProficiencyLevel\"\n }),\n ability: new foundry.data.fields.StringField({required: true, initial: \"dex\", label: \"DND5E.Ability\"}),\n bonuses: new foundry.data.fields.SchemaField({\n check: new FormulaField({required: true, label: \"DND5E.SkillBonusCheck\"}),\n passive: new FormulaField({required: true, label: \"DND5E.SkillBonusPassive\"})\n }, {label: \"DND5E.SkillBonuses\"})\n }), {\n initialKeys: CONFIG.DND5E.skills, initialValue: this._initialSkillValue,\n initialKeysOnly: true, label: \"DND5E.Skills\"\n }),\n tools: new MappingField(new foundry.data.fields.SchemaField({\n value: new foundry.data.fields.NumberField({\n required: true, min: 0, max: 2, step: 0.5, initial: 1, label: \"DND5E.ProficiencyLevel\"\n }),\n ability: new foundry.data.fields.StringField({required: true, initial: \"int\", label: \"DND5E.Ability\"}),\n bonuses: new foundry.data.fields.SchemaField({\n check: new FormulaField({required: true, label: \"DND5E.CheckBonus\"})\n }, {label: \"DND5E.ToolBonuses\"})\n })),\n spells: new MappingField(new foundry.data.fields.SchemaField({\n value: new foundry.data.fields.NumberField({\n nullable: false, integer: true, min: 0, initial: 0, label: \"DND5E.SpellProgAvailable\"\n }),\n override: new foundry.data.fields.NumberField({\n integer: true, min: 0, label: \"DND5E.SpellProgOverride\"\n })\n }), {initialKeys: this._spellLevels, label: \"DND5E.SpellLevels\"})\n });\n }\n\n /* -------------------------------------------- */\n\n /**\n * Populate the proper initial abilities for the skills.\n * @param {string} key Key for which the initial data will be created.\n * @param {object} initial The initial skill object created by SkillData.\n * @returns {object} Initial skills object with the ability defined.\n * @private\n */\n static _initialSkillValue(key, initial) {\n if ( CONFIG.DND5E.skills[key]?.ability ) initial.ability = CONFIG.DND5E.skills[key].ability;\n return initial;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Helper for building the default list of spell levels.\n * @type {string[]}\n * @private\n */\n static get _spellLevels() {\n const levels = Object.keys(CONFIG.DND5E.spellLevels).filter(a => a !== \"0\").map(l => `spell${l}`);\n return [...levels, \"pact\"];\n }\n\n /* -------------------------------------------- */\n /* Migrations */\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static migrateData(source) {\n super.migrateData(source);\n CreatureTemplate.#migrateSensesData(source);\n CreatureTemplate.#migrateToolData(source);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Migrate the actor traits.senses string to attributes.senses object.\n * @param {object} source The candidate source data from which the model will be constructed.\n */\n static #migrateSensesData(source) {\n const original = source.traits?.senses;\n if ( (original === undefined) || (typeof original !== \"string\") ) return;\n source.attributes ??= {};\n source.attributes.senses ??= {};\n\n // Try to match old senses with the format like \"Darkvision 60 ft, Blindsight 30 ft\"\n const pattern = /([A-z]+)\\s?([0-9]+)\\s?([A-z]+)?/;\n let wasMatched = false;\n\n // Match each comma-separated term\n for ( let s of original.split(\",\") ) {\n s = s.trim();\n const match = s.match(pattern);\n if ( !match ) continue;\n const type = match[1].toLowerCase();\n if ( (type in CONFIG.DND5E.senses) && !(type in source.attributes.senses) ) {\n source.attributes.senses[type] = Number(match[2]).toNearest(0.5);\n wasMatched = true;\n }\n }\n\n // If nothing was matched, but there was an old string - put the whole thing in \"special\"\n if ( !wasMatched && original ) source.attributes.senses.special = original;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Migrate traits.toolProf to the tools field.\n * @param {object} source The candidate source data from which the model will be constructed.\n */\n static #migrateToolData(source) {\n const original = source.traits?.toolProf;\n if ( !original || foundry.utils.isEmpty(original.value) ) return;\n source.tools ??= {};\n for ( const prof of original.value ) {\n const validProf = (prof in CONFIG.DND5E.toolProficiencies) || (prof in CONST.DND5E.toolIds);\n if ( !validProf || (prof in source.tools) ) continue;\n source.tools[prof] = {\n value: 1,\n ability: \"int\",\n bonuses: {check: \"\"}\n };\n }\n }\n}\n\n/* -------------------------------------------- */\n\n/**\n * Data on configuration of a specific spell slot.\n *\n * @typedef {object} SpellSlotData\n * @property {number} value Currently available spell slots.\n * @property {number} override Number to replace auto-calculated max slots.\n */\n\n/* -------------------------------------------- */\n\n/**\n * Data structure for actor's attack bonuses.\n *\n * @typedef {object} AttackBonusesData\n * @property {string} attack Numeric or dice bonus to attack rolls.\n * @property {string} damage Numeric or dice bonus to damage rolls.\n */\n\n/**\n * Produce the schema field for a simple trait.\n * @param {object} schemaOptions Options passed to the outer schema.\n * @returns {AttackBonusesData}\n */\nfunction makeAttackBonuses(schemaOptions={}) {\n return new foundry.data.fields.SchemaField({\n attack: new FormulaField({required: true, label: \"DND5E.BonusAttack\"}),\n damage: new FormulaField({required: true, label: \"DND5E.BonusDamage\"})\n }, schemaOptions);\n}\n","/**\n * Shared contents of the details schema between various actor types.\n */\nexport default class DetailsField {\n /**\n * Fields shared between characters, NPCs, and vehicles.\n *\n * @type {object}\n * @property {object} biography Actor's biography data.\n * @property {string} biography.value Full HTML biography information.\n * @property {string} biography.public Biography that will be displayed to players with observer privileges.\n */\n static get common() {\n return {\n biography: new foundry.data.fields.SchemaField({\n value: new foundry.data.fields.HTMLField({label: \"DND5E.Biography\"}),\n public: new foundry.data.fields.HTMLField({label: \"DND5E.BiographyPublic\"})\n }, {label: \"DND5E.Biography\"})\n };\n }\n\n /* -------------------------------------------- */\n\n /**\n * Fields shared between characters and NPCs.\n *\n * @type {object}\n * @property {string} alignment Creature's alignment.\n * @property {string} race Creature's race.\n */\n static get creature() {\n return {\n alignment: new foundry.data.fields.StringField({required: true, label: \"DND5E.Alignment\"}),\n race: new foundry.data.fields.StringField({required: true, label: \"DND5E.Race\"})\n };\n }\n}\n","/**\n * Shared contents of the traits schema between various actor types.\n */\nexport default class TraitsField {\n /**\n * Data structure for a standard actor trait.\n *\n * @typedef {object} SimpleTraitData\n * @property {Set} value Keys for currently selected traits.\n * @property {string} custom Semicolon-separated list of custom traits.\n */\n\n /**\n * Data structure for a damage actor trait.\n *\n * @typedef {object} DamageTraitData\n * @property {Set} value Keys for currently selected traits.\n * @property {Set} bypasses Keys for physical weapon properties that cause resistances to be bypassed.\n * @property {string} custom Semicolon-separated list of custom traits.\n */\n\n /* -------------------------------------------- */\n\n /**\n * Fields shared between characters, NPCs, and vehicles.\n *\n * @type {object}\n * @property {string} size Actor's size.\n * @property {DamageTraitData} di Damage immunities.\n * @property {DamageTraitData} dr Damage resistances.\n * @property {DamageTraitData} dv Damage vulnerabilities.\n * @property {SimpleTraitData} ci Condition immunities.\n */\n static get common() {\n return {\n size: new foundry.data.fields.StringField({required: true, initial: \"med\", label: \"DND5E.Size\"}),\n di: this.makeDamageTrait({label: \"DND5E.DamImm\"}),\n dr: this.makeDamageTrait({label: \"DND5E.DamRes\"}),\n dv: this.makeDamageTrait({label: \"DND5E.DamVuln\"}),\n ci: this.makeSimpleTrait({label: \"DND5E.ConImm\"})\n };\n }\n\n /* -------------------------------------------- */\n\n /**\n * Fields shared between characters and NPCs.\n *\n * @type {object}\n * @property {SimpleTraitData} languages Languages known by this creature.\n */\n static get creature() {\n return {\n languages: this.makeSimpleTrait({label: \"DND5E.Languages\"})\n };\n }\n\n /* -------------------------------------------- */\n\n /**\n * Produce the schema field for a simple trait.\n * @param {object} [schemaOptions={}] Options passed to the outer schema.\n * @param {object} [options={}]\n * @param {string[]} [options.initial={}] The initial value for the value set.\n * @param {object} [options.extraFields={}] Additional fields added to schema.\n * @returns {SchemaField}\n */\n static makeSimpleTrait(schemaOptions={}, {initial=[], extraFields={}}={}) {\n return new foundry.data.fields.SchemaField({\n ...extraFields,\n value: new foundry.data.fields.SetField(\n new foundry.data.fields.StringField(), {label: \"DND5E.TraitsChosen\", initial}\n ),\n custom: new foundry.data.fields.StringField({required: true, label: \"DND5E.Special\"})\n }, schemaOptions);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Produce the schema field for a damage trait.\n * @param {object} [schemaOptions={}] Options passed to the outer schema.\n * @param {object} [options={}]\n * @param {string[]} [options.initial={}] The initial value for the value set.\n * @param {object} [options.extraFields={}] Additional fields added to schema.\n * @returns {SchemaField}\n */\n static makeDamageTrait(schemaOptions={}, {initial=[], initialBypasses=[], extraFields={}}={}) {\n return this.makeSimpleTrait(schemaOptions, {initial, extraFields: {\n ...extraFields,\n bypasses: new foundry.data.fields.SetField(new foundry.data.fields.StringField(), {\n label: \"DND5E.DamagePhysicalBypass\", hint: \"DND5E.DamagePhysicalBypassHint\", initial: initialBypasses\n })\n }});\n }\n}\n","import { FormulaField } from \"../fields.mjs\";\nimport AttributesFields from \"./templates/attributes.mjs\";\nimport CreatureTemplate from \"./templates/creature.mjs\";\nimport DetailsFields from \"./templates/details.mjs\";\nimport TraitsFields from \"./templates/traits.mjs\";\n\n/**\n * System data definition for Characters.\n *\n * @property {object} attributes\n * @property {object} attributes.ac\n * @property {number} attributes.ac.flat Flat value used for flat or natural armor calculation.\n * @property {string} attributes.ac.calc Name of one of the built-in formulas to use.\n * @property {string} attributes.ac.formula Custom formula to use.\n * @property {object} attributes.hp\n * @property {number} attributes.hp.value Current hit points.\n * @property {number} attributes.hp.max Override for maximum HP.\n * @property {number} attributes.hp.temp Temporary HP applied on top of value.\n * @property {number} attributes.hp.tempmax Temporary change to the maximum HP.\n * @property {object} attributes.hp.bonuses\n * @property {string} attributes.hp.bonuses.level Bonus formula applied for each class level.\n * @property {string} attributes.hp.bonuses.overall Bonus formula applied to total HP.\n * @property {object} attributes.death\n * @property {number} attributes.death.success Number of successful death saves.\n * @property {number} attributes.death.failure Number of failed death saves.\n * @property {number} attributes.exhaustion Number of levels of exhaustion.\n * @property {number} attributes.inspiration Does this character have inspiration?\n * @property {object} details\n * @property {string} details.background Name of character's background.\n * @property {string} details.originalClass ID of first class taken by character.\n * @property {XPData} details.xp Experience points gained.\n * @property {number} details.xp.value Total experience points earned.\n * @property {string} details.appearance Description of character's appearance.\n * @property {string} details.trait Character's personality traits.\n * @property {string} details.ideal Character's ideals.\n * @property {string} details.bond Character's bonds.\n * @property {string} details.flaw Character's flaws.\n * @property {object} traits\n * @property {SimpleTraitData} traits.weaponProf Character's weapon proficiencies.\n * @property {SimpleTraitData} traits.armorProf Character's armor proficiencies.\n * @property {object} resources\n * @property {CharacterResourceData} resources.primary Resource number one.\n * @property {CharacterResourceData} resources.secondary Resource number two.\n * @property {CharacterResourceData} resources.tertiary Resource number three.\n */\nexport default class CharacterData extends CreatureTemplate {\n\n /** @inheritdoc */\n static _systemType = \"character\";\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static defineSchema() {\n return this.mergeSchema(super.defineSchema(), {\n attributes: new foundry.data.fields.SchemaField({\n ...AttributesFields.common,\n ...AttributesFields.creature,\n ac: new foundry.data.fields.SchemaField({\n flat: new foundry.data.fields.NumberField({integer: true, min: 0, label: \"DND5E.ArmorClassFlat\"}),\n calc: new foundry.data.fields.StringField({initial: \"default\", label: \"DND5E.ArmorClassCalculation\"}),\n formula: new FormulaField({deterministic: true, label: \"DND5E.ArmorClassFormula\"})\n }, {label: \"DND5E.ArmorClass\"}),\n hp: new foundry.data.fields.SchemaField({\n value: new foundry.data.fields.NumberField({\n nullable: false, integer: true, min: 0, initial: 0, label: \"DND5E.HitPointsCurrent\"\n }),\n max: new foundry.data.fields.NumberField({\n nullable: true, integer: true, min: 0, initial: null, label: \"DND5E.HitPointsOverride\"\n }),\n temp: new foundry.data.fields.NumberField({integer: true, initial: 0, min: 0, label: \"DND5E.HitPointsTemp\"}),\n tempmax: new foundry.data.fields.NumberField({integer: true, initial: 0, label: \"DND5E.HitPointsTempMax\"}),\n bonuses: new foundry.data.fields.SchemaField({\n level: new FormulaField({deterministic: true, label: \"DND5E.HitPointsBonusLevel\"}),\n overall: new FormulaField({deterministic: true, label: \"DND5E.HitPointsBonusOverall\"})\n })\n }, {label: \"DND5E.HitPoints\"}),\n death: new foundry.data.fields.SchemaField({\n success: new foundry.data.fields.NumberField({\n required: true, nullable: false, integer: true, min: 0, initial: 0, label: \"DND5E.DeathSaveSuccesses\"\n }),\n failure: new foundry.data.fields.NumberField({\n required: true, nullable: false, integer: true, min: 0, initial: 0, label: \"DND5E.DeathSaveFailures\"\n })\n }, {label: \"DND5E.DeathSave\"}),\n exhaustion: new foundry.data.fields.NumberField({\n required: true, nullable: false, integer: true, min: 0, initial: 0, label: \"DND5E.Exhaustion\"\n }),\n inspiration: new foundry.data.fields.BooleanField({required: true, label: \"DND5E.Inspiration\"})\n }, {label: \"DND5E.Attributes\"}),\n details: new foundry.data.fields.SchemaField({\n ...DetailsFields.common,\n ...DetailsFields.creature,\n background: new foundry.data.fields.StringField({required: true, label: \"DND5E.Background\"}),\n originalClass: new foundry.data.fields.StringField({required: true, label: \"DND5E.ClassOriginal\"}),\n xp: new foundry.data.fields.SchemaField({\n value: new foundry.data.fields.NumberField({\n required: true, nullable: false, integer: true, min: 0, initial: 0, label: \"DND5E.ExperiencePointsCurrent\"\n })\n }, {label: \"DND5E.ExperiencePoints\"}),\n appearance: new foundry.data.fields.StringField({required: true, label: \"DND5E.Appearance\"}),\n trait: new foundry.data.fields.StringField({required: true, label: \"DND5E.PersonalityTraits\"}),\n ideal: new foundry.data.fields.StringField({required: true, label: \"DND5E.Ideals\"}),\n bond: new foundry.data.fields.StringField({required: true, label: \"DND5E.Bonds\"}),\n flaw: new foundry.data.fields.StringField({required: true, label: \"DND5E.Flaws\"})\n }, {label: \"DND5E.Details\"}),\n traits: new foundry.data.fields.SchemaField({\n ...TraitsFields.common,\n ...TraitsFields.creature,\n weaponProf: TraitsFields.makeSimpleTrait({label: \"DND5E.TraitWeaponProf\"}),\n armorProf: TraitsFields.makeSimpleTrait({label: \"DND5E.TraitArmorProf\"})\n }, {label: \"DND5E.Traits\"}),\n resources: new foundry.data.fields.SchemaField({\n primary: makeResourceField({label: \"DND5E.ResourcePrimary\"}),\n secondary: makeResourceField({label: \"DND5E.ResourceSecondary\"}),\n tertiary: makeResourceField({label: \"DND5E.ResourceTertiary\"})\n }, {label: \"DND5E.Resources\"})\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static migrateData(source) {\n super.migrateData(source);\n AttributesFields._migrateInitiative(source.attributes);\n }\n}\n\n/* -------------------------------------------- */\n\n/**\n * Data structure for character's resources.\n *\n * @typedef {object} ResourceData\n * @property {number} value Available uses of this resource.\n * @property {number} max Maximum allowed uses of this resource.\n * @property {boolean} sr Does this resource recover on a short rest?\n * @property {boolean} lr Does this resource recover on a long rest?\n * @property {string} label Displayed name.\n */\n\n/**\n * Produce the schema field for a simple trait.\n * @param {object} schemaOptions Options passed to the outer schema.\n * @returns {ResourceData}\n */\nfunction makeResourceField(schemaOptions={}) {\n return new foundry.data.fields.SchemaField({\n value: new foundry.data.fields.NumberField({\n required: true, integer: true, initial: 0, labels: \"DND5E.ResourceValue\"\n }),\n max: new foundry.data.fields.NumberField({\n required: true, integer: true, initial: 0, labels: \"DND5E.ResourceMax\"\n }),\n sr: new foundry.data.fields.BooleanField({required: true, labels: \"DND5E.ShortRestRecovery\"}),\n lr: new foundry.data.fields.BooleanField({required: true, labels: \"DND5E.LongRestRecovery\"}),\n label: new foundry.data.fields.StringField({required: true, labels: \"DND5E.ResourceLabel\"})\n }, schemaOptions);\n}\n","import SystemDataModel from \"../abstract.mjs\";\nimport CurrencyTemplate from \"../shared/currency.mjs\";\n\n/**\n * A data model and API layer which handles the schema and functionality of \"group\" type Actors in the dnd5e system.\n * @mixes CurrencyTemplate\n *\n * @property {object} description\n * @property {string} description.full Description of this group.\n * @property {string} description.summary Summary description (currently unused).\n * @property {Set} members IDs of actors belonging to this group in the world collection.\n * @property {object} attributes\n * @property {object} attributes.movement\n * @property {number} attributes.movement.land Base movement speed over land.\n * @property {number} attributes.movement.water Base movement speed over water.\n * @property {number} attributes.movement.air Base movement speed through the air.\n *\n * @example Create a new Group\n * const g = new dnd5e.documents.Actor5e({\n * type: \"group\",\n * name: \"Test Group\",\n * system: {\n * members: [\"3f3hoYFWUgDqBP4U\"]\n * }\n * });\n */\nexport default class GroupActor extends SystemDataModel.mixin(CurrencyTemplate) {\n /** @inheritdoc */\n static defineSchema() {\n return this.mergeSchema(super.defineSchema(), {\n description: new foundry.data.fields.SchemaField({\n full: new foundry.data.fields.HTMLField({label: \"DND5E.Description\"}),\n summary: new foundry.data.fields.HTMLField({label: \"DND5E.DescriptionSummary\"})\n }),\n members: new foundry.data.fields.SetField(\n new foundry.data.fields.ForeignDocumentField(foundry.documents.BaseActor, {idOnly: true}),\n {label: \"DND5E.GroupMembers\"}\n ),\n attributes: new foundry.data.fields.SchemaField({\n movement: new foundry.data.fields.SchemaField({\n land: new foundry.data.fields.NumberField({\n nullable: false, min: 0, step: 0.1, initial: 0, label: \"DND5E.MovementLand\"\n }),\n water: new foundry.data.fields.NumberField({\n nullable: false, min: 0, step: 0.1, initial: 0, label: \"DND5E.MovementWater\"\n }),\n air: new foundry.data.fields.NumberField({\n nullable: false, min: 0, step: 0.1, initial: 0, label: \"DND5E.MovementAir\"\n })\n })\n }, {label: \"DND5E.Attributes\"})\n });\n }\n\n /* -------------------------------------------- */\n /* Data Preparation */\n /* -------------------------------------------- */\n\n /**\n * Prepare base data for group actors.\n * @internal\n */\n _prepareBaseData() {\n this.members.clear();\n for ( const id of this._source.members ) {\n const a = game.actors.get(id);\n if ( a ) {\n if ( a.type === \"group\" ) {\n console.warn(`Group \"${this._id}\" may not contain another Group \"${a.id}\" as a member.`);\n }\n else this.members.add(a);\n }\n else console.warn(`Actor \"${id}\" in group \"${this._id}\" does not exist within the World.`);\n }\n }\n\n /**\n * Prepare derived data for group actors.\n * @internal\n */\n _prepareDerivedData() {\n // No preparation needed at this time\n }\n\n /* -------------------------------------------- */\n /* Methods */\n /* -------------------------------------------- */\n\n /**\n * Add a new member to the group.\n * @param {Actor5e} actor A non-group Actor to add to the group\n * @returns {Promise} The updated group Actor\n */\n async addMember(actor) {\n if ( actor.type === \"group\" ) throw new Error(\"You may not add a group within a group.\");\n if ( actor.pack ) throw new Error(\"You may only add Actors to the group which exist within the World.\");\n const memberIds = this._source.members;\n if ( memberIds.includes(actor.id) ) return;\n return this.parent.update({\n system: {\n members: memberIds.concat([actor.id])\n }\n });\n }\n\n /* -------------------------------------------- */\n\n /**\n * Remove a member from the group.\n * @param {Actor5e|string} actor An Actor or ID to remove from this group\n * @returns {Promise} The updated group Actor\n */\n async removeMember(actor) {\n const memberIds = foundry.utils.deepClone(this._source.members);\n\n // Handle user input\n let actorId;\n if ( typeof actor === \"string\" ) actorId = actor;\n else if ( actor instanceof Actor ) actorId = actor.id;\n else throw new Error(\"You must provide an Actor document or an actor ID to remove a group member\");\n if ( !memberIds.includes(actorId) ) throw new Error(`Actor id \"${actorId}\" is not a group member`);\n\n // Remove the actor and update the parent document\n memberIds.findSplice(id => id === actorId);\n return this.parent.update({\n system: {\n members: memberIds\n }\n });\n }\n}\n","import { FormulaField } from \"../fields.mjs\";\nimport AttributesFields from \"./templates/attributes.mjs\";\nimport CreatureTemplate from \"./templates/creature.mjs\";\nimport DetailsFields from \"./templates/details.mjs\";\nimport TraitsFields from \"./templates/traits.mjs\";\n\n/**\n * System data definition for NPCs.\n *\n * @property {object} attributes\n * @property {object} attributes.ac\n * @property {number} attributes.ac.flat Flat value used for flat or natural armor calculation.\n * @property {string} attributes.ac.calc Name of one of the built-in formulas to use.\n * @property {string} attributes.ac.formula Custom formula to use.\n * @property {object} attributes.hp\n * @property {number} attributes.hp.value Current hit points.\n * @property {number} attributes.hp.max Maximum allowed HP value.\n * @property {number} attributes.hp.temp Temporary HP applied on top of value.\n * @property {number} attributes.hp.tempmax Temporary change to the maximum HP.\n * @property {string} attributes.hp.formula Formula used to determine hit points.\n * @property {object} details\n * @property {TypeData} details.type Creature type of this NPC.\n * @property {string} details.type.value NPC's type as defined in the system configuration.\n * @property {string} details.type.subtype NPC's subtype usually displayed in parenthesis after main type.\n * @property {string} details.type.swarm Size of the individual creatures in a swarm, if a swarm.\n * @property {string} details.type.custom Custom type beyond what is available in the configuration.\n * @property {string} details.environment Common environments in which this NPC is found.\n * @property {number} details.cr NPC's challenge rating.\n * @property {number} details.spellLevel Spellcasting level of this NPC.\n * @property {string} details.source What book or adventure is this NPC from?\n * @property {object} resources\n * @property {object} resources.legact NPC's legendary actions.\n * @property {number} resources.legact.value Currently available legendary actions.\n * @property {number} resources.legact.max Maximum number of legendary actions.\n * @property {object} resources.legres NPC's legendary resistances.\n * @property {number} resources.legres.value Currently available legendary resistances.\n * @property {number} resources.legres.max Maximum number of legendary resistances.\n * @property {object} resources.lair NPC's lair actions.\n * @property {boolean} resources.lair.value Does this NPC use lair actions.\n * @property {number} resources.lair.initiative Initiative count when lair actions are triggered.\n */\nexport default class NPCData extends CreatureTemplate {\n\n /** @inheritdoc */\n static _systemType = \"npc\";\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static defineSchema() {\n return this.mergeSchema(super.defineSchema(), {\n attributes: new foundry.data.fields.SchemaField({\n ...AttributesFields.common,\n ...AttributesFields.creature,\n ac: new foundry.data.fields.SchemaField({\n flat: new foundry.data.fields.NumberField({integer: true, min: 0, label: \"DND5E.ArmorClassFlat\"}),\n calc: new foundry.data.fields.StringField({initial: \"default\", label: \"DND5E.ArmorClassCalculation\"}),\n formula: new FormulaField({deterministic: true, label: \"DND5E.ArmorClassFormula\"})\n }, {label: \"DND5E.ArmorClass\"}),\n hp: new foundry.data.fields.SchemaField({\n value: new foundry.data.fields.NumberField({\n nullable: false, integer: true, min: 0, initial: 10, label: \"DND5E.HitPointsCurrent\"\n }),\n max: new foundry.data.fields.NumberField({\n nullable: false, integer: true, min: 0, initial: 10, label: \"DND5E.HitPointsMax\"\n }),\n temp: new foundry.data.fields.NumberField({integer: true, initial: 0, min: 0, label: \"DND5E.HitPointsTemp\"}),\n tempmax: new foundry.data.fields.NumberField({integer: true, initial: 0, label: \"DND5E.HitPointsTempMax\"}),\n formula: new FormulaField({required: true, label: \"DND5E.HPFormula\"})\n }, {label: \"DND5E.HitPoints\"})\n }, {label: \"DND5E.Attributes\"}),\n details: new foundry.data.fields.SchemaField({\n ...DetailsFields.common,\n ...DetailsFields.creature,\n type: new foundry.data.fields.SchemaField({\n value: new foundry.data.fields.StringField({required: true, blank: true, label: \"DND5E.CreatureType\"}),\n subtype: new foundry.data.fields.StringField({required: true, label: \"DND5E.CreatureTypeSelectorSubtype\"}),\n swarm: new foundry.data.fields.StringField({required: true, blank: true, label: \"DND5E.CreatureSwarmSize\"}),\n custom: new foundry.data.fields.StringField({required: true, label: \"DND5E.CreatureTypeSelectorCustom\"})\n }, {label: \"DND5E.CreatureType\"}),\n environment: new foundry.data.fields.StringField({required: true, label: \"DND5E.Environment\"}),\n cr: new foundry.data.fields.NumberField({\n required: true, nullable: false, min: 0, initial: 1, label: \"DND5E.ChallengeRating\"\n }),\n spellLevel: new foundry.data.fields.NumberField({\n required: true, nullable: false, integer: true, min: 0, initial: 0, label: \"DND5E.SpellcasterLevel\"\n }),\n source: new foundry.data.fields.StringField({required: true, label: \"DND5E.Source\"})\n }, {label: \"DND5E.Details\"}),\n resources: new foundry.data.fields.SchemaField({\n legact: new foundry.data.fields.SchemaField({\n value: new foundry.data.fields.NumberField({\n required: true, nullable: false, integer: true, min: 0, initial: 0, label: \"DND5E.LegActRemaining\"\n }),\n max: new foundry.data.fields.NumberField({\n required: true, nullable: false, integer: true, min: 0, initial: 0, label: \"DND5E.LegActMax\"\n })\n }, {label: \"DND5E.LegAct\"}),\n legres: new foundry.data.fields.SchemaField({\n value: new foundry.data.fields.NumberField({\n required: true, nullable: false, integer: true, min: 0, initial: 0, label: \"DND5E.LegResRemaining\"\n }),\n max: new foundry.data.fields.NumberField({\n required: true, nullable: false, integer: true, min: 0, initial: 0, label: \"DND5E.LegResMax\"\n })\n }, {label: \"DND5E.LegRes\"}),\n lair: new foundry.data.fields.SchemaField({\n value: new foundry.data.fields.BooleanField({required: true, label: \"DND5E.LairAct\"}),\n initiative: new foundry.data.fields.NumberField({\n required: true, integer: true, label: \"DND5E.LairActionInitiative\"\n })\n }, {label: \"DND5E.LairActionLabel\"})\n }, {label: \"DND5E.Resources\"}),\n traits: new foundry.data.fields.SchemaField({\n ...TraitsFields.common,\n ...TraitsFields.creature\n }, {label: \"DND5E.Traits\"})\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static migrateData(source) {\n super.migrateData(source);\n NPCData.#migrateTypeData(source);\n AttributesFields._migrateInitiative(source.attributes);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Migrate the actor type string to type object.\n * @param {object} source The candidate source data from which the model will be constructed.\n */\n static #migrateTypeData(source) {\n const original = source.type;\n if ( typeof original !== \"string\" ) return;\n\n source.type = {\n value: \"\",\n subtype: \"\",\n swarm: \"\",\n custom: \"\"\n };\n\n // Match the existing string\n const pattern = /^(?:swarm of (?[\\w-]+) )?(?[^(]+?)(?:\\((?[^)]+)\\))?$/i;\n const match = original.trim().match(pattern);\n if ( match ) {\n\n // Match a known creature type\n const typeLc = match.groups.type.trim().toLowerCase();\n const typeMatch = Object.entries(CONFIG.DND5E.creatureTypes).find(([k, v]) => {\n return (typeLc === k)\n || (typeLc === game.i18n.localize(v).toLowerCase())\n || (typeLc === game.i18n.localize(`${v}Pl`).toLowerCase());\n });\n if ( typeMatch ) source.type.value = typeMatch[0];\n else {\n source.type.value = \"custom\";\n source.type.custom = match.groups.type.trim().titleCase();\n }\n source.type.subtype = match.groups.subtype?.trim().titleCase() ?? \"\";\n\n // Match a swarm\n if ( match.groups.size ) {\n const sizeLc = match.groups.size ? match.groups.size.trim().toLowerCase() : \"tiny\";\n const sizeMatch = Object.entries(CONFIG.DND5E.actorSizes).find(([k, v]) => {\n return (sizeLc === k) || (sizeLc === game.i18n.localize(v).toLowerCase());\n });\n source.type.swarm = sizeMatch ? sizeMatch[0] : \"tiny\";\n }\n else source.type.swarm = \"\";\n }\n\n // No match found\n else {\n source.type.value = \"custom\";\n source.type.custom = original;\n }\n }\n}\n","import { FormulaField } from \"../fields.mjs\";\nimport AttributesFields from \"./templates/attributes.mjs\";\nimport CommonTemplate from \"./templates/common.mjs\";\nimport DetailsFields from \"./templates/details.mjs\";\nimport TraitsFields from \"./templates/traits.mjs\";\n\n/**\n * System data definition for Vehicles.\n *\n * @property {string} vehicleType Type of vehicle as defined in `DND5E.vehicleTypes`.\n * @property {object} attributes\n * @property {object} attributes.ac\n * @property {number} attributes.ac.flat Flat value used for flat or natural armor calculation.\n * @property {string} attributes.ac.calc Name of one of the built-in formulas to use.\n * @property {string} attributes.ac.formula Custom formula to use.\n * @property {string} attributes.ac.motionless Changes to vehicle AC when not moving.\n * @property {object} attributes.hp\n * @property {number} attributes.hp.value Current hit points.\n * @property {number} attributes.hp.max Maximum allowed HP value.\n * @property {number} attributes.hp.temp Temporary HP applied on top of value.\n * @property {number} attributes.hp.tempmax Temporary change to the maximum HP.\n * @property {number} attributes.hp.dt Damage threshold.\n * @property {number} attributes.hp.mt Mishap threshold.\n * @property {object} attributes.actions Information on how the vehicle performs actions.\n * @property {boolean} attributes.actions.stations Does this vehicle rely on action stations that required\n * individual crewing rather than general crew thresholds?\n * @property {number} attributes.actions.value Maximum number of actions available with full crewing.\n * @property {object} attributes.actions.thresholds Crew thresholds needed to perform various actions.\n * @property {number} attributes.actions.thresholds.2 Minimum crew needed to take full action complement.\n * @property {number} attributes.actions.thresholds.1 Minimum crew needed to take reduced action complement.\n * @property {number} attributes.actions.thresholds.0 Minimum crew needed to perform any actions.\n * @property {object} attributes.capacity Information on the vehicle's carrying capacity.\n * @property {string} attributes.capacity.creature Description of the number of creatures the vehicle can carry.\n * @property {number} attributes.capacity.cargo Cargo carrying capacity measured in tons.\n * @property {object} traits\n * @property {string} traits.dimensions Width and length of the vehicle.\n * @property {object} cargo Details on this vehicle's crew and cargo capacities.\n * @property {PassengerData[]} cargo.crew Creatures responsible for operating the vehicle.\n * @property {PassengerData[]} cargo.passengers Creatures just takin' a ride.\n */\nexport default class VehicleData extends CommonTemplate {\n\n /** @inheritdoc */\n static _systemType = \"vehicle\";\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static defineSchema() {\n return this.mergeSchema(super.defineSchema(), {\n vehicleType: new foundry.data.fields.StringField({required: true, initial: \"water\", label: \"DND5E.VehicleType\"}),\n attributes: new foundry.data.fields.SchemaField({\n ...AttributesFields.common,\n ac: new foundry.data.fields.SchemaField({\n flat: new foundry.data.fields.NumberField({integer: true, min: 0, label: \"DND5E.ArmorClassFlat\"}),\n calc: new foundry.data.fields.StringField({initial: \"default\", label: \"DND5E.ArmorClassCalculation\"}),\n formula: new FormulaField({deterministic: true, label: \"DND5E.ArmorClassFormula\"}),\n motionless: new foundry.data.fields.StringField({required: true, label: \"DND5E.ArmorClassMotionless\"})\n }, {label: \"DND5E.ArmorClass\"}),\n hp: new foundry.data.fields.SchemaField({\n value: new foundry.data.fields.NumberField({\n nullable: true, integer: true, min: 0, initial: null, label: \"DND5E.HitPointsCurrent\"\n }),\n max: new foundry.data.fields.NumberField({\n nullable: true, integer: true, min: 0, initial: null, label: \"DND5E.HitPointsMax\"\n }),\n temp: new foundry.data.fields.NumberField({integer: true, initial: 0, min: 0, label: \"DND5E.HitPointsTemp\"}),\n tempmax: new foundry.data.fields.NumberField({integer: true, initial: 0, label: \"DND5E.HitPointsTempMax\"}),\n dt: new foundry.data.fields.NumberField({\n required: true, integer: true, min: 0, label: \"DND5E.DamageThreshold\"\n }),\n mt: new foundry.data.fields.NumberField({\n required: true, integer: true, min: 0, label: \"DND5E.VehicleMishapThreshold\"\n })\n }, {label: \"DND5E.HitPoints\"}),\n actions: new foundry.data.fields.SchemaField({\n stations: new foundry.data.fields.BooleanField({required: true, label: \"DND5E.VehicleActionStations\"}),\n value: new foundry.data.fields.NumberField({\n required: true, nullable: false, integer: true, initial: 0, min: 0, label: \"DND5E.VehicleActionMax\"\n }),\n thresholds: new foundry.data.fields.SchemaField({\n 2: new foundry.data.fields.NumberField({\n required: true, integer: true, min: 0, label: \"DND5E.VehicleActionThresholdsFull\"\n }),\n 1: new foundry.data.fields.NumberField({\n required: true, integer: true, min: 0, label: \"DND5E.VehicleActionThresholdsMid\"\n }),\n 0: new foundry.data.fields.NumberField({\n required: true, integer: true, min: 0, label: \"DND5E.VehicleActionThresholdsMin\"\n })\n }, {label: \"DND5E.VehicleActionThresholds\"})\n }, {label: \"DND5E.VehicleActions\"}),\n capacity: new foundry.data.fields.SchemaField({\n creature: new foundry.data.fields.StringField({required: true, label: \"DND5E.VehicleCreatureCapacity\"}),\n cargo: new foundry.data.fields.NumberField({\n required: true, nullable: false, integer: true, initial: 0, min: 0, label: \"DND5E.VehicleCargoCapacity\"\n })\n }, {label: \"DND5E.VehicleCargoCrew\"})\n }, {label: \"DND5E.Attributes\"}),\n details: new foundry.data.fields.SchemaField({\n ...DetailsFields.common,\n source: new foundry.data.fields.StringField({required: true, label: \"DND5E.Source\"})\n }, {label: \"DND5E.Details\"}),\n traits: new foundry.data.fields.SchemaField({\n ...TraitsFields.common,\n size: new foundry.data.fields.StringField({required: true, initial: \"lg\", label: \"DND5E.Size\"}),\n di: TraitsFields.makeDamageTrait({label: \"DND5E.DamImm\"}, {initial: [\"poison\", \"psychic\"]}),\n ci: TraitsFields.makeSimpleTrait({label: \"DND5E.ConImm\"}, {initial: [\n \"blinded\", \"charmed\", \"deafened\", \"frightened\", \"paralyzed\",\n \"petrified\", \"poisoned\", \"stunned\", \"unconscious\"\n ]}),\n dimensions: new foundry.data.fields.StringField({required: true, label: \"DND5E.Dimensions\"})\n }, {label: \"DND5E.Traits\"}),\n cargo: new foundry.data.fields.SchemaField({\n crew: new foundry.data.fields.ArrayField(makePassengerData(), {label: \"DND5E.VehicleCrew\"}),\n passengers: new foundry.data.fields.ArrayField(makePassengerData(), {label: \"DND5E.VehiclePassengers\"})\n }, {label: \"DND5E.VehicleCrewPassengers\"})\n });\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static migrateData(source) {\n super.migrateData(source);\n AttributesFields._migrateInitiative(source.attributes);\n }\n}\n\n/* -------------------------------------------- */\n\n/**\n * Data structure for an entry in a vehicle's crew or passenger lists.\n *\n * @typedef {object} PassengerData\n * @property {string} name Name of individual or type of creature.\n * @property {number} quantity How many of this creature are onboard?\n */\n\n/**\n * Produce the schema field for a simple trait.\n * @param {object} schemaOptions Options passed to the outer schema.\n * @returns {PassengerData}\n */\nfunction makePassengerData(schemaOptions={}) {\n return new foundry.data.fields.SchemaField({\n name: new foundry.data.fields.StringField({required: true, label: \"DND5E.VehiclePassengerName\"}),\n quantity: new foundry.data.fields.NumberField({\n required: true, nullable: false, integer: true, initial: 0, min: 0, label: \"DND5E.VehiclePassengerQuantity\"\n })\n }, schemaOptions);\n}\n","import CharacterData from \"./character.mjs\";\nimport GroupData from \"./group.mjs\";\nimport NPCData from \"./npc.mjs\";\nimport VehicleData from \"./vehicle.mjs\";\n\nexport {\n CharacterData,\n GroupData,\n NPCData,\n VehicleData\n};\nexport {default as AttributesFields} from \"./templates/attributes.mjs\";\nexport {default as CommonTemplate} from \"./templates/common.mjs\";\nexport {default as CreatureTemplate} from \"./templates/creature.mjs\";\nexport {default as DetailsFields} from \"./templates/details.mjs\";\nexport {default as TraitsFields} from \"./templates/traits.mjs\";\n\nexport const config = {\n character: CharacterData,\n group: GroupData,\n npc: NPCData,\n vehicle: VehicleData\n};\n","/**\n * Data model template with item description & source.\n *\n * @property {object} description Various item descriptions.\n * @property {string} description.value Full item description.\n * @property {string} description.chat Description displayed in chat card.\n * @property {string} description.unidentified Description displayed if item is unidentified.\n * @property {string} source Adventure or sourcebook where this item originated.\n * @mixin\n */\nexport default class ItemDescriptionTemplate extends foundry.abstract.DataModel {\n /** @inheritdoc */\n static defineSchema() {\n return {\n description: new foundry.data.fields.SchemaField({\n value: new foundry.data.fields.HTMLField({required: true, nullable: true, label: \"DND5E.Description\"}),\n chat: new foundry.data.fields.HTMLField({required: true, nullable: true, label: \"DND5E.DescriptionChat\"}),\n unidentified: new foundry.data.fields.HTMLField({\n required: true, nullable: true, label: \"DND5E.DescriptionUnidentified\"\n })\n }),\n source: new foundry.data.fields.StringField({required: true, label: \"DND5E.Source\"})\n };\n }\n\n /* -------------------------------------------- */\n /* Migrations */\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static migrateData(source) {\n ItemDescriptionTemplate.#migrateSource(source);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Convert null source to the blank string.\n * @param {object} source The candidate source data from which the model will be constructed.\n */\n static #migrateSource(source) {\n if ( source.source === null ) source.source = \"\";\n }\n}\n","import SystemDataModel from \"../abstract.mjs\";\nimport { AdvancementField } from \"../fields.mjs\";\nimport ItemDescriptionTemplate from \"./templates/item-description.mjs\";\n\n/**\n * Data definition for Background items.\n * @mixes ItemDescriptionTemplate\n *\n * @property {object[]} advancement Advancement objects for this background.\n */\nexport default class BackgroundData extends SystemDataModel.mixin(ItemDescriptionTemplate) {\n /** @inheritdoc */\n static defineSchema() {\n return this.mergeSchema(super.defineSchema(), {\n advancement: new foundry.data.fields.ArrayField(new AdvancementField(), {label: \"DND5E.AdvancementTitle\"})\n });\n }\n}\n","import SystemDataModel from \"../abstract.mjs\";\nimport { AdvancementField, IdentifierField } from \"../fields.mjs\";\nimport ItemDescriptionTemplate from \"./templates/item-description.mjs\";\n\n/**\n * Data definition for Class items.\n * @mixes ItemDescriptionTemplate\n *\n * @property {string} identifier Identifier slug for this class.\n * @property {number} levels Current number of levels in this class.\n * @property {string} hitDice Denomination of hit dice available as defined in `DND5E.hitDieTypes`.\n * @property {number} hitDiceUsed Number of hit dice consumed.\n * @property {object[]} advancement Advancement objects for this class.\n * @property {string[]} saves Savings throws in which this class grants proficiency.\n * @property {object} skills Available class skills and selected skills.\n * @property {number} skills.number Number of skills selectable by the player.\n * @property {string[]} skills.choices List of skill keys that are valid to be chosen.\n * @property {string[]} skills.value List of skill keys the player has chosen.\n * @property {object} spellcasting Details on class's spellcasting ability.\n * @property {string} spellcasting.progression Spell progression granted by class as from `DND5E.spellProgression`.\n * @property {string} spellcasting.ability Ability score to use for spellcasting.\n */\nexport default class ClassData extends SystemDataModel.mixin(ItemDescriptionTemplate) {\n /** @inheritdoc */\n static defineSchema() {\n return this.mergeSchema(super.defineSchema(), {\n identifier: new IdentifierField({required: true, label: \"DND5E.Identifier\"}),\n levels: new foundry.data.fields.NumberField({\n required: true, nullable: false, integer: true, min: 0, initial: 1, label: \"DND5E.ClassLevels\"\n }),\n hitDice: new foundry.data.fields.StringField({\n required: true, initial: \"d6\", blank: false, label: \"DND5E.HitDice\",\n validate: v => /d\\d+/.test(v), validationError: \"must be a dice value in the format d#\"\n }),\n hitDiceUsed: new foundry.data.fields.NumberField({\n required: true, nullable: false, integer: true, initial: 0, min: 0, label: \"DND5E.HitDiceUsed\"\n }),\n advancement: new foundry.data.fields.ArrayField(new AdvancementField(), {label: \"DND5E.AdvancementTitle\"}),\n saves: new foundry.data.fields.ArrayField(new foundry.data.fields.StringField(), {label: \"DND5E.ClassSaves\"}),\n skills: new foundry.data.fields.SchemaField({\n number: new foundry.data.fields.NumberField({\n required: true, nullable: false, integer: true, min: 0, initial: 2, label: \"DND5E.ClassSkillsNumber\"\n }),\n choices: new foundry.data.fields.ArrayField(\n new foundry.data.fields.StringField(), {label: \"DND5E.ClassSkillsEligible\"}\n ),\n value: new foundry.data.fields.ArrayField(\n new foundry.data.fields.StringField(), {label: \"DND5E.ClassSkillsChosen\"}\n )\n }),\n spellcasting: new foundry.data.fields.SchemaField({\n progression: new foundry.data.fields.StringField({\n required: true, initial: \"none\", blank: false, label: \"DND5E.SpellProgression\"\n }),\n ability: new foundry.data.fields.StringField({required: true, label: \"DND5E.SpellAbility\"})\n }, {label: \"DND5E.Spellcasting\"})\n });\n }\n\n /* -------------------------------------------- */\n /* Migrations */\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static migrateData(source) {\n super.migrateData(source);\n ClassData.#migrateLevels(source);\n ClassData.#migrateSpellcastingData(source);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Migrate the class levels.\n * @param {object} source The candidate source data from which the model will be constructed.\n */\n static #migrateLevels(source) {\n if ( typeof source.levels !== \"string\" ) return;\n if ( source.levels === \"\" ) source.levels = 1;\n else if ( Number.isNumeric(source.levels) ) source.levels = Number(source.levels);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Migrate the class's spellcasting string to object.\n * @param {object} source The candidate source data from which the model will be constructed.\n */\n static #migrateSpellcastingData(source) {\n if ( source.spellcasting?.progression === \"\" ) source.spellcasting.progression = \"none\";\n if ( typeof source.spellcasting !== \"string\" ) return;\n source.spellcasting = {\n progression: source.spellcasting,\n ability: \"\"\n };\n }\n}\n","import { FormulaField } from \"../../fields.mjs\";\n\n/**\n * Data model template for item actions.\n *\n * @property {string} ability Ability score to use when determining modifier.\n * @property {string} actionType Action type as defined in `DND5E.itemActionTypes`.\n * @property {string} attackBonus Numeric or dice bonus to attack rolls.\n * @property {string} chatFlavor Extra text displayed in chat.\n * @property {object} critical Information on how critical hits are handled.\n * @property {number} critical.threshold Minimum number on the dice to roll a critical hit.\n * @property {string} critical.damage Extra damage on critical hit.\n * @property {object} damage Item damage formulas.\n * @property {string[][]} damage.parts Array of damage formula and types.\n * @property {string} damage.versatile Special versatile damage formula.\n * @property {string} formula Other roll formula.\n * @property {object} save Item saving throw data.\n * @property {string} save.ability Ability required for the save.\n * @property {number} save.dc Custom saving throw value.\n * @property {string} save.scaling Method for automatically determining saving throw DC.\n * @mixin\n */\nexport default class ActionTemplate extends foundry.abstract.DataModel {\n /** @inheritdoc */\n static defineSchema() {\n return {\n ability: new foundry.data.fields.StringField({\n required: true, nullable: true, initial: null, label: \"DND5E.AbilityModifier\"\n }),\n actionType: new foundry.data.fields.StringField({\n required: true, nullable: true, initial: null, label: \"DND5E.ItemActionType\"\n }),\n attackBonus: new FormulaField({required: true, label: \"DND5E.ItemAttackBonus\"}),\n chatFlavor: new foundry.data.fields.StringField({required: true, label: \"DND5E.ChatFlavor\"}),\n critical: new foundry.data.fields.SchemaField({\n threshold: new foundry.data.fields.NumberField({\n required: true, integer: true, initial: null, positive: true, label: \"DND5E.ItemCritThreshold\"\n }),\n damage: new FormulaField({required: true, label: \"DND5E.ItemCritExtraDamage\"})\n }),\n damage: new foundry.data.fields.SchemaField({\n parts: new foundry.data.fields.ArrayField(new foundry.data.fields.ArrayField(\n new foundry.data.fields.StringField({nullable: true})\n ), {required: true}),\n versatile: new FormulaField({required: true, label: \"DND5E.VersatileDamage\"})\n }, {label: \"DND5E.Damage\"}),\n formula: new FormulaField({required: true, label: \"DND5E.OtherFormula\"}),\n save: new foundry.data.fields.SchemaField({\n ability: new foundry.data.fields.StringField({required: true, blank: true, label: \"DND5E.Ability\"}),\n dc: new foundry.data.fields.NumberField({\n required: true, min: 0, integer: true, label: \"DND5E.AbbreviationDC\"\n }),\n scaling: new foundry.data.fields.StringField({\n required: true, blank: false, initial: \"spell\", label: \"DND5E.ScalingFormula\"\n })\n }, {label: \"DND5E.SavingThrow\"})\n };\n }\n\n /* -------------------------------------------- */\n /* Migrations */\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static migrateData(source) {\n ActionTemplate.#migrateAbility(source);\n ActionTemplate.#migrateAttackBonus(source);\n ActionTemplate.#migrateCritical(source);\n ActionTemplate.#migrateSave(source);\n ActionTemplate.#migrateDamage(source);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Migrate the ability field.\n * @param {object} source The candidate source data from which the model will be constructed.\n */\n static #migrateAbility(source) {\n if ( Array.isArray(source.ability) ) source.ability = source.ability[0];\n }\n\n /* -------------------------------------------- */\n\n /**\n * Ensure a 0 or null in attack bonus is converted to an empty string rather than \"0\".\n * @param {object} source The candidate source data from which the model will be constructed.\n */\n static #migrateAttackBonus(source) {\n if ( [0, \"0\", null].includes(source.attackBonus) ) source.attackBonus = \"\";\n else if ( typeof source.attackBonus === \"number\" ) source.attackBonus = source.attackBonus.toString();\n }\n\n /* -------------------------------------------- */\n\n /**\n * Ensure the critical field is an object.\n * @param {object} source The candidate source data from which the model will be constructed.\n */\n static #migrateCritical(source) {\n if ( !(\"critical\" in source) ) return;\n if ( (typeof source.critical !== \"object\") || (source.critical === null) ) source.critical = {\n threshold: null,\n damage: \"\"\n };\n if ( source.critical.damage === null ) source.critical.damage = \"\";\n }\n\n /* -------------------------------------------- */\n\n /**\n * Migrate the save field.\n * @param {object} source The candidate source data from which the model will be constructed.\n */\n static #migrateSave(source) {\n if ( !(\"save\" in source) ) return;\n source.save ??= {};\n if ( source.save.scaling === \"\" ) source.save.scaling = \"spell\";\n if ( source.save.ability === null ) source.save.ability = \"\";\n if ( typeof source.save.dc === \"string\" ) {\n if ( source.save.dc === \"\" ) source.save.dc = null;\n else if ( Number.isNumeric(source.save.dc) ) source.save.dc = Number(source.save.dc);\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * Migrate damage parts.\n * @param {object} source The candidate source data from which the model will be constructed.\n */\n static #migrateDamage(source) {\n if ( !(\"damage\" in source) ) return;\n source.damage ??= {};\n source.damage.parts ??= [];\n }\n\n /* -------------------------------------------- */\n /* Getters */\n /* -------------------------------------------- */\n\n /**\n * Which ability score modifier is used by this item?\n * @type {string|null}\n */\n get abilityMod() {\n return this.ability || this._typeAbilityMod || {\n mwak: \"str\",\n rwak: \"dex\",\n msak: this.parent?.actor?.system.attributes.spellcasting || \"int\",\n rsak: this.parent?.actor?.system.attributes.spellcasting || \"int\"\n }[this.actionType] || null;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Default ability key defined for this type.\n * @type {string|null}\n * @internal\n */\n get _typeAbilityMod() {\n return null;\n }\n\n /* -------------------------------------------- */\n\n /**\n * What is the critical hit threshold for this item? Uses the smallest value from among the following sources:\n * - `critical.threshold` defined on the item\n * - `critical.threshold` defined on ammunition, if consumption mode is set to ammo\n * - Type-specific critical threshold\n * @type {number|null}\n */\n get criticalThreshold() {\n if ( !this.hasAttack ) return null;\n let ammoThreshold = Infinity;\n if ( this.consume?.type === \"ammo\" ) {\n ammoThreshold = this.parent?.actor?.items.get(this.consume.target).system.critical.threshold ?? Infinity;\n }\n const threshold = Math.min(this.critical.threshold ?? Infinity, this._typeCriticalThreshold, ammoThreshold);\n return threshold < Infinity ? threshold : 20;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Default critical threshold for this type.\n * @type {number}\n * @internal\n */\n get _typeCriticalThreshold() {\n return Infinity;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Does the Item implement an ability check as part of its usage?\n * @type {boolean}\n */\n get hasAbilityCheck() {\n return (this.actionType === \"abil\") && !!this.ability;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Does the Item implement an attack roll as part of its usage?\n * @type {boolean}\n */\n get hasAttack() {\n return [\"mwak\", \"rwak\", \"msak\", \"rsak\"].includes(this.actionType);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Does the Item implement a damage roll as part of its usage?\n * @type {boolean}\n */\n get hasDamage() {\n return this.actionType && (this.damage.parts.length > 0);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Does the Item implement a saving throw as part of its usage?\n * @type {boolean}\n */\n get hasSave() {\n return this.actionType && !!(this.save.ability && this.save.scaling);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Does the Item provide an amount of healing instead of conventional damage?\n * @type {boolean}\n */\n get isHealing() {\n return (this.actionType === \"heal\") && this.hasDamage;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Does the Item implement a versatile damage roll as part of its usage?\n * @type {boolean}\n */\n get isVersatile() {\n return this.actionType && !!(this.hasDamage && this.damage.versatile);\n }\n\n}\n","import SystemDataModel from \"../../abstract.mjs\";\nimport { FormulaField } from \"../../fields.mjs\";\n\n/**\n * Data model template for items that can be used as some sort of action.\n *\n * @property {object} activation Effect's activation conditions.\n * @property {string} activation.type Activation type as defined in `DND5E.abilityActivationTypes`.\n * @property {number} activation.cost How much of the activation type is needed to use this item's effect.\n * @property {string} activation.condition Special conditions required to activate the item.\n * @property {object} duration Effect's duration.\n * @property {number} duration.value How long the effect lasts.\n * @property {string} duration.units Time duration period as defined in `DND5E.timePeriods`.\n * @property {number} cover Amount of cover does this item affords to its crew on a vehicle.\n * @property {object} target Effect's valid targets.\n * @property {number} target.value Length or radius of target depending on targeting mode selected.\n * @property {number} target.width Width of line when line type is selected.\n * @property {string} target.units Units used for value and width as defined in `DND5E.distanceUnits`.\n * @property {string} target.type Targeting mode as defined in `DND5E.targetTypes`.\n * @property {object} range Effect's range.\n * @property {number} range.value Regular targeting distance for item's effect.\n * @property {number} range.long Maximum targeting distance for features that have a separate long range.\n * @property {string} range.units Units used for value and long as defined in `DND5E.distanceUnits`.\n * @property {object} uses Effect's limited uses.\n * @property {number} uses.value Current available uses.\n * @property {string} uses.max Maximum possible uses or a formula to derive that number.\n * @property {string} uses.per Recharge time for limited uses as defined in `DND5E.limitedUsePeriods`.\n * @property {object} consume Effect's resource consumption.\n * @property {string} consume.type Type of resource to consume as defined in `DND5E.abilityConsumptionTypes`.\n * @property {string} consume.target Item ID or resource key path of resource to consume.\n * @property {number} consume.amount Quantity of the resource to consume per use.\n * @mixin\n */\nexport default class ActivatedEffectTemplate extends foundry.abstract.DataModel {\n /** @inheritdoc */\n static defineSchema() {\n return {\n activation: new foundry.data.fields.SchemaField({\n type: new foundry.data.fields.StringField({required: true, blank: true, label: \"DND5E.ItemActivationType\"}),\n cost: new foundry.data.fields.NumberField({required: true, label: \"DND5E.ItemActivationCost\"}),\n condition: new foundry.data.fields.StringField({required: true, label: \"DND5E.ItemActivationCondition\"})\n }, {label: \"DND5E.ItemActivation\"}),\n duration: new foundry.data.fields.SchemaField({\n value: new FormulaField({required: true, deterministic: true, label: \"DND5E.Duration\"}),\n units: new foundry.data.fields.StringField({required: true, blank: true, label: \"DND5E.DurationType\"})\n }, {label: \"DND5E.Duration\"}),\n cover: new foundry.data.fields.NumberField({\n required: true, nullable: true, min: 0, max: 1, label: \"DND5E.Cover\"\n }),\n crewed: new foundry.data.fields.BooleanField({label: \"DND5E.Crewed\"}),\n target: new foundry.data.fields.SchemaField({\n value: new foundry.data.fields.NumberField({required: true, min: 0, label: \"DND5E.TargetValue\"}),\n width: new foundry.data.fields.NumberField({required: true, min: 0, label: \"DND5E.TargetWidth\"}),\n units: new foundry.data.fields.StringField({required: true, blank: true, label: \"DND5E.TargetUnits\"}),\n type: new foundry.data.fields.StringField({required: true, blank: true, label: \"DND5E.TargetType\"})\n }, {label: \"DND5E.Target\"}),\n range: new foundry.data.fields.SchemaField({\n value: new foundry.data.fields.NumberField({required: true, min: 0, label: \"DND5E.RangeNormal\"}),\n long: new foundry.data.fields.NumberField({required: true, min: 0, label: \"DND5E.RangeLong\"}),\n units: new foundry.data.fields.StringField({required: true, blank: true, label: \"DND5E.RangeUnits\"})\n }, {label: \"DND5E.Range\"}),\n uses: new this.ItemUsesField({}, {label: \"DND5E.LimitedUses\"}),\n consume: new foundry.data.fields.SchemaField({\n type: new foundry.data.fields.StringField({required: true, blank: true, label: \"DND5E.ConsumeType\"}),\n target: new foundry.data.fields.StringField({\n required: true, nullable: true, initial: null, label: \"DND5E.ConsumeTarget\"\n }),\n amount: new foundry.data.fields.NumberField({required: true, integer: true, label: \"DND5E.ConsumeAmount\"})\n }, {label: \"DND5E.ConsumeTitle\"})\n };\n }\n\n /* -------------------------------------------- */\n\n /**\n * Extension of SchemaField used to track item uses.\n * @internal\n */\n static ItemUsesField = class ItemUsesField extends foundry.data.fields.SchemaField {\n constructor(extraSchema, options) {\n super(SystemDataModel.mergeSchema({\n value: new foundry.data.fields.NumberField({\n required: true, min: 0, integer: true, label: \"DND5E.LimitedUsesAvailable\"\n }),\n max: new FormulaField({required: true, deterministic: true, label: \"DND5E.LimitedUsesMax\"}),\n per: new foundry.data.fields.StringField({\n required: true, nullable: true, blank: false, initial: null, label: \"DND5E.LimitedUsesPer\"\n }),\n recovery: new FormulaField({required: true, label: \"DND5E.RecoveryFormula\"})\n }, extraSchema), options);\n }\n };\n\n /* -------------------------------------------- */\n /* Migrations */\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static migrateData(source) {\n ActivatedEffectTemplate.#migrateFormulaFields(source);\n ActivatedEffectTemplate.#migrateRanges(source);\n ActivatedEffectTemplate.#migrateTargets(source);\n ActivatedEffectTemplate.#migrateUses(source);\n ActivatedEffectTemplate.#migrateConsume(source);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Ensure a 0 or null in max uses & durations are converted to an empty string rather than \"0\". Convert numbers into\n * strings.\n * @param {object} source The candidate source data from which the model will be constructed.\n */\n static #migrateFormulaFields(source) {\n if ( [0, \"0\", null].includes(source.uses?.max) ) source.uses.max = \"\";\n else if ( typeof source.uses?.max === \"number\" ) source.uses.max = source.uses.max.toString();\n if ( [0, \"0\", null].includes(source.duration?.value) ) source.duration.value = \"\";\n else if ( typeof source.duration?.value === \"number\" ) source.duration.value = source.duration.value.toString();\n }\n\n /* -------------------------------------------- */\n\n /**\n * Fix issue with some imported range data that uses the format \"100/400\" in the range field,\n * rather than splitting it between \"range.value\" & \"range.long\".\n * @param {object} source The candidate source data from which the model will be constructed.\n */\n static #migrateRanges(source) {\n if ( !(\"range\" in source) ) return;\n source.range ??= {};\n if ( source.range.units === null ) source.range.units = \"\";\n if ( typeof source.range.long === \"string\" ) {\n if ( source.range.long === \"\" ) source.range.long = null;\n else if ( Number.isNumeric(source.range.long) ) source.range.long = Number(source.range.long);\n }\n if ( typeof source.range.value !== \"string\" ) return;\n if ( source.range.value === \"\" ) {\n source.range.value = null;\n return;\n }\n const [value, long] = source.range.value.split(\"/\");\n if ( Number.isNumeric(value) ) source.range.value = Number(value);\n if ( Number.isNumeric(long) ) source.range.long = Number(long);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Ensure blank strings in targets are converted to null.\n * @param {object} source The candidate source data from which the model will be constructed.\n */\n static #migrateTargets(source) {\n if ( !(\"target\" in source) ) return;\n source.target ??= {};\n if ( source.target.value === \"\" ) source.target.value = null;\n if ( source.target.units === null ) source.target.units = \"\";\n if ( source.target.type === null ) source.target.type = \"\";\n }\n\n /* -------------------------------------------- */\n\n /**\n * Ensure a blank string in uses.value is converted to null.\n * @param {object} source The candidate source data from which the model will be constructed.\n */\n static #migrateUses(source) {\n if ( !(\"uses\" in source) ) return;\n source.uses ??= {};\n const value = source.uses.value;\n if ( typeof value === \"string\" ) {\n if ( value === \"\" ) source.uses.value = null;\n else if ( Number.isNumeric(value) ) source.uses.value = Number(source.uses.value);\n }\n if ( source.uses.recovery === undefined ) source.uses.recovery = \"\";\n }\n\n /* -------------------------------------------- */\n\n /**\n * Migrate the consume field.\n * @param {object} source The candidate source data from which the model will be constructed.\n */\n static #migrateConsume(source) {\n if ( !(\"consume\" in source) ) return;\n source.consume ??= {};\n if ( source.consume.type === null ) source.consume.type = \"\";\n const amount = source.consume.amount;\n if ( typeof amount === \"string\" ) {\n if ( amount === \"\" ) source.consume.amount = null;\n else if ( Number.isNumeric(amount) ) source.consume.amount = Number(amount);\n }\n }\n\n /* -------------------------------------------- */\n /* Getters */\n /* -------------------------------------------- */\n\n /**\n * Chat properties for activated effects.\n * @type {string[]}\n */\n get activatedEffectChatProperties() {\n return [\n this.parent.labels.activation + (this.activation.condition ? ` (${this.activation.condition})` : \"\"),\n this.parent.labels.target,\n this.parent.labels.range,\n this.parent.labels.duration\n ];\n }\n\n /* -------------------------------------------- */\n\n /**\n * Does the Item have an area of effect target?\n * @type {boolean}\n */\n get hasAreaTarget() {\n return this.target.type in CONFIG.DND5E.areaTargetTypes;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Does the Item target one or more distinct targets?\n * @type {boolean}\n */\n get hasIndividualTarget() {\n return this.target.type in CONFIG.DND5E.individualTargetTypes;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Is this Item limited in its ability to be used by charges or by recharge?\n * @type {boolean}\n */\n get hasLimitedUses() {\n return !!this.uses.per && (this.uses.max > 0);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Does the Item duration accept an associated numeric value or formula?\n * @type {boolean}\n */\n get hasScalarDuration() {\n return this.duration.units in CONFIG.DND5E.scalarTimePeriods;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Does the Item range accept an associated numeric value?\n * @type {boolean}\n */\n get hasScalarRange() {\n return this.range.units in CONFIG.DND5E.movementUnits;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Does the Item target accept an associated numeric value?\n * @type {boolean}\n */\n get hasScalarTarget() {\n return ![null, \"\", \"self\"].includes(this.target.type);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Does the Item have a target?\n * @type {boolean}\n */\n get hasTarget() {\n return ![\"\", null].includes(this.target.type);\n }\n\n}\n","/**\n * Data model template with information on items that can be attuned and equipped.\n *\n * @property {number} attunement Attunement information as defined in `DND5E.attunementTypes`.\n * @property {boolean} equipped Is this item equipped on its owning actor.\n * @mixin\n */\nexport default class EquippableItemTemplate extends foundry.abstract.DataModel {\n /** @inheritdoc */\n static defineSchema() {\n return {\n attunement: new foundry.data.fields.NumberField({\n required: true, integer: true, initial: CONFIG.DND5E.attunementTypes.NONE, label: \"DND5E.Attunement\"\n }),\n equipped: new foundry.data.fields.BooleanField({required: true, label: \"DND5E.Equipped\"})\n };\n }\n\n /* -------------------------------------------- */\n /* Migrations */\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static migrateData(source) {\n EquippableItemTemplate.#migrateAttunement(source);\n EquippableItemTemplate.#migrateEquipped(source);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Migrate the item's attuned boolean to attunement string.\n * @param {object} source The candidate source data from which the model will be constructed.\n */\n static #migrateAttunement(source) {\n if ( (source.attuned === undefined) || (source.attunement !== undefined) ) return;\n source.attunement = source.attuned ? CONFIG.DND5E.attunementTypes.ATTUNED : CONFIG.DND5E.attunementTypes.NONE;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Migrate the equipped field.\n * @param {object} source The candidate source data from which the model will be constructed.\n */\n static #migrateEquipped(source) {\n if ( !(\"equipped\" in source) ) return;\n if ( (source.equipped === null) || (source.equipped === undefined) ) source.equipped = false;\n }\n\n /* -------------------------------------------- */\n /* Getters */\n /* -------------------------------------------- */\n\n /**\n * Chat properties for equippable items.\n * @type {string[]}\n */\n get equippableItemChatProperties() {\n const req = CONFIG.DND5E.attunementTypes.REQUIRED;\n return [\n this.attunement === req ? CONFIG.DND5E.attunements[req] : null,\n game.i18n.localize(this.equipped ? \"DND5E.Equipped\" : \"DND5E.Unequipped\"),\n (\"proficient\" in this) ? CONFIG.DND5E.proficiencyLevels[Number(this.proficient)] : null\n ];\n }\n}\n","/**\n * Data model template with information on physical items.\n *\n * @property {number} quantity Number of items in a stack.\n * @property {number} weight Item's weight in pounds or kilograms (depending on system setting).\n * @property {object} price\n * @property {number} price.value Item's cost in the specified denomination.\n * @property {string} price.denomination Currency denomination used to determine price.\n * @property {string} rarity Item rarity as defined in `DND5E.itemRarity`.\n * @property {boolean} identified Has this item been identified?\n * @mixin\n */\nexport default class PhysicalItemTemplate extends foundry.abstract.DataModel {\n /** @inheritdoc */\n static defineSchema() {\n return {\n quantity: new foundry.data.fields.NumberField({\n required: true, nullable: false, integer: true, initial: 1, min: 0, label: \"DND5E.Quantity\"\n }),\n weight: new foundry.data.fields.NumberField({\n required: true, nullable: false, initial: 0, min: 0, label: \"DND5E.Weight\"\n }),\n price: new foundry.data.fields.SchemaField({\n value: new foundry.data.fields.NumberField({\n required: true, nullable: false, initial: 0, min: 0, label: \"DND5E.Price\"\n }),\n denomination: new foundry.data.fields.StringField({\n required: true, blank: false, initial: \"gp\", label: \"DND5E.Currency\"\n })\n }, {label: \"DND5E.Price\"}),\n rarity: new foundry.data.fields.StringField({required: true, blank: true, label: \"DND5E.Rarity\"}),\n identified: new foundry.data.fields.BooleanField({required: true, initial: true, label: \"DND5E.Identified\"})\n };\n }\n\n /* -------------------------------------------- */\n /* Migrations */\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static migrateData(source) {\n PhysicalItemTemplate.#migratePrice(source);\n PhysicalItemTemplate.#migrateRarity(source);\n PhysicalItemTemplate.#migrateWeight(source);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Migrate the item's price from a single field to an object with currency.\n * @param {object} source The candidate source data from which the model will be constructed.\n */\n static #migratePrice(source) {\n if ( !(\"price\" in source) || foundry.utils.getType(source.price) === \"Object\" ) return;\n source.price = {\n value: Number.isNumeric(source.price) ? Number(source.price) : 0,\n denomination: \"gp\"\n };\n }\n\n /* -------------------------------------------- */\n\n /**\n * Migrate the item's rarity from freeform string to enum value.\n * @param {object} source The candidate source data from which the model will be constructed.\n */\n static #migrateRarity(source) {\n if ( !(\"rarity\" in source) || CONFIG.DND5E.itemRarity[source.rarity] ) return;\n source.rarity = Object.keys(CONFIG.DND5E.itemRarity).find(key =>\n CONFIG.DND5E.itemRarity[key].toLowerCase() === source.rarity.toLowerCase()\n ) ?? \"\";\n }\n\n /* -------------------------------------------- */\n\n /**\n * Convert null weights to 0.\n * @param {object} source The candidate source data from which the model will be constructed.\n */\n static #migrateWeight(source) {\n if ( !(\"weight\" in source) ) return;\n if ( (source.weight === null) || (source.weight === undefined) ) source.weight = 0;\n }\n}\n","import SystemDataModel from \"../abstract.mjs\";\nimport ActionTemplate from \"./templates/action.mjs\";\nimport ActivatedEffectTemplate from \"./templates/activated-effect.mjs\";\nimport EquippableItemTemplate from \"./templates/equippable-item.mjs\";\nimport ItemDescriptionTemplate from \"./templates/item-description.mjs\";\nimport PhysicalItemTemplate from \"./templates/physical-item.mjs\";\n\n/**\n * Data definition for Consumable items.\n * @mixes ItemDescriptionTemplate\n * @mixes PhysicalItemTemplate\n * @mixes EquippableItemTemplate\n * @mixes ActivatedEffectTemplate\n * @mixes ActionTemplate\n *\n * @property {string} consumableType Type of consumable as defined in `DND5E.consumableTypes`.\n * @property {object} uses\n * @property {boolean} uses.autoDestroy Should this item be destroyed when it runs out of uses.\n */\nexport default class ConsumableData extends SystemDataModel.mixin(\n ItemDescriptionTemplate, PhysicalItemTemplate, EquippableItemTemplate, ActivatedEffectTemplate, ActionTemplate\n) {\n /** @inheritdoc */\n static defineSchema() {\n return this.mergeSchema(super.defineSchema(), {\n consumableType: new foundry.data.fields.StringField({\n required: true, initial: \"potion\", label: \"DND5E.ItemConsumableType\"\n }),\n uses: new ActivatedEffectTemplate.ItemUsesField({\n autoDestroy: new foundry.data.fields.BooleanField({required: true, label: \"DND5E.ItemDestroyEmpty\"})\n }, {label: \"DND5E.LimitedUses\"})\n });\n }\n\n /* -------------------------------------------- */\n /* Getters */\n /* -------------------------------------------- */\n\n /**\n * Properties displayed in chat.\n * @type {string[]}\n */\n get chatProperties() {\n return [\n CONFIG.DND5E.consumableTypes[this.consumableType],\n this.hasLimitedUses ? `${this.uses.value}/${this.uses.max} ${game.i18n.localize(\"DND5E.Charges\")}` : null\n ];\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n get _typeAbilityMod() {\n if ( this.consumableType !== \"scroll\" ) return null;\n return this.parent?.actor?.system.attributes.spellcasting || \"int\";\n }\n}\n","import SystemDataModel from \"../abstract.mjs\";\nimport EquippableItemTemplate from \"./templates/equippable-item.mjs\";\nimport ItemDescriptionTemplate from \"./templates/item-description.mjs\";\nimport PhysicalItemTemplate from \"./templates/physical-item.mjs\";\nimport CurrencyTemplate from \"../shared/currency.mjs\";\n\n\n/**\n * Data definition for Backpack items.\n * @mixes ItemDescriptionTemplate\n * @mixes PhysicalItemTemplate\n * @mixes EquippableItemTemplate\n * @mixes CurrencyTemplate\n *\n * @property {object} capacity Information on container's carrying capacity.\n * @property {string} capacity.type Method for tracking max capacity as defined in `DND5E.itemCapacityTypes`.\n * @property {number} capacity.value Total amount of the type this container can carry.\n * @property {boolean} capacity.weightless Does the weight of the items in the container carry over to the actor?\n */\nexport default class ContainerData extends SystemDataModel.mixin(\n ItemDescriptionTemplate, PhysicalItemTemplate, EquippableItemTemplate, CurrencyTemplate\n) {\n /** @inheritdoc */\n static defineSchema() {\n return this.mergeSchema(super.defineSchema(), {\n capacity: new foundry.data.fields.SchemaField({\n type: new foundry.data.fields.StringField({\n required: true, initial: \"weight\", blank: false, label: \"DND5E.ItemContainerCapacityType\"\n }),\n value: new foundry.data.fields.NumberField({\n required: true, min: 0, label: \"DND5E.ItemContainerCapacityMax\"\n }),\n weightless: new foundry.data.fields.BooleanField({required: true, label: \"DND5E.ItemContainerWeightless\"})\n }, {label: \"DND5E.ItemContainerCapacity\"})\n });\n }\n}\n","/**\n * Data model template for equipment that can be mounted on a vehicle.\n *\n * @property {object} armor Equipment's armor class.\n * @property {number} armor.value Armor class value for equipment.\n * @property {object} hp Equipment's hit points.\n * @property {number} hp.value Current hit point value.\n * @property {number} hp.max Max hit points.\n * @property {number} hp.dt Damage threshold.\n * @property {string} hp.conditions Conditions that are triggered when this equipment takes damage.\n * @mixin\n */\nexport default class MountableTemplate extends foundry.abstract.DataModel {\n /** @inheritdoc */\n static defineSchema() {\n return {\n armor: new foundry.data.fields.SchemaField({\n value: new foundry.data.fields.NumberField({\n required: true, integer: true, min: 0, label: \"DND5E.ArmorClass\"\n })\n }, {label: \"DND5E.ArmorClass\"}),\n hp: new foundry.data.fields.SchemaField({\n value: new foundry.data.fields.NumberField({\n required: true, integer: true, min: 0, label: \"DND5E.HitPointsCurrent\"\n }),\n max: new foundry.data.fields.NumberField({\n required: true, integer: true, min: 0, label: \"DND5E.HitPointsMax\"\n }),\n dt: new foundry.data.fields.NumberField({\n required: true, integer: true, min: 0, label: \"DND5E.DamageThreshold\"\n }),\n conditions: new foundry.data.fields.StringField({required: true, label: \"DND5E.HealthConditions\"})\n }, {label: \"DND5E.HitPoints\"})\n };\n }\n}\n","import SystemDataModel from \"../abstract.mjs\";\nimport ActionTemplate from \"./templates/action.mjs\";\nimport ActivatedEffectTemplate from \"./templates/activated-effect.mjs\";\nimport EquippableItemTemplate from \"./templates/equippable-item.mjs\";\nimport ItemDescriptionTemplate from \"./templates/item-description.mjs\";\nimport PhysicalItemTemplate from \"./templates/physical-item.mjs\";\nimport MountableTemplate from \"./templates/mountable.mjs\";\n\n/**\n * Data definition for Equipment items.\n * @mixes ItemDescriptionTemplate\n * @mixes PhysicalItemTemplate\n * @mixes EquippableItemTemplate\n * @mixes ActivatedEffectTemplate\n * @mixes ActionTemplate\n * @mixes MountableTemplate\n *\n * @property {object} armor Armor details and equipment type information.\n * @property {string} armor.type Equipment type as defined in `DND5E.equipmentTypes`.\n * @property {number} armor.value Base armor class or shield bonus.\n * @property {number} armor.dex Maximum dex bonus added to armor class.\n * @property {string} baseItem Base armor as defined in `DND5E.armorIds` for determining proficiency.\n * @property {object} speed Speed granted by a piece of vehicle equipment.\n * @property {number} speed.value Speed granted by this piece of equipment measured in feet or meters\n * depending on system setting.\n * @property {string} speed.conditions Conditions that may affect item's speed.\n * @property {number} strength Minimum strength required to use a piece of armor.\n * @property {boolean} stealth Does this equipment grant disadvantage on stealth checks when used?\n * @property {boolean} proficient Does the owner have proficiency in this piece of equipment?\n */\nexport default class EquipmentData extends SystemDataModel.mixin(\n ItemDescriptionTemplate, PhysicalItemTemplate, EquippableItemTemplate,\n ActivatedEffectTemplate, ActionTemplate, MountableTemplate\n) {\n /** @inheritdoc */\n static defineSchema() {\n return this.mergeSchema(super.defineSchema(), {\n armor: new foundry.data.fields.SchemaField({\n type: new foundry.data.fields.StringField({\n required: true, initial: \"light\", label: \"DND5E.ItemEquipmentType\"\n }),\n value: new foundry.data.fields.NumberField({required: true, integer: true, min: 0, label: \"DND5E.ArmorClass\"}),\n dex: new foundry.data.fields.NumberField({required: true, integer: true, label: \"DND5E.ItemEquipmentDexMod\"})\n }, {label: \"\"}),\n baseItem: new foundry.data.fields.StringField({required: true, label: \"DND5E.ItemEquipmentBase\"}),\n speed: new foundry.data.fields.SchemaField({\n value: new foundry.data.fields.NumberField({required: true, min: 0, label: \"DND5E.Speed\"}),\n conditions: new foundry.data.fields.StringField({required: true, label: \"DND5E.SpeedConditions\"})\n }, {label: \"DND5E.Speed\"}),\n strength: new foundry.data.fields.NumberField({\n required: true, integer: true, min: 0, label: \"DND5E.ItemRequiredStr\"\n }),\n stealth: new foundry.data.fields.BooleanField({required: true, label: \"DND5E.ItemEquipmentStealthDisav\"}),\n proficient: new foundry.data.fields.BooleanField({required: true, initial: true, label: \"DND5E.Proficient\"})\n });\n }\n\n /* -------------------------------------------- */\n /* Migrations */\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static migrateData(source) {\n super.migrateData(source);\n EquipmentData.#migrateArmor(source);\n EquipmentData.#migrateStrength(source);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Apply migrations to the armor field.\n * @param {object} source The candidate source data from which the model will be constructed.\n */\n static #migrateArmor(source) {\n if ( !(\"armor\" in source) ) return;\n source.armor ??= {};\n if ( source.armor.type === \"bonus\" ) source.armor.type = \"trinket\";\n if ( (typeof source.armor.dex === \"string\") ) {\n const dex = source.armor.dex;\n if ( dex === \"\" ) source.armor.dex = null;\n else if ( Number.isNumeric(dex) ) source.armor.dex = Number(dex);\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * Ensure blank strength values are migrated to null, and string values are converted to numbers.\n * @param {object} source The candidate source data from which the model will be constructed.\n */\n static #migrateStrength(source) {\n if ( typeof source.strength !== \"string\" ) return;\n if ( source.strength === \"\" ) source.strength = null;\n if ( Number.isNumeric(source.strength) ) source.strength = Number(source.strength);\n }\n\n /* -------------------------------------------- */\n /* Getters */\n /* -------------------------------------------- */\n\n /**\n * Properties displayed in chat.\n * @type {string[]}\n */\n get chatProperties() {\n return [\n CONFIG.DND5E.equipmentTypes[this.armor.type],\n this.parent.labels?.armor ?? null,\n this.stealth ? game.i18n.localize(\"DND5E.StealthDisadvantage\") : null\n ];\n }\n\n /* -------------------------------------------- */\n\n /**\n * Is this Item any of the armor subtypes?\n * @type {boolean}\n */\n get isArmor() {\n return this.armor.type in CONFIG.DND5E.armorTypes;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Is this item a separate large object like a siege engine or vehicle component that is\n * usually mounted on fixtures rather than equipped, and has its own AC and HP?\n * @type {boolean}\n */\n get isMountable() {\n return this.armor.type === \"vehicle\";\n }\n\n}\n","import SystemDataModel from \"../abstract.mjs\";\nimport ActionTemplate from \"./templates/action.mjs\";\nimport ActivatedEffectTemplate from \"./templates/activated-effect.mjs\";\nimport ItemDescriptionTemplate from \"./templates/item-description.mjs\";\n\n/**\n * Data definition for Feature items.\n * @mixes ItemDescriptionTemplate\n * @mixes ActivatedEffectTemplate\n * @mixes ActionTemplate\n *\n * @property {object} type\n * @property {string} type.value Category to which this feature belongs.\n * @property {string} type.subtype Feature subtype according to its category.\n * @property {string} requirements Actor details required to use this feature.\n * @property {object} recharge Details on how a feature can roll for recharges.\n * @property {number} recharge.value Minimum number needed to roll on a d6 to recharge this feature.\n * @property {boolean} recharge.charged Does this feature have a charge remaining?\n */\nexport default class FeatData extends SystemDataModel.mixin(\n ItemDescriptionTemplate, ActivatedEffectTemplate, ActionTemplate\n) {\n /** @inheritdoc */\n static defineSchema() {\n return this.mergeSchema(super.defineSchema(), {\n type: new foundry.data.fields.SchemaField({\n value: new foundry.data.fields.StringField({required: true, label: \"DND5E.Type\"}),\n subtype: new foundry.data.fields.StringField({required: true, label: \"DND5E.Subtype\"})\n }, {label: \"DND5E.ItemFeatureType\"}),\n requirements: new foundry.data.fields.StringField({required: true, nullable: true, label: \"DND5E.Requirements\"}),\n recharge: new foundry.data.fields.SchemaField({\n value: new foundry.data.fields.NumberField({\n required: true, integer: true, min: 1, label: \"DND5E.FeatureRechargeOn\"\n }),\n charged: new foundry.data.fields.BooleanField({required: true, label: \"DND5E.Charged\"})\n }, {label: \"DND5E.FeatureActionRecharge\"})\n });\n }\n\n /* -------------------------------------------- */\n /* Migrations */\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static migrateData(source) {\n super.migrateData(source);\n FeatData.#migrateType(source);\n FeatData.#migrateRecharge(source);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Ensure feats have a type object.\n * @param {object} source The candidate source data from which the model will be constructed.\n */\n static #migrateType(source) {\n if ( !(\"type\" in source) ) return;\n if ( !source.type ) source.type = {value: \"\", subtype: \"\"};\n }\n\n /* -------------------------------------------- */\n\n /**\n * Migrate 0 values to null.\n * @param {object} source The candidate source data from which the model will be constructed.\n */\n static #migrateRecharge(source) {\n if ( !(\"recharge\" in source) ) return;\n const value = source.recharge.value;\n if ( (value === 0) || (value === \"\") ) source.recharge.value = null;\n else if ( (typeof value === \"string\") && Number.isNumeric(value) ) source.recharge.value = Number(value);\n if ( source.recharge.charged === null ) source.recharge.charged = false;\n }\n\n /* -------------------------------------------- */\n /* Getters */\n /* -------------------------------------------- */\n\n /**\n * Properties displayed in chat.\n * @type {string[]}\n */\n get chatProperties() {\n return [this.requirements];\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n get hasLimitedUses() {\n return !!this.recharge.value || super.hasLimitedUses;\n }\n}\n","import SystemDataModel from \"../abstract.mjs\";\nimport ItemDescriptionTemplate from \"./templates/item-description.mjs\";\nimport PhysicalItemTemplate from \"./templates/physical-item.mjs\";\n\n/**\n * Data definition for Loot items.\n * @mixes ItemDescriptionTemplate\n * @mixes PhysicalItemTemplate\n */\nexport default class LootData extends SystemDataModel.mixin(ItemDescriptionTemplate, PhysicalItemTemplate) {\n\n /* -------------------------------------------- */\n /* Getters */\n /* -------------------------------------------- */\n\n /**\n * Properties displayed in chat.\n * @type {string[]}\n */\n get chatProperties() {\n return [\n game.i18n.localize(CONFIG.Item.typeLabels.loot),\n this.weight ? `${this.weight} ${game.i18n.localize(\"DND5E.AbbreviationLbs\")}` : null\n ];\n }\n}\n","import SystemDataModel from \"../abstract.mjs\";\nimport { FormulaField, MappingField } from \"../fields.mjs\";\nimport ActionTemplate from \"./templates/action.mjs\";\nimport ActivatedEffectTemplate from \"./templates/activated-effect.mjs\";\nimport ItemDescriptionTemplate from \"./templates/item-description.mjs\";\n\n/**\n * Data definition for Spell items.\n * @mixes ItemDescriptionTemplate\n * @mixes ActivatedEffectTemplate\n * @mixes ActionTemplate\n *\n * @property {number} level Base level of the spell.\n * @property {string} school Magical school to which this spell belongs.\n * @property {object} components General components and tags for this spell.\n * @property {boolean} components.vocal Does this spell require vocal components?\n * @property {boolean} components.somatic Does this spell require somatic components?\n * @property {boolean} components.material Does this spell require material components?\n * @property {boolean} components.ritual Can this spell be cast as a ritual?\n * @property {boolean} components.concentration Does this spell require concentration?\n * @property {object} materials Details on material components required for this spell.\n * @property {string} materials.value Description of the material components required for casting.\n * @property {boolean} materials.consumed Are these material components consumed during casting?\n * @property {number} materials.cost GP cost for the required components.\n * @property {number} materials.supply Quantity of this component available.\n * @property {object} preparation Details on how this spell is prepared.\n * @property {string} preparation.mode Spell preparation mode as defined in `DND5E.spellPreparationModes`.\n * @property {boolean} preparation.prepared Is the spell currently prepared?\n * @property {object} scaling Details on how casting at higher levels affects this spell.\n * @property {string} scaling.mode Spell scaling mode as defined in `DND5E.spellScalingModes`.\n * @property {string} scaling.formula Dice formula used for scaling.\n */\nexport default class SpellData extends SystemDataModel.mixin(\n ItemDescriptionTemplate, ActivatedEffectTemplate, ActionTemplate\n) {\n /** @inheritdoc */\n static defineSchema() {\n return this.mergeSchema(super.defineSchema(), {\n level: new foundry.data.fields.NumberField({\n required: true, integer: true, initial: 1, min: 0, label: \"DND5E.SpellLevel\"\n }),\n school: new foundry.data.fields.StringField({required: true, label: \"DND5E.SpellSchool\"}),\n components: new MappingField(new foundry.data.fields.BooleanField(), {\n required: true, label: \"DND5E.SpellComponents\",\n initialKeys: [...Object.keys(CONFIG.DND5E.spellComponents), ...Object.keys(CONFIG.DND5E.spellTags)]\n }),\n materials: new foundry.data.fields.SchemaField({\n value: new foundry.data.fields.StringField({required: true, label: \"DND5E.SpellMaterialsDescription\"}),\n consumed: new foundry.data.fields.BooleanField({required: true, label: \"DND5E.SpellMaterialsConsumed\"}),\n cost: new foundry.data.fields.NumberField({\n required: true, initial: 0, min: 0, label: \"DND5E.SpellMaterialsCost\"\n }),\n supply: new foundry.data.fields.NumberField({\n required: true, initial: 0, min: 0, label: \"DND5E.SpellMaterialsSupply\"\n })\n }, {label: \"DND5E.SpellMaterials\"}),\n preparation: new foundry.data.fields.SchemaField({\n mode: new foundry.data.fields.StringField({\n required: true, initial: \"prepared\", label: \"DND5E.SpellPreparationMode\"\n }),\n prepared: new foundry.data.fields.BooleanField({required: true, label: \"DND5E.SpellPrepared\"})\n }, {label: \"DND5E.SpellPreparation\"}),\n scaling: new foundry.data.fields.SchemaField({\n mode: new foundry.data.fields.StringField({required: true, initial: \"none\", label: \"DND5E.ScalingMode\"}),\n formula: new FormulaField({required: true, nullable: true, initial: null, label: \"DND5E.ScalingFormula\"})\n }, {label: \"DND5E.LevelScaling\"})\n });\n }\n\n /* -------------------------------------------- */\n /* Migrations */\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static migrateData(source) {\n super.migrateData(source);\n SpellData.#migrateComponentData(source);\n SpellData.#migrateScaling(source);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Migrate the spell's component object to remove any old, non-boolean values.\n * @param {object} source The candidate source data from which the model will be constructed.\n */\n static #migrateComponentData(source) {\n if ( !source.components ) return;\n for ( const [key, value] of Object.entries(source.components) ) {\n if ( typeof value !== \"boolean\" ) delete source.components[key];\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * Migrate spell scaling.\n * @param {object} source The candidate source data from which the model will be constructed.\n */\n static #migrateScaling(source) {\n if ( !(\"scaling\" in source) ) return;\n if ( (source.scaling.mode === \"\") || (source.scaling.mode === null) ) source.scaling.mode = \"none\";\n }\n\n /* -------------------------------------------- */\n /* Getters */\n /* -------------------------------------------- */\n\n /**\n * Properties displayed in chat.\n * @type {string[]}\n */\n get chatProperties() {\n return [\n this.parent.labels.level,\n this.parent.labels.components.vsm + (this.parent.labels.materials ? ` (${this.parent.labels.materials})` : \"\"),\n ...this.parent.labels.components.tags\n ];\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n get _typeAbilityMod() {\n return this.parent?.actor?.system.attributes.spellcasting || \"int\";\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n get _typeCriticalThreshold() {\n return this.parent?.actor?.flags.dnd5e?.spellCriticalThreshold ?? Infinity;\n }\n\n}\n","import SystemDataModel from \"../abstract.mjs\";\nimport { AdvancementField, IdentifierField } from \"../fields.mjs\";\nimport ItemDescriptionTemplate from \"./templates/item-description.mjs\";\n\n/**\n * Data definition for Subclass items.\n * @mixes ItemDescriptionTemplate\n *\n * @property {string} identifier Identifier slug for this subclass.\n * @property {string} classIdentifier Identifier slug for the class with which this subclass should be associated.\n * @property {object[]} advancement Advancement objects for this subclass.\n * @property {object} spellcasting Details on subclass's spellcasting ability.\n * @property {string} spellcasting.progression Spell progression granted by class as from `DND5E.spellProgression`.\n * @property {string} spellcasting.ability Ability score to use for spellcasting.\n */\nexport default class SubclassData extends SystemDataModel.mixin(ItemDescriptionTemplate) {\n /** @inheritdoc */\n static defineSchema() {\n return this.mergeSchema(super.defineSchema(), {\n identifier: new IdentifierField({required: true, label: \"DND5E.Identifier\"}),\n classIdentifier: new IdentifierField({\n required: true, label: \"DND5E.ClassIdentifier\", hint: \"DND5E.ClassIdentifierHint\"\n }),\n advancement: new foundry.data.fields.ArrayField(new AdvancementField(), {label: \"DND5E.AdvancementTitle\"}),\n spellcasting: new foundry.data.fields.SchemaField({\n progression: new foundry.data.fields.StringField({\n required: true, initial: \"none\", blank: false, label: \"DND5E.SpellProgression\"\n }),\n ability: new foundry.data.fields.StringField({required: true, label: \"DND5E.SpellAbility\"})\n }, {label: \"DND5E.Spellcasting\"})\n });\n }\n}\n","import SystemDataModel from \"../abstract.mjs\";\nimport { FormulaField } from \"../fields.mjs\";\nimport EquippableItemTemplate from \"./templates/equippable-item.mjs\";\nimport ItemDescriptionTemplate from \"./templates/item-description.mjs\";\nimport PhysicalItemTemplate from \"./templates/physical-item.mjs\";\n\n/**\n * Data definition for Tool items.\n * @mixes ItemDescriptionTemplate\n * @mixes PhysicalItemTemplate\n * @mixes EquippableItemTemplate\n *\n * @property {string} toolType Tool category as defined in `DND5E.toolTypes`.\n * @property {string} baseItem Base tool as defined in `DND5E.toolIds` for determining proficiency.\n * @property {string} ability Default ability when this tool is being used.\n * @property {string} chatFlavor Additional text added to chat when this tool is used.\n * @property {number} proficient Level of proficiency in this tool as defined in `DND5E.proficiencyLevels`.\n * @property {string} bonus Bonus formula added to tool rolls.\n */\nexport default class ToolData extends SystemDataModel.mixin(\n ItemDescriptionTemplate, PhysicalItemTemplate, EquippableItemTemplate\n) {\n /** @inheritdoc */\n static defineSchema() {\n return this.mergeSchema(super.defineSchema(), {\n toolType: new foundry.data.fields.StringField({required: true, label: \"DND5E.ItemToolType\"}),\n baseItem: new foundry.data.fields.StringField({required: true, label: \"DND5E.ItemToolBase\"}),\n ability: new foundry.data.fields.StringField({\n required: true, blank: true, label: \"DND5E.DefaultAbilityCheck\"\n }),\n chatFlavor: new foundry.data.fields.StringField({required: true, label: \"DND5E.ChatFlavor\"}),\n proficient: new foundry.data.fields.NumberField({\n required: true, nullable: false, initial: 0, min: 0, label: \"DND5E.ItemToolProficiency\"\n }),\n bonus: new FormulaField({required: true, label: \"DND5E.ItemToolBonus\"})\n });\n }\n\n /* -------------------------------------------- */\n /* Migrations */\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static migrateData(source) {\n super.migrateData(source);\n ToolData.#migrateAbility(source);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Migrate the ability field.\n * @param {object} source The candidate source data from which the model will be constructed.\n */\n static #migrateAbility(source) {\n if ( Array.isArray(source.ability) ) source.ability = source.ability[0];\n }\n\n /* -------------------------------------------- */\n /* Getters */\n /* -------------------------------------------- */\n\n /**\n * Properties displayed in chat.\n * @type {string[]}\n */\n get chatProperties() {\n return [CONFIG.DND5E.abilities[this.ability]?.label];\n }\n\n /* -------------------------------------------- */\n\n /**\n * Which ability score modifier is used by this item?\n * @type {string|null}\n */\n get abilityMod() {\n return this.ability || \"int\";\n }\n}\n","import SystemDataModel from \"../abstract.mjs\";\nimport { MappingField } from \"../fields.mjs\";\nimport ActionTemplate from \"./templates/action.mjs\";\nimport ActivatedEffectTemplate from \"./templates/activated-effect.mjs\";\nimport EquippableItemTemplate from \"./templates/equippable-item.mjs\";\nimport ItemDescriptionTemplate from \"./templates/item-description.mjs\";\nimport PhysicalItemTemplate from \"./templates/physical-item.mjs\";\nimport MountableTemplate from \"./templates/mountable.mjs\";\n\n/**\n * Data definition for Weapon items.\n * @mixes ItemDescriptionTemplate\n * @mixes PhysicalItemTemplate\n * @mixes EquippableItemTemplate\n * @mixes ActivatedEffectTemplate\n * @mixes ActionTemplate\n * @mixes MountableTemplate\n *\n * @property {string} weaponType Weapon category as defined in `DND5E.weaponTypes`.\n * @property {string} baseItem Base weapon as defined in `DND5E.weaponIds` for determining proficiency.\n * @property {object} properties Mapping of various weapon property booleans.\n * @property {boolean} proficient Does the weapon's owner have proficiency?\n */\nexport default class WeaponData extends SystemDataModel.mixin(\n ItemDescriptionTemplate, PhysicalItemTemplate, EquippableItemTemplate,\n ActivatedEffectTemplate, ActionTemplate, MountableTemplate\n) {\n /** @inheritdoc */\n static defineSchema() {\n return this.mergeSchema(super.defineSchema(), {\n weaponType: new foundry.data.fields.StringField({\n required: true, initial: \"simpleM\", label: \"DND5E.ItemWeaponType\"\n }),\n baseItem: new foundry.data.fields.StringField({required: true, blank: true, label: \"DND5E.ItemWeaponBase\"}),\n properties: new MappingField(new foundry.data.fields.BooleanField(), {\n required: true, initialKeys: CONFIG.DND5E.weaponProperties, label: \"DND5E.ItemWeaponProperties\"\n }),\n proficient: new foundry.data.fields.BooleanField({required: true, initial: true, label: \"DND5E.Proficient\"})\n });\n }\n\n /* -------------------------------------------- */\n /* Migrations */\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static migrateData(source) {\n super.migrateData(source);\n WeaponData.#migratePropertiesData(source);\n WeaponData.#migrateProficient(source);\n WeaponData.#migrateWeaponType(source);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Migrate the weapons's properties object to remove any old, non-boolean values.\n * @param {object} source The candidate source data from which the model will be constructed.\n */\n static #migratePropertiesData(source) {\n if ( !source.properties ) return;\n for ( const [key, value] of Object.entries(source.properties) ) {\n if ( typeof value !== \"boolean\" ) delete source.properties[key];\n }\n }\n\n /* -------------------------------------------- */\n\n /**\n * Migrate the proficient field to remove non-boolean values.\n * @param {object} source The candidate source data from which the model will be constructed.\n */\n static #migrateProficient(source) {\n if ( typeof source.proficient === \"number\" ) source.proficient = Boolean(source.proficient);\n }\n\n /* -------------------------------------------- */\n\n /**\n * Migrate the weapon type.\n * @param {object} source The candidate source data from which the model will be constructed.\n */\n static #migrateWeaponType(source) {\n if ( source.weaponType === null ) source.weaponType = \"simpleM\";\n }\n\n /* -------------------------------------------- */\n /* Getters */\n /* -------------------------------------------- */\n\n /**\n * Properties displayed in chat.\n * @type {string[]}\n */\n get chatProperties() {\n return [CONFIG.DND5E.weaponTypes[this.weaponType]];\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n get _typeAbilityMod() {\n if ( [\"simpleR\", \"martialR\"].includes(this.weaponType) ) return \"dex\";\n\n const abilities = this.parent?.actor?.system.abilities;\n if ( this.properties.fin && abilities ) {\n return (abilities.dex?.mod ?? 0) >= (abilities.str?.mod ?? 0) ? \"dex\" : \"str\";\n }\n\n return null;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n get _typeCriticalThreshold() {\n return this.parent?.actor?.flags.dnd5e?.weaponCriticalThreshold ?? Infinity;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Is this item a separate large object like a siege engine or vehicle component that is\n * usually mounted on fixtures rather than equipped, and has its own AC and HP?\n * @type {boolean}\n */\n get isMountable() {\n return this.weaponType === \"siege\";\n }\n}\n","import BackgroundData from \"./background.mjs\";\nimport ClassData from \"./class.mjs\";\nimport ConsumableData from \"./consumable.mjs\";\nimport ContainerData from \"./container.mjs\";\nimport EquipmentData from \"./equipment.mjs\";\nimport FeatData from \"./feat.mjs\";\nimport LootData from \"./loot.mjs\";\nimport SpellData from \"./spell.mjs\";\nimport SubclassData from \"./subclass.mjs\";\nimport ToolData from \"./tool.mjs\";\nimport WeaponData from \"./weapon.mjs\";\n\nexport {\n BackgroundData,\n ClassData,\n ConsumableData,\n ContainerData,\n EquipmentData,\n FeatData,\n LootData,\n SpellData,\n SubclassData,\n ToolData,\n WeaponData\n};\nexport {default as ActionTemplate} from \"./templates/action.mjs\";\nexport {default as ActivatedEffectTemplate} from \"./templates/activated-effect.mjs\";\nexport {default as EquippableItemTemplate} from \"./templates/equippable-item.mjs\";\nexport {default as ItemDescriptionTemplate} from \"./templates/item-description.mjs\";\nexport {default as MountableTemplate} from \"./templates/mountable.mjs\";\nexport {default as PhysicalItemTemplate} from \"./templates/physical-item.mjs\";\n\nexport const config = {\n background: BackgroundData,\n backpack: ContainerData,\n class: ClassData,\n consumable: ConsumableData,\n equipment: EquipmentData,\n feat: FeatData,\n loot: LootData,\n spell: SpellData,\n subclass: SubclassData,\n tool: ToolData,\n weapon: WeaponData\n};\n","/**\n * Data definition for Class Summary journal entry pages.\n *\n * @property {string} item UUID of the class item included.\n * @property {object} description\n * @property {string} description.value Introductory description for the class.\n * @property {string} description.additionalHitPoints Additional text displayed beneath the hit points section.\n * @property {string} description.additionalTraits Additional text displayed beneath the traits section.\n * @property {string} description.additionalEquipment Additional text displayed beneath the equipment section.\n * @property {string} description.subclass Introduction to the subclass section.\n * @property {string} subclassHeader Subclass header to replace the default.\n * @property {Set} subclassItems UUIDs of all subclasses to display.\n */\nexport default class ClassJournalPageData extends foundry.abstract.DataModel {\n static defineSchema() {\n return {\n item: new foundry.data.fields.StringField({required: true, label: \"JOURNALENTRYPAGE.DND5E.Class.Item\"}),\n description: new foundry.data.fields.SchemaField({\n value: new foundry.data.fields.HTMLField({\n label: \"JOURNALENTRYPAGE.DND5E.Class.Description\",\n hint: \"JOURNALENTRYPAGE.DND5E.Class.DescriptionHint\"\n }),\n additionalHitPoints: new foundry.data.fields.HTMLField({\n label: \"JOURNALENTRYPAGE.DND5E.Class.AdditionalHitPoints\",\n hint: \"JOURNALENTRYPAGE.DND5E.Class.AdditionalHitPointsHint\"\n }),\n additionalTraits: new foundry.data.fields.HTMLField({\n label: \"JOURNALENTRYPAGE.DND5E.Class.AdditionalTraits\",\n hint: \"JOURNALENTRYPAGE.DND5E.Class.AdditionalTraitsHint\"\n }),\n additionalEquipment: new foundry.data.fields.HTMLField({\n label: \"JOURNALENTRYPAGE.DND5E.Class.AdditionalEquipment\",\n hint: \"JOURNALENTRYPAGE.DND5E.Class.AdditionalEquipmentHint\"\n }),\n subclass: new foundry.data.fields.HTMLField({\n label: \"JOURNALENTRYPAGE.DND5E.Class.SubclassDescription\",\n hint: \"JOURNALENTRYPAGE.DND5E.Class.SubclassDescriptionHint\"\n })\n }),\n subclassHeader: new foundry.data.fields.StringField({\n label: \"JOURNALENTRYPAGE.DND5E.Class.SubclassHeader\"\n }),\n subclassItems: new foundry.data.fields.SetField(new foundry.data.fields.StringField(), {\n label: \"JOURNALENTRYPAGE.DND5E.Class.SubclassItems\"\n })\n };\n }\n}\n","import ClassJournalPageData from \"./class.mjs\";\n\nexport {\n ClassJournalPageData\n};\n\nexport const config = {\n class: ClassJournalPageData\n};\n","/**\n * A type of Roll specific to a d20-based check, save, or attack roll in the 5e system.\n * @param {string} formula The string formula to parse\n * @param {object} data The data object against which to parse attributes within the formula\n * @param {object} [options={}] Extra optional arguments which describe or modify the D20Roll\n * @param {number} [options.advantageMode] What advantage modifier to apply to the roll (none, advantage,\n * disadvantage)\n * @param {number} [options.critical] The value of d20 result which represents a critical success\n * @param {number} [options.fumble] The value of d20 result which represents a critical failure\n * @param {(number)} [options.targetValue] Assign a target value against which the result of this roll should be\n * compared\n * @param {boolean} [options.elvenAccuracy=false] Allow Elven Accuracy to modify this roll?\n * @param {boolean} [options.halflingLucky=false] Allow Halfling Luck to modify this roll?\n * @param {boolean} [options.reliableTalent=false] Allow Reliable Talent to modify this roll?\n */\nexport default class D20Roll extends Roll {\n constructor(formula, data, options) {\n super(formula, data, options);\n if ( !this.options.configured ) this.configureModifiers();\n }\n\n /* -------------------------------------------- */\n\n /**\n * Create a D20Roll from a standard Roll instance.\n * @param {Roll} roll\n * @returns {D20Roll}\n */\n static fromRoll(roll) {\n const newRoll = new this(roll.formula, roll.data, roll.options);\n Object.assign(newRoll, roll);\n return newRoll;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Determine whether a d20 roll should be fast-forwarded, and whether advantage or disadvantage should be applied.\n * @param {object} [options]\n * @param {Event} [options.event] The Event that triggered the roll.\n * @param {boolean} [options.advantage] Is something granting this roll advantage?\n * @param {boolean} [options.disadvantage] Is something granting this roll disadvantage?\n * @param {boolean} [options.fastForward] Should the roll dialog be skipped?\n * @returns {{advantageMode: D20Roll.ADV_MODE, isFF: boolean}} Whether the roll is fast-forwarded, and its advantage\n * mode.\n */\n static determineAdvantageMode({event, advantage=false, disadvantage=false, fastForward}={}) {\n const isFF = fastForward ?? (event?.shiftKey || event?.altKey || event?.ctrlKey || event?.metaKey);\n let advantageMode = this.ADV_MODE.NORMAL;\n if ( advantage || event?.altKey ) advantageMode = this.ADV_MODE.ADVANTAGE;\n else if ( disadvantage || event?.ctrlKey || event?.metaKey ) advantageMode = this.ADV_MODE.DISADVANTAGE;\n return {isFF: !!isFF, advantageMode};\n }\n\n /* -------------------------------------------- */\n\n /**\n * Advantage mode of a 5e d20 roll\n * @enum {number}\n */\n static ADV_MODE = {\n NORMAL: 0,\n ADVANTAGE: 1,\n DISADVANTAGE: -1\n }\n\n /* -------------------------------------------- */\n\n /**\n * The HTML template path used to configure evaluation of this Roll\n * @type {string}\n */\n static EVALUATION_TEMPLATE = \"systems/dnd5e/templates/chat/roll-dialog.hbs\";\n\n /* -------------------------------------------- */\n\n /**\n * Does this roll start with a d20?\n * @type {boolean}\n */\n get validD20Roll() {\n return (this.terms[0] instanceof Die) && (this.terms[0].faces === 20);\n }\n\n /* -------------------------------------------- */\n\n /**\n * A convenience reference for whether this D20Roll has advantage\n * @type {boolean}\n */\n get hasAdvantage() {\n return this.options.advantageMode === D20Roll.ADV_MODE.ADVANTAGE;\n }\n\n /* -------------------------------------------- */\n\n /**\n * A convenience reference for whether this D20Roll has disadvantage\n * @type {boolean}\n */\n get hasDisadvantage() {\n return this.options.advantageMode === D20Roll.ADV_MODE.DISADVANTAGE;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Is this roll a critical success? Returns undefined if roll isn't evaluated.\n * @type {boolean|void}\n */\n get isCritical() {\n if ( !this.validD20Roll || !this._evaluated ) return undefined;\n if ( !Number.isNumeric(this.options.critical) ) return false;\n return this.dice[0].total >= this.options.critical;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Is this roll a critical failure? Returns undefined if roll isn't evaluated.\n * @type {boolean|void}\n */\n get isFumble() {\n if ( !this.validD20Roll || !this._evaluated ) return undefined;\n if ( !Number.isNumeric(this.options.fumble) ) return false;\n return this.dice[0].total <= this.options.fumble;\n }\n\n /* -------------------------------------------- */\n /* D20 Roll Methods */\n /* -------------------------------------------- */\n\n /**\n * Apply optional modifiers which customize the behavior of the d20term\n * @private\n */\n configureModifiers() {\n if ( !this.validD20Roll ) return;\n\n const d20 = this.terms[0];\n d20.modifiers = [];\n\n // Halfling Lucky\n if ( this.options.halflingLucky ) d20.modifiers.push(\"r1=1\");\n\n // Reliable Talent\n if ( this.options.reliableTalent ) d20.modifiers.push(\"min10\");\n\n // Handle Advantage or Disadvantage\n if ( this.hasAdvantage ) {\n d20.number = this.options.elvenAccuracy ? 3 : 2;\n d20.modifiers.push(\"kh\");\n d20.options.advantage = true;\n }\n else if ( this.hasDisadvantage ) {\n d20.number = 2;\n d20.modifiers.push(\"kl\");\n d20.options.disadvantage = true;\n }\n else d20.number = 1;\n\n // Assign critical and fumble thresholds\n if ( this.options.critical ) d20.options.critical = this.options.critical;\n if ( this.options.fumble ) d20.options.fumble = this.options.fumble;\n if ( this.options.targetValue ) d20.options.target = this.options.targetValue;\n\n // Re-compile the underlying formula\n this._formula = this.constructor.getFormula(this.terms);\n\n // Mark configuration as complete\n this.options.configured = true;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n async toMessage(messageData={}, options={}) {\n\n // Evaluate the roll now so we have the results available to determine whether reliable talent came into play\n if ( !this._evaluated ) await this.evaluate({async: true});\n\n // Add appropriate advantage mode message flavor and dnd5e roll flags\n messageData.flavor = messageData.flavor || this.options.flavor;\n if ( this.hasAdvantage ) messageData.flavor += ` (${game.i18n.localize(\"DND5E.Advantage\")})`;\n else if ( this.hasDisadvantage ) messageData.flavor += ` (${game.i18n.localize(\"DND5E.Disadvantage\")})`;\n\n // Add reliable talent to the d20-term flavor text if it applied\n if ( this.validD20Roll && this.options.reliableTalent ) {\n const d20 = this.dice[0];\n const isRT = d20.results.every(r => !r.active || (r.result < 10));\n const label = `(${game.i18n.localize(\"DND5E.FlagsReliableTalent\")})`;\n if ( isRT ) d20.options.flavor = d20.options.flavor ? `${d20.options.flavor} (${label})` : label;\n }\n\n // Record the preferred rollMode\n options.rollMode = options.rollMode ?? this.options.rollMode;\n return super.toMessage(messageData, options);\n }\n\n /* -------------------------------------------- */\n /* Configuration Dialog */\n /* -------------------------------------------- */\n\n /**\n * Create a Dialog prompt used to configure evaluation of an existing D20Roll instance.\n * @param {object} data Dialog configuration data\n * @param {string} [data.title] The title of the shown dialog window\n * @param {number} [data.defaultRollMode] The roll mode that the roll mode select element should default to\n * @param {number} [data.defaultAction] The button marked as default\n * @param {boolean} [data.chooseModifier] Choose which ability modifier should be applied to the roll?\n * @param {string} [data.defaultAbility] For tool rolls, the default ability modifier applied to the roll\n * @param {string} [data.template] A custom path to an HTML template to use instead of the default\n * @param {object} options Additional Dialog customization options\n * @returns {Promise} A resulting D20Roll object constructed with the dialog, or null if the\n * dialog was closed\n */\n async configureDialog({title, defaultRollMode, defaultAction=D20Roll.ADV_MODE.NORMAL, chooseModifier=false,\n defaultAbility, template}={}, options={}) {\n\n // Render the Dialog inner HTML\n const content = await renderTemplate(template ?? this.constructor.EVALUATION_TEMPLATE, {\n formula: `${this.formula} + @bonus`,\n defaultRollMode,\n rollModes: CONFIG.Dice.rollModes,\n chooseModifier,\n defaultAbility,\n abilities: CONFIG.DND5E.abilities\n });\n\n let defaultButton = \"normal\";\n switch ( defaultAction ) {\n case D20Roll.ADV_MODE.ADVANTAGE: defaultButton = \"advantage\"; break;\n case D20Roll.ADV_MODE.DISADVANTAGE: defaultButton = \"disadvantage\"; break;\n }\n\n // Create the Dialog window and await submission of the form\n return new Promise(resolve => {\n new Dialog({\n title,\n content,\n buttons: {\n advantage: {\n label: game.i18n.localize(\"DND5E.Advantage\"),\n callback: html => resolve(this._onDialogSubmit(html, D20Roll.ADV_MODE.ADVANTAGE))\n },\n normal: {\n label: game.i18n.localize(\"DND5E.Normal\"),\n callback: html => resolve(this._onDialogSubmit(html, D20Roll.ADV_MODE.NORMAL))\n },\n disadvantage: {\n label: game.i18n.localize(\"DND5E.Disadvantage\"),\n callback: html => resolve(this._onDialogSubmit(html, D20Roll.ADV_MODE.DISADVANTAGE))\n }\n },\n default: defaultButton,\n close: () => resolve(null)\n }, options).render(true);\n });\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle submission of the Roll evaluation configuration Dialog\n * @param {jQuery} html The submitted dialog content\n * @param {number} advantageMode The chosen advantage mode\n * @returns {D20Roll} This damage roll.\n * @private\n */\n _onDialogSubmit(html, advantageMode) {\n const form = html[0].querySelector(\"form\");\n\n // Append a situational bonus term\n if ( form.bonus.value ) {\n const bonus = new Roll(form.bonus.value, this.data);\n if ( !(bonus.terms[0] instanceof OperatorTerm) ) this.terms.push(new OperatorTerm({operator: \"+\"}));\n this.terms = this.terms.concat(bonus.terms);\n }\n\n // Customize the modifier\n if ( form.ability?.value ) {\n const abl = this.data.abilities[form.ability.value];\n this.terms = this.terms.flatMap(t => {\n if ( t.term === \"@mod\" ) return new NumericTerm({number: abl.mod});\n if ( t.term === \"@abilityCheckBonus\" ) {\n const bonus = abl.bonuses?.check;\n if ( bonus ) return new Roll(bonus, this.data).terms;\n return new NumericTerm({number: 0});\n }\n return t;\n });\n this.options.flavor += ` (${CONFIG.DND5E.abilities[form.ability.value]?.label ?? \"\"})`;\n }\n\n // Apply advantage or disadvantage\n this.options.advantageMode = advantageMode;\n this.options.rollMode = form.rollMode.value;\n this.configureModifiers();\n return this;\n }\n}\n","/**\n * A type of Roll specific to a damage (or healing) roll in the 5e system.\n * @param {string} formula The string formula to parse\n * @param {object} data The data object against which to parse attributes within the formula\n * @param {object} [options={}] Extra optional arguments which describe or modify the DamageRoll\n * @param {number} [options.criticalBonusDice=0] A number of bonus damage dice that are added for critical hits\n * @param {number} [options.criticalMultiplier=2] A critical hit multiplier which is applied to critical hits\n * @param {boolean} [options.multiplyNumeric=false] Multiply numeric terms by the critical multiplier\n * @param {boolean} [options.powerfulCritical=false] Apply the \"powerful criticals\" house rule to critical hits\n * @param {string} [options.criticalBonusDamage] An extra damage term that is applied only on a critical hit\n */\nexport default class DamageRoll extends Roll {\n constructor(formula, data, options) {\n super(formula, data, options);\n if ( !this.options.preprocessed ) this.preprocessFormula();\n // For backwards compatibility, skip rolls which do not have the \"critical\" option defined\n if ( (this.options.critical !== undefined) && !this.options.configured ) this.configureDamage();\n }\n\n /* -------------------------------------------- */\n\n /**\n * Create a DamageRoll from a standard Roll instance.\n * @param {Roll} roll\n * @returns {DamageRoll}\n */\n static fromRoll(roll) {\n const newRoll = new this(roll.formula, roll.data, roll.options);\n Object.assign(newRoll, roll);\n return newRoll;\n }\n\n /* -------------------------------------------- */\n\n /**\n * The HTML template path used to configure evaluation of this Roll\n * @type {string}\n */\n static EVALUATION_TEMPLATE = \"systems/dnd5e/templates/chat/roll-dialog.hbs\";\n\n /* -------------------------------------------- */\n\n /**\n * A convenience reference for whether this DamageRoll is a critical hit\n * @type {boolean}\n */\n get isCritical() {\n return this.options.critical;\n }\n\n /* -------------------------------------------- */\n /* Damage Roll Methods */\n /* -------------------------------------------- */\n\n /**\n * Perform any term-merging required to ensure that criticals can be calculated successfully.\n * @protected\n */\n preprocessFormula() {\n for ( let [i, term] of this.terms.entries() ) {\n const nextTerm = this.terms[i + 1];\n const prevTerm = this.terms[i - 1];\n\n // Convert shorthand dX terms to 1dX preemptively to allow them to be appropriately doubled for criticals\n if ( (term instanceof StringTerm) && /^d\\d+/.test(term.term) && !(prevTerm instanceof ParentheticalTerm) ) {\n const formula = `1${term.term}`;\n const newTerm = new Roll(formula).terms[0];\n this.terms.splice(i, 1, newTerm);\n term = newTerm;\n }\n\n // Merge parenthetical terms that follow string terms to build a dice term (to allow criticals)\n else if ( (term instanceof ParentheticalTerm) && (prevTerm instanceof StringTerm)\n && prevTerm.term.match(/^[0-9]*d$/)) {\n if ( term.isDeterministic ) {\n let newFormula = `${prevTerm.term}${term.evaluate().total}`;\n let deleteCount = 2;\n\n // Merge in any roll modifiers\n if ( nextTerm instanceof StringTerm ) {\n newFormula += nextTerm.term;\n deleteCount += 1;\n }\n\n const newTerm = (new Roll(newFormula)).terms[0];\n this.terms.splice(i - 1, deleteCount, newTerm);\n term = newTerm;\n }\n }\n\n // Merge any parenthetical terms followed by string terms\n else if ( (term instanceof ParentheticalTerm || term instanceof MathTerm) && (nextTerm instanceof StringTerm)\n && nextTerm.term.match(/^d[0-9]*$/)) {\n if ( term.isDeterministic ) {\n const newFormula = `${term.evaluate().total}${nextTerm.term}`;\n const newTerm = (new Roll(newFormula)).terms[0];\n this.terms.splice(i, 2, newTerm);\n term = newTerm;\n }\n }\n }\n\n // Re-compile the underlying formula\n this._formula = this.constructor.getFormula(this.terms);\n\n // Mark configuration as complete\n this.options.preprocessed = true;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Apply optional modifiers which customize the behavior of the d20term.\n * @protected\n */\n configureDamage() {\n let flatBonus = 0;\n for ( let [i, term] of this.terms.entries() ) {\n // Multiply dice terms\n if ( term instanceof DiceTerm ) {\n term.options.baseNumber = term.options.baseNumber ?? term.number; // Reset back\n term.number = term.options.baseNumber;\n if ( this.isCritical ) {\n let cm = this.options.criticalMultiplier ?? 2;\n\n // Powerful critical - maximize damage and reduce the multiplier by 1\n if ( this.options.powerfulCritical ) {\n flatBonus += (term.number * term.faces);\n cm = Math.max(1, cm-1);\n }\n\n // Alter the damage term\n let cb = (this.options.criticalBonusDice && (i === 0)) ? this.options.criticalBonusDice : 0;\n term.alter(cm, cb);\n term.options.critical = true;\n }\n }\n\n // Multiply numeric terms\n else if ( this.options.multiplyNumeric && (term instanceof NumericTerm) ) {\n term.options.baseNumber = term.options.baseNumber ?? term.number; // Reset back\n term.number = term.options.baseNumber;\n if ( this.isCritical ) {\n term.number *= (this.options.criticalMultiplier ?? 2);\n term.options.critical = true;\n }\n }\n }\n\n // Add powerful critical bonus\n if ( this.options.powerfulCritical && (flatBonus > 0) ) {\n this.terms.push(new OperatorTerm({operator: \"+\"}));\n this.terms.push(new NumericTerm({number: flatBonus}, {flavor: game.i18n.localize(\"DND5E.PowerfulCritical\")}));\n }\n\n // Add extra critical damage term\n if ( this.isCritical && this.options.criticalBonusDamage ) {\n const extra = new Roll(this.options.criticalBonusDamage, this.data);\n if ( !(extra.terms[0] instanceof OperatorTerm) ) this.terms.push(new OperatorTerm({operator: \"+\"}));\n this.terms.push(...extra.terms);\n }\n\n // Re-compile the underlying formula\n this._formula = this.constructor.getFormula(this.terms);\n\n // Mark configuration as complete\n this.options.configured = true;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n toMessage(messageData={}, options={}) {\n messageData.flavor = messageData.flavor || this.options.flavor;\n if ( this.isCritical ) {\n const label = game.i18n.localize(\"DND5E.CriticalHit\");\n messageData.flavor = messageData.flavor ? `${messageData.flavor} (${label})` : label;\n }\n options.rollMode = options.rollMode ?? this.options.rollMode;\n return super.toMessage(messageData, options);\n }\n\n /* -------------------------------------------- */\n /* Configuration Dialog */\n /* -------------------------------------------- */\n\n /**\n * Create a Dialog prompt used to configure evaluation of an existing D20Roll instance.\n * @param {object} data Dialog configuration data\n * @param {string} [data.title] The title of the shown dialog window\n * @param {number} [data.defaultRollMode] The roll mode that the roll mode select element should default to\n * @param {string} [data.defaultCritical] Should critical be selected as default\n * @param {string} [data.template] A custom path to an HTML template to use instead of the default\n * @param {boolean} [data.allowCritical=true] Allow critical hit to be chosen as a possible damage mode\n * @param {object} options Additional Dialog customization options\n * @returns {Promise} A resulting D20Roll object constructed with the dialog, or null if the\n * dialog was closed\n */\n async configureDialog({title, defaultRollMode, defaultCritical=false, template, allowCritical=true}={}, options={}) {\n\n // Render the Dialog inner HTML\n const content = await renderTemplate(template ?? this.constructor.EVALUATION_TEMPLATE, {\n formula: `${this.formula} + @bonus`,\n defaultRollMode,\n rollModes: CONFIG.Dice.rollModes\n });\n\n // Create the Dialog window and await submission of the form\n return new Promise(resolve => {\n new Dialog({\n title,\n content,\n buttons: {\n critical: {\n condition: allowCritical,\n label: game.i18n.localize(\"DND5E.CriticalHit\"),\n callback: html => resolve(this._onDialogSubmit(html, true))\n },\n normal: {\n label: game.i18n.localize(allowCritical ? \"DND5E.Normal\" : \"DND5E.Roll\"),\n callback: html => resolve(this._onDialogSubmit(html, false))\n }\n },\n default: defaultCritical ? \"critical\" : \"normal\",\n close: () => resolve(null)\n }, options).render(true);\n });\n }\n\n /* -------------------------------------------- */\n\n /**\n * Handle submission of the Roll evaluation configuration Dialog\n * @param {jQuery} html The submitted dialog content\n * @param {boolean} isCritical Is the damage a critical hit?\n * @returns {DamageRoll} This damage roll.\n * @private\n */\n _onDialogSubmit(html, isCritical) {\n const form = html[0].querySelector(\"form\");\n\n // Append a situational bonus term\n if ( form.bonus.value ) {\n const bonus = new DamageRoll(form.bonus.value, this.data);\n if ( !(bonus.terms[0] instanceof OperatorTerm) ) this.terms.push(new OperatorTerm({operator: \"+\"}));\n this.terms = this.terms.concat(bonus.terms);\n }\n\n // Apply advantage or disadvantage\n this.options.critical = isCritical;\n this.options.rollMode = form.rollMode.value;\n this.configureDamage();\n return this;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static fromData(data) {\n const roll = super.fromData(data);\n roll._formula = this.getFormula(roll.terms);\n return roll;\n }\n}\n","import { MappingField } from \"../data/fields.mjs\";\n\n/**\n * Extend the base TokenDocument class to implement system-specific HP bar logic.\n */\nexport default class TokenDocument5e extends TokenDocument {\n\n /** @inheritdoc */\n getBarAttribute(...args) {\n const data = super.getBarAttribute(...args);\n if ( data && (data.attribute === \"attributes.hp\") ) {\n const hp = this.actor.system.attributes.hp || {};\n data.value += (hp.temp || 0);\n data.max = Math.max(0, data.max + (hp.tempmax || 0));\n }\n return data;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static getTrackedAttributes(data, _path=[]) {\n if ( !game.dnd5e.isV10 ) return super.getTrackedAttributes(data, _path);\n if ( data instanceof foundry.abstract.DataModel ) return this._getTrackedAttributesFromSchema(data.schema, _path);\n const attributes = super.getTrackedAttributes(data, _path);\n if ( _path.length ) return attributes;\n const allowed = CONFIG.DND5E.trackableAttributes;\n attributes.value = attributes.value.filter(attrs => this._isAllowedAttribute(allowed, attrs));\n return attributes;\n }\n\n /* -------------------------------------------- */\n\n /** @inheritdoc */\n static _getTrackedAttributesFromSchema(schema, _path=[]) {\n const isSchema = field => field instanceof foundry.data.fields.SchemaField;\n const isModel = field => field instanceof foundry.data.fields.EmbeddedDataField;\n const attributes = {bar: [], value: []};\n for ( const [name, field] of Object.entries(schema.fields) ) {\n const p = _path.concat([name]);\n if ( field instanceof foundry.data.fields.NumberField ) attributes.value.push(p);\n if ( isSchema(field) || isModel(field) ) {\n const schema = isModel(field) ? field.model.schema : field;\n const isBar = schema.has(\"value\") && schema.has(\"max\");\n if ( isBar ) attributes.bar.push(p);\n else {\n const inner = this._getTrackedAttributesFromSchema(schema, p);\n attributes.bar.push(...inner.bar);\n attributes.value.push(...inner.value);\n }\n }\n if ( !(field instanceof MappingField) ) continue;\n if ( !field.initialKeys || foundry.utils.isEmpty(field.initialKeys) ) continue;\n if ( !isSchema(field.model) && !isModel(field.model) ) continue;\n const keys = Array.isArray(field.initialKeys) ? field.initialKeys : Object.keys(field.initialKeys);\n for ( const key of keys ) {\n const inner = this._getTrackedAttributesFromSchema(field.model, p.concat([key]));\n attributes.bar.push(...inner.bar);\n attributes.value.push(...inner.value);\n }\n }\n return attributes;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Get an Array of attribute choices which are suitable for being consumed by an item usage.\n * @param {object} data The actor data.\n * @returns {{bar: string[], value: string[]}}\n */\n static getConsumedAttributes(data) {\n const attributes = super.getTrackedAttributes(data);\n attributes.value.push(...Object.keys(CONFIG.DND5E.currencies).map(denom => [\"currency\", denom]));\n const allowed = CONFIG.DND5E.consumableResources;\n attributes.value = attributes.value.filter(attrs => this._isAllowedAttribute(allowed, attrs));\n return attributes;\n }\n\n /* -------------------------------------------- */\n\n /**\n * Traverse the configured allowed attributes to see if the provided one matches.\n * @param {object} allowed The allowed attributes structure.\n * @param {string[]} attrs The attributes list to test.\n * @returns {boolean} Whether the given attribute is allowed.\n * @private\n */\n static _isAllowedAttribute(allowed, attrs) {\n let allow = allowed;\n for ( const attr of attrs ) {\n if ( allow === undefined ) return false;\n if ( allow === true ) return true;\n if ( allow[\"*\"] !== undefined ) allow = allow[\"*\"];\n else allow = allow[attr];\n }\n return allow !== undefined;\n }\n}\n","/**\n * Highlight critical success or failure on d20 rolls.\n * @param {ChatMessage} message Message being prepared.\n * @param {HTMLElement} html Rendered contents of the message.\n * @param {object} data Configuration data passed to the message.\n */\nexport function highlightCriticalSuccessFailure(message, html, data) {\n if ( !message.isRoll || !message.isContentVisible || !message.rolls.length ) return;\n\n // Highlight rolls where the first part is a d20 roll\n let d20Roll = message.rolls.find(r => {\n const d0 = r.dice[0];\n return (d0?.faces === 20) && (d0?.values.length === 1);\n });\n if ( !d20Roll ) return;\n d20Roll = dnd5e.dice.D20Roll.fromRoll(d20Roll);\n const d = d20Roll.dice[0];\n\n const isModifiedRoll = (\"success\" in d.results[0]) || d.options.marginSuccess || d.options.marginFailure;\n if ( isModifiedRoll ) return;\n\n // Highlight successes and failures\n if ( d20Roll.isCritical ) html.find(\".dice-total\").addClass(\"critical\");\n else if ( d20Roll.isFumble ) html.find(\".dice-total\").addClass(\"fumble\");\n else if ( d.options.target ) {\n if ( d20Roll.total >= d.options.target ) html.find(\".dice-total\").addClass(\"success\");\n else html.find(\".dice-total\").addClass(\"failure\");\n }\n}\n\n/* -------------------------------------------- */\n\n/**\n * Optionally hide the display of chat card action buttons which cannot be performed by the user\n * @param {ChatMessage} message Message being prepared.\n * @param {HTMLElement} html Rendered contents of the message.\n * @param {object} data Configuration data passed to the message.\n */\nexport function displayChatActionButtons(message, html, data) {\n const chatCard = html.find(\".dnd5e.chat-card\");\n if ( chatCard.length > 0 ) {\n const flavor = html.find(\".flavor-text\");\n if ( flavor.text() === html.find(\".item-name\").text() ) flavor.remove();\n\n // If the user is the message author or the actor owner, proceed\n let actor = game.actors.get(data.message.speaker.actor);\n if ( actor && actor.isOwner ) return;\n else if ( game.user.isGM || (data.author.id === game.user.id)) return;\n\n // Otherwise conceal action buttons except for saving throw\n const buttons = chatCard.find(\"button[data-action]\");\n buttons.each((i, btn) => {\n if ( btn.dataset.action === \"save\" ) return;\n btn.style.display = \"none\";\n });\n }\n}\n\n/* -------------------------------------------- */\n\n/**\n * This function is used to hook into the Chat Log context menu to add additional options to each message\n * These options make it easy to conveniently apply damage to controlled tokens based on the value of a Roll\n *\n * @param {HTMLElement} html The Chat Message being rendered\n * @param {object[]} options The Array of Context Menu options\n *\n * @returns {object[]} The extended options Array including new context choices\n */\nexport function addChatMessageContextOptions(html, options) {\n let canApply = li => {\n const message = game.messages.get(li.data(\"messageId\"));\n return message?.isRoll && message?.isContentVisible && canvas.tokens?.controlled.length;\n };\n options.push(\n {\n name: game.i18n.localize(\"DND5E.ChatContextDamage\"),\n icon: '',\n condition: canApply,\n callback: li => applyChatCardDamage(li, 1)\n },\n {\n name: game.i18n.localize(\"DND5E.ChatContextHealing\"),\n icon: '',\n condition: canApply,\n callback: li => applyChatCardDamage(li, -1)\n },\n {\n name: game.i18n.localize(\"DND5E.ChatContextTempHP\"),\n icon: '',\n condition: canApply,\n callback: li => applyChatCardTemp(li)\n },\n {\n name: game.i18n.localize(\"DND5E.ChatContextDoubleDamage\"),\n icon: '',\n condition: canApply,\n callback: li => applyChatCardDamage(li, 2)\n },\n {\n name: game.i18n.localize(\"DND5E.ChatContextHalfDamage\"),\n icon: '',\n condition: canApply,\n callback: li => applyChatCardDamage(li, 0.5)\n }\n );\n return options;\n}\n\n/* -------------------------------------------- */\n\n/**\n * Apply rolled dice damage to the token or tokens which are currently controlled.\n * This allows for damage to be scaled by a multiplier to account for healing, critical hits, or resistance\n *\n * @param {HTMLElement} li The chat entry which contains the roll data\n * @param {number} multiplier A damage multiplier to apply to the rolled damage.\n * @returns {Promise}\n */\nfunction applyChatCardDamage(li, multiplier) {\n const message = game.messages.get(li.data(\"messageId\"));\n const roll = message.rolls[0];\n return Promise.all(canvas.tokens.controlled.map(t => {\n const a = t.actor;\n return a.applyDamage(roll.total, multiplier);\n }));\n}\n\n/* -------------------------------------------- */\n\n/**\n * Apply rolled dice as temporary hit points to the controlled token(s).\n * @param {HTMLElement} li The chat entry which contains the roll data\n * @returns {Promise}\n */\nfunction applyChatCardTemp(li) {\n const message = game.messages.get(li.data(\"messageId\"));\n const roll = message.rolls[0];\n return Promise.all(canvas.tokens.controlled.map(t => {\n const a = t.actor;\n return a.applyTempHP(roll.total);\n }));\n}\n\n/* -------------------------------------------- */\n\n/**\n * Handle rendering of a chat message to the log\n * @param {ChatLog} app The ChatLog instance\n * @param {jQuery} html Rendered chat message HTML\n * @param {object} data Data passed to the render context\n */\nexport function onRenderChatMessage(app, html, data) {\n displayChatActionButtons(app, html, data);\n highlightCriticalSuccessFailure(app, html, data);\n if (game.settings.get(\"dnd5e\", \"autoCollapseItemCards\")) html.find(\".card-content\").hide();\n}\n","/**\n * Override the core method for obtaining a Roll instance used for the Combatant.\n * @see {Actor5e#getInitiativeRoll}\n * @param {string} [formula] A formula to use if no Actor is defined\n * @returns {D20Roll} The D20Roll instance which is used to determine initiative for the Combatant\n */\nexport function getInitiativeRoll(formula=\"1d20\") {\n if ( !this.actor ) return new CONFIG.Dice.D20Roll(formula ?? \"1d20\", {});\n return this.actor.getInitiativeRoll();\n}\n","/**\n * Attempt to create a macro from the dropped data. Will use an existing macro if one exists.\n * @param {object} dropData The dropped data\n * @param {number} slot The hotbar slot to use\n */\nexport async function create5eMacro(dropData, slot) {\n const macroData = { type: \"script\", scope: \"actor\" };\n switch ( dropData.type ) {\n case \"Item\":\n const itemData = await Item.implementation.fromDropData(dropData);\n if ( !itemData ) return ui.notifications.warn(game.i18n.localize(\"MACRO.5eUnownedWarn\"));\n foundry.utils.mergeObject(macroData, {\n name: itemData.name,\n img: itemData.img,\n command: `dnd5e.documents.macro.rollItem(\"${itemData.name}\")`,\n flags: {\"dnd5e.itemMacro\": true}\n });\n break;\n case \"ActiveEffect\":\n const effectData = await ActiveEffect.implementation.fromDropData(dropData);\n if ( !effectData ) return ui.notifications.warn(game.i18n.localize(\"MACRO.5eUnownedWarn\"));\n foundry.utils.mergeObject(macroData, {\n name: effectData.label,\n img: effectData.icon,\n command: `dnd5e.documents.macro.toggleEffect(\"${effectData.label}\")`,\n flags: {\"dnd5e.effectMacro\": true}\n });\n break;\n default:\n return;\n }\n\n // Assign the macro to the hotbar\n const macro = game.macros.find(m => (m.name === macroData.name) && (m.command === macroData.command)\n && m.author.isSelf) || await Macro.create(macroData);\n game.user.assignHotbarMacro(macro, slot);\n}\n\n/* -------------------------------------------- */\n\n/**\n * Find a document of the specified name and type on an assigned or selected actor.\n * @param {string} name Document name to locate.\n * @param {string} documentType Type of embedded document (e.g. \"Item\" or \"ActiveEffect\").\n * @returns {Document} Document if found, otherwise nothing.\n */\nfunction getMacroTarget(name, documentType) {\n let actor;\n const speaker = ChatMessage.getSpeaker();\n if ( speaker.token ) actor = game.actors.tokens[speaker.token];\n actor ??= game.actors.get(speaker.actor);\n if ( !actor ) return ui.notifications.warn(game.i18n.localize(\"MACRO.5eNoActorSelected\"));\n\n const collection = (documentType === \"Item\") ? actor.items : actor.effects;\n const nameKeyPath = (documentType === \"Item\") ? \"name\" : \"label\";\n\n // Find item in collection\n const documents = collection.filter(i => foundry.utils.getProperty(i, nameKeyPath) === name);\n const type = game.i18n.localize(`DOCUMENT.${documentType}`);\n if ( documents.length === 0 ) {\n return ui.notifications.warn(game.i18n.format(\"MACRO.5eMissingTargetWarn\", { actor: actor.name, type, name }));\n }\n if ( documents.length > 1 ) {\n ui.notifications.warn(game.i18n.format(\"MACRO.5eMultipleTargetsWarn\", { actor: actor.name, type, name }));\n }\n return documents[0];\n}\n\n/* -------------------------------------------- */\n\n/**\n * Trigger an item to roll when a macro is clicked.\n * @param {string} itemName Name of the item on the selected actor to trigger.\n * @returns {Promise} Roll result.\n */\nexport function rollItem(itemName) {\n return getMacroTarget(itemName, \"Item\")?.use();\n}\n\n/* -------------------------------------------- */\n\n/**\n * Toggle an effect on and off when a macro is clicked.\n * @param {string} effectName Name of the effect to be toggled.\n * @returns {Promise} The effect after it has been toggled.\n */\nexport function toggleEffect(effectName) {\n const effect = getMacroTarget(effectName, \"ActiveEffect\");\n return effect?.update({disabled: !effect.disabled});\n}\n","// Document Classes\nexport {default as ActiveEffect5e} from \"./active-effect.mjs\";\nexport {default as Actor5e} from \"./actor/actor.mjs\";\nexport * as advancement from \"./advancement/_module.mjs\";\nexport {default as Item5e} from \"./item.mjs\";\nexport {default as TokenDocument5e} from \"./token.mjs\";\n\n// Helper Methods\nexport {default as Proficiency} from \"./actor/proficiency.mjs\";\nexport * as Trait from \"./actor/trait.mjs\";\nexport * as chat from \"./chat-message.mjs\";\nexport * as combat from \"./combat.mjs\";\nexport * as macro from \"./macro.mjs\";\n","/**\n * Perform a system migration for the entire World, applying migrations for Actors, Items, and Compendium packs\n * @returns {Promise} A Promise which resolves once the migration is completed\n */\nexport const migrateWorld = async function() {\n const version = game.system.version;\n ui.notifications.info(game.i18n.format(\"MIGRATION.5eBegin\", {version}), {permanent: true});\n\n const migrationData = await getMigrationData();\n\n // Migrate World Actors\n const actors = game.actors.map(a => [a, true])\n .concat(Array.from(game.actors.invalidDocumentIds).map(id => [game.actors.getInvalid(id), false]));\n for ( const [actor, valid] of actors ) {\n try {\n const source = valid ? actor.toObject() : game.data.actors.find(a => a._id === actor.id);\n const updateData = migrateActorData(source, migrationData);\n if ( !foundry.utils.isEmpty(updateData) ) {\n console.log(`Migrating Actor document ${actor.name}`);\n await actor.update(updateData, {enforceTypes: false, diff: valid});\n }\n } catch(err) {\n err.message = `Failed dnd5e system migration for Actor ${actor.name}: ${err.message}`;\n console.error(err);\n }\n }\n\n // Migrate World Items\n const items = game.items.map(i => [i, true])\n .concat(Array.from(game.items.invalidDocumentIds).map(id => [game.items.getInvalid(id), false]));\n for ( const [item, valid] of items ) {\n try {\n const source = valid ? item.toObject() : game.data.items.find(i => i._id === item.id);\n const updateData = migrateItemData(source, migrationData);\n if ( !foundry.utils.isEmpty(updateData) ) {\n console.log(`Migrating Item document ${item.name}`);\n await item.update(updateData, {enforceTypes: false, diff: valid});\n }\n } catch(err) {\n err.message = `Failed dnd5e system migration for Item ${item.name}: ${err.message}`;\n console.error(err);\n }\n }\n\n // Migrate World Macros\n for ( const m of game.macros ) {\n try {\n const updateData = migrateMacroData(m.toObject(), migrationData);\n if ( !foundry.utils.isEmpty(updateData) ) {\n console.log(`Migrating Macro document ${m.name}`);\n await m.update(updateData, {enforceTypes: false});\n }\n } catch(err) {\n err.message = `Failed dnd5e system migration for Macro ${m.name}: ${err.message}`;\n console.error(err);\n }\n }\n\n // Migrate Actor Override Tokens\n for ( let s of game.scenes ) {\n try {\n const updateData = migrateSceneData(s, migrationData);\n if ( !foundry.utils.isEmpty(updateData) ) {\n console.log(`Migrating Scene document ${s.name}`);\n await s.update(updateData, {enforceTypes: false});\n // If we do not do this, then synthetic token actors remain in cache\n // with the un-updated actorData.\n s.tokens.forEach(t => t._actor = null);\n }\n } catch(err) {\n err.message = `Failed dnd5e system migration for Scene ${s.name}: ${err.message}`;\n console.error(err);\n }\n }\n\n // Migrate World Compendium Packs\n for ( let p of game.packs ) {\n if ( p.metadata.packageType !== \"world\" ) continue;\n if ( ![\"Actor\", \"Item\", \"Scene\"].includes(p.documentName) ) continue;\n await migrateCompendium(p);\n }\n\n // Set the migration as complete\n game.settings.set(\"dnd5e\", \"systemMigrationVersion\", game.system.version);\n ui.notifications.info(game.i18n.format(\"MIGRATION.5eComplete\", {version}), {permanent: true});\n};\n\n/* -------------------------------------------- */\n\n/**\n * Apply migration rules to all Documents within a single Compendium pack\n * @param {CompendiumCollection} pack Pack to be migrated.\n * @returns {Promise}\n */\nexport const migrateCompendium = async function(pack) {\n const documentName = pack.documentName;\n if ( ![\"Actor\", \"Item\", \"Scene\"].includes(documentName) ) return;\n\n const migrationData = await getMigrationData();\n\n // Unlock the pack for editing\n const wasLocked = pack.locked;\n await pack.configure({locked: false});\n\n // Begin by requesting server-side data model migration and get the migrated content\n await pack.migrate();\n const documents = await pack.getDocuments();\n\n // Iterate over compendium entries - applying fine-tuned migration functions\n for ( let doc of documents ) {\n let updateData = {};\n try {\n switch (documentName) {\n case \"Actor\":\n updateData = migrateActorData(doc.toObject(), migrationData);\n break;\n case \"Item\":\n updateData = migrateItemData(doc.toObject(), migrationData);\n break;\n case \"Scene\":\n updateData = migrateSceneData(doc.toObject(), migrationData);\n break;\n }\n\n // Save the entry, if data was changed\n if ( foundry.utils.isEmpty(updateData) ) continue;\n await doc.update(updateData);\n console.log(`Migrated ${documentName} document ${doc.name} in Compendium ${pack.collection}`);\n }\n\n // Handle migration failures\n catch(err) {\n err.message = `Failed dnd5e system migration for document ${doc.name} in pack ${pack.collection}: ${err.message}`;\n console.error(err);\n }\n }\n\n // Apply the original locked status for the pack\n await pack.configure({locked: wasLocked});\n console.log(`Migrated all ${documentName} documents from Compendium ${pack.collection}`);\n};\n\n/* -------------------------------------------- */\n\n/**\n * Update all compendium packs using the new system data model.\n */\nexport async function refreshAllCompendiums() {\n for ( const pack of game.packs ) {\n await refreshCompendium(pack);\n }\n}\n\n/* -------------------------------------------- */\n\n/**\n * Update all Documents in a compendium using the new system data model.\n * @param {CompendiumCollection} pack Pack to refresh.\n */\nexport async function refreshCompendium(pack) {\n if ( !pack?.documentName ) return;\n dnd5e.moduleArt.suppressArt = true;\n const DocumentClass = CONFIG[pack.documentName].documentClass;\n const wasLocked = pack.locked;\n await pack.configure({locked: false});\n await pack.migrate();\n\n ui.notifications.info(`Beginning to refresh Compendium ${pack.collection}`);\n const documents = await pack.getDocuments();\n for ( const doc of documents ) {\n const data = doc.toObject();\n await doc.delete();\n await DocumentClass.create(data, {keepId: true, keepEmbeddedIds: true, pack: pack.collection});\n }\n await pack.configure({locked: wasLocked});\n dnd5e.moduleArt.suppressArt = false;\n ui.notifications.info(`Refreshed all documents from Compendium ${pack.collection}`);\n}\n\n/* -------------------------------------------- */\n\n/**\n * Apply 'smart' AC migration to a given Actor compendium. This will perform the normal AC migration but additionally\n * check to see if the actor has armor already equipped, and opt to use that instead.\n * @param {CompendiumCollection|string} pack Pack or name of pack to migrate.\n * @returns {Promise}\n */\nexport const migrateArmorClass = async function(pack) {\n if ( typeof pack === \"string\" ) pack = game.packs.get(pack);\n if ( pack.documentName !== \"Actor\" ) return;\n const wasLocked = pack.locked;\n await pack.configure({locked: false});\n const actors = await pack.getDocuments();\n const updates = [];\n const armor = new Set(Object.keys(CONFIG.DND5E.armorTypes));\n\n for ( const actor of actors ) {\n try {\n console.log(`Migrating ${actor.name}...`);\n const src = actor.toObject();\n const update = {_id: actor.id};\n\n // Perform the normal migration.\n _migrateActorAC(src, update);\n // TODO: See if AC migration within DataModel is enough to handle this\n updates.push(update);\n\n // CASE 1: Armor is equipped\n const hasArmorEquipped = actor.itemTypes.equipment.some(e => {\n return armor.has(e.system.armor?.type) && e.system.equipped;\n });\n if ( hasArmorEquipped ) update[\"system.attributes.ac.calc\"] = \"default\";\n\n // CASE 2: NPC Natural Armor\n else if ( src.type === \"npc\" ) update[\"system.attributes.ac.calc\"] = \"natural\";\n } catch(e) {\n console.warn(`Failed to migrate armor class for Actor ${actor.name}`, e);\n }\n }\n\n await Actor.implementation.updateDocuments(updates, {pack: pack.collection});\n await pack.getDocuments(); // Force a re-prepare of all actors.\n await pack.configure({locked: wasLocked});\n console.log(`Migrated the AC of all Actors from Compendium ${pack.collection}`);\n};\n\n/* -------------------------------------------- */\n/* Document Type Migration Helpers */\n/* -------------------------------------------- */\n\n/**\n * Migrate a single Actor document to incorporate latest data model changes\n * Return an Object of updateData to be applied\n * @param {object} actor The actor data object to update\n * @param {object} [migrationData] Additional data to perform the migration\n * @returns {object} The updateData to apply\n */\nexport const migrateActorData = function(actor, migrationData) {\n const updateData = {};\n _migrateTokenImage(actor, updateData);\n _migrateActorAC(actor, updateData);\n\n // Migrate embedded effects\n if ( actor.effects ) {\n const effects = migrateEffects(actor, migrationData);\n if ( effects.length > 0 ) updateData.effects = effects;\n }\n\n // Migrate Owned Items\n if ( !actor.items ) return updateData;\n const items = actor.items.reduce((arr, i) => {\n // Migrate the Owned Item\n const itemData = i instanceof CONFIG.Item.documentClass ? i.toObject() : i;\n let itemUpdate = migrateItemData(itemData, migrationData);\n\n // Prepared, Equipped, and Proficient for NPC actors\n if ( actor.type === \"npc\" ) {\n if (foundry.utils.getProperty(itemData.system, \"preparation.prepared\") === false) itemUpdate[\"system.preparation.prepared\"] = true;\n if (foundry.utils.getProperty(itemData.system, \"equipped\") === false) itemUpdate[\"system.equipped\"] = true;\n if (foundry.utils.getProperty(itemData.system, \"proficient\") === false) itemUpdate[\"system.proficient\"] = true;\n }\n\n // Update the Owned Item\n if ( !foundry.utils.isEmpty(itemUpdate) ) {\n itemUpdate._id = itemData._id;\n arr.push(foundry.utils.expandObject(itemUpdate));\n }\n\n // Update tool expertise.\n if ( actor.system.tools ) {\n const hasToolProf = itemData.system.baseItem in actor.system.tools;\n if ( (itemData.type === \"tool\") && (itemData.system.proficient > 1) && hasToolProf ) {\n updateData[`system.tools.${itemData.system.baseItem}.value`] = itemData.system.proficient;\n }\n }\n\n return arr;\n }, []);\n if ( items.length > 0 ) updateData.items = items;\n\n return updateData;\n};\n\n/* -------------------------------------------- */\n\n/**\n * Migrate a single Item document to incorporate latest data model changes\n *\n * @param {object} item Item data to migrate\n * @param {object} [migrationData] Additional data to perform the migration\n * @returns {object} The updateData to apply\n */\nexport function migrateItemData(item, migrationData) {\n const updateData = {};\n _migrateDocumentIcon(item, updateData, migrationData);\n\n // Migrate embedded effects\n if ( item.effects ) {\n const effects = migrateEffects(item, migrationData);\n if ( effects.length > 0 ) updateData.effects = effects;\n }\n\n return updateData;\n}\n\n/* -------------------------------------------- */\n\n/**\n * Migrate any active effects attached to the provided parent.\n * @param {object} parent Data of the parent being migrated.\n * @param {object} [migrationData] Additional data to perform the migration.\n * @returns {object[]} Updates to apply on the embedded effects.\n */\nexport const migrateEffects = function(parent, migrationData) {\n if ( !parent.effects ) return {};\n return parent.effects.reduce((arr, e) => {\n const effectData = e instanceof CONFIG.ActiveEffect.documentClass ? e.toObject() : e;\n let effectUpdate = migrateEffectData(effectData, migrationData);\n if ( !foundry.utils.isEmpty(effectUpdate) ) {\n effectUpdate._id = effectData._id;\n arr.push(foundry.utils.expandObject(effectUpdate));\n }\n return arr;\n }, []);\n};\n\n/* -------------------------------------------- */\n\n/**\n * Migrate the provided active effect data.\n * @param {object} effect Effect data to migrate.\n * @param {object} [migrationData] Additional data to perform the migration.\n * @returns {object} The updateData to apply.\n */\nexport const migrateEffectData = function(effect, migrationData) {\n const updateData = {};\n _migrateDocumentIcon(effect, updateData, {...migrationData, field: \"icon\"});\n _migrateEffectArmorClass(effect, updateData);\n return updateData;\n};\n\n/* -------------------------------------------- */\n\n/**\n * Migrate a single Macro document to incorporate latest data model changes.\n * @param {object} macro Macro data to migrate\n * @param {object} [migrationData] Additional data to perform the migration\n * @returns {object} The updateData to apply\n */\nexport const migrateMacroData = function(macro, migrationData) {\n const updateData = {};\n _migrateDocumentIcon(macro, updateData, migrationData);\n _migrateMacroCommands(macro, updateData);\n return updateData;\n};\n\n/* -------------------------------------------- */\n\n/**\n * Migrate a single Scene document to incorporate changes to the data model of it's actor data overrides\n * Return an Object of updateData to be applied\n * @param {object} scene The Scene data to Update\n * @param {object} [migrationData] Additional data to perform the migration\n * @returns {object} The updateData to apply\n */\nexport const migrateSceneData = function(scene, migrationData) {\n const tokens = scene.tokens.map(token => {\n const t = token instanceof foundry.abstract.DataModel ? token.toObject() : token;\n const update = {};\n _migrateTokenImage(t, update);\n if ( Object.keys(update).length ) foundry.utils.mergeObject(t, update);\n if ( !game.actors.has(t.actorId) ) t.actorId = null;\n if ( !t.actorId || t.actorLink ) t.actorData = {};\n else if ( !t.actorLink ) {\n const actorData = token.delta?.toObject() ?? foundry.utils.deepClone(t.actorData);\n actorData.type = token.actor?.type;\n const update = migrateActorData(actorData, migrationData);\n if ( game.dnd5e.isV10 ) {\n [\"items\", \"effects\"].forEach(embeddedName => {\n if ( !update[embeddedName]?.length ) return;\n const updates = new Map(update[embeddedName].map(u => [u._id, u]));\n t.actorData[embeddedName].forEach(original => {\n const update = updates.get(original._id);\n if ( update ) foundry.utils.mergeObject(original, update);\n });\n delete update[embeddedName];\n });\n foundry.utils.mergeObject(t.actorData, update);\n }\n else t.delta = update;\n }\n return t;\n });\n return {tokens};\n};\n\n/* -------------------------------------------- */\n\n/**\n * Fetch bundled data for large-scale migrations.\n * @returns {Promise} Object mapping original system icons to their core replacements.\n */\nexport const getMigrationData = async function() {\n const data = {};\n try {\n const icons = await fetch(\"systems/dnd5e/json/icon-migration.json\");\n const spellIcons = await fetch(\"systems/dnd5e/json/spell-icon-migration.json\");\n data.iconMap = {...await icons.json(), ...await spellIcons.json()};\n } catch(err) {\n console.warn(`Failed to retrieve icon migration data: ${err.message}`);\n }\n return data;\n};\n\n/* -------------------------------------------- */\n/* Low level migration utilities\n/* -------------------------------------------- */\n\n/**\n * Migrate the actor attributes.ac.value to the new ac.flat override field.\n * @param {object} actorData Actor data being migrated.\n * @param {object} updateData Existing updates being applied to actor. *Will be mutated.*\n * @returns {object} Modified version of update data.\n * @private\n */\nfunction _migrateActorAC(actorData, updateData) {\n const ac = actorData.system?.attributes?.ac;\n // If the actor has a numeric ac.value, then their AC has not been migrated to the auto-calculation schema yet.\n if ( Number.isNumeric(ac?.value) ) {\n updateData[\"system.attributes.ac.flat\"] = parseInt(ac.value);\n updateData[\"system.attributes.ac.calc\"] = actorData.type === \"npc\" ? \"natural\" : \"flat\";\n updateData[\"system.attributes.ac.-=value\"] = null;\n return updateData;\n }\n\n // Migrate ac.base in custom formulas to ac.armor\n if ( (typeof ac?.formula === \"string\") && ac?.formula.includes(\"@attributes.ac.base\") ) {\n updateData[\"system.attributes.ac.formula\"] = ac.formula.replaceAll(\"@attributes.ac.base\", \"@attributes.ac.armor\");\n }\n\n // Protect against string values created by character sheets or importers that don't enforce data types\n if ( (typeof ac?.flat === \"string\") && Number.isNumeric(ac.flat) ) {\n updateData[\"system.attributes.ac.flat\"] = parseInt(ac.flat);\n }\n\n // Remove invalid AC formula strings.\n if ( ac?.formula ) {\n try {\n const roll = new Roll(ac.formula);\n Roll.safeEval(roll.formula);\n } catch( e ) {\n updateData[\"system.attributes.ac.formula\"] = \"\";\n }\n }\n\n return updateData;\n}\n\n/* -------------------------------------------- */\n\n/**\n * Migrate any system token images from PNG to WEBP.\n * @param {object} actorData Actor or token data to migrate.\n * @param {object} updateData Existing update to expand upon.\n * @returns {object} The updateData to apply\n * @private\n */\nfunction _migrateTokenImage(actorData, updateData) {\n const oldSystemPNG = /^systems\\/dnd5e\\/tokens\\/([a-z]+)\\/([A-z]+).png$/;\n for ( const path of [\"texture.src\", \"prototypeToken.texture.src\"] ) {\n const v = foundry.utils.getProperty(actorData, path);\n if ( oldSystemPNG.test(v) ) {\n const [type, fileName] = v.match(oldSystemPNG).slice(1);\n updateData[path] = `systems/dnd5e/tokens/${type}/${fileName}.webp`;\n }\n }\n return updateData;\n}\n\n/* -------------------------------------------- */\n\n/**\n * Convert system icons to use bundled core webp icons.\n * @param {object} document Document data to migrate\n * @param {object} updateData Existing update to expand upon\n * @param {object} [migrationData={}] Additional data to perform the migration\n * @param {Object} [migrationData.iconMap] A mapping of system icons to core foundry icons\n * @param {string} [migrationData.field] The document field to migrate\n * @returns {object} The updateData to apply\n * @private\n */\nfunction _migrateDocumentIcon(document, updateData, {iconMap, field=\"img\"}={}) {\n let path = document?.[field];\n if ( path && iconMap ) {\n if ( path.startsWith(\"/\") || path.startsWith(\"\\\\\") ) path = path.substring(1);\n const rename = iconMap[path];\n if ( rename ) updateData[field] = rename;\n }\n return updateData;\n}\n\n/* -------------------------------------------- */\n\n/**\n * Change active effects that target AC.\n * @param {object} effect Effect data to migrate.\n * @param {object} updateData Existing update to expand upon.\n * @returns {object} The updateData to apply.\n */\nfunction _migrateEffectArmorClass(effect, updateData) {\n let containsUpdates = false;\n const changes = (effect.changes || []).map(c => {\n if ( c.key !== \"system.attributes.ac.base\" ) return c;\n c.key = \"system.attributes.ac.armor\";\n containsUpdates = true;\n return c;\n });\n if ( containsUpdates ) updateData.changes = changes;\n return updateData;\n}\n\n/* -------------------------------------------- */\n\n/**\n * Migrate macros from the old 'dnd5e.rollItemMacro' and 'dnd5e.macros' commands to the new location.\n * @param {object} macro Macro data to migrate.\n * @param {object} updateData Existing update to expand upon.\n * @returns {object} The updateData to apply.\n */\nfunction _migrateMacroCommands(macro, updateData) {\n if ( macro.command.includes(\"game.dnd5e.rollItemMacro\") ) {\n updateData.command = macro.command.replaceAll(\"game.dnd5e.rollItemMacro\", \"dnd5e.documents.macro.rollItem\");\n } else if ( macro.command.includes(\"game.dnd5e.macros.\") ) {\n updateData.command = macro.command.replaceAll(\"game.dnd5e.macros.\", \"dnd5e.documents.macro.\");\n }\n return updateData;\n}\n\n/* -------------------------------------------- */\n\n/**\n * A general tool to purge flags from all documents in a Compendium pack.\n * @param {CompendiumCollection} pack The compendium pack to clean.\n * @private\n */\nexport async function purgeFlags(pack) {\n const cleanFlags = flags => {\n const flags5e = flags.dnd5e || null;\n return flags5e ? {dnd5e: flags5e} : {};\n };\n await pack.configure({locked: false});\n const content = await pack.getDocuments();\n for ( let doc of content ) {\n const update = {flags: cleanFlags(doc.flags)};\n if ( pack.documentName === \"Actor\" ) {\n update.items = doc.items.map(i => {\n i.flags = cleanFlags(i.flags);\n return i;\n });\n }\n await doc.update(update, {recursive: false});\n console.log(`Purged flags from ${doc.name}`);\n }\n await pack.configure({locked: true});\n}\n","/**\n * The DnD5e game system for Foundry Virtual Tabletop\n * A system for playing the fifth edition of the world's most popular role-playing game.\n * Author: Atropos\n * Software License: MIT\n * Content License: https://www.dndbeyond.com/attachments/39j2li89/SRD5.1-CCBY4.0License.pdf\n * Repository: https://github.com/foundryvtt/dnd5e\n * Issue Tracker: https://github.com/foundryvtt/dnd5e/issues\n */\n\n// Import Configuration\nimport DND5E from \"./module/config.mjs\";\nimport registerSystemSettings from \"./module/settings.mjs\";\n\n// Import Submodules\nimport * as applications from \"./module/applications/_module.mjs\";\nimport * as canvas from \"./module/canvas/_module.mjs\";\nimport * as dataModels from \"./module/data/_module.mjs\";\nimport * as dice from \"./module/dice/_module.mjs\";\nimport * as documents from \"./module/documents/_module.mjs\";\nimport * as migrations from \"./module/migration.mjs\";\nimport * as utils from \"./module/utils.mjs\";\nimport {ModuleArt} from \"./module/module-art.mjs\";\n\n/* -------------------------------------------- */\n/* Define Module Structure */\n/* -------------------------------------------- */\n\nglobalThis.dnd5e = {\n applications,\n canvas,\n config: DND5E,\n dataModels,\n dice,\n documents,\n migrations,\n utils\n};\n\n/* -------------------------------------------- */\n/* Foundry VTT Initialization */\n/* -------------------------------------------- */\n\nHooks.once(\"init\", function() {\n globalThis.dnd5e = game.dnd5e = Object.assign(game.system, globalThis.dnd5e);\n console.log(`DnD5e | Initializing the DnD5e Game System - Version ${dnd5e.version}\\n${DND5E.ASCII}`);\n\n // Record Configuration Values\n CONFIG.DND5E = DND5E;\n CONFIG.ActiveEffect.documentClass = documents.ActiveEffect5e;\n CONFIG.Actor.documentClass = documents.Actor5e;\n CONFIG.Item.documentClass = documents.Item5e;\n CONFIG.Token.documentClass = documents.TokenDocument5e;\n CONFIG.Token.objectClass = canvas.Token5e;\n CONFIG.time.roundTime = 6;\n CONFIG.Dice.DamageRoll = dice.DamageRoll;\n CONFIG.Dice.D20Roll = dice.D20Roll;\n CONFIG.MeasuredTemplate.defaults.angle = 53.13; // 5e cone RAW should be 53.13 degrees\n CONFIG.ui.combat = applications.combat.CombatTracker5e;\n CONFIG.compatibility.excludePatterns.push(/\\bActiveEffect5e#label\\b/); // backwards compatibility with v10\n game.dnd5e.isV10 = game.release.generation < 11;\n\n // Configure trackable attributes.\n _configureTrackableAttributes();\n\n // Register System Settings\n registerSystemSettings();\n\n // Validation strictness.\n if ( game.dnd5e.isV10 ) _determineValidationStrictness();\n\n // Configure module art.\n game.dnd5e.moduleArt = new ModuleArt();\n\n // Remove honor & sanity from configuration if they aren't enabled\n if ( !game.settings.get(\"dnd5e\", \"honorScore\") ) delete DND5E.abilities.hon;\n if ( !game.settings.get(\"dnd5e\", \"sanityScore\") ) delete DND5E.abilities.san;\n\n // Patch Core Functions\n Combatant.prototype.getInitiativeRoll = documents.combat.getInitiativeRoll;\n\n // Register Roll Extensions\n CONFIG.Dice.rolls.push(dice.D20Roll);\n CONFIG.Dice.rolls.push(dice.DamageRoll);\n\n // Hook up system data types\n const modelType = game.dnd5e.isV10 ? \"systemDataModels\" : \"dataModels\";\n CONFIG.Actor[modelType] = dataModels.actor.config;\n CONFIG.Item[modelType] = dataModels.item.config;\n CONFIG.JournalEntryPage[modelType] = dataModels.journal.config;\n\n // Register sheet application classes\n Actors.unregisterSheet(\"core\", ActorSheet);\n Actors.registerSheet(\"dnd5e\", applications.actor.ActorSheet5eCharacter, {\n types: [\"character\"],\n makeDefault: true,\n label: \"DND5E.SheetClassCharacter\"\n });\n Actors.registerSheet(\"dnd5e\", applications.actor.ActorSheet5eNPC, {\n types: [\"npc\"],\n makeDefault: true,\n label: \"DND5E.SheetClassNPC\"\n });\n Actors.registerSheet(\"dnd5e\", applications.actor.ActorSheet5eVehicle, {\n types: [\"vehicle\"],\n makeDefault: true,\n label: \"DND5E.SheetClassVehicle\"\n });\n Actors.registerSheet(\"dnd5e\", applications.actor.GroupActorSheet, {\n types: [\"group\"],\n makeDefault: true,\n label: \"DND5E.SheetClassGroup\"\n });\n\n Items.unregisterSheet(\"core\", ItemSheet);\n Items.registerSheet(\"dnd5e\", applications.item.ItemSheet5e, {\n makeDefault: true,\n label: \"DND5E.SheetClassItem\"\n });\n DocumentSheetConfig.registerSheet(JournalEntryPage, \"dnd5e\", applications.journal.JournalClassPageSheet, {\n label: \"DND5E.SheetClassClassSummary\",\n types: [\"class\"]\n });\n\n // Preload Handlebars helpers & partials\n utils.registerHandlebarsHelpers();\n utils.preloadHandlebarsTemplates();\n});\n\n/**\n * Determine if this is a 'legacy' world with permissive validation, or one where strict validation is enabled.\n * @internal\n */\nfunction _determineValidationStrictness() {\n dataModels.SystemDataModel._enableV10Validation = game.settings.get(\"dnd5e\", \"strictValidation\");\n}\n\n/**\n * Update the world's validation strictness setting based on whether validation errors were encountered.\n * @internal\n */\nasync function _configureValidationStrictness() {\n if ( !game.user.isGM ) return;\n const invalidDocuments = game.actors.invalidDocumentIds.size + game.items.invalidDocumentIds.size\n + game.scenes.invalidDocumentIds.size;\n const strictValidation = game.settings.get(\"dnd5e\", \"strictValidation\");\n if ( invalidDocuments && strictValidation ) {\n await game.settings.set(\"dnd5e\", \"strictValidation\", false);\n game.socket.emit(\"reload\");\n foundry.utils.debouncedReload();\n }\n}\n\n/**\n * Configure explicit lists of attributes that are trackable on the token HUD and in the combat tracker.\n * @internal\n */\nfunction _configureTrackableAttributes() {\n const common = {\n bar: [],\n value: [\n ...Object.keys(DND5E.abilities).map(ability => `abilities.${ability}.value`),\n ...Object.keys(DND5E.movementTypes).map(movement => `attributes.movement.${movement}`),\n \"attributes.ac.value\", \"attributes.init.total\"\n ]\n };\n\n const creature = {\n bar: [...common.bar, \"attributes.hp\"],\n value: [\n ...common.value,\n ...Object.keys(DND5E.skills).map(skill => `skills.${skill}.passive`),\n ...Object.keys(DND5E.senses).map(sense => `attributes.senses.${sense}`),\n \"attributes.spelldc\"\n ]\n };\n\n CONFIG.Actor.trackableAttributes = {\n character: {\n bar: [...creature.bar, \"resources.primary\", \"resources.secondary\", \"resources.tertiary\", \"details.xp\"],\n value: [...creature.value]\n },\n npc: {\n bar: [...creature.bar, \"resources.legact\", \"resources.legres\"],\n value: [...creature.value, \"details.cr\", \"details.spellLevel\", \"details.xp.value\"]\n },\n vehicle: {\n bar: [...common.bar, \"attributes.hp\"],\n value: [...common.value]\n },\n group: {\n bar: [],\n value: []\n }\n };\n}\n\n/* -------------------------------------------- */\n/* Foundry VTT Setup */\n/* -------------------------------------------- */\n\n/**\n * Prepare attribute lists.\n */\nHooks.once(\"setup\", function() {\n CONFIG.DND5E.trackableAttributes = expandAttributeList(CONFIG.DND5E.trackableAttributes);\n CONFIG.DND5E.consumableResources = expandAttributeList(CONFIG.DND5E.consumableResources);\n game.dnd5e.moduleArt.registerModuleArt();\n\n // Apply custom compendium styles to the SRD rules compendium.\n if ( !game.dnd5e.isV10 ) {\n const rules = game.packs.get(\"dnd5e.rules\");\n rules.applicationClass = applications.journal.SRDCompendium;\n }\n});\n\n/* --------------------------------------------- */\n\n/**\n * Expand a list of attribute paths into an object that can be traversed.\n * @param {string[]} attributes The initial attributes configuration.\n * @returns {object} The expanded object structure.\n */\nfunction expandAttributeList(attributes) {\n return attributes.reduce((obj, attr) => {\n foundry.utils.setProperty(obj, attr, true);\n return obj;\n }, {});\n}\n\n/* --------------------------------------------- */\n\n/**\n * Perform one-time pre-localization and sorting of some configuration objects\n */\nHooks.once(\"i18nInit\", () => utils.performPreLocalization(CONFIG.DND5E));\n\n/* -------------------------------------------- */\n/* Foundry VTT Ready */\n/* -------------------------------------------- */\n\n/**\n * Once the entire VTT framework is initialized, check to see if we should perform a data migration\n */\nHooks.once(\"ready\", function() {\n if ( game.dnd5e.isV10 ) {\n // Configure validation strictness.\n _configureValidationStrictness();\n\n // Apply custom compendium styles to the SRD rules compendium.\n const rules = game.packs.get(\"dnd5e.rules\");\n rules.apps = [new applications.journal.SRDCompendium(rules)];\n }\n\n // Wait to register hotbar drop hook on ready so that modules could register earlier if they want to\n Hooks.on(\"hotbarDrop\", (bar, data, slot) => {\n if ( [\"Item\", \"ActiveEffect\"].includes(data.type) ) {\n documents.macro.create5eMacro(data, slot);\n return false;\n }\n });\n\n // Determine whether a system migration is required and feasible\n if ( !game.user.isGM ) return;\n const cv = game.settings.get(\"dnd5e\", \"systemMigrationVersion\") || game.world.flags.dnd5e?.version;\n const totalDocuments = game.actors.size + game.scenes.size + game.items.size;\n if ( !cv && totalDocuments === 0 ) return game.settings.set(\"dnd5e\", \"systemMigrationVersion\", game.system.version);\n if ( cv && !isNewerVersion(game.system.flags.needsMigrationVersion, cv) ) return;\n\n // Perform the migration\n if ( cv && isNewerVersion(game.system.flags.compatibleMigrationVersion, cv) ) {\n ui.notifications.error(game.i18n.localize(\"MIGRATION.5eVersionTooOldWarning\"), {permanent: true});\n }\n migrations.migrateWorld();\n});\n\n/* -------------------------------------------- */\n/* Canvas Initialization */\n/* -------------------------------------------- */\n\nHooks.on(\"canvasInit\", gameCanvas => {\n gameCanvas.grid.diagonalRule = game.settings.get(\"dnd5e\", \"diagonalMovement\");\n SquareGrid.prototype.measureDistances = canvas.measureDistances;\n});\n\n/* -------------------------------------------- */\n/* Other Hooks */\n/* -------------------------------------------- */\n\nHooks.on(\"renderChatMessage\", documents.chat.onRenderChatMessage);\nHooks.on(\"getChatLogEntryContext\", documents.chat.addChatMessageContextOptions);\n\nHooks.on(\"renderChatLog\", (app, html, data) => documents.Item5e.chatListeners(html));\nHooks.on(\"renderChatPopout\", (app, html, data) => documents.Item5e.chatListeners(html));\nHooks.on(\"getActorDirectoryEntryContext\", documents.Actor5e.addDirectoryContextOptions);\n\n/* -------------------------------------------- */\n/* Bundled Module Exports */\n/* -------------------------------------------- */\n\nexport {\n applications,\n canvas,\n dataModels,\n dice,\n documents,\n migrations,\n utils,\n DND5E\n};\n"],"names":["Trait.keyLabel","advancement.HitPointsAdvancement","advancement.ItemChoiceAdvancement","advancement.ItemGrantAdvancement","advancement.ScaleValueAdvancement","Trait.traitLabel","Trait.actorKeyPath","Trait.choices","TraitSelector","trait","Trait.getBaseItem","DetailsFields","TraitsFields","config","GroupData","canvas","documents.ActiveEffect5e","documents.Actor5e","documents.Item5e","documents.TokenDocument5e","canvas.Token5e","dice.DamageRoll","dice.D20Roll","applications.combat.CombatTracker5e","documents.combat.getInitiativeRoll","dataModels.actor.config","dataModels.item.config","dataModels.journal.config","applications.actor.ActorSheet5eCharacter","applications.actor.ActorSheet5eNPC","applications.actor.ActorSheet5eVehicle","applications.actor.GroupActorSheet","applications.item.ItemSheet5e","applications.journal.JournalClassPageSheet","utils.registerHandlebarsHelpers","utils.preloadHandlebarsTemplates","dataModels.SystemDataModel","applications.journal.SRDCompendium","utils.performPreLocalization","documents.macro.create5eMacro","migrations.migrateWorld","canvas.measureDistances","documents.chat.onRenderChatMessage","documents.chat.addChatMessageContextOptions"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,iBAAiB,SAAS,eAAe,CAAC;AAC/D,EAAE,WAAW,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,EAAE;AACvC,IAAI,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AAChC,IAAI,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,EAAE,CAAC;AACzC,IAAI,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;AACjC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC;AACP;AACA;AACA;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,OAAO,EAAE,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,CAAC;AACjD,MAAM,QAAQ,EAAE,4DAA4D;AAC5E,MAAM,KAAK,EAAE,GAAG;AAChB,MAAM,MAAM,EAAE,MAAM;AACpB,MAAM,cAAc,EAAE,IAAI;AAC1B,MAAM,aAAa,EAAE,KAAK;AAC1B,MAAM,WAAW,EAAE,IAAI;AACvB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,WAAW,GAAG;AACpB,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAC3D,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,KAAK,GAAG;AACd,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC7D,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,iCAAiC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;AACvG,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE;AAC1B,IAAI,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC/B,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7C,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACnG,IAAI,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AAC3E,SAAS,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,iCAAiC,CAAC,CAAC;AAC3E,IAAI,MAAM,OAAO,GAAG;AACpB,MAAM,MAAM,EAAE,MAAM,CAAC,KAAK;AAC1B,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;AACzC,MAAM,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;AACtC,MAAM,OAAO,EAAE;AACf,QAAQ,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK;AAC1D,QAAQ,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI;AACxD,OAAO;AACP,MAAM,MAAM;AACZ,MAAM,qBAAqB,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO;AACvD,MAAM,iBAAiB,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU;AAC1E,KAAK,CAAC;AACN,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,0BAA0B,CAAC,aAAa,EAAE;AAClD,IAAI,OAAO,aAAa,CAAC;AACzB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,IAAI,EAAE;AAC1B,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAClC;AACA;AACA,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,wBAAwB,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9G,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE;AAClC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;AAC7C,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACxC,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE;AACvC,IAAI,IAAI,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AACvD,IAAI,KAAK,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AACtH,IAAI,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC3C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,cAAc,CAAC,MAAM,EAAE;AAChC,IAAI,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK;AAChE,MAAM,KAAK,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACpC,WAAW,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AAClC,MAAM,OAAO,GAAG,CAAC;AACjB,KAAK,EAAE,EAAE,CAAC,CAAC;AACX,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,aAAa,CAAC,KAAK,EAAE;AAC7B,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC;AAC3F,IAAI,KAAK,CAAC,YAAY,GAAG,OAAO;AAChC,IAAI,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AACtG,IAAI,MAAM,OAAO,GAAG,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC,0BAA0B,CAAC;AAC3E,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,KAAK,YAAY,CAAC;AAC7E,KAAK,CAAC,EAAE,CAAC;AACT,IAAI,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC3C,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,YAAY,GAAG;AACjB,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC;AAC3B,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,CAAC,KAAK,EAAE;AACvB,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,MAAM,IAAI,KAAK;AACpD,MAAM,oGAAoG;AAC1G,QAAQ,6CAA6C;AACrD,KAAK,CAAC;AACN;AACA;AACA,IAAI,MAAM,IAAI,GAAG,UAAU,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACpD;AACA,IAAI,KAAK,IAAI,EAAE,IAAI,KAAK,MAAM,GAAG,OAAO,KAAK,CAAC;AAC9C,IAAI,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAC9D;AACA,IAAI,IAAI;AACR,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC7C,KAAK,CAAC,MAAM,GAAG,EAAE;AACjB,MAAM,OAAO,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACjD,KAAK;AACL;AACA,IAAI,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AAC9G;AACA;AACA,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG;AACxC,MAAM,OAAO,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,4CAA4C,CAAC,CAAC,CAAC;AACtG,KAAK;AACL;AACA;AACA,IAAI,KAAK,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;AAC7C,MAAM,OAAO,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,4CAA4C,CAAC,CAAC,CAAC;AACrG,KAAK;AACL;AACA,IAAI,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,GAAG,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClH,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,oBAAoB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;AACtC;AACA;;AClOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,eAAe,SAAS,eAAe,CAAC;AAC7D,EAAE,WAAW,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE;AACtD,IAAI,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AACvB;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;AACxC;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AAC7B,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,QAAQ,EAAE,0DAA0D;AAC1E,MAAM,MAAM,EAAE,KAAK;AACnB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,EAAE,GAAG;AACX,IAAI,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAChG,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,KAAK,GAAG;AACd,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAClC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,WAAW,GAAG;AACpB,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC;AACpE,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,OAAO;AACX,MAAM,KAAK,EAAE,IAAI,CAAC,EAAE;AACpB,MAAM,WAAW,EAAE,IAAI,CAAC,WAAW;AACnC,MAAM,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ;AACjD,MAAM,KAAK,EAAE,IAAI,CAAC,KAAK;AACvB,MAAM,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3D,MAAM,KAAK,EAAE,IAAI,CAAC,KAAK;AACvB,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE;AACvC,IAAI,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACvD,GAAG;AACH;AACA;;AC/FA;AACA;AACA;AACA;AACO,MAAM,gBAAgB,SAAS,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,CAAC,IAAI,EAAE;AACxB,IAAI,OAAO,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AACvD,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE;AAC7B,IAAI,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;AACnD;AACA,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACjD,IAAI,KAAK,GAAG,GAAG,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACpD,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE;AACvC,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACjD,IAAI,KAAK,GAAG,GAAG,OAAO,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;AAClE,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC1C,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,oBAAoB,SAAS,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAC1E,EAAE,WAAW,CAAC,eAAe,EAAE,OAAO,CAAC,EAAE,EAAE;AAC3C,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AACnB,IAAI,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;AAC3C,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,WAAW,SAAS,GAAG;AACzB,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;AACxE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;AAClE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,GAAG;AAChB,IAAI,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACtE,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE;AAC7B,IAAI,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;AACnD;AACA;AACA,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChC,IAAI,KAAK,GAAG,GAAG,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACpD,IAAI,KAAK,OAAO,CAAC,OAAO,GAAG,OAAO,KAAK,CAAC;AACxC;AACA;AACA,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACxC,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AACxE,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE;AACvC,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChC,IAAI,KAAK,GAAG,GAAG,OAAO,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;AAClE,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC1C,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,YAAY,SAAS,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAClE;AACA;AACA,EAAE,WAAW,SAAS,GAAG;AACzB,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE;AACtD,MAAM,aAAa,EAAE,KAAK;AAC1B,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,KAAK,EAAE;AACvB,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG;AACtC,MAAM,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;AACnC,MAAM,KAAK,CAAC,IAAI,CAAC,eAAe,GAAG,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;AAClF,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAClC,KAAK;AACL,SAAS,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC9B,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC/B,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,eAAe,SAAS,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACrE;AACA,EAAE,aAAa,CAAC,KAAK,EAAE;AACvB,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG;AAC5D,MAAM,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC;AACnE,KAAK;AACL,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,YAAY,SAAS,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAClE,EAAE,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE;AAC9B,IAAI,KAAK,EAAE,KAAK,YAAY,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG;AAC7D,MAAM,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;AACrF,KAAK;AACL,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AACnB;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACvB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,WAAW,SAAS,GAAG;AACzB,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE;AACtD,MAAM,WAAW,EAAE,IAAI;AACvB,MAAM,YAAY,EAAE,IAAI;AACxB,MAAM,eAAe,EAAE,KAAK;AAC5B,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE;AAC7B,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AACvF,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,eAAe,CAAC,IAAI,EAAE;AACxB,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;AAChC,IAAI,MAAM,OAAO,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAChD,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,OAAO,CAAC;AACnE,IAAI,KAAK,EAAE,IAAI,YAAY,KAAK,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7D,IAAI,MAAM,MAAM,GAAG,IAAI,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;AAC9E,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE;AACtC,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;AACjD,IAAI,OAAO,IAAI,CAAC,YAAY,GAAG,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,OAAO,CAAC;AAChE,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE;AACnC,IAAI,KAAK,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,QAAQ,GAAG,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;AAC1F,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACxD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;AACrG,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE;AAClC,IAAI,MAAM,MAAM,GAAG,EAAE,CAAC;AACtB,IAAI,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG;AAClD,MAAM,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACpD,MAAM,KAAK,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AACrC,KAAK;AACL,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE;AACvC,IAAI,KAAK,CAAC,KAAK,GAAG,OAAO,KAAK,CAAC;AAC/B,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;AACnB,IAAI,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,WAAW,YAAY,KAAK,IAAI,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;AACrH,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,GAAG,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACzE,IAAI,MAAM,MAAM,GAAG,IAAI,IAAI,GAAG;AAC9B,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,sBAAsB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACzE,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AAC7D,KAAK;AACL,IAAI,OAAO,GAAG,CAAC;AACf,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,IAAI,EAAE;AAClB,IAAI,KAAK,IAAI,CAAC,MAAM,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC;AACzC,SAAS,KAAK,IAAI,CAAC,MAAM,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,KAAK,CAAC;AACpD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;AACjB,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACtC,GAAG;AACH;;;;;;;;;;;AC5Re,MAAM,eAAe,SAAS,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;AACxE;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,QAAQ,GAAG;AACxB,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;AACjD,GAAG;AACH;AACA;AACA;AACA,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,OAAO;AACX,MAAM,GAAG,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC7F,MAAM,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAChD,QAAQ,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ;AAClF,QAAQ,eAAe,EAAE,CAAC,8CAA8C,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzF,OAAO,CAAC;AACR,MAAM,aAAa,EAAE,IAAI,oBAAoB,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACrE,MAAM,KAAK,EAAE,IAAI,oBAAoB,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC7D,MAAM,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACjD,QAAQ,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,GAAG,SAAS,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,aAAa;AACvG,OAAO,CAAC;AACR,MAAM,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,8BAA8B,CAAC,CAAC;AAC7G,MAAM,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;AAClD,QAAQ,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,6BAA6B;AACvF,OAAO,CAAC;AACR,MAAM,gBAAgB,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAC5D,QAAQ,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,KAAK,EAAE,mCAAmC;AACzG,OAAO,CAAC;AACR,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE;AACxB,IAAI,KAAK,CAAC,MAAM,GAAG,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACjD,IAAI,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACxD;AACA,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACzF,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG;AACH;;AC3CA;AACA;AACA;AACA,MAAM,gBAAgB,SAAS,KAAK,CAAC;AACrC,EAAE,WAAW,CAAC,GAAG,IAAI,EAAE;AACvB,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;AACnB,IAAI,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;AACnC,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,WAAW,SAAS,eAAe,CAAC;AACzD,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,EAAE;AAClD,IAAI,KAAK,MAAM,YAAY,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACzD,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE;AACxC,MAAM,KAAK,EAAE,EAAE;AACf,MAAM,QAAQ,EAAE,KAAK;AACrB,MAAM,UAAU,EAAE,KAAK;AACvB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,OAAO,EAAE;AACvB,IAAI,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAC/B,IAAI,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;AAC9B,GAAG;AACH;AACA,EAAE,OAAO,KAAK,GAAG,gBAAgB,CAAC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,QAAQ,GAAG;AACxB,IAAI,OAAO;AACX,MAAM,KAAK,EAAE,GAAG;AAChB,MAAM,IAAI,EAAE,uBAAuB;AACnC,MAAM,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC;AACzD,MAAM,IAAI,EAAE,EAAE;AACd,MAAM,UAAU,EAAE,KAAK;AACvB,MAAM,cAAc,EAAE,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AAClE,MAAM,IAAI,EAAE;AACZ,QAAQ,MAAM,EAAE,iBAAiB;AACjC,QAAQ,IAAI,EAAE,eAAe;AAC7B,OAAO;AACP,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,EAAE,GAAG;AACX,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC;AACpB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,IAAI,GAAG;AACb,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACtD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,IAAI,GAAG;AACb,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AAC9B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,KAAK,GAAG;AACd,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC;AACpC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,MAAM,GAAG;AACf,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;AACxD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,cAAc,GAAG;AACvB,IAAI,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;AACpD,IAAI,OAAO,CAAC,aAAa,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,gBAAgB;AAC7D,UAAU,IAAI,CAAC,gBAAgB,KAAK,SAAS,IAAI,aAAa,CAAC;AAC/D,UAAU,IAAI,CAAC,gBAAgB,KAAK,WAAW,IAAI,CAAC,aAAa,CAAC,CAAC;AACnE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,GAAG;AAChB,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC/D,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC5D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,CAAC,KAAK,EAAE;AAC5B,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,oBAAoB,CAAC,KAAK,EAAE;AAC9B,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC7F,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;AAChD,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC;AACtB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;AAClD,IAAI,OAAO,EAAE,CAAC;AACd,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE;AAClC,IAAI,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC7E,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,MAAM,CAAC,OAAO,EAAE;AACxB,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AACxD,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,YAAY,CAAC,OAAO,EAAE;AACxB,IAAI,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AAChC,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,gBAAgB,CAAC,IAAI,EAAE;AAChC,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,UAAU,GAAG;AACf,IAAI,MAAM,QAAQ,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;AAC7C,IAAI,KAAK,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AAC7C,SAAS,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AACzC,IAAI,OAAO,QAAQ,CAAC;AACpB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,CAAC,KAAK,EAAE,GAAG;AAC1B;AACA;;AC7TA;AACA;AACA;AACe,MAAM,eAAe,SAAS,iBAAiB,CAAC;AAC/D;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,QAAQ,EAAE,2DAA2D;AAC3E,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE;AACtD,MAAM,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM;AACrC,KAAK,CAAC,CAAC;AACP,GAAG;AACH;;ACnBA;AACA;AACA;AACe,MAAM,aAAa,SAAS,eAAe,CAAC;AAC3D;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,QAAQ,EAAE,yDAAyD;AACzE,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAC/D,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrC;AACA;AACA,IAAI,IAAI,UAAU,GAAG,KAAK,KAAK,KAAK,CAAC;AACrC,IAAI,KAAK,CAAC,KAAK,GAAG;AAClB,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AAC/C,MAAM,KAAK,SAAS,KAAK,KAAK,GAAG,UAAU,GAAG,IAAI,CAAC;AACnD,KAAK;AACL;AACA,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE;AACtD,MAAM,iBAAiB,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe;AACpF,MAAM,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM;AACrC,MAAM,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW;AAC5C,MAAM,IAAI,EAAE;AACZ,QAAQ,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;AACnD,QAAQ,UAAU;AAClB,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,IAAI,EAAE;AAC1B,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,EAAE,gBAAgB,CAAC,QAAQ,EAAE,KAAK,IAAI;AACrF,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;AAC7E,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;AAC7E,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC/B,KAAK,CAAC,CAAC;AACP,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,gBAAgB,CAAC,OAAO,EAAE,YAAY;AAClF,MAAM,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC1F,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAChE,KAAK,CAAC,CAAC;AACP,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC7B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,GAAG;AACtB,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO;AAC1D,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,CAAC;AAC5E,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE;AACjC,IAAI,IAAI,KAAK,CAAC;AACd,IAAI,KAAK,QAAQ,CAAC,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;AACzC,SAAS,KAAK,QAAQ,CAAC,UAAU,GAAG,KAAK,GAAG,KAAK,CAAC;AAClD,SAAS,KAAK,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAClF;AACA,IAAI,KAAK,KAAK,KAAK,SAAS,GAAG,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC;AAClG;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACnE,IAAI,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,GAAG,SAAS,GAAG,OAAO,CAAC;AAC3D,IAAI,MAAM,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,0BAA0B,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnG,GAAG;AACH;AACA;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;AAC9C,EAAE,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC;AACzB,EAAE,KAAK,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACtD,EAAE,IAAI;AACN,IAAI,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACvC,IAAI,OAAO,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAClE,GAAG,CAAC,MAAM,KAAK,EAAE;AACjB,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACzB,IAAI,OAAO,CAAC,CAAC;AACb,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE;AAChD,EAAE,IAAI,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACnC,EAAE,KAAK,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC5F,OAAO,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChE,EAAE,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,aAAa,CAAC,IAAI,EAAE;AACpC,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAChC,EAAE,IAAI,KAAK,CAAC;AACZ;AACA;AACA,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,YAAY,GAAG;AACnC,IAAI,MAAM,GAAG,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC;AAC1C,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AACxD,IAAI,KAAK,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChC,GAAG;AACH;AACA;AACA,OAAO,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG;AAC/B,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC;AAChC,IAAI,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC;AAC3D,IAAI,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC/B,GAAG;AACH;AACA,EAAE,OAAO,KAAK,IAAI,IAAI,CAAC;AACvB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,WAAW,CAAC,IAAI,EAAE;AAClC,EAAE,OAAO,UAAU,CAAC,kBAAkB,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACrE,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,iBAAiB,CAAC,UAAU,EAAE;AACvC,EAAE,OAAO,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC7C,CAAC;AACD;AACO,MAAM,UAAU,GAAG;AAC1B,EAAE,iBAAiB,EAAE,iBAAiB;AACtC,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,0BAA0B,GAAG;AACnD,EAAE,MAAM,QAAQ,GAAG;AACnB;AACA,IAAI,yDAAyD;AAC7D,IAAI,mDAAmD;AACvD;AACA;AACA,IAAI,uDAAuD;AAC3D,IAAI,0DAA0D;AAC9D,IAAI,yDAAyD;AAC7D,IAAI,0DAA0D;AAC9D,IAAI,yDAAyD;AAC7D;AACA;AACA,IAAI,qDAAqD;AACzD,IAAI,yDAAyD;AAC7D,IAAI,0DAA0D;AAC9D,IAAI,0DAA0D;AAC9D,IAAI,wDAAwD;AAC5D,IAAI,2DAA2D;AAC/D,IAAI,sDAAsD;AAC1D;AACA;AACA,IAAI,yDAAyD;AAC7D;AACA;AACA,IAAI,oEAAoE;AACxE,IAAI,wEAAwE;AAC5E,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;AACnB,EAAE,MAAM,MAAM,IAAI,IAAI,QAAQ,GAAG;AACjC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;AAChD,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AACvE,GAAG;AACH;AACA,EAAE,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE;AACvC,EAAE,KAAK,SAAS,CAAC,MAAM,KAAK,CAAC,GAAG,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;AACpG,EAAE,KAAK,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpF;AACA,EAAE,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;AAC1D,EAAE,KAAK,CAAC,GAAG,GAAG;AACd,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC1C,IAAI,KAAK,OAAO,GAAG,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAChD,GAAG;AACH;AACA,EAAE,OAAO,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACzE,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,yBAAyB,GAAG;AAC5C,EAAE,UAAU,CAAC,cAAc,CAAC;AAC5B,IAAI,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,WAAW;AAC1C,IAAI,mBAAmB,EAAE,WAAW;AACpC,IAAI,mBAAmB,EAAE,WAAW;AACpC,GAAG,CAAC,CAAC;AACL,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,6BAA6B,GAAG,EAAE,CAAC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,WAAW,CAAC,aAAa,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;AAC5E,EAAE,KAAK,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC/B,EAAE,6BAA6B,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAChE,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,sBAAsB,CAAC,MAAM,EAAE;AAC/C,EAAE,MAAM,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,6BAA6B,CAAC,GAAG;AACrF,IAAI,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC9D,IAAI,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC3C,IAAI,KAAK,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjH,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,eAAe,CAAC,GAAG,EAAE,IAAI,EAAE;AACpC,EAAE,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG;AAC9C,IAAI,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC;AAC1B,IAAI,KAAK,IAAI,KAAK,QAAQ,GAAG;AAC7B,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACrC,MAAM,SAAS;AACf,KAAK;AACL;AACA,IAAI,KAAK,IAAI,KAAK,QAAQ,GAAG;AAC7B,MAAM,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK;AAC7B,QAAQ,CAAC,+DAA+D,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,UAAU,CAAC;AAC1G,OAAO,CAAC,CAAC;AACT,MAAM,SAAS;AACf,KAAK;AACL,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG;AACzB,MAAM,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK;AAC7B,QAAQ,iFAAiF;AACzF,OAAO,CAAC,CAAC;AACT,MAAM,SAAS;AACf,KAAK;AACL;AACA,IAAI,MAAM,MAAM,GAAG,IAAI,IAAI,GAAG;AAC9B,MAAM,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS;AAC9B,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1C,KAAK;AACL,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,sBAAsB,CAAC,SAAS,EAAE,UAAU,EAAE;AACpE;AACA;AACA,EAAE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC;AAChD,EAAE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,YAAY,EAAE,CAAC;AACjD,EAAE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK;AACjD,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAC1B,IAAI,OAAO,GAAG,CAAC;AACf,GAAG,EAAE,EAAE,CAAC,CAAC;AACT;AACA;AACA,EAAE,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAC7C;AACA;AACA,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,0BAA0B,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AAClF,EAAE,MAAM,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG;AAC/C,IAAI,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,uBAAuB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAC3E,IAAI,KAAK,QAAQ,CAAC,MAAM,GAAG,MAAM,KAAK,CAAC,uBAAuB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACjF,IAAI,KAAK,QAAQ,CAAC,MAAM,GAAG,MAAM,KAAK,CAAC,uBAAuB,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AACjG,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5E,IAAI,eAAe,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzG,GAAG;AACH;AACA;AACA,EAAE,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AAC5C,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,0BAA0B,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACpF,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,uBAAuB,CAAC,KAAK,EAAE,SAAS,EAAE;AACnD,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC;AACvC,EAAE,MAAM,QAAQ,GAAG,EAAE,CAAC;AACtB,EAAE,MAAM,QAAQ,GAAG,EAAE,CAAC;AACtB,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACpD;AACA,EAAE,MAAM,MAAM,KAAK,IAAI,MAAM,GAAG;AAChC,IAAI,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACzC,IAAI,KAAK,CAAC,MAAM,GAAG;AACnB,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAC;AAC/F,MAAM,SAAS;AACf,KAAK;AACL;AACA;AACA,IAAI,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;AACxC,IAAI,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC;AAC9D,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;AACzD,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;AACvC,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,qBAAqB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7E;AACA;AACA,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAC5B,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC7B,GAAG;AACH,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC9B;;;;;;;;;;;;;;;;AClUA;AACA;AACA;AACA;AACA;AACe,MAAM,oBAAoB,SAAS,WAAW,CAAC;AAC9D;AACA;AACA,EAAE,WAAW,QAAQ,GAAG;AACxB,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE;AACrD,MAAM,KAAK,EAAE,EAAE;AACf,MAAM,IAAI,EAAE,wCAAwC;AACpD,MAAM,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,iCAAiC,CAAC;AAClE,MAAM,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gCAAgC,CAAC;AAChE,MAAM,UAAU,EAAE,IAAI;AACtB,MAAM,cAAc,EAAE,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;AACxC,MAAM,IAAI,EAAE;AACZ,QAAQ,MAAM,EAAE,eAAe;AAC/B,QAAQ,IAAI,EAAE,aAAa;AAC3B,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,MAAM,GAAG;AACf,IAAI,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,MAAM,GAAG;AACf,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;AACpC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,WAAW,GAAG;AACpB,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,CAAC,KAAK,EAAE;AAC5B,IAAI,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;AAC9C,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;AAChD,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AACzC,IAAI,KAAK,CAAC,EAAE,IAAI,UAAU,GAAG,OAAO,IAAI,CAAC,KAAK,CAAC;AAC/C,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;AACnD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,KAAK,EAAE;AACvB,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AAC/E,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE;AACjD,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9B,IAAI,KAAK,CAAC,KAAK,GAAG,OAAO,IAAI,CAAC;AAC9B;AACA,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG,OAAO,WAAW,CAAC;AAC9C,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG,OAAO,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,CAAC;AACxD,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,KAAK,GAAG;AACV,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5G,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,gBAAgB,CAAC,GAAG,EAAE;AACxB,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK;AAC5D,MAAM,OAAO,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;AAC5E,KAAK,EAAE,CAAC,CAAC,CAAC;AACV,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,gBAAgB,CAAC,IAAI,EAAE;AAChC,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC;AACtD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,mBAAmB,CAAC,KAAK,EAAE;AAC7B,IAAI,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC;AAC7D,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACpF,IAAI,KAAK,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;AACpG,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE;AACrB,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AAC9E,IAAI,KAAK,KAAK,KAAK,SAAS,GAAG,OAAO;AACtC,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;AAC5B,MAAM,4BAA4B,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;AAC3G,KAAK,CAAC,CAAC;AACP,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACvC,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE;AACvB,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC5B,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,KAAK,EAAE;AACjB,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC1C,IAAI,KAAK,KAAK,KAAK,SAAS,GAAG,OAAO;AACtC,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;AAC5B,MAAM,4BAA4B,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;AAC3G,KAAK,CAAC,CAAC;AACP,IAAI,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;AAClD,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;AACtD,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG;AACH;;ACtLA;AACA;AACA;AACe,MAAM,eAAe,SAAS,iBAAiB,CAAC;AAC/D;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,OAAO,EAAE,CAAC,OAAO,EAAE,aAAa,EAAE,YAAY,CAAC;AACrD,MAAM,QAAQ,EAAE,CAAC,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;AAClD,MAAM,WAAW,EAAE,OAAO;AAC1B,MAAM,QAAQ,EAAE,2DAA2D;AAC3E,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE;AACtB,IAAI,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC3C,IAAI,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC;AACzH,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,oBAAoB,CAAC,KAAK,EAAE,IAAI,EAAE;AACpC,IAAI,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAC7C,GAAG;AACH;;AC9BA;AACA;AACA;AACe,MAAM,aAAa,SAAS,eAAe,CAAC;AAC3D;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,QAAQ,EAAE,yDAAyD;AACzE,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,UAAU,GAAG;AACrB,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC;AACxD,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC;AACzG,SAAS,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC;AACtC,IAAI,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;AACxD,IAAI,OAAO;AACX,MAAM,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ;AACvD,MAAM,KAAK,EAAE,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK;AAC3F,QAAQ,KAAK,CAAC,IAAI,GAAG,OAAO,GAAG,CAAC;AAChC,QAAQ,IAAI,CAAC,OAAO,GAAG,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAC7D,QAAQ,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvB,QAAQ,OAAO,GAAG,CAAC;AACnB,OAAO,EAAE,EAAE,CAAC;AACZ,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE;AAC5B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;AACtF,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,IAAI,EAAE;AAC1B,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAClC,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACrE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,eAAe,CAAC,KAAK,EAAE;AAC/B,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC;AAClD,IAAI,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;AACtC,IAAI,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7B,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE;AACvC,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK;AACrE,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC,GAAG,CAAC,CAAC;AACpE,MAAM,OAAO,GAAG,CAAC;AACjB,KAAK,EAAE,EAAE,CAAC,CAAC;AACX,IAAI,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;AACrE,GAAG;AACH;;ACzEe,MAAM,sBAAsB,SAAS,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;AAC/E,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,OAAO;AACX,MAAM,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;AACpF,MAAM,WAAW,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,4BAA4B,CAAC,CAAC;AAC7F,MAAM,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAChD,QAAQ,GAAG,EAAE,IAAI,YAAY,CAAC,CAAC,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;AAC5E,QAAQ,GAAG,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;AAC7E,OAAO,EAAE,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;AACtC,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,YAAY,GAAG;AACrB,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC;AACvB,IAAI,KAAK,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;AACjE,IAAI,KAAK,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,yBAAyB,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;AAClF,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG;AAC1C,MAAM,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACjD,MAAM,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACjD,MAAM,KAAK,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpG,WAAW;AACX,QAAQ,IAAI;AACZ,UAAU,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;AACzF,UAAU,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;AACzF,UAAU,OAAO,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAChE,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG;AACtB,OAAO;AACP,KAAK;AACL,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;;ACpCe,MAAM,0BAA0B,SAAS,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;AACnF;AACA,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,OAAO;AACX,MAAM,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE;AACvF,QAAQ,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,gBAAgB;AAC/C,OAAO,CAAC;AACR,MAAM,QAAQ,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;AACrD,QAAQ,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,oCAAoC,EAAE,IAAI,EAAE,wCAAwC;AACnH,OAAO,CAAC;AACR,MAAM,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE;AAC/E,QAAQ,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI;AACrD,OAAO,CAAC;AACR,KAAK,CAAC;AACN,GAAG;AACH;;ACZA;AACA;AACA;AACA;AACe,MAAM,oBAAoB,SAAS,WAAW,CAAC;AAC9D;AACA;AACA,EAAE,WAAW,QAAQ,GAAG;AACxB,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE;AACrD,MAAM,UAAU,EAAE;AAClB,QAAQ,aAAa,EAAE,0BAA0B;AACjD,OAAO;AACP,MAAM,KAAK,EAAE,EAAE;AACf,MAAM,IAAI,EAAE,wCAAwC;AACpD,MAAM,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,iCAAiC,CAAC;AAClE,MAAM,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gCAAgC,CAAC;AAChE,MAAM,IAAI,EAAE;AACZ,QAAQ,MAAM,EAAE,eAAe;AAC/B,QAAQ,IAAI,EAAE,aAAa;AAC3B,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;AACnH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,CAAC,KAAK,EAAE;AAC5B,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9C,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,eAAe,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;AAClD;AACA,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,UAAU,GAAG;AAC3C,MAAM,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;AACvG,KAAK;AACL;AACA;AACA,SAAS;AACT,MAAM,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI;AACrD,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC9C,QAAQ,OAAO,IAAI,EAAE,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC;AAC3E,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAClB,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,KAAK,EAAE;AACrB,IAAI,OAAO,aAAa,CAAC;AACzB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE,EAAE;AAC5C,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;AACrB,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC;AACvB,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,YAAY,IAAI,EAAE,CAAC;AACtE,IAAI,MAAM,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG;AAC3D,MAAM,KAAK,CAAC,QAAQ,GAAG,SAAS;AAChC;AACA,MAAM,IAAI,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;AACxC,MAAM,KAAK,CAAC,QAAQ,GAAG;AACvB,QAAQ,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC5C,QAAQ,KAAK,CAAC,MAAM,GAAG,SAAS;AAChC,QAAQ,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC;AAChC,UAAU,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE;AACvC,UAAU,sBAAsB,EAAE,IAAI;AACtC,UAAU,+BAA+B,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;AACvE,SAAS,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;AACtC,OAAO;AACP,MAAM,KAAK,QAAQ,CAAC,IAAI,KAAK,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;AACzF;AACA,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC3B,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AACnC,KAAK;AACL,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACrC,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;AAC5D,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE;AACvB,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC;AACvB,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG;AACrC,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/C,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;AACpD,KAAK;AACL,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;AAC5D,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,KAAK,EAAE;AACjB,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;AACrB,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC5C,IAAI,MAAM,MAAM,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG;AACpF,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC5C,MAAM,KAAK,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC9C,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAClC,KAAK;AACL,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AAC1E,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;AACrB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;AAC9C,IAAI,KAAK,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,IAAI,CAAC;AACnE,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACvE,IAAI,KAAK,MAAM,GAAG,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,yCAAyC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACvG,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG;AACH;;ACxJA;AACA;AACA;AACe,MAAM,gBAAgB,SAAS,iBAAiB,CAAC;AAChE;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,OAAO,EAAE,CAAC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,CAAC;AACpE,MAAM,QAAQ,EAAE,CAAC,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;AAClD,MAAM,WAAW,EAAE,MAAM;AACzB,MAAM,QAAQ,EAAE,4DAA4D;AAC5E,MAAM,KAAK,EAAE,GAAG;AAChB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE;AACtB,IAAI,MAAM,OAAO,GAAG;AACpB,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;AAC/B,MAAM,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,KAAK,OAAO;AACtE,MAAM,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK;AACjF,QAAQ,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AACrE,QAAQ,OAAO,GAAG,CAAC;AACnB,OAAO,EAAE,EAAE,CAAC;AACZ,KAAK,CAAC;AACN,IAAI,KAAK,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,KAAK,MAAM,GAAG;AAC1D,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACtG,MAAM,OAAO,CAAC,eAAe,GAAG;AAChC,QAAQ,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC;AAC9D,QAAQ,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,YAAY;AAC9C,QAAQ,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,0BAA0B,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;AACnG,QAAQ,cAAc,EAAE,YAAY,EAAE,QAAQ;AAC9C,OAAO,CAAC;AACR,KAAK;AACL,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,0BAA0B,CAAC,aAAa,EAAE;AAClD,IAAI,KAAK,aAAa,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAChH;AACA;AACA,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;AACpB,IAAI,MAAM,MAAM,IAAI,KAAK,aAAa,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,IAAI;AACtF,MAAM,KAAK,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,EAAE;AACpE,QAAQ,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC,WAAW,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK;AAC7F,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,KAAK;AACL,IAAI,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC;AAC9B;AACA,IAAI,OAAO,aAAa,CAAC;AACzB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,oBAAoB,CAAC,KAAK,EAAE,IAAI,EAAE;AACpC,IAAI,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAC7C,GAAG;AACH;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,WAAW,CAAC;AACjC,EAAE,WAAW,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC,IAAI,EAAE;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;AACrD;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC;AAC9C;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAAC;AAC9C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,YAAY,CAAC,KAAK,EAAE;AAC7B,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACvC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,IAAI,GAAG;AACb,IAAI,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;AAC5E,IAAI,OAAO,WAAW,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAChE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,IAAI,GAAG;AACb,IAAI,KAAK,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,MAAM,IAAI,CAAC,UAAU,KAAK,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC;AAC/E,IAAI,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,MAAM,IAAI,OAAO,GAAG,MAAM,CAAC;AACpE,IAAI,KAAK,IAAI,CAAC,UAAU,KAAK,GAAG,GAAG;AACnC,MAAM,OAAO,CAAC,EAAE,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AAChE,KAAK,MAAM;AACX,MAAM,OAAO,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/D,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,IAAI,GAAG;AACb,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,qBAAqB,CAAC,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1G,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,cAAc,GAAG;AACvB,IAAI,OAAO,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;AAChE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC;AACrB,GAAG;AACH;;ACjGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,OAAO,CAAC;AAC9B,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK;AAC1B,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,WAAW;AAC7D,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc;AAC9C,EAAE,WAAW,EAAE,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa;AACnE,EAAE,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM;AACpD,CAAC,CAAC,EAAE,EAAE;AACN;AACA;AACA,EAAE,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrD,EAAE,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC;AAC3E,IAAI,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK;AAC/C,GAAG,CAAC,CAAC;AACL,EAAE,MAAM,eAAe,GAAG,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAC5E,EAAE,KAAK,cAAc,IAAI,CAAC,IAAI,GAAG;AACjC,IAAI,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC;AACtB,IAAI,KAAK,mBAAmB,IAAI,IAAI,GAAG,IAAI,CAAC,iBAAiB,GAAG,oBAAoB,CAAC;AACrF,GAAG;AACH;AACA;AACA,EAAE,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE;AACtD,IAAI,MAAM,EAAE,MAAM,IAAI,KAAK;AAC3B,IAAI,aAAa;AACjB,IAAI,eAAe;AACnB,IAAI,QAAQ;AACZ,IAAI,QAAQ;AACZ,IAAI,MAAM;AACV,IAAI,WAAW;AACf,IAAI,aAAa;AACjB,IAAI,aAAa;AACjB,IAAI,cAAc;AAClB,GAAG,CAAC,CAAC;AACL;AACA;AACA,EAAE,KAAK,CAAC,IAAI,GAAG;AACf,IAAI,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC;AAClD,MAAM,KAAK;AACX,MAAM,cAAc;AACpB,MAAM,eAAe;AACrB,MAAM,aAAa,EAAE,aAAa;AAClC,MAAM,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,IAAI,IAAI,EAAE,cAAc;AACjE,MAAM,QAAQ;AACd,KAAK,EAAE,aAAa,CAAC,CAAC;AACtB,IAAI,KAAK,UAAU,KAAK,IAAI,GAAG,OAAO,IAAI,CAAC;AAC3C,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,eAAe,CAAC;AACnD;AACA;AACA,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACrC;AACA;AACA,EAAE,KAAK,IAAI,IAAI,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AAC/D,EAAE,OAAO,IAAI,CAAC;AACd,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,UAAU,CAAC;AACjC,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK;AAC1B,EAAE,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,iBAAiB,EAAE,kBAAkB;AACrE,EAAE,eAAe,EAAE,gBAAgB,EAAE,mBAAmB;AACxD,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa;AAC7C,EAAE,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM;AACpD,CAAC,CAAC,EAAE,EAAE;AACN;AACA;AACA,EAAE,MAAM,eAAe,GAAG,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAC5E;AACA;AACA,EAAE,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpC,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,sBAAsB,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;AACpF,EAAE,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE;AACzD,IAAI,MAAM,EAAE,MAAM,IAAI,KAAK;AAC3B,IAAI,QAAQ;AACZ,IAAI,QAAQ,EAAE,IAAI,GAAG,UAAU,GAAG,KAAK;AACvC,IAAI,iBAAiB;AACrB,IAAI,kBAAkB;AACtB,IAAI,mBAAmB;AACvB,IAAI,eAAe,EAAE,eAAe,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,yBAAyB,CAAC;AAC7F,IAAI,gBAAgB,EAAE,gBAAgB,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,uBAAuB,CAAC;AAC7F,GAAG,CAAC,CAAC;AACL;AACA;AACA,EAAE,KAAK,CAAC,IAAI,GAAG;AACf,IAAI,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC;AAClD,MAAM,KAAK;AACX,MAAM,eAAe,EAAE,eAAe;AACtC,MAAM,eAAe,EAAE,UAAU;AACjC,MAAM,QAAQ;AACd,MAAM,aAAa;AACnB,KAAK,EAAE,aAAa,CAAC,CAAC;AACtB,IAAI,KAAK,UAAU,KAAK,IAAI,GAAG,OAAO,IAAI,CAAC;AAC3C,GAAG;AACH;AACA;AACA,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACrC;AACA;AACA,EAAE,KAAK,IAAI,IAAI,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AAC/D,EAAE,OAAO,IAAI,CAAC;AACd,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,sBAAsB,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,EAAE,EAAE;AACzE,EAAE,MAAM,IAAI,GAAG,WAAW,KAAK,KAAK,KAAK,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5G,EAAE,KAAK,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAC;AACvC,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AAC9C;;AC9MA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,eAAe,SAAS,MAAM,CAAC;AACpD,EAAE,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE;AAChD,IAAI,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC/B;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACvB;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACvB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,QAAQ,EAAE,6CAA6C;AAC7D,MAAM,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;AAClC,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;AACjC;AACA;AACA,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,IAAI,KAAK;AAC7D,MAAM,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG;AACnC,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AAC3D,QAAQ,MAAM,KAAK,GAAG,OAAO,IAAI,IAAI,CAAC;AACtC,QAAQ,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;AAC7E,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,SAAS,GAAG,SAAS,CAAC;AACpE,OAAO;AACP,MAAM,OAAO,EAAE,CAAC;AAChB,KAAK,EAAE,EAAE,CAAC,CAAC;AACX,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC;AACvD,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;AACpC;AACA;AACA,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AAC9D,IAAI,IAAI,CAAC,YAAY,GAAG,OAAO,KAAK,MAAM,CAAC;AAC3C,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACxB,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,IAAI,EAAE;AAC1B,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAClC,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACpC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,aAAa,CAAC,KAAK,EAAE;AAC7B,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,GAAG,GAAG,KAAK,CAAC,aAAa,CAAC;AACpC,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACpC,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7C,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;AAClB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,eAAe,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;AAC7C,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AAC5C,MAAM,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE;AAClC,QAAQ,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AACxE,QAAQ,OAAO,EAAE;AACjB,UAAU,IAAI,EAAE;AAChB,YAAY,IAAI,EAAE,4BAA4B;AAC9C,YAAY,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;AACnD,YAAY,QAAQ,EAAE,IAAI,IAAI;AAC9B,cAAc,IAAI,MAAM,GAAG,KAAK,CAAC;AACjC,cAAc,KAAK,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,MAAM,GAAG;AAC1E,gBAAgB,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AACtE,eAAe;AACf,cAAc,OAAO,CAAC,MAAM,CAAC,CAAC;AAC9B,aAAa;AACb,WAAW;AACX,UAAU,MAAM,EAAE;AAClB,YAAY,IAAI,EAAE,8BAA8B;AAChD,YAAY,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC/C,YAAY,QAAQ,EAAE,MAAM;AAC5B,WAAW;AACX,SAAS;AACT,QAAQ,KAAK,EAAE,MAAM;AACrB,OAAO,CAAC,CAAC;AACT,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACvB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,cAAc,SAAS,MAAM,CAAC;AACnD,EAAE,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE;AAChD,IAAI,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC/B,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACvB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,QAAQ,EAAE,4CAA4C;AAC5D,MAAM,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;AAClC,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;AACjC,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AAC9D,IAAI,IAAI,CAAC,YAAY,GAAG,OAAO,KAAK,QAAQ,CAAC;AAC7C,IAAI,IAAI,CAAC,MAAM,GAAG,OAAO,KAAK,QAAQ,CAAC;AACvC,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,cAAc,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;AAC9C,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AAC5C,MAAM,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE;AAClC,QAAQ,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AACvE,QAAQ,OAAO,EAAE;AACjB,UAAU,IAAI,EAAE;AAChB,YAAY,IAAI,EAAE,4BAA4B;AAC9C,YAAY,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;AACnD,YAAY,QAAQ,EAAE,IAAI,IAAI;AAC9B,cAAc,IAAI,MAAM,GAAG,IAAI,CAAC;AAChC,cAAc,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,QAAQ,EAAE;AAC1E,gBAAgB,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AACtE,eAAe;AACf,cAAc,OAAO,CAAC,MAAM,CAAC,CAAC;AAC9B,aAAa;AACb,WAAW;AACX,UAAU,MAAM,EAAE;AAClB,YAAY,IAAI,EAAE,8BAA8B;AAChD,YAAY,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC/C,YAAY,QAAQ,EAAE,MAAM;AAC5B,WAAW;AACX,SAAS;AACT,QAAQ,OAAO,EAAE,MAAM;AACvB,QAAQ,KAAK,EAAE,MAAM;AACrB,OAAO,CAAC,CAAC;AACT,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACvB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;;ACvEA;AACA;AACA;AACA;AACA;AACA,MAAM,cAAc,GAAG,EAAE,CAAC;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,YAAY,CAAC,KAAK,EAAE;AACpC,EAAE,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACjD,EAAE,KAAK,WAAW,CAAC,YAAY,GAAG,OAAO,WAAW,CAAC,YAAY,CAAC;AAClE,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAC3B,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,UAAU,CAAC,KAAK,EAAE;AAClC,EAAE,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACjD,EAAE,OAAO,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC;AACtD,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,GAAG,EAAE,EAAE;AACvD,EAAE,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACjD,EAAE,KAAK,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;AAC5E;AACA,EAAE,IAAI,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK;AAC7E,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;AAClD,IAAI,OAAO,GAAG,CAAC;AACf,GAAG,EAAE,EAAE,CAAC,CAAC;AACT;AACA,EAAE,KAAK,WAAW,CAAC,QAAQ,GAAG;AAC9B,IAAI,MAAM,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG;AACrF,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AACjD,MAAM,KAAK,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,SAAS;AACtD,MAAM,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK;AAC1F,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;AACtD,QAAQ,OAAO,GAAG,CAAC;AACnB,OAAO,EAAE,EAAE,CAAC,CAAC;AACb,KAAK;AACL,GAAG;AACH;AACA,EAAE,KAAK,WAAW,CAAC,QAAQ,GAAG;AAC9B,IAAI,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AAC7D,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACzD;AACA;AACA,IAAI,MAAM,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK;AAC9D,MAAM,KAAK,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACrE,MAAM,OAAO,GAAG,CAAC;AACjB,KAAK,EAAE,EAAE,CAAC,CAAC;AACX;AACA;AACA,IAAI,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK;AACrF,MAAM,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,EAAE,CAAC,CAAC;AAC1C,MAAM,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC1B,KAAK,CAAC,CAAC,CAAC;AACR;AACA;AACA,IAAI,MAAM,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,SAAS,GAAG;AAC5C,MAAM,KAAK,CAAC,KAAK,GAAG,SAAS;AAC7B;AACA;AACA,MAAM,IAAI,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC3D,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AAC1C;AACA,MAAM,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;AACnE;AACA;AACA,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAC3C;AACA;AACA,WAAW;AACX,QAAQ,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC;AACnC,QAAQ,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACzC,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA,EAAE,KAAK,WAAW,CAAC,cAAc,GAAG,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACxF;AACA;AACA,EAAE,MAAM,MAAM,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG;AAChD,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,GAAG,SAAS;AACvC,IAAI,QAAQ,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAClF,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC;AACd,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,WAAW,CAAC,UAAU,EAAE,EAAE,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;AAChF,EAAE,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC;AAC5C,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACtD,EAAE,KAAK,KAAK,IAAI,UAAU,GAAG,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;AAC7D,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC;AAC7B;AACA,EAAE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC1C;AACA;AACA,EAAE,KAAK,QAAQ,IAAI,CAAC,SAAS,GAAG,OAAO,UAAU,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;AACnE;AACA,EAAE,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;AACrC,EAAE,MAAM,OAAO,GAAG,KAAK,YAAY,OAAO,CAAC;AAC3C;AACA;AACA,EAAE,KAAK,SAAS,GAAG;AACnB,IAAI,MAAM,KAAK,GAAG,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC5C,IAAI,OAAO,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC;AAClD,GAAG;AACH;AACA;AACA,EAAE,KAAK,OAAO,GAAG,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACnE,OAAO,KAAK,KAAK,GAAG,OAAO,KAAK,CAAC,EAAE,CAAC,CAAC;AACrC,EAAE,KAAK,CAAC,UAAU,GAAG,OAAO;AAC5B;AACA;AACA,EAAE,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI;AACpF,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK;AAC/C,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAC7B,MAAM,OAAO,GAAG,CAAC;AACjB,KAAK,EAAE,EAAE,CAAC,CAAC;AACX,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AACjC,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC,CAAC;AACrB,GAAG,CAAC,CAAC;AACL,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;AACjC,EAAE,OAAO,OAAO,CAAC;AACjB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,gBAAgB,GAAG;AACnC,EAAE,MAAM,MAAM,GAAG,EAAE,CAAC;AACpB,EAAE,MAAM,MAAM,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG;AAClE,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,GAAG,SAAS;AAC1C,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC1D,GAAG;AACH,EAAE,OAAO,MAAM,CAAC;AAChB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE;AACzC,EAAE,IAAI,OAAO,CAAC;AACd,EAAE,KAAK,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG,OAAO,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;AAC1D,OAAO,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;AACpC;AACA,EAAE,MAAM,UAAU,GAAG,EAAE,KAAK,KAAK,SAAS,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;AAC5G,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;AACrC,EAAE,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACjD,EAAE,KAAK,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG;AAChC,IAAI,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5C,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,GAAG,OAAO,QAAQ,CAAC;AACjD,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;AACrE,GAAG;AACH;AACA,EAAE,MAAM,MAAM,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,IAAI,EAAE,CAAC,GAAG;AACzE,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,GAAG,OAAO,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC;AACpF,GAAG;AACH;AACA,EAAE,MAAM,MAAM,MAAM,IAAI,WAAW,CAAC,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG;AAC1D,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,SAAS;AACjD,IAAI,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9E,IAAI,KAAK,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAC;AACnC,SAAS,MAAM;AACf,GAAG;AACH;AACA,EAAE,OAAO,GAAG,CAAC;AACb,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE;AAC3C;AACA,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG;AACtB,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,4BAA4B,EAAE;AAC1D,MAAM,KAAK,EAAE,MAAM,CAAC,KAAK;AACzB,MAAM,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE;AACzD,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA,EAAE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;AAC/D,EAAE,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;AACrF,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,6BAA6B,EAAE;AACzD,IAAI,KAAK,EAAE,MAAM,CAAC,KAAK;AACvB,IAAI,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC;AACvC,GAAG,CAAC,CAAC;AACL;;;;;;;;;;;;;;ACvPA;AACA;AACA;AACe,MAAM,OAAO,SAAS,KAAK,CAAC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,CAAC;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,OAAO,GAAG;AAChB,IAAI,KAAK,IAAI,CAAC,QAAQ,KAAK,SAAS,GAAG,OAAO,IAAI,CAAC,QAAQ,CAAC;AAC5D,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AAC/E,IAAI,OAAO,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK;AACjG,MAAM,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC;AAChC,MAAM,OAAO,GAAG,CAAC;AACjB,KAAK,EAAE,EAAE,CAAC,CAAC;AACX,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,aAAa,GAAG;AACtB,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC,IAAI,KAAK,CAAC;AAC3D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,KAAK,GAAG;AACd,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,aAAa,IAAI,IAAI,CAAC;AAC3D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,MAAM,GAAG;AACf,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,cAAc,IAAI,IAAI,CAAC;AAC5D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE;AACxC,IAAI,MAAM,GAAG,KAAK,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACtD,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,OAAO,MAAM,CAAC;AACrF,IAAI,MAAM,IAAI,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5D,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACnD,IAAI,KAAK,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,GAAG;AACpC,MAAM,KAAK,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC;AAC9C,MAAM,KAAK,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC;AACzF,WAAW,KAAK,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,cAAc,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;AACxF,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC;AACzD,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,SAAS,GAAG;AACrC,QAAQ,KAAK,OAAO,SAAS,CAAC,KAAK,KAAK,QAAQ,GAAG,SAAS,CAAC,KAAK,GAAG,EAAE,CAAC;AACxE,QAAQ,SAAS,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAClD,OAAO;AACP,KAAK;AACL,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,WAAW,GAAG;AAChB;AACA,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO;AACjE,IAAI,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;AAC9B,IAAI,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;AACnC,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;AACxB,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;AAC9D,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,eAAe,GAAG;AACpB;AACA;AACA,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG;AACjC,MAAM,OAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;AAC5C,KAAK;AACL;AACA,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;AAClC;AACA;AACA,IAAI,SAAS,IAAI,CAAC,IAAI;AACtB,MAAM,KAAK,WAAW;AACtB,QAAQ,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAC5C,MAAM,KAAK,KAAK;AAChB,QAAQ,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;AACtC,MAAM,KAAK,SAAS;AACpB,QAAQ,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC1C,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,kBAAkB,GAAG;AACvB,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC/B;AACA;AACA,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,oBAAoB,EAAE,CAAC,CAAC;AACxD,IAAI,OAAO,KAAK,CAAC,kBAAkB,EAAE,CAAC;AACtC,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,kBAAkB,GAAG;AACvB;AACA;AACA,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG;AACjC,MAAM,OAAO,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;AAC/C,KAAK;AACL;AACA,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;AACzC,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACrB;AACA;AACA,IAAI,IAAI,aAAa,GAAG,IAAI,CAAC;AAC7B,IAAI,IAAI,cAAc,GAAG,IAAI,CAAC;AAC9B,IAAI,KAAK,IAAI,CAAC,aAAa,GAAG;AAC9B,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;AACtD,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;AAC7D,MAAM,KAAK,QAAQ,GAAG;AACtB,QAAQ,KAAK,gBAAgB,CAAC,UAAU,GAAG,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;AACrF,QAAQ,KAAK,gBAAgB,CAAC,WAAW,GAAG,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;AACpF,OAAO;AACP,KAAK;AACL;AACA;AACA,IAAI,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,IAAI,EAAE,CAAC;AAC/D,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACxC,IAAI,MAAM,UAAU,GAAG,aAAa,CAAC,aAAa,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AACrE,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;AAC/E,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;AAC7E,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;AAC5D,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC9B,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC/B,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AACrC,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAClD,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAChC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,KAAK,EAAE;AACrB,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC;AACrD,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AACtD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,CAAC,EAAE,EAAE;AACf,IAAI,KAAK,EAAE,GAAG,GAAG,GAAG,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;AAClD,IAAI,OAAO,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AAC1C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,EAAE,aAAa,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;AAC1C,IAAI,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;AAC1C,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG,OAAO,IAAI,CAAC;AAC7C,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAChE,IAAI,KAAK,aAAa,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACpD,IAAI,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC/D,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,IAAI,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;AAC/F,IAAI,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;AACtB,IAAI,MAAM,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG;AACpE,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;AACjD,MAAM,KAAK,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;AAClF,KAAK;AACL,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,sBAAsB,GAAG;AAC3B,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;AACzC,IAAI,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC;AAClB,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC;AACxC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,mBAAmB,GAAG;AACxB,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,GAAG,CAAC,KAAK;AAC1F,MAAM,KAAK,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC;AAC1C,MAAM,KAAK,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;AACpF,MAAM,OAAO,KAAK,CAAC;AACnB,KAAK,EAAE,EAAE,CAAC,CAAC;AACX,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,qBAAqB,GAAG;AAC1B,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;AAClC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC;AAClC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC;AAChD;AACA,IAAI,MAAM,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG;AACrC;AACA,MAAM,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG;AACnC,QAAQ,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC9D,QAAQ,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,WAAW,CAAC;AACjD,QAAQ,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,IAAI,WAAW,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5F,OAAO;AACP;AACA;AACA,WAAW,KAAK,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,GAAG;AAClF,QAAQ,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,CAAC;AACrD,OAAO;AACP,KAAK;AACL;AACA;AACA,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,GAAG,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACtF;AACA;AACA,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;AACtC,IAAI,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;AAC9D,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACvE,IAAI,MAAM,QAAQ,GAAG,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC;AACpC,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,IAAI,GAAG,GAAG,QAAQ,CAAC,CAAC;AAChE,IAAI,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AACvC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,GAAG;AACpB,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;AACtC;AACA;AACA,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI;AACrE,MAAM,OAAO,CAAC,CAAC,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC;AAC1E,KAAK,CAAC,CAAC,MAAM,CAAC;AACd;AACA;AACA,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC;AAClC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACrD;AACA;AACA,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,GAAG,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5E;AACA;AACA,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG;AACpG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACvD,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,mBAAmB,GAAG;AACxB,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC;AACpC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE;AACzE,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;AACzC,IAAI,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;AAC7E,IAAI,MAAM,SAAS,GAAG,aAAa,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACnE,IAAI,MAAM,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG;AACrE,MAAM,KAAK,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;AAClD,MAAM,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AACjD;AACA,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;AACjD,MAAM,GAAG,CAAC,SAAS,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,KAAK,CAAC,eAAe,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AACrH,MAAM,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AACvE,MAAM,GAAG,CAAC,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC;AAC/C;AACA,MAAM,GAAG,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;AAClF,MAAM,MAAM,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AACzE,MAAM,GAAG,CAAC,UAAU,GAAG,aAAa,GAAG,UAAU,CAAC;AAClD;AACA,MAAM,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC;AACzC,MAAM,KAAK,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC/E,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,GAAG,OAAO,CAAC;AACnE;AACA;AACA,MAAM,KAAK,aAAa,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AACnG,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE;AACvE,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,SAAS,GAAG,OAAO;AAC1C,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;AACzC;AACA;AACA,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC;AAC9C,IAAI,MAAM,UAAU,GAAG,aAAa,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACrE,IAAI,MAAM,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG;AAClE,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACzD,MAAM,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AACrE,MAAM,IAAI,SAAS,GAAG,IAAI,CAAC;AAC3B;AACA;AACA,MAAM,KAAK,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG;AACzE,QAAQ,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC;AACxB,QAAQ,SAAS,GAAG,KAAK,CAAC;AAC1B,OAAO;AACP;AACA;AACA,WAAW,KAAK,KAAK,CAAC,eAAe,KAAK,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG;AAC7D,QAAQ,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC;AACxB,OAAO;AACP;AACA;AACA,MAAM,KAAK,cAAc,GAAG;AAC5B,QAAQ,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;AAClE,OAAO;AACP;AACA;AACA,MAAM,MAAM,aAAa,GAAG,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AAC9E,MAAM,GAAG,CAAC,KAAK,GAAG,SAAS,GAAG,UAAU,GAAG,aAAa,GAAG,UAAU,CAAC;AACtE,MAAM,GAAG,CAAC,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;AAClC,MAAM,GAAG,CAAC,IAAI,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACpF,MAAM,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC;AACjC,MAAM,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC;AACtC,MAAM,KAAK,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AACxE;AACA;AACA,MAAM,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,KAAK,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/F,MAAM,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AAC1E,MAAM,GAAG,CAAC,OAAO,GAAG,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,GAAG,YAAY,CAAC;AACtF,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE;AACtD,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,SAAS,GAAG,OAAO;AAC1C,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;AACzC,IAAI,MAAM,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG;AAC3D,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1D,MAAM,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACrE,MAAM,IAAI,SAAS,GAAG,IAAI,CAAC;AAC3B;AACA;AACA,MAAM,KAAK,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG;AAC3E,QAAQ,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;AACzB,QAAQ,SAAS,GAAG,KAAK,CAAC;AAC1B,OAAO;AACP;AACA;AACA,WAAW,KAAK,KAAK,CAAC,eAAe,KAAK,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;AAC/E;AACA,MAAM,MAAM,aAAa,GAAG,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AAC9E,MAAM,IAAI,CAAC,KAAK,GAAG,SAAS,GAAG,UAAU,GAAG,aAAa,CAAC;AAC1D,MAAM,IAAI,CAAC,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;AACnC,MAAM,IAAI,CAAC,IAAI,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACtF,MAAM,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;AACzC,MAAM,KAAK,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3E,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,GAAG;AACvB,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;AACzC;AACA;AACA,IAAI,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AACjD,IAAI,KAAK,CAAC,GAAG,GAAG;AAChB,MAAM,EAAE,CAAC,IAAI,GAAG,MAAM,CAAC;AACvB,MAAM,KAAK,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACnE,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC;AAC3C,KAAK;AACL;AACA;AACA,IAAI,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;AACrE,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK;AAC9E,MAAM,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;AACvC,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC;AAC/E,MAAM,KAAK,KAAK,CAAC,IAAI,KAAK,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7D,WAAW,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClC,MAAM,OAAO,GAAG,CAAC;AACjB,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAClC;AACA;AACA,IAAI,SAAS,EAAE,CAAC,IAAI;AACpB;AACA;AACA,MAAM,KAAK,MAAM;AACjB,QAAQ,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AACnC,QAAQ,OAAO;AACf;AACA;AACA,MAAM,KAAK,SAAS;AACpB,QAAQ,EAAE,CAAC,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AAClC,QAAQ,MAAM;AACd;AACA,MAAM;AACN,QAAQ,IAAI,OAAO,GAAG,EAAE,CAAC,IAAI,KAAK,QAAQ,GAAG,EAAE,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;AACtE,QAAQ,KAAK,MAAM,CAAC,MAAM,GAAG;AAC7B,UAAU,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;AAClE,YAAY,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE,SAAS;AACnF,WAAW,CAAC,CAAC;AACb,UAAU,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;AACnD,UAAU,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,KAAK,OAAO,CAAC;AACrD,UAAU,EAAE,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC;AACjD,UAAU,EAAE,CAAC,GAAG,GAAG,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;AAC1G,UAAU,EAAE,CAAC,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACvC,SAAS;AACT,aAAa,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAC1D;AACA,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;AACnE,QAAQ,QAAQ,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;AACpC,QAAQ,IAAI;AACZ,UAAU,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACtE,UAAU,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC5C,SAAS,CAAC,MAAM,GAAG,EAAE;AACrB,UAAU,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;AACzC,YAAY,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO;AAC/F,WAAW,CAAC,CAAC;AACb,UAAU,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACxG,UAAU,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC5C,SAAS;AACT,QAAQ,MAAM;AACd,KAAK;AACL;AACA;AACA,IAAI,KAAK,OAAO,CAAC,MAAM,GAAG;AAC1B,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;AAC/D,QAAQ,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,2BAA2B,CAAC,EAAE,IAAI,EAAE,SAAS;AACjF,OAAO,CAAC,CAAC;AACT,MAAM,EAAE,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;AACrD,MAAM,EAAE,CAAC,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AACrC,KAAK;AACL;AACA;AACA,IAAI,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;AACzD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,mBAAmB,GAAG;AACxB,IAAI,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,KAAK,EAAE,CAAC;AAClE;AACA;AACA,IAAI,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;AAC5F,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK;AAClD,MAAM,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,MAAM,CAAC;AAC3D,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;AACvC,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;AACrC,MAAM,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9B,KAAK,EAAE,CAAC,CAAC,CAAC;AACV;AACA;AACA,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC1C,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,gBAAgB,CAAC,IAAI,QAAQ,GAAG;AACpE,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACnG,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,mBAAmB,CAAC;AAC/E,UAAU,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC,MAAM;AAC3D,UAAU,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC,QAAQ,CAAC;AAC9D,MAAM,MAAM,IAAI,QAAQ,GAAG,iBAAiB,CAAC;AAC7C,KAAK;AACL;AACA;AACA,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/F,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACtE;AACA,IAAI,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,mBAAmB,CAAC;AAC9E,QAAQ,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM;AACrD,QAAQ,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC;AACxD;AACA;AACA,IAAI,WAAW,CAAC,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC9C,IAAI,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,IAAI,kBAAkB,GAAG,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;AAC3G,IAAI,WAAW,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,KAAK,GAAG,GAAG,IAAI,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AACxF,IAAI,WAAW,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;AACzD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,QAAQ,EAAE;AAC9B,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,WAAW,KAAK,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,OAAO;AAChG,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;AACzC;AACA,IAAI,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC;AAC7D,IAAI,MAAM,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;AACpE,IAAI,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,KAAK;AACrE,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;AACjE,MAAM,OAAO,KAAK,IAAI,WAAW,EAAE,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AACtE,KAAK,EAAE,CAAC,CAAC,CAAC;AACV,IAAI,MAAM,UAAU,GAAG,aAAa,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;AAC7F,IAAI,MAAM,YAAY,GAAG,aAAa,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACrE;AACA,IAAI,EAAE,CAAC,GAAG,GAAG,IAAI,GAAG,UAAU,GAAG,YAAY,CAAC;AAC9C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,EAAE;AACpD,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,KAAK,EAAE,CAAC;AACpD,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;AACzC;AACA;AACA,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC;AACrE,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;AAC7D,IAAI,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AAChC;AACA;AACA,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,CAAC;AAClD,IAAI,MAAM,EAAE,GAAG,KAAK,CAAC,iBAAiB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACpF,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,eAAe,IAAI,EAAE,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACpF;AACA;AACA,IAAI,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAC3D,IAAI,MAAM,YAAY,GAAG,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AAC1E,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,GAAG,SAAS,GAAG,YAAY,GAAG,gBAAgB;AACvE,SAAS,KAAK,CAAC,eAAe,GAAG,CAAC,GAAG,CAAC,CAAC;AACvC,SAAS,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;AAChE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,oBAAoB,GAAG;AACzB,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO;AACtC;AACA;AACA,IAAI,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AAC3F,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,GAAG,mBAAmB,GAAG,mBAAmB,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;AACpH;AACA;AACA,IAAI,MAAM,WAAW,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC7C,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;AACrB;AACA;AACA,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,KAAK,GAAG;AAC/B,MAAM,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;AAC7D,MAAM,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;AACxB,KAAK;AACL;AACA,SAAS;AACT;AACA,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI;AAC/C,QAAQ,KAAK,GAAG,CAAC,IAAI,KAAK,OAAO,GAAG,OAAO,KAAK,CAAC;AACjD,QAAQ,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC;AAC3C,QAAQ,KAAK,CAAC,IAAI,GAAG,OAAO,KAAK,CAAC;AAClC,QAAQ,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,QAAQ,OAAO,IAAI,CAAC;AACpB,OAAO,CAAC,CAAC;AACT;AACA,MAAM,MAAM,MAAM,GAAG,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,uBAAuB;AAC3E,QAAQ,WAAW,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;AAC9E,OAAO,CAAC;AACR,KAAK;AACL;AACA,IAAI,MAAM,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG;AACtE,MAAM,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACxG,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,uBAAuB,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;AACtF,IAAI,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC;AACvC,IAAI,YAAY,GAAG,YAAY,IAAI,GAAG,CAAC,YAAY,CAAC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI;AAC9B,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK;AAClG,KAAK,CAAC;AACN;AACA,IAAI,KAAK,OAAO,KAAK,IAAI,KAAK,MAAM,CAAC,GAAG;AACxC,MAAM,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;AAChF,KAAK,MAAM,KAAK,OAAO,KAAK,IAAI,KAAK,SAAS,CAAC,GAAG;AAClD,MAAM,IAAI,CAAC,yBAAyB,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;AACnF,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,yBAAyB,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE;AACjF,IAAI,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;AAC9F,IAAI,KAAK,CAAC,IAAI,GAAG,OAAO;AACxB,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;AAC3D,IAAI,WAAW,CAAC,IAAI,IAAI,QAAQ,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;AAC1E;AACA,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC,MAAM,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,WAAW,CAAC,IAAI,GAAG;AACnE,MAAM,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;AACvE,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,sBAAsB,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE;AAC9E,IAAI,WAAW,CAAC,IAAI,IAAI,YAAY,CAAC,MAAM,CAAC;AAC5C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,wBAAwB,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;AACrG;AACA,IAAI,KAAK,OAAO,KAAK,IAAI,KAAK,MAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;AAC1F,SAAS,KAAK,OAAO,KAAK,IAAI,KAAK,SAAS,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;AACrG,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE;AACzD,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC5E,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAClH,IAAI,MAAM,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG;AACtD,MAAM,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,MAAM,KAAK,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,SAAS;AAC1C,MAAM,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AAChH,MAAM,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxC,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE;AACtD;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC7E,IAAI,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;AACvB,IAAI,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;AACpG;AACA;AACA,IAAI,KAAK,CAAC,SAAS,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,QAAQ,KAAK,IAAI,CAAC,GAAG;AAC9E,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;AAClD,KAAK;AACL;AACA;AACA,IAAI,KAAK,SAAS,GAAG,CAAC,GAAG;AACzB,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AACjE,MAAM,KAAK,QAAQ,KAAK,IAAI,GAAG;AAC/B,QAAQ,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AACvH,OAAO,MAAM;AACb,QAAQ,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AAChD,OAAO;AACP,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvE,KAAK;AACL;AACA,SAAS;AACT,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,QAAQ,IAAI,CAAC,CAAC;AACtC,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACtD,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;AACxC,IAAI,MAAM,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AAChD,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AACtD,IAAI,KAAK,QAAQ,EAAE,UAAU,CAAC,aAAa,CAAC,GAAG,OAAO;AACtD;AACA;AACA,IAAI,KAAK,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG;AAChD,MAAM,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC;AAC1E,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AACnD,MAAM,KAAK,IAAI,CAAC,IAAI,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE;AACrE,QAAQ,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AACjE,OAAO,CAAC,CAAC;AACT,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;AAC1C,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AAC3C,IAAI,MAAM,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AACnD;AACA;AACA,IAAI,KAAK,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG;AAChD,MAAM,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;AAC/E,MAAM,KAAK,OAAO,KAAK,OAAO,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG;AAC/D,QAAQ,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACpD,QAAQ,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,sBAAsB,CAAC,GAAG;AAC3E,UAAU,OAAO,CAAC,cAAc,KAAK,EAAE,CAAC;AACxC,UAAU,OAAO,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC;AAC/C,UAAU,OAAO,CAAC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC;AAC9C,SAAS;AACT,OAAO;AACP,KAAK;AACL;AACA;AACA,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,GAAG;AAClD,MAAM,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC;AAC1D,MAAM,KAAK,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,4BAA4B,CAAC,GAAG,CAAC,CAAC,GAAG;AAC9F,QAAQ,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,iCAAiC,EAAE,CAAC,CAAC,CAAC;AACjF,QAAQ,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,iCAAiC,EAAE,CAAC,CAAC,CAAC;AACjF,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,mBAAmB,GAAG;AACxB,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC3F,IAAI,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC;AACvC,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC,CAAC;AAChE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,oBAAoB,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;AAC/D,IAAI,KAAK,SAAS,KAAK,eAAe,GAAG;AACzC,MAAM,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;AAC3C,MAAM,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,IAAI,IAAI,KAAK,CAAC;AAC1E,MAAM,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACrC,KAAK;AACL,IAAI,OAAO,KAAK,CAAC,oBAAoB,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACxE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE;AAC5C,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC;AACvD,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;AACzC,IAAI,KAAK,CAAC,EAAE,GAAG,OAAO,IAAI,CAAC;AAC3B;AACA;AACA,IAAI,MAAM,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvC,IAAI,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;AACtD;AACA;AACA,IAAI,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC7C,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,IAAI,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC;AACvF;AACA;AACA,IAAI,MAAM,OAAO,GAAG;AACpB,MAAM,2BAA2B,EAAE,GAAG,GAAG,EAAE;AAC3C,MAAM,4BAA4B,EAAE,EAAE;AACtC,KAAK,CAAC;AACN;AACA;AACA;AACA,IAAI,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,sBAAsB,EAAE;AACvD,MAAM,SAAS,EAAE,eAAe;AAChC,MAAM,KAAK,EAAE,MAAM;AACnB,MAAM,OAAO,EAAE,KAAK;AACpB,MAAM,KAAK,EAAE,IAAI;AACjB,KAAK,EAAE,OAAO,CAAC,CAAC;AAChB,IAAI,OAAO,OAAO,KAAK,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;AAC3E,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE;AAC9B,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC9B,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;AACzC;AACA;AACA,IAAI,MAAM,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvC,IAAI,OAAO,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,2BAA2B,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;AACpF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE;AAClC,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;AACpD,IAAI,OAAO,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AAChD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,oBAAoB,CAAC,OAAO,EAAE;AAChC,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,mBAAmB,CAAC;AACrD,SAAS,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,iBAAiB,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACnF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE;AACvC,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC5C,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACnD,IAAI,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,IAAI,EAAE,CAAC;AAC/D,IAAI,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;AACjD,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACpC;AACA;AACA,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;AACvB,IAAI,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC;AACtC;AACA;AACA,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,cAAc,GAAG;AACnC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1B,MAAM,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,KAAK;AACL;AACA;AACA,IAAI,KAAK,aAAa,CAAC,KAAK,GAAG;AAC/B,MAAM,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAChC,MAAM,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC3E,KAAK;AACL;AACA;AACA,IAAI,KAAK,GAAG,EAAE,OAAO,EAAE,KAAK,GAAG,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACzG,SAAS,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;AACpC;AACA;AACA,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,KAAK,GAAG;AAC9B,MAAM,MAAM,aAAa,GAAG,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;AACnD,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;AACtC,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC7E,KAAK;AACL;AACA;AACA,IAAI,KAAK,aAAa,CAAC,KAAK,GAAG;AAC/B,MAAM,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAChC,MAAM,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC3E,KAAK;AACL;AACA;AACA,IAAI,MAAM,cAAc,IAAI,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC;AACvF;AACA;AACA,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,wBAAwB,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;AAClH,IAAI,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC;AAC/C,MAAM,IAAI,EAAE,IAAI;AAChB,MAAM,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACtC,MAAM,MAAM;AACZ,MAAM,cAAc,EAAE,IAAI;AAC1B,MAAM,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC;AAC3D,MAAM,cAAc;AACpB,MAAM,WAAW,EAAE;AACnB,QAAQ,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACzE,QAAQ,kBAAkB,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE;AACrD,OAAO;AACP,KAAK,EAAE,OAAO,CAAC,CAAC;AAChB,IAAI,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,KAAK,GAAG,OAAO;AACtF;AACA,IAAI,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,iBAAiB,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACtE;AACA,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE;AAC1C;AACA,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC3C,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,IAAI,KAAK,CAAC,CAAC;AAClE,IAAI,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,IAAI,EAAE,CAAC;AAC/D,IAAI,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;AACjD,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACpC;AACA;AACA,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;AAC9B,IAAI,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,OAAO,KAAK,IAAI,EAAE,OAAO,IAAI,KAAK,CAAC,CAAC;AACtE;AACA;AACA,IAAI,KAAK,IAAI,EAAE,IAAI,CAAC,cAAc,GAAG;AACrC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1B,MAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,KAAK;AACL;AACA;AACA,IAAI,KAAK,aAAa,CAAC,KAAK,GAAG;AAC/B,MAAM,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAChC,MAAM,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC3E,KAAK;AACL;AACA;AACA,IAAI,KAAK,OAAO,EAAE,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAChH,SAAS,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;AACpC;AACA;AACA,IAAI,KAAK,IAAI,EAAE,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,GAAG;AAChD,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC/B,MAAM,MAAM,KAAK,GAAG,EAAE,CAAC;AACvB,MAAM,KAAK,IAAI,EAAE,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AAC/F,MAAM,KAAK,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACpF,MAAM,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACzC,KAAK;AACL;AACA,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,uBAAuB,EAAE,CAAC,IAAI,EAAEA,QAAc,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAC3G,IAAI,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC;AAC/C,MAAM,IAAI,EAAE,MAAM;AAClB,MAAM,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACtC,MAAM,cAAc,EAAE,IAAI;AAC1B,MAAM,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC;AAC3D,MAAM,WAAW,EAAE;AACnB,QAAQ,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,WAAW,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACxF,QAAQ,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC;AAClD,OAAO;AACP,KAAK,EAAE,OAAO,CAAC,CAAC;AAChB,IAAI,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,wBAAwB,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,KAAK,GAAG,OAAO;AACzF;AACA,IAAI,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AACzE;AACA,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE;AACrC,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;AACjE,IAAI,IAAI,MAAM,CAAC;AACf,MAAM,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,0BAA0B,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9F,MAAM,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,yBAAyB,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACxF,MAAM,OAAO,EAAE;AACf,QAAQ,IAAI,EAAE;AACd,UAAU,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;AACvD,UAAU,QAAQ,EAAE,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC;AAClE,SAAS;AACT,QAAQ,IAAI,EAAE;AACd,UAAU,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;AACvD,UAAU,QAAQ,EAAE,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC;AAClE,SAAS;AACT,OAAO;AACP,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACpB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE;AAC/C,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;AACjE,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACjD,IAAI,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,IAAI,EAAE,CAAC;AAC/D,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;AACrB,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACpC;AACA;AACA,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvB,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAC7B;AACA;AACA,IAAI,KAAK,GAAG,EAAE,SAAS,CAAC,cAAc,GAAG;AACzC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1B,MAAM,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;AACrC,KAAK;AACL;AACA;AACA,IAAI,KAAK,GAAG,EAAE,OAAO,EAAE,KAAK,GAAG;AAC/B,MAAM,MAAM,aAAa,GAAG,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;AACrD,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;AACtC,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC7E,KAAK;AACL;AACA;AACA,IAAI,KAAK,aAAa,CAAC,KAAK,GAAG;AAC/B,MAAM,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAChC,MAAM,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC3E,KAAK;AACL;AACA;AACA,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,0BAA0B,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAClF,IAAI,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC;AAC/C,MAAM,IAAI;AACV,MAAM,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACtC,MAAM,MAAM;AACZ,MAAM,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC;AAC3D,MAAM,WAAW,EAAE;AACnB,QAAQ,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACzE,QAAQ,kBAAkB,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE;AACzD,OAAO;AACP,KAAK,EAAE,OAAO,CAAC,CAAC;AAChB,IAAI,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,0BAA0B,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,KAAK,KAAK,GAAG,OAAO;AAC9F;AACA,IAAI,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,uBAAuB,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAC9E;AACA,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE;AAC/C,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;AACjE,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACjD,IAAI,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,IAAI,EAAE,CAAC;AAC/D,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;AACrB,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACpC;AACA;AACA,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvB,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAC7B;AACA;AACA,IAAI,KAAK,GAAG,EAAE,QAAQ,CAAC,cAAc,GAAG;AACxC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1B,MAAM,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;AACpC,KAAK;AACL;AACA;AACA,IAAI,KAAK,GAAG,EAAE,OAAO,EAAE,IAAI,GAAG;AAC9B,MAAM,MAAM,YAAY,GAAG,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;AACnD,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;AACrC,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC3E,KAAK;AACL;AACA;AACA,IAAI,KAAK,aAAa,CAAC,IAAI,GAAG;AAC9B,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC/B,MAAM,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACzE,KAAK;AACL;AACA;AACA,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,uBAAuB,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAC/E,IAAI,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC;AAC/C,MAAM,IAAI;AACV,MAAM,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACtC,MAAM,MAAM;AACZ,MAAM,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC;AAC3D,MAAM,WAAW,EAAE;AACnB,QAAQ,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACzE,QAAQ,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE;AACtD,OAAO;AACP,KAAK,EAAE,OAAO,CAAC,CAAC;AAChB,IAAI,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,0BAA0B,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,KAAK,KAAK,GAAG,OAAO;AAC9F;AACA,IAAI,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,uBAAuB,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAC9E;AACA,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE;AAClC,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;AAC/C;AACA;AACA,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,MAAM,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG;AACjG,MAAM,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC,CAAC;AAC9E,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK;AACL;AACA;AACA,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AAC7E,IAAI,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,IAAI,EAAE,CAAC;AAC/D,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;AACrB,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACpC;AACA;AACA,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,GAAG;AAChD,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1B,MAAM,IAAI,CAAC,IAAI,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACvE,KAAK;AACL;AACA;AACA,IAAI,KAAK,aAAa,CAAC,IAAI,GAAG;AAC9B,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC/B,MAAM,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACzE,KAAK;AACL;AACA;AACA,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;AAChE,IAAI,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC;AAC/C,MAAM,IAAI;AACV,MAAM,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACtC,MAAM,MAAM;AACZ,MAAM,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC;AAC3D,MAAM,WAAW,EAAE,EAAE;AACrB,MAAM,WAAW,EAAE;AACnB,QAAQ,OAAO,EAAE,OAAO;AACxB,QAAQ,kBAAkB,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC;AAC3C,OAAO;AACP,KAAK,EAAE,OAAO,CAAC,CAAC;AAChB,IAAI,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,wBAAwB,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,KAAK,GAAG,OAAO;AACjF;AACA,IAAI,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;AACzC,IAAI,KAAK,CAAC,IAAI,GAAG,OAAO,IAAI,CAAC;AAC7B;AACA;AACA,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC;AACvB;AACA;AACA,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,GAAG;AAC1D,MAAM,IAAI,SAAS,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/C;AACA;AACA,MAAM,KAAK,IAAI,CAAC,UAAU,GAAG;AAC7B,QAAQ,OAAO,CAAC,OAAO,GAAG;AAC1B,UAAU,iCAAiC,EAAE,CAAC;AAC9C,UAAU,iCAAiC,EAAE,CAAC;AAC9C,UAAU,4BAA4B,EAAE,CAAC;AACzC,SAAS,CAAC;AACV,QAAQ,OAAO,CAAC,UAAU,GAAG,gCAAgC,CAAC;AAC9D,OAAO;AACP;AACA;AACA,WAAW,KAAK,SAAS,KAAK,CAAC,GAAG;AAClC,QAAQ,OAAO,CAAC,OAAO,GAAG;AAC1B,UAAU,iCAAiC,EAAE,CAAC;AAC9C,UAAU,iCAAiC,EAAE,CAAC;AAC9C,SAAS,CAAC;AACV,QAAQ,OAAO,CAAC,UAAU,GAAG,wBAAwB,CAAC;AACtD,OAAO;AACP;AACA;AACA,WAAW,OAAO,CAAC,OAAO,GAAG,CAAC,iCAAiC,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAChG,KAAK;AACL;AACA;AACA,SAAS;AACT,MAAM,IAAI,QAAQ,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACpE,MAAM,OAAO,CAAC,OAAO,GAAG,CAAC,iCAAiC,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1F,MAAM,KAAK,QAAQ,IAAI,CAAC,GAAG;AAC3B,QAAQ,OAAO,CAAC,UAAU,GAAG,wBAAwB,CAAC;AACtD,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,KAAK,GAAG,OAAO,IAAI,CAAC;AACxF;AACA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACtF;AACA;AACA,IAAI,KAAK,OAAO,CAAC,UAAU,GAAG;AAC9B,MAAM,IAAI,QAAQ,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;AACnG,MAAM,WAAW,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACjE,MAAM,MAAM,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACzC,KAAK;AACL;AACA;AACA,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAAE,EAAE;AAChC;AACA;AACA,IAAI,KAAK,IAAI,CAAC,qBAAqB,GAAG,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;AAChF;AACA;AACA,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC;AAC9C,IAAI,MAAM,SAAS,GAAG,IAAI,EAAE,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC;AACtE,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACpC,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;AACzC,IAAI,KAAK,KAAK,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,KAAK,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;AAC/F;AACA;AACA,IAAI,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC;AAC3B;AACA;AACA,IAAI,KAAK,IAAI,GAAG;AAChB,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3B,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,GAAG;AACpC,QAAQ,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5B,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,OAAO;AACP,MAAM,KAAK,IAAI,CAAC,KAAK,GAAG;AACxB,QAAQ,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC7B,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC/D,OAAO;AACP,KAAK;AACL;AACA;AACA,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,GAAG;AACtC,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC;AAC5E,MAAM,KAAK,YAAY,GAAG;AAC1B,QAAQ,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACpC,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AACxE,OAAO;AACP,KAAK;AACL;AACA;AACA,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG;AACpC,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC;AACpE,MAAM,KAAK,gBAAgB,GAAG;AAC9B,QAAQ,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACnC,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;AAC3E,OAAO;AACP,KAAK;AACL;AACA;AACA,IAAI,KAAK,KAAK,CAAC,eAAe,GAAG;AACjC,MAAM,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAChC,MAAM,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;AAC1B,KAAK;AACL;AACA;AACA,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;AAC7E,IAAI,KAAK,UAAU,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG;AACtD,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC;AACnE,MAAM,KAAK,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC;AACnF,KAAK;AACL;AACA,IAAI,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC;AACxC,MAAM,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;AACtE,MAAM,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,KAAK;AACjD,MAAM,QAAQ,EAAE,IAAI;AACpB,MAAM,MAAM,EAAE,IAAI;AAClB,KAAK,EAAE,OAAO,CAAC,CAAC;AAChB;AACA;AACA,IAAI,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtC,IAAI,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC3D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,oBAAoB,CAAC,WAAW,CAAC,EAAE,EAAE;AAC7C;AACA,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;AACrD,IAAI,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC;AAC9C,MAAM,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;AAC5D,MAAM,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1E,MAAM,cAAc,EAAE,KAAK;AAC3B,MAAM,aAAa,EAAE,WAAW,CAAC,aAAa,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM;AACpF,KAAK,CAAC,CAAC;AACP,IAAI,KAAK,MAAM,KAAK,IAAI,GAAG,OAAO;AAClC;AACA;AACA,IAAI,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;AACtC,IAAI,MAAM,IAAI,CAAC,cAAc,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC,CAAC;AACxD,IAAI,OAAO,IAAI,CAAC,qBAAqB,CAAC;AACtC,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,yBAAyB,EAAE,IAAI,EAAE,IAAI,CAAC,qBAAqB,CAAC,KAAK,KAAK,GAAG,OAAO;AACpG;AACA,IAAI,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AACvD,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK;AAC3F,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC9D,MAAM,KAAK,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC3C,MAAM,OAAO,GAAG,CAAC;AACjB,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,CAAC,OAAO,CAAC,sBAAsB,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;AAC5D,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,UAAU,CAAC,YAAY,EAAE,OAAO,CAAC,EAAE,EAAE;AAC7C;AACA,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC;AACnB,IAAI,KAAK,CAAC,YAAY,GAAG;AACzB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACnF,MAAM,KAAK,CAAC,GAAG,GAAG,OAAO,IAAI,CAAC;AAC9B,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;AACxC,KAAK;AACL;AACA;AACA,SAAS,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI;AACpC,MAAM,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,KAAK,YAAY,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3G,KAAK,CAAC,CAAC;AACP;AACA;AACA,IAAI,KAAK,CAAC,GAAG,GAAG;AAChB,MAAM,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;AAC9G,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK;AACL;AACA;AACA,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;AAC3D,IAAI,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC;AACjD,MAAM,OAAO,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,sBAAsB,CAAC;AAC9D,MAAM,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;AAC9B,MAAM,WAAW,EAAE,IAAI;AACvB,MAAM,WAAW,EAAE;AACnB,QAAQ,OAAO,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACtD,QAAQ,MAAM;AACd,QAAQ,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACxC,QAAQ,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;AACvD,QAAQ,kBAAkB,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC;AAC5C,OAAO;AACP,KAAK,EAAE,OAAO,CAAC,CAAC;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,CAAC,KAAK,KAAK,GAAG,OAAO;AAC9F;AACA,IAAI,MAAM,IAAI,GAAG,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACzF,IAAI,KAAK,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AACzE;AACA,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;AACzC,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AACzF,IAAI,MAAM,OAAO,GAAG;AACpB,MAAM,KAAK,EAAE,CAAC,4BAA4B,EAAE,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC;AAC3D,MAAM,KAAK,EAAE,CAAC,oBAAoB,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;AAC/D,KAAK,CAAC;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,KAAK,GAAG,OAAO,IAAI,CAAC;AACrF;AACA;AACA,IAAI,MAAM,aAAa,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,GAAG,4BAA4B,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;AAC1G;AACA;AACA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;AACjG,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACjF;AACA,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,kBAAkB,CAAC,IAAI,EAAE,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;AAC1D,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;AACpG,IAAI,MAAM,QAAQ,GAAG;AACrB,MAAM,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACxC,MAAM,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;AAC9B,MAAM,WAAW;AACjB,KAAK,CAAC;AACN,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,uCAAuC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACnG,IAAI,MAAM,WAAW,GAAG;AACxB,MAAM,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACtC,MAAM,MAAM;AACZ,MAAM,OAAO,EAAE,WAAW,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACtD,MAAM,kBAAkB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;AAC/C,KAAK,CAAC;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,CAAC,OAAO,CAAC,6BAA6B,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;AACpF;AACA,IAAI,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC3D,IAAI,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,CAAC,OAAO,CAAC,0BAA0B,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC1D;AACA,IAAI,KAAK,QAAQ,CAAC,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AAClE,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,gBAAgB,CAAC,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;AAClD,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,KAAK,GAAG,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;AAC7F,IAAI,MAAM,QAAQ,GAAG;AACrB,MAAM,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO;AAChD,MAAM,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;AAC9B,MAAM,WAAW;AACjB,KAAK,CAAC;AACN,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;AAClE,IAAI,MAAM,WAAW,GAAG;AACxB,MAAM,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACtC,MAAM,MAAM;AACZ,MAAM,OAAO,EAAE,WAAW,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACtD,MAAM,kBAAkB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;AAC/C,KAAK,CAAC;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,CAAC,OAAO,CAAC,2BAA2B,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;AAC5E;AACA,IAAI,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC3D,IAAI,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,CAAC,OAAO,CAAC,wBAAwB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACxD;AACA,IAAI,KAAK,QAAQ,CAAC,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AAClE,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE;AAC7B,IAAI,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC;AACvC,MAAM,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;AAChF,KAAK,EAAE,MAAM,CAAC,CAAC;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,KAAK,GAAG,OAAO;AAC3E;AACA;AACA,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;AAC1C,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC;AAChD;AACA;AACA,IAAI,KAAK,MAAM,CAAC,MAAM,GAAG;AACzB,MAAM,IAAI,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,eAAe,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACnG,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE,OAAO,EAAE;AAC9B,KAAK;AACL;AACA;AACA,SAAS,KAAK,MAAM,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;AACjG;AACA;AACA,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,GAAG,GAAG,CAAC;AAChD,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC;AACtD,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACnE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE;AAC5B,IAAI,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC;AACvC,MAAM,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI;AAC5C,KAAK,EAAE,MAAM,CAAC,CAAC;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,KAAK,GAAG,OAAO;AAC1E;AACA,IAAI,KAAK,MAAM,CAAC,MAAM,GAAG;AACzB,MAAM,IAAI,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,cAAc,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE;AACjF,MAAM,MAAM,GAAG,EAAE,EAAE,OAAO,EAAE;AAC5B,KAAK;AACL;AACA,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACxD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AACpD,IAAI,IAAI,kBAAkB,GAAG,CAAC,CAAC;AAC/B,IAAI,IAAI,eAAe,GAAG,EAAE,CAAC;AAC7B,IAAI,IAAI,gBAAgB,GAAG,CAAC,CAAC;AAC7B,IAAI,IAAI,cAAc,GAAG,EAAE,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;AACrB;AACA;AACA,IAAI,KAAK,QAAQ,GAAG;AACpB,MAAM,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC,wBAAwB,EAAE,EAAE;AAC3F,MAAM,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,uBAAuB,EAAE,EAAE;AACvF,KAAK;AACL;AACA;AACA,IAAI,MAAM,MAAM,GAAG;AACnB,MAAM,GAAG,EAAE,GAAG,GAAG,gBAAgB;AACjC,MAAM,GAAG,EAAE,GAAG,GAAG,kBAAkB;AACnC,MAAM,UAAU,EAAE;AAClB,QAAQ,GAAG,eAAe;AAC1B,QAAQ,GAAG,IAAI,CAAC,wBAAwB,CAAC,EAAE,yBAAyB,EAAE,CAAC,QAAQ,EAAE,wBAAwB,EAAE,QAAQ,EAAE,CAAC;AACtH,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;AAClE,OAAO;AACP,MAAM,WAAW,EAAE;AACnB,QAAQ,GAAG,cAAc;AACzB,QAAQ,IAAI,MAAM,IAAI,CAAC,wBAAwB,CAAC,EAAE,mBAAmB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AACpH,OAAO;AACP,MAAM,QAAQ;AACd,MAAM,MAAM;AACZ,KAAK,CAAC;AACN,IAAI,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,wBAAwB,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,KAAK,GAAG,OAAO,MAAM,CAAC;AACtF;AACA;AACA,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACzC,IAAI,MAAM,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;AACnE;AACA;AACA,IAAI,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AACvD;AACA;AACA,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,yBAAyB,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,EAAE;AAC1D,IAAI,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;AACxC,IAAI,MAAM,YAAY,GAAG,GAAG,KAAK,CAAC,CAAC;AACnC,IAAI,MAAM,cAAc,GAAG,GAAG,KAAK,CAAC,CAAC;AACrC,IAAI,MAAM,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;AAC/C;AACA;AACA,IAAI,IAAI,UAAU,CAAC;AACnB,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC;AACrD,MAAM,KAAK,QAAQ;AACnB,QAAQ,UAAU,GAAG,CAAC,QAAQ,IAAI,MAAM,IAAI,yBAAyB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;AACpG,QAAQ,MAAM;AACd,MAAM,KAAK,QAAQ;AACnB,QAAQ,UAAU,GAAG,CAAC,CAAC,QAAQ,IAAI,MAAM,IAAI,0BAA0B,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;AACtG,QAAQ,MAAM;AACd,MAAM,KAAK,MAAM;AACjB,QAAQ,UAAU,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC/C,QAAQ,MAAM;AACd,KAAK;AACL;AACA;AACA,IAAI,IAAI,OAAO,CAAC;AAChB,IAAI,KAAK,YAAY,IAAI,cAAc,GAAG,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;AAChF,SAAS,KAAK,QAAQ,IAAI,CAAC,YAAY,IAAI,cAAc,GAAG,OAAO,GAAG,+BAA+B,CAAC;AACtG,SAAS,KAAK,QAAQ,IAAI,YAAY,IAAI,CAAC,cAAc,GAAG,OAAO,GAAG,6BAA6B,CAAC;AACpG,SAAS,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;AACpD;AACA;AACA,IAAI,IAAI,QAAQ,GAAG;AACnB,MAAM,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;AACxB,MAAM,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;AAC9C,MAAM,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;AAC5C,MAAM,KAAK,EAAE,MAAM,CAAC,KAAK;AACzB,MAAM,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;AACzC,QAAQ,IAAI,EAAE,IAAI,CAAC,IAAI;AACvB,QAAQ,IAAI,EAAE,QAAQ,GAAG,GAAG,GAAG,CAAC,GAAG;AACnC,QAAQ,MAAM,EAAE,GAAG;AACnB,OAAO,CAAC;AACR,KAAK,CAAC;AACN,IAAI,WAAW,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AAC/E,IAAI,OAAO,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACxC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,gBAAgB,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;AAC7C,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;AACzC,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;AACjD,IAAI,IAAI,UAAU,GAAG,CAAC,CAAC;AACvB,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,GAAG,SAAS,KAAK,GAAG,GAAG;AACnE,MAAM,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;AACxC,MAAM,KAAK,CAAC,KAAK,IAAI,GAAG,MAAM;AAC9B,MAAM,UAAU,IAAI,CAAC,CAAC;AACtB,KAAK;AACL,IAAI,OAAO,UAAU,CAAC;AACtB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,wBAAwB,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE;AACvE,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;AACzC,IAAI,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC;AACrB,IAAI,IAAI,OAAO,GAAG,EAAE,CAAC;AACrB,IAAI,KAAK,cAAc,GAAG,OAAO,CAAC,8BAA8B,CAAC,GAAG,CAAC,CAAC;AACtE,SAAS,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;AACpD,IAAI,OAAO,CAAC,4BAA4B,CAAC,GAAG,GAAG,CAAC;AAChD,IAAI,KAAK,WAAW,GAAG,OAAO,CAAC,2BAA2B,CAAC,GAAG,CAAC,CAAC;AAChE,IAAI,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC;AAC3D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,wBAAwB,CAAC,CAAC,yBAAyB,CAAC,IAAI,EAAE,wBAAwB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE;AAC/F,IAAI,IAAI,OAAO,GAAG,EAAE,CAAC;AACrB,IAAI,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG;AAChE,MAAM,KAAK,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,yBAAyB,IAAI,CAAC,CAAC,EAAE,MAAM,wBAAwB,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;AACpH,QAAQ,OAAO,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC/D,OAAO;AACP,KAAK;AACL,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,qBAAqB,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE;AACnE,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AACtC,IAAI,IAAI,OAAO,GAAG,EAAE,CAAC;AACrB,IAAI,KAAK,WAAW,GAAG;AACvB,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;AAC/B,MAAM,OAAO,CAAC,0BAA0B,CAAC,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC;AACtE,KAAK;AACL,IAAI,KAAK,aAAa,GAAG;AACzB,MAAM,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG;AACnD,QAAQ,OAAO,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACvG,OAAO;AACP,KAAK;AACL,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,uBAAuB,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE;AAC3C;AACA,IAAI,KAAK,UAAU,KAAK,SAAS,GAAG,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACxG;AACA;AACA,IAAI,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AACrE,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACrG,KAAK,CAAC,CAAC;AACP;AACA;AACA,IAAI,IAAI,OAAO,GAAG,EAAE,CAAC;AACrB,IAAI,IAAI,gBAAgB,GAAG,CAAC,CAAC;AAC7B,IAAI,MAAM,IAAI,IAAI,IAAI,aAAa,GAAG;AACtC,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAClD,MAAM,KAAK,CAAC,gBAAgB,GAAG,UAAU,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG;AAClE,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,EAAE,UAAU,GAAG,gBAAgB,CAAC,CAAC;AAC9E,QAAQ,gBAAgB,IAAI,KAAK,CAAC;AAClC,QAAQ,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,oBAAoB,EAAE,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC;AAChF,OAAO;AACP,KAAK;AACL,IAAI,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;AACzC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,wBAAwB,CAAC,CAAC,oBAAoB,CAAC,IAAI,EAAE,mBAAmB,CAAC,IAAI;AACrF,IAAI,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE;AACtC,IAAI,IAAI,QAAQ,GAAG,EAAE,CAAC;AACtB,IAAI,KAAK,oBAAoB,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpD,IAAI,KAAK,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnD,IAAI,KAAK,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjD,IAAI,IAAI,OAAO,GAAG,EAAE,CAAC;AACrB,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG;AACnC,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACpC,MAAM,KAAK,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG;AAC1C,QAAQ,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,mBAAmB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACpE,OAAO;AACP,MAAM,KAAK,mBAAmB,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,GAAG;AAChE,QAAQ,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,yBAAyB,EAAE,IAAI,CAAC,CAAC,CAAC;AACtE,OAAO;AACP;AACA;AACA,MAAM,KAAK,gBAAgB,IAAI,IAAI,EAAE,QAAQ,KAAK,IAAI,EAAE,GAAG,KAAK,SAAS,CAAC,GAAG;AAC7E,QAAQ,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AACjE,QAAQ,KAAK,mBAAmB,KAAK,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,QAAQ,CAAC,GAAG;AAC/F,UAAU,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC;AACpD,SAAS;AACT;AACA,QAAQ,IAAI,KAAK,GAAG,CAAC,CAAC;AACtB,QAAQ,IAAI;AACZ,UAAU,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC;AAC7D,SAAS,CAAC,MAAM,GAAG,EAAE;AACrB,UAAU,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,kCAAkC,EAAE;AACrF,YAAY,IAAI,EAAE,IAAI,CAAC,IAAI;AAC3B,YAAY,OAAO,EAAE,IAAI,CAAC,QAAQ;AAClC,WAAW,CAAC,CAAC,CAAC;AACd,SAAS;AACT;AACA,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACvE,QAAQ,KAAK,QAAQ,KAAK,IAAI,CAAC,KAAK,GAAG;AACvC,UAAU,MAAM,IAAI,GAAG,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;AAC7C,UAAU,MAAM,KAAK,GAAG,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC;AAC9C,UAAU,MAAM,MAAM,GAAG,CAAC,UAAU,EAAE,IAAI,GAAG,CAAC,GAAG,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;AAChG,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,mBAAmB,EAAE,QAAQ,CAAC,CAAC,CAAC;AACtE,UAAU,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,UAAU,MAAM,IAAI,CAAC,SAAS,CAAC;AAC/B,YAAY,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;AAC9B,YAAY,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;AACpD,YAAY,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACtF,WAAW,CAAC,CAAC;AACb,SAAS;AACT,OAAO;AACP,KAAK;AACL,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,GAAG;AACpB,IAAI,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACnE,IAAI,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AAC/D,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;AACjE;AACA;AACA,IAAI,IAAI,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK;AACtE,MAAM,KAAK,CAAC,MAAM,CAAC,UAAU,GAAG,OAAO,MAAM,CAAC;AAC9C,MAAM,OAAO,MAAM,IAAI,QAAQ,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AACnE,KAAK,EAAE,CAAC,CAAC,CAAC;AACV;AACA;AACA,IAAI,MAAM,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,UAAU,EAAE;AACtD,MAAM,KAAK,CAAC,MAAM,CAAC,UAAU,GAAG,SAAS;AACzC,MAAM,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAC3D,MAAM,QAAQ,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC;AACtC,MAAM,KAAK,KAAK,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAC5C,KAAK;AACL;AACA;AACA,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC,CAAC;AACtD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,aAAa,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK;AACvG,IAAI,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK;AAC5G,IAAI,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,IAAI,EAAE,iBAAiB,CAAC,IAAI;AAC5G,IAAI,WAAW,CAAC,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,gBAAgB,CAAC,IAAI;AACpG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE;AACrD;AACA;AACA,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;AACpE,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG;AACvC,MAAM,OAAO,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;AAC9E,KAAK;AACL;AACA;AACA,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC9B,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;AACxC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,GAAG,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;AAC/D,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;AACrC;AACA,IAAI,KAAK,QAAQ,GAAG;AACpB,MAAM,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;AACzB,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1E,KAAK;AACL;AACA;AACA,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC;AACxC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI;AAClB,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AACxC,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM;AAC3B,MAAM,KAAK,EAAE,MAAM,CAAC,KAAK;AACzB,MAAM,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;AAC/C,MAAM,GAAG,EAAE,MAAM,CAAC,GAAG;AACrB,MAAM,SAAS,EAAE,CAAC,CAAC,SAAS;AAC5B,MAAM,MAAM,EAAE,CAAC,CAAC,MAAM;AACtB,MAAM,KAAK,EAAE,CAAC,CAAC,KAAK;AACpB,MAAM,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE;AACxG,KAAK,EAAE,QAAQ,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;AAC1B;AACA;AACA,IAAI,OAAO,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;AAC9B,IAAI,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC7B,IAAI,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AAC5B;AACA;AACA,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;AAC5D,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC;AACpE,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC;AACtE,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AACtC,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC;AACpE;AACA;AACA,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,CAAC,GAAG;AACpE,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AACrD,KAAK;AACL,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG;AACjF,MAAM,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACrE,KAAK;AACL,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,CAAC,GAAG;AAC9G,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AAChD,KAAK;AACL;AACA,IAAI,KAAK,CAAC,QAAQ,GAAG;AACrB,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,CAAC,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AAChF,MAAM,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,CAAC,GAAG;AACrI,QAAQ,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzD,OAAO;AACP,MAAM,CAAC,CAAC,cAAc,CAAC,cAAc,GAAG,WAAW,CAAC,cAAc,CAAC;AACnE;AACA;AACA,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;AAC3C,MAAM,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG;AAC9C,QAAQ,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACzC,QAAQ,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;AAC7C,QAAQ,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;AACrD,QAAQ,KAAK,YAAY,KAAK,IAAI,KAAK,UAAU,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACvE,aAAa,KAAK,UAAU,KAAK,IAAI,KAAK,QAAQ,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACxE,QAAQ,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC;AACjE,aAAa,KAAK,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;AACvF,OAAO;AACP;AACA;AACA,MAAM,KAAK,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AAC1D,WAAW,KAAK,WAAW,GAAG;AAC9B,QAAQ,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG;AAC9D,UAAU,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAChE,SAAS;AACT,OAAO;AACP;AACA;AACA,MAAM,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI;AACnD,QAAQ,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,SAAS,CAAC;AACvE,aAAa,KAAK,CAAC,CAAC,IAAI,KAAK,MAAM,GAAG,OAAO,SAAS,CAAC;AACvD,aAAa,KAAK,CAAC,CAAC,IAAI,KAAK,OAAO,GAAG,OAAO,UAAU,CAAC;AACzD,aAAa,OAAO,SAAS,CAAC;AAC9B,OAAO,CAAC,CAAC,CAAC;AACV;AACA;AACA,MAAM,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG;AAC/C,QAAQ,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AACvF,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;AACrB,UAAU,IAAI,EAAE,OAAO;AACvB,UAAU,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC;AAC7D,UAAU,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE;AAChC,SAAS,CAAC,CAAC;AACX,OAAO;AACP;AACA;AACA,MAAM,KAAK,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;AAC7E;AACA;AACA,MAAM,KAAK,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;AACxE;AACA;AACA,MAAM,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AAC1D,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,IAAI;AAChE,QAAQ,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC;AAC7D,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1B,MAAM,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI;AACxC,QAAQ,KAAK,MAAM,GAAG,OAAO,IAAI,CAAC;AAClC,QAAQ,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;AACnH,QAAQ,MAAM,YAAY,GAAG,MAAM,EAAE,MAAM,EAAE,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC;AAChE,QAAQ,MAAM,cAAc,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC1D,QAAQ,KAAK,cAAc,GAAG,OAAO,YAAY,CAAC;AAClD,QAAQ,KAAK,CAAC,cAAc,IAAI,CAAC,YAAY,GAAG,OAAO,iBAAiB,CAAC;AACzE,QAAQ,KAAK,MAAM,CAAC,IAAI,KAAK,OAAO,GAAG,OAAO,WAAW,CAAC;AAC1D,QAAQ,KAAK,MAAM,CAAC,IAAI,KAAK,MAAM,GAAG,OAAO,UAAU,CAAC;AACxD,QAAQ,KAAK,MAAM,CAAC,IAAI,KAAK,YAAY,GAAG,OAAO,gBAAgB,CAAC;AACpE,QAAQ,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,WAAW,CAAC;AAC9E,QAAQ,KAAK,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,eAAe,CAAC;AAChH,QAAQ,OAAO,IAAI,CAAC;AACpB,OAAO,CAAC,CAAC;AACT,KAAK;AACL;AACA;AACA,IAAI,KAAK,MAAM,CAAC,cAAc,CAAC,SAAS,GAAG;AAC3C,MAAM,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;AACnD,MAAM,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AACvF,KAAK;AACL;AACA;AACA,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC;AACrG,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;AACvC;AACA;AACA,IAAI,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,kBAAkB,CAAC,IAAI,EAAE,CAAC;AAC7E,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpC,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,EAAE,wBAAwB,EAAE,gBAAgB,CAAC,CAAC;AACnF;AACA;AACA,IAAI,KAAK,IAAI,CAAC,OAAO,GAAG;AACxB,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,cAAc,CAAC;AACzC,MAAM,OAAO,CAAC,CAAC,cAAc,CAAC;AAC9B,MAAM,IAAI,iBAAiB,CAAC;AAC5B,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG;AAC9B,QAAQ,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC;AAChC,QAAQ,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC;AAC5D,OAAO,MAAM;AACb,QAAQ,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC;AAC5B,QAAQ,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;AACxD,OAAO;AACP,MAAM,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,+BAA+B,EAAE,iBAAiB,CAAC,CAAC;AAC/F,MAAM,MAAM,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;AAChC,MAAM,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACxD,MAAM,KAAK,WAAW,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;AAClD,MAAM,OAAO,MAAM,CAAC;AACpB,KAAK;AACL;AACA;AACA,IAAI,MAAM,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,CAAC,OAAO,CAAC,sBAAsB,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE;AAC3D,MAAM,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU;AAChH,MAAM,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW;AACpG,MAAM,eAAe,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe;AACjF,KAAK,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;AACtB;AACA;AACA,IAAI,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;AACrE;AACA;AACA,IAAI,KAAK,CAAC,eAAe,GAAG,OAAO;AACnC,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAC9C,IAAI,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI;AACpC,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;AACrE,MAAM,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;AAC9B,MAAM,YAAY,CAAC,OAAO,GAAG,QAAQ,CAAC,EAAE,CAAC;AACzC,MAAM,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC;AACpC;AACA,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,2BAA2B,CAAC,CAAC;AACvF,MAAM,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,2BAA2B,EAAE,cAAc,CAAC,CAAC;AAC3F,MAAM,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,2BAA2B,EAAE,IAAI,CAAC,CAAC;AACjF,MAAM,OAAO,YAAY,CAAC;AAC1B,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,MAAM,CAAC,KAAK,EAAE,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACnE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,kBAAkB,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE;AAClD,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,OAAO;AACtC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC,CAAC;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,CAAC,OAAO,CAAC,0BAA0B,EAAE,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;AACnE,IAAI,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,kBAAkB,CAAC,IAAI,EAAE,CAAC;AAC7E,IAAI,MAAM,eAAe,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC;AACrD,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;AAC3C;AACA;AACA,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC;AAC7E;AACA;AACA,IAAI,KAAK,IAAI,CAAC,OAAO,GAAG;AACxB,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAClF,MAAM,KAAK,CAAC,SAAS,GAAG;AACxB,QAAQ,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,0CAA0C,EAAE;AAC3F,UAAU,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC;AAC3D,SAAS,CAAC,CAAC,CAAC;AACZ,QAAQ,OAAO;AACf,OAAO;AACP,MAAM,MAAM,kBAAkB,GAAG,MAAM,SAAS,CAAC,gBAAgB,EAAE,CAAC;AACpE,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;AACzE,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;AAChD,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,WAAW,CAAC,SAAS,GAAG,SAAS,IAAI,EAAE,CAAC;AACtE,WAAW;AACX,QAAQ,SAAS,CAAC,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC;AAC9C,QAAQ,WAAW,CAAC,KAAK,GAAG,SAAS,CAAC;AACtC,OAAO;AACP;AACA,MAAM,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,CAAC,GAAG;AAC9E,QAAQ,WAAW,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;AAC/C,OAAO;AACP,MAAM,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG;AACnF,QAAQ,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC/D,OAAO;AACP,MAAM,WAAW,CAAC,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC;AACnD,MAAM,WAAW,CAAC,cAAc,GAAG,kBAAkB,CAAC,cAAc,CAAC;AACrE;AACA,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AAC/B,MAAM,MAAM,MAAM,CAAC,KAAK,EAAE,uBAAuB,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7E,MAAM,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,EAAE;AAC3E,QAAQ,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI;AACxD,OAAO,CAAC,CAAC;AACT,MAAM,KAAK,eAAe,GAAG;AAC7B,QAAQ,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;AACvD,QAAQ,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;AAC1D,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;AACjE,OAAO;AACP,MAAM,KAAK,UAAU,IAAI,WAAW,GAAG,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;AACxE,MAAM,OAAO,KAAK,CAAC;AACnB,KAAK;AACL;AACA,IAAI,KAAK,CAAC,QAAQ,GAAG;AACrB,MAAM,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,0CAA0C,EAAE;AACzF,QAAQ,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC;AACzD,OAAO,CAAC,CAAC,CAAC;AACV,MAAM,OAAO;AACb,KAAK;AACL;AACA;AACA,IAAI,KAAK,MAAM,CAAC,KAAK,GAAG;AACxB,MAAM,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAChD,MAAM,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,gBAAgB,EAAE,CAAC;AAC1D,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI;AAC3C,QAAQ,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;AAC5C,QAAQ,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;AAC1B,QAAQ,OAAO,MAAM,CAAC,CAAC,CAAC;AACxB,QAAQ,OAAO,MAAM,CAAC,CAAC,CAAC;AACxB,QAAQ,OAAO,MAAM,CAAC;AACtB,OAAO,CAAC,CAAC;AACT,MAAM,MAAM,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AACxE,KAAK;AACL,IAAI,KAAK,eAAe,GAAG;AAC3B,MAAM,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;AACrD,MAAM,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;AACxD,KAAK;AACL;AACA;AACA,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG;AAC1B,MAAM,MAAM,WAAW,GAAG,gBAAgB,CAAC,MAAM,CAAC,EAAE;AACpD,QAAQ,EAAE,KAAK,QAAQ,CAAC,EAAE;AAC1B,WAAW,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;AAC/B,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1B;AACA,MAAM,MAAM,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;AAC9D,KAAK,MAAM,KAAK,UAAU,GAAG;AAC7B,MAAM,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;AAC1B,KAAK;AACL,IAAI,KAAK,UAAU,IAAI,WAAW,GAAG,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;AACxE,IAAI,OAAO,QAAQ,CAAC;AACpB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,0BAA0B,CAAC,IAAI,EAAE,YAAY,EAAE;AACxD,IAAI,YAAY,CAAC,IAAI,CAAC;AACtB,MAAM,IAAI,EAAE,sCAAsC;AAClD,MAAM,IAAI,EAAE,iCAAiC;AAC7C,MAAM,QAAQ,EAAE,EAAE,IAAI;AACtB,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AAC7D,QAAQ,OAAO,KAAK,CAAC,kBAAkB,EAAE,CAAC;AAC1C,OAAO;AACP,MAAM,SAAS,EAAE,EAAE,IAAI;AACvB,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;AACxE,QAAQ,KAAK,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,KAAK,CAAC;AACxD,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AAC7D,QAAQ,OAAO,KAAK,IAAI,KAAK,CAAC,aAAa,CAAC;AAC5C,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,kBAAkB,CAAC,QAAQ,EAAE;AACtC,IAAI,KAAK,OAAO,QAAQ,KAAK,QAAQ,GAAG,OAAO,QAAQ,CAAC;AACxD,IAAI,IAAI,aAAa,CAAC;AACtB,IAAI,KAAK,QAAQ,CAAC,KAAK,KAAK,QAAQ,GAAG;AACvC,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC;AACtC,KAAK,MAAM;AACX,MAAM,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC5D,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;AAC9E,KAAK;AACL,IAAI,IAAI,IAAI,GAAG,aAAa,CAAC;AAC7B,IAAI,KAAK,QAAQ,CAAC,KAAK,GAAG;AAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,2BAA2B,EAAE;AAC3D,QAAQ,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzE,QAAQ,IAAI,EAAE,aAAa;AAC3B,OAAO,CAAC,CAAC;AACT,KAAK;AACL,IAAI,IAAI,QAAQ,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACjE,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE;AACnC,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC3C,IAAI,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC9C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,uBAAuB,CAAC,GAAG,EAAE;AAC/B,IAAI,KAAK,CAAC,GAAG,GAAG,OAAO;AACvB,IAAI,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AACtB,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACpF,IAAI,MAAM,MAAM,CAAC,IAAI,MAAM,GAAG;AAC9B,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACpF,MAAM,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,YAAY,EAAE,EAAE;AACzE,QAAQ,MAAM,EAAE,KAAK,CAAC,kBAAkB,CAAC,GAAG;AAC5C,QAAQ,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC;AACjC,QAAQ,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,GAAG,QAAQ,GAAG,SAAS,CAAC;AACxE,QAAQ,MAAM,EAAE,QAAQ;AACxB,QAAQ,eAAe,EAAE,CAAC;AAC1B,QAAQ,MAAM,EAAE,IAAI;AACpB,OAAO,CAAC,CAAC;AACT,KAAK;AACL,GAAG;AACH;;ACjpFA;AACA;AACA;AACe,MAAM,cAAc,SAAS,aAAa,CAAC;AAC1D;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,CAAC;AACX;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC;AACP;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC;AACV;AACA;AACA;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,QAAQ,EAAE,CAAC,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;AAClD,MAAM,QAAQ,EAAE,0DAA0D;AAC1E,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,UAAU,GAAG;AACrB,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,GAAG;AAC7B,MAAM,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC;AAC7F,WAAW,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAClE,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACrG,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG;AACzB,MAAM,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;AACxB,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE,GAAG;AAC3D,QAAQ,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;AAC7E,QAAQ,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS;AAC7D,QAAQ,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC1C,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AAC5B,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChC,OAAO;AACP,KAAK;AACL;AACA,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnE,IAAI,MAAM,OAAO,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;AAC1F;AACA,IAAI,MAAM,cAAc,GAAG,EAAE,CAAC;AAC9B,IAAI,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAE,CAAC;AACzC,IAAI,MAAM,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG;AACtF,MAAM,KAAK,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS;AACzC,MAAM,cAAc,CAAC,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACxE,KAAK;AACL;AACA,IAAI,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK;AACvE,MAAM,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC5C,MAAM,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;AAC9C,MAAM,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3D,MAAM,OAAO,KAAK,CAAC;AACnB,KAAK,EAAE,EAAE,CAAC,CAAC;AACX;AACA,IAAI,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;AAC9C,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,IAAI,EAAE;AAC1B,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAClC,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACnE,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,KAAK,EAAE;AACxB,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACrE,SAAS,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACjD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;AAClB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,aAAa,CAAC,KAAK,EAAE;AAC7B,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC;AACjG,IAAI,KAAK,CAAC,YAAY,GAAG,OAAO;AAChC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;AAC1D,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AACvC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;AAClB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,CAAC,KAAK,EAAE;AACvB,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO,KAAK,CAAC;AACjG;AACA;AACA,IAAI,IAAI,IAAI,CAAC;AACb,IAAI,IAAI;AACR,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;AAClE,KAAK,CAAC,MAAM,GAAG,EAAE;AACjB,MAAM,OAAO,KAAK,CAAC;AACnB,KAAK;AACL;AACA,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,MAAM,GAAG,OAAO,KAAK,CAAC;AAC7C,IAAI,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAC9D;AACA,IAAI,IAAI;AACR,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAC/C,KAAK,CAAC,MAAM,GAAG,EAAE;AACjB,MAAM,OAAO,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACjD,KAAK;AACL;AACA;AACA,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,KAAK,CAAC;AACrD;AACA;AACA,IAAI,MAAM,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG;AACtF,MAAM,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,GAAG,SAAS;AAC1C,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;AACrD,QAAQ,OAAO,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,oDAAoD,CAAC,CAAC,CAAC;AAChH,OAAO;AACP,KAAK;AACL;AACA;AACA,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC;AACxE,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,KAAK,OAAO,KAAK,UAAU,KAAK,WAAW,GAAG;AAC3F,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAChD,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,OAAO,GAAG,OAAO,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;AACvF,QAAQ,uDAAuD,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE;AAC7G,OAAO,CAAC,CAAC;AACT,KAAK;AACL;AACA;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjC;AACA;AACA,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG;AACtD,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9B,MAAM,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AAC1B,KAAK;AACL;AACA,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;AAClB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,GAAG;AACvB,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC;AAC5D,IAAI,IAAI,MAAM,CAAC;AACf;AACA;AACA,IAAI,KAAK,YAAY,GAAG;AACxB,MAAM,MAAM,WAAW,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAChD,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;AAC3G,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AACjG,MAAM,OAAO,CAAC,uBAAuB,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;AAC5F,MAAM,OAAO,CAAC,wBAAwB,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AAC/E,KAAK;AACL;AACA;AACA,SAAS,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;AACvD;AACA,IAAI,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK;AAC7E,MAAM,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC;AACxC,MAAM,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AACvD,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,IAAI,GAAG,OAAO,KAAK,CAAC;AAC/D,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACX,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC;AAC1D,GAAG;AACH;;AChMe,MAAM,2BAA2B,SAAS,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;AACpF,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,OAAO;AACX,MAAM,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;AACjF,MAAM,OAAO,EAAE,IAAI,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE;AACvE,QAAQ,IAAI,EAAE,uCAAuC;AACrD,OAAO,CAAC;AACR,MAAM,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;AACvD,QAAQ,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,sCAAsC;AACpE,QAAQ,IAAI,EAAE,0CAA0C;AACxD,OAAO,CAAC;AACR,MAAM,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAChD,QAAQ,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI;AACnD,QAAQ,KAAK,EAAE,iCAAiC,EAAE,IAAI,EAAE,qCAAqC;AAC7F,OAAO,CAAC;AACR,MAAM,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;AAChH,MAAM,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AAC/G,MAAM,WAAW,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACvD,QAAQ,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;AACxE,QAAQ,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;AAC9E,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;AAC/E,OAAO,CAAC;AACR,KAAK,CAAC;AACN,GAAG;AACH;;ACtBA;AACA;AACA;AACA;AACe,MAAM,qBAAqB,SAAS,oBAAoB,CAAC;AACxE;AACA;AACA,EAAE,WAAW,QAAQ,GAAG;AACxB,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE;AACrD,MAAM,UAAU,EAAE;AAClB,QAAQ,aAAa,EAAE,2BAA2B;AAClD,OAAO;AACP,MAAM,KAAK,EAAE,EAAE;AACf,MAAM,IAAI,EAAE,yCAAyC;AACrD,MAAM,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,kCAAkC,CAAC;AACnE,MAAM,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,iCAAiC,CAAC;AACjE,MAAM,UAAU,EAAE,IAAI;AACtB,MAAM,IAAI,EAAE;AACZ,QAAQ,MAAM,EAAE,gBAAgB;AAChC,QAAQ,IAAI,EAAE,cAAc;AAC5B,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,MAAM,GAAG;AACf,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,CAAC,KAAK,EAAE;AAC5B,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,SAAS,CAAC;AACnD,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;AAChD,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAC;AACxF,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,eAAe,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;AAClD,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;AAC5C,IAAI,KAAK,CAAC,KAAK,IAAI,UAAU,GAAG,OAAO,EAAE,CAAC;AAC1C,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;AACtG,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,KAAK,EAAE;AACrB,IAAI,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;AAClC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;AACjE,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAC9C,IAAI,IAAI,KAAK,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACrC,IAAI,WAAW,KAAK,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;AACnD;AACA;AACA,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG;AACxC,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;AAChF,MAAM,KAAK,MAAM,GAAG,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,wCAAwC,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AACnH,MAAM,OAAO,KAAK,CAAC;AACnB,KAAK;AACL;AACA;AACA,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,KAAK,WAAW,CAAC,IAAI,GAAG;AACjD,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACrE,MAAM,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;AACjE,MAAM,IAAI,UAAU,CAAC;AACrB,MAAM,KAAK,WAAW,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC;AACvF,WAAW,KAAK,OAAO,KAAK,WAAW,CAAC,OAAO,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,UAAU,GAAG,OAAO,CAAC;AACrG,MAAM,KAAK,UAAU,GAAG;AACxB,QAAQ,KAAK,MAAM,GAAG,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,wCAAwC,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;AACtH,QAAQ,OAAO,KAAK,CAAC;AACrB,OAAO;AACP,KAAK;AACL;AACA;AACA,IAAI,MAAM,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC1C,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG;AAC/E,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAChD,MAAM,KAAK,MAAM,GAAG,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,sDAAsD,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACvH,MAAM,OAAO,KAAK,CAAC;AACnB,KAAK;AACL;AACA,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;;ACrHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,2BAA2B,SAAS,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;AAC5E;AACA,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,OAAO;AACX,MAAM,UAAU,EAAE,IAAI,eAAe,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;AAClF,MAAM,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAChD,QAAQ,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,sCAAsC;AACxG,OAAO,CAAC;AACR,MAAM,QAAQ,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACpD,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,qBAAqB,CAAC,CAAC;AAClG,OAAO,CAAC;AACR,MAAM,KAAK,EAAE,IAAI,YAAY,CAAC,IAAI,oBAAoB,EAAE,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC3E,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,WAAW,CAAC,MAAM,EAAE;AAC7B,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC9B,IAAI,KAAK,MAAM,CAAC,IAAI,KAAK,SAAS,GAAG,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;AAC5D,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AACtF,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACO,MAAM,oBAAoB,SAAS,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAC1E;AACA,EAAE,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE;AAC7B,IAAI,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;AACnD;AACA;AACA,IAAI,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC5C,IAAI,KAAK,GAAG,GAAG,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACpD;AACA,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE;AAC3B,IAAI,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAClC,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,GAAG,GAAG,OAAO,KAAK,CAAC;AACvC,IAAI,OAAO,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAC3C,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,QAAQ,CAAC,KAAK,EAAE;AAClB,IAAI,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACjC,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,cAAc,SAAS,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;AAC/D;AACA,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,OAAO;AACX,MAAM,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAClE,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,QAAQ,GAAG;AACxB,IAAI,OAAO;AACX,MAAM,KAAK,EAAE,uCAAuC;AACpD,MAAM,IAAI,EAAE,2CAA2C;AACvD,MAAM,SAAS,EAAE,KAAK;AACtB,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE;AACxC,IAAI,OAAO,IAAI,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;AACxD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,OAAO,GAAG,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,OAAO,GAAG,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC;AACxB,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,oBAAoB,SAAS,cAAc,CAAC;AACzD;AACA,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,OAAO;AACX,MAAM,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAClE,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,WAAW,QAAQ,GAAG;AACxB,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE;AACrD,MAAM,KAAK,EAAE,uCAAuC;AACpD,MAAM,IAAI,EAAE,2CAA2C;AACvD,MAAM,SAAS,EAAE,IAAI;AACrB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE;AACxC,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC3C,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC;AAC3C,IAAI,OAAO,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;AACtC,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,gBAAgB,SAAS,oBAAoB,CAAC;AAC3D;AACA,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,OAAO;AACX,MAAM,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AAC1E;AACA,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,WAAW,QAAQ,GAAG;AACxB,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE;AACrD,MAAM,KAAK,EAAE,mCAAmC;AAChD,MAAM,IAAI,EAAE,uCAAuC;AACnD,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,OAAO,GAAG;AAChB,IAAI,SAAS,IAAI,CAAC,KAAK;AACvB,MAAM,KAAK,KAAK,EAAE,OAAO,UAAU,CAAC;AACpC,MAAM,KAAK,IAAI,EAAE,OAAO,UAAU,CAAC;AACnC,MAAM,KAAK,GAAG,EAAE,OAAO,UAAU,CAAC;AAClC,MAAM,SAAS,OAAO,KAAK,CAAC,OAAO,CAAC;AACpC,KAAK;AACL,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,kBAAkB,SAAS,cAAc,CAAC;AACvD;AACA,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,OAAO;AACX,MAAM,MAAM,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AAClG,MAAM,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AACjG,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,WAAW,QAAQ,GAAG;AACxB,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE;AACrD,MAAM,KAAK,EAAE,qCAAqC;AAClD,MAAM,IAAI,EAAE,yCAAyC;AACrD,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;AAClD;AACA;AACA;AACA;AACA,EAAE,OAAO,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE;AACxC,IAAI,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;AAChE,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC;AACvF,IAAI,OAAO,IAAI,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACrF,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,OAAO,GAAG;AAChB,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,OAAO,IAAI,CAAC;AACnC,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,GAAG,GAAG;AACZ,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE,CAAC;AACjC,IAAI,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5B,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,WAAW,CAAC,MAAM,EAAE;AAC7B,IAAI,KAAK,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;AAC7C,IAAI,KAAK,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC;AAChD,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,sBAAsB,SAAS,oBAAoB,CAAC;AACjE;AACA,EAAE,WAAW,QAAQ,GAAG;AACxB,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE;AACrD,MAAM,KAAK,EAAE,yCAAyC;AACtD,MAAM,IAAI,EAAE,6CAA6C;AACzD,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,OAAO,GAAG;AAChB,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5G,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,KAAK,GAAG;AACrB,EAAE,MAAM,EAAE,cAAc;AACxB,EAAE,MAAM,EAAE,oBAAoB;AAC9B,EAAE,EAAE,EAAE,gBAAgB;AACtB,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,QAAQ,EAAE,sBAAsB;AAClC,CAAC;;;;;;;;;;;;;;AChUD;AACA;AACA;AACe,MAAM,gBAAgB,SAAS,iBAAiB,CAAC;AAChE;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,OAAO,EAAE,CAAC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,CAAC;AACpE,MAAM,QAAQ,EAAE,4DAA4D;AAC5E,MAAM,KAAK,EAAE,GAAG;AAChB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;AAClD,IAAI,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACpC,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE;AACtD,MAAM,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU;AAC3C,MAAM,iBAAiB,EAAE,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE;AAC/E,WAAW,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE;AAChE,MAAM,IAAI,EAAE,IAAI,CAAC,QAAQ;AACzB,MAAM,KAAK,EAAE,MAAM,CAAC,WAAW;AAC/B,QAAQ,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5F,OAAO;AACP,MAAM,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9E,MAAM,MAAM,EAAE,IAAI,CAAC,iBAAiB,EAAE;AACtC,MAAM,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,aAAa;AAC/C,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,GAAG;AACtB,IAAI,IAAI,SAAS,GAAG,IAAI,CAAC;AACzB,IAAI,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK;AACtF,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACpF,MAAM,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAChE,MAAM,KAAK,KAAK,GAAG;AACnB,QAAQ,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACjD,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,iBAAiB,CAAC;AACjD,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;AACjC,QAAQ,SAAS,GAAG,KAAK,CAAC;AAC1B,OAAO;AACP,MAAM,OAAO,GAAG,CAAC;AACjB,KAAK,EAAE,EAAE,CAAC,CAAC;AACX,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,CAAC,WAAW,EAAE;AAClC,IAAI,KAAK,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,KAAK,MAAM,GAAG;AAC1D,MAAM,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,IAAI,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;AAC7G,KAAK;AACL,IAAI,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC;AAC/C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE;AACtC,IAAI,MAAM,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,GAAG;AACpD,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AACtD,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,cAAc,CAAC,MAAM,EAAE;AAChC,IAAI,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK;AAChE,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAC3E,WAAW,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AAClC,MAAM,OAAO,GAAG,CAAC;AACjB,KAAK,EAAE,EAAE,CAAC,CAAC;AACX,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,0BAA0B,CAAC,aAAa,EAAE;AAC5C;AACA,IAAI,IAAI,SAAS,GAAG,IAAI,CAAC;AACzB,IAAI,MAAM,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG;AACtE,MAAM,KAAK,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AAC7F,WAAW,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG;AAC/D,QAAQ,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACjD,QAAQ,SAAS,GAAG,KAAK,CAAC;AAC1B,OAAO;AACP,KAAK;AACL,IAAI,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC/E,IAAI,OAAO,aAAa,CAAC;AACzB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,IAAI,EAAE;AAC1B,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAClC,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7G,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACtH,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,qBAAqB,CAAC,KAAK,EAAE;AAC/B,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;AAChC,IAAI,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;AAC7F,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;AAC/G,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,KAAK,EAAE;AACxB,IAAI,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;AAC/F,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,wCAAwC,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC;AACzF,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE;AACvC,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AACzD,IAAI,MAAM,UAAU,GAAG,oBAAoB,IAAI,QAAQ,CAAC;AACxD,IAAI,KAAK,UAAU,KAAK,OAAO,CAAC,aAAa,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG;AAC9F;AACA,MAAM,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK;AACnG,QAAQ,GAAG,CAAC,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AACnD,QAAQ,OAAO,GAAG,CAAC;AACnB,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AACd,MAAM,OAAO,CAAC,aAAa,CAAC,KAAK,KAAK,EAAE,CAAC;AACzC,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AACtE,MAAM,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AACxD,MAAM,MAAM,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG;AAC/E,QAAQ,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAC9E,QAAQ,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;AACrF,OAAO;AACP,KAAK;AACL,IAAI,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5E,GAAG;AACH;;ACxKA;AACA;AACA;AACe,MAAM,cAAc,SAAS,eAAe,CAAC;AAC5D;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,QAAQ,EAAE,0DAA0D;AAC1E,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE;AACtD,MAAM,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,OAAO;AACtE,MAAM,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO;AAC/D,KAAK,CAAC,CAAC;AACP,GAAG;AACH;;AClBA;AACA;AACA;AACe,MAAM,qBAAqB,SAAS,WAAW,CAAC;AAC/D;AACA;AACA,EAAE,WAAW,QAAQ,GAAG;AACxB,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE;AACrD,MAAM,UAAU,EAAE;AAClB,QAAQ,aAAa,EAAE,2BAA2B;AAClD,OAAO;AACP,MAAM,KAAK,EAAE,EAAE;AACf,MAAM,IAAI,EAAE,yCAAyC;AACrD,MAAM,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,kCAAkC,CAAC;AACnE,MAAM,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,iCAAiC,CAAC;AACjE,MAAM,UAAU,EAAE,IAAI;AACtB,MAAM,cAAc,EAAE,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AACpD,MAAM,IAAI,EAAE;AACZ,QAAQ,MAAM,EAAE,gBAAgB;AAChC,QAAQ,IAAI,EAAE,cAAc;AAC5B,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,KAAK,GAAG,KAAK,CAAC;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,MAAM,GAAG;AACf,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,UAAU,GAAG;AACnB,IAAI,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;AACjE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;AAChD,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;AACrD,IAAI,KAAK,CAAC,KAAK,GAAG,OAAO,IAAI,CAAC,KAAK,CAAC;AACpC,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;AACtD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,KAAK,EAAE;AACvB,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC;AAC9F,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC/C,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AACtE,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,OAAO,IAAI,CAAC;AAC3C,IAAI,OAAO,IAAI,SAAS,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AACjD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE;AACrB,IAAI,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AACtC,IAAI,KAAK,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,OAAO,KAAK,CAAC;AACpE,IAAI,MAAM,MAAM,CAAC,IAAI,IAAI,GAAG;AAC5B,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC;AACxC,KAAK;AACL,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;;;;;;;;;;;AChGA;AACK,MAAC,KAAK,GAAG,GAAG;AACjB;AACA;AACA,KAAK,CAAC,KAAK,GAAG,CAAC;AACf;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,CAAC,CAAC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,SAAS,GAAG;AAClB,EAAE,GAAG,EAAE;AACP,IAAI,KAAK,EAAE,kBAAkB;AAC7B,IAAI,YAAY,EAAE,sBAAsB;AACxC,IAAI,IAAI,EAAE,UAAU;AACpB,GAAG;AACH,EAAE,GAAG,EAAE;AACP,IAAI,KAAK,EAAE,kBAAkB;AAC7B,IAAI,YAAY,EAAE,sBAAsB;AACxC,IAAI,IAAI,EAAE,UAAU;AACpB,GAAG;AACH,EAAE,GAAG,EAAE;AACP,IAAI,KAAK,EAAE,kBAAkB;AAC7B,IAAI,YAAY,EAAE,sBAAsB;AACxC,IAAI,IAAI,EAAE,UAAU;AACpB,GAAG;AACH,EAAE,GAAG,EAAE;AACP,IAAI,KAAK,EAAE,kBAAkB;AAC7B,IAAI,YAAY,EAAE,sBAAsB;AACxC,IAAI,IAAI,EAAE,QAAQ;AAClB,IAAI,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;AAC5B,GAAG;AACH,EAAE,GAAG,EAAE;AACP,IAAI,KAAK,EAAE,kBAAkB;AAC7B,IAAI,YAAY,EAAE,sBAAsB;AACxC,IAAI,IAAI,EAAE,QAAQ;AAClB,IAAI,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;AAC5B,GAAG;AACH,EAAE,GAAG,EAAE;AACP,IAAI,KAAK,EAAE,kBAAkB;AAC7B,IAAI,YAAY,EAAE,sBAAsB;AACxC,IAAI,IAAI,EAAE,QAAQ;AAClB,IAAI,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;AAC5B,GAAG;AACH,EAAE,GAAG,EAAE;AACP,IAAI,KAAK,EAAE,kBAAkB;AAC7B,IAAI,YAAY,EAAE,sBAAsB;AACxC,IAAI,IAAI,EAAE,QAAQ;AAClB,IAAI,QAAQ,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE;AACxC,GAAG;AACH,EAAE,GAAG,EAAE;AACP,IAAI,KAAK,EAAE,kBAAkB;AAC7B,IAAI,YAAY,EAAE,sBAAsB;AACxC,IAAI,IAAI,EAAE,QAAQ;AAClB,IAAI,QAAQ,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE;AACxC,GAAG;AACH,CAAC,CAAC;AACF,WAAW,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC;AAC9D,WAAW,CAAC,WAAW,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AAC9D;AACA,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,sBAAsB,EAAE;AACrD,EAAE,GAAG,GAAG;AACR,IAAI,OAAO,CAAC,KAAK,CAAC,uBAAuB;AACzC,MAAM,mFAAmF;AACzF,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE;AAChD,KAAK,CAAC;AACN,IAAI,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AACpG,GAAG;AACH,CAAC,CAAC,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,iBAAiB,GAAG,KAAK,CAAC;AAChC;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,MAAM,GAAG;AACf,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE;AAClD,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE;AAClD,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE;AAClD,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE;AAClD,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE;AAClD,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE;AAClD,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE;AAClD,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE;AAClD,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE;AAClD,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE;AAClD,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE;AAClD,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE;AAClD,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE;AAClD,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE;AAClD,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE;AAClD,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE;AAClD,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE;AAClD,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE;AAClD,CAAC,CAAC;AACF,WAAW,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,UAAU,GAAG;AACnB,EAAE,EAAE,EAAE,mBAAmB;AACzB,EAAE,EAAE,EAAE,mBAAmB;AACzB,EAAE,EAAE,EAAE,mBAAmB;AACzB,EAAE,EAAE,EAAE,mBAAmB;AACzB,EAAE,EAAE,EAAE,mBAAmB;AACzB,EAAE,EAAE,EAAE,mBAAmB;AACzB,EAAE,EAAE,EAAE,mBAAmB;AACzB,EAAE,EAAE,EAAE,mBAAmB;AACzB,EAAE,EAAE,EAAE,mBAAmB;AACzB,CAAC,CAAC;AACF,WAAW,CAAC,YAAY,CAAC,CAAC;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,eAAe,GAAG;AACxB,EAAE,IAAI,EAAE,CAAC;AACT,EAAE,QAAQ,EAAE,CAAC;AACb,EAAE,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,WAAW,GAAG;AACpB,EAAE,CAAC,EAAE,sBAAsB;AAC3B,EAAE,CAAC,EAAE,0BAA0B;AAC/B,EAAE,CAAC,EAAE,yBAAyB;AAC9B,CAAC,CAAC;AACF,WAAW,CAAC,aAAa,CAAC,CAAC;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,mBAAmB,GAAG;AAC5B,EAAE,GAAG,EAAE,+BAA+B;AACtC,EAAE,GAAG,EAAE,gCAAgC;AACvC,CAAC,CAAC;AACF,WAAW,CAAC,qBAAqB,CAAC,CAAC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,sBAAsB,GAAG;AAC/B,EAAE,OAAO,EAAE,IAAI;AACf,EAAE,OAAO,EAAE,KAAK;AAChB,EAAE,OAAO,EAAE,KAAK;AAChB,EAAE,QAAQ,EAAE,KAAK;AACjB,EAAE,QAAQ,EAAE,KAAK;AACjB,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,SAAS,GAAG;AAClB,EAAE,SAAS,EAAE,kBAAkB;AAC/B,EAAE,OAAO,EAAE,kBAAkB;AAC7B,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,MAAM,EAAE,kBAAkB;AAC5B,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,KAAK,EAAE,kBAAkB;AAC3B,EAAE,MAAM,EAAE,kBAAkB;AAC5B,EAAE,QAAQ,EAAE,kBAAkB;AAC9B,EAAE,SAAS,EAAE,kBAAkB;AAC/B,EAAE,UAAU,EAAE,kBAAkB;AAChC,EAAE,OAAO,EAAE,kBAAkB;AAC7B,EAAE,OAAO,EAAE,kBAAkB;AAC7B,EAAE,YAAY,EAAE,kBAAkB;AAClC,EAAE,aAAa,EAAE,kBAAkB;AACnC,EAAE,OAAO,EAAE,kBAAkB;AAC7B,EAAE,KAAK,EAAE,kBAAkB;AAC3B,EAAE,aAAa,EAAE,kBAAkB;AACnC,EAAE,WAAW,EAAE,kBAAkB;AACjC,EAAE,OAAO,EAAE,kBAAkB;AAC7B,EAAE,SAAS,EAAE,kBAAkB;AAC/B,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,WAAW,EAAE,kBAAkB;AACjC,EAAE,GAAG,EAAE,kBAAkB;AACzB,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,YAAY,EAAE,kBAAkB;AAClC,EAAE,MAAM,EAAE,kBAAkB;AAC5B,EAAE,QAAQ,EAAE,kBAAkB;AAC9B,EAAE,UAAU,EAAE,kBAAkB;AAChC,EAAE,MAAM,EAAE,kBAAkB;AAC5B,EAAE,KAAK,EAAE,kBAAkB;AAC3B,EAAE,QAAQ,EAAE,kBAAkB;AAC9B,EAAE,KAAK,EAAE,kBAAkB;AAC3B,EAAE,OAAO,EAAE,kBAAkB;AAC7B,EAAE,OAAO,EAAE,kBAAkB;AAC7B,EAAE,SAAS,EAAE,kBAAkB;AAC/B,EAAE,IAAI,EAAE,kBAAkB;AAC1B,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,SAAS,GAAG;AAClB,EAAE,GAAG,EAAE,oBAAoB;AAC3B,EAAE,IAAI,EAAE,qBAAqB;AAC7B,EAAE,KAAK,EAAE,6BAA6B;AACtC,CAAC,CAAC;AACF,WAAW,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,iBAAiB,GAAG;AAC1B,EAAE,GAAG,KAAK,CAAC,SAAS;AACpB,EAAE,OAAO,EAAE,mBAAmB;AAC9B,CAAC,CAAC;AACF,WAAW,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,OAAO,GAAG;AAChB,EAAE,SAAS,EAAE,kBAAkB;AAC/B,EAAE,QAAQ,EAAE,kBAAkB;AAC9B,EAAE,MAAM,EAAE,kBAAkB;AAC5B,EAAE,YAAY,EAAE,kBAAkB;AAClC,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,SAAS,EAAE,kBAAkB;AAC/B,EAAE,YAAY,EAAE,kBAAkB;AAClC,EAAE,KAAK,EAAE,kBAAkB;AAC3B,EAAE,OAAO,EAAE,kBAAkB;AAC7B,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,QAAQ,EAAE,kBAAkB;AAC9B,EAAE,KAAK,EAAE,kBAAkB;AAC3B,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,WAAW,EAAE,kBAAkB;AACjC,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,OAAO,EAAE,kBAAkB;AAC7B,EAAE,aAAa,EAAE,kBAAkB;AACnC,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,KAAK,EAAE,kBAAkB;AAC3B,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,OAAO,EAAE,kBAAkB;AAC7B,EAAE,QAAQ,EAAE,kBAAkB;AAC9B,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,MAAM,EAAE,kBAAkB;AAC5B,EAAE,KAAK,EAAE,kBAAkB;AAC3B,EAAE,KAAK,EAAE,kBAAkB;AAC3B,EAAE,KAAK,EAAE,kBAAkB;AAC3B,EAAE,MAAM,EAAE,kBAAkB;AAC5B,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,MAAM,EAAE,kBAAkB;AAC5B,EAAE,UAAU,EAAE,kBAAkB;AAChC,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,iBAAiB,GAAG;AAC1B,EAAE,IAAI,EAAE,gBAAgB;AACxB,EAAE,KAAK,EAAE,iBAAiB;AAC1B,EAAE,MAAM,EAAE,kBAAkB;AAC5B,EAAE,IAAI,EAAE,gBAAgB;AACxB,EAAE,GAAG,EAAE,eAAe;AACtB,EAAE,KAAK,EAAE,iBAAiB;AAC1B,EAAE,IAAI,EAAE,gBAAgB;AACxB,CAAC,CAAC;AACF,WAAW,CAAC,mBAAmB,CAAC,CAAC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,oBAAoB,GAAG;AAC7B,EAAE,IAAI,EAAE,gBAAgB;AACxB,EAAE,IAAI,EAAE,oBAAoB;AAC5B,EAAE,IAAI,EAAE,gBAAgB;AACxB,CAAC,CAAC;AACF,WAAW,CAAC,sBAAsB,CAAC,CAAC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,kBAAkB,GAAG;AAC3B,EAAE,IAAI,EAAE,gBAAgB;AACxB,EAAE,IAAI,EAAE,eAAe;AACvB,CAAC,CAAC;AACF,WAAW,CAAC,oBAAoB,CAAC,CAAC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,WAAW,GAAG;AACpB,EAAE,GAAG,KAAK,CAAC,kBAAkB;AAC7B,EAAE,GAAG,KAAK,CAAC,oBAAoB;AAC/B,EAAE,GAAG,KAAK,CAAC,iBAAiB;AAC5B,CAAC,CAAC;AACF,WAAW,CAAC,aAAa,CAAC,CAAC;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,sBAAsB,GAAG;AAC/B,EAAE,MAAM,EAAE,cAAc;AACxB,EAAE,KAAK,EAAE,mBAAmB;AAC5B,EAAE,QAAQ,EAAE,gBAAgB;AAC5B,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,MAAM;AAClC,EAAE,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,IAAI;AAC9B,EAAE,GAAG,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG;AAC5B,EAAE,OAAO,EAAE,KAAK,CAAC,WAAW,CAAC,IAAI;AACjC,EAAE,SAAS,EAAE,4BAA4B;AACzC,EAAE,MAAM,EAAE,yBAAyB;AACnC,EAAE,IAAI,EAAE,uBAAuB;AAC/B,EAAE,IAAI,EAAE,yBAAyB;AACjC,CAAC,CAAC;AACF,WAAW,CAAC,wBAAwB,CAAC,CAAC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,uBAAuB,GAAG;AAChC,EAAE,IAAI,EAAE,yBAAyB;AACjC,EAAE,SAAS,EAAE,wBAAwB;AACrC,EAAE,OAAO,EAAE,sBAAsB;AACjC,EAAE,QAAQ,EAAE,uBAAuB;AACnC,EAAE,OAAO,EAAE,sBAAsB;AACjC,CAAC,CAAC;AACF,WAAW,CAAC,yBAAyB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,UAAU,GAAG;AACnB,EAAE,IAAI,EAAE,gBAAgB;AACxB,EAAE,EAAE,EAAE,iBAAiB;AACvB,EAAE,GAAG,EAAE,kBAAkB;AACzB,EAAE,EAAE,EAAE,iBAAiB;AACvB,EAAE,IAAI,EAAE,gBAAgB;AACxB,EAAE,GAAG,EAAE,sBAAsB;AAC7B,CAAC,CAAC;AACF,WAAW,CAAC,YAAY,CAAC,CAAC;AAC1B;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,UAAU,GAAG;AACnB,EAAE,IAAI,EAAE,GAAG;AACX,EAAE,EAAE,EAAE,CAAC;AACP,EAAE,GAAG,EAAE,CAAC;AACR,EAAE,EAAE,EAAE,CAAC;AACP,EAAE,IAAI,EAAE,CAAC;AACT,EAAE,GAAG,EAAE,CAAC;AACR,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,aAAa,GAAG;AACtB,EAAE,MAAM,EAAE,QAAQ;AAClB,EAAE,OAAO,EAAE,QAAQ;AACnB,EAAE,IAAI,EAAE,QAAQ;AAChB,EAAE,OAAO,EAAE,QAAQ;AACnB,EAAE,MAAM,EAAE,QAAQ;AAClB,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,aAAa,GAAG;AACtB,EAAE,UAAU,EAAE,0BAA0B;AACxC,EAAE,KAAK,EAAE,qBAAqB;AAC9B,EAAE,SAAS,EAAE,yBAAyB;AACtC,EAAE,SAAS,EAAE,yBAAyB;AACtC,EAAE,MAAM,EAAE,sBAAsB;AAChC,EAAE,SAAS,EAAE,yBAAyB;AACtC,EAAE,GAAG,EAAE,mBAAmB;AAC1B,EAAE,KAAK,EAAE,qBAAqB;AAC9B,EAAE,KAAK,EAAE,qBAAqB;AAC9B,EAAE,QAAQ,EAAE,wBAAwB;AACpC,EAAE,WAAW,EAAE,2BAA2B;AAC1C,EAAE,IAAI,EAAE,oBAAoB;AAC5B,EAAE,KAAK,EAAE,qBAAqB;AAC9B,EAAE,MAAM,EAAE,sBAAsB;AAChC,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,eAAe,GAAG;AACxB,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,KAAK,EAAE,mBAAmB;AAC5B,CAAC,CAAC;AACF,WAAW,CAAC,iBAAiB,CAAC,CAAC;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,iBAAiB,GAAG;AAC1B,EAAE,KAAK,EAAE,kCAAkC;AAC3C,EAAE,MAAM,EAAE,mCAAmC;AAC7C,CAAC,CAAC;AACF,WAAW,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,UAAU,GAAG;AACnB,EAAE,MAAM,EAAE,wBAAwB;AAClC,EAAE,QAAQ,EAAE,0BAA0B;AACtC,EAAE,IAAI,EAAE,sBAAsB;AAC9B,EAAE,QAAQ,EAAE,0BAA0B;AACtC,EAAE,SAAS,EAAE,2BAA2B;AACxC,EAAE,QAAQ,EAAE,0BAA0B;AACtC,CAAC,CAAC;AACF,WAAW,CAAC,YAAY,CAAC,CAAC;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,iBAAiB,GAAG;AAC1B,EAAE,EAAE,EAAE,iBAAiB;AACvB,EAAE,EAAE,EAAE,gBAAgB;AACtB,EAAE,GAAG,EAAE,WAAW;AAClB,EAAE,OAAO,EAAE,eAAe;AAC1B,CAAC,CAAC;AACF,WAAW,CAAC,mBAAmB,CAAC,CAAC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,UAAU,GAAG;AACnB,EAAE,KAAK,EAAE,sBAAsB;AAC/B,EAAE,MAAM,EAAE,uBAAuB;AACjC,EAAE,KAAK,EAAE,sBAAsB;AAC/B,EAAE,OAAO,EAAE,wBAAwB;AACnC,EAAE,MAAM,EAAE,uBAAuB;AACjC,CAAC,CAAC;AACF,WAAW,CAAC,YAAY,CAAC,CAAC;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,kBAAkB,GAAG;AAC3B,EAAE,QAAQ,EAAE,yBAAyB;AACrC,EAAE,OAAO,EAAE,wBAAwB;AACnC,EAAE,OAAO,EAAE,wBAAwB;AACnC,CAAC,CAAC;AACF,WAAW,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,cAAc,GAAG;AACvB,EAAE,GAAG,KAAK,CAAC,kBAAkB;AAC7B,EAAE,GAAG,KAAK,CAAC,UAAU;AACrB,CAAC,CAAC;AACF,WAAW,CAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,YAAY,GAAG;AACrB,EAAE,GAAG,EAAE,sBAAsB;AAC7B,EAAE,IAAI,EAAE,uBAAuB;AAC/B,EAAE,KAAK,EAAE,wBAAwB;AACjC,EAAE,KAAK,EAAE,wBAAwB;AACjC,CAAC,CAAC;AACF,WAAW,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,kBAAkB,GAAG;AAC3B,EAAE,GAAG,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK;AACjC,EAAE,GAAG,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM;AAClC,EAAE,GAAG,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK;AACjC,EAAE,GAAG,EAAE,kCAAkC;AACzC,CAAC,CAAC;AACF,WAAW,CAAC,oBAAoB,CAAC,CAAC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,qBAAqB,GAAG;AAC9B,EAAE,OAAO,EAAE,IAAI;AACf,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,KAAK,EAAE,KAAK;AACd,EAAE,MAAM,EAAE,KAAK;AACf,EAAE,KAAK,EAAE,KAAK;AACd,EAAE,MAAM,EAAE,KAAK;AACf,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,QAAQ,GAAG;AACjB,EAAE,WAAW,EAAE,kBAAkB;AACjC,EAAE,SAAS,EAAE,kBAAkB;AAC/B,EAAE,UAAU,EAAE,kBAAkB;AAChC,EAAE,SAAS,EAAE,kBAAkB;AAC/B,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,OAAO,EAAE,kBAAkB;AAC7B,EAAE,MAAM,EAAE,kBAAkB;AAC5B,EAAE,KAAK,EAAE,kBAAkB;AAC3B,EAAE,QAAQ,EAAE,kBAAkB;AAC9B,EAAE,SAAS,EAAE,kBAAkB;AAC/B,EAAE,MAAM,EAAE,kBAAkB;AAC5B,EAAE,OAAO,EAAE,kBAAkB;AAC7B,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,SAAS,GAAG;AAClB,EAAE,MAAM,EAAE,kBAAkB;AAC5B,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,YAAY,GAAG;AACrB,EAAE,IAAI,EAAE;AACR,IAAI,KAAK,EAAE,sBAAsB;AACjC,IAAI,OAAO,EAAE,qBAAqB;AAClC,GAAG;AACH,EAAE,OAAO,EAAE;AACX,IAAI,KAAK,EAAE,yBAAyB;AACpC,IAAI,OAAO,EAAE,qBAAqB;AAClC,GAAG;AACH,EAAE,OAAO,EAAE;AACX,IAAI,KAAK,EAAE,2BAA2B;AACtC,IAAI,OAAO,EAAE,2CAA2C;AACxD,GAAG;AACH,EAAE,IAAI,EAAE;AACR,IAAI,KAAK,EAAE,sBAAsB;AACjC,IAAI,OAAO,EAAE,yBAAyB;AACtC,GAAG;AACH,EAAE,QAAQ,EAAE;AACZ,IAAI,KAAK,EAAE,0BAA0B;AACrC,IAAI,OAAO,EAAE,yBAAyB;AACtC,GAAG;AACH,EAAE,aAAa,EAAE;AACjB,IAAI,KAAK,EAAE,+BAA+B;AAC1C,IAAI,OAAO,EAAE,8CAA8C;AAC3D,GAAG;AACH,EAAE,aAAa,EAAE;AACjB,IAAI,KAAK,EAAE,oCAAoC;AAC/C,IAAI,OAAO,EAAE,8CAA8C;AAC3D,GAAG;AACH,EAAE,MAAM,EAAE;AACV,IAAI,KAAK,EAAE,wBAAwB;AACnC,GAAG;AACH,CAAC,CAAC;AACF,WAAW,CAAC,cAAc,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,eAAe,GAAG;AACxB,EAAE,IAAI,EAAE,sBAAsB;AAC9B,EAAE,MAAM,EAAE,wBAAwB;AAClC,EAAE,MAAM,EAAE,wBAAwB;AAClC,EAAE,IAAI,EAAE,sBAAsB;AAC9B,EAAE,MAAM,EAAE,wBAAwB;AAClC,EAAE,IAAI,EAAE,sBAAsB;AAC9B,EAAE,GAAG,EAAE,qBAAqB;AAC5B,EAAE,OAAO,EAAE,yBAAyB;AACpC,CAAC,CAAC;AACF,WAAW,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,YAAY,GAAG;AACrB,EAAE,UAAU,EAAE;AACd,IAAI,KAAK,EAAE,0BAA0B;AACrC,GAAG;AACH,EAAE,KAAK,EAAE;AACT,IAAI,KAAK,EAAE,qBAAqB;AAChC,IAAI,QAAQ,EAAE;AACd,MAAM,iBAAiB,EAAE,sCAAsC;AAC/D,MAAM,eAAe,EAAE,oCAAoC;AAC3D,MAAM,eAAe,EAAE,oCAAoC;AAC3D,MAAM,kBAAkB,EAAE,uCAAuC;AACjE,MAAM,mBAAmB,EAAE,wCAAwC;AACnE,MAAM,aAAa,EAAE,kCAAkC;AACvD,MAAM,WAAW,EAAE,gCAAgC;AACnD,MAAM,EAAE,EAAE,uBAAuB;AACjC,MAAM,QAAQ,EAAE,6BAA6B;AAC7C,MAAM,SAAS,EAAE,8BAA8B;AAC/C,MAAM,WAAW,EAAE,gCAAgC;AACnD,MAAM,IAAI,EAAE,6BAA6B;AACzC,MAAM,YAAY,EAAE,iCAAiC;AACrD,MAAM,IAAI,EAAE,yBAAyB;AACrC,MAAM,sBAAsB,EAAE,2CAA2C;AACzE,KAAK;AACL,GAAG;AACH,EAAE,OAAO,EAAE;AACX,IAAI,KAAK,EAAE,uBAAuB;AAClC,GAAG;AACH,EAAE,IAAI,EAAE;AACR,IAAI,KAAK,EAAE,oBAAoB;AAC/B,GAAG;AACH,EAAE,IAAI,EAAE;AACR,IAAI,KAAK,EAAE,oBAAoB;AAC/B,GAAG;AACH,CAAC,CAAC;AACF,WAAW,CAAC,cAAc,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;AAC9C,WAAW,CAAC,6BAA6B,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,UAAU,GAAG;AACnB,EAAE,EAAE,EAAE;AACN,IAAI,KAAK,EAAE,kBAAkB;AAC7B,IAAI,YAAY,EAAE,sBAAsB;AACxC,IAAI,UAAU,EAAE,GAAG;AACnB,GAAG;AACH,EAAE,EAAE,EAAE;AACN,IAAI,KAAK,EAAE,kBAAkB;AAC7B,IAAI,YAAY,EAAE,sBAAsB;AACxC,IAAI,UAAU,EAAE,CAAC;AACjB,GAAG;AACH,EAAE,EAAE,EAAE;AACN,IAAI,KAAK,EAAE,kBAAkB;AAC7B,IAAI,YAAY,EAAE,sBAAsB;AACxC,IAAI,UAAU,EAAE,CAAC;AACjB,GAAG;AACH,EAAE,EAAE,EAAE;AACN,IAAI,KAAK,EAAE,kBAAkB;AAC7B,IAAI,YAAY,EAAE,sBAAsB;AACxC,IAAI,UAAU,EAAE,EAAE;AAClB,GAAG;AACH,EAAE,EAAE,EAAE;AACN,IAAI,KAAK,EAAE,kBAAkB;AAC7B,IAAI,YAAY,EAAE,sBAAsB;AACxC,IAAI,UAAU,EAAE,GAAG;AACnB,GAAG;AACH,CAAC,CAAC;AACF,WAAW,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,mBAAmB,GAAG;AAC5B,EAAE,WAAW,EAAE,yBAAyB;AACxC,EAAE,QAAQ,EAAE,sBAAsB;AAClC,EAAE,QAAQ,EAAE,sBAAsB;AAClC,CAAC,CAAC;AACF,WAAW,CAAC,qBAAqB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,WAAW,GAAG;AACpB,EAAE,GAAG,KAAK,CAAC,mBAAmB;AAC9B,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,KAAK,EAAE,mBAAmB;AAC5B,EAAE,SAAS,EAAE,uBAAuB;AACpC,EAAE,QAAQ,EAAE,sBAAsB;AAClC,EAAE,MAAM,EAAE,oBAAoB;AAC9B,EAAE,OAAO,EAAE,qBAAqB;AAChC,EAAE,OAAO,EAAE,qBAAqB;AAChC,EAAE,OAAO,EAAE,qBAAqB;AAChC,CAAC,CAAC;AACF,WAAW,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,qBAAqB,GAAG;AAC9B,EAAE,GAAG,KAAK,CAAC,WAAW;AACtB,EAAE,QAAQ,EAAE,sBAAsB;AAClC,CAAC,CAAC;AACF,WAAW,CAAC,uBAAuB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,YAAY,GAAG;AACrB,EAAE,OAAO,EAAE,eAAe;AAC1B,EAAE,MAAM,EAAE,mBAAmB;AAC7B,CAAC,CAAC;AACF,WAAW,CAAC,cAAc,CAAC,CAAC;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,aAAa,GAAG;AACtB,EAAE,MAAM,EAAE,sBAAsB;AAChC,EAAE,KAAK,EAAE,qBAAqB;AAC9B,EAAE,GAAG,EAAE,mBAAmB;AAC1B,EAAE,IAAI,EAAE,oBAAoB;AAC5B,EAAE,IAAI,EAAE,oBAAoB;AAC5B,CAAC,CAAC;AACF,WAAW,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,aAAa,GAAG;AACtB,EAAE,EAAE,EAAE,cAAc;AACpB,EAAE,EAAE,EAAE,cAAc;AACpB,EAAE,CAAC,EAAE,aAAa;AAClB,EAAE,EAAE,EAAE,cAAc;AACpB,CAAC,CAAC;AACF,WAAW,CAAC,eAAe,CAAC,CAAC;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,UAAU,GAAG;AACnB,EAAE,IAAI,EAAE,gBAAgB;AACxB,EAAE,KAAK,EAAE,iBAAiB;AAC1B,EAAE,IAAI,EAAE,eAAe;AACvB,EAAE,GAAG,EAAE,eAAe;AACtB,CAAC,CAAC;AACF,WAAW,CAAC,YAAY,CAAC,CAAC;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,aAAa,GAAG;AACtB,EAAE,GAAG,KAAK,CAAC,aAAa;AACxB,EAAE,GAAG,KAAK,CAAC,UAAU;AACrB,CAAC,CAAC;AACF,WAAW,CAAC,eAAe,CAAC,CAAC;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,WAAW,GAAG;AACpB,EAAE,iBAAiB,EAAE;AACrB,IAAI,QAAQ,EAAE,EAAE;AAChB,IAAI,MAAM,EAAE,GAAG;AACf,GAAG;AACH,EAAE,aAAa,EAAE;AACjB,IAAI,QAAQ,EAAE,EAAE;AAChB,IAAI,MAAM,EAAE,GAAG;AACf,GAAG;AACH,EAAE,uBAAuB,EAAE;AAC3B,IAAI,QAAQ,EAAE,IAAI;AAClB,IAAI,MAAM,EAAE,IAAI;AAChB,GAAG;AACH,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,qBAAqB,GAAG;AAC9B,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,KAAK,EAAE,mBAAmB;AAC5B,EAAE,QAAQ,EAAE,sBAAsB;AAClC,EAAE,MAAM,EAAE,oBAAoB;AAC9B,EAAE,KAAK,EAAE,mBAAmB;AAC5B,CAAC,CAAC;AACF,WAAW,CAAC,uBAAuB,CAAC,CAAC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,eAAe,GAAG;AACxB,EAAE,MAAM,EAAE;AACV,IAAI,KAAK,EAAE,oBAAoB;AAC/B,IAAI,QAAQ,EAAE,QAAQ;AACtB,GAAG;AACH,EAAE,MAAM,EAAE;AACV,IAAI,KAAK,EAAE,oBAAoB;AAC/B,IAAI,QAAQ,EAAE,QAAQ;AACtB,GAAG;AACH,EAAE,QAAQ,EAAE;AACZ,IAAI,KAAK,EAAE,sBAAsB;AACjC,IAAI,QAAQ,EAAE,QAAQ;AACtB,GAAG;AACH,EAAE,IAAI,EAAE;AACR,IAAI,KAAK,EAAE,kBAAkB;AAC7B,IAAI,QAAQ,EAAE,MAAM;AACpB,GAAG;AACH,EAAE,MAAM,EAAE;AACV,IAAI,KAAK,EAAE,oBAAoB;AAC/B,IAAI,QAAQ,EAAE,MAAM;AACpB,GAAG;AACH,EAAE,IAAI,EAAE;AACR,IAAI,KAAK,EAAE,kBAAkB;AAC7B,IAAI,QAAQ,EAAE,MAAM;AACpB,GAAG;AACH,EAAE,IAAI,EAAE;AACR,IAAI,KAAK,EAAE,kBAAkB;AAC7B,IAAI,QAAQ,EAAE,KAAK;AACnB,GAAG;AACH,EAAE,IAAI,EAAE;AACR,IAAI,KAAK,EAAE,kBAAkB;AAC7B,IAAI,QAAQ,EAAE,KAAK;AACnB,GAAG;AACH,CAAC,CAAC;AACF,WAAW,CAAC,iBAAiB,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,WAAW,GAAG;AACpB,EAAE,GAAG,KAAK,CAAC,qBAAqB;AAChC,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5F,CAAC,CAAC;AACF,WAAW,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,WAAW,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,MAAM,GAAG;AACf,EAAE,UAAU,EAAE,uBAAuB;AACrC,EAAE,UAAU,EAAE,uBAAuB;AACrC,EAAE,WAAW,EAAE,wBAAwB;AACvC,EAAE,SAAS,EAAE,sBAAsB;AACnC,CAAC,CAAC;AACF,WAAW,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,gBAAgB,GAAG;AACzB,EAAE,CAAC,CAAC,CAAC;AACL,EAAE,CAAC,CAAC,CAAC;AACL,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACR,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACR,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACX,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACX,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACd,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACd,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACjB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACjB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACpB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACpB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACvB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACvB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC1B,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC1B,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC7B,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC7B,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC7B,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC7B,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,qBAAqB,GAAG;AAC9B,EAAE,QAAQ,EAAE,yBAAyB;AACrC,EAAE,IAAI,EAAE,iBAAiB;AACzB,EAAE,MAAM,EAAE,uBAAuB;AACjC,EAAE,MAAM,EAAE,uBAAuB;AACjC,EAAE,MAAM,EAAE,uBAAuB;AACjC,CAAC,CAAC;AACF,WAAW,CAAC,uBAAuB,CAAC,CAAC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,gBAAgB,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,iBAAiB,GAAG;AAC1B,EAAE,OAAO,EAAE;AACX,IAAI,KAAK,EAAE,wBAAwB;AACnC,IAAI,WAAW,EAAE;AACjB,MAAM,IAAI,EAAE;AACZ,QAAQ,KAAK,EAAE,qBAAqB;AACpC,QAAQ,OAAO,EAAE,CAAC;AAClB,OAAO;AACP,MAAM,IAAI,EAAE;AACZ,QAAQ,KAAK,EAAE,qBAAqB;AACpC,QAAQ,OAAO,EAAE,CAAC;AAClB,OAAO;AACP,MAAM,KAAK,EAAE;AACb,QAAQ,KAAK,EAAE,sBAAsB;AACrC,QAAQ,OAAO,EAAE,CAAC;AAClB,OAAO;AACP,MAAM,SAAS,EAAE;AACjB,QAAQ,KAAK,EAAE,oBAAoB;AACnC,QAAQ,OAAO,EAAE,CAAC;AAClB,QAAQ,OAAO,EAAE,IAAI;AACrB,OAAO;AACP,KAAK;AACL,GAAG;AACH,EAAE,IAAI,EAAE;AACR,IAAI,KAAK,EAAE,qBAAqB;AAChC,GAAG;AACH,CAAC,CAAC;AACF,WAAW,CAAC,mBAAmB,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/D,WAAW,CAAC,uCAAuC,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,gBAAgB,GAAG;AACzB,EAAE,IAAI,EAAE,iBAAiB;AACzB,EAAE,IAAI,EAAE,qBAAqB;AAC7B,EAAE,IAAI,EAAE,qBAAqB;AAC7B,EAAE,KAAK,EAAE,sBAAsB;AAC/B,EAAE,IAAI,EAAE,qBAAqB;AAC7B,EAAE,SAAS,EAAE,oBAAoB;AACjC,CAAC,CAAC;AACF,WAAW,CAAC,kBAAkB,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,WAAW,GAAG;AACpB,EAAE,CAAC,EAAE,mBAAmB;AACxB,EAAE,CAAC,EAAE,mBAAmB;AACxB,EAAE,CAAC,EAAE,mBAAmB;AACxB,EAAE,CAAC,EAAE,mBAAmB;AACxB,EAAE,CAAC,EAAE,mBAAmB;AACxB,EAAE,CAAC,EAAE,mBAAmB;AACxB,EAAE,CAAC,EAAE,mBAAmB;AACxB,EAAE,CAAC,EAAE,mBAAmB;AACxB,EAAE,CAAC,EAAE,mBAAmB;AACxB,EAAE,CAAC,EAAE,mBAAmB;AACxB,CAAC,CAAC;AACF,WAAW,CAAC,aAAa,CAAC,CAAC;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,iBAAiB,GAAG;AAC1B,EAAE,IAAI,EAAE,iBAAiB;AACzB,EAAE,OAAO,EAAE,oBAAoB;AAC/B,EAAE,KAAK,EAAE,kBAAkB;AAC3B,CAAC,CAAC;AACF,WAAW,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,eAAe,GAAG;AACxB,EAAE,KAAK,EAAE;AACT,IAAI,KAAK,EAAE,uBAAuB;AAClC,IAAI,IAAI,EAAE,2BAA2B;AACrC,GAAG;AACH,EAAE,OAAO,EAAE;AACX,IAAI,KAAK,EAAE,wBAAwB;AACnC,IAAI,IAAI,EAAE,4BAA4B;AACtC,GAAG;AACH,EAAE,QAAQ,EAAE;AACZ,IAAI,KAAK,EAAE,yBAAyB;AACpC,IAAI,IAAI,EAAE,6BAA6B;AACvC,GAAG;AACH,CAAC,CAAC;AACF,WAAW,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,SAAS,GAAG;AAClB,EAAE,aAAa,EAAE;AACjB,IAAI,KAAK,EAAE,qBAAqB;AAChC,IAAI,IAAI,EAAE,yBAAyB;AACnC,GAAG;AACH,EAAE,MAAM,EAAE;AACV,IAAI,KAAK,EAAE,cAAc;AACzB,IAAI,IAAI,EAAE,kBAAkB;AAC5B,GAAG;AACH,CAAC,CAAC;AACF,WAAW,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,YAAY,GAAG;AACrB,EAAE,GAAG,EAAE,iBAAiB;AACxB,EAAE,GAAG,EAAE,iBAAiB;AACxB,EAAE,GAAG,EAAE,iBAAiB;AACxB,EAAE,GAAG,EAAE,iBAAiB;AACxB,EAAE,GAAG,EAAE,iBAAiB;AACxB,EAAE,GAAG,EAAE,iBAAiB;AACxB,EAAE,GAAG,EAAE,iBAAiB;AACxB,EAAE,GAAG,EAAE,iBAAiB;AACxB,CAAC,CAAC;AACF,WAAW,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,cAAc,GAAG;AACvB,EAAE,CAAC,EAAE,kBAAkB;AACvB,EAAE,CAAC,EAAE,kBAAkB;AACvB,EAAE,CAAC,EAAE,kBAAkB;AACvB,EAAE,CAAC,EAAE,kBAAkB;AACvB,EAAE,CAAC,EAAE,kBAAkB;AACvB,EAAE,CAAC,EAAE,kBAAkB;AACvB,EAAE,CAAC,EAAE,kBAAkB;AACvB,EAAE,CAAC,EAAE,kBAAkB;AACvB,EAAE,CAAC,EAAE,kBAAkB;AACvB,EAAE,CAAC,EAAE,kBAAkB;AACvB,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,WAAW,GAAG;AACpB,EAAE,OAAO,EAAE,qBAAqB;AAChC,EAAE,OAAO,EAAE,qBAAqB;AAChC,EAAE,QAAQ,EAAE,sBAAsB;AAClC,EAAE,QAAQ,EAAE,sBAAsB;AAClC,EAAE,OAAO,EAAE,qBAAqB;AAChC,EAAE,MAAM,EAAE,oBAAoB;AAC9B,EAAE,KAAK,EAAE,mBAAmB;AAC5B,CAAC,CAAC;AACF,WAAW,CAAC,aAAa,CAAC,CAAC;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,wBAAwB,GAAG;AACjC,EAAE,GAAG,EAAE,2BAA2B;AAClC,EAAE,GAAG,EAAE,2BAA2B;AAClC,EAAE,GAAG,EAAE,2BAA2B;AAClC,CAAC,CAAC;AACF,WAAW,CAAC,0BAA0B,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,gBAAgB,GAAG;AACzB,EAAE,GAAG,KAAK,CAAC,wBAAwB;AACnC,EAAE,GAAG,EAAE,2BAA2B;AAClC,EAAE,GAAG,EAAE,2BAA2B;AAClC,EAAE,GAAG,EAAE,2BAA2B;AAClC,EAAE,GAAG,EAAE,2BAA2B;AAClC,EAAE,GAAG,EAAE,2BAA2B;AAClC,EAAE,GAAG,EAAE,2BAA2B;AAClC,EAAE,GAAG,EAAE,2BAA2B;AAClC,EAAE,GAAG,EAAE,2BAA2B;AAClC,EAAE,GAAG,EAAE,2BAA2B;AAClC,EAAE,GAAG,EAAE,2BAA2B;AAClC,EAAE,GAAG,EAAE,2BAA2B;AAClC,EAAE,GAAG,EAAE,2BAA2B;AAClC,EAAE,GAAG,EAAE,2BAA2B;AAClC,EAAE,GAAG,EAAE,2BAA2B;AAClC,CAAC,CAAC;AACF,WAAW,CAAC,kBAAkB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,WAAW,GAAG;AACpB,EAAE,KAAK,EAAE,aAAa;AACtB,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,iBAAiB,GAAG;AAC1B,EAAE,YAAY,EAAE,6BAA6B;AAC7C,EAAE,UAAU,EAAE,2BAA2B;AACzC,EAAE,SAAS,EAAE,0BAA0B;AACvC,EAAE,UAAU,EAAE,2BAA2B;AACzC,EAAE,UAAU,EAAE,2BAA2B;AACzC,EAAE,WAAW,EAAE,4BAA4B;AAC3C,EAAE,SAAS,EAAE,0BAA0B;AACvC,EAAE,SAAS,EAAE,0BAA0B;AACvC,EAAE,UAAU,EAAE,2BAA2B;AACzC,EAAE,SAAS,EAAE,0BAA0B;AACvC,EAAE,OAAO,EAAE,wBAAwB;AACnC,EAAE,UAAU,EAAE,2BAA2B;AACzC,EAAE,QAAQ,EAAE,yBAAyB;AACrC,CAAC,CAAC;AACF,WAAW,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACjD;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,uBAAuB,GAAG;AAChC,EAAE,MAAM,EAAE,uBAAuB;AACjC,EAAE,iBAAiB,EAAE,kCAAkC;AACvD,EAAE,YAAY,EAAE,6BAA6B;AAC7C,EAAE,eAAe,EAAE,gCAAgC;AACnD,EAAE,UAAU,EAAE,8BAA8B;AAC5C,EAAE,WAAW,EAAE,4BAA4B;AAC3C,EAAE,WAAW,EAAE,4BAA4B;AAC3C,EAAE,gBAAgB,EAAE,iCAAiC;AACrD,CAAC,CAAC;AACF,WAAW,CAAC,yBAAyB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACvD;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,qBAAqB,GAAG;AAC9B,EAAE,SAAS,EAAE;AACb,IAAI,IAAI,EAAE,4BAA4B;AACtC,IAAI,KAAK,EAAE,0BAA0B;AACrC,IAAI,OAAO,EAAE;AACb,MAAM,OAAO,EAAE,IAAI;AACnB,MAAM,SAAS,EAAE,IAAI;AACrB,MAAM,UAAU,EAAE,IAAI;AACtB,MAAM,UAAU,EAAE,IAAI;AACtB,MAAM,WAAW,EAAE,IAAI;AACvB,MAAM,eAAe,EAAE,KAAK;AAC5B,KAAK;AACL,GAAG;AACH,EAAE,SAAS,EAAE;AACb,IAAI,IAAI,EAAE,uCAAuC;AACjD,IAAI,KAAK,EAAE,iBAAiB;AAC5B,IAAI,OAAO,EAAE;AACb,MAAM,eAAe,EAAE,KAAK;AAC5B,MAAM,WAAW,EAAE,KAAK;AACxB,MAAM,UAAU,EAAE,KAAK;AACvB,MAAM,gBAAgB,EAAE,KAAK;AAC7B,KAAK;AACL,GAAG;AACH,EAAE,aAAa,EAAE;AACjB,IAAI,IAAI,EAAE,4BAA4B;AACtC,IAAI,KAAK,EAAE,qBAAqB;AAChC,IAAI,OAAO,EAAE;AACb,MAAM,QAAQ,EAAE,IAAI;AACpB,KAAK;AACL,GAAG;AACH,CAAC,CAAC;AACF,WAAW,CAAC,uBAAuB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,iBAAiB,GAAG;AAC1B,EAAE,CAAC,EAAE,qBAAqB;AAC1B,EAAE,CAAC,EAAE,kBAAkB;AACvB,EAAE,GAAG,EAAE,sBAAsB;AAC7B,EAAE,CAAC,EAAE,iBAAiB;AACtB,CAAC,CAAC;AACF,WAAW,CAAC,mBAAmB,CAAC,CAAC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,KAAK,GAAG;AACd,EAAE,CAAC,EAAE,YAAY;AACjB,EAAE,EAAE,EAAE,iBAAiB;AACvB,EAAE,GAAG,EAAE,0BAA0B;AACjC,EAAE,CAAC,EAAE,kBAAkB;AACvB,CAAC,CAAC;AACF,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,mBAAmB,GAAG;AAC5B,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,oBAAoB;AAClH,EAAE,uBAAuB,EAAE,YAAY,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,kBAAkB;AACrG,EAAE,mBAAmB;AACrB,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,mBAAmB,GAAG;AAC5B,EAAE,eAAe,EAAE,aAAa,EAAE,qBAAqB,EAAE,UAAU,EAAE,kBAAkB,EAAE,mBAAmB;AAC5G,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,aAAa,EAAE,YAAY;AACnH,EAAE,cAAc;AAChB,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,cAAc,GAAG;AACvB,EAAE,OAAO,EAAE,kBAAkB;AAC7B,EAAE,OAAO,EAAE,kBAAkB;AAC7B,EAAE,QAAQ,EAAE,mBAAmB;AAC/B,EAAE,QAAQ,EAAE,mBAAmB;AAC/B,EAAE,UAAU,EAAE,qBAAqB;AACnC,EAAE,UAAU,EAAE,qBAAqB;AACnC,EAAE,QAAQ,EAAE,mBAAmB;AAC/B,EAAE,aAAa,EAAE,wBAAwB;AACzC,EAAE,SAAS,EAAE,oBAAoB;AACjC,EAAE,SAAS,EAAE,oBAAoB;AACjC,EAAE,SAAS,EAAE,oBAAoB;AACjC,EAAE,QAAQ,EAAE,mBAAmB;AAC/B,EAAE,KAAK,EAAE,gBAAgB;AACzB,EAAE,UAAU,EAAE,qBAAqB;AACnC,EAAE,OAAO,EAAE,kBAAkB;AAC7B,EAAE,WAAW,EAAE,sBAAsB;AACrC,CAAC,CAAC;AACF,WAAW,CAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9C;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,SAAS,GAAG;AAClB,EAAE,MAAM,EAAE,uBAAuB;AACjC,EAAE,SAAS,EAAE,0BAA0B;AACvC,EAAE,OAAO,EAAE,wBAAwB;AACnC,EAAE,KAAK,EAAE,sBAAsB;AAC/B,EAAE,KAAK,EAAE,sBAAsB;AAC/B,EAAE,SAAS,EAAE,0BAA0B;AACvC,EAAE,IAAI,EAAE,2BAA2B;AACnC,EAAE,QAAQ,EAAE,yBAAyB;AACrC,EAAE,OAAO,EAAE,wBAAwB;AACnC,EAAE,QAAQ,EAAE,yBAAyB;AACrC,EAAE,MAAM,EAAE,uBAAuB;AACjC,EAAE,KAAK,EAAE,sBAAsB;AAC/B,EAAE,IAAI,EAAE,qBAAqB;AAC7B,EAAE,OAAO,EAAE,wBAAwB;AACnC,EAAE,MAAM,EAAE,uBAAuB;AACjC,EAAE,KAAK,EAAE,sBAAsB;AAC/B,EAAE,QAAQ,EAAE,yBAAyB;AACrC,EAAE,KAAK,EAAE,sBAAsB;AAC/B,EAAE,QAAQ,EAAE,yBAAyB;AACrC,EAAE,GAAG,EAAE,oBAAoB;AAC3B,EAAE,UAAU,EAAE,2BAA2B;AACzC,EAAE,MAAM,EAAE,uBAAuB;AACjC,EAAE,MAAM,EAAE,uBAAuB;AACjC,EAAE,IAAI,EAAE,4BAA4B;AACpC,EAAE,WAAW,EAAE,4BAA4B;AAC3C,CAAC,CAAC;AACF,WAAW,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACzC;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;AACpB;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,oBAAoB,GAAG;AAC7B,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM;AAC3E,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;AAChE,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,aAAa,GAAG;AACtB,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;AAC5G,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;AAC/F,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,MAAM,GAAG;AACf,EAAE,KAAK,EAAE;AACT,IAAI,KAAK,EAAE,kBAAkB;AAC7B,IAAI,SAAS,EAAE,WAAW;AAC1B,IAAI,QAAQ,EAAE,OAAO;AACrB,GAAG;AACH,EAAE,MAAM,EAAE;AACV,IAAI,KAAK,EAAE,sBAAsB;AACjC,IAAI,QAAQ,EAAE,OAAO;AACrB,GAAG;AACH,EAAE,SAAS,EAAE;AACb,IAAI,KAAK,EAAE,iBAAiB;AAC5B,GAAG;AACH,EAAE,EAAE,EAAE;AACN,IAAI,KAAK,EAAE,cAAc;AACzB,IAAI,SAAS,EAAE,aAAa;AAC5B,GAAG;AACH,EAAE,EAAE,EAAE;AACN,IAAI,KAAK,EAAE,cAAc;AACzB,IAAI,SAAS,EAAE,aAAa;AAC5B,GAAG;AACH,EAAE,EAAE,EAAE;AACN,IAAI,KAAK,EAAE,eAAe;AAC1B,IAAI,SAAS,EAAE,aAAa;AAC5B,GAAG;AACH,EAAE,EAAE,EAAE;AACN,IAAI,KAAK,EAAE,cAAc;AACzB,IAAI,SAAS,EAAE,gBAAgB;AAC/B,GAAG;AACH,EAAE,MAAM,EAAE;AACV,IAAI,KAAK,EAAE,uBAAuB;AAClC,IAAI,YAAY,EAAE,mBAAmB;AACrC,IAAI,SAAS,EAAE,qBAAqB;AACpC,IAAI,QAAQ,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,EAAE;AAC3D,GAAG;AACH,EAAE,KAAK,EAAE;AACT,IAAI,KAAK,EAAE,sBAAsB;AACjC,IAAI,YAAY,EAAE,kBAAkB;AACpC,IAAI,SAAS,EAAE,oBAAoB;AACnC,IAAI,QAAQ,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE;AACvE,GAAG;AACH,EAAE,IAAI,EAAE;AACR,IAAI,KAAK,EAAE,qBAAqB;AAChC,IAAI,YAAY,EAAE,OAAO;AACzB,IAAI,SAAS,EAAE,mBAAmB;AAClC,IAAI,QAAQ,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE;AACvD,IAAI,QAAQ,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE;AACzC,IAAI,cAAc,EAAE,IAAI;AACxB,GAAG;AACH,CAAC,CAAC;AACF,WAAW,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,cAAc,GAAG;AACvB,EAAE,WAAW,EAAE;AACf,IAAI,IAAI,EAAE,wBAAwB;AAClC,IAAI,IAAI,EAAE,4BAA4B;AACtC,IAAI,OAAO,EAAE,aAAa;AAC1B,IAAI,IAAI,EAAE,OAAO;AACjB,GAAG;AACH,EAAE,aAAa,EAAE;AACjB,IAAI,IAAI,EAAE,0BAA0B;AACpC,IAAI,IAAI,EAAE,8BAA8B;AACxC,IAAI,OAAO,EAAE,oBAAoB;AACjC,IAAI,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AAC3C,IAAI,IAAI,EAAE,OAAO;AACjB,GAAG;AACH,EAAE,aAAa,EAAE;AACjB,IAAI,IAAI,EAAE,0BAA0B;AACpC,IAAI,IAAI,EAAE,8BAA8B;AACxC,IAAI,OAAO,EAAE,oBAAoB;AACjC,IAAI,IAAI,EAAE,OAAO;AACjB,GAAG;AACH,EAAE,aAAa,EAAE;AACjB,IAAI,IAAI,EAAE,0BAA0B;AACpC,IAAI,IAAI,EAAE,8BAA8B;AACxC,IAAI,OAAO,EAAE,aAAa;AAC1B,IAAI,IAAI,EAAE,OAAO;AACjB,GAAG;AACH,EAAE,eAAe,EAAE;AACnB,IAAI,IAAI,EAAE,kBAAkB;AAC5B,IAAI,IAAI,EAAE,sBAAsB;AAChC,IAAI,OAAO,EAAE,aAAa;AAC1B,IAAI,IAAI,EAAE,OAAO;AACjB,GAAG;AACH,EAAE,eAAe,EAAE;AACnB,IAAI,IAAI,EAAE,iBAAiB;AAC3B,IAAI,IAAI,EAAE,qBAAqB;AAC/B,IAAI,OAAO,EAAE,aAAa;AAC1B,IAAI,IAAI,EAAE,OAAO;AACjB,GAAG;AACH,EAAE,aAAa,EAAE;AACjB,IAAI,IAAI,EAAE,sBAAsB;AAChC,IAAI,IAAI,EAAE,0BAA0B;AACpC,IAAI,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;AAC1B,IAAI,OAAO,EAAE,aAAa;AAC1B,IAAI,IAAI,EAAE,OAAO;AACjB,GAAG;AACH,EAAE,aAAa,EAAE;AACjB,IAAI,IAAI,EAAE,0BAA0B;AACpC,IAAI,IAAI,EAAE,8BAA8B;AACxC,IAAI,OAAO,EAAE,oBAAoB;AACjC,IAAI,IAAI,EAAE,OAAO;AACjB,GAAG;AACH,EAAE,cAAc,EAAE;AAClB,IAAI,IAAI,EAAE,2BAA2B;AACrC,IAAI,IAAI,EAAE,+BAA+B;AACzC,IAAI,OAAO,EAAE,aAAa;AAC1B,IAAI,IAAI,EAAE,OAAO;AACjB,GAAG;AACH,EAAE,iBAAiB,EAAE;AACrB,IAAI,IAAI,EAAE,8BAA8B;AACxC,IAAI,IAAI,EAAE,kCAAkC;AAC5C,IAAI,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACpC,IAAI,OAAO,EAAE,aAAa;AAC1B,IAAI,IAAI,EAAE,OAAO;AACjB,GAAG;AACH,EAAE,uBAAuB,EAAE;AAC3B,IAAI,IAAI,EAAE,gCAAgC;AAC1C,IAAI,IAAI,EAAE,oCAAoC;AAC9C,IAAI,OAAO,EAAE,aAAa;AAC1B,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,WAAW,EAAE,EAAE;AACnB,GAAG;AACH,EAAE,sBAAsB,EAAE;AAC1B,IAAI,IAAI,EAAE,+BAA+B;AACzC,IAAI,IAAI,EAAE,mCAAmC;AAC7C,IAAI,OAAO,EAAE,aAAa;AAC1B,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,WAAW,EAAE,EAAE;AACnB,GAAG;AACH,EAAE,uBAAuB,EAAE;AAC3B,IAAI,IAAI,EAAE,8BAA8B;AACxC,IAAI,IAAI,EAAE,kCAAkC;AAC5C,IAAI,OAAO,EAAE,aAAa;AAC1B,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,WAAW,EAAE,CAAC;AAClB,GAAG;AACH,CAAC,CAAC;AACF,WAAW,CAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;AACrE;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,iBAAiB,GAAG,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,gBAAgB,GAAG;AACzB,EAAE,SAAS,EAAEC,oBAAgC;AAC7C,EAAE,UAAU,EAAEC,qBAAiC;AAC/C,EAAE,SAAS,EAAEC,oBAAgC;AAC7C,EAAE,UAAU,EAAEC,qBAAiC;AAC/C,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE;AAChD;AACA,EAAE,SAAS,QAAQ,GAAG;AACtB,IAAI,MAAM,OAAO,GAAG,CAAC,0BAA0B,EAAE,GAAG,CAAC,+BAA+B,CAAC;AACrF,OAAO,CAAC,yCAAyC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AAClE,IAAI,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC5D,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC;AAC7B,GAAG;AACH;AACA,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC;AAChE;;ACnvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,SAAS,CAAC;AACvB,EAAE,WAAW,GAAG;AAChB;AACA;AACA;AACA;AACA,IAAI,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AAC5E,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,GAAG,KAAK,CAAC;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,iBAAiB,GAAG;AAC5B,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;AACrB,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,GAAG;AACzC,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AAC9C,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAChE,MAAM,KAAK,CAAC,OAAO,GAAG,SAAS;AAC/B,MAAM,IAAI;AACV,QAAQ,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC1E,QAAQ,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;AACnF,OAAO,CAAC,OAAO,CAAC,GAAG;AACnB,QAAQ,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzB,OAAO;AACP,KAAK;AACL;AACA;AACA,IAAI,IAAI;AACR,MAAM,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,0CAA0C,CAAC,CAAC;AAC3G,MAAM,MAAM,MAAM,GAAG,CAAC;AACtB;AACA;AACA;AACA;AACA,MAAM,CAAC,CAAC;AACR,MAAM,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AACnE,KAAK,CAAC,OAAO,CAAC,GAAG;AACjB,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACvB,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE;AACpD,IAAI,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,wBAAwB,CAAC,GAAG,QAAQ,CAAC,CAAC;AACpF,IAAI,QAAQ,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AACjD,IAAI,MAAM,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG;AAChE,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC5C,MAAM,KAAK,CAAC,IAAI,GAAG,SAAS;AAC5B,MAAM,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG;AAC5D,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC9C,QAAQ,KAAK,CAAC,KAAK,IAAI,EAAE,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,SAAS;AAC3E,QAAQ,KAAK,QAAQ,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;AACzD,aAAa,OAAO,IAAI,CAAC,KAAK,CAAC;AAC/B,QAAQ,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,OAAO,IAAI,CAAC,KAAK,CAAC;AAClD,QAAQ,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AAC3C,QAAQ,MAAM,IAAI,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AACzD,QAAQ,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAC3F,QAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAChE,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,gBAAgB,CAAC,MAAM,EAAE;AAClC,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AAC5C,IAAI,MAAM,OAAO,GAAG,KAAK,GAAG,WAAW,CAAC,CAAC;AACzC,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO,IAAI,CAAC;AAClD,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACO,MAAM,eAAe,SAAS,eAAe,CAAC;AACrD;AACA,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE;AACrC,IAAI,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AACvH,IAAI,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC3B,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC;AACzD,MAAM,EAAE,EAAE,mBAAmB;AAC7B,MAAM,QAAQ,EAAE,qDAAqD;AACrE,MAAM,MAAM,EAAE,IAAI;AAClB,MAAM,KAAK,EAAE,GAAG;AAChB,MAAM,MAAM,EAAE,MAAM;AACpB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE;AACtB,IAAI,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC3C,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC;AACxB,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,GAAG;AACzC,MAAM,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,SAAS;AAC1D,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AACjF,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC;AAC7E,KAAK;AACL,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAClF,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACjG,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE;AACvC,IAAI,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,wBAAwB,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;AACrG,IAAI,OAAO,cAAc,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACvD,GAAG;AACH;;ACxJA;AACA;AACA;AACe,SAAS,sBAAsB,GAAG;AACjD;AACA,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,wBAAwB,EAAE;AAC5D,IAAI,IAAI,EAAE,0BAA0B;AACpC,IAAI,KAAK,EAAE,OAAO;AAClB,IAAI,MAAM,EAAE,KAAK;AACjB,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,OAAO,EAAE,EAAE;AACf,GAAG,CAAC,CAAC;AACL;AACA;AACA,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,aAAa,EAAE;AACjD,IAAI,IAAI,EAAE,kBAAkB;AAC5B,IAAI,IAAI,EAAE,kBAAkB;AAC5B,IAAI,KAAK,EAAE,OAAO;AAClB,IAAI,MAAM,EAAE,IAAI;AAChB,IAAI,OAAO,EAAE,QAAQ;AACrB,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,OAAO,EAAE;AACb,MAAM,MAAM,EAAE,oBAAoB;AAClC,MAAM,MAAM,EAAE,uBAAuB;AACrC,MAAM,IAAI,EAAE,qBAAqB;AACjC,KAAK;AACL,GAAG,CAAC,CAAC;AACL;AACA;AACA,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,EAAE;AACtD,IAAI,IAAI,EAAE,kBAAkB;AAC5B,IAAI,IAAI,EAAE,kBAAkB;AAC5B,IAAI,KAAK,EAAE,OAAO;AAClB,IAAI,MAAM,EAAE,IAAI;AAChB,IAAI,OAAO,EAAE,KAAK;AAClB,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,OAAO,EAAE;AACb,MAAM,GAAG,EAAE,oBAAoB;AAC/B,MAAM,IAAI,EAAE,oBAAoB;AAChC,MAAM,IAAI,EAAE,0BAA0B;AACtC,KAAK;AACL,IAAI,QAAQ,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI;AACrD,GAAG,CAAC,CAAC;AACL;AACA;AACA,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,qBAAqB,EAAE;AACzD,IAAI,IAAI,EAAE,kBAAkB;AAC5B,IAAI,IAAI,EAAE,kBAAkB;AAC5B,IAAI,KAAK,EAAE,OAAO;AAClB,IAAI,MAAM,EAAE,IAAI;AAChB,IAAI,OAAO,EAAE,OAAO;AACpB,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,OAAO,EAAE;AACb,MAAM,KAAK,EAAE,sBAAsB;AACnC,MAAM,IAAI,EAAE,qBAAqB;AACjC,KAAK;AACL,GAAG,CAAC,CAAC;AACL;AACA;AACA,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE;AAChD,IAAI,IAAI,EAAE,mBAAmB;AAC7B,IAAI,IAAI,EAAE,mBAAmB;AAC7B,IAAI,KAAK,EAAE,OAAO;AAClB,IAAI,MAAM,EAAE,IAAI;AAChB,IAAI,OAAO,EAAE,KAAK;AAClB,IAAI,IAAI,EAAE,OAAO;AACjB,IAAI,cAAc,EAAE,IAAI;AACxB,GAAG,CAAC,CAAC;AACL;AACA;AACA,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,aAAa,EAAE;AACjD,IAAI,IAAI,EAAE,oBAAoB;AAC9B,IAAI,IAAI,EAAE,oBAAoB;AAC9B,IAAI,KAAK,EAAE,OAAO;AAClB,IAAI,MAAM,EAAE,IAAI;AAChB,IAAI,OAAO,EAAE,KAAK;AAClB,IAAI,IAAI,EAAE,OAAO;AACjB,IAAI,cAAc,EAAE,IAAI;AACxB,GAAG,CAAC,CAAC;AACL;AACA;AACA,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,yBAAyB,EAAE;AAC7D,IAAI,IAAI,EAAE,oBAAoB;AAC9B,IAAI,IAAI,EAAE,oBAAoB;AAC9B,IAAI,KAAK,EAAE,OAAO;AAClB,IAAI,MAAM,EAAE,IAAI;AAChB,IAAI,OAAO,EAAE,KAAK;AAClB,IAAI,IAAI,EAAE,OAAO;AACjB,GAAG,CAAC,CAAC;AACL;AACA;AACA,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,EAAE;AACpD,IAAI,IAAI,EAAE,mBAAmB;AAC7B,IAAI,IAAI,EAAE,mBAAmB;AAC7B,IAAI,KAAK,EAAE,OAAO;AAClB,IAAI,MAAM,EAAE,IAAI;AAChB,IAAI,OAAO,EAAE,IAAI;AACjB,IAAI,IAAI,EAAE,OAAO;AACjB,GAAG,CAAC,CAAC;AACL;AACA;AACA,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,2BAA2B,EAAE;AAC/D,IAAI,IAAI,EAAE,mBAAmB;AAC7B,IAAI,IAAI,EAAE,mBAAmB;AAC7B,IAAI,KAAK,EAAE,OAAO;AAClB,IAAI,MAAM,EAAE,IAAI;AAChB,IAAI,OAAO,EAAE,KAAK;AAClB,IAAI,IAAI,EAAE,OAAO;AACjB,GAAG,CAAC,CAAC;AACL;AACA;AACA,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,qBAAqB,EAAE;AACzD,IAAI,IAAI,EAAE,4BAA4B;AACtC,IAAI,IAAI,EAAE,4BAA4B;AACtC,IAAI,KAAK,EAAE,OAAO;AAClB,IAAI,MAAM,EAAE,IAAI;AAChB,IAAI,OAAO,EAAE,KAAK;AAClB,IAAI,IAAI,EAAE,OAAO;AACjB,GAAG,CAAC,CAAC;AACL;AACA;AACA,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,uBAAuB,EAAE;AAC3D,IAAI,IAAI,EAAE,8BAA8B;AACxC,IAAI,IAAI,EAAE,8BAA8B;AACxC,IAAI,KAAK,EAAE,QAAQ;AACnB,IAAI,MAAM,EAAE,IAAI;AAChB,IAAI,OAAO,EAAE,KAAK;AAClB,IAAI,IAAI,EAAE,OAAO;AACjB,IAAI,QAAQ,EAAE,CAAC,IAAI;AACnB,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;AACvB,KAAK;AACL,GAAG,CAAC,CAAC;AACL;AACA;AACA,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,EAAE;AACvD,IAAI,IAAI,EAAE,+BAA+B;AACzC,IAAI,IAAI,EAAE,+BAA+B;AACzC,IAAI,KAAK,EAAE,OAAO;AAClB,IAAI,MAAM,EAAE,IAAI;AAChB,IAAI,OAAO,EAAE,KAAK;AAClB,IAAI,IAAI,EAAE,OAAO;AACjB,GAAG,CAAC,CAAC;AACL;AACA;AACA,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,EAAE;AACvD,IAAI,KAAK,EAAE,QAAQ;AACnB,IAAI,OAAO,EAAE;AACb,MAAM,YAAY,EAAE,KAAK;AACzB,MAAM,UAAU,EAAE,KAAK;AACvB,MAAM,SAAS,EAAE,KAAK;AACtB,MAAM,UAAU,EAAE,KAAK;AACvB,MAAM,UAAU,EAAE,KAAK;AACvB,MAAM,WAAW,EAAE,KAAK;AACxB,MAAM,SAAS,EAAE,KAAK;AACtB,MAAM,SAAS,EAAE,KAAK;AACtB,MAAM,UAAU,EAAE,KAAK;AACvB,MAAM,SAAS,EAAE,KAAK;AACtB,MAAM,OAAO,EAAE,KAAK;AACpB,MAAM,UAAU,EAAE,IAAI;AACtB,MAAM,QAAQ,EAAE,KAAK;AACrB,MAAM,MAAM,EAAE,KAAK;AACnB,MAAM,YAAY,EAAE,IAAI;AACxB,MAAM,iBAAiB,EAAE,IAAI;AAC7B,MAAM,UAAU,EAAE,IAAI;AACtB,MAAM,WAAW,EAAE,IAAI;AACvB,MAAM,eAAe,EAAE,IAAI;AAC3B,MAAM,WAAW,EAAE,IAAI;AACvB,MAAM,gBAAgB,EAAE,IAAI;AAC5B,MAAM,eAAe,EAAE,IAAI;AAC3B,KAAK;AACL,GAAG,CAAC,CAAC;AACL;AACA;AACA,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,EAAE;AACvD,IAAI,IAAI,EAAE,oBAAoB;AAC9B,IAAI,IAAI,EAAE,oBAAoB;AAC9B,IAAI,KAAK,EAAE,OAAO;AAClB,IAAI,MAAM,EAAE,IAAI;AAChB,IAAI,IAAI,EAAE,OAAO;AACjB,IAAI,OAAO,EAAE,KAAK;AAClB,GAAG,CAAC,CAAC;AACL;AACA;AACA,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,yBAAyB,EAAE;AAC7D,IAAI,IAAI,EAAE,+BAA+B;AACzC,IAAI,IAAI,EAAE,+BAA+B;AACzC,IAAI,KAAK,EAAE,OAAO;AAClB,IAAI,MAAM,EAAE,IAAI;AAChB,IAAI,IAAI,EAAE,OAAO;AACjB,IAAI,OAAO,EAAE,KAAK;AAClB,GAAG,CAAC,CAAC;AACL;AACA;AACA,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,uBAAuB,EAAE;AAC3D,IAAI,IAAI,EAAE,6BAA6B;AACvC,IAAI,IAAI,EAAE,6BAA6B;AACvC,IAAI,KAAK,EAAE,OAAO;AAClB,IAAI,MAAM,EAAE,IAAI;AAChB,IAAI,IAAI,EAAE,OAAO;AACjB,IAAI,OAAO,EAAE,KAAK;AAClB,GAAG,CAAC,CAAC;AACL;AACA;AACA,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,EAAE;AACtD,IAAI,KAAK,EAAE,OAAO;AAClB,IAAI,MAAM,EAAE,KAAK;AACjB,IAAI,IAAI,EAAE,OAAO;AACjB,IAAI,OAAO,EAAE,IAAI;AACjB,GAAG,CAAC,CAAC;AACL;AACA;AACA,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,wBAAwB,EAAE;AAChE,IAAI,IAAI,EAAE,wBAAwB;AAClC,IAAI,KAAK,EAAE,wBAAwB;AACnC,IAAI,IAAI,EAAE,wBAAwB;AAClC,IAAI,IAAI,EAAE,qBAAqB;AAC/B,IAAI,IAAI,EAAE,eAAe;AACzB,IAAI,UAAU,EAAE,IAAI;AACpB,GAAG,CAAC,CAAC;AACL;AACA,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,wBAAwB,EAAE;AAC5D,IAAI,IAAI,EAAE,0BAA0B;AACpC,IAAI,KAAK,EAAE,OAAO;AAClB,IAAI,MAAM,EAAE,KAAK;AACjB,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,OAAO,EAAE;AACb,MAAM,KAAK,EAAE;AACb,QAAQ,SAAS,EAAE,IAAI;AACvB,QAAQ,MAAM,EAAE,IAAI;AACpB,OAAO;AACP,KAAK;AACL,GAAG,CAAC,CAAC;AACL;;AC1OA;AACA;AACA;AACe,MAAM,cAAc,SAAS,YAAY,CAAC;AACzD;AACA;AACA;AACA;AACA;AACA,EAAE,YAAY,GAAG,KAAK,CAAC;AACvB;AACA;AACA;AACA;AACA,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE;AACvB,IAAI,KAAK,IAAI,CAAC,YAAY,GAAG,OAAO,IAAI,CAAC;AACzC,IAAI,KAAK,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACjG,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACtC,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;AACpD,IAAI,KAAK,OAAO,YAAY,GAAG,GAAG;AAClC,MAAM,KAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3E,WAAW,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC9B,MAAM,OAAO;AACb,KAAK;AACL,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AAC5D,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;AACzD,IAAI,KAAK,OAAO,YAAY,GAAG,GAAG;AAClC,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;AACtB,MAAM,KAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3E,WAAW,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC9B,MAAM,OAAO;AACb,KAAK;AACL,IAAI,OAAO,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AACxE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE;AACpC,IAAI,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;AAClC,IAAI,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC;AAC9E,IAAI,KAAK,CAAC,IAAI,GAAG,OAAO,MAAM,CAAC;AAC/B;AACA;AACA,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC;AAClE,IAAI,KAAK,OAAO,KAAK,IAAI,GAAG;AAC5B,MAAM,IAAI,YAAY,GAAG,IAAI,CAAC;AAC9B,MAAM,KAAK,IAAI,CAAC,WAAW,GAAG,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC;AAC9D,WAAW,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG,YAAY,GAAG,KAAK,CAAC;AAC7D,WAAW,KAAK,IAAI,CAAC,IAAI,KAAK,MAAM,GAAG,YAAY,GAAG,CAAC,CAAC;AACxD,MAAM,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;AAC1D,KAAK;AACL;AACA;AACA,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG;AACjC,MAAM,KAAK,KAAK,KAAK,OAAO,GAAG,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;AACpD,WAAW,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AACzC,KAAK;AACL,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,oBAAoB,GAAG;AACzB,IAAI,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC9B,IAAI,KAAK,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,MAAM,CAAC,YAAY,KAAK,OAAO,CAAC,GAAG,OAAO;AAC1E,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AAChD,IAAI,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,CAAC,GAAG,KAAK,CAAC;AACnG,IAAI,IAAI,IAAI,CAAC;AACb;AACA,IAAI,KAAK,UAAU,KAAK,OAAO,GAAG;AAClC,MAAM,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,YAAY,KAAK,MAAM,CAAC,GAAG,OAAO;AAC/E,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAC/C,KAAK;AACL;AACA,SAAS,KAAK,UAAU,KAAK,OAAO,GAAG;AACvC,MAAM,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,aAAa,KAAK,MAAM,CAAC,GAAG,OAAO;AACzF,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AACpD,KAAK;AACL,IAAI,KAAK,CAAC,IAAI,GAAG,OAAO;AACxB,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC;AAClD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE;AAC5C,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC;AAClC,IAAI,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC/B,IAAI,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;AACvF,IAAI,SAAS,CAAC,CAAC,OAAO,CAAC,MAAM;AAC7B,MAAM,KAAK,QAAQ;AACnB,QAAQ,OAAO,KAAK,CAAC,uBAAuB,CAAC,cAAc,EAAE,CAAC;AAC9D,UAAU,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;AACtD,UAAU,IAAI,EAAE,oBAAoB;AACpC,UAAU,MAAM,EAAE,KAAK,CAAC,IAAI;AAC5B,UAAU,iBAAiB,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,KAAK,WAAW,GAAG,CAAC,GAAG,SAAS;AAClF,UAAU,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,KAAK,UAAU;AACxD,SAAS,CAAC,CAAC,CAAC;AACZ,MAAM,KAAK,MAAM;AACjB,QAAQ,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACzC,MAAM,KAAK,QAAQ;AACnB,QAAQ,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC;AAC/B,MAAM,KAAK,QAAQ;AACnB,QAAQ,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC3D,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,6BAA6B,CAAC,OAAO,EAAE;AAChD;AACA,IAAI,MAAM,UAAU,GAAG;AACvB,MAAM,SAAS,EAAE;AACjB,QAAQ,IAAI,EAAE,WAAW;AACzB,QAAQ,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC;AAC1D,QAAQ,OAAO,EAAE,EAAE;AACnB,OAAO;AACP,MAAM,OAAO,EAAE;AACf,QAAQ,IAAI,EAAE,SAAS;AACvB,QAAQ,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC;AACxD,QAAQ,OAAO,EAAE,EAAE;AACnB,OAAO;AACP,MAAM,QAAQ,EAAE;AAChB,QAAQ,IAAI,EAAE,UAAU;AACxB,QAAQ,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC;AACzD,QAAQ,OAAO,EAAE,EAAE;AACnB,OAAO;AACP,MAAM,UAAU,EAAE;AAClB,QAAQ,IAAI,EAAE,YAAY;AAC1B,QAAQ,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC;AAC5D,QAAQ,OAAO,EAAE,EAAE;AACnB,QAAQ,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAAC;AACjE,OAAO;AACP,KAAK,CAAC;AACN;AACA;AACA,IAAI,MAAM,IAAI,CAAC,IAAI,OAAO,GAAG;AAC7B,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC;AACjD,MAAM,KAAK,CAAC,CAAC,YAAY,GAAG,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClE,WAAW,KAAK,CAAC,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjE,WAAW,KAAK,CAAC,CAAC,WAAW,GAAG,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACrE,WAAW,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC9C,KAAK;AACL,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC;AACzE,IAAI,OAAO,UAAU,CAAC;AACtB,GAAG;AACH;;AChLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAAS,mBAAmB,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;AACpF;AACA,EAAE,IAAI,IAAI,CAAC;AACX,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE;AACnC,EAAE,MAAM,GAAG,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,4BAA4B,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;AACjF,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9B;AACA;AACA,EAAE,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AACnG;AACA;AACA,EAAE,IAAI,CAAC,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClD;AACA;AACA,EAAE,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG;AACnC,IAAI,KAAK,IAAI,CAAC,eAAe,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG;AAC9G,MAAM,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;AACpD,KAAK;AACL,SAAS,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxD,GAAG;AACH;AACA;AACA,EAAE,IAAI,CAAC,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrD,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9C;AACA;AACA,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxF,EAAE,YAAY,GAAG,qBAAqB,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;AAC3D,EAAE,SAAS,GAAG,kBAAkB,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;AAClD;AACA;AACA,EAAE,MAAM,eAAe,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACjG,EAAE,KAAK,eAAe,CAAC,CAAC,CAAC,EAAE,QAAQ,KAAK,GAAG,GAAG,eAAe,CAAC,KAAK,EAAE,CAAC;AACtE,EAAE,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACtD,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,sBAAsB,CAAC,KAAK,EAAE;AACvC,EAAE,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK;AACrC,IAAI,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACtC,IAAI,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC1D;AACA;AACA,IAAI,KAAK,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7C;AACA;AACA,SAAS,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,YAAY,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AACxG;AACA;AACA,SAAS,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,YAAY,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AAC1G;AACA;AACA,SAAS,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7C;AACA,IAAI,OAAO,GAAG,CAAC;AACf,GAAG,EAAE,EAAE,CAAC,CAAC;AACT,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,qBAAqB,CAAC,KAAK,EAAE;AACtC,EAAE,MAAM,UAAU,GAAG,EAAE,CAAC;AACxB,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;AACpE;AACA;AACA,EAAE,KAAK,WAAW,CAAC,MAAM,GAAG;AAC5B,IAAI,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;AACpE,IAAI,KAAK,WAAW,KAAK,CAAC,GAAG,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC;AACnD;AACA;AACA,IAAI,KAAK,WAAW,GAAG,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/E,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;AAC9D,GAAG;AACH,EAAE,OAAO,CAAC,GAAG,UAAU,EAAE,GAAG,SAAS,CAAC,CAAC;AACvC,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,kBAAkB,CAAC,KAAK,EAAE;AACnC,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;AACpE;AACA;AACA,EAAE,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK;AAC9D,IAAI,KAAK,IAAI,YAAY,YAAY,GAAG,OAAO,GAAG,CAAC;AACnD,IAAI,MAAM,GAAG,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9D,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC;AAC7C,IAAI,OAAO,GAAG,CAAC;AACf,GAAG,EAAE,EAAE,CAAC,CAAC;AACT;AACA;AACA,EAAE,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM;AAChF,IAAI,IAAI,YAAY,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;AACjD,IAAI,IAAI,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACtD,GAAG,CAAC,CAAC,CAAC;AACN,EAAE,OAAO,CAAC,GAAG,UAAU,EAAE,GAAG,SAAS,CAAC,CAAC;AACvC,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,yBAAyB,CAAC,KAAK,EAAE;AAC1C,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK;AACtC,IAAI,KAAK,IAAI,YAAY,iBAAiB,GAAG;AAC7C,MAAM,KAAK,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,IAAI,WAAW,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC/F,WAAW;AACX,QAAQ,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;AACnD,QAAQ,IAAI,GAAG,yBAAyB,CAAC,QAAQ,CAAC,CAAC;AACnD,OAAO;AACP,KAAK;AACL,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnB,IAAI,OAAO,GAAG,CAAC;AACf,GAAG,EAAE,EAAE,CAAC,CAAC;AACT,EAAE,OAAO,sBAAsB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AAC9C,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,iBAAiB,CAAC,KAAK,EAAE;AAClC;AACA,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,YAAY,YAAY,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AAChG;AACA,EAAE,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK;AACxC,IAAI,IAAI,IAAI,CAAC;AACb,IAAI,KAAK,IAAI,YAAY,QAAQ,GAAG,IAAI,GAAG,QAAQ,CAAC;AACpD,SAAS,KAAK,CAAC,IAAI,YAAY,QAAQ,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,IAAI,GAAG,WAAW,CAAC;AACxF,SAAS,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;AACjC,IAAI,MAAM,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjF;AACA;AACA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACzD,IAAI,OAAO,GAAG,CAAC;AACf,GAAG,EAAE,EAAE,CAAC,CAAC;AACT,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,uBAAuB,CAAC,KAAK,EAAE;AACxC,EAAE,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK;AACxC,IAAI,KAAK,IAAI,YAAY,YAAY,GAAG,OAAO,GAAG,CAAC;AACnD,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,WAAW,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC5E,IAAI,OAAO,GAAG,CAAC;AACf,GAAG,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;AACzC;;ACtLA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,gBAAgB,SAAS,MAAM,CAAC;AACrD,EAAE,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE;AAC/C,IAAI,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC/B,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC/C;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACrB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,MAAM,CAAC,IAAI,EAAE;AAC5B,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;AAC3G;AACA;AACA,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;AACxC,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;AAC/C,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;AAC/C,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;AAChD,IAAI,MAAM,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;AACvC,IAAI,MAAM,cAAc,GAAG,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AAC3E;AACA;AACA,IAAI,MAAM,IAAI,GAAG;AACjB,MAAM,IAAI,EAAE,IAAI;AAChB,MAAM,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACrI,MAAM,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC;AACzD,MAAM,gBAAgB,EAAE,KAAK;AAC7B,MAAM,eAAe,EAAE,SAAS;AAChC,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;AACzF,MAAM,WAAW,EAAE,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;AAC7C,MAAM,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC,OAAO,GAAG,cAAc;AAC3D,MAAM,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,aAAa;AAC5E,MAAM,MAAM,EAAE,EAAE;AAChB,KAAK,CAAC;AACN,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC1F;AACA;AACA,IAAI,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,8CAA8C,EAAE,IAAI,CAAC,CAAC;AAC5F;AACA;AACA,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,GAAG,UAAU,GAAG,gBAAgB,CAAC;AAC9D,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACzF,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI;AAClC,MAAM,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE;AACjC,QAAQ,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC;AAC9E,QAAQ,OAAO,EAAE,IAAI;AACrB,QAAQ,OAAO,EAAE;AACjB,UAAU,GAAG,EAAE;AACf,YAAY,IAAI,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;AAC/C,YAAY,KAAK,EAAE,KAAK;AACxB,YAAY,QAAQ,EAAE,IAAI,IAAI;AAC9B,cAAc,MAAM,EAAE,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7E,cAAc,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AACjC,aAAa;AACb,WAAW;AACX,SAAS;AACT,QAAQ,OAAO,EAAE,KAAK;AACtB,QAAQ,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC;AAClC,OAAO,CAAC,CAAC;AACT,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACvB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;AAClD;AACA;AACA,IAAI,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC/B,IAAI,MAAM,gBAAgB,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC5G;AACA;AACA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AAC3B,MAAM,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAClF,KAAK;AACL;AACA;AACA,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC;AACjB,IAAI,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK;AAC/D,MAAM,KAAK,CAAC,GAAG,GAAG,GAAG,OAAO,GAAG,CAAC;AAChC,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAChD,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC1E,MAAM,IAAI,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACnD,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AAC/D,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;AAC9B,MAAM,GAAG,CAAC,IAAI,CAAC;AACf,QAAQ,KAAK,EAAE,CAAC;AAChB,QAAQ,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,KAAK;AACjG,QAAQ,OAAO,EAAE,GAAG,GAAG,CAAC;AACxB,QAAQ,QAAQ,EAAE,KAAK,GAAG,CAAC;AAC3B,OAAO,CAAC,CAAC;AACT,MAAM,OAAO,GAAG,CAAC;AACjB,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;AAC1C;AACA;AACA,IAAI,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;AACvC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,GAAG,EAAE;AAC3B,MAAM,WAAW,CAAC,IAAI,CAAC;AACvB,QAAQ,KAAK,EAAE,MAAM;AACrB,QAAQ,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAChG,QAAQ,OAAO,EAAE,IAAI;AACrB,QAAQ,QAAQ,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC;AAChC,OAAO,CAAC,CAAC;AACT,KAAK;AACL,IAAI,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;AACtD,IAAI,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,wBAAwB,EAAE;AAChF,MAAM,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC;AAC1C,MAAM,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1B,KAAK,CAAC,CAAC,CAAC;AACR;AACA;AACA,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAAC,CAAC;AAC7F,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;AAClD;AACA;AACA,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC1C,IAAI,KAAK,QAAQ,IAAI,CAAC,GAAG,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,iCAAiC,CAAC,CAAC;AACtF;AACA;AACA,IAAI,KAAK,QAAQ,CAAC,KAAK,GAAG;AAC1B,MAAM,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,GAAG,6BAA6B,GAAG,8BAA8B,EAAE;AACjH,QAAQ,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnE,OAAO,CAAC,CAAC;AACT,KAAK;AACL;AACA;AACA,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,OAAO,EAAE,CAAC;AAC5C;AACA;AACA,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,YAAY,GAAG;AACtC,MAAM,IAAI,GAAG,GAAG,4BAA4B,CAAC;AAC7C,MAAM,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,GAAG,sCAAsC,CAAC;AACzE,WAAW,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,GAAG,GAAG,GAAG,uCAAuC,CAAC;AAC/G,WAAW,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,GAAG,GAAG,GAAG,wCAAwC,CAAC;AAC1F,MAAM,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;AACnC,QAAQ,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AAC9F,QAAQ,KAAK,EAAE,IAAI,CAAC,KAAK;AACzB,QAAQ,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;AACtC,QAAQ,GAAG,EAAE,IAAI,CAAC,GAAG;AACrB,QAAQ,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC;AACrD,OAAO,CAAC,CAAC;AACT,KAAK;AACL;AACA;AACA,SAAS;AACT,MAAM,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,4BAA4B,EAAE;AAC5D,QAAQ,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnE,QAAQ,KAAK,EAAE,IAAI,CAAC,KAAK;AACzB,QAAQ,GAAG,EAAE,IAAI,CAAC,GAAG;AACrB,QAAQ,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC;AACrD,OAAO,CAAC,CAAC;AACT,KAAK;AACL,GAAG;AACH;;AC5LA;AACA;AACA;AACe,MAAM,MAAM,SAAS,IAAI,CAAC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,UAAU,CAAC;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,UAAU,GAAG;AACnB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC;AAC1C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,iBAAiB,GAAG;AAC1B,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,IAAI,CAAC;AACjD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,eAAe,GAAG;AACxB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,KAAK,CAAC;AAChD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,cAAc,GAAG;AACvB,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC;AAC7C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,aAAa,GAAG;AACtB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,KAAK,CAAC;AAC9C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,SAAS,GAAG;AAClB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC;AAC1C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,SAAS,GAAG;AAClB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC;AAC1C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,mBAAmB,GAAG;AAC5B,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,mBAAmB,IAAI,KAAK,CAAC;AACpD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,cAAc,GAAG;AACvB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,KAAK,CAAC;AAC/C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,OAAO,GAAG;AAChB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC;AACxC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,SAAS,GAAG;AAClB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC;AAC1C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,UAAU,GAAG;AACnB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AACvE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,OAAO,GAAG;AAChB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC;AACxC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,SAAS,GAAG;AAClB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC;AAC1C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,WAAW,GAAG;AACpB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,KAAK,CAAC;AAC5C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,eAAe,GAAG;AACxB,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,OAAO,IAAI,CAAC;AACjE,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC;AAChE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,WAAW,GAAG;AACpB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,KAAK,CAAC;AAC5C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,KAAK,GAAG;AACd,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,GAAG,OAAO,IAAI,CAAC;AACtE,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;AAC5C,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,MAAM,CAAC,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC;AAC3G,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,QAAQ,GAAG;AACjB,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,GAAG,OAAO,IAAI,CAAC;AACnE,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AACpC,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;AAChC,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,MAAM,CAAC,CAAC,MAAM,CAAC,eAAe,KAAK,GAAG,CAAC,CAAC,CAAC;AAC9G,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,WAAW,GAAG;AACpB,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,GAAG,OAAO,EAAE,CAAC;AACvG,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;AAC9F,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,WAAW,KAAK;AAC3E,MAAM,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AACrE,MAAM,OAAO,GAAG,CAAC;AACjB,KAAK,EAAE,EAAE,CAAC,CAAC;AACX,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,YAAY,GAAG;AACrB,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;AAClD,IAAI,KAAK,CAAC,YAAY,GAAG,OAAO,IAAI,CAAC;AACrC,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC;AAChD,IAAI,MAAM,OAAO,GAAG,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC;AAChF,IAAI,MAAM,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC;AACtF,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS;AAC3C,MAAM,EAAE,UAAU,KAAK,UAAU,CAAC,WAAW,KAAK,MAAM,CAAC,KAAK,UAAU,GAAG,OAAO;AAClF,KAAK,CAAC;AACN,IAAI,KAAK,CAAC,OAAO,GAAG,OAAO,IAAI,CAAC;AAChC,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC;AAChG;AACA;AACA,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC;AAClG,SAAS,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK;AAC9F,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AACvD,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACZ;AACA,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,oBAAoB,GAAG;AAC7B,IAAI,MAAM,eAAe,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY;AACvD,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;AACzE,IAAI,KAAK,eAAe,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC;AAC3E,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC;AAC5E,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,GAAG;AACvB,IAAI,KAAK,CAAC,kBAAkB,EAAE,CAAC;AAC/B,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACrB;AACA;AACA,IAAI,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;AAChC;AACA;AACA,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC/B;AACA;AACA,IAAI,SAAS,IAAI,CAAC,IAAI;AACtB,MAAM,KAAK,WAAW;AACtB,QAAQ,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,MAAM;AACxC,MAAM,KAAK,MAAM;AACjB,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,MAAM;AACnC,MAAM,KAAK,OAAO;AAClB,QAAQ,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,MAAM;AACpC,KAAK;AACL;AACA;AACA,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC9B,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;AAC1B;AACA;AACA,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;AACvD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,GAAG;AACtB,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACtH,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,YAAY,GAAG;AACjB,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;AACvC,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC;AACtD,IAAI,KAAK,GAAG,EAAE,IAAI,KAAK,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC;AACjH,SAAS,KAAK,GAAG,EAAE,IAAI,KAAK,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;AAC5G,SAAS,KAAK,GAAG,EAAE,IAAI,GAAG;AAC1B,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,cAAc,GAAG,cAAc,CAAC,CAAC;AAC7G,KAAK;AACL,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;AACpE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,GAAG;AAClB,IAAI,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK;AAC3F,MAAM,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC;AACnB,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACpB,KAAK,CAAC,CAAC,CAAC;AACR,IAAI,MAAM,UAAU,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,CAAC;AAClE,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,KAAK,UAAU,CAAC;AAChD,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACpE,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACvE,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK;AACjG,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,KAAK,CAAC,MAAM,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC;AACrD,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACzD,MAAM,KAAK,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACpD,WAAW,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACrC,MAAM,OAAO,GAAG,CAAC;AACjB,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AACrC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;AAC9G,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAC1C,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,IAAI,IAAI,CAAC;AAClE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,GAAG;AACvB,IAAI,KAAK,EAAE,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO;AACjD,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;AAC3B;AACA;AACA,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;AAC7C,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;AAC3D,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AAC5G;AACA;AACA,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;AACvC,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;AAC3D,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC;AAC1E,SAAS,KAAK,GAAG,CAAC,KAAK,KAAK,OAAO,GAAG,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC;AACvD,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI;AACjC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AAC9F;AACA;AACA,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;AACtC,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC;AAC7D,IAAI,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;AACnF,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK;AACjC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AACxG;AACA;AACA,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;AACzC,IAAI,MAAM,SAAS,GAAG,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;AAC1E,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AACpF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,GAAG;AACnB,IAAI,KAAK,EAAE,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO;AACjD,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;AACvC,IAAI,KAAK,GAAG,CAAC,KAAK,GAAG;AACrB,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC;AAC7C,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACvF,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3E,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,mBAAmB,GAAG;AACxB,IAAI,MAAM,mBAAmB,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAClF,IAAI,IAAI,CAAC,WAAW,GAAG;AACvB,MAAM,IAAI,EAAE,EAAE;AACd,MAAM,OAAO,EAAE,MAAM,CAAC,WAAW;AACjC,QAAQ,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC/F,OAAO;AACP,MAAM,MAAM,EAAE,EAAE;AAChB,MAAM,oBAAoB,EAAE,EAAE;AAC9B,KAAK,CAAC;AACN,IAAI,MAAM,MAAM,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,GAAG;AAC/D,MAAM,KAAK,EAAE,WAAW,YAAY,WAAW,CAAC,GAAG,SAAS;AAC5D,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;AAC1D,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AACvD,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAClE,MAAM,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AACrF,MAAM,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAChG,KAAK;AACL,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AAC1F,MAAM,OAAO,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC;AACpF,KAAK,CAAC,CAAC,CAAC;AACR,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,sBAAsB,GAAG;AAC3B;AACA;AACA,IAAI,KAAK,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,GAAG;AAC/C,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,KAAK,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;AAC7E,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AAC3F,KAAK;AACL;AACA;AACA,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;AACpF;AACA;AACA,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,MAAM,GAAG;AACvC,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,0BAA0B,EAAE;AAC9E,QAAQ,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,IAAI,EAAE;AACzE,OAAO,CAAC,CAAC;AACT;AACA;AACA,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;AACvB;AACA;AACA,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;AAC5B;AACA;AACA,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;AAC5B;AACA;AACA,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAClC;AACA;AACA,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;AACnC,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,qBAAqB,GAAG;AAC1B,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,CAAC;AACtD,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACxC,IAAI,MAAM,YAAY,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;AACvF,IAAI,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,UAAU,IAAI;AACvE,MAAM,IAAI,OAAO,CAAC;AAClB,MAAM,IAAI;AACV,QAAQ,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACvD,QAAQ,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9E,OAAO;AACP,MAAM,MAAM,GAAG,EAAE;AACjB,QAAQ,OAAO,CAAC,IAAI,CAAC,CAAC,+BAA+B,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAC5E,OAAO;AACP,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AACvC,MAAM,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;AAC5F,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,aAAa,CAAC;AACrD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,GAAG;AACd,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,CAAC;AACrC,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AAClC;AACA;AACA,IAAI,KAAK,IAAI,CAAC,OAAO,KAAK,OAAO,GAAG;AACpC,MAAM,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;AAC3E,KAAK;AACL;AACA;AACA,SAAS,KAAK,IAAI,CAAC,OAAO,KAAK,MAAM,GAAG;AACxC,MAAM,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC;AACnF,KAAK;AACL;AACA;AACA,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;AAClE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;AAC3F,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,GAAG;AACnB,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,OAAO,IAAI,CAAC;AACvC,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACxC,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;AACrB;AACA;AACA,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACvC,IAAI,KAAK,EAAE,GAAG;AACd,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACrB,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;AAC7D,KAAK;AACL;AACA;AACA,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAClD;AACA;AACA,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvB;AACA;AACA,IAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG;AACnF,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1B,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,GAAG,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AACpF,KAAK;AACL;AACA;AACA,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;AACjF,IAAI,KAAK,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC3D;AACA;AACA,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,KAAK,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG;AACtE,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACxE,MAAM,KAAK,QAAQ,GAAG;AACtB,QAAQ,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC1D,QAAQ,MAAM,iBAAiB,GAAG,gBAAgB,KAAK,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAClH,QAAQ,MAAM,mBAAmB,GAAG,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC;AAChE,QAAQ,MAAM,oBAAoB,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY,MAAM,QAAQ,CAAC,MAAM,CAAC,cAAc,KAAK,MAAM,CAAC,CAAC;AACrH,QAAQ,KAAK,iBAAiB,IAAI,mBAAmB,IAAI,oBAAoB,GAAG;AAChF,UAAU,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9B,UAAU,QAAQ,CAAC,IAAI,GAAG,mBAAmB,CAAC;AAC9C,SAAS;AACT,OAAO;AACP,KAAK;AACL;AACA;AACA,IAAI,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;AACrD,IAAI,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC;AAC7D,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC;AAC1E,IAAI,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC7B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,GAAG;AACnB,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AAClC,IAAI,KAAK,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO;AAC7B,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACvB,IAAI,KAAK,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG;AAClD,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;AAC3D,MAAM,IAAI;AACV,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;AACnE,QAAQ,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AAClF,OAAO,CAAC,MAAM,CAAC,EAAE;AACjB,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,6BAA6B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACvG,QAAQ,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAC1F,QAAQ,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAClC,QAAQ,OAAO;AACf,OAAO;AACP,KAAK;AACL,IAAI,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AAC3B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,oBAAoB,GAAG;AACzB,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC1C,IAAI,KAAK,CAAC,QAAQ,EAAE,KAAK,GAAG,OAAO;AACnC,IAAI,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC/B;AACA;AACA,IAAI,KAAK,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG;AACpD,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;AAC5D,MAAM,IAAI;AACV,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;AACnE,QAAQ,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACtF,OAAO,CAAC,MAAM,CAAC,EAAE;AACjB,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,6BAA6B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACvG,QAAQ,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAC1F,QAAQ,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAClC,QAAQ,OAAO;AACf,OAAO;AACP,KAAK;AACL,IAAI,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AACnC;AACA;AACA,IAAI,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC;AAC3E,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACtG,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE;AAClD,IAAI,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,mBAAmB,CAAC,CAAC;AACpD,IAAI,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAE,CAAC;AACxC,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK;AACxD,MAAM,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACxD,MAAM,KAAK,KAAK,IAAI,IAAI,GAAG;AAC3B,QAAQ,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACrC,QAAQ,OAAO,GAAG,CAAC;AACnB,OAAO;AACP,MAAM,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AAClC,KAAK,CAAC,CAAC;AACP,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,GAAG;AACtD,MAAM,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;AACxG,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,mCAAmC,EAAE;AAC5E,QAAQ,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,iBAAiB,CAAC;AACtF,OAAO,CAAC,CAAC;AACT,MAAM,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;AAC1F,KAAK;AACL,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE;AACzB,IAAI,OAAO,CAAC,KAAK,CAAC,uBAAuB;AACzC,MAAM,uGAAuG;AAC7G,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE;AAChD,KAAK,CAAC;AACN,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACxC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE;AACnC,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC;AACpB,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;AAC3B,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACjC;AACA;AACA,IAAI,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC;AACxC,MAAM,eAAe,EAAE,IAAI;AAC3B,MAAM,aAAa,EAAE,IAAI;AACzB,MAAM,iBAAiB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC;AAChF,KAAK,EAAE,OAAO,CAAC,CAAC;AAChB;AACA;AACA,IAAI,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC;AACtC,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC;AAC1C,IAAI,MAAM,gBAAgB,GAAG,OAAO,KAAK,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACtH;AACA;AACA,IAAI,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC;AACvC,MAAM,sBAAsB,EAAE,IAAI,CAAC,aAAa;AAChD,MAAM,eAAe,EAAE,EAAE,CAAC,IAAI,EAAE,WAAW,IAAI,KAAK;AACpD,MAAM,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK;AAC3C,MAAM,eAAe,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;AAC3F,MAAM,iBAAiB,EAAE,gBAAgB,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,KAAK,GAAG,IAAI;AACrG,MAAM,gBAAgB,EAAE,gBAAgB;AACxC,MAAM,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC;AACxD,KAAK,EAAE,MAAM,CAAC,CAAC;AACf;AACA;AACA,IAAI,KAAK,MAAM,CAAC,kBAAkB,KAAK,SAAS,GAAG,MAAM,CAAC,kBAAkB,GAAG,MAAM,CAAC,sBAAsB;AAC5G,SAAS,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,YAAY,CAAC;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,KAAK,GAAG,OAAO;AAClF;AACA;AACA,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,KAAK,KAAK,KAAK,MAAM,CAAC,kBAAkB,GAAG;AAC5E,MAAM,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAChE,MAAM,KAAK,CAAC,aAAa,GAAG,OAAO;AACnC,MAAM,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AACvD,KAAK;AACL;AACA;AACA,IAAI,KAAK,OAAO,KAAK,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,iBAAiB,CAAC,GAAG;AAC5E,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,iBAAiB,KAAK,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK;AACpF,UAAU,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAC7C,MAAM,KAAK,WAAW,KAAK,WAAW,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG;AACvD,QAAQ,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AACzE,QAAQ,IAAI,CAAC,WAAW,EAAE,CAAC;AAC3B,QAAQ,IAAI,CAAC,sBAAsB,EAAE,CAAC;AACtC,OAAO;AACP,KAAK;AACL,IAAI,KAAK,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,sBAAsB,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,+BAA+B,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,KAAK,GAAG,OAAO;AAC/F;AACA;AACA,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAChD,IAAI,KAAK,CAAC,KAAK,GAAG,OAAO;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,4BAA4B,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,KAAK,GAAG,OAAO;AACnG;AACA;AACA,IAAI,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,KAAK,CAAC;AACjE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAC9E,IAAI,KAAK,MAAM,CAAC,eAAe,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;AACtF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AACtF,IAAI,KAAK,eAAe,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AACpG;AACA;AACA,IAAI,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AACrD;AACA;AACA,IAAI,IAAI,SAAS,CAAC;AAClB,IAAI,KAAK,MAAM,CAAC,sBAAsB,GAAG;AACzC,MAAM,IAAI;AACV,QAAQ,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,EAAE,CAAC;AACvF,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE;AACrB,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC,CAAC;AAC7E;AACA,IAAI,OAAO,QAAQ,CAAC;AACpB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,gBAAgB,CAAC;AACnB,IAAI,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB;AACvE,IAAI,iBAAiB,EAAE,YAAY,CAAC,EAAE;AACtC,IAAI,MAAM,YAAY,GAAG,EAAE,CAAC;AAC5B,IAAI,MAAM,WAAW,GAAG,EAAE,CAAC;AAC3B,IAAI,MAAM,eAAe,GAAG,EAAE,CAAC;AAC/B;AACA;AACA,IAAI,KAAK,eAAe,GAAG;AAC3B,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;AAClD,MAAM,KAAK,QAAQ,CAAC,OAAO,KAAK,KAAK,GAAG;AACxC,QAAQ,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACvF,QAAQ,OAAO,KAAK,CAAC;AACrB,OAAO;AACP,MAAM,WAAW,CAAC,yBAAyB,CAAC,GAAG,KAAK,CAAC;AACrD,KAAK;AACL;AACA;AACA,IAAI,KAAK,eAAe,GAAG;AAC3B,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;AACjG,MAAM,KAAK,UAAU,KAAK,KAAK,GAAG,OAAO,KAAK,CAAC;AAC/C,KAAK;AACL;AACA;AACA,IAAI,KAAK,gBAAgB,IAAI,iBAAiB,GAAG;AACjD,MAAM,KAAK,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,GAAG,iBAAiB,GAAG,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC;AACjG,MAAM,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;AACjE,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC;AAC/C,MAAM,KAAK,MAAM,KAAK,CAAC,GAAG;AAC1B,QAAQ,MAAM,QAAQ,GAAG,iBAAiB,KAAK,MAAM,GAAG,qBAAqB,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACvH,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACnD,QAAQ,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,wBAAwB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3G,QAAQ,OAAO,KAAK,CAAC;AACrB,OAAO;AACP,MAAM,YAAY,CAAC,CAAC,cAAc,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACzF,KAAK;AACL;AACA;AACA,IAAI,KAAK,YAAY,GAAG;AACxB,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;AAC1C,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;AAChD,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC;AACvB,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACnD,MAAM,KAAK,SAAS,IAAI,CAAC,GAAG;AAC5B,QAAQ,IAAI,GAAG,IAAI,CAAC;AACpB,QAAQ,WAAW,CAAC,mBAAmB,CAAC,GAAG,SAAS,CAAC;AACrD,OAAO;AACP;AACA;AACA,MAAM,KAAK,eAAe,KAAK,CAAC,IAAI,KAAK,SAAS,KAAK,CAAC,CAAC,CAAC,GAAG;AAC7D,QAAQ,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;AACpD,QAAQ,KAAK,CAAC,IAAI,CAAC,GAAG;AACtB,UAAU,IAAI,GAAG,IAAI,CAAC;AACtB,UAAU,WAAW,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9D,UAAU,WAAW,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAC3D,SAAS;AACT,OAAO;AACP;AACA;AACA,MAAM,KAAK,CAAC,IAAI,GAAG;AACnB,QAAQ,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACvF,QAAQ,OAAO,KAAK,CAAC;AACrB,OAAO;AACP,KAAK;AACL;AACA;AACA,IAAI,OAAO,CAAC,WAAW,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;AACxD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,sBAAsB,CAAC,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE;AACrE,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;AAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,OAAO;AAChC;AACA;AACA,IAAI,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzE,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG;AAC3B,MAAM,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gCAAgC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AACpH,MAAM,OAAO,KAAK,CAAC;AACnB,KAAK;AACL;AACA;AACA,IAAI,IAAI,QAAQ,GAAG,IAAI,CAAC;AACxB,IAAI,IAAI,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;AAC7C,IAAI,IAAI,QAAQ,GAAG,CAAC,CAAC;AACrB,IAAI,SAAS,OAAO,CAAC,IAAI;AACzB,MAAM,KAAK,WAAW;AACtB,QAAQ,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AAChF,QAAQ,QAAQ,GAAG,QAAQ,IAAI,CAAC,CAAC;AACjC,QAAQ,MAAM;AACd,MAAM,KAAK,MAAM,CAAC;AAClB,MAAM,KAAK,UAAU;AACrB,QAAQ,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACxD,QAAQ,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;AAC3D,QAAQ,MAAM;AACd,MAAM,KAAK,SAAS;AACpB,QAAQ,MAAM,KAAK,GAAG,CAAC,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;AACjG,QAAQ,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC;AAC7G,QAAQ,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AAC1G,QAAQ,MAAM;AACd,MAAM,KAAK,SAAS;AACpB,QAAQ,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACxD,QAAQ,KAAK,CAAC,QAAQ,GAAG,MAAM;AAC/B,QAAQ,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;AAC1C,QAAQ,KAAK,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;AAC1D,aAAa,KAAK,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,GAAG;AACpD,UAAU,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9D,UAAU,MAAM,GAAG,CAAC,CAAC;AACrB,SAAS;AACT,QAAQ,MAAM;AACd,KAAK;AACL;AACA;AACA,IAAI,KAAK,QAAQ,KAAK,SAAS,GAAG;AAClC,MAAM,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,8BAA8B,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AAClH,MAAM,OAAO,KAAK,CAAC;AACnB,KAAK;AACL;AACA;AACA,IAAI,IAAI,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AACtC,IAAI,KAAK,SAAS,GAAG,CAAC,GAAG;AACzB,MAAM,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gCAAgC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AACpH,MAAM,OAAO,KAAK,CAAC;AACnB,KAAK;AACL;AACA;AACA,IAAI,SAAS,OAAO,CAAC,IAAI;AACzB,MAAM,KAAK,WAAW;AACtB,QAAQ,YAAY,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;AAC7D,QAAQ,MAAM;AACd,MAAM,KAAK,MAAM,CAAC;AAClB,MAAM,KAAK,UAAU;AACrB,QAAQ,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,iBAAiB,EAAE,SAAS,CAAC,CAAC,CAAC;AAClF,QAAQ,MAAM;AACd,MAAM,KAAK,SAAS;AACpB,QAAQ,KAAK,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK;AACvG,UAAU,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;AACjG,UAAU,KAAK,OAAO,CAAC,MAAM,KAAK,SAAS,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;AACzD,UAAU,OAAO,IAAI,CAAC;AACtB,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;AACvC,QAAQ,MAAM,MAAM,GAAG,IAAI,QAAQ,GAAG;AACtC,UAAU,MAAM,SAAS,GAAG,CAAC,SAAS,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC;AAC7F,UAAU,MAAM,KAAK,GAAG,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACxG,UAAU,KAAK,KAAK,KAAK,CAAC,GAAG;AAC7B,YAAY,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,oBAAoB,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC;AACtG,YAAY,SAAS,IAAI,KAAK,CAAC;AAC/B,YAAY,KAAK,SAAS,KAAK,CAAC,GAAG,MAAM;AACzC,WAAW;AACX,SAAS;AACT,QAAQ,MAAM;AACd,MAAM,KAAK,SAAS;AACpB,QAAQ,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;AAChD,QAAQ,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;AACxD,QAAQ,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7C,QAAQ,KAAK,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,mBAAmB,CAAC,GAAG,SAAS,CAAC;AAC5E,aAAa,KAAK,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,yBAAyB,CAAC,GAAG,KAAK,CAAC;AAC7E,QAAQ,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACrC,QAAQ,MAAM;AACd,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE;AAChC;AACA;AACA,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AACnC,IAAI,MAAM,YAAY,GAAG;AACzB,MAAM,KAAK,EAAE,IAAI,CAAC,KAAK;AACvB,MAAM,OAAO,EAAE,KAAK,EAAE,IAAI,IAAI,IAAI;AAClC,MAAM,IAAI,EAAE,IAAI;AAChB,MAAM,IAAI,EAAE,MAAM,IAAI,CAAC,WAAW,EAAE;AACpC,MAAM,MAAM,EAAE,IAAI,CAAC,MAAM;AACzB,MAAM,SAAS,EAAE,IAAI,CAAC,SAAS;AAC/B,MAAM,SAAS,EAAE,IAAI,CAAC,SAAS;AAC/B,MAAM,SAAS,EAAE,IAAI,CAAC,SAAS;AAC/B,MAAM,WAAW,EAAE,IAAI,CAAC,WAAW;AACnC,MAAM,OAAO,EAAE,IAAI,CAAC,IAAI,KAAK,OAAO;AACpC,MAAM,OAAO,EAAE,IAAI,CAAC,OAAO;AAC3B,MAAM,aAAa,EAAE,IAAI,CAAC,aAAa;AACvC,MAAM,MAAM,EAAE,IAAI,CAAC,IAAI,KAAK,MAAM;AAClC,MAAM,eAAe,EAAE,IAAI,CAAC,eAAe;AAC3C,KAAK,CAAC;AACN,IAAI,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,4CAA4C,EAAE,YAAY,CAAC,CAAC;AAClG;AACA;AACA,IAAI,MAAM,QAAQ,GAAG;AACrB,MAAM,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;AACxB,MAAM,IAAI,EAAE,KAAK,CAAC,kBAAkB,CAAC,KAAK;AAC1C,MAAM,OAAO,EAAE,IAAI;AACnB,MAAM,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI;AACjD,MAAM,OAAO,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACjE,MAAM,KAAK,EAAE,CAAC,gBAAgB,EAAE,IAAI,CAAC;AACrC,KAAK,CAAC;AACN;AACA;AACA,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG;AAC1E,MAAM,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AACtE,KAAK;AACL;AACA;AACA,IAAI,QAAQ,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,CAAC,OAAO,CAAC,sBAAsB,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACnE;AACA;AACA,IAAI,WAAW,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AACnG;AACA;AACA,IAAI,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,KAAK,KAAK,IAAI,MAAM,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACnD;AACA,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,WAAW,CAAC,WAAW,CAAC,EAAE,EAAE;AACpC,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC;AACxC;AACA;AACA,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AACjF,MAAM,KAAK,EAAE,IAAI;AACjB,MAAM,UAAU,EAAE,IAAI;AACtB,MAAM,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE;AAClC,MAAM,GAAG,WAAW;AACpB,KAAK,CAAC,CAAC;AACP;AACA;AACA,IAAI,IAAI,CAAC,UAAU,GAAG;AACtB,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE;AACzC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,4BAA4B,IAAI,EAAE;AACvD,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,6BAA6B,IAAI,EAAE;AACxD,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACrB;AACA,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,UAAU,CAAC,OAAO,CAAC,EAAE,EAAE;AAC/B,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;AAC/C,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;AAC/F,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;AAC3E;AACA;AACA,IAAI,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AACpD,IAAI,KAAK,OAAO,CAAC,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC;AACvE;AACA;AACA,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC;AACtB,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC;AACpB,IAAI,IAAI,UAAU,GAAG,EAAE,CAAC;AACxB,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;AACxC,IAAI,KAAK,OAAO,EAAE,IAAI,KAAK,MAAM,GAAG;AACpC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAClD,MAAM,KAAK,IAAI,EAAE,MAAM,GAAG;AAC1B,QAAQ,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;AACvC,QAAQ,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;AAClD,QAAQ,KAAK,CAAC,KAAK,CAAC,GAAG,aAAa,IAAI,CAAC,CAAC,GAAG;AAC7C,UAAU,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAC5B,UAAU,KAAK,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACrC,SAAS;AACT,OAAO;AACP;AACA;AACA,MAAM,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC;AACnE,MAAM,KAAK,KAAK,KAAK,KAAK,GAAG,OAAO,IAAI,CAAC;AACzC,MAAM,UAAU,GAAG,KAAK,CAAC,eAAe,IAAI,EAAE,CAAC;AAC/C,KAAK;AACL;AACA;AACA,IAAI,MAAM,aAAa,GAAG,CAAC,KAAK,CAAC,aAAa;AAC9C,SAAS,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,SAAS,CAAC;AACrG;AACA;AACA,IAAI,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC;AACjD,MAAM,KAAK,EAAE,IAAI,CAAC,KAAK;AACvB,MAAM,IAAI,EAAE,QAAQ;AACpB,MAAM,QAAQ,EAAE,IAAI,CAAC,iBAAiB;AACtC,MAAM,KAAK;AACX,MAAM,MAAM,EAAE,KAAK;AACnB,MAAM,aAAa;AACnB,MAAM,aAAa,EAAE,KAAK,CAAC,aAAa;AACxC,MAAM,aAAa,EAAE;AACrB,QAAQ,KAAK,EAAE,GAAG;AAClB,QAAQ,GAAG,EAAE,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI;AAC9D,QAAQ,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG,GAAG;AACrC,OAAO;AACP,MAAM,WAAW,EAAE;AACnB,QAAQ,kBAAkB,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC;AAClF,QAAQ,OAAO,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5D,OAAO;AACP,KAAK,EAAE,OAAO,CAAC,CAAC;AAChB,IAAI,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,EAAE,UAAU,CAAC,KAAK,KAAK,GAAG,OAAO;AAChF;AACA,IAAI,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;AAC3C,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,OAAO,IAAI,CAAC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;AAC9D;AACA;AACA,IAAI,KAAK,UAAU,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,uBAAuB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAC3F,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,UAAU,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;AAC5F,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;AAC7F,IAAI,MAAM,WAAW,GAAG;AACxB,MAAM,kBAAkB,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC;AAChF,MAAM,OAAO,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1D,KAAK,CAAC;AACN;AACA;AACA,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AACnC,IAAI,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACxC,IAAI,KAAK,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;AACvD;AACA;AACA,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,MAAM,GAAG,eAAe,GAAG,kBAAkB,CAAC,CAAC;AACtH,IAAI,MAAM,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC;AACnD,IAAI,MAAM,UAAU,GAAG;AACvB,MAAM,KAAK,EAAE,IAAI,CAAC,KAAK;AACvB,MAAM,QAAQ;AACd,MAAM,IAAI,EAAE,QAAQ;AACpB,MAAM,KAAK;AACX,MAAM,KAAK,EAAE,KAAK;AAClB,MAAM,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK;AAC9F,MAAM,aAAa,EAAE;AACrB,QAAQ,KAAK,EAAE,GAAG;AAClB,QAAQ,GAAG,EAAE,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI;AAC9C,QAAQ,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG,GAAG;AACrC,OAAO;AACP,MAAM,WAAW;AACjB,KAAK,CAAC;AACN;AACA;AACA,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,SAAS,GAAG;AACtC,MAAM,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC;AAC/B,MAAM,WAAW,CAAC,kBAAkB,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC;AACvD,KAAK;AACL;AACA;AACA,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;AACxC,IAAI,MAAM,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI;AACnC,MAAM,KAAK,OAAO,CAAC,IAAI,KAAK,SAAS,GAAG;AACxC,QAAQ,IAAI,KAAK,CAAC;AAClB,QAAQ,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;AACvF,aAAa,KAAK,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,KAAK,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC9G,aAAa,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;AAC1D,QAAQ,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC1E,OAAO;AACP,WAAW,KAAK,UAAU,KAAK,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,GAAG;AAC9E,QAAQ,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAChG,OAAO;AACP,KAAK;AACL;AACA;AACA,IAAI,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC/G,IAAI,KAAK,UAAU,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG;AACpE,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACpC,KAAK;AACL;AACA;AACA,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,KAAK,MAAM,CAAC,GAAG;AAC7G,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1B,MAAM,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9E,MAAM,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnD,MAAM,OAAO,IAAI,CAAC,KAAK,CAAC;AACxB,KAAK;AACL;AACA;AACA,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,MAAM,GAAG;AAC7C,MAAM,UAAU,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,yBAAyB,CAAC,IAAI,CAAC,CAAC;AACjG,KAAK;AACL;AACA;AACA,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAC,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AACrG;AACA,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACnD,IAAI,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,EAAE,UAAU,CAAC,KAAK,KAAK,GAAG,OAAO;AAChF;AACA,IAAI,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC9D;AACA;AACA,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE;AACrD,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5C,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,OAAO,EAAE,CAAC;AAC/B,IAAI,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC/E,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE;AACrE,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC;AAC7D,IAAI,KAAK,YAAY,KAAK,CAAC,GAAG,OAAO,KAAK,CAAC;AAC3C,IAAI,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;AACrE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE;AAChD,IAAI,KAAK,KAAK,IAAI,CAAC,GAAG,OAAO,KAAK,CAAC;AACnC,IAAI,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC5C,IAAI,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACvD;AACA;AACA,IAAI,IAAI,UAAU,GAAG,KAAK,CAAC;AAC3B,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,GAAG;AACjE,MAAM,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC7B,MAAM,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC5B,MAAM,KAAK,CAAC,EAAE,YAAY,GAAG,MAAM,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG;AACjG,QAAQ,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,CAAC;AAC/B,QAAQ,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC;AAC9B,QAAQ,UAAU,GAAG,IAAI,CAAC;AAC1B,OAAO;AACP,KAAK;AACL;AACA;AACA,IAAI,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/D,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,WAAW,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE;AACrC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;AAC9F;AACA,IAAI,MAAM,UAAU,GAAG;AACvB,MAAM,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;AAClC,MAAM,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;AAC9B,MAAM,WAAW,EAAE,IAAI;AACvB,KAAK,CAAC;AACN,IAAI,KAAK,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,EAAE,UAAU,CAAC,KAAK,KAAK,GAAG,OAAO;AACjF;AACA,IAAI,MAAM,IAAI,GAAG,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACzF;AACA,IAAI,KAAK,UAAU,CAAC,WAAW,GAAG;AAClC,MAAM,IAAI,CAAC,SAAS,CAAC;AACrB,QAAQ,OAAO,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5D,QAAQ,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC;AAC5E,QAAQ,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;AACvD,QAAQ,WAAW,EAAE,CAAC,kBAAkB,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AAChG,OAAO,CAAC,CAAC;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACnD;AACA,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,YAAY,GAAG;AACvB,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;AAChD,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,GAAG,OAAO;AAClC;AACA,IAAI,MAAM,UAAU,GAAG;AACvB,MAAM,OAAO,EAAE,KAAK;AACpB,MAAM,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;AAC9B,MAAM,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;AACtC,MAAM,WAAW,EAAE,IAAI;AACvB,KAAK,CAAC;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,uBAAuB,EAAE,IAAI,EAAE,UAAU,CAAC,KAAK,KAAK,GAAG,OAAO;AAClF;AACA,IAAI,MAAM,IAAI,GAAG,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACzF,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,MAAM,CAAC;AACpD;AACA,IAAI,KAAK,UAAU,CAAC,WAAW,GAAG;AAClC,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,kBAAkB,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AACvG,MAAM,IAAI,CAAC,SAAS,CAAC;AACrB,QAAQ,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,yBAAyB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;AACtG,QAAQ,OAAO,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACrF,OAAO,CAAC,CAAC;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,KAAK,GAAG,OAAO,IAAI,CAAC;AAC9E;AACA;AACA,IAAI,KAAK,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC,CAAC;AAClE;AACA,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE;AAClC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,MAAM,GAAG,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;AACpE,IAAI,OAAO,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AAC3D,MAAM,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;AAClC,MAAM,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;AAC9B,MAAM,GAAG,OAAO;AAChB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,EAAE,aAAa,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;AAC1C,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,OAAO,IAAI,CAAC;AACnC,IAAI,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC;AACpE,IAAI,MAAM,QAAQ,GAAG;AACrB,MAAM,GAAG,aAAa;AACtB,MAAM,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM;AAClC,KAAK,CAAC;AACN;AACA;AACA,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;AAChC,IAAI,KAAK,GAAG,KAAK,WAAW,IAAI,QAAQ,CAAC,GAAG;AAC5C,MAAM,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC9C,MAAM,KAAK,CAAC,OAAO,GAAG;AACtB,QAAQ,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,yCAAyC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC7H,OAAO;AACP,MAAM,QAAQ,CAAC,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;AACvC,KAAK;AACL,IAAI,OAAO,QAAQ,CAAC;AACpB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,aAAa,CAAC,IAAI,EAAE;AAC7B,IAAI,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,sBAAsB,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAChF,IAAI,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7E,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,iBAAiB,CAAC,KAAK,EAAE;AACxC,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B;AACA;AACA,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC;AACvC,IAAI,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AAC9C,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;AACjE,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACjD,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;AACzC;AACA;AACA,IAAI,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AACrD,IAAI,KAAK,CAAC,KAAK,GAAG,OAAO;AACzB;AACA;AACA,IAAI,MAAM,WAAW,GAAG,MAAM,KAAK,MAAM,CAAC;AAC1C,IAAI,KAAK,GAAG,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,GAAG,OAAO;AACtE;AACA;AACA,IAAI,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC5D,IAAI,MAAM,IAAI,GAAG,UAAU,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC3G,IAAI,KAAK,CAAC,IAAI,GAAG;AACjB,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,2BAA2B,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/G,MAAM,OAAO,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACzC,KAAK;AACL,IAAI,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;AACjE;AACA;AACA,IAAI,IAAI,OAAO,CAAC;AAChB,IAAI,SAAS,MAAM;AACnB,MAAM,KAAK,QAAQ;AACnB,QAAQ,MAAM,IAAI,CAAC,UAAU,CAAC;AAC9B,UAAU,KAAK,EAAE,KAAK;AACtB,UAAU,UAAU,EAAE,UAAU;AAChC,SAAS,CAAC,CAAC;AACX,QAAQ,MAAM;AACd,MAAM,KAAK,QAAQ,CAAC;AACpB,MAAM,KAAK,WAAW;AACtB,QAAQ,MAAM,IAAI,CAAC,UAAU,CAAC;AAC9B,UAAU,KAAK,EAAE,KAAK;AACtB,UAAU,UAAU,EAAE,UAAU;AAChC,UAAU,SAAS,EAAE,MAAM,KAAK,WAAW;AAC3C,SAAS,CAAC,CAAC;AACX,QAAQ,MAAM;AACd,MAAM,KAAK,SAAS;AACpB,QAAQ,MAAM,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM;AAC3D,MAAM,KAAK,MAAM;AACjB,QAAQ,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;AACjD,QAAQ,MAAM,IAAI,KAAK,IAAI,OAAO,GAAG;AACrC,UAAU,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/F,UAAU,MAAM,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AACxF,SAAS;AACT,QAAQ,MAAM;AACd,MAAM,KAAK,WAAW;AACtB,QAAQ,MAAM,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM;AACjD,MAAM,KAAK,eAAe;AAC1B,QAAQ,IAAI;AACZ,UAAU,MAAM,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC;AAC3E,SAAS,CAAC,MAAM,GAAG,EAAE,EAAE;AACvB,QAAQ,MAAM;AACd,MAAM,KAAK,cAAc;AACzB,QAAQ,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;AACjD,QAAQ,MAAM,IAAI,KAAK,IAAI,OAAO,GAAG;AACrC,UAAU,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/F,UAAU,MAAM,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AACxF,SAAS;AACT,QAAQ,MAAM;AACd,KAAK;AACL;AACA;AACA,IAAI,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;AAC5B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,wBAAwB,CAAC,KAAK,EAAE;AACzC,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC;AACvC,IAAI,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AAC9C,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;AACxD,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAChF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,iBAAiB,CAAC,IAAI,EAAE;AACvC;AACA;AACA,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG;AAChC,MAAM,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACzD,MAAM,KAAK,CAAC,KAAK,GAAG,OAAO,IAAI,CAAC;AAChC,MAAM,OAAO,KAAK,CAAC,KAAK,CAAC;AACzB,KAAK;AACL;AACA;AACA,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;AACzC,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;AAC5C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,mBAAmB,CAAC,IAAI,EAAE;AACnC,IAAI,IAAI,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAClE,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC;AAClH,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC,CAAC;AACnG,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;AACzE,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,OAAO,IAAI,CAAC;AAChD;AACA,IAAI,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAC5D,IAAI,KAAK,CAAC,WAAW,GAAG,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAC;AAC9F;AACA,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG;AACtG,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,gCAAgC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7E,KAAK;AACL;AACA,IAAI,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AAC9D,IAAI,MAAM,qBAAqB,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC;AACrE,IAAI,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;AACvD,IAAI,KAAK,MAAM,GAAG,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,oBAAoB,EAAE,qBAAqB,CAAC,CAAC,CAAC;AAC1F,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,oBAAoB,EAAE,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM;AACjF,MAAM,KAAK,CAAC,UAAU,GAAG,OAAO,IAAI,CAAC;AACrC,MAAM,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;AACjG,MAAM,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACjC,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;AACtD,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,OAAO,IAAI,CAAC;AAChD,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC;AACrE,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,CAAC,CAAC,kBAAkB,EAAE,EAAE,CAAC,6BAA6B,CAAC,CAAC,CAAC;AAC9F;AACA,IAAI,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAClD,IAAI,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AACtC,IAAI,KAAK,MAAM,GAAG;AAClB,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;AAC3B,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK;AACL;AACA,IAAI,MAAM,qBAAqB,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC;AACrE,IAAI,qBAAqB,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC;AACxD,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,oBAAoB,EAAE,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI;AAChF,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;AAC3B,MAAM,OAAO,CAAC,CAAC;AACf,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;AAC7C,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,OAAO,IAAI,CAAC;AAChD;AACA,IAAI,MAAM,qBAAqB,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC;AAC/F,IAAI,KAAK,MAAM,GAAG,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,oBAAoB,EAAE,qBAAqB,CAAC,CAAC,CAAC;AAC1F,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,oBAAoB,EAAE,qBAAqB,CAAC,CAAC,CAAC;AACtE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,oBAAoB,CAAC,EAAE,EAAE,OAAO,EAAE;AACpC,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC/C,IAAI,KAAK,CAAC,QAAQ,GAAG,OAAO,IAAI,CAAC;AACjC,IAAI,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;AAC1C,IAAI,OAAO,SAAS,CAAC,GAAG,CAAC;AACzB,IAAI,KAAK,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,GAAG;AAC3D,MAAM,SAAS,CAAC,KAAK,GAAG,CAAC,IAAI,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC;AAC1F,KAAK,MAAM;AACX,MAAM,SAAS,CAAC,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC;AAC5E,KAAK;AACL,IAAI,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AACrF,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,mBAAmB,CAAC,YAAY,EAAE,EAAE,EAAE,OAAO,EAAE;AACjD,IAAI,KAAK,YAAY,KAAK,aAAa,GAAG,OAAO,KAAK,CAAC,mBAAmB,CAAC,YAAY,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;AACtG,IAAI,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAClD,IAAI,KAAK,OAAO,EAAE,MAAM,KAAK,WAAW,KAAK,SAAS,CAAC,GAAG;AAC1D,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,uBAAuB,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC;AACxF,KAAK;AACL,IAAI,OAAO,WAAW,CAAC;AACvB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;AACxC,IAAI,MAAM,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AAChD;AACA;AACA,IAAI,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG;AAChF,MAAM,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;AAC1F,KAAK;AACL;AACA,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,GAAG,OAAO;AACvE,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC;AAC7C,IAAI,IAAI,OAAO,CAAC;AAChB,IAAI,QAAQ,IAAI,CAAC,IAAI;AACrB,MAAM,KAAK,WAAW;AACtB,QAAQ,OAAO,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC5D,QAAQ,MAAM;AACd,MAAM,KAAK,OAAO;AAClB,QAAQ,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACxD,QAAQ,MAAM;AACd,MAAM,KAAK,MAAM;AACjB,QAAQ,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACvD,QAAQ,MAAM;AACd,MAAM,KAAK,QAAQ;AACnB,QAAQ,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACzD,QAAQ,MAAM;AACd,KAAK;AACL,IAAI,KAAK,OAAO,GAAG,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AACrD,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE;AACzC,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC3C,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO;AAC5D;AACA;AACA,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW,MAAM,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,GAAG;AACzE,MAAM,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AACjF,MAAM,KAAK,CAAC,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;AACzD,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AAC3C,IAAI,MAAM,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AACnD,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,OAAO;AACnF;AACA;AACA,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG;AACtC,MAAM,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gCAAgC,CAAC,CAAC,CAAC;AAClF,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAChC,KAAK;AACL;AACA;AACA,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG;AACzD,MAAM,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,iCAAiC,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC/G,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;AACpD,KAAK;AACL,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW,CAAC,GAAG,OAAO;AACzE;AACA;AACA,IAAI,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC7G,IAAI,KAAK,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG;AACrD,MAAM,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,qCAAqC,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACnH,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;AACzE,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE;AAC7B,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACrC,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO;AAC5D;AACA;AACA,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,MAAM,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG;AAC7F,MAAM,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;AACxC,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,uBAAuB,CAAC,IAAI,EAAE,KAAK,EAAE;AACvC,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC;AACvB,IAAI,KAAK,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,iBAAiB,CAAC,KAAK,SAAS,GAAG;AAC5E,MAAM,OAAO,CAAC,iBAAiB,CAAC,GAAG,KAAK,CAAC;AACzC,KAAK;AACL,IAAI,KAAK,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,mBAAmB,CAAC,KAAK,SAAS,GAAG;AAC9E,MAAM,KAAK,KAAK,GAAG;AACnB,QAAQ,OAAO,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC;AAC5C,OAAO,MAAM;AACb,QAAQ,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACtF,QAAQ,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,CAAC;AACzF,QAAQ,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,KAAK,IAAI,KAAK,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC;AAC7F,aAAa,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACvD,OAAO;AACP,KAAK;AACL,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE;AACnC,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC;AACvB,IAAI,KAAK,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,6BAA6B,CAAC,KAAK,SAAS,GAAG;AACxF,MAAM,OAAO,CAAC,6BAA6B,CAAC,GAAG,KAAK,CAAC;AACrD,KAAK;AACL,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE;AAClC,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC;AACvB,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE,UAAU,KAAK,SAAS,GAAG;AACjD,MAAM,KAAK,KAAK,GAAG,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;AACpD,WAAW;AACX,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;AAC9D,QAAQ,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;AACrE,QAAQ,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;AACxE,QAAQ,OAAO,CAAC,mBAAmB,CAAC,GAAG,QAAQ,IAAI,WAAW,IAAI,CAAC,CAAC;AACpE,OAAO;AACP,KAAK;AACL,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE;AACpC;AACA;AACA,IAAI,KAAK,KAAK,GAAG;AACjB,MAAM,MAAM,OAAO,GAAG,EAAE,CAAC;AACzB,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,iBAAiB,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC;AACnG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,mBAAmB,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC;AACvG,MAAM,OAAO,OAAO,CAAC;AACrB,KAAK;AACL,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE,UAAU,KAAK,SAAS,GAAG,OAAO,EAAE,CAAC;AAC3D;AACA;AACA,IAAI,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACnF,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC;AACvB,IAAI,KAAK,UAAU,KAAK,IAAI,GAAG,OAAO,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC;AACnE;AACA;AACA,SAAS;AACT,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,IAAI,IAAI,GAAG,EAAE,CAAC;AACnF,MAAM,OAAO,CAAC,mBAAmB,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACxG,KAAK;AACL,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,qBAAqB,CAAC,KAAK,EAAE;AAC5C;AACA;AACA,IAAI,MAAM,QAAQ,GAAG,CAAC,KAAK,YAAY,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC;AAC1E,IAAI,IAAI;AACR,MAAM,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW;AACrH,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;AACxB;AACA;AACA,IAAI,MAAM,UAAU,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC5G,IAAI,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;AAClD,IAAI,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;AAC7C,IAAI,OAAO,UAAU,CAAC,GAAG,CAAC;AAC1B;AACA;AACA,IAAI,MAAM,iBAAiB,GAAG,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC;AAClE,IAAI,MAAM,IAAI,GAAG,MAAM,CAAC;AACxB,IAAI,MAAM,cAAc,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC3D,IAAI,MAAM,WAAW,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AACjF,IAAI,MAAM,aAAa,GAAG,iBAAiB,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAChF;AACA;AACA,IAAI,MAAM,IAAI,GAAG,CAAC,EAAE,WAAW,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,KAAK,CAAC,iCAAiC,EAAE,aAAa,CAAC,CAAC,CAAC;AAC3J;AACA;AACA,IAAI,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG;AACjE,MAAM,WAAW,GAAG,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAC9D,KAAK;AACL,IAAI,KAAK,IAAI,CAAC,OAAO,GAAG;AACxB,MAAM,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;AAC5B,MAAM,IAAI,CAAC,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;AAC1C,KAAK;AACL;AACA;AACA,IAAI,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE;AAClE,MAAM,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC1E,MAAM,GAAG,EAAE,QAAQ,CAAC,GAAG;AACvB,MAAM,MAAM,EAAE;AACd,QAAQ,WAAW,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO;AACnH,QAAQ,IAAI,EAAE,KAAK,EAAE,WAAW;AAChC,OAAO;AACP,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC;AACrC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,oBAAoB,GAAG;AACzB,IAAI,OAAO,CAAC,KAAK,CAAC,uBAAuB;AACzC,MAAM,yFAAyF;AAC/F,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE;AAChD,KAAK,CAAC;AACN,IAAI,OAAO,IAAI,CAAC,iBAAiB,CAAC;AAClC,GAAG;AACH;;AC1lEA;AACA;AACA;AACA;AACA;AACe,MAAM,eAAe,SAAS,aAAa,CAAC;AAC3D;AACA,EAAE,iBAAiB,CAAC,IAAI,EAAE;AAC1B,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAClC,IAAI,KAAK,IAAI,CAAC,UAAU,GAAG;AAC3B,MAAM,MAAM,MAAM,QAAQ,IAAI,IAAI,CAAC,kBAAkB,EAAE,GAAG;AAC1D,QAAQ,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,QAAQ,CAAC,gBAAgB,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK;AAC1F,UAAU,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC7B,UAAU,EAAE,CAAC,OAAO,CAAC,OAAO,GAAG,mCAAmC,CAAC;AACnE,SAAS,CAAC,CAAC;AACX,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,GAAG;AACvB,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC;AACjF,GAAG;AACH;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,kBAAkB,SAAS,eAAe,CAAC;AAChE,EAAE,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE;AACzC,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC1B,IAAI,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;AAChC,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,OAAO,EAAE,CAAC,OAAO,CAAC;AACxB,MAAM,QAAQ,EAAE,iDAAiD;AACjE,MAAM,KAAK,EAAE,GAAG;AAChB,MAAM,MAAM,EAAE,MAAM;AACpB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,KAAK,GAAG;AACd,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,6BAA6B,EAAE;AAC9D,MAAM,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACxF,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,OAAO,EAAE;AACnB,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;AACzC,IAAI,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC;AAClE,IAAI,OAAO;AACX,MAAM,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AAC7G,MAAM,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,4BAA4B,EAAE,CAAC,OAAO,CAAC,CAAC;AAC3E,MAAM,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,6BAA6B,EAAE,CAAC,OAAO,CAAC,CAAC;AAC7E,MAAM,SAAS,EAAE,IAAI,CAAC,UAAU;AAChC,MAAM,iBAAiB,EAAE;AACzB,QAAQ,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAC5C,OAAO;AACP,MAAM,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI;AAC1D,MAAM,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK;AAC5D,KAAK,CAAC;AACN,GAAG;AACH;;ACpDA;AACA;AACA;AACe,MAAM,gBAAgB,SAAS,eAAe,CAAC;AAC9D,EAAE,WAAW,CAAC,GAAG,IAAI,EAAE;AACvB,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;AACnB;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;AACvC,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,OAAO,EAAE,CAAC,OAAO,EAAE,oBAAoB,CAAC;AAC9C,MAAM,QAAQ,EAAE,8CAA8C;AAC9D,MAAM,KAAK,EAAE,GAAG;AAChB,MAAM,MAAM,EAAE,MAAM;AACpB,MAAM,WAAW,EAAE,KAAK;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,KAAK,GAAG;AACd,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/E,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,GAAG;AAClB,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;AAC/C,IAAI,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AACzD;AACA;AACA,IAAI,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AACjD,IAAI,KAAK,CAAC,GAAG,GAAG;AAChB,MAAM,EAAE,CAAC,IAAI,GAAG,MAAM,CAAC;AACvB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC;AAC3C,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,2BAA2B,EAAE,MAAM,EAAE,CAAC,CAAC;AACvE,KAAK;AACL;AACA,IAAI,OAAO;AACX,MAAM,EAAE,EAAE,MAAM;AAChB,MAAM,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,YAAY;AAC7C,MAAM,aAAa,EAAE,CAAC,MAAM;AAC5B,MAAM,OAAO,EAAE,EAAE,CAAC,IAAI,KAAK,QAAQ,GAAG,EAAE,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO;AAC9D,MAAM,eAAe,EAAE,EAAE,CAAC,IAAI,KAAK,QAAQ;AAC3C,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,kBAAkB,GAAG;AACvB,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC;AACrG,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE;AACvC,IAAI,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;AACvD,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC,CAAC;AAC9D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,cAAc,CAAC,KAAK,EAAE;AAC9B,IAAI,MAAM,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AACtC;AACA;AACA,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,kBAAkB,EAAE,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9G,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;AAClB,GAAG;AACH;;ACrFA;AACA;AACA;AACe,MAAM,kBAAkB,SAAS,eAAe,CAAC;AAChE;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC;AAC/C,MAAM,QAAQ,EAAE,kDAAkD;AAClE,MAAM,KAAK,EAAE,GAAG;AAChB,MAAM,MAAM,EAAE,MAAM;AACpB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,KAAK,GAAG;AACd,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/E,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,OAAO,EAAE;AACnB,IAAI,OAAO;AACX,MAAM,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,IAAI,KAAK;AAC3D,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACnC,UAAU,OAAO,CAAC,IAAI,CAAC;AACvB,YAAY,WAAW,EAAE,IAAI,CAAC,EAAE;AAChC,YAAY,IAAI,EAAE,IAAI,CAAC,IAAI;AAC3B,YAAY,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;AAC1C,YAAY,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW;AACxE,YAAY,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;AAC1C,YAAY,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC;AACvE,WAAW,CAAC,CAAC;AACb,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC;AACvB,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5F,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,IAAI,EAAE;AAC1B,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAClC;AACA;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI;AAClE,MAAM,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC;AACzC,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;AACrE,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AAC7D,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACxE,MAAM,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAChG,KAAK,CAAC,CAAC;AACP;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACrE,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE;AACvC,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AACzC,IAAI,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM;AACrE,MAAM,GAAG,EAAE,EAAE;AACb,MAAM,oBAAoB,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE;AACjE,KAAK,CAAC,CAAC,CAAC;AACR,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AACrE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,aAAa,CAAC,KAAK,EAAE;AAC7B,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC;AACvC,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACzD;AACA;AACA,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;AAClB,GAAG;AACH;;ACxFA;AACA;AACA;AACe,MAAM,oBAAoB,SAAS,eAAe,CAAC;AAClE,EAAE,WAAW,CAAC,GAAG,IAAI,EAAE;AACvB,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;AACnB;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;AACrC,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,OAAO,EAAE,CAAC,OAAO,EAAE,yBAAyB,CAAC;AACnD,MAAM,QAAQ,EAAE,oDAAoD;AACpE,MAAM,KAAK,EAAE,GAAG;AAChB,MAAM,MAAM,EAAE,MAAM;AACpB,MAAM,WAAW,EAAE,KAAK;AACxB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,KAAK,GAAG;AACd,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACnF,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,OAAO,EAAE;AACnB,IAAI,OAAO;AACX,MAAM,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;AACzC,MAAM,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;AACxD,MAAM,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,WAAW;AACrD,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,kBAAkB,GAAG;AACvB,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC;AACrG,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE;AACvC,IAAI,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;AACvD,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC,CAAC;AAC1D,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC;AAClG,IAAI,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC;AAChF,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC,CAAC;AAC9D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,IAAI,EAAE;AAC1B,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAClC,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1E,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,cAAc,CAAC,KAAK,EAAE;AAC9B,IAAI,MAAM,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AACtC,IAAI,MAAM,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC;AAClC;AACA;AACA,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC;AAClF,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AACjD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,gBAAgB,CAAC,KAAK,EAAE;AAChC,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,IAAI;AACR,MAAM,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;AACvD,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,0BAA0B,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACxE,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;AACpB,KAAK,CAAC,MAAM,KAAK,EAAE;AACnB,MAAM,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC;AACzE,MAAM,MAAM,KAAK,CAAC;AAClB,KAAK;AACL,GAAG;AACH;;ACvGA;AACA;AACA;AACe,MAAM,qBAAqB,SAAS,eAAe,CAAC;AACnE;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,OAAO,EAAE,CAAC,OAAO,CAAC;AACxB,MAAM,QAAQ,EAAE,oDAAoD;AACpE,MAAM,KAAK,EAAE,GAAG;AAChB,MAAM,MAAM,EAAE,MAAM;AACpB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,KAAK,GAAG;AACd,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACpF,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE;AACtB,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;AAC5C,IAAI,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC;AACrD,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;AAC3C,IAAI,OAAO;AACX,MAAM,OAAO,EAAE,IAAI,CAAC,OAAO;AAC3B,MAAM,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS;AACvC,MAAM,KAAK,EAAE,IAAI,CAAC,KAAK;AACvB,MAAM,eAAe,EAAE,KAAK,CAAC,eAAe;AAC5C,MAAM,aAAa,EAAE,KAAK,CAAC,aAAa;AACxC,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,UAAU,CAAC,EAAE,EAAE;AAChC,IAAI,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;AACtD,IAAI,QAAQ,CAAC,KAAK,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACjC,IAAI,MAAM,MAAM,IAAI,IAAI,CAAC,iBAAiB,EAAE,eAAe,CAAC,GAAG;AAC/D,MAAM,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;AACtC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAC3D,WAAW,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AACpD,MAAM,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;AACzB,KAAK;AACL,IAAI,OAAO,QAAQ,CAAC;AACpB,GAAG;AACH;;ACpDA;AACA;AACA;AACe,MAAM,mBAAmB,SAAS,eAAe,CAAC;AACjE;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,OAAO,EAAE,CAAC,OAAO,CAAC;AACxB,MAAM,QAAQ,EAAE,kDAAkD;AAClE,MAAM,KAAK,EAAE,GAAG;AAChB,MAAM,MAAM,EAAE,MAAM;AACpB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,KAAK,GAAG;AACd,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAClF,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE;AACtB,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;AAC5C;AACA;AACA,IAAI,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,IAAI,EAAE,CAAC;AAC9D,IAAI,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG;AACnD,MAAM,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS;AACrD,MAAM,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/D,KAAK;AACL;AACA;AACA,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,KAAK,OAAO,GAAG;AAC7C,MAAM,IAAI,EAAE,oBAAoB;AAChC,MAAM,KAAK,EAAE,qBAAqB;AAClC,MAAM,GAAG,EAAE,mBAAmB;AAC9B,KAAK,GAAG;AACR,MAAM,IAAI,EAAE,oBAAoB;AAChC,MAAM,MAAM,EAAE,sBAAsB;AACpC,MAAM,KAAK,EAAE,qBAAqB;AAClC,MAAM,GAAG,EAAE,mBAAmB;AAC9B,MAAM,IAAI,EAAE,oBAAoB;AAChC,KAAK,CAAC;AACN;AACA;AACA,IAAI,OAAO;AACX,MAAM,MAAM;AACZ,MAAM,QAAQ;AACd,MAAM,WAAW,EAAE,MAAM,CAAC,IAAI,KAAK,OAAO;AAC1C,MAAM,QAAQ,EAAE,MAAM,CAAC,IAAI,KAAK,OAAO;AACvC,MAAM,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,aAAa;AACvC,KAAK,CAAC;AACN,GAAG;AACH;;ACzDA;AACA;AACA;AACe,MAAM,iBAAiB,SAAS,eAAe,CAAC;AAC/D;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,OAAO,EAAE,CAAC,OAAO,CAAC;AACxB,MAAM,QAAQ,EAAE,gDAAgD;AAChE,MAAM,KAAK,EAAE,GAAG;AAChB,MAAM,MAAM,EAAE,MAAM;AACpB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,KAAK,GAAG;AACd,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAChF,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,OAAO,EAAE;AACnB,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,IAAI,EAAE,CAAC;AAC5E,IAAI,MAAM,IAAI,GAAG;AACjB,MAAM,MAAM,EAAE,EAAE;AAChB,MAAM,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;AACnC,MAAM,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,aAAa;AACpE,KAAK,CAAC;AACN,IAAI,MAAM,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG;AACrE,MAAM,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AACrC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG;AAC1B,QAAQ,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACxC,QAAQ,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;AACzD,OAAO,CAAC;AACR,KAAK;AACL,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;;ACzCA;AACA;AACA;AACe,MAAM,eAAe,SAAS,eAAe,CAAC;AAC7D;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,EAAE,EAAE,aAAa;AACvB,MAAM,OAAO,EAAE,CAAC,OAAO,CAAC;AACxB,MAAM,QAAQ,EAAE,8CAA8C;AAC9D,MAAM,KAAK,EAAE,GAAG;AAChB,MAAM,aAAa,EAAE,IAAI;AACzB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,KAAK,GAAG;AACd,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5E,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;AACpB,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;AAC7B,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACtC,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAClC,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACtC,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,GAAG;AAChB,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;AACtE,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK;AACnF,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AACzB,MAAM,OAAO,GAAG,CAAC;AACjB,KAAK,EAAE,EAAE,CAAC,CAAC;AACX,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,GAAG;AACd,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;AACrB,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;AAC5C,IAAI,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG;AACtE,MAAM,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;AACpE,MAAM,IAAI,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC5C,MAAM,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9B,MAAM,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;AAC3C,MAAM,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;AAClD,MAAM,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3E,MAAM,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AAClD,KAAK;AACL,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,GAAG;AAChB,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;AACvC,IAAI,MAAM,OAAO,GAAG;AACpB,MAAM,CAAC,IAAI,EAAE,4BAA4B,EAAE,KAAK,EAAE,qBAAqB,CAAC;AACxE,MAAM,CAAC,IAAI,EAAE,4BAA4B,EAAE,KAAK,EAAE,qBAAqB,CAAC;AACxE,MAAM,CAAC,IAAI,EAAE,4BAA4B,EAAE,KAAK,EAAE,qBAAqB,CAAC;AACxE,MAAM,CAAC,IAAI,EAAE,4BAA4B,EAAE,KAAK,EAAE,qBAAqB,CAAC;AACxE,MAAM,CAAC,IAAI,EAAE,4BAA4B,EAAE,KAAK,EAAE,qBAAqB,CAAC;AACxE,MAAM,CAAC,IAAI,EAAE,4BAA4B,EAAE,KAAK,EAAE,qBAAqB,CAAC;AACxE,MAAM,CAAC,IAAI,EAAE,4BAA4B,EAAE,KAAK,EAAE,qBAAqB,CAAC;AACxE,MAAM,CAAC,IAAI,EAAE,4BAA4B,EAAE,KAAK,EAAE,qBAAqB,CAAC;AACxE,MAAM,CAAC,IAAI,EAAE,gCAAgC,EAAE,KAAK,EAAE,yBAAyB,CAAC;AAChF,MAAM,CAAC,IAAI,EAAE,+BAA+B,EAAE,KAAK,EAAE,wBAAwB,CAAC;AAC9E,MAAM,CAAC,IAAI,EAAE,gCAAgC,EAAE,KAAK,EAAE,yBAAyB,CAAC;AAChF,MAAM,CAAC,IAAI,EAAE,yBAAyB,EAAE,KAAK,EAAE,oBAAoB,CAAC;AACpE,KAAK,CAAC;AACN,IAAI,MAAM,IAAI,CAAC,IAAI,OAAO,GAAG;AAC7B,MAAM,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AAC7D,KAAK;AACL,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE;AACvC,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;AAC9B,IAAI,IAAI,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AAC1D,IAAI,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;AACjC;AACA;AACA,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;AACzC,IAAI,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG;AAChD,MAAM,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG;AACzD,QAAQ,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;AACxB,QAAQ,KAAK,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AACzF,OAAO;AACP,KAAK;AACL;AACA;AACA,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG;AAC/D,MAAM,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;AAC9C,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACxB,OAAO;AACP,KAAK;AACL;AACA;AACA,IAAI,MAAM,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAClD,GAAG;AACH;;ACjIA;AACA;AACA;AACe,MAAM,eAAe,SAAS,eAAe,CAAC;AAC7D;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,OAAO,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,gBAAgB,CAAC;AACxD,MAAM,QAAQ,EAAE,6CAA6C;AAC7D,MAAM,KAAK,EAAE,GAAG;AAChB,MAAM,MAAM,EAAE,MAAM;AACpB,MAAM,OAAO,EAAE,EAAE;AACjB,MAAM,WAAW,EAAE,IAAI;AACvB,MAAM,OAAO,EAAE,CAAC;AAChB,MAAM,OAAO,EAAE,IAAI;AACnB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,KAAK,GAAG;AACd,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AACnF,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,EAAE,GAAG;AACX,IAAI,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1C,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE;AACtB;AACA;AACA,IAAI,IAAI,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAC7E,IAAI,KAAK,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,QAAQ,GAAG,IAAI,GAAG;AAC3D,MAAM,KAAK,EAAE,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,GAAG,UAAU;AACrE,MAAM,OAAO,EAAE,EAAE;AACjB,MAAM,KAAK,EAAE,EAAE;AACf,MAAM,MAAM,EAAE,EAAE;AAChB,KAAK,CAAC;AACN;AACA;AACA,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;AACrB,IAAI,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG;AACrE,MAAM,KAAK,CAAC,CAAC,CAAC,GAAG;AACjB,QAAQ,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACpC,QAAQ,MAAM,EAAE,IAAI,CAAC,KAAK,KAAK,CAAC;AAChC,OAAO,CAAC;AACR,KAAK;AACL;AACA;AACA,IAAI,OAAO;AACX,MAAM,KAAK,EAAE,KAAK;AAClB,MAAM,MAAM,EAAE;AACd,QAAQ,KAAK,EAAE,IAAI,CAAC,MAAM;AAC1B,QAAQ,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,kCAAkC,CAAC;AACrE,QAAQ,MAAM,EAAE,IAAI,CAAC,KAAK,KAAK,QAAQ;AACvC,OAAO;AACP,MAAM,OAAO,EAAE,IAAI,CAAC,OAAO;AAC3B,MAAM,KAAK,EAAE,IAAI,CAAC,KAAK;AACvB,MAAM,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK;AAC9F,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACzB,QAAQ,OAAO,GAAG,CAAC;AACnB,OAAO,EAAE,EAAE,CAAC;AACZ,MAAM,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,GAAG;AACtD,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE;AACvC,IAAI,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AAC5D,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,qBAAqB,EAAE,UAAU,CAAC,CAAC,CAAC;AACnE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,IAAI,EAAE;AAC1B,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAClC,IAAI,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACrF,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,KAAK,EAAE;AACxB,IAAI,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAChC,IAAI,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;AACzE,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC;AAC5E,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,qBAAqB,CAAC,KAAK,EAAE;AAC/B,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,qCAAqC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;AAClF,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAC/B,GAAG;AACH;;AClHA;AACA;AACA;AACe,MAAM,6BAA6B,SAAS,MAAM,CAAC;AAClE;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,QAAQ,EAAE,yEAAyE;AACzF,MAAM,MAAM,EAAE,KAAK;AACnB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,SAAS,CAAC,IAAI,EAAE;AACzB,IAAI,OAAO,IAAI,CAAC,YAAY;AAC5B,MAAM,IAAI;AACV,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,0CAA0C,CAAC;AACpE,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,4CAA4C,CAAC;AACtE,MAAM;AACN,QAAQ,IAAI,EAAE,8BAA8B;AAC5C,QAAQ,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC3C,OAAO;AACP,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,YAAY,CAAC,IAAI,EAAE;AAC5B,IAAI,OAAO,IAAI,CAAC,YAAY;AAC5B,MAAM,IAAI;AACV,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,6CAA6C,CAAC;AACvE,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,+CAA+C,CAAC;AACzE,MAAM;AACN,QAAQ,IAAI,EAAE,8CAA8C;AAC5D,QAAQ,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,2BAA2B,CAAC;AAC9D,OAAO;AACP,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE;AAC5D,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AAC5C,MAAM,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC;AAC9B,QAAQ,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACvC,QAAQ,OAAO,EAAE,OAAO;AACxB,QAAQ,OAAO,EAAE;AACjB,UAAU,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE;AAC9D,YAAY,QAAQ,EAAE,IAAI,IAAI;AAC9B,cAAc,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,iCAAiC,CAAC,CAAC;AACrF,cAAc,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACxC,aAAa;AACb,WAAW,CAAC;AACZ,UAAU,MAAM,EAAE;AAClB,YAAY,IAAI,EAAE,8BAA8B;AAChD,YAAY,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC/C,YAAY,QAAQ,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC;AAC1C,WAAW;AACX,SAAS;AACT,QAAQ,OAAO,EAAE,UAAU;AAC3B,QAAQ,KAAK,EAAE,MAAM,MAAM,CAAC,IAAI,CAAC;AACjC,OAAO,CAAC,CAAC;AACT,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC1B,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,kBAAkB,SAAS,WAAW,CAAC;AAC5D,EAAE,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE;AACjC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AACnB;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACvB;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;AAC/B;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AAC5B,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,OAAO,EAAE,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC;AAC/C,MAAM,QAAQ,EAAE,6DAA6D;AAC7E,MAAM,KAAK,EAAE,GAAG;AAChB,MAAM,MAAM,EAAE,MAAM;AACpB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,KAAK,GAAG;AACd,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAC9D,IAAI,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzD,IAAI,MAAM,IAAI,GAAG,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,+BAA+B,EAAE;AAC3F,MAAM,OAAO,EAAE,YAAY,GAAG,CAAC;AAC/B,MAAM,KAAK,EAAE,YAAY,CAAC,MAAM;AAChC,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,+BAA+B,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC5E,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,EAAE,GAAG;AACX,IAAI,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;AAChD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,IAAI,GAAG;AACb,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;AAC/C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,YAAY,GAAG;AACrB,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;AACnD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,QAAQ,GAAG;AACjB,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,KAAK,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;AACzE,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;AACzC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE;AACjE,IAAI,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC7C,IAAI,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACvD,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,OAAO,OAAO,CAAC;AAC9D;AACA,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;AACtE,IAAI,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC3G,IAAI,KAAK,YAAY,GAAG,YAAY,GAAG,OAAO,OAAO,CAAC;AACtD;AACA,IAAI,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;AAC1E,OAAO,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;AACvD;AACA;AACA,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACvG;AACA;AACA,IAAI,MAAM,gBAAgB,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC;AACtE,IAAI,gBAAgB,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI;AACnD,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC/B,MAAM,KAAK,GAAG,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC;AACpH,WAAW,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;AAC7F,MAAM,OAAO,GAAG,CAAC;AACjB,KAAK,CAAC,CAAC,CAAC;AACR,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC,oBAAoB,EAAE,gBAAgB,CAAC,CAAC,CAAC;AACtE;AACA,IAAI,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;AAC1E,OAAO,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;AACvD;AACA;AACA,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI;AAC7B,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACtH,MAAM,KAAK,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACvG,WAAW,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACzD,KAAK,CAAC,CAAC;AACP;AACA,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE;AACjD,IAAI,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC7C;AACA;AACA,IAAI,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AACxD,IAAI,SAAS,CAAC,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC7C,IAAI,KAAK,QAAQ,CAAC,IAAI,KAAK,OAAO,GAAG;AACrC,MAAM,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAClC,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,GAAG;AACzD,QAAQ,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,8BAA8B,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AACpF,OAAO;AACP,KAAK;AACL;AACA;AACA,IAAI,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACrD,IAAI,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC9D;AACA;AACA,IAAI,KAAK,QAAQ,CAAC,IAAI,KAAK,OAAO,GAAG;AACrC,MAAM,OAAO,OAAO,CAAC,sBAAsB,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC;AACtF,KAAK;AACL;AACA;AACA,IAAI,IAAI,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;AACzD,IAAI,KAAK,UAAU,CAAC,IAAI,KAAK,UAAU,GAAG,WAAW,GAAG,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;AAC7F,IAAI,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,CAAC,CAAC;AACpC,OAAO,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AACtD,OAAO,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACtE;AACA,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE;AACzD,IAAI,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC7C,IAAI,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACvD,IAAI,KAAK,CAAC,UAAU,GAAG,OAAO,OAAO,CAAC;AACtC;AACA,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;AAChG,OAAO,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;AACvD;AACA;AACA,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACpG;AACA;AACA,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAClH;AACA;AACA,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACvH;AACA,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE;AACtE,IAAI,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC7C,IAAI,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACvD,IAAI,MAAM,WAAW,GAAG,UAAU,EAAE,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACpE,IAAI,KAAK,CAAC,WAAW,GAAG,OAAO,OAAO,CAAC;AACvC;AACA,IAAI,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC/C,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;AACtE;AACA;AACA,IAAI,KAAK,CAAC,YAAY,GAAG,YAAY,KAAK,CAAC,WAAW,CAAC,cAAc,GAAG,OAAO,OAAO,CAAC;AACvF;AACA,IAAI,WAAW,CAAC,MAAM;AACtB,OAAO,OAAO,EAAE;AAChB,OAAO,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC;AACrC,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;AAC7F,OAAO,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACvF;AACA,IAAI,KAAK,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACrG;AACA,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE;AAChD,IAAI,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC7C,IAAI,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACvD,IAAI,KAAK,CAAC,UAAU,GAAG,OAAO,OAAO,CAAC;AACtC;AACA;AACA,IAAI,KAAK,UAAU,CAAC,IAAI,KAAK,OAAO,GAAG;AACvC,MAAM,OAAO,OAAO,CAAC,sBAAsB,CAAC,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AACvF,KAAK;AACL;AACA;AACA,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;AAC3D,OAAO,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AACtD,OAAO,OAAO,EAAE;AAChB,OAAO,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACvF;AACA;AACA,IAAI,KAAK,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1G,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,EAAE;AAChE,IAAI,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC7C,IAAI,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACxD,IAAI,KAAK,CAAC,UAAU,GAAG,OAAO,OAAO,CAAC;AACtC,IAAI,OAAO,OAAO,CAAC,sBAAsB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AAClE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,sBAAsB,CAAC,SAAS,EAAE,UAAU,EAAE;AAChD,IAAI,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAClG,IAAI,MAAM,YAAY,GAAG,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI;AAClF,MAAM,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,EAAE,CAAC;AAC9D,MAAM,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;AAC/D,KAAK,CAAC,CAAC;AACP;AACA;AACA,IAAI,MAAM,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,EAAE,GAAG;AAC3D,MAAM,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;AAC1D,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC;AACtE,MAAM,MAAM,QAAQ,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC;AACxF,MAAM,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC;AACjF,MAAM,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC1F,MAAM,SAAS,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,CAAC;AACxD,KAAK;AACL;AACA;AACA,IAAI,MAAM,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE,MAAM,EAAE,GAAG;AAC1D,MAAM,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;AAC1D,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC;AACtE,MAAM,MAAM,QAAQ,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACzG,MAAM,SAAS,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AAClE,MAAM,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AACpG,MAAM,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC3F,MAAM,KAAK,UAAU,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACpG,KAAK;AACL;AACA;AACA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AACpB,MAAM,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI;AACtC,MAAM,KAAK,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,IAAI,UAAU,CAAC;AAC5E,KAAK,CAAC,CAAC;AACP;AACA,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE;AACpC,IAAI,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE;AAClD,OAAO,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC;AACpC,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;AACzE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE;AACnC,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;AACzF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,CAAC;AAChC;AACA;AACA,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACrC,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AACrC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AACxG;AACA,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAC9D,IAAI,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzD;AACA,IAAI,OAAO;AACX,MAAM,KAAK,EAAE,IAAI,CAAC,KAAK;AACvB,MAAM,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAC/B,MAAM,MAAM,EAAE,IAAI,CAAC,IAAI;AACvB,MAAM,SAAS,EAAE,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,8BAA8B,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE;AACzF,MAAM,KAAK,EAAE;AACb,QAAQ,OAAO,EAAE,YAAY,GAAG,CAAC;AACjC,QAAQ,KAAK,EAAE,YAAY,CAAC,MAAM;AAClC,QAAQ,WAAW,EAAE,YAAY,GAAG,CAAC;AACrC,QAAQ,OAAO,EAAE,YAAY,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC;AACvD,OAAO;AACP,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,CAAC,GAAG,IAAI,EAAE;AAClB,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;AAC/E;AACA;AACA,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG;AAC5B,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AACxC,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,GAAG,KAAK,IAAI,CAAC,CAAC;AACrD,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC;AAClE,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AACzB,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,mCAAmC,EAAE,IAAI,CAAC,CAAC;AAC1E;AACA;AACA,IAAI,KAAK,OAAO,KAAK,KAAK,GAAG,OAAO,IAAI,CAAC;AACzC;AACA,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,SAAS,GAAG;AAChC,MAAM,KAAK,IAAI,CAAC,UAAU,GAAG,OAAO,IAAI,CAAC;AACzC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;AACtB,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK;AACL;AACA,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;AACjC,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;AAChC,IAAI,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACxC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,aAAa,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO;AACrF;AACA;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACnC,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACjD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;AACvB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,IAAI,EAAE;AAC1B,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAClC,IAAI,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI;AACpD,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC1C,MAAM,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AACrC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAC/C,MAAM,IAAI;AACV,QAAQ,SAAS,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM;AACnD,UAAU,KAAK,SAAS;AACxB,YAAY,KAAK,CAAC,IAAI,CAAC,YAAY,GAAG,OAAO;AAC7C,YAAY,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACxC,UAAU,KAAK,UAAU;AACzB,YAAY,KAAK,CAAC,IAAI,CAAC,YAAY,GAAG,OAAO;AAC7C,YAAY,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACzC,UAAU,KAAK,MAAM,CAAC;AACtB,UAAU,KAAK,UAAU;AACzB,YAAY,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACxC,SAAS;AACT,OAAO,SAAS;AAChB,QAAQ,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AACxC,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE;AAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,GAAG;AACrC,MAAM,OAAO,IAAI,MAAM,CAAC;AACxB,QAAQ,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,oCAAoC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAChG,QAAQ,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,sCAAsC,CAAC;AAC3E,QAAQ,OAAO,EAAE;AACjB,UAAU,KAAK,EAAE;AACjB,YAAY,IAAI,EAAE,8BAA8B;AAChD,YAAY,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,yCAAyC,CAAC;AAChF,YAAY,QAAQ,EAAE,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;AAChD,WAAW;AACX,UAAU,QAAQ,EAAE;AACpB,YAAY,IAAI,EAAE,sCAAsC;AACxD,YAAY,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,6CAA6C,CAAC;AACpF,WAAW;AACX,SAAS;AACT,QAAQ,OAAO,EAAE,OAAO;AACxB,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACtB,KAAK;AACL,IAAI,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC/B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,QAAQ,CAAC,KAAK,EAAE;AACxB,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AAC3B,IAAI,IAAI;AACR,MAAM,GAAG;AACT,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACpC;AACA;AACA,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1G,aAAa,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG;AAC3E,UAAU,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AACnG,SAAS;AACT,aAAa,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AAC/G,aAAa,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,GAAG,IAAI,CAAC,YAAY,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChH,aAAa,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;AAChF;AACA,QAAQ,IAAI,CAAC,UAAU,EAAE,CAAC;AAC1B;AACA;AACA,QAAQ,KAAK,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG;AAChC,UAAU,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AAC5C,UAAU,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,GAAG,KAAK,IAAI,CAAC,CAAC;AACzD,UAAU,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC;AACtE,SAAS;AACT,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AAC3B,OAAO,SAAS,IAAI,CAAC,IAAI,EAAE,SAAS,GAAG;AACvC,KAAK,CAAC,MAAM,KAAK,EAAE;AACnB,MAAM,KAAK,EAAE,KAAK,YAAY,WAAW,CAAC,KAAK,CAAC,GAAG,MAAM,KAAK,CAAC;AAC/D,MAAM,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC5C,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AAClC,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;AACrE,KAAK,SAAS;AACd,MAAM,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AAC9B,KAAK;AACL;AACA,IAAI,KAAK,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACvC,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC;AAC1B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,SAAS,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;AAC7C,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AAC3B,IAAI,IAAI;AACR,MAAM,GAAG;AACT,QAAQ,IAAI,CAAC,UAAU,EAAE,CAAC;AAC1B,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM;AAChC,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACpC;AACA;AACA,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClH,aAAa,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB;AAClH,UAAU,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;AAC/E,SAAS,CAAC;AACV,aAAa,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AAC/G,aAAa,KAAK,IAAI,GAAG,IAAI,CAAC,YAAY,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxF,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AAC3B,OAAO,SAAS,IAAI,CAAC,IAAI,EAAE,SAAS,GAAG;AACvC,KAAK,CAAC,MAAM,KAAK,EAAE;AACnB,MAAM,KAAK,EAAE,KAAK,YAAY,WAAW,CAAC,KAAK,CAAC,GAAG,MAAM,KAAK,CAAC;AAC/D,MAAM,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC5C,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AAClC,KAAK,SAAS;AACd,MAAM,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AAC9B,KAAK;AACL;AACA,IAAI,KAAK,CAAC,MAAM,GAAG,OAAO;AAC1B,IAAI,KAAK,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACvC,SAAS,IAAI,CAAC,KAAK,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;AAChD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,QAAQ,CAAC,KAAK,EAAE;AACxB,IAAI,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC;AACzC,MAAM,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,6CAA6C,CAAC;AAC9E,MAAM,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,wCAAwC,CAAC;AAC3E,KAAK,CAAC,CAAC;AACP,IAAI,KAAK,CAAC,OAAO,GAAG,OAAO;AAC3B;AACA,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG;AAC3E,MAAM,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AACnD,KAAK;AACL,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACtB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,SAAS,CAAC,KAAK,EAAE;AACzB,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC1C,IAAI,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;AAChC,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC;AACzB;AACA;AACA,IAAI,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK;AACzE,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;AAC7C,QAAQ,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChC,OAAO,MAAM;AACb,QAAQ,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChC,QAAQ,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC;AACvD,OAAO;AACP,MAAM,OAAO,GAAG,CAAC;AACjB,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,qCAAqC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,KAAK,GAAG;AACpH,MAAM,OAAO,CAAC,GAAG,CAAC,0FAA0F,CAAC,CAAC;AAC9G,MAAM,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;AACpD,KAAK;AACL;AACA;AACA,IAAI,MAAM,OAAO,CAAC,GAAG,CAAC;AACtB,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AACzD,MAAM,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AACjG,MAAM,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AACnF,MAAM,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AACnF,KAAK,CAAC,CAAC;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,CAAC,OAAO,CAAC,kCAAkC,EAAE,IAAI,CAAC,CAAC;AAC5D;AACA;AACA,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;AAClD,GAAG;AACH;AACA;;ACtrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,mBAAmB,SAAS,WAAW,CAAC;AAC7D,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE;AAC1D,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AACnB,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACzB,IAAI,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACrC,IAAI,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC7B,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,EAAE,EAAE,sBAAsB;AAChC,MAAM,OAAO,EAAE,CAAC,OAAO,EAAE,sBAAsB,CAAC;AAChD,MAAM,QAAQ,EAAE,uDAAuD;AACvE,MAAM,KAAK,EAAE,GAAG;AAChB,MAAM,MAAM,EAAE,MAAM;AACpB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,aAAa,CAAC,OAAO,EAAE;AAC/B,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5C,IAAI,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9D,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,sBAAsB,EAAE,CAAC,CAAC;AAC/E,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClF,IAAI,IAAI,KAAK,CAAC;AACd,IAAI,KAAK,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;AACtD,SAAS,KAAK,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;AACxG,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC/D,IAAI,OAAO;AACX,MAAM,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;AACjC,MAAM,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI;AACpC,QAAQ,KAAK,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACrG,QAAQ,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,mBAAmB,CAAC,GAAG,MAAM,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG;AACnF,UAAU,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;AAChC,UAAU,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AACzC,SAAS;AACT,QAAQ,OAAO,KAAK,CAAC;AACrB,OAAO,CAAC;AACR,MAAM,KAAK,EAAE,KAAK;AAClB,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,gBAAgB,CAAC,QAAQ,EAAE;AAC7B,IAAI,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACtC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,WAAW,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG;AAChD,MAAM,OAAO,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,QAAQ,CAAC;AACjE,KAAK,MAAM,KAAK,CAAC,QAAQ,KAAK,mBAAmB,KAAK,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,GAAG;AACnF,MAAM,OAAO,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AAC9C,KAAK,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM,MAAM,QAAQ,KAAK,iBAAiB,CAAC,GAAG;AAC5E,MAAM,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;AACrD,KAAK;AACL,IAAI,OAAO,QAAQ,CAAC;AACpB,GAAG;AACH;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;sBACe,MAAM,aAAa,SAAS,eAAe,CAAC;AAC3D,EAAE,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE;AACxC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,KAAK;AACtD,MAAM,CAAC,kFAAkF,EAAE,KAAK,CAAC,CAAC,CAAC;AACnG,KAAK,CAAC;AACN,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,KAAK;AAC9D,MAAM,CAAC,4CAA4C,EAAE,KAAK,CAAC,iCAAiC,CAAC;AAC7F,QAAQ,yDAAyD;AACjE,KAAK,CAAC;AACN;AACA,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC1B;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACvB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,EAAE,EAAE,gBAAgB;AAC1B,MAAM,OAAO,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,WAAW,CAAC;AACvD,MAAM,QAAQ,EAAE,iDAAiD;AACjE,MAAM,KAAK,EAAE,GAAG;AAChB,MAAM,MAAM,EAAE,MAAM;AACpB,MAAM,WAAW,EAAE,KAAK;AACxB,MAAM,WAAW,EAAE,IAAI;AACvB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,EAAE,GAAG;AACX,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9E,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,KAAK,GAAG;AACd,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAEC,UAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACpE,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,GAAG;AAClB,IAAI,MAAM,IAAI,GAAG,CAAC,OAAO,EAAEC,YAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC5D,IAAI,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAChE,IAAI,KAAK,CAAC,IAAI,GAAG,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC;AACxC;AACA,IAAI,OAAO;AACX,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE;AACxB,MAAM,OAAO,EAAE,MAAMC,OAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;AAC1D,MAAM,MAAM,EAAE,IAAI,CAAC,MAAM;AACzB,MAAM,UAAU,EAAE,QAAQ,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI;AAC5D,MAAM,QAAQ,EAAE,UAAU,IAAI,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK;AACnH,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5D,QAAQ,OAAO,GAAG,CAAC;AACnB,OAAO,EAAE,EAAE,CAAC,GAAG,IAAI;AACnB,MAAM,YAAY,EAAE,UAAU,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI;AAClE,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,IAAI,EAAE;AAC1B,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAClC;AACA,IAAI,MAAM,MAAM,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,GAAG;AACjF,MAAM,KAAK,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AAC/D,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,kBAAkB,GAAG;AACvB,IAAI,MAAM,SAAS,GAAG,KAAK,CAAC,kBAAkB,EAAE,CAAC;AACjD,IAAI,MAAM,IAAI,GAAG,CAAC,OAAO,EAAED,YAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;AAClE,IAAI,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;AAChF,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACnE,IAAI,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAC1C,IAAI,MAAM,MAAM,MAAM,IAAI,KAAK,GAAG;AAClC,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAC1C,KAAK;AACL,IAAI,OAAO,SAAS,CAAC;AACrB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,cAAc,CAAC,KAAK,EAAE;AAC9B,IAAI,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAChC;AACA,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACzF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,QAAQ,EAAE;AAC9B,IAAI,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;AACjE,IAAI,KAAK,CAAC,QAAQ,GAAG,OAAO;AAC5B;AACA,IAAI,MAAM,MAAM,KAAK,IAAI,QAAQ,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,GAAG;AAC/E,MAAM,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC;AACxD,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE;AAC1C,IAAI,MAAM,MAAM,GAAG,EAAE,CAAC;AACtB,IAAI,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;AACvF,MAAM,KAAK,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACtE,MAAM,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC3B,KAAK;AACL,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAC5B,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE;AACvC,IAAI,MAAM,IAAI,GAAG,CAAC,OAAO,EAAEA,YAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC5D,IAAI,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAChE;AACA,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC/D,IAAI,KAAK,UAAU,IAAI,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC7F;AACA,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACxC,GAAG;AACH;;AC9JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,iBAAiB,SAAS,eAAe,CAAC;AAC/D;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,OAAO,EAAE,CAAC,OAAO,CAAC;AACxB,MAAM,QAAQ,EAAE,qDAAqD;AACrE,MAAM,KAAK,EAAE,GAAG;AAChB,MAAM,MAAM,EAAE,MAAM;AACpB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,MAAM,GAAG;AACf,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;AAC7C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,OAAO,GAAG;AAChB,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC;AAC9C,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,KAAK,GAAG;AACd,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,GAAGN,QAAc,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACxH,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,iCAAiC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACpG,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,EAAE,GAAG;AACX,IAAI,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AACrG,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE;AACtB,IAAI,OAAO;AACX,MAAM,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS;AACvC,MAAM,iBAAiB,EAAE,MAAM,CAAC,KAAK,CAAC,iBAAiB;AACvD,MAAM,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AAC5E,MAAM,MAAM,EAAE,IAAI,CAAC,MAAM;AACzB,MAAM,OAAO,EAAE,IAAI,CAAC,OAAO;AAC3B,MAAM,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG;AAC3B,MAAM,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;AACrC,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE;AACvC,IAAI,KAAK,IAAI,CAAC,MAAM,GAAG,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACnE,IAAI,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAClF,IAAI,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1C,IAAI,KAAK,CAAC,WAAW,CAAC,eAAe,GAAG;AACxC,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,qCAAqC,EAAE;AAC9E,QAAQ,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC;AAC3D,OAAO,CAAC,CAAC;AACT,MAAM,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACtC,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AAC/B,KAAK;AACL,IAAI,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAChD,GAAG;AACH;;AC1FA;AACA;AACA;AACA;AACe,MAAM,YAAY,SAASQ,eAAa,CAAC;AACxD;AACA,EAAE,MAAM,OAAO,GAAG;AAClB,IAAI,OAAO;AACX,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE;AACxB,MAAM,OAAO,EAAE,MAAMD,OAAa,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACvF,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,kBAAkB,GAAG;AACvB,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7E,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE;AACvC,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK;AACjF,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACnC,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACnD,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AAC5D,WAAW,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACrE,MAAM,OAAO,GAAG,CAAC;AACjB,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;AACZ,GAAG;AACH;;ACbA;AACA;AACA;AACA;AACe,MAAM,YAAY,SAAS,UAAU,CAAC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,SAAS,EAAE,IAAI,GAAG,EAAE;AACxB,IAAI,SAAS,EAAE,IAAI,GAAG,EAAE;AACxB,IAAI,QAAQ,EAAE,IAAI,GAAG,EAAE;AACvB,IAAI,OAAO,EAAE,IAAI,GAAG,EAAE;AACtB,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;AACxB;AACA;AACA;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,OAAO,EAAE;AACf,QAAQ,4BAA4B;AACpC,QAAQ,2BAA2B;AACnC,QAAQ,4BAA4B;AACpC,QAAQ,0BAA0B;AAClC,QAAQ,cAAc;AACtB,OAAO;AACP,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;AAC5F,MAAM,KAAK,EAAE,GAAG;AAChB,MAAM,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG;AACpC,QAAQ,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC;AAC/D,QAAQ,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC;AAC5D,OAAO,CAAC;AACR,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,oBAAoB,GAAG,IAAI,GAAG,EAAE,CAAC;AAC1C;AACA;AACA;AACA;AACA,EAAE,IAAI,QAAQ,GAAG;AACjB,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,kDAAkD,CAAC;AAC3G,IAAI,OAAO,CAAC,+BAA+B,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACzE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,CAAC,OAAO,EAAE;AACzB;AACA;AACA,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;AACzC;AACA;AACA,IAAI,MAAM,OAAO,GAAG;AACpB,MAAM,KAAK,EAAE,IAAI,CAAC,KAAK;AACvB,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM;AAC3B,MAAM,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;AAC/B,MAAM,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AACzC,MAAM,WAAW,EAAE,EAAE;AACrB,MAAM,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;AACrE,MAAM,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;AACrE,MAAM,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;AACnE,MAAM,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE;AAC/B,MAAM,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACzD,MAAM,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AAChD,MAAM,OAAO,EAAE,cAAc,CAAC,6BAA6B,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;AAC/E,MAAM,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC;AACxE,MAAM,OAAO,EAAE,IAAI,CAAC,QAAQ;AAC5B,MAAM,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;AAC/B,MAAM,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;AACjC,MAAM,OAAO,EAAE,IAAI,CAAC,OAAO;AAC3B,MAAM,QAAQ,EAAE,IAAI,CAAC,UAAU;AAC/B,MAAM,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,UAAU,GAAG,QAAQ;AAC1D,MAAM,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW;AAClD,MAAM,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK;AACtC,MAAM,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS;AAC9C,MAAM,MAAM,EAAE,MAAM,CAAC,KAAK;AAC1B,MAAM,aAAa,EAAE,IAAI,CAAC,UAAU,GAAG,UAAU,GAAG,EAAE;AACtD,MAAM,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;AACxC,KAAK,CAAC;AACN;AACA;AACA,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;AAChE;AACA;AACA,IAAI,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AACjD,IAAI,KAAK,EAAE,CAAC,IAAI,KAAK,CAAC,GAAG,OAAO,EAAE,CAAC,IAAI,CAAC;AACxC,IAAI,KAAK,EAAE,CAAC,OAAO,KAAK,CAAC,GAAG,OAAO,EAAE,CAAC,OAAO,CAAC;AAC9C,IAAI,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;AACpB;AACA;AACA,IAAI,MAAM,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG;AAChE,MAAM,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAC1D,MAAM,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AACjE,MAAM,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AACnD,MAAM,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,IAAI,CAAC,CAAC;AACjE,KAAK;AACL;AACA;AACA,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI;AACxC,MAAM,MAAM,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG;AAClE,QAAQ,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;AACjF,QAAQ,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC3D,QAAQ,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAClE,QAAQ,KAAK,CAAC,KAAK,GAAG,IAAI,KAAK,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,GAAGP,QAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACxG,QAAQ,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;AACjE,OAAO;AACP,KAAK,CAAC,CAAC;AACP;AACA;AACA,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACzD;AACA;AACA,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAChC,IAAI,OAAO,CAAC,YAAY,GAAG,EAAE,CAAC;AAC9B,IAAI,MAAM,MAAM,EAAE,IAAI,IAAI,CAAC,SAAS,GAAG;AACvC,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC5C,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AACnG,KAAK;AACL;AACA;AACA,IAAI,OAAO,CAAC,aAAa,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE;AAChG,MAAM,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;AACjC,MAAM,QAAQ,EAAE,OAAO,CAAC,QAAQ;AAChC,MAAM,KAAK,EAAE,IAAI;AACjB,MAAM,UAAU,EAAE,IAAI,CAAC,KAAK;AAC5B,KAAK,CAAC,CAAC;AACP;AACA,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,UAAU,GAAG;AACf,IAAI,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC1C;AACA;AACA,IAAI,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK;AACxF,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;AACvB,MAAM,OAAO,GAAG,CAAC;AACjB,KAAK,EAAE,EAAE,CAAC,CAAC;AACX;AACA;AACA,IAAI,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,qBAAqB,CAAC,KAAK,MAAM;AACrF,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;AACnD,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AAChD;AACA,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,UAAU,EAAE,cAAc,CAAC,KAAK,EAAE;AACtD,IAAI,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,QAAQ,IAAI,EAAE,CAAC;AAC1D;AACA;AACA,IAAI,IAAI,MAAM,GAAG;AACjB,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AAC3F,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AACxF,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAC5J,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACrF,KAAK,CAAC;AACN,IAAI,KAAK,cAAc,GAAG;AAC1B,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACnG,KAAK;AACL;AACA;AACA,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE;AACA;AACA,IAAI,KAAK,cAAc,GAAG;AAC1B,MAAM,IAAI,OAAO,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;AACnC,MAAM,OAAO;AACb,QAAQ,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;AAClE,QAAQ,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AACjD,OAAO,CAAC;AACR,KAAK;AACL;AACA;AACA,SAAS;AACT,MAAM,OAAO;AACb,QAAQ,OAAO,EAAE,CAAC,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC1D,QAAQ,OAAO,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACtE,OAAO,CAAC;AACR,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,UAAU,CAAC,UAAU,EAAE;AACzB,IAAI,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,IAAI,EAAE,CAAC;AACtD,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;AACpB,IAAI,MAAM,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG;AAClE,MAAM,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC/B,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,SAAS;AAC9B,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACpE,KAAK;AACL,IAAI,KAAK,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACxD,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,cAAc,CAAC,EAAE,EAAE;AAC5D,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;AACjC,IAAI,OAAO,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;AAC/D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,gCAAgC,CAAC,MAAM,EAAE;AAC3C,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK;AACjD,MAAM,IAAI,MAAM,GAAG,CAAC,CAAC,UAAU,CAAC;AAChC,MAAM,KAAK,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC;AAC3D,MAAM,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,YAAY,GAAG,OAAO,GAAG,CAAC;AAChE,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK;AACpD,QAAQ,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,MAAM,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC;AACnF,QAAQ,KAAK,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,mBAAmB,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC;AACtE,QAAQ,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACxC,OAAO,EAAE,CAAC,CAAC,CAAC;AACZ,MAAM,KAAK,CAAC,KAAK,GAAG,OAAO,GAAG,CAAC;AAC/B,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5E,MAAM,OAAO,GAAG,CAAC;AACjB,KAAK,EAAE,EAAE,CAAC,CAAC;AACX,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,6BAA6B,CAAC,QAAQ,EAAE;AAC1C,IAAI,MAAM,EAAE,GAAG,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;AACtC,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AACnD,IAAI,MAAM,WAAW,GAAG,EAAE,CAAC;AAC3B;AACA;AACA,IAAI,SAAS,EAAE,CAAC,IAAI;AACpB;AACA;AACA,MAAM,KAAK,MAAM;AACjB,QAAQ,OAAO,CAAC;AAChB,UAAU,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC;AAC3D,UAAU,IAAI,EAAE,KAAK,CAAC,mBAAmB,CAAC,QAAQ;AAClD,UAAU,KAAK,EAAE,EAAE,CAAC,IAAI;AACxB,SAAS,CAAC,CAAC;AACX;AACA;AACA,MAAM,KAAK,SAAS;AACpB,QAAQ,WAAW,CAAC,IAAI,CAAC;AACzB,UAAU,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC;AAC9D,UAAU,IAAI,EAAE,KAAK,CAAC,mBAAmB,CAAC,QAAQ;AAClD,UAAU,KAAK,EAAE,EAAE,CAAC,IAAI;AACxB,SAAS,CAAC,CAAC;AACX,QAAQ,MAAM;AACd;AACA,MAAM;AACN,QAAQ,MAAM,OAAO,GAAG,EAAE,CAAC,IAAI,KAAK,QAAQ,GAAG,EAAE,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;AACxE,QAAQ,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;AAC3B,QAAQ,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,mBAAmB,CAAC,CAAC;AACxD,QAAQ,MAAM,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG;AACjE,UAAU,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;AAC1E,UAAU,KAAK,CAAC,IAAI,KAAK,qBAAqB,MAAM,KAAK,KAAK,GAAG,CAAC,GAAG,SAAS;AAC9E,UAAU,KAAK,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/D,UAAU,WAAW,CAAC,IAAI,CAAC;AAC3B,YAAY,KAAK,EAAE,KAAK;AACxB,YAAY,IAAI,EAAE,KAAK,CAAC,mBAAmB,CAAC,GAAG;AAC/C,YAAY,KAAK;AACjB,WAAW,CAAC,CAAC;AACb,SAAS;AACT,QAAQ,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;AACxE,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;AAC7D,QAAQ,KAAK,cAAc,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC;AAChH,QAAQ,WAAW,CAAC,OAAO,CAAC;AAC5B,UAAU,KAAK;AACf,UAAU,IAAI,EAAE,KAAK,CAAC,mBAAmB,CAAC,QAAQ;AAClD,UAAU,KAAK,EAAE,IAAI;AACrB,SAAS,CAAC,CAAC;AACX,QAAQ,MAAM;AACd,KAAK;AACL;AACA;AACA,IAAI,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC;AAC5C,MAAM,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC;AACnF,MAAM,IAAI,EAAE,KAAK,CAAC,mBAAmB,CAAC,GAAG;AACzC,MAAM,KAAK,EAAE,EAAE,CAAC,MAAM;AACtB,KAAK,CAAC,CAAC;AACP;AACA;AACA,IAAI,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,gCAAgC,CAAC,4BAA4B,CAAC,CAAC,CAAC;AACnH;AACA;AACA,IAAI,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC;AAC3C,MAAM,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;AAC9C,MAAM,IAAI,EAAE,KAAK,CAAC,mBAAmB,CAAC,GAAG;AACzC,MAAM,KAAK,EAAE,EAAE,CAAC,KAAK;AACrB,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,WAAW,CAAC;AACvB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,UAAU,EAAE;AAC7B,IAAI,MAAM,MAAM,GAAG,EAAE,CAAC;AACtB,IAAI,MAAM,MAAM,CAACS,OAAK,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG;AAC9E,MAAM,MAAM,GAAG,GAAG,WAAW,CAAC,YAAY,IAAI,CAAC,OAAO,EAAEA,OAAK,CAAC,CAAC,CAAC;AAChE,MAAM,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;AACvF,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AAC1D,MAAM,KAAK,CAAC,IAAI,GAAG,SAAS;AAC5B;AACA,MAAM,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AACnD,MAAM,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;AAC9B,MAAM,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC;AACjC,WAAW,KAAK,MAAM,YAAY,GAAG,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACpE,WAAW,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC;AAC3D;AACA;AACA,MAAM,MAAM,QAAQ,GAAG,EAAE,CAAC;AAC1B,MAAM,KAAK,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG;AACjC,QAAQ,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI;AACpC,UAAU,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC;AAClE,UAAU,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3B,UAAU,OAAO,KAAK,CAAC;AACvB,SAAS,CAAC,CAAC;AACX,OAAO;AACP;AACA,MAAM,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK;AAClD,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAGT,QAAc,CAACS,OAAK,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC;AACrD,QAAQ,OAAO,GAAG,CAAC;AACnB,OAAO,EAAE,EAAE,CAAC,CAAC;AACb;AACA;AACA,MAAM,KAAK,QAAQ,CAAC,MAAM,GAAG;AAC7B,QAAQ,MAAM,oBAAoB,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;AACjH,QAAQ,MAAM,eAAe,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;AAC5G,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,8BAA8B,EAAE;AAClF,UAAU,WAAW,EAAE,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACjF,UAAU,WAAW,EAAE,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/G,SAAS,CAAC,CAAC;AACX,OAAO;AACP;AACA;AACA,MAAM,KAAK,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAC5G,MAAM,IAAI,CAAC,QAAQ,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC;AAC9E,KAAK;AACL,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,GAAG,EAAE;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE;AACrC,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;AACrC,IAAI,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;AAC/C,IAAI,MAAM,SAAS,GAAG,EAAE,CAAC;AACzB;AACA;AACA,IAAI,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAC5D,IAAI,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;AAC7D;AACA;AACA,IAAI,MAAM,eAAe,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,EAAE,KAAK;AAC9F,MAAM,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,mBAAmB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7G,MAAM,SAAS,CAAC,CAAC,CAAC,GAAG;AACrB,QAAQ,KAAK,EAAE,CAAC;AAChB,QAAQ,KAAK,EAAE,KAAK;AACpB,QAAQ,SAAS,EAAE,CAAC,GAAG,CAAC;AACxB,QAAQ,SAAS,EAAE,KAAK;AACxB,QAAQ,UAAU,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,MAAM,CAAC,IAAI,CAAC,CAAC;AACpE,QAAQ,MAAM,EAAE,EAAE;AAClB,QAAQ,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC;AACxC,QAAQ,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC;AACvC,QAAQ,QAAQ,EAAE,QAAQ,IAAI,CAAC;AAC/B,QAAQ,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,IAAI,QAAQ,GAAG,CAAC,GAAG,CAAC,EAAE,kBAAkB,EAAE,QAAQ,CAAC;AACnG,QAAQ,IAAI,EAAE,EAAE;AAChB,QAAQ,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,CAAC,UAAU;AACjD,OAAO,CAAC;AACR,KAAK,CAAC;AACN;AACA;AACA,IAAI,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK;AAC5D,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,GAAG,CAAC;AAChC,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,QAAQ,QAAQ,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;AACnE,MAAM,OAAO,GAAG,CAAC;AACjB,KAAK,EAAE,CAAC,CAAC,CAAC;AACV;AACA;AACA,IAAI,KAAK,QAAQ,GAAG,CAAC,GAAG;AACxB,MAAM,eAAe,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAChE,MAAM,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,QAAQ,EAAE,GAAG,EAAE,EAAE;AAChD,QAAQ,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;AACjC,QAAQ,eAAe,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5E,OAAO;AACP,KAAK;AACL;AACA;AACA,IAAI,KAAK,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG;AAC1C,MAAM,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AACvF,MAAM,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;AAC5B,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC;AAC7D,MAAM,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/E,MAAM,MAAM,KAAK,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AAC3C,MAAM,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE;AACpD,QAAQ,QAAQ,EAAE,MAAM;AACxB,QAAQ,KAAK,EAAE,CAAC,CAAC,KAAK;AACtB,QAAQ,GAAG,EAAE,CAAC,CAAC,GAAG;AAClB,QAAQ,QAAQ,EAAE,CAAC,CAAC,QAAQ;AAC5B,OAAO,CAAC,CAAC;AACT,KAAK;AACL;AACA;AACA,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI;AAC5B,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,IAAI,UAAU,CAAC;AAC/D,MAAM,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;AACtC,MAAM,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7B;AACA;AACA,MAAM,KAAK,IAAI,IAAI,QAAQ,GAAG;AAC9B,QAAQ,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC3B,QAAQ,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG;AAC7B,UAAU,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACvC,UAAU,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;AAClE,UAAU,eAAe,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE;AAC3C,YAAY,QAAQ,EAAE,IAAI;AAC1B,YAAY,KAAK,EAAE,CAAC,CAAC,KAAK;AAC1B,YAAY,GAAG,EAAE,CAAC,CAAC,GAAG;AACtB,YAAY,QAAQ,EAAE,CAAC,CAAC,QAAQ;AAChC,WAAW,CAAC,CAAC;AACb,SAAS;AACT,OAAO;AACP;AACA;AACA,WAAW,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG;AAChC,QAAQ,eAAe,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAClF,OAAO;AACP;AACA;AACA,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtC,KAAK,CAAC,CAAC;AACP;AACA;AACA,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAC5C,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AAC7C,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE;AAC/B,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI;AAChC;AACA;AACA,MAAM,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG;AACvD,QAAQ,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC;AACnF,OAAO;AACP;AACA;AACA,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,IAAI,CAAC,GAAG,OAAO,KAAK,CAAC;AAC5F,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,aAAa,KAAK,IAAI,CAAC,GAAG,OAAO,KAAK,CAAC;AAC1G,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG;AACrC,QAAQ,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,OAAO,IAAI,CAAC;AACpH,QAAQ,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,GAAG,OAAO,IAAI,CAAC;AACrD,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC;AAChD,OAAO;AACP;AACA;AACA,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,GAAG,OAAO,KAAK,CAAC;AACrF,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,mBAAmB,CAAC,KAAK,EAAE;AAC7B,IAAI,MAAM,KAAK,GAAG;AAClB,MAAM,CAAC,EAAE,+BAA+B;AACxC,MAAM,GAAG,EAAE,+BAA+B;AAC1C,MAAM,CAAC,EAAE,8BAA8B;AACvC,MAAM,CAAC,EAAE,qCAAqC;AAC9C,KAAK,CAAC;AACN,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;AACpC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,IAAI,EAAE;AAC1B;AACA,IAAI,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAClD,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAChE,IAAI,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7E;AACA;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;AACzF;AACA;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/D;AACA;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACtF,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACjF;AACA;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACjE;AACA;AACA,IAAI,KAAK,IAAI,CAAC,UAAU,GAAG;AAC3B;AACA,MAAM,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACxC,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;AACpD,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9G;AACA;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3F;AACA;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,mBAAmB,EAAE,KAAK,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AACjH;AACA;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,mBAAmB,EAAE,KAAK,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/G;AACA;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3E;AACA;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACvE;AACA;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACrE,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACrE,MAAM,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1G,MAAM,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAClF;AACA;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,cAAc,CAAC,oBAAoB,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACpG,MAAM,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;AAC1C,KAAK;AACL;AACA;AACA,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG;AAC9B;AACA;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3E;AACA;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACxE;AACA;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5E;AACA;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AAChF,MAAM,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;AACpF;AACA;AACA,MAAM,IAAI,WAAW,CAAC,IAAI,EAAE,kBAAkB,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC9F,KAAK;AACL;AACA;AACA,SAAS;AACT,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;AAC9E,KAAK;AACL;AACA;AACA,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAClC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,wBAAwB,CAAC,IAAI,EAAE;AACjC,IAAI,MAAM,kBAAkB,GAAG;AAC/B,MAAM,OAAO,EAAE,wCAAwC;AACvD,MAAM,KAAK,EAAE,gCAAgC;AAC7C,MAAM,IAAI,EAAE,+BAA+B;AAC3C,KAAK,CAAC;AACN;AACA,IAAI,MAAM,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG;AAC7F,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,QAAQ,CAAC,gBAAgB,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK;AACxF,QAAQ,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC3B,QAAQ,EAAE,CAAC,OAAO,CAAC,OAAO,GAAG,mCAAmC,CAAC;AACjE,OAAO,CAAC,CAAC;AACT;AACA,MAAM,MAAM,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG;AACvE,QAAQ,MAAM,GAAG,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AACtD,QAAQ,KAAK,KAAK,GAAG;AACrB,UAAU,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;AACrF,UAAU,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AACtC,UAAU,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,mCAAmC,CAAC,CAAC;AAC3E,SAAS;AACT,OAAO;AACP;AACA,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,qCAAqC,CAAC,IAAI,EAAE,CAAC;AACpF,MAAM,KAAK,KAAK,GAAG;AACnB,QAAQ,IAAI,CAAC,IAAI,CAAC,CAAC,uBAAuB,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,mCAAmC,CAAC,CAAC;AACjH,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,OAAO,EAAE;AAC1B;AACA;AACA,IAAI,KAAK,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG;AAChD,MAAM,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACtE,MAAM,KAAK,CAAC,MAAM,GAAG,OAAO;AAC5B,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC;AACzE,MAAM,KAAK,CAAC,IAAI,CAAC,qCAAqC,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACtF,KAAK;AACL;AACA;AACA,SAAS;AACT,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAChE,MAAM,KAAK,CAAC,IAAI,GAAG,OAAO;AAC1B,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;AAC/D,MAAM,KAAK,CAAC,IAAI,CAAC,6BAA6B,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAC5E,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,8BAA8B,CAAC,MAAM,EAAE;AACzC,IAAI,OAAO;AACX,MAAM;AACN,QAAQ,IAAI,EAAE,6BAA6B;AAC3C,QAAQ,IAAI,EAAE,mCAAmC;AACjD,QAAQ,QAAQ,EAAE,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;AACjD,OAAO;AACP,MAAM;AACN,QAAQ,IAAI,EAAE,kCAAkC;AAChD,QAAQ,IAAI,EAAE,mCAAmC;AACjD,QAAQ,QAAQ,EAAE,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACtH,OAAO;AACP,MAAM;AACN,QAAQ,IAAI,EAAE,+BAA+B;AAC7C,QAAQ,IAAI,EAAE,oCAAoC;AAClD,QAAQ,QAAQ,EAAE,MAAM,MAAM,CAAC,YAAY,EAAE;AAC7C,OAAO;AACP,MAAM;AACN,QAAQ,IAAI,EAAE,MAAM,CAAC,QAAQ,GAAG,+BAA+B,GAAG,gCAAgC;AAClG,QAAQ,IAAI,EAAE,MAAM,CAAC,QAAQ,GAAG,oCAAoC,GAAG,oCAAoC;AAC3G,QAAQ,QAAQ,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACnE,OAAO;AACP,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,sBAAsB,CAAC,IAAI,EAAE;AAC/B;AACA;AACA,IAAI,MAAM,OAAO,GAAG;AACpB,MAAM;AACN,QAAQ,IAAI,EAAE,6BAA6B;AAC3C,QAAQ,IAAI,EAAE,mCAAmC;AACjD,QAAQ,QAAQ,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;AAC/C,OAAO;AACP,MAAM;AACN,QAAQ,IAAI,EAAE,kCAAkC;AAChD,QAAQ,IAAI,EAAE,mCAAmC;AACjD,QAAQ,SAAS,EAAE,MAAM,CAAC,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACzF,QAAQ,QAAQ,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAChH,OAAO;AACP,MAAM;AACN,QAAQ,IAAI,EAAE,+BAA+B;AAC7C,QAAQ,IAAI,EAAE,oCAAoC;AAClD,QAAQ,QAAQ,EAAE,MAAM,IAAI,CAAC,YAAY,EAAE;AAC3C,OAAO;AACP,KAAK,CAAC;AACN;AACA;AACA,IAAI,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG;AAC3G,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC;AACxF,MAAM,OAAO,CAAC,IAAI,CAAC;AACnB,QAAQ,IAAI,EAAE,SAAS,GAAG,iCAAiC,GAAG,+BAA+B;AAC7F,QAAQ,IAAI,EAAE,kCAAkC;AAChD,QAAQ,QAAQ,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC;AACpC,UAAU,mBAAmB,EAAE,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;AAC/F,SAAS,CAAC;AACV,OAAO,CAAC,CAAC;AACT,KAAK;AACL;AACA;AACA,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;AAClD,MAAM,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,gCAAgC,GAAG,8BAA8B;AACpG,MAAM,IAAI,EAAE,yCAAyC;AACrD,MAAM,QAAQ,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC7E,KAAK,CAAC,CAAC;AACP;AACA;AACA,IAAI,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,MAAM,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,KAAK,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;AACzG,MAAM,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,GAAG,kCAAkC,GAAG,gCAAgC;AACtH,MAAM,IAAI,EAAE,kCAAkC;AAC9C,MAAM,QAAQ,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,6BAA6B,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AACtG,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,yBAAyB,CAAC,CAAC,EAAE,EAAE,EAAE;AACnC,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACjD,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;AACxD,IAAI,MAAM,IAAI,EAAE,IAAI,OAAO,GAAG;AAC9B,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACnE,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,mBAAmB,CAAC,KAAK,EAAE;AAC7B,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;AAC/B,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;AAC9B,IAAI,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG;AACzC,MAAM,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;AACtC,MAAM,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;AACtF,KAAK,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAChE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,KAAK,EAAE;AACvB,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;AAC5B,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC;AACvC,IAAI,IAAI,GAAG,CAAC;AACZ,IAAI,SAAS,MAAM,CAAC,OAAO,CAAC,MAAM;AAClC,MAAM,KAAK,OAAO;AAClB,QAAQ,GAAG,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/C,QAAQ,MAAM;AACd,MAAM,KAAK,UAAU;AACrB,QAAQ,GAAG,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjD,QAAQ,MAAM;AACd,MAAM,KAAK,YAAY;AACvB,QAAQ,GAAG,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnD,QAAQ,MAAM;AACd,MAAM,KAAK,YAAY;AACvB,QAAQ,GAAG,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpD,QAAQ,MAAM;AACd,MAAM,KAAK,UAAU;AACrB,QAAQ,GAAG,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClD,QAAQ,MAAM;AACd,MAAM,KAAK,OAAO;AAClB,QAAQ,GAAG,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9C,QAAQ,MAAM;AACd,MAAM,KAAK,QAAQ;AACnB,QAAQ,GAAG,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChD,QAAQ,MAAM;AACd,MAAM,KAAK,MAAM;AACjB,QAAQ,GAAG,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9C,QAAQ,MAAM;AACd,MAAM,KAAK,SAAS,EAAE;AACtB,QAAQ,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;AACtF,QAAQ,GAAG,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAChE,QAAQ,MAAM;AACd,OAAO;AACP,MAAM,KAAK,OAAO,EAAE;AACpB,QAAQ,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;AAC5E,QAAQ,GAAG,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AAClF,QAAQ,MAAM;AACd,OAAO;AACP,MAAM,KAAK,MAAM,EAAE;AACnB,QAAQ,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;AAC3E,QAAQ,GAAG,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AAChF,QAAQ,MAAM;AACd,OAAO;AACP,KAAK;AACL,IAAI,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;AACtB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,mBAAmB,CAAC,KAAK,EAAE;AAC7B,IAAI,KAAK,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,OAAO;AACrE,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;AACnE,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;AAC3D,IAAI,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;AAC3C,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;AACzE;AACA;AACA,IAAI,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AACjC,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACtC,IAAI,MAAM,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9D,IAAI,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AAC/C;AACA;AACA,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACjC,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE;AAClC,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC;AACnH,IAAI,KAAK,CAAC,YAAY,GAAG,OAAO,KAAK,CAAC;AACtC;AACA;AACA,IAAI,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC1C,IAAI,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AACrD,IAAI,KAAK,CAAC,WAAW,GAAG,OAAO;AAC/B;AACA;AACA,IAAI,MAAM,eAAe,GAAG,IAAI,IAAI;AACpC,MAAM,MAAM,OAAO,GAAG,EAAE,CAAC;AACzB,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK;AACzC,QAAQ,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC;AACtC,OAAO,CAAC,CAAC;AACT,MAAM,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,mBAAmB,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;AACjH,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,mBAAmB,EAAE,QAAQ,CAAC,CAAC;AAChE,MAAM,OAAO,QAAQ,CAAC;AACtB,KAAK,CAAC;AACN;AACA;AACA,IAAI,OAAO,IAAI,MAAM,CAAC;AACtB,MAAM,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,4BAA4B,CAAC;AAC7D,MAAM,OAAO,EAAE;AACf,QAAQ,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,mBAAmB,CAAC;AAChE,QAAQ,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,iBAAiB;AAChD,QAAQ,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,uBAAuB;AAC5D,QAAQ,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;AACnC,OAAO;AACP,MAAM,OAAO,EAAE,QAAQ;AACvB,MAAM,OAAO,EAAE;AACf,QAAQ,MAAM,EAAE;AAChB,UAAU,IAAI,EAAE,8BAA8B;AAC9C,UAAU,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,+BAA+B,CAAC;AACpE,UAAU,QAAQ,EAAE,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;AACxF,SAAS;AACT,QAAQ,SAAS,EAAE;AACnB,UAAU,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI;AACjE,UAAU,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,SAAS,CAAC,KAAK;AACnE,UAAU,QAAQ,EAAE,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,WAAW;AAC3F,YAAY,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,SAAS,CAAC,OAAO;AAChE,YAAY,EAAE,eAAe,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE;AACtE,WAAW,CAAC;AACZ,SAAS;AACT,QAAQ,SAAS,EAAE;AACnB,UAAU,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI;AACjE,UAAU,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,SAAS,CAAC,KAAK;AACnE,UAAU,QAAQ,EAAE,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,WAAW;AAC3F,YAAY,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,SAAS,CAAC,OAAO;AAChE,YAAY,EAAE,eAAe,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE;AACtE,WAAW,CAAC;AACZ,SAAS;AACT,QAAQ,IAAI,EAAE;AACd,UAAU,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,aAAa,CAAC,IAAI;AACrE,UAAU,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,aAAa,CAAC,KAAK;AACvE,UAAU,QAAQ,EAAE,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,WAAW;AAC3F,YAAY,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,aAAa,CAAC,OAAO;AACpE,YAAY,EAAE,eAAe,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE;AACtE,WAAW,CAAC;AACZ,SAAS;AACT,QAAQ,MAAM,EAAE;AAChB,UAAU,IAAI,EAAE,8BAA8B;AAC9C,UAAU,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC7C,SAAS;AACT,OAAO;AACP,KAAK,EAAE;AACP,MAAM,OAAO,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC;AAC/C,MAAM,KAAK,EAAE,GAAG;AAChB,MAAM,QAAQ,EAAE,mDAAmD;AACnE,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACpB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,iBAAiB,CAAC,QAAQ,EAAE;AACpC,IAAI,IAAI,KAAK,GAAG,QAAQ,YAAY,KAAK,GAAG,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC;AAClE,IAAI,MAAM,uBAAuB,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AACrF,IAAI,MAAM,oBAAoB,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,uBAAuB,CAAC,MAAM,IAAI,CAAC,CAAC;AACrF,IAAI,KAAK,oBAAoB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,qBAAqB,CAAC,GAAG;AACtF,MAAM,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,uCAAuC,CAAC,CAAC,CAAC;AACvF,MAAM,KAAK,GAAG,uBAAuB,CAAC;AACtC,KAAK;AACL;AACA,IAAI,MAAM,QAAQ,GAAG,EAAE,CAAC;AACxB,IAAI,MAAM,MAAM,IAAI,IAAI,KAAK,GAAG;AAChC,MAAM,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AACxD,MAAM,KAAK,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1C,KAAK;AACL;AACA;AACA,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAChE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,iBAAiB,CAAC,QAAQ,EAAE;AACpC;AACA;AACA,IAAI,KAAK,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG;AACpE,MAAM,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,+BAA+B,EAAE;AAC9E,QAAQ,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC3E,QAAQ,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC/E,OAAO,CAAC,CAAC,CAAC;AACV,MAAM,OAAO,KAAK,CAAC;AACnB,KAAK;AACL;AACA;AACA,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,OAAO;AACnC,UAAU,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,GAAG;AACnF,MAAM,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;AAClE,MAAM,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC/B,KAAK;AACL;AACA;AACA,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AACpC;AACA;AACA,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;AAC3D,IAAI,KAAK,OAAO,GAAG,OAAO,KAAK,CAAC;AAChC;AACA;AACA,IAAI,KAAK,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,qBAAqB,CAAC,GAAG;AACrG,MAAM,MAAM,OAAO,GAAG,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC1E,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG;AAClC,QAAQ,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7B,QAAQ,OAAO,KAAK,CAAC;AACrB,OAAO;AACP,KAAK;AACL,IAAI,OAAO,QAAQ,CAAC;AACpB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,gBAAgB,CAAC,QAAQ,EAAE;AAC7B,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,OAAO;AACnC,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACnF,IAAI,KAAK,YAAY,IAAI,QAAQ,CAAC,MAAM,GAAG;AAC3C,MAAM,QAAQ,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;AAC/G,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,uBAAuB,CAAC,QAAQ,EAAE;AACpC,IAAI,MAAM,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC;AAC1D,IAAI,KAAK,QAAQ,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,eAAe,GAAG,OAAO,IAAI,CAAC;AAC1E,IAAI,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI;AACnD,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AACrD,MAAM,OAAO,QAAQ,KAAK,QAAQ,KAAK,eAAe,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC;AACnH,KAAK,CAAC,CAAC;AACP,IAAI,KAAK,CAAC,WAAW,GAAG,OAAO,IAAI,CAAC;AACpC,IAAI,OAAO,WAAW,CAAC,MAAM,CAAC;AAC9B,MAAM,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC5F,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,oBAAoB,CAAC,KAAK,EAAE;AACpC,IAAI,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC;AACnD,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AACrC,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AACpF,IAAI,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAClD,IAAI,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC;AACxB,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;AACnD,IAAI,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC;AAC3B,IAAI,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AAC3C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC;AACnC;AACA;AACA,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;AACtC,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC7B,IAAI,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC9B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,aAAa,CAAC,KAAK,EAAE;AAC7B,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;AACvE,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC9C,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrF,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAC9B,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC,CAAC;AACpD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,UAAU,CAAC,KAAK,EAAE;AACpB,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;AACvE,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC9C,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AACjC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,CAAC,KAAK,EAAE;AACzB,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;AACvE,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC9C,IAAI,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;AAC/B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,cAAc,CAAC,KAAK,EAAE;AAC9B,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACvD,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC1D,IAAI,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAC3E;AACA;AACA,IAAI,KAAK,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG;AACnC,MAAM,MAAM,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;AACnD,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AACnD,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACrC,KAAK,MAAM;AACX,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,cAAc,CAAC,sDAAsD,EAAE,QAAQ,CAAC,CAAC,CAAC;AAChH,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAChC,MAAM,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC7B,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAClC,KAAK;AACL,IAAI,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;AAC/B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,KAAK,EAAE;AACvB,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC;AACvC,IAAI,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;AACrC;AACA;AACA,IAAI,KAAK,IAAI,KAAK,OAAO,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG;AAC7F,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,qCAAqC,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AACxG,MAAM,OAAO,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACzC,KAAK;AACL;AACA,IAAI,MAAM,QAAQ,GAAG;AACrB,MAAM,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACvG,MAAM,IAAI,EAAE,IAAI;AAChB,MAAM,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;AAC/D,KAAK,CAAC;AACN,IAAI,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;AAChC,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;AAClE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,KAAK,EAAE;AACrB,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,EAAE,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACpD,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACzD,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACnC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,aAAa,CAAC,KAAK,EAAE;AAC7B,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,EAAE,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACpD,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACzD,IAAI,KAAK,CAAC,IAAI,GAAG,OAAO;AACxB;AACA;AACA,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,qBAAqB,CAAC,GAAG;AAC9D,MAAM,MAAM,OAAO,GAAG,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;AAC7E,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG;AAClC,QAAQ,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;AACzD,UAAU,IAAI;AACd,YAAY,MAAM,wBAAwB,GAAG,MAAM,6BAA6B,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACjG,YAAY,KAAK,wBAAwB,GAAG,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACxE,WAAW,CAAC,MAAM,GAAG,EAAE;AACvB,YAAY,OAAO;AACnB,WAAW;AACX,SAAS,MAAM;AACf,UAAU,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACtC,SAAS;AACT,OAAO;AACP,KAAK;AACL;AACA,IAAI,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;AAC/B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,sBAAsB,CAAC,KAAK,EAAE;AACtC,IAAI,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC;AACjC,IAAI,IAAI,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;AAC/C,IAAI,KAAK,CAAC,QAAQ,GAAG;AACrB,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;AAC1C,MAAM,KAAK,CAAC,QAAQ,GAAG,OAAO;AAC9B,MAAM,OAAO,CAAC,KAAK,CAAC,uBAAuB;AAC3C,QAAQ,qGAAqG;AAC7G,UAAU,qEAAqE;AAC/E,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE;AACpD,OAAO,CAAC;AACR,KAAK;AACL;AACA,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;AACrE,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;AACzE,IAAI,IAAI,YAAY,CAAC;AACrB,IAAI,SAAS,QAAQ;AACrB,MAAM,KAAK,eAAe;AAC1B,QAAQ,YAAY,GAAG,IAAI,CAAC,6BAA6B,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM;AAC3E,KAAK;AACL,IAAI,KAAK,CAAC,YAAY,GAAG,OAAO;AAChC,IAAI,IAAI,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAChG,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,CAAC,KAAK,EAAE;AAC5B,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,IAAI,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC;AACpE,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AACpD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,KAAK,EAAE;AAC3B,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;AACxE,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AACvD,GAAG;AACH;AACA;AACA;AACA,EAAE,gBAAgB,CAAC,KAAK,EAAE;AAC1B,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;AACvE,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AACnD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,2BAA2B,CAAC,KAAK,EAAE;AACrC,IAAI,KAAK,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,OAAO;AACrE,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,sBAAsB,CAAC;AAC7D,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACxE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,CAAC,KAAK,EAAE;AACzB,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,EAAE,GAAG,KAAK,CAAC,aAAa,CAAC;AACnC,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC/D,IAAI,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;AACrC,IAAI,KAAK,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC9C,SAAS,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACzB,IAAI,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;AACzB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,gBAAgB,CAAC,KAAK,EAAE;AAC1B,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC;AACpD,IAAI,KAAK,KAAK,KAAK,MAAM,GAAG,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACpF,IAAI,OAAO,IAAID,eAAa,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,cAAc,CAAC,KAAK,EAAE;AAC9B,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;AAC3B,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO;AAC1C,IAAI,SAAS,CAAC,CAAC,OAAO,CAAC,MAAM;AAC7B,MAAM,KAAK,OAAO;AAClB,QAAQ,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;AACxD,QAAQ,OAAO;AACf,MAAM;AACN,QAAQ,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACtD,QAAQ,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACjC,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,iBAAiB,GAAG;AACtB,IAAI,IAAI,OAAO,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAC;AAC5C,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG;AACpC,MAAM,OAAO,CAAC,OAAO,CAAC;AACtB,QAAQ,KAAK,EAAE,sCAAsC;AACrD,QAAQ,KAAK,EAAE,wBAAwB;AACvC,QAAQ,IAAI,EAAE,iBAAiB;AAC/B,QAAQ,OAAO,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE;AACtD,OAAO,CAAC,CAAC;AACT,KAAK;AACL,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;;ACt6CA;AACA;AACA;AACe,MAAM,qBAAqB,SAAS,YAAY,CAAC;AAChE;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC;AACvD,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE;AAC5B,IAAI,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACjD;AACA;AACA,IAAI,OAAO,CAAC,SAAS,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK;AAChF,MAAM,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC1D,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;AACnB,MAAM,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7E,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,CAAC,EAAE,OAAO,GAAG,CAAC,KAAK,CAAC;AACnD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,EAAE,OAAO,GAAG,CAAC,GAAG,CAAC;AAC/C,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/B,KAAK,EAAE,EAAE,CAAC,CAAC;AACX;AACA,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC;AAC/C,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE;AAC9C,MAAM,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,2BAA2B,CAAC;AAChF,MAAM,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AACtD,MAAM,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AACtH,MAAM,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,kBAAkB;AACxD,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,mBAAmB,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;AACzE,MAAM,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW;AACxD,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,OAAO,EAAE;AACzB;AACA;AACA,IAAI,MAAM,SAAS,GAAG,EAAE,CAAC;AACzB,IAAI,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,GAAG;AAC5F,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACjG,KAAK;AACL;AACA;AACA,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK;AACvG,MAAM,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AAC7D;AACA;AACA,MAAM,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;AACtD,MAAM,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,QAAQ,KAAK,CAAC,CAAC,CAAC;AACnE,MAAM,GAAG,CAAC,UAAU,GAAG;AACvB,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,QAAQ,GAAG;AACjD,UAAU,IAAI,EAAE,QAAQ;AACxB,UAAU,GAAG,EAAE,aAAa;AAC5B,UAAU,KAAK,EAAE,0BAA0B;AAC3C,SAAS;AACT,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,GAAG;AAChD,UAAU,IAAI,EAAE,QAAQ;AACxB,UAAU,GAAG,EAAE,SAAS;AACxB,UAAU,KAAK,EAAE,yBAAyB;AAC1C,SAAS;AACT,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAChC;AACA;AACA,MAAM,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACnD;AACA;AACA,MAAM,GAAG,CAAC,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAC3C,MAAM,GAAG,CAAC,YAAY,GAAG,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC;AACtF,MAAM,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,YAAY,KAAK,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1E,MAAM,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AACxE;AACA;AACA,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC9C;AACA;AACA,MAAM,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzD,WAAW,KAAK,IAAI,CAAC,IAAI,KAAK,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5D,WAAW,KAAK,IAAI,CAAC,IAAI,KAAK,YAAY,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxE,WAAW,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/D,WAAW,KAAK,IAAI,CAAC,IAAI,KAAK,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrE,WAAW,KAAK,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClF,MAAM,OAAO,GAAG,CAAC;AACjB,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;AAC3F;AACA;AACA,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC9D,IAAI,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAChE,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC7D;AACA;AACA,IAAI,MAAM,IAAI,CAAC,IAAI,KAAK,GAAG;AAC3B,MAAM,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;AACnD,MAAM,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;AAC7E,MAAM,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACtC,KAAK;AACL;AACA;AACA,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAC9D,IAAI,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI;AAC7C,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC;AAC5C,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC;AACrF,KAAK,CAAC,CAAC,MAAM,CAAC;AACd;AACA;AACA,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC9D,IAAI,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;AAClF,IAAI,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK;AAC3C,MAAM,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;AACrD,MAAM,GAAG,CAAC,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI;AAC7F,QAAQ,MAAM,KAAK,GAAG,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;AAChD,QAAQ,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,GAAG,aAAa,EAAE,CAAC;AACjE,OAAO,CAAC,CAAC;AACT,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpB,MAAM,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AACnF,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,eAAe,KAAK,UAAU,CAAC,CAAC;AAC3F,MAAM,KAAK,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzC,MAAM,OAAO,GAAG,CAAC;AACjB,KAAK,EAAE,EAAE,CAAC,CAAC;AACX,IAAI,MAAM,MAAM,QAAQ,IAAI,UAAU,GAAG;AACzC,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC3B,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,4BAA4B,EAAE;AACrE,QAAQ,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,eAAe;AACnE,OAAO,CAAC,CAAC;AACT,MAAM,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;AAC1D,KAAK;AACL;AACA;AACA,IAAI,MAAM,QAAQ,GAAG;AACrB,MAAM,UAAU,EAAE;AAClB,QAAQ,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,KAAK,EAAE,WAAW;AACpE,QAAQ,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE;AAC1D,MAAM,OAAO,EAAE;AACf,QAAQ,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO;AAClE,QAAQ,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE;AACpE,MAAM,MAAM,EAAE;AACd,QAAQ,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,EAAE;AAC/C,QAAQ,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,CAAC,EAAE;AAChF,MAAM,OAAO,EAAE;AACf,QAAQ,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,EAAE;AAChD,QAAQ,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;AACpD,KAAK,CAAC;AACN,IAAI,MAAM,MAAM,IAAI,IAAI,KAAK,GAAG;AAChC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3E,WAAW,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7C,KAAK;AACL;AACA;AACA,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;AACpC,IAAI,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACjD,IAAI,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;AAClC,IAAI,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;AACvC,IAAI,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC/C,IAAI,OAAO,CAAC,MAAM,CAAC,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;AACrD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,uBAAuB,CAAC,IAAI,EAAE,OAAO,EAAE;AACzC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG;AACjC,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;AACjD,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC9C,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;AACzC,MAAM,OAAO,CAAC,WAAW,GAAG,UAAU,GAAG,QAAQ,GAAG,EAAE,CAAC;AACvD,MAAM,KAAK,QAAQ,GAAG,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC;AACpD,MAAM,KAAK,QAAQ,GAAG,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC;AACtF,WAAW,KAAK,UAAU,GAAG,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,QAAQ,CAAC;AAC/F,WAAW,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;AAC7E,KAAK;AACL,SAAS;AACT,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC9C,MAAM,OAAO,CAAC,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,EAAE,CAAC;AACrD,MAAM,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,gBAAgB,GAAG,kBAAkB,CAAC,CAAC;AACjG,MAAM,OAAO,CAAC,SAAS,GAAG,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC;AACpD,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,IAAI,EAAE;AAC1B,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAClC,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,OAAO;AACnC,IAAI,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACxE,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACnE,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACjE,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/D,IAAI,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9E,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,KAAK,EAAE;AACxB,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC;AACvC,IAAI,SAAS,MAAM,CAAC,OAAO,CAAC,MAAM;AAClC,MAAM,KAAK,iBAAiB;AAC5B,QAAQ,OAAO,MAAM,CAAC,OAAO,CAAC;AAC9B,UAAU,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC;AACjE,UAAU,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC,IAAI,CAAC;AAC9E,UAAU,GAAG,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE;AACjD,SAAS,CAAC,CAAC;AACX,MAAM,KAAK,eAAe;AAC1B,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AACxD,MAAM,KAAK,gBAAgB;AAC3B,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACxD,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,cAAc,CAAC,KAAK,EAAE;AAC9B,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC7C,IAAI,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC;AAClE,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,OAAO,GAAG,OAAO;AACrC,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACpD,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,qBAAqB,CAAC,GAAG;AAC9D,MAAM,MAAM,OAAO,GAAG,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACpF,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG;AAClC,QAAQ,KAAK,KAAK,GAAG,CAAC,GAAG,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACrD,QAAQ,IAAI;AACZ,UAAU,MAAM,wBAAwB,GAAG,MAAM,6BAA6B,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;AACvG,UAAU,KAAK,wBAAwB,GAAG,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACtE,SAAS;AACT,QAAQ,MAAM,GAAG,EAAE;AACnB,UAAU,OAAO;AACjB,SAAS;AACT,OAAO;AACP,KAAK;AACL,IAAI,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;AAChF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,KAAK,EAAE;AACvB,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;AACvE,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC9C,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG,6BAA6B,GAAG,iBAAiB,CAAC;AAC3F,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AACzE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,YAAY,CAAC,KAAK,EAAE;AAC5B,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAChC,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;AAClC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,WAAW,CAAC,KAAK,EAAE;AAC3B,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAChC,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;AACjC,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,iBAAiB,CAAC,QAAQ,EAAE;AACpC;AACA;AACA,IAAI,KAAK,QAAQ,CAAC,IAAI,KAAK,OAAO,GAAG;AACrC,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;AACxD,MAAM,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;AACnG,MAAM,KAAK,QAAQ,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG;AACzC,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,qCAAqC,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC5G,QAAQ,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACpC,QAAQ,OAAO,KAAK,CAAC;AACrB,OAAO;AACP;AACA,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACpG,MAAM,KAAK,GAAG,GAAG;AACjB,QAAQ,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;AAC7C,QAAQ,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,qBAAqB,CAAC,GAAG;AAClE,UAAU,MAAM,OAAO,GAAG,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACxG,UAAU,KAAK,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG;AACtC,YAAY,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACjC,YAAY,OAAO,KAAK,CAAC;AACzB,WAAW;AACX,SAAS;AACT,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AAC3E,QAAQ,OAAO,KAAK,CAAC;AACrB,OAAO;AACP,KAAK;AACL;AACA;AACA,SAAS,KAAK,QAAQ,CAAC,IAAI,KAAK,UAAU,GAAG;AAC7C,MAAM,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACzG,MAAM,KAAK,KAAK,GAAG;AACnB,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,8BAA8B,EAAE,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;AACrG,QAAQ,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACpC,QAAQ,OAAO,KAAK,CAAC;AACrB,OAAO;AACP,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;AACzG,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,QAAQ,GAAG;AACjC,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,+BAA+B,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACtH,QAAQ,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACpC,QAAQ,OAAO,KAAK,CAAC;AACrB,OAAO;AACP,KAAK;AACL,IAAI,OAAO,KAAK,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AAC7C,GAAG;AACH;;ACnWA;AACA;AACA;AACe,MAAM,eAAe,SAAS,YAAY,CAAC;AAC1D;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AACjD,MAAM,KAAK,EAAE,GAAG;AAChB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,CAAC,OAAO,EAAE;AACzB,IAAI,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACjD;AACA;AACA,IAAI,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC1D,IAAI,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AACrE;AACA,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE;AAC9C,MAAM,MAAM,EAAE;AACd,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC;AACpD,QAAQ,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;AACpF,QAAQ,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE;AACvC,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,OAAO,EAAE;AACzB;AACA;AACA,IAAI,MAAM,QAAQ,GAAG;AACrB,MAAM,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI;AACzF,QAAQ,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE;AAC7D,MAAM,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI;AACzF,QAAQ,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,CAAC,EAAE;AAC9D,MAAM,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;AAClG,MAAM,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACpG,KAAK,CAAC;AACN;AACA;AACA,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK;AAC9D,MAAM,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AAC7D,MAAM,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;AACtD,MAAM,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,QAAQ,KAAK,CAAC,CAAC,CAAC;AACnE,MAAM,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACnD,MAAM,GAAG,CAAC,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAC3C,MAAM,GAAG,CAAC,YAAY,GAAG,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC;AACtF,MAAM,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3E,MAAM,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AACxE,MAAM,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC;AAC5B,MAAM,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrD,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,MAAM,OAAO,GAAG,CAAC;AACjB,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AACjB;AACA;AACA,IAAI,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAChE,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC7D;AACA;AACA,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAC9D;AACA;AACA,IAAI,MAAM,IAAI,IAAI,IAAI,KAAK,GAAG;AAC9B,MAAM,KAAK,IAAI,CAAC,IAAI,KAAK,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtE,WAAW,KAAK,IAAI,CAAC,IAAI,KAAK,MAAM,GAAG;AACvC,QAAQ,KAAK,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7E,aAAa,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/C,OAAO;AACP,WAAW,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/C,KAAK;AACL;AACA;AACA,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;AACpC,IAAI,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC/C,IAAI,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;AAClC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,GAAG;AAClB,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;AAC/C,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;AACrB,IAAI,KAAK,EAAE,CAAC,IAAI,KAAK,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC,CAAC;AACvH,SAAS,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAClF,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAChE,IAAI,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAClC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE;AACvC;AACA;AACA,IAAI,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;AACxD,IAAI,IAAI,GAAG,GAAG,mBAAmB,CAAC;AAClC,IAAI,IAAI,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC3B,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;AACnC,IAAI,KAAK,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;AACzD;AACA;AACA,IAAI,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAChD,GAAG;AACH;;AC7HA;AACA;AACA;AACe,MAAM,mBAAmB,SAAS,YAAY,CAAC;AAC9D;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC;AACrD,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,QAAQ,GAAG;AACxB,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACnC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,mBAAmB,CAAC,WAAW,EAAE,SAAS,EAAE;AAC9C;AACA;AACA,IAAI,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;AACvG;AACA,IAAI,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,mBAAmB,CAAC;AAC7E,QAAQ,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC,MAAM;AACzD,QAAQ,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC,QAAQ,CAAC;AAC5D,IAAI,WAAW,IAAI,UAAU,GAAG,iBAAiB,CAAC;AAClD;AACA;AACA,IAAI,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,mBAAmB,CAAC;AAClE,QAAQ,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,uBAAuB,CAAC,MAAM;AAC/D,QAAQ,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,uBAAuB,CAAC,QAAQ,CAAC;AAClE;AACA;AACA,IAAI,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC3D,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AAChE,IAAI,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACzD,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,SAAS,EAAE,cAAc,CAAC,IAAI,EAAE;AACpD,IAAI,OAAO,KAAK,CAAC,iBAAiB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;AAC9D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE;AACpC;AACA;AACA,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AACxC,IAAI,OAAO,CAAC,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,EAAE,CAAC;AACnD,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AAC1F;AACA;AACA,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,KAAK,MAAM,GAAG;AAC1E,MAAM,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAC/F,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC;AAC1D,WAAW,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,GAAG,GAAG,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC;AAChE,WAAW,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC;AACjE,KAAK;AACL;AACA;AACA,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,MAAM,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,GAAG;AACnE,MAAM,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC;AACtE,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,OAAO,EAAE;AACzB,IAAI,MAAM,YAAY,GAAG,CAAC;AAC1B,MAAM,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;AACjD,MAAM,GAAG,EAAE,UAAU;AACrB,MAAM,QAAQ,EAAE,UAAU;AAC1B,MAAM,QAAQ,EAAE,QAAQ;AACxB,KAAK,CAAC,CAAC;AACP;AACA,IAAI,MAAM,gBAAgB,GAAG,CAAC;AAC9B,MAAM,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;AACjD,MAAM,GAAG,EAAE,UAAU;AACrB,MAAM,QAAQ,EAAE,iBAAiB;AACjC,MAAM,QAAQ,EAAE,QAAQ;AACxB,KAAK,EAAE;AACP,MAAM,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;AAC3C,MAAM,GAAG,EAAE,SAAS;AACpB,MAAM,QAAQ,EAAE,oBAAoB;AACpC,KAAK,EAAE;AACP,MAAM,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;AAC3C,MAAM,GAAG,EAAE,SAAS;AACpB,MAAM,QAAQ,EAAE,iBAAiB;AACjC,MAAM,QAAQ,EAAE,QAAQ;AACxB,KAAK,EAAE;AACP,MAAM,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;AAClD,MAAM,GAAG,EAAE,gBAAgB;AAC3B,MAAM,QAAQ,EAAE,WAAW;AAC3B,KAAK,CAAC,CAAC;AACP;AACA,IAAI,MAAM,QAAQ,GAAG;AACrB,MAAM,OAAO,EAAE;AACf,QAAQ,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;AACnD,QAAQ,KAAK,EAAE,EAAE;AACjB,QAAQ,UAAU,EAAE,IAAI;AACxB,QAAQ,QAAQ,EAAE,IAAI;AACtB,QAAQ,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,CAAC;AAC1D,QAAQ,OAAO,EAAE,CAAC;AAClB,UAAU,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;AAClD,UAAU,GAAG,EAAE,YAAY;AAC3B,UAAU,QAAQ,EAAE,OAAO;AAC3B,SAAS,CAAC;AACV,OAAO;AACP,MAAM,SAAS,EAAE;AACjB,QAAQ,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;AACnE,QAAQ,KAAK,EAAE,EAAE;AACjB,QAAQ,QAAQ,EAAE,IAAI;AACtB,QAAQ,OAAO,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,CAAC;AAC7D,QAAQ,OAAO,EAAE,gBAAgB;AACjC,OAAO;AACP,MAAM,OAAO,EAAE;AACf,QAAQ,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;AACnD,QAAQ,KAAK,EAAE,EAAE;AACjB,QAAQ,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC;AAC/B,OAAO;AACP,MAAM,SAAS,EAAE;AACjB,QAAQ,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;AACrD,QAAQ,KAAK,EAAE,EAAE;AACjB,QAAQ,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,UAAU,CAAC;AAC9D,OAAO;AACP,MAAM,OAAO,EAAE;AACf,QAAQ,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACvE,QAAQ,KAAK,EAAE,EAAE;AACjB,QAAQ,QAAQ,EAAE,IAAI;AACtB,QAAQ,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC;AACzD,QAAQ,OAAO,EAAE,gBAAgB;AACjC,OAAO;AACP,KAAK,CAAC;AACN;AACA,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI;AAClC,MAAM,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AAC3C,MAAM,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;AACtD,MAAM,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC;AAC5B,MAAM,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACnD,MAAM,GAAG,CAAC,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAC3C,MAAM,GAAG,CAAC,YAAY,GAAG,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC;AACtF,MAAM,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3E,KAAK,CAAC,CAAC;AACP;AACA,IAAI,MAAM,KAAK,GAAG;AAClB,MAAM,IAAI,EAAE;AACZ,QAAQ,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;AACtD,QAAQ,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI;AAC9C,QAAQ,GAAG,EAAE,gBAAgB;AAC7B,QAAQ,YAAY,EAAE,IAAI;AAC1B,QAAQ,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC;AAC/B,QAAQ,OAAO,EAAE,YAAY;AAC7B,OAAO;AACP,MAAM,UAAU,EAAE;AAClB,QAAQ,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC;AAC5D,QAAQ,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU;AACpD,QAAQ,GAAG,EAAE,sBAAsB;AACnC,QAAQ,YAAY,EAAE,IAAI;AAC1B,QAAQ,OAAO,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC;AACrC,QAAQ,OAAO,EAAE,YAAY;AAC7B,OAAO;AACP,MAAM,KAAK,EAAE;AACb,QAAQ,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC;AACvD,QAAQ,KAAK,EAAE,EAAE;AACjB,QAAQ,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC;AAC/B,QAAQ,OAAO,EAAE,CAAC;AAClB,UAAU,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;AACrD,UAAU,GAAG,EAAE,UAAU;AACzB,UAAU,QAAQ,EAAE,iBAAiB;AACrC,UAAU,QAAQ,EAAE,QAAQ;AAC5B,SAAS,EAAE;AACX,UAAU,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;AAClD,UAAU,GAAG,EAAE,YAAY;AAC3B,UAAU,QAAQ,EAAE,oBAAoB;AACxC,UAAU,QAAQ,EAAE,QAAQ;AAC5B,SAAS,EAAE;AACX,UAAU,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;AACnD,UAAU,GAAG,EAAE,aAAa;AAC5B,UAAU,QAAQ,EAAE,eAAe;AACnC,UAAU,QAAQ,EAAE,QAAQ;AAC5B,SAAS,CAAC;AACV,OAAO;AACP,KAAK,CAAC;AACN;AACA;AACA,IAAI,IAAI,WAAW,GAAG,CAAC,CAAC;AACxB,IAAI,MAAM,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,GAAG;AACxC,MAAM,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;AACtD,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACzC;AACA;AACA,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;AAC9D,MAAM,KAAK,OAAO,GAAG;AACrB,QAAQ,WAAW,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;AACxE,QAAQ,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,QAAQ,SAAS;AACjB,OAAO;AACP;AACA;AACA,MAAM,SAAS,IAAI,CAAC,IAAI;AACxB,QAAQ,KAAK,QAAQ;AACrB,UAAU,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5C,UAAU,MAAM;AAChB,QAAQ,KAAK,WAAW;AACxB,UAAU,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9C,UAAU,MAAM;AAChB,QAAQ,KAAK,MAAM;AACnB,UAAU,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;AAC7C,UAAU,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtF,eAAe,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChF,eAAe,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjD,UAAU,MAAM;AAChB,QAAQ;AACR,UAAU,WAAW,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC1E,UAAU,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvC,OAAO;AACP,KAAK;AACL;AACA;AACA,IAAI,OAAO,CAAC,gBAAgB,GAAG,KAAK,CAAC;AACrC,IAAI,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC/C,IAAI,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzC,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AACzE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,IAAI,EAAE;AAC1B,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAClC,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,OAAO;AACnC;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACnE,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAC/B,OAAO,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;AACxC,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3C;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,4CAA4C,CAAC;AAC3D,OAAO,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;AACxC,OAAO,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9C;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC;AACjC,OAAO,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;AACxC,OAAO,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACjD;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,uCAAuC,CAAC;AACtD,OAAO,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;AACxC,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5C;AACA,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE;AACvD,MAAM,IAAI,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC,IAAI,EAAE,CAAC;AACvE,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,KAAK,EAAE;AAC3B,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC;AACvC,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACxC,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAC9C,IAAI,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,YAAY,CAAC;AAC5E;AACA;AACA,IAAI,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC7E,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;AAC7B,IAAI,KAAK,CAAC,KAAK,GAAG,OAAO,IAAI,CAAC;AAC9B;AACA;AACA,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC;AAClD,IAAI,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;AACtC,IAAI,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AAC7B,IAAI,IAAI,IAAI,KAAK,QAAQ,EAAE,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AACjD,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACvB;AACA;AACA,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AACpE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,KAAK,EAAE;AACxB,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;AACvE,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC9C,IAAI,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC;AAC1D,IAAI,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC;AACnD,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,IAAI,QAAQ,IAAI;AAChB,MAAM,KAAK,QAAQ,EAAE,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM;AACpD,MAAM,KAAK,SAAS,EAAE,KAAK,GAAG,KAAK,KAAK,MAAM,CAAC,CAAC,MAAM;AACtD,KAAK;AACL,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AACjD,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,KAAK,EAAE;AACvB,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B;AACA,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC;AACvC,IAAI,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;AACrC,IAAI,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,YAAY,EAAE;AAClD,MAAM,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3E,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC5C,MAAM,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AAClE,KAAK;AACL,IAAI,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AACtC,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,KAAK,EAAE;AACvB,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B;AACA,IAAI,MAAM,GAAG,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACrD,IAAI,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;AAC7C,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAChD,MAAM,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,YAAY,CAAC;AAC1E,MAAM,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;AACvG,MAAM,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AAClE,KAAK;AACL,IAAI,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AACtC,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,iBAAiB,CAAC,QAAQ,EAAE;AACpC,IAAI,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AACzF,IAAI,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC;AAC7F,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,0BAA0B,EAAE,OAAO,CAAC,CAAC;AAC7E,IAAI,OAAO,KAAK,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AAC7C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,KAAK,EAAE;AACrB,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;AACvE,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC9C,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACtF,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACnC,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,CAAC;AAChD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,YAAY,CAAC,KAAK,EAAE;AACtB,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;AACvE,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC9C,IAAI,IAAI,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAClD,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AACrC,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC,CAAC;AACjD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,KAAK,EAAE;AACvB,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;AACvE,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC9C,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/D,GAAG;AACH;;AC5aA;AACA;AACA;AACA;AACA;AACe,MAAM,eAAe,SAAS,UAAU,CAAC;AACxD;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;AACxB;AACA;AACA;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;AACnD,MAAM,QAAQ,EAAE,gDAAgD;AAChE,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AACxF,MAAM,OAAO,EAAE,CAAC,4BAA4B,CAAC;AAC7C,MAAM,KAAK,EAAE,GAAG;AAChB,MAAM,MAAM,EAAE,GAAG;AACjB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;AACrF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE;AAC5B,IAAI,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC3C,IAAI,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;AACzC,IAAI,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACjD;AACA;AACA,IAAI,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AACrD,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAClC,IAAI,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAChC;AACA;AACA,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;AACpD;AACA;AACA,IAAI,OAAO,CAAC,WAAW,GAAG,EAAE,CAAC;AAC7B,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACxD,IAAI,OAAO,CAAC,YAAY,GAAG,EAAE,CAAC;AAC9B,IAAI,MAAM,MAAM,EAAE,IAAI,IAAI,CAAC,SAAS,GAAG;AACvC,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC5C,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AACnG,KAAK;AACL,IAAI,OAAO,CAAC,gBAAgB,GAAG,KAAK,CAAC;AACrC,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,GAAG,UAAU,GAAG,EAAE,CAAC;AAC9D;AACA;AACA,IAAI,OAAO,CAAC,eAAe,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE;AAC9F,MAAM,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;AACjC,MAAM,QAAQ,EAAE,OAAO,CAAC,QAAQ;AAChC,MAAM,KAAK,EAAE,IAAI;AACjB,MAAM,UAAU,EAAE,IAAI,CAAC,KAAK;AAC5B,KAAK,CAAC,CAAC;AACP;AACA;AACA,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC9C;AACA;AACA,IAAI,OAAO,CAAC,MAAM,GAAG;AACrB,MAAM,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK;AAClF,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;AACzB,QAAQ,OAAO,GAAG,CAAC;AACnB,OAAO,EAAE,EAAE,CAAC;AACZ,KAAK,CAAC;AACN,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,KAAK,EAAE;AACrB,IAAI,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;AAChG,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC;AACvB,IAAI,KAAK,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;AACxG,IAAI,KAAK,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3G,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACxF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,GAAG;AACpB,IAAI,MAAM,KAAK,GAAG;AAClB,MAAM,SAAS,EAAE,CAAC;AAClB,MAAM,KAAK,EAAE,CAAC;AACd,MAAM,QAAQ,EAAE,CAAC;AACjB,MAAM,SAAS,EAAE,CAAC;AAClB,KAAK,CAAC;AACN,IAAI,MAAM,QAAQ,GAAG;AACrB,MAAM,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;AAC/E,MAAM,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;AACnE,MAAM,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;AAC3E,KAAK,CAAC;AACN,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,GAAG;AACvD,MAAM,MAAM,CAAC,GAAG;AAChB,QAAQ,KAAK,EAAE,MAAM;AACrB,QAAQ,EAAE,EAAE,MAAM,CAAC,EAAE;AACrB,QAAQ,IAAI,EAAE,MAAM,CAAC,IAAI;AACzB,QAAQ,GAAG,EAAE,MAAM,CAAC,GAAG;AACvB,QAAQ,EAAE,EAAE,EAAE;AACd,QAAQ,eAAe,EAAE,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC;AACzE,OAAO,CAAC;AACR;AACA;AACA,MAAM,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;AAC7C,MAAM,CAAC,CAAC,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;AAC/C,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;AACzD,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClF,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AAClF,MAAM,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC;AACtC,MAAM,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;AAC9B;AACA,MAAM,KAAK,MAAM,CAAC,IAAI,KAAK,SAAS,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;AACzD,WAAW,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC5B,MAAM,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5C,KAAK;AACL,IAAI,MAAM,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG;AAC3D,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;AACxD,KAAK;AACL,IAAI,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC7B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,qBAAqB,GAAG;AAC1B,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC;AAC5D,IAAI,IAAI,MAAM,GAAG;AACjB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACrF,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AACxF,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAClF,KAAK,CAAC;AACN,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE,IAAI,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;AACnC,IAAI,OAAO;AACX,MAAM,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9C,MAAM,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AACjD,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,OAAO,EAAE;AAC7B;AACA;AACA,IAAI,MAAM,QAAQ,GAAG,EAAE,CAAC;AACxB,IAAI,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,CAAC,GAAG;AACpF,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACnH,KAAK;AACL;AACA;AACA,IAAI,MAAM,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,GAAG;AACxC,MAAM,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;AACtD,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AACrC,MAAM,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,QAAQ,GAAG,CAAC,CAAC,CAAC;AACjE,MAAM,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC;AAC5B,MAAM,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACnD,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,QAAQ,MAAM,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpG,WAAW,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1C,KAAK;AACL,IAAI,OAAO,QAAQ,CAAC;AACpB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE;AACnC,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE;AACtD,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;AAClC,KAAK;AACL,IAAI,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACzC,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE;AAC1B,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,GAAG;AACvD,MAAM,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAClC,KAAK;AACL,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAChC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,IAAI,EAAE;AAC1B,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAClC,IAAI,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/E,IAAI,KAAK,IAAI,CAAC,UAAU,GAAG;AAC3B,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9E,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5E,MAAM,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;AACnF,MAAM,IAAI,WAAW,CAAC,IAAI,EAAE,kBAAkB,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC9F,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,oBAAoB,CAAC,KAAK,EAAE;AAC9B,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC;AACvC,IAAI,SAAS,MAAM,CAAC,OAAO,CAAC,MAAM;AAClC,MAAM,KAAK,iBAAiB;AAC5B,QAAQ,MAAM,CAAC,OAAO,CAAC;AACvB,UAAU,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC;AACjE,UAAU,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC,IAAI,CAAC;AAC9E,UAAU,GAAG,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE;AACjD,SAAS,CAAC,CAAC;AACX,QAAQ,MAAM;AACd,MAAM,KAAK,cAAc;AACzB,QAAQ,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;AACjF,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;AACxD,QAAQ,MAAM;AACd,MAAM,KAAK,gBAAgB;AAC3B,QAAQ,MAAM,cAAc,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACpE,QAAQ,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACpC,QAAQ,MAAM;AACd,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,mBAAmB,CAAC,KAAK,EAAE;AAC7B,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC;AACvC,IAAI,SAAS,MAAM,CAAC,OAAO,CAAC,MAAM;AAClC,MAAM,KAAK,YAAY;AACvB,QAAQ,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACjC,QAAQ,MAAM;AACd,MAAM,KAAK,YAAY;AACvB,QAAQ,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC9D,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACzE,QAAQ,UAAU,CAAC,YAAY,EAAE,CAAC;AAClC,QAAQ,MAAM;AACd,MAAM,KAAK,UAAU;AACrB,QAAQ,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC5D,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACrE,QAAQ,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACpC,QAAQ,MAAM;AACd,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,MAAM,EAAE;AACtB,IAAI,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;AACrC,IAAI,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AACvC,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC;AACvB,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7G,IAAI,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AAC1C,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;AAClE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,OAAO,EAAE;AAC1B,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC9D,IAAI,KAAK,CAAC,IAAI,GAAG,OAAO;AACxB,IAAI,EAAE,CAAC,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC1F,IAAI,KAAK,CAAC,IAAI,CAAC,6BAA6B,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAC1E,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,CAAC,KAAK,EAAE;AAC5B,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAClE,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC1D,IAAI,KAAK,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACzD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,gBAAgB,CAAC,KAAK,EAAE;AAC1B,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC3F,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE;AAClC,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,OAAO;AACnC,IAAI,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC1C,IAAI,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AACrD,IAAI,KAAK,CAAC,WAAW,GAAG,OAAO;AAC/B,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AACrD,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,iBAAiB,CAAC,QAAQ,EAAE;AACpC,IAAI,MAAM,KAAK,GAAG,QAAQ,YAAY,KAAK,GAAG,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC;AACpE;AACA,IAAI,MAAM,QAAQ,GAAG,EAAE,CAAC;AACxB,IAAI,MAAM,MAAM,IAAI,IAAI,KAAK,GAAG;AAChC,MAAM,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AACxD,MAAM,KAAK,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1C,KAAK;AACL;AACA;AACA,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAChE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,iBAAiB,CAAC,QAAQ,EAAE;AACpC;AACA;AACA,IAAI,KAAK,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG;AACpE,MAAM,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,+BAA+B,EAAE;AAC9E,QAAQ,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC3E,QAAQ,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC/E,OAAO,CAAC,CAAC,CAAC;AACV,MAAM,OAAO,KAAK,CAAC;AACnB,KAAK;AACL;AACA;AACA,IAAI,KAAK,QAAQ,CAAC,IAAI,KAAK,OAAO,GAAG;AACrC,MAAM,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;AAClE,MAAM,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC/B,KAAK;AACL;AACA;AACA;AACA,IAAI,OAAO,QAAQ,CAAC;AACpB,GAAG;AACH;;ACxZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,gBAAgB,SAAS,eAAe,CAAC;AAC9D,EAAE,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE;AACvC,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC1B,IAAI,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;AAC5B;AACA,IAAI,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,oEAAoE;AAC9G,QAAQ,+GAA+G;AACvH,QAAQ,sCAAsC,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;AAC1F,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,OAAO,EAAE,CAAC,OAAO,CAAC;AACxB,MAAM,QAAQ,EAAE,+CAA+C;AAC/D,MAAM,KAAK,EAAE,GAAG;AAChB,MAAM,MAAM,EAAE,MAAM;AACpB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,KAAK,GAAG;AACd,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;AAC3D,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,2BAA2B,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACrG,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,OAAO,EAAE;AACnB,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;AACzC,IAAI,OAAO;AACX,MAAM,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS;AACvC,MAAM,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACnG,MAAM,OAAO,EAAE,IAAI,CAAC,QAAQ;AAC5B,MAAM,iBAAiB,EAAE,MAAM,CAAC,KAAK,CAAC,iBAAiB;AACvD,MAAM,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,KAAK;AACtD,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE;AACjC,IAAI,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAC/E,IAAI,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1C,IAAI,KAAK,CAAC,WAAW,CAAC,eAAe,GAAG;AACxC,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,qCAAqC,EAAE;AAC9E,QAAQ,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC;AAC3D,OAAO,CAAC,CAAC;AACT,MAAM,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACtC,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AAC/B,KAAK;AACL,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACzC,GAAG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrEA;AACA;AACA;AACe,MAAM,0BAA0B,SAAS,MAAM,CAAC;AAC/D;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,OAAO,EAAE,CAAC,OAAO,EAAE,uBAAuB,EAAE,QAAQ,CAAC;AAC3D,MAAM,MAAM,EAAE,KAAK;AACnB,MAAM,KAAK,EAAE,GAAG;AAChB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE;AAC1C,IAAI,MAAM,kBAAkB,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK;AACtD,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK;AAC5C,MAAM,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;AAC1E,KAAK,CAAC,CAAC,CAAC;AACR,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,OAAO,EAAE,MAAM,KAAK;AAClD,MAAM,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC;AAC9B,QAAQ,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,iCAAiC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACvF,QAAQ,OAAO,EAAE,MAAM,cAAc;AACrC,UAAU,sEAAsE;AAChF,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,kBAAkB,EAAE;AACpD,SAAS;AACT,QAAQ,OAAO,EAAE;AACjB,UAAU,QAAQ,EAAE;AACpB,YAAY,IAAI,EAAE,8BAA8B;AAChD,YAAY,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,mCAAmC,CAAC;AAC1E,YAAY,QAAQ,EAAE,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAChH,WAAW;AACX,UAAU,MAAM,EAAE;AAClB,YAAY,IAAI,EAAE,8BAA8B;AAChD,YAAY,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC/C,YAAY,QAAQ,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC;AAC1C,WAAW;AACX,SAAS;AACT,QAAQ,OAAO,EAAE,UAAU;AAC3B,QAAQ,KAAK,EAAE,MAAM,MAAM,CAAC,IAAI,CAAC;AACjC,OAAO,CAAC,CAAC;AACT,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC1B,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,oBAAoB,SAAS,MAAM,CAAC;AACzD,EAAE,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE;AAC/C,IAAI,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC/B;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACrB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC;AAChD,MAAM,QAAQ,EAAE,+DAA+D;AAC/E,MAAM,KAAK,EAAE,iCAAiC;AAC9C,MAAM,KAAK,EAAE,GAAG;AAChB,MAAM,MAAM,EAAE,MAAM;AACpB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,EAAE,GAAG;AACX,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC;AACxD,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAClC,IAAI,MAAM,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG;AACvF,MAAM,KAAK,EAAE,WAAW,CAAC,SAAS,YAAY,WAAW,CAAC;AAC1D,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS;AAC/E,MAAM,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG;AAC5B,QAAQ,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,KAAK;AACzC,QAAQ,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,IAAI;AACvC,QAAQ,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,IAAI;AACvC,QAAQ,QAAQ,EAAE,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1D,OAAO,CAAC;AACR,KAAK;AACL,IAAI,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC1E,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,IAAI,EAAE;AAC1B,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAClC,IAAI,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/D,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,KAAK,EAAE;AACxB,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,8BAA8B,CAAC,CAAC;AACjF,IAAI,MAAM,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,4BAA4B,CAAC,CAAC;AACnF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,YAAY,CAAC,IAAI,EAAE,EAAE,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;AACxE,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AAC5C,MAAM,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE;AACpC,QAAQ,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,iCAAiC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACvF,QAAQ,OAAO,EAAE;AACjB,UAAU,MAAM,EAAE;AAClB,YAAY,QAAQ,EAAE,IAAI,IAAI;AAC9B,cAAc,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;AAChF,cAAc,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAChD,cAAc,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;AACpD,aAAa;AACb,WAAW;AACX,SAAS;AACT,QAAQ,KAAK,EAAE,MAAM;AACrB,UAAU,KAAK,WAAW,GAAG,MAAM,CAAC,kCAAkC,CAAC,CAAC;AACxE,eAAe,OAAO,CAAC,IAAI,CAAC,CAAC;AAC7B,SAAS;AACT,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAChE,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC1B,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;;;;;;;;;;;;;;;;;;;;AC7GA;AACA;AACA;AACA;AACe,MAAM,eAAe,SAAS,aAAa,CAAC;AAC3D;AACA,EAAE,MAAM,mBAAmB,CAAC,KAAK,EAAE;AACnC,IAAI,MAAM,GAAG,GAAG,KAAK,CAAC,aAAa,CAAC;AACpC,IAAI,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;AACtE,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAC9D,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,gBAAgB,KAAK,SAAS,EAAE,KAAK,GAAG,OAAO,SAAS,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC;AACxH,IAAI,OAAO,KAAK,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAC5C,GAAG;AACH;;;;;;;ACbA;AACA;AACA;AACA;AACe,MAAM,aAAa,SAAS,aAAa,CAAC;AACzD,EAAE,WAAW,CAAC,GAAG,IAAI,EAAE;AACvB,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;AACnB;AACA,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC,uBAAuB;AAC9E,MAAM,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,kEAAkE,CAAC;AAClG,QAAQ,8FAA8F;AACtG,QAAQ,iCAAiC;AACzC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE;AAChD,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,EAAE,EAAE,gBAAgB;AAC1B,MAAM,OAAO,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,WAAW,CAAC;AACvD,MAAM,KAAK,EAAE,uBAAuB;AACpC,MAAM,QAAQ,EAAE,iDAAiD;AACjE,MAAM,KAAK,EAAE,GAAG;AAChB,MAAM,MAAM,EAAE,MAAM;AACpB,MAAM,OAAO,EAAE,EAAE;AACjB,MAAM,WAAW,EAAE,IAAI;AACvB,MAAM,OAAO,EAAE,CAAC;AAChB,MAAM,OAAO,EAAE,IAAI;AACnB,MAAM,QAAQ,EAAE,IAAI;AACpB,MAAM,QAAQ,EAAE,OAAO;AACvB,MAAM,SAAS,EAAE,QAAQ;AACzB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,KAAK,GAAG;AACd,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC;AAC7C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,SAAS,GAAG;AAClB,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AAC7B,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AACxE,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;AAC3B,IAAI,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC;AAC1F,IAAI,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;AAC3F;AACA;AACA,IAAI,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK;AACjE,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AACrB,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnF,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC;AACnE,MAAM,OAAO,GAAG,CAAC;AACjB,KAAK,EAAE,EAAE,CAAC,CAAC;AACX;AACA;AACA,IAAI,OAAO;AACX,MAAM,OAAO,EAAE,OAAO;AACtB,MAAM,MAAM,EAAE,MAAM;AACpB,MAAM,UAAU,EAAE,CAAC,CAAC,WAAW,GAAG,QAAQ,GAAG,IAAI;AACjD,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,CAAC,QAAQ,EAAE;AAC/B,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;AAC3B,IAAI,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AACpD;AACA;AACA,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACzF;AACA;AACA,IAAI,MAAM,UAAU,GAAG,EAAE,CAAC;AAC1B,IAAI,KAAK,CAAC,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;AAC7E,SAAS,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC;AAC7C,IAAI,KAAK,CAAC,CAAC,WAAW,GAAG,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;AAC1F;AACA;AACA,IAAI,KAAK,CAAC,CAAC,OAAO,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG;AACpD,MAAM,OAAO,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,yBAAyB,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;AACrF,KAAK;AACL,IAAI,KAAK,CAAC,CAAC,OAAO,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG;AACpD,MAAM,OAAO,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,4BAA4B,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;AACxF,KAAK;AACL;AACA,IAAI,OAAO,UAAU,CAAC;AACtB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE;AACvC,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AACzD,IAAI,KAAK,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACrD,GAAG;AACH;;AC/GA;AACA;AACA;AACe,MAAM,WAAW,SAAS,SAAS,CAAC;AACnD,EAAE,WAAW,CAAC,GAAG,IAAI,EAAE;AACvB,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;AACnB;AACA;AACA,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,GAAG;AACxC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,GAAG,CAAC;AACrD,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC;AACvD,KAAK;AACL,SAAS,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,GAAG;AAChD,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC;AACvD,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,KAAK,EAAE,GAAG;AAChB,MAAM,MAAM,EAAE,GAAG;AACjB,MAAM,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC;AACzC,MAAM,SAAS,EAAE,IAAI;AACrB,MAAM,OAAO,EAAE,CAAC,cAAc,CAAC;AAC/B,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;AAC5F,MAAM,QAAQ,EAAE;AAChB,QAAQ,CAAC,YAAY,EAAE,kBAAkB,EAAE,YAAY,EAAE,eAAe,CAAC;AACzE,QAAQ,CAAC,YAAY,EAAE,mBAAmB,EAAE,YAAY,EAAE,cAAc,CAAC;AACzE,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,4BAA4B,GAAG,KAAK,CAAC;AACvC;AACA;AACA;AACA;AACA,EAAE,IAAI,QAAQ,GAAG;AACjB,IAAI,OAAO,CAAC,8BAA8B,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,CAAC,OAAO,EAAE;AACzB,IAAI,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACjD,IAAI,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;AAC9B,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AACnC;AACA;AACA,IAAI,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;AAClC;AACA;AACA,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE;AACvC,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM;AAC3B,MAAM,MAAM,EAAE,IAAI,CAAC,MAAM;AACzB,MAAM,MAAM,EAAE,IAAI,CAAC,MAAM;AACzB,MAAM,UAAU,EAAE,IAAI,CAAC,UAAU;AACjC,MAAM,mBAAmB,EAAE,CAAC,IAAI,CAAC,4BAA4B,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,OAAO,CAAC,QAAQ;AACtG,MAAM,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACvC;AACA;AACA,MAAM,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1E,MAAM,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE;AACvC,MAAM,cAAc,EAAE,IAAI,CAAC,kBAAkB,EAAE;AAC/C,MAAM,SAAS,EAAE,MAAM,IAAI,CAAC,iBAAiB,EAAE;AAC/C,MAAM,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC;AACxD;AACA;AACA,MAAM,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,MAAM;AAClD,MAAM,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM;AACpD,MAAM,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;AACjE;AACA;AACA,MAAM,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,KAAK,MAAM;AACvD;AACA;AACA,MAAM,cAAc,EAAE,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,KAAK,QAAQ,CAAC;AAC5E;AACA;AACA,MAAM,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;AACjD;AACA;AACA,MAAM,OAAO,EAAE,cAAc,CAAC,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC;AACzE,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC;AAC1E;AACA;AACA,IAAI,SAAS,IAAI,CAAC,IAAI;AACtB,MAAM,KAAK,MAAM;AACjB,QAAQ,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC/E,QAAQ,KAAK,WAAW,GAAG;AAC3B,UAAU,OAAO,CAAC,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC;AAC/C,UAAU,OAAO,CAAC,eAAe,GAAG,WAAW,CAAC,QAAQ,CAAC;AACzD,SAAS;AACT,QAAQ,MAAM;AACd,MAAM,KAAK,OAAO;AAClB,QAAQ,OAAO,CAAC,eAAe,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC/F,QAAQ,MAAM;AACd,KAAK;AACL;AACA;AACA,IAAI,OAAO,CAAC,eAAe,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE;AACzF,MAAM,OAAO,EAAE,IAAI,CAAC,OAAO;AAC3B,MAAM,KAAK,EAAE,IAAI;AACjB,MAAM,UAAU,EAAE,IAAI,CAAC,IAAI;AAC3B,MAAM,QAAQ,EAAE,OAAO,CAAC,QAAQ;AAChC,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,mBAAmB,CAAC,IAAI,EAAE;AAC5B,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,OAAO,EAAE,CAAC;AAC9C,IAAI,MAAM,WAAW,GAAG,EAAE,CAAC;AAC3B,IAAI,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,4BAA4B,CAAC;AACzE,IAAI,MAAM,QAAQ,GAAG,CAAC,UAAU;AAChC,SAAS,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1G;AACA;AACA,IAAI,KAAK,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,MAAM,GAAG;AACxD,MAAM,WAAW,CAAC,YAAY,GAAG;AACjC,QAAQ,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,KAAK;AAC/D,UAAU,EAAE,EAAE,CAAC,CAAC,EAAE;AAClB,UAAU,KAAK,EAAE,CAAC,CAAC,WAAW,CAAC,KAAK;AACpC,UAAU,KAAK,EAAE,CAAC,CAAC,KAAK;AACxB,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI;AACtB,UAAU,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;AAC9C,UAAU,UAAU,EAAE,KAAK;AAC3B,SAAS,CAAC,CAAC;AACX,QAAQ,UAAU,EAAE,SAAS;AAC7B,OAAO,CAAC;AACR,KAAK;AACL;AACA;AACA,IAAI,MAAM,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG;AAClF,MAAM,KAAK,CAAC,UAAU,GAAG,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC;AACnF,MAAM,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,WAAW,KAAK;AACrD,QAAQ,EAAE,EAAE,WAAW,CAAC,EAAE;AAC1B,QAAQ,KAAK,EAAE,WAAW,CAAC,oBAAoB,CAAC,KAAK,CAAC;AACtD,QAAQ,KAAK,EAAE,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC;AAC/D,QAAQ,IAAI,EAAE,WAAW,CAAC,IAAI;AAC9B,QAAQ,gBAAgB,EAAE,WAAW,CAAC,gBAAgB;AACtD,QAAQ,OAAO,EAAE,WAAW,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC;AACnE,QAAQ,UAAU,EAAE,WAAW,CAAC,kBAAkB,CAAC,KAAK,CAAC;AACzD,OAAO,CAAC,CAAC,CAAC;AACV,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS;AACpC,MAAM,WAAW,CAAC,KAAK,CAAC,GAAG;AAC3B,QAAQ,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACnE,QAAQ,UAAU,EAAE,CAAC,KAAK,GAAG,QAAQ,IAAI,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,SAAS,GAAG,MAAM;AACpG,OAAO,CAAC;AACR,KAAK;AACL,IAAI,OAAO,WAAW,CAAC;AACvB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,iBAAiB,GAAG;AAC5B,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,GAAG,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3E,IAAI,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/C,IAAI,KAAK,OAAO,KAAK,SAAS,GAAG,OAAO,EAAE,CAAC;AAC3C;AACA,IAAI,MAAM,YAAY,GAAG,IAAI,KAAK,OAAO,GAAG,YAAY,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACzE,IAAI,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAC/E;AACA,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;AACrB,IAAI,MAAM,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG;AACxD,MAAM,MAAM,QAAQ,GAAG,MAAME,WAAiB,CAAC,EAAE,CAAC,CAAC;AACnD,MAAM,KAAK,QAAQ,KAAK,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,GAAG,SAAS;AAC7F,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;AAClC,KAAK;AACL,IAAI,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtG,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,0BAA0B,GAAG;AAC/B,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;AACnD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,OAAO,EAAE,CAAC;AACnC,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAClC,IAAI,KAAK,CAAC,KAAK,GAAG,OAAO,EAAE,CAAC;AAC5B;AACA;AACA,IAAI,KAAK,OAAO,CAAC,IAAI,KAAK,MAAM,GAAG;AACnC,MAAM,OAAO,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK;AAC5D,QAAQ,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAClG,QAAQ,OAAO,IAAI,CAAC;AACpB,OAAO,EAAE,EAAE,CAAC,CAAC;AACb,KAAK;AACL;AACA;AACA,SAAS,KAAK,OAAO,CAAC,IAAI,KAAK,WAAW,GAAG;AAC7C,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC;AACpE,MAAM,MAAM,UAAU,GAAG,aAAa,CAAC,cAAc,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;AACtF,MAAM,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACnD,MAAM,OAAO,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK;AACxE,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5B,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACnB,QAAQ,OAAO,GAAG,CAAC;AACnB,OAAO,EAAE,EAAE,CAAC,CAAC;AACb,KAAK;AACL;AACA;AACA,SAAS,KAAK,OAAO,CAAC,IAAI,KAAK,SAAS,GAAG;AAC3C,MAAM,OAAO;AACb,QAAQ,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,8BAA8B,CAAC;AACpE,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC;AAC1F,QAAQ,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,6BAA6B,CAAC;AAClE,OAAO,CAAC;AACR,KAAK;AACL;AACA;AACA,SAAS,KAAK,OAAO,CAAC,IAAI,KAAK,UAAU,GAAG;AAC5C,MAAM,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK;AAC5C,QAAQ,KAAK,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG;AAC/E,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACzD,SAAS;AACT,QAAQ,OAAO,GAAG,CAAC;AACnB,OAAO,EAAE,EAAE,CAAC,CAAC;AACb,KAAK;AACL;AACA;AACA,SAAS,KAAK,OAAO,CAAC,IAAI,KAAK,SAAS,GAAG;AAC3C,MAAM,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK;AAC5C;AACA;AACA,QAAQ,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;AACzC,QAAQ,KAAK,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG;AACpC,UAAU,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,KAAK,SAAS;AAC9C,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,8BAA8B,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3F,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,iCAAiC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1G,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC;AACrC,SAAS;AACT;AACA;AACA,QAAQ,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;AACjD,QAAQ,KAAK,QAAQ,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9F,QAAQ,OAAO,GAAG,CAAC;AACnB,OAAO,EAAE,EAAE,CAAC,CAAC;AACb,KAAK;AACL,SAAS,OAAO,EAAE,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,GAAG;AACnB,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI;AAC3B,MAAM,KAAK,OAAO;AAClB,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;AACxG,MAAM,KAAK,WAAW,CAAC;AACvB,MAAM,KAAK,QAAQ;AACnB,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,gBAAgB,GAAG,kBAAkB,CAAC,CAAC;AACrG,MAAM,KAAK,MAAM;AACjB,QAAQ,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClF,QAAQ,KAAK,UAAU,EAAE,QAAQ,GAAG,OAAO,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;AACtG,QAAQ,MAAM;AACd,MAAM,KAAK,OAAO;AAClB,QAAQ,OAAO,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAChF,MAAM,KAAK,MAAM;AACjB,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,kBAAkB,GAAG,qBAAqB,CAAC,CAAC;AAC5G,KAAK;AACL,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,GAAG;AACvB,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;AACrB,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AACpC,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI;AAC3B,MAAM,KAAK,WAAW;AACtB,QAAQ,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7E,QAAQ,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnF,QAAQ,MAAM;AACd,MAAM,KAAK,MAAM;AACjB,QAAQ,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACpC,QAAQ,MAAM;AACd,MAAM,KAAK,OAAO;AAClB,QAAQ,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACvF,QAAQ,MAAM;AACd,MAAM,KAAK,QAAQ;AACnB,QAAQ,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG;AAC5E,UAAU,KAAK,CAAC,KAAK,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;AACzE,SAAS;AACT,QAAQ,MAAM;AACd,KAAK;AACL;AACA;AACA,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG;AACvC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;AAC5E,KAAK;AACL;AACA;AACA,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG;AAChG,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;AAClF,KAAK;AACL,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,QAAQ,CAAC,EAAE,EAAE;AAC3B,IAAI,KAAK,EAAE,IAAI,CAAC,UAAU,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG;AACjD,MAAM,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACnH,KAAK;AACL,IAAI,OAAO,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AACvC,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,cAAc,CAAC,EAAE,EAAE;AAC5D,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;AACjC,IAAI,OAAO,CAAC,OAAO,GAAG;AACtB,MAAM,IAAI,EAAE,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE;AACzE,QAAQ,OAAO,EAAE,IAAI;AACrB,QAAQ,aAAa,EAAE,IAAI;AAC3B,QAAQ,MAAM,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC3D,OAAO,CAAC;AACR,KAAK,CAAC;AACN,IAAI,OAAO,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;AAC/D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,UAAU,CAAC,EAAE,EAAE;AAChC,IAAI,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;AAClF;AACA;AACA,IAAI,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;AAC3C,IAAI,KAAK,MAAM,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACvG;AACA;AACA,IAAI,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;AACvC,IAAI,KAAK,IAAI,EAAE,GAAG,GAAG;AACrB,MAAM,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzC,MAAM,KAAK,CAAC,OAAO,CAAC,eAAe,GAAG;AACtC,QAAQ,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AACrD,QAAQ,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,+BAA+B,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC;AAClF,QAAQ,OAAO,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,qCAAqC,EAAE;AAC9F,UAAU,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;AACvD,SAAS,CAAC,CAAC,CAAC;AACZ,OAAO;AACP,KAAK;AACL;AACA;AACA,IAAI,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;AAC/C,IAAI,KAAK,QAAQ,EAAE,KAAK,GAAG;AAC3B,MAAM,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACpD,MAAM,KAAK,CAAC,YAAY,CAAC,eAAe,GAAG;AAC3C,QAAQ,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;AACjE,QAAQ,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,qCAAqC,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC9F,QAAQ,OAAO,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,qCAAqC,EAAE;AAC9F,UAAU,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;AACpD,SAAS,CAAC,CAAC,CAAC;AACZ,OAAO;AACP,KAAK;AACL;AACA;AACA,IAAI,KAAK,QAAQ,CAAC,MAAM,EAAE,UAAU,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG;AAChH,MAAM,QAAQ,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;AACvE,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,iCAAiC,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC;AACpG,MAAM,OAAO,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC;AACjF,KAAK;AACL;AACA;AACA,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AACjD,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,IAAI,EAAE;AAC1B,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAClC,IAAI,KAAK,IAAI,CAAC,UAAU,GAAG;AAC3B,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3E,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7E,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI;AAC/C,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AAClE,QAAQ,KAAK,WAAW,GAAG,OAAO,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,mHAAmH,CAAC,CAAC;AAC7K,QAAQ,cAAc,CAAC,oBAAoB,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3D,OAAO,CAAC,CAAC;AACT,MAAM,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI;AAC7D,QAAQ,MAAM,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC;AACtC,QAAQ,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC/E,OAAO,CAAC,CAAC;AACT,KAAK;AACL;AACA;AACA,IAAI,MAAM,cAAc,GAAG,IAAI,CAAC,iCAAiC,EAAE,CAAC;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,CAAC,IAAI,CAAC,iCAAiC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;AACxE,IAAI,KAAK,cAAc,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,mBAAmB,EAAE,cAAc,CAAC,CAAC;AACrF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iCAAiC,GAAG;AACtC,IAAI,MAAM,SAAS,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,4BAA4B,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,CAAC;AACvG,IAAI,OAAO;AACX,MAAM;AACN,QAAQ,IAAI,EAAE,8BAA8B;AAC5C,QAAQ,IAAI,EAAE,mCAAmC;AACjD,QAAQ,SAAS;AACjB,QAAQ,QAAQ,EAAE,EAAE,IAAI,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;AAChE,OAAO;AACP,MAAM;AACN,QAAQ,IAAI,EAAE,mCAAmC;AACjD,QAAQ,IAAI,EAAE,mCAAmC;AACjD,QAAQ,SAAS,EAAE,EAAE,IAAI;AACzB,UAAU,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;AACpE,UAAU,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC7D,UAAU,OAAO,SAAS,CAAG,CAAC,IAAI,WAAW,EAAE,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvF,SAAS;AACT,QAAQ,QAAQ,EAAE,EAAE,IAAI,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC;AACrE,OAAO;AACP,MAAM;AACN,QAAQ,IAAI,EAAE,gCAAgC;AAC9C,QAAQ,IAAI,EAAE,qEAAqE;AACnF,QAAQ,SAAS;AACjB,QAAQ,QAAQ,EAAE,EAAE,IAAI,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;AAClE,OAAO;AACP,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,gBAAgB,CAAC,KAAK,EAAE;AAChC,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC;AAClC;AACA;AACA,IAAI,KAAK,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG;AAC9C,MAAM,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAClC,MAAM,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AAC7C,MAAM,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,qBAAqB,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxF,KAAK;AACL;AACA;AACA,IAAI,KAAK,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG;AACjD,MAAM,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAClC,MAAM,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;AAC3C,MAAM,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACtE,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5D,MAAM,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,qBAAqB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACrE,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA,EAAE,YAAY,CAAC,KAAK,EAAE;AACtB,IAAI,MAAM,EAAE,GAAG,KAAK,CAAC,aAAa,CAAC;AACnC,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,OAAO;AAClE;AACA;AACA,IAAI,IAAI,QAAQ,CAAC;AACjB;AACA;AACA,IAAI,KAAK,EAAE,CAAC,OAAO,CAAC,QAAQ,GAAG;AAC/B,MAAM,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAChE,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;AACrC,KAAK,MAAM,KAAK,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,GAAG;AAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;AACzE,KAAK;AACL;AACA,IAAI,KAAK,CAAC,QAAQ,GAAG,OAAO;AAC5B;AACA;AACA,IAAI,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;AACvE,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,KAAK,EAAE;AACjB,IAAI,MAAM,IAAI,GAAG,UAAU,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACpD,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,yBAAyB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC5E,IAAI,KAAK,OAAO,KAAK,KAAK,GAAG,OAAO;AACpC;AACA,IAAI,SAAS,IAAI,CAAC,IAAI;AACtB,MAAM,KAAK,cAAc;AACzB,QAAQ,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACrD,MAAM,KAAK,aAAa,CAAC;AACzB,MAAM,KAAK,MAAM;AACjB,QAAQ,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACpD,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE;AACzC,IAAI,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AACxE,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,GAAG,OAAO,KAAK,CAAC;AACtD,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,OAAO,KAAK,CAAC;AACtG,IAAI,OAAO,YAAY,CAAC,MAAM,CAAC;AAC/B,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE;AAC1B,MAAM,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;AAC5B,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE;AACxC,IAAI,IAAI,YAAY,CAAC;AACrB,IAAI,IAAI,UAAU,GAAG,KAAK,CAAC;AAC3B,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,aAAa,GAAG;AACvC,MAAM,YAAY,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACjD,KAAK,MAAM,KAAK,IAAI,CAAC,IAAI,KAAK,MAAM,GAAG;AACvC,MAAM,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAChE,MAAM,KAAK,CAAC,IAAI,GAAG,OAAO,KAAK,CAAC;AAChC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC1D,MAAM,UAAU,GAAG,IAAI,CAAC;AACxB,KAAK,MAAM;AACX,MAAM,OAAO,KAAK,CAAC;AACnB,KAAK;AACL,IAAI,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI;AAC5C,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9C,WAAW,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACpE,WAAW,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrD,KAAK,CAAC,CAAC;AACP;AACA;AACA,IAAI,KAAK,UAAU,GAAG;AACtB,MAAM,IAAI;AACV,QAAQ,YAAY,GAAG,MAAM,0BAA0B,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AAC9F,OAAO,CAAC,MAAM,GAAG,EAAE;AACnB,QAAQ,OAAO,KAAK,CAAC;AACrB,OAAO;AACP,KAAK;AACL;AACA,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,OAAO,KAAK,CAAC;AAC7C,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,qBAAqB,CAAC,GAAG;AACtF,MAAM,MAAM,OAAO,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;AACxG,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC9D,KAAK;AACL;AACA;AACA,IAAI,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AACnF,IAAI,gBAAgB,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AAClE,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,oBAAoB,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAC/D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,CAAC,KAAK,EAAE;AAC5B,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC;AAClC,IAAI,MAAM,OAAO,GAAG;AACpB,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM;AAC5B,MAAM,KAAK,EAAE,CAAC,CAAC,aAAa,CAAC,SAAS;AACtC,MAAM,OAAO,EAAE,EAAE;AACjB,MAAM,WAAW,EAAE,KAAK;AACxB,MAAM,eAAe,EAAE,IAAI;AAC3B,KAAK,CAAC;AACN,IAAI,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO;AAC7B,MAAM,KAAK,OAAO;AAClB,QAAQ,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;AACjD,QAAQ,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;AAChC,QAAQ,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC;AACnC,QAAQ,MAAM;AACd,MAAM,KAAK,gBAAgB;AAC3B,QAAQ,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;AAC9C,QAAQ,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;AAChC,QAAQ,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC;AACnC,QAAQ,MAAM;AACd,MAAM,KAAK,QAAQ;AACnB,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AAC/C,QAAQ,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACnG,QAAQ,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvH,QAAQ,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;AACxC,QAAQ,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC;AACnC,QAAQ,MAAM;AACd,KAAK;AACL,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACvD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE;AACvC,IAAI,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;AAC/D,IAAI,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvD,IAAI,IAAI,OAAO,CAAC;AAChB,IAAI,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,GAAG,OAAO;AACnF,IAAI,QAAQ,MAAM;AAClB,MAAM,KAAK,KAAK,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,oBAAoB,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1G,MAAM,KAAK,MAAM,EAAE,OAAO,IAAI,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACrG,MAAM,KAAK,QAAQ;AACnB,QAAQ,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,qBAAqB,CAAC,GAAG;AAC1F,UAAU,OAAO,GAAG,kBAAkB,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAChG,UAAU,KAAK,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAClE,SAAS;AACT,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;AAC/C,MAAM,KAAK,WAAW,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;AAClE,MAAM,KAAK,gBAAgB;AAC3B,QAAQ,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC;AAC1D,QAAQ,OAAO,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACpG,QAAQ,KAAK,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACzD,QAAQ,OAAO;AACf,MAAM,KAAK,sBAAsB;AACjC,QAAQ,IAAI,CAAC,4BAA4B,GAAG,CAAC,IAAI,CAAC,4BAA4B,CAAC;AAC/E,QAAQ,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;AAC7B,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,SAAS,CAAC,GAAG,IAAI,EAAE;AAC3B,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;AAC5E,IAAI,MAAM,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;AACnC,GAAG;AACH;;;;;;;;ACrsBA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,aAAa,SAAS,aAAa,CAAC;AACzD;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,OAAO,EAAE,CAAC,gBAAgB,CAAC;AACjC,MAAM,QAAQ,EAAE,oDAAoD;AACpE,MAAM,KAAK,EAAE,GAAG;AAChB,MAAM,MAAM,EAAE,GAAG;AACjB,MAAM,WAAW,EAAE,IAAI;AACvB,MAAM,SAAS,EAAE,IAAI;AACrB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,KAAK,GAAG;AACd,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AACpF,SAAS,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACnC,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,GAAG;AAClB,IAAI,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;AACjC,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;AAC7F,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE;AAC3C,MAAM,QAAQ,EAAE,MAAM,UAAU,CAAC,UAAU,CAAC,OAAO,EAAE;AACrD,QAAQ,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI;AAC9E,OAAO,CAAC;AACR,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE;AACjC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACnC,GAAG;AACH;AACA;;AC7CA;AACA;AACA;AACe,MAAM,qBAAqB,SAAS,gBAAgB,CAAC;AACpE;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AACpE,MAAM,QAAQ,EAAE,CAAC,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;AAChD,MAAM,cAAc,EAAE,IAAI;AAC1B,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAC1C,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,QAAQ,GAAG;AACjB,IAAI,OAAO,CAAC,2CAA2C,EAAE,IAAI,CAAC,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AACjG,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,GAAG,GAAG,EAAE,CAAC;AACX;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,CAAC,OAAO,EAAE;AACzB,IAAI,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC3C,IAAI,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC7C;AACA,IAAI,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW;AACtC,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACrF,KAAK,CAAC;AACN;AACA,IAAI,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7D,IAAI,OAAO,CAAC,UAAU,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AACvF;AACA,IAAI,KAAK,CAAC,MAAM,GAAG,OAAO,OAAO,CAAC;AAClC,IAAI,OAAO,CAAC,MAAM,GAAG;AACrB,MAAM,QAAQ,EAAE,MAAM;AACtB,MAAM,IAAI,EAAE,MAAM,CAAC,IAAI;AACvB,MAAM,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE;AAC9C,KAAK,CAAC;AACN;AACA,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AACvD,IAAI,OAAO,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACrE,IAAI,OAAO,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACjD,IAAI,OAAO,CAAC,aAAa,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACjE,IAAI,OAAO,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AACvD,IAAI,OAAO,CAAC,gBAAgB,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACrE,IAAI,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7E;AACA,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,CAAC,IAAI,EAAE;AACxB,IAAI,MAAM,WAAW,GAAG,EAAE,CAAC;AAC3B;AACA,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;AACtD,IAAI,KAAK,EAAE,GAAG;AACd,MAAM,WAAW,CAAC,EAAE,GAAG;AACvB,QAAQ,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;AAChC,QAAQ,GAAG,EAAE,EAAE,CAAC,WAAW;AAC3B,QAAQ,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC;AACnD,OAAO,CAAC;AACR,KAAK;AACL;AACA,IAAI,OAAO,WAAW,CAAC;AACvB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,gBAAgB,CAAC,IAAI,EAAE;AAC/B,IAAI,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;AACxF,OAAO,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK;AACjC,QAAQ,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE;AAC3D,UAAU,UAAU,EAAE,IAAI,CAAC,MAAM;AACjC,UAAU,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;AACtC,UAAU,KAAK,EAAE,IAAI;AACrB,SAAS,CAAC,CAAC;AACX,QAAQ,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC9B,OAAO,CAAC;AACR,KAAK,CAAC;AACN,IAAI,OAAO,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AAC5C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,EAAE;AACxC,IAAI,MAAM,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC;AAC5D,IAAI,MAAM,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;AACnE,IAAI,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;AACnE;AACA,IAAI,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AACrE,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;AAC1G,IAAI,KAAK,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AACxF,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,IAAI,KAAK,gBAAgB,GAAG;AAC5B,MAAM,KAAK,gBAAgB,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG;AACjD,QAAQ,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;AAC/C,QAAQ,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,QAAQ,OAAO,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACjD,OAAO,MAAM;AACb,QAAQ,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,OAAO;AACP,KAAK;AACL;AACA,IAAI,MAAM,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;AAC/C,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACrE,IAAI,KAAK,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/D,IAAI,KAAK,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;AACpF,IAAI,KAAK,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAChE;AACA,IAAI,MAAM,QAAQ,GAAG,MAAM,IAAI,IAAI,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3G;AACA,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;AACpB,IAAI,MAAM,MAAM,KAAK,IAAI,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,YAAY,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,GAAG;AACvG,MAAM,MAAM,QAAQ,GAAG,EAAE,CAAC;AAC1B,MAAM,MAAM,MAAM,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG;AACnE,QAAQ,SAAS,WAAW,CAAC,WAAW,CAAC,QAAQ;AACjD,UAAU,KAAK,WAAW;AAC1B,YAAY,KAAK,WAAW,CAAC,aAAa,CAAC,QAAQ,GAAG,SAAS;AAC/D,YAAY,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC/F,YAAY,MAAM;AAClB,SAAS;AACT,OAAO;AACP;AACA;AACA,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;AACvE,MAAM,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/G,MAAM,KAAK,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACvF,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACvG,MAAM,MAAM,UAAU,GAAG,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7D,MAAM,KAAK,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;AAClD;AACA;AACA,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,UAAU,GAAG,SAAS;AAC3G;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvB,KAAK;AACL;AACA,IAAI,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACnC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,oBAAoB,CAAC,IAAI,EAAE;AACnC,IAAI,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACpE,IAAI,KAAK,CAAC,YAAY,KAAK,YAAY,CAAC,WAAW,KAAK,MAAM,CAAC,GAAG,OAAO,IAAI,CAAC;AAC9E;AACA,IAAI,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAC/B;AACA,IAAI,KAAK,YAAY,CAAC,IAAI,KAAK,SAAS,GAAG;AAC3C,MAAM,MAAM,MAAM,GAAG,EAAE,CAAC;AACxB,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;AAC3G,MAAM,KAAK,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/E;AACA,MAAM,IAAI,WAAW,CAAC;AACtB,MAAM,MAAM,MAAM,KAAK,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG;AACjF,QAAQ,MAAM,WAAW,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AACxC,QAAQ,YAAY,CAAC,MAAM,GAAG,KAAK,CAAC;AACpC,QAAQ,OAAO,CAAC,uBAAuB,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;AAC7E,QAAQ,OAAO,CAAC,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;AACzE;AACA,QAAQ,KAAK,CAAC,WAAW,GAAG,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK;AAC/F,UAAU,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,OAAO,IAAI,CAAC;AACvC,UAAU,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/C,UAAU,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,GAAG,IAAI,CAAC,GAAG,OAAO,KAAK,CAAC;AACrE,UAAU,OAAO,IAAI,CAAC;AACtB,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;AACf;AACA,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,IAAI;AAC1E,UAAU,OAAO,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,SAAS,CAAC,CAAC;AACjG,SAAS,CAAC,CAAC,CAAC;AACZ,OAAO;AACP;AACA;AACA,MAAM,KAAK,CAAC,OAAO,GAAG;AACtB,QAAQ,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,sDAAsD,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACrH,QAAQ,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;AAClG,OAAO,CAAC;AACR,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;AAChE,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AAC3B,KAAK;AACL;AACA,SAAS,KAAK,YAAY,CAAC,IAAI,KAAK,MAAM,GAAG;AAC7C,MAAM,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAClC;AACA,MAAM,KAAK,CAAC,OAAO,GAAG,CAAC;AACvB,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,yCAAyC,CAAC,EAAE;AAClF,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,6CAA6C,CAAC,EAAE;AACtF,OAAO,CAAC,CAAC;AACT,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACtD;AACA;AACA,MAAM,MAAM,MAAM,KAAK,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG;AACvE,QAAQ,MAAM,WAAW,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AACxC,QAAQ,YAAY,CAAC,MAAM,GAAG,KAAK,CAAC;AACpC,QAAQ,OAAO,CAAC,uBAAuB,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;AAC7E,QAAQ,OAAO,CAAC,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AACtE,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;AACjE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE;AAC7E,SAAS,CAAC,CAAC;AACX,OAAO;AACP,KAAK;AACL;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,KAAK,CAAC,OAAO;AACnB,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY;AAClG,OAAO,CAAC;AACR,KAAK;AACL;AACA,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,iBAAiB,CAAC,IAAI,EAAE;AAChC,IAAI,MAAM,OAAO,GAAG,CAAC;AACrB,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;AACpD,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE;AACvD,KAAK,CAAC,CAAC;AACP;AACA,IAAI,MAAM,IAAI,GAAG;AACjB,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE;AACjC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE;AACpC,KAAK,CAAC;AACN;AACA,IAAI,MAAM,QAAQ,GAAG,MAAM,IAAI,IAAI,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3G;AACA,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;AACpB,IAAI,MAAM,MAAM,KAAK,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG;AACrE,MAAM,MAAM,QAAQ,GAAG,EAAE,CAAC;AAC1B,MAAM,MAAM,MAAM,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG;AACnE,QAAQ,SAAS,WAAW,CAAC,WAAW,CAAC,QAAQ;AACjD,UAAU,KAAK,WAAW;AAC1B,YAAY,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,GAAG,SAAS;AAChE,YAAY,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC/F,YAAY,MAAM;AAClB,SAAS;AACT,OAAO;AACP,MAAM,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS;AACvC;AACA;AACA,MAAM,MAAM,KAAK,GAAG;AACpB,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,aAAa,EAAE,EAAE;AAC1D,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAC3D,OAAO,CAAC;AACR,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvB,KAAK;AACL,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,IAAI,CAAC;AACpC;AACA,IAAI,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACnC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE;AAC3C,IAAI,MAAM,cAAc,GAAG,MAAM,IAAI,IAAI;AACzC,MAAM,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC5C,MAAM,OAAO;AACb,QAAQ,QAAQ;AAChB,QAAQ,IAAI,EAAE,QAAQ,CAAC,IAAI;AAC3B,QAAQ,WAAW,EAAE,MAAM,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE;AACpF,UAAU,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI;AACvD,SAAS,CAAC;AACV,OAAO,CAAC;AACR,KAAK,CAAC;AACN;AACA,IAAI,IAAI,QAAQ,GAAG,EAAE,CAAC;AACtB,IAAI,MAAM,MAAM,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,GAAG;AACzE,MAAM,KAAK,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,KAAK,QAAQ,GAAG,SAAS;AACxE,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;AAC5E,KAAK;AACL,IAAI,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC3C,IAAI,OAAO,QAAQ,CAAC;AACpB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,cAAc,CAAC,KAAK,EAAE;AAC9B,IAAI,MAAM,eAAe,GAAG,MAAM,IAAI,IAAI;AAC1C,MAAM,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC5C,MAAM,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AACzC,KAAK,CAAC;AACN;AACA,IAAI,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;AACrE,IAAI,OAAO,UAAU,CAAC,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;AACjD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,YAAY,CAAC,IAAI,EAAE;AAC3B,IAAI,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AACzG,IAAI,OAAO;AACX,MAAM,QAAQ,EAAE,IAAI;AACpB,MAAM,IAAI,EAAE,IAAI,CAAC,IAAI;AACrB,MAAM,WAAW,EAAE,MAAM,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE;AAC9E,QAAQ,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI;AACrD,OAAO,CAAC;AACR,MAAM,QAAQ,EAAE,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AAC7C,MAAM,KAAK,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;AAC/D,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,YAAY,CAAC,GAAG,IAAI,EAAE;AAC9B,IAAI,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC;AACnD,IAAI,IAAI,CAAC,GAAG,GAAG,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACrD,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,IAAI,EAAE;AAC1B,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAClC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI;AAC1D,MAAM,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACjE,KAAK,CAAC,CAAC;AACP,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI;AACjE,MAAM,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACvE,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,aAAa,CAAC,KAAK,EAAE;AAC7B,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;AACtE,IAAI,MAAM,YAAY,GAAG,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC;AACrD,IAAI,KAAK,CAAC,YAAY,GAAG,OAAO;AAChC,IAAI,QAAQ,SAAS,CAAC,OAAO,CAAC,QAAQ;AACtC,MAAM,KAAK,OAAO;AAClB,QAAQ,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AACxD,QAAQ,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;AAC7B,MAAM,KAAK,UAAU;AACrB,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC;AAC3D,QAAQ,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AACrC,QAAQ,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,sBAAsB,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClF,QAAQ,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;AAC7B,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,mBAAmB,CAAC,KAAK,EAAE;AAC7B,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC;AAC3D,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC7E,IAAI,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;AAC9F,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACxB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,CAAC,KAAK,EAAE;AACvB,IAAI,MAAM,IAAI,GAAG,UAAU,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACpD;AACA,IAAI,KAAK,IAAI,EAAE,IAAI,KAAK,MAAM,GAAG,OAAO,KAAK,CAAC;AAC9C,IAAI,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAC9D,IAAI,SAAS,IAAI,CAAC,IAAI;AACtB,MAAM,KAAK,OAAO;AAClB,QAAQ,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/D,QAAQ,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;AAC7B,MAAM,KAAK,UAAU;AACrB,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC;AAC3D,QAAQ,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,QAAQ,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,sBAAsB,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClF,QAAQ,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;AAC7B,MAAM;AACN,QAAQ,OAAO,KAAK,CAAC;AACrB,KAAK;AACL,GAAG;AACH;;ACpce,MAAM,aAAa,SAAS,UAAU,CAAC;AACtD;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,OAAO,EAAE,CAAC,gBAAgB,CAAC;AACjC,MAAM,QAAQ,EAAE,oDAAoD;AACpE,MAAM,KAAK,EAAE,GAAG;AAChB,MAAM,MAAM,EAAE,GAAG;AACjB,MAAM,SAAS,EAAE,IAAI;AACrB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,cAAc,GAAG;AAC1B,IAAI,UAAU,EAAE,kBAAkB;AAClC,IAAI,aAAa,EAAE,kBAAkB;AACrC,IAAI,SAAS,EAAE,kBAAkB;AACjC,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,CAAC,OAAO,EAAE;AACzB,IAAI,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC9C,IAAI,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC;AAC3D,IAAI,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,IAAI,CAAC,CAAC,CAAC;AACvH,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;AACrH,IAAI,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK;AACrD,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAClD,MAAM,KAAK,CAAC,IAAI,GAAG,OAAO,GAAG,CAAC;AAC9B,MAAM,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;AACjC,MAAM,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,MAAM,IAAI,KAAK,SAAS,CAAC,CAAC;AACjE,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,MAAM,OAAO,GAAG,CAAC;AACjB,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD;AACA,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;AACrF,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACxF;AACA,IAAI,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;AAC7F,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACjG,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,IAAI,EAAE;AAC1B,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAClC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,YAAY,CAAC,KAAK,EAAE;AAC5B,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC;AACvC,IAAI,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC;AACvE,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC;AACpE,IAAI,KAAK,CAAC,OAAO,GAAG,OAAO;AAC3B,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC;AACvB,IAAI,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;AAC1C,IAAI,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAC7D,IAAI,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACvC,GAAG;AACH;;;;;;;;;ACzEA;AACA;AACA;AACe,MAAM,mBAAmB,SAAS,aAAa,CAAC;AAC/D;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,QAAQ,EAAE,wDAAwD;AACxE,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;AACjC,IAAI,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AACxE;AACA,IAAI,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK;AAClF,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC;AAC9E,MAAM,OAAO,GAAG,CAAC;AACjB,KAAK,EAAE,EAAE,CAAC,CAAC;AACX;AACA,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE;AACvC,IAAI,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AACtD,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7D,IAAI,KAAK,CAAC,UAAU,GAAG,OAAO;AAC9B,IAAI,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAClH,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACnC,GAAG;AACH;AACA;;ACrCA;AACA;AACA;AACA;AACe,MAAM,mBAAmB,SAAS,aAAa,CAAC;AAC/D;AACA;AACA,EAAE,WAAW,cAAc,GAAG;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3D,MAAM,KAAK,EAAE,6BAA6B;AAC1C,MAAM,IAAI,EAAE,EAAE;AACd,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,GAAG;AAClB,IAAI,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AACxE,IAAI,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC;AACjH;AACA,IAAI,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;AACjC,IAAI,IAAI,CAAC,OAAO,GAAG,MAAMH,OAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAClE,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE;AAC3C,IAAI,OAAO,CAAC,KAAK,CAAC,uBAAuB;AACzC,MAAM,+EAA+E;AACrF,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE;AAChD,KAAK,CAAC;AACN,IAAI,OAAOA,OAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACvC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,WAAW,CAAC,UAAU,EAAE,OAAO,EAAE;AAC1C,IAAI,OAAO,CAAC,KAAK,CAAC,uBAAuB;AACzC,MAAM,oFAAoF;AAC1F,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE;AAChD,KAAK,CAAC;AACN,IAAI,OAAOG,WAAiB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAClD,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,IAAI,EAAE;AAC1B,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAClC;AACA,IAAI,MAAM,MAAM,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,GAAG;AACjF,MAAM,KAAK,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AAC/D,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,cAAc,CAAC,KAAK,EAAE;AAC9B,IAAI,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAChC;AACA,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,OAAO,KAAK,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACjF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,QAAQ,EAAE;AAC9B,IAAI,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;AACjE,IAAI,KAAK,CAAC,QAAQ,GAAG,OAAO;AAC5B;AACA,IAAI,MAAM,MAAM,KAAK,IAAI,QAAQ,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,GAAG;AAC/E,MAAM,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC;AACxD,KAAK;AACL,GAAG;AACH;AACA;;;;;;;;;;;;;;;AC7GA;AACA;AACA;AACe,MAAM,eAAe,SAAS,gBAAgB,CAAC;AAC9D;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,GAAG,CAAC,CAAC;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,QAAQ,CAAC,IAAI,EAAE;AACxB,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;AAC5C,IAAI,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;AAC9E,IAAI,KAAK,CAAC,aAAa,GAAG,OAAO,IAAI,CAAC;AACtC;AACA;AACA,IAAI,MAAM,YAAY,GAAG;AACzB,MAAM,CAAC,EAAE,aAAa;AACtB,MAAM,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;AACxB,MAAM,QAAQ,EAAE,MAAM,CAAC,KAAK;AAC5B,MAAM,SAAS,EAAE,CAAC;AAClB,MAAM,CAAC,EAAE,CAAC;AACV,MAAM,CAAC,EAAE,CAAC;AACV,MAAM,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK;AAChC,MAAM,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE;AAC7C,KAAK,CAAC;AACN;AACA;AACA,IAAI,SAAS,aAAa;AAC1B,MAAM,KAAK,MAAM;AACjB,QAAQ,YAAY,CAAC,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpE,QAAQ,MAAM;AACd,MAAM,KAAK,MAAM;AACjB,QAAQ,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AACvE,QAAQ,YAAY,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AAC1C,QAAQ,YAAY,CAAC,SAAS,GAAG,EAAE,CAAC;AACpC,QAAQ,MAAM;AACd,MAAM,KAAK,KAAK;AAChB,QAAQ,YAAY,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC;AACxE,QAAQ,MAAM;AAGd,KAAK;AACL;AACA;AACA,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC;AACtD,IAAI,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACnE,IAAI,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;AACtC,IAAI,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;AACvB,IAAI,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC;AAClD,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,GAAG;AAChB,IAAI,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC;AAC5C;AACA;AACA,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC1B,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACtC;AACA;AACA,IAAI,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC;AAChC;AACA;AACA,IAAI,OAAO,IAAI,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC;AACvD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,wBAAwB,CAAC,YAAY,EAAE;AACzC,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AAC5C,MAAM,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;AACxC,MAAM,IAAI,CAAC,OAAO,GAAG;AACrB,QAAQ,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;AAClD,QAAQ,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;AACpD,QAAQ,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9C,QAAQ,OAAO;AACf,QAAQ,MAAM;AACd,QAAQ,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;AAClD,OAAO,CAAC;AACR;AACA;AACA,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACtD,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACzD,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AAC1D,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AACpD,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,gBAAgB,CAAC,KAAK,EAAE;AAChC,IAAI,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AACxC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACrD,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACxD,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AACzC,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACnC,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;AAClC,IAAI,MAAM,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC;AACtC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,gBAAgB,CAAC,KAAK,EAAE;AAC1B,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;AAC5B,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC3B,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,GAAG,OAAO;AAC7C,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3D,IAAI,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,UAAU,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5E,IAAI,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACjF,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;AACnB,IAAI,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;AACzB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,CAAC,KAAK,EAAE;AAC5B,IAAI,KAAK,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;AAChD,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,EAAE,GAAG,EAAE,CAAC;AACvE,IAAI,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC;AAC5C,IAAI,MAAM,MAAM,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC3F,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AACvC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,mBAAmB,CAAC,KAAK,EAAE;AACnC,IAAI,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACvC,IAAI,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,UAAU,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5E,IAAI,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACnG,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;AAC5C,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,kBAAkB,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/G,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,kBAAkB,CAAC,KAAK,EAAE;AAClC,IAAI,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACvC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;AAC1B,GAAG;AACH;AACA;;ACxMA;AACA;AACA;AACe,MAAM,OAAO,SAAS,KAAK,CAAC;AAC3C;AACA;AACA,EAAE,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE;AAC9B,IAAI,KAAK,IAAI,CAAC,SAAS,KAAK,eAAe,GAAG,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AACxF,IAAI,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AAC7C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE;AAChC;AACA;AACA,IAAI,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;AAC/E,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;AAC7B,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;AACnC;AACA;AACA,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC;AACpD,IAAI,IAAI,UAAU,GAAG,GAAG,IAAI,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC;AACvD;AACA;AACA,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,CAAC,GAAG,UAAU,CAAC;AACnE,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,YAAY,CAAC,GAAG,UAAU,CAAC;AACvE,IAAI,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;AAC5E;AACA;AACA,IAAI,MAAM,GAAG,GAAG,QAAQ,CAAC;AACzB,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC;AACzC;AACA;AACA,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACrB,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACvD,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;AAC9C,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACzC,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;AACrB;AACA;AACA,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;AAChB,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACnF;AACA;AACA,IAAI,IAAI,OAAO,GAAG,CAAC,EAAE;AACrB,MAAM,MAAM,GAAG,GAAG,GAAG,GAAG,YAAY,CAAC;AACrC,MAAM,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACtG,KAAK;AACL;AACA;AACA,SAAS,IAAI,OAAO,GAAG,CAAC,EAAE;AAC1B,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,OAAO,IAAI,GAAG,CAAC;AACxC,MAAM,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACrG,KAAK;AACL;AACA;AACA,IAAI,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAChG;AACA;AACA,IAAI,KAAK,IAAI,GAAG,CAAC,GAAG;AACpB,MAAM,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3G,KAAK;AACL;AACA;AACA,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACjD,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC9B,GAAG;AACH;;AC3EA;AACO,SAAS,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE;AACvD,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,GAAG,OAAO,QAAQ,CAAC,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACtG;AACA;AACA,EAAE,IAAI,SAAS,GAAG,CAAC,CAAC;AACpB,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;AACxC,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC;AAC9B;AACA;AACA,EAAE,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI;AAC3B,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AAClB;AACA;AACA,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAChD,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAChD;AACA;AACA,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC9B,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;AAC/B,IAAI,SAAS,IAAI,EAAE,CAAC;AACpB;AACA;AACA,IAAI,IAAI,IAAI,KAAK,MAAM,EAAE;AACzB,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AAC9E,MAAM,IAAI,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACjD,MAAM,OAAO,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC;AACjD,KAAK;AACL;AACA;AACA,SAAS,IAAI,IAAI,KAAK,MAAM,EAAE;AAC9B,MAAM,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzE,KAAK;AACL;AACA;AACA,SAAS,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;AACvD,GAAG,CAAC,CAAC;AACL;;;;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,eAAe,SAAS,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;AACxE;AACA;AACA,EAAE,OAAO,oBAAoB,GAAG,IAAI,CAAC;AACrC;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,WAAW,CAAC;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,gBAAgB,GAAG,EAAE,CAAC;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC;AACxG;AACA;AACA;AACA;AACA,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,MAAM,MAAM,GAAG,EAAE,CAAC;AACtB,IAAI,MAAM,MAAM,QAAQ,IAAI,IAAI,CAAC,gBAAgB,GAAG;AACpD,MAAM,KAAK,CAAC,QAAQ,CAAC,YAAY,GAAG;AACpC,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,6BAA6B,EAAE,QAAQ,CAAC,kBAAkB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACzG,OAAO;AACP,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;AACxD,KAAK;AACL,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE;AAC3B,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACxB,IAAI,OAAO,CAAC,CAAC;AACb,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,WAAW,CAAC,MAAM,EAAE;AAC7B,IAAI,MAAM,MAAM,QAAQ,IAAI,IAAI,CAAC,gBAAgB,GAAG;AACpD,MAAM,QAAQ,CAAC,WAAW,GAAG,MAAM,CAAC,CAAC;AACrC,KAAK;AACL,IAAI,OAAO,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACrC,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE;AACvB,IAAI,KAAK,IAAI,CAAC,WAAW,CAAC,oBAAoB,KAAK,KAAK,GAAG,OAAO,IAAI,CAAC;AACvE,IAAI,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACnC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,KAAK,CAAC,GAAG,SAAS,EAAE;AAC7B,IAAI,MAAM,IAAI,GAAG,cAAc,IAAI,CAAC,EAAE,CAAC;AACvC,IAAI,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,kBAAkB,EAAE;AACpD,MAAM,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,EAAE,GAAG,SAAS,CAAC,CAAC;AAClE,MAAM,QAAQ,EAAE,KAAK;AACrB,MAAM,YAAY,EAAE,KAAK;AACzB,KAAK,CAAC,CAAC;AACP;AACA,IAAI,MAAM,MAAM,QAAQ,IAAI,SAAS,GAAG;AACxC;AACA,MAAM,MAAM,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC,GAAG;AACpG,QAAQ,KAAK,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS;AAClD,QAAQ,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;AACrD,OAAO;AACP;AACA;AACA,MAAM,MAAM,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,yBAAyB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,GAAG;AAC9G,QAAQ,KAAK,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,SAAS;AACtD,QAAQ,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;AAC/D,OAAO;AACP,KAAK;AACL;AACA,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;;ACxHA;AACA;AACA;AACe,MAAM,gBAAgB,CAAC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,MAAM,GAAG;AACtB,IAAI,OAAO;AACX,MAAM,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAChD,QAAQ,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;AACtF,QAAQ,KAAK,EAAE,IAAI,YAAY,CAAC,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;AACjE,OAAO,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;AACvC,MAAM,QAAQ,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACpD,QAAQ,MAAM,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACpD,UAAU,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,sBAAsB;AACvF,SAAS,CAAC;AACV,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnD,UAAU,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,qBAAqB;AACtF,SAAS,CAAC;AACV,QAAQ,GAAG,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACjD,UAAU,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,mBAAmB;AACpF,SAAS,CAAC;AACV,QAAQ,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAClD,UAAU,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,oBAAoB;AACrF,SAAS,CAAC;AACV,QAAQ,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAClD,UAAU,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,oBAAoB;AACtF,SAAS,CAAC;AACV,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,qBAAqB,CAAC,CAAC;AACjG,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;AACnF,OAAO,EAAE,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;AACnC,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,QAAQ,GAAG;AACxB,IAAI,OAAO;AACX,MAAM,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACtD,QAAQ,GAAG,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACjD,UAAU,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,qBAAqB;AAC1G,SAAS,CAAC;AACV,OAAO,EAAE,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;AACrC,MAAM,MAAM,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAClD,QAAQ,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACxD,UAAU,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,uBAAuB;AAC5G,SAAS,CAAC;AACV,QAAQ,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACxD,UAAU,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,uBAAuB;AAC5G,SAAS,CAAC;AACV,QAAQ,WAAW,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACzD,UAAU,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,wBAAwB;AAC7G,SAAS,CAAC;AACV,QAAQ,SAAS,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACvD,UAAU,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,sBAAsB;AAC3G,SAAS,CAAC;AACV,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;AAC9G,QAAQ,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;AACnG,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;AACjC,MAAM,YAAY,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACxD,QAAQ,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB;AAChF,OAAO,CAAC;AACR,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,kBAAkB,CAAC,MAAM,EAAE;AACpC,IAAI,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI,CAAC;AAC9B,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,KAAK,OAAO,IAAI,EAAE,KAAK,KAAK,QAAQ,CAAC,GAAG,OAAO;AACpE,IAAI,KAAK,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAClG,SAAS,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,GAAG;AACH;;AC3GA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,gBAAgB,SAAS,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;AACzE;AACA,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,OAAO;AACX,MAAM,QAAQ,EAAE,IAAI,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACrE,QAAQ,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;AAC1E,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC;AACjG,KAAK,CAAC;AACN,GAAG;AACH;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,cAAc,SAAS,eAAe,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;AACpF;AACA;AACA,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE;AAClD,MAAM,SAAS,EAAE,IAAI,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACtE,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnD,UAAU,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,oBAAoB;AAC1G,SAAS,CAAC;AACV,QAAQ,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,wBAAwB,CAAC,CAAC;AACtH,QAAQ,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACrD,UAAU,KAAK,EAAE,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,yBAAyB,CAAC,CAAC;AACrF,UAAU,IAAI,EAAE,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;AAC5E,SAAS,EAAE,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;AAC3C,OAAO,CAAC,EAAE;AACV,QAAQ,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,YAAY,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;AAC/F,QAAQ,eAAe,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB;AACvD,OAAO,CAAC;AACR,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE;AACtD,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC/C,IAAI,KAAK,MAAM,GAAG;AAClB,MAAM,IAAI,YAAY,GAAG,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC;AAC9E,MAAM,KAAK,OAAO,YAAY,KAAK,QAAQ,GAAG,YAAY,GAAG,QAAQ,GAAG,YAAY,CAAC,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC;AAC9G,MAAM,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC;AACnC,KAAK;AACL,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,WAAW,CAAC,MAAM,EAAE;AAC7B,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC9B,IAAI,cAAc,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AAC1C,IAAI,cAAc,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAChD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,cAAc,CAAC,MAAM,EAAE;AAChC,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,GAAG,OAAO;AACzC,IAAI,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;AACpC;AACA;AACA,IAAI,KAAK,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG;AACtC,MAAM,EAAE,CAAC,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACnC,MAAM,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,KAAK,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;AAChE,MAAM,OAAO;AACb,KAAK;AACL;AACA;AACA,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,OAAO,KAAK,QAAQ,KAAK,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,GAAG;AAC1F,MAAM,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,sBAAsB,CAAC,CAAC;AACxF,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,oBAAoB,CAAC,MAAM,EAAE;AACtC,IAAI,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,IAAI,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC;AACjF,IAAI,KAAK,CAAC,OAAO,QAAQ,KAAK,QAAQ,MAAM,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,KAAK,SAAS,CAAC,GAAG,OAAO;AACrG,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,KAAK,EAAE,CAAC;AACtC,IAAI,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAClC,IAAI,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACtG,GAAG;AACH;;ACxGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,gBAAgB,SAAS,cAAc,CAAC;AAC7D,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE;AAClD,MAAM,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnD,QAAQ,IAAI,EAAE,iBAAiB,CAAC,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;AAC/D,QAAQ,IAAI,EAAE,iBAAiB,CAAC,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;AAC/D,QAAQ,IAAI,EAAE,iBAAiB,CAAC,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;AAC/D,QAAQ,IAAI,EAAE,iBAAiB,CAAC,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;AAC/D,QAAQ,SAAS,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACvD,UAAU,KAAK,EAAE,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,yBAAyB,CAAC,CAAC;AACrF,UAAU,IAAI,EAAE,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,wBAAwB,CAAC,CAAC;AACnF,UAAU,KAAK,EAAE,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,yBAAyB,CAAC,CAAC;AACrF,SAAS,EAAE,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;AACzC,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnD,UAAU,EAAE,EAAE,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;AAClG,SAAS,EAAE,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;AACvC,OAAO,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;AAClC,MAAM,MAAM,EAAE,IAAI,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnE,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnD,UAAU,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,wBAAwB;AAChG,SAAS,CAAC;AACV,QAAQ,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;AAC9G,QAAQ,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACrD,UAAU,KAAK,EAAE,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,uBAAuB,CAAC,CAAC;AACnF,UAAU,OAAO,EAAE,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,yBAAyB,CAAC,CAAC;AACvF,SAAS,EAAE,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;AACzC,OAAO,CAAC,EAAE;AACV,QAAQ,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,kBAAkB;AAC/E,QAAQ,eAAe,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc;AACpD,OAAO,CAAC;AACR,MAAM,KAAK,EAAE,IAAI,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAClE,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnD,UAAU,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,wBAAwB;AAChG,SAAS,CAAC;AACV,QAAQ,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;AAC9G,QAAQ,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACrD,UAAU,KAAK,EAAE,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;AAC9E,SAAS,EAAE,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;AACxC,OAAO,CAAC,CAAC;AACT,MAAM,MAAM,EAAE,IAAI,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnE,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnD,UAAU,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,0BAA0B;AAC/F,SAAS,CAAC;AACV,QAAQ,QAAQ,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACtD,UAAU,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,yBAAyB;AACjE,SAAS,CAAC;AACV,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC;AACvE,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,kBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE;AAC1C,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;AAChG,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,YAAY,GAAG;AAC5B,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACtG,IAAI,OAAO,CAAC,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC;AAC/B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,WAAW,CAAC,MAAM,EAAE;AAC7B,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC9B,IAAI,gBAAgB,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAChD,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAC9C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,kBAAkB,CAAC,MAAM,EAAE;AACpC,IAAI,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;AAC3C,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,MAAM,OAAO,QAAQ,KAAK,QAAQ,CAAC,GAAG,OAAO;AAC7E,IAAI,MAAM,CAAC,UAAU,KAAK,EAAE,CAAC;AAC7B,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,EAAE,CAAC;AACpC;AACA;AACA,IAAI,MAAM,OAAO,GAAG,iCAAiC,CAAC;AACtD,IAAI,IAAI,UAAU,GAAG,KAAK,CAAC;AAC3B;AACA;AACA,IAAI,MAAM,IAAI,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG;AACzC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACnB,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACrC,MAAM,KAAK,CAAC,KAAK,GAAG,SAAS;AAC7B,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAC1C,MAAM,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,EAAE,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG;AAClF,QAAQ,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AACzE,QAAQ,UAAU,GAAG,IAAI,CAAC;AAC1B,OAAO;AACP,KAAK;AACL;AACA;AACA,IAAI,KAAK,CAAC,UAAU,IAAI,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,GAAG,QAAQ,CAAC;AAC/E,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,gBAAgB,CAAC,MAAM,EAAE;AAClC,IAAI,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;AAC7C,IAAI,KAAK,CAAC,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,OAAO;AACrE,IAAI,MAAM,CAAC,KAAK,KAAK,EAAE,CAAC;AACxB,IAAI,MAAM,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,GAAG;AACzC,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,iBAAiB,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAClG,MAAM,KAAK,CAAC,SAAS,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS;AAC3D,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG;AAC3B,QAAQ,KAAK,EAAE,CAAC;AAChB,QAAQ,OAAO,EAAE,KAAK;AACtB,QAAQ,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;AAC5B,OAAO,CAAC;AACR,KAAK;AACL,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,iBAAiB,CAAC,aAAa,CAAC,EAAE,EAAE;AAC7C,EAAE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAC7C,IAAI,MAAM,EAAE,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC;AAC1E,IAAI,MAAM,EAAE,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC;AAC1E,GAAG,EAAE,aAAa,CAAC,CAAC;AACpB;;ACxMA;AACA;AACA;AACe,MAAM,YAAY,CAAC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,MAAM,GAAG;AACtB,IAAI,OAAO;AACX,MAAM,SAAS,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACrD,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;AAC5E,QAAQ,MAAM,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;AACnF,OAAO,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;AACpC,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,QAAQ,GAAG;AACxB,IAAI,OAAO;AACX,MAAM,SAAS,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;AAChG,MAAM,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;AACtF,KAAK,CAAC;AACN,GAAG;AACH;;ACpCA;AACA;AACA;AACe,MAAM,WAAW,CAAC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,MAAM,GAAG;AACtB,IAAI,OAAO;AACX,MAAM,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;AACtG,MAAM,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;AACvD,MAAM,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;AACvD,MAAM,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;AACxD,MAAM,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;AACvD,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,QAAQ,GAAG;AACxB,IAAI,OAAO;AACX,MAAM,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;AACjE,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,eAAe,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;AAC5E,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAC/C,MAAM,GAAG,WAAW;AACpB,MAAM,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ;AAC7C,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,KAAK,EAAE,oBAAoB,EAAE,OAAO,CAAC;AACrF,OAAO;AACP,MAAM,MAAM,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;AAC3F,KAAK,EAAE,aAAa,CAAC,CAAC;AACtB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,eAAe,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,eAAe,CAAC,EAAE,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;AAChG,IAAI,OAAO,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE;AACtE,MAAM,GAAG,WAAW;AACpB,MAAM,QAAQ,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE;AACxF,QAAQ,KAAK,EAAE,4BAA4B,EAAE,IAAI,EAAE,gCAAgC,EAAE,OAAO,EAAE,eAAe;AAC7G,OAAO,CAAC;AACR,KAAK,CAAC,CAAC,CAAC;AACR,GAAG;AACH;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,aAAa,SAAS,gBAAgB,CAAC;AAC5D;AACA;AACA,EAAE,OAAO,WAAW,GAAG,WAAW,CAAC;AACnC;AACA;AACA;AACA;AACA,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE;AAClD,MAAM,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACtD,QAAQ,GAAG,gBAAgB,CAAC,MAAM;AAClC,QAAQ,GAAG,gBAAgB,CAAC,QAAQ;AACpC,QAAQ,EAAE,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAChD,UAAU,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,sBAAsB,CAAC,CAAC;AAC3G,UAAU,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,6BAA6B,CAAC,CAAC;AAC/G,UAAU,OAAO,EAAE,IAAI,YAAY,CAAC,CAAC,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,yBAAyB,CAAC,CAAC;AAC5F,SAAS,EAAE,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;AACvC,QAAQ,EAAE,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAChD,UAAU,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACrD,YAAY,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,wBAAwB;AAC/F,WAAW,CAAC;AACZ,UAAU,GAAG,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnD,YAAY,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,yBAAyB;AAClG,WAAW,CAAC;AACZ,UAAU,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,qBAAqB,CAAC,CAAC;AACtH,UAAU,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,wBAAwB,CAAC,CAAC;AACpH,UAAU,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACvD,YAAY,KAAK,EAAE,IAAI,YAAY,CAAC,CAAC,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,2BAA2B,CAAC,CAAC;AAC9F,YAAY,OAAO,EAAE,IAAI,YAAY,CAAC,CAAC,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,6BAA6B,CAAC,CAAC;AAClG,WAAW,CAAC;AACZ,SAAS,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;AACtC,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnD,UAAU,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACvD,YAAY,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,0BAA0B;AACjH,WAAW,CAAC;AACZ,UAAU,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACvD,YAAY,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,yBAAyB;AAChH,WAAW,CAAC;AACZ,SAAS,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;AACtC,QAAQ,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACxD,UAAU,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,kBAAkB;AACvG,SAAS,CAAC;AACV,QAAQ,WAAW,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC;AACvG,OAAO,EAAE,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;AACrC,MAAM,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnD,QAAQ,GAAGC,YAAa,CAAC,MAAM;AAC/B,QAAQ,GAAGA,YAAa,CAAC,QAAQ;AACjC,QAAQ,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;AACpG,QAAQ,aAAa,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,qBAAqB,CAAC,CAAC;AAC1G,QAAQ,EAAE,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAChD,UAAU,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACrD,YAAY,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,+BAA+B;AACtH,WAAW,CAAC;AACZ,SAAS,EAAE,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;AAC7C,QAAQ,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;AACpG,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,yBAAyB,CAAC,CAAC;AACtG,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;AAC3F,QAAQ,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;AACzF,QAAQ,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;AACzF,OAAO,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;AAClC,MAAM,MAAM,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAClD,QAAQ,GAAGC,WAAY,CAAC,MAAM;AAC9B,QAAQ,GAAGA,WAAY,CAAC,QAAQ;AAChC,QAAQ,UAAU,EAAEA,WAAY,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;AAClF,QAAQ,SAAS,EAAEA,WAAY,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;AAChF,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;AACjC,MAAM,SAAS,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACrD,QAAQ,OAAO,EAAE,iBAAiB,CAAC,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;AACpE,QAAQ,SAAS,EAAE,iBAAiB,CAAC,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;AACxE,QAAQ,QAAQ,EAAE,iBAAiB,CAAC,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;AACtE,OAAO,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;AACpC,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,WAAW,CAAC,MAAM,EAAE;AAC7B,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC9B,IAAI,gBAAgB,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAC3D,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,iBAAiB,CAAC,aAAa,CAAC,EAAE,EAAE;AAC7C,EAAE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAC7C,IAAI,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAC/C,MAAM,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,qBAAqB;AAC9E,KAAK,CAAC;AACN,IAAI,GAAG,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAC7C,MAAM,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,mBAAmB;AAC5E,KAAK,CAAC;AACN,IAAI,EAAE,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,yBAAyB,CAAC,CAAC;AACjG,IAAI,EAAE,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,wBAAwB,CAAC,CAAC;AAChG,IAAI,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,qBAAqB,CAAC,CAAC;AAC/F,GAAG,EAAE,aAAa,CAAC,CAAC;AACpB;;AC5JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,UAAU,SAAS,eAAe,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;AAChF;AACA,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE;AAClD,MAAM,WAAW,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACvD,QAAQ,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;AAC7E,QAAQ,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,0BAA0B,CAAC,CAAC;AACvF,OAAO,CAAC;AACR,MAAM,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ;AAC/C,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACjG,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;AACrC,OAAO;AACP,MAAM,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACtD,QAAQ,QAAQ,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACtD,UAAU,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACpD,YAAY,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,oBAAoB;AACvF,WAAW,CAAC;AACZ,UAAU,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACrD,YAAY,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,qBAAqB;AACxF,WAAW,CAAC;AACZ,UAAU,GAAG,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnD,YAAY,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,mBAAmB;AACtF,WAAW,CAAC;AACZ,SAAS,CAAC;AACV,OAAO,EAAE,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;AACrC,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,gBAAgB,GAAG;AACrB,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AACzB,IAAI,MAAM,MAAM,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG;AAC7C,MAAM,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACpC,MAAM,KAAK,CAAC,GAAG;AACf,QAAQ,KAAK,CAAC,CAAC,IAAI,KAAK,OAAO,GAAG;AAClC,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,iCAAiC,EAAE,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;AACnG,SAAS;AACT,aAAa,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACjC,OAAO;AACP,WAAW,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAC;AACjG,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,mBAAmB,GAAG;AACxB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,SAAS,CAAC,KAAK,EAAE;AACzB,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,OAAO,GAAG,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;AAC7F,IAAI,KAAK,KAAK,CAAC,IAAI,GAAG,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;AAC5G,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;AAC3C,IAAI,KAAK,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,OAAO;AAC/C,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AAC9B,MAAM,MAAM,EAAE;AACd,QAAQ,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAC7C,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,YAAY,CAAC,KAAK,EAAE;AAC5B,IAAI,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACpE;AACA;AACA,IAAI,IAAI,OAAO,CAAC;AAChB,IAAI,KAAK,OAAO,KAAK,KAAK,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;AACrD,SAAS,KAAK,KAAK,YAAY,KAAK,GAAG,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;AAC1D,SAAS,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAC;AACvG,IAAI,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,MAAM,IAAI,KAAK,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC;AACvG;AACA;AACA,IAAI,SAAS,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,OAAO,CAAC,CAAC;AAC/C,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AAC9B,MAAM,MAAM,EAAE;AACd,QAAQ,OAAO,EAAE,SAAS;AAC1B,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG;AACH;;AC5HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,OAAO,SAAS,gBAAgB,CAAC;AACtD;AACA;AACA,EAAE,OAAO,WAAW,GAAG,KAAK,CAAC;AAC7B;AACA;AACA;AACA;AACA,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE;AAClD,MAAM,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACtD,QAAQ,GAAG,gBAAgB,CAAC,MAAM;AAClC,QAAQ,GAAG,gBAAgB,CAAC,QAAQ;AACpC,QAAQ,EAAE,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAChD,UAAU,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,sBAAsB,CAAC,CAAC;AAC3G,UAAU,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,6BAA6B,CAAC,CAAC;AAC/G,UAAU,OAAO,EAAE,IAAI,YAAY,CAAC,CAAC,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,yBAAyB,CAAC,CAAC;AAC5F,SAAS,EAAE,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;AACvC,QAAQ,EAAE,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAChD,UAAU,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACrD,YAAY,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,wBAAwB;AAChG,WAAW,CAAC;AACZ,UAAU,GAAG,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnD,YAAY,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,oBAAoB;AAC5F,WAAW,CAAC;AACZ,UAAU,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,qBAAqB,CAAC,CAAC;AACtH,UAAU,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,wBAAwB,CAAC,CAAC;AACpH,UAAU,OAAO,EAAE,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;AAC/E,SAAS,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;AACtC,OAAO,EAAE,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;AACrC,MAAM,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnD,QAAQ,GAAGD,YAAa,CAAC,MAAM;AAC/B,QAAQ,GAAGA,YAAa,CAAC,QAAQ;AACjC,QAAQ,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAClD,UAAU,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;AAChH,UAAU,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,mCAAmC,CAAC,CAAC;AACpH,UAAU,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,yBAAyB,CAAC,CAAC;AACrH,UAAU,MAAM,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,kCAAkC,CAAC,CAAC;AAClH,SAAS,EAAE,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;AACzC,QAAQ,WAAW,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC;AACtG,QAAQ,EAAE,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAChD,UAAU,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,uBAAuB;AAC7F,SAAS,CAAC;AACV,QAAQ,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACxD,UAAU,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,wBAAwB;AAC7G,SAAS,CAAC;AACV,QAAQ,MAAM,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;AAC5F,OAAO,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;AAClC,MAAM,SAAS,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACrD,QAAQ,MAAM,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACpD,UAAU,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACrD,YAAY,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,uBAAuB;AAC9G,WAAW,CAAC;AACZ,UAAU,GAAG,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnD,YAAY,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,iBAAiB;AACxG,WAAW,CAAC;AACZ,SAAS,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;AACnC,QAAQ,MAAM,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACpD,UAAU,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACrD,YAAY,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,uBAAuB;AAC9G,WAAW,CAAC;AACZ,UAAU,GAAG,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnD,YAAY,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,iBAAiB;AACxG,WAAW,CAAC;AACZ,SAAS,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;AACnC,QAAQ,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAClD,UAAU,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;AAC/F,UAAU,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAC1D,YAAY,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,4BAA4B;AAC9E,WAAW,CAAC;AACZ,SAAS,EAAE,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;AAC5C,OAAO,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;AACpC,MAAM,MAAM,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAClD,QAAQ,GAAGC,WAAY,CAAC,MAAM;AAC9B,QAAQ,GAAGA,WAAY,CAAC,QAAQ;AAChC,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;AACjC,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,WAAW,CAAC,MAAM,EAAE;AAC7B,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC9B,IAAI,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACrC,IAAI,gBAAgB,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAC3D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,gBAAgB,CAAC,MAAM,EAAE;AAClC,IAAI,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;AACjC,IAAI,KAAK,OAAO,QAAQ,KAAK,QAAQ,GAAG,OAAO;AAC/C;AACA,IAAI,MAAM,CAAC,IAAI,GAAG;AAClB,MAAM,KAAK,EAAE,EAAE;AACf,MAAM,OAAO,EAAE,EAAE;AACjB,MAAM,KAAK,EAAE,EAAE;AACf,MAAM,MAAM,EAAE,EAAE;AAChB,KAAK,CAAC;AACN;AACA;AACA,IAAI,MAAM,OAAO,GAAG,4EAA4E,CAAC;AACjG,IAAI,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACjD,IAAI,KAAK,KAAK,GAAG;AACjB;AACA;AACA,MAAM,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAC5D,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK;AACpF,QAAQ,OAAO,CAAC,MAAM,KAAK,CAAC;AAC5B,cAAc,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAC7D,cAAc,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AACrE,OAAO,CAAC,CAAC;AACT,MAAM,KAAK,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AACxD,WAAW;AACX,QAAQ,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;AACrC,QAAQ,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC;AAClE,OAAO;AACP,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;AAC3E;AACA;AACA,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG;AAC/B,QAAQ,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC;AAC3F,QAAQ,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK;AACnF,UAAU,OAAO,CAAC,MAAM,KAAK,CAAC,MAAM,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AACpF,SAAS,CAAC,CAAC;AACX,QAAQ,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;AAC9D,OAAO;AACP,WAAW,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AAClC,KAAK;AACL;AACA;AACA,SAAS;AACT,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;AACnC,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;AACpC,KAAK;AACL,GAAG;AACH;;AChLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,WAAW,SAAS,cAAc,CAAC;AACxD;AACA;AACA,EAAE,OAAO,WAAW,GAAG,SAAS,CAAC;AACjC;AACA;AACA;AACA;AACA,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE;AAClD,MAAM,WAAW,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC;AACtH,MAAM,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACtD,QAAQ,GAAG,gBAAgB,CAAC,MAAM;AAClC,QAAQ,EAAE,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAChD,UAAU,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,sBAAsB,CAAC,CAAC;AAC3G,UAAU,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,6BAA6B,CAAC,CAAC;AAC/G,UAAU,OAAO,EAAE,IAAI,YAAY,CAAC,CAAC,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,yBAAyB,CAAC,CAAC;AAC5F,UAAU,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,4BAA4B,CAAC,CAAC;AAChH,SAAS,EAAE,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;AACvC,QAAQ,EAAE,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAChD,UAAU,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACrD,YAAY,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,wBAAwB;AACjG,WAAW,CAAC;AACZ,UAAU,GAAG,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnD,YAAY,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,oBAAoB;AAC7F,WAAW,CAAC;AACZ,UAAU,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,qBAAqB,CAAC,CAAC;AACtH,UAAU,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,wBAAwB,CAAC,CAAC;AACpH,UAAU,EAAE,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAClD,YAAY,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,uBAAuB;AACjF,WAAW,CAAC;AACZ,UAAU,EAAE,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAClD,YAAY,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,8BAA8B;AACxF,WAAW,CAAC;AACZ,SAAS,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;AACtC,QAAQ,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACrD,UAAU,QAAQ,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,6BAA6B,CAAC,CAAC;AAChH,UAAU,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACrD,YAAY,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,wBAAwB;AAC/G,WAAW,CAAC;AACZ,UAAU,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAC1D,YAAY,CAAC,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnD,cAAc,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,mCAAmC;AAC/F,aAAa,CAAC;AACd,YAAY,CAAC,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnD,cAAc,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,kCAAkC;AAC9F,aAAa,CAAC;AACd,YAAY,CAAC,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnD,cAAc,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,kCAAkC;AAC9F,aAAa,CAAC;AACd,WAAW,EAAE,CAAC,KAAK,EAAE,+BAA+B,CAAC,CAAC;AACtD,SAAS,EAAE,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;AAC3C,QAAQ,QAAQ,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACtD,UAAU,QAAQ,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,+BAA+B,CAAC,CAAC;AACjH,UAAU,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACrD,YAAY,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,4BAA4B;AACnH,WAAW,CAAC;AACZ,SAAS,EAAE,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;AAC7C,OAAO,EAAE,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;AACrC,MAAM,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnD,QAAQ,GAAGD,YAAa,CAAC,MAAM;AAC/B,QAAQ,MAAM,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;AAC5F,OAAO,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;AAClC,MAAM,MAAM,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAClD,QAAQ,GAAGC,WAAY,CAAC,MAAM;AAC9B,QAAQ,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;AACvG,QAAQ,EAAE,EAAEA,WAAY,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AACnG,QAAQ,EAAE,EAAEA,WAAY,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE;AAC5E,UAAU,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW;AACrE,UAAU,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa;AAC3D,SAAS,CAAC,CAAC;AACX,QAAQ,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;AACpG,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;AACjC,MAAM,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACjD,QAAQ,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,iBAAiB,EAAE,EAAE,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;AACnG,QAAQ,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,iBAAiB,EAAE,EAAE,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;AAC/G,OAAO,EAAE,CAAC,KAAK,EAAE,6BAA6B,CAAC,CAAC;AAChD,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,WAAW,CAAC,MAAM,EAAE;AAC7B,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC9B,IAAI,gBAAgB,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAC3D,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,iBAAiB,CAAC,aAAa,CAAC,EAAE,EAAE;AAC7C,EAAE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAC7C,IAAI,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,4BAA4B,CAAC,CAAC;AACpG,IAAI,QAAQ,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAClD,MAAM,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,gCAAgC;AACjH,KAAK,CAAC;AACN,GAAG,EAAE,aAAa,CAAC,CAAC;AACpB;;ACtIO,MAAMC,QAAM,GAAG;AACtB,EAAE,SAAS,EAAE,aAAa;AAC1B,EAAE,KAAK,EAAEC,UAAS;AAClB,EAAE,GAAG,EAAE,OAAO;AACd,EAAE,OAAO,EAAE,WAAW;AACtB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;ACtBD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,uBAAuB,SAAS,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;AAChF;AACA,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,OAAO;AACX,MAAM,WAAW,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACvD,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC;AAC9G,QAAQ,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,uBAAuB,CAAC,CAAC;AACjH,QAAQ,YAAY,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;AACxD,UAAU,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,+BAA+B;AAChF,SAAS,CAAC;AACV,OAAO,CAAC;AACR,MAAM,MAAM,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;AAC1F,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,WAAW,CAAC,MAAM,EAAE;AAC7B,IAAI,uBAAuB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AACnD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,cAAc,CAAC,MAAM,EAAE;AAChC,IAAI,KAAK,MAAM,CAAC,MAAM,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;AACrD,GAAG;AACH;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,cAAc,SAAS,eAAe,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;AAC3F;AACA,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE;AAClD,MAAM,WAAW,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,gBAAgB,EAAE,EAAE,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;AAChH,KAAK,CAAC,CAAC;AACP,GAAG;AACH;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,SAAS,SAAS,eAAe,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;AACtF;AACA,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE;AAClD,MAAM,UAAU,EAAE,IAAI,eAAe,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;AAClF,MAAM,MAAM,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAClD,QAAQ,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,mBAAmB;AACtG,OAAO,CAAC;AACR,MAAM,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnD,QAAQ,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe;AAC3E,QAAQ,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,uCAAuC;AAC/F,OAAO,CAAC;AACR,MAAM,WAAW,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACvD,QAAQ,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,mBAAmB;AACtG,OAAO,CAAC;AACR,MAAM,WAAW,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,gBAAgB,EAAE,EAAE,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;AAChH,MAAM,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;AACnH,MAAM,MAAM,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAClD,QAAQ,MAAM,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACpD,UAAU,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,yBAAyB;AAC9G,SAAS,CAAC;AACV,QAAQ,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU;AACnD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,KAAK,EAAE,2BAA2B,CAAC;AACrF,SAAS;AACT,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU;AACjD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,KAAK,EAAE,yBAAyB,CAAC;AACnF,SAAS;AACT,OAAO,CAAC;AACR,MAAM,YAAY,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACxD,QAAQ,WAAW,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACzD,UAAU,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,wBAAwB;AACxF,SAAS,CAAC;AACV,QAAQ,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;AACnG,OAAO,EAAE,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;AACvC,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,WAAW,CAAC,MAAM,EAAE;AAC7B,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC9B,IAAI,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AACrC,IAAI,SAAS,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;AAC/C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,cAAc,CAAC,MAAM,EAAE;AAChC,IAAI,KAAK,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,GAAG,OAAO;AACpD,IAAI,KAAK,MAAM,CAAC,MAAM,KAAK,EAAE,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAClD,SAAS,KAAK,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACtF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,wBAAwB,CAAC,MAAM,EAAE;AAC1C,IAAI,KAAK,MAAM,CAAC,YAAY,EAAE,WAAW,KAAK,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,WAAW,GAAG,MAAM,CAAC;AAC5F,IAAI,KAAK,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ,GAAG,OAAO;AAC1D,IAAI,MAAM,CAAC,YAAY,GAAG;AAC1B,MAAM,WAAW,EAAE,MAAM,CAAC,YAAY;AACtC,MAAM,OAAO,EAAE,EAAE;AACjB,KAAK,CAAC;AACN,GAAG;AACH;;AC9FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,cAAc,SAAS,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;AACvE;AACA,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,OAAO;AACX,MAAM,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnD,QAAQ,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,uBAAuB;AACrF,OAAO,CAAC;AACR,MAAM,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACtD,QAAQ,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,sBAAsB;AACpF,OAAO,CAAC;AACR,MAAM,WAAW,EAAE,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,uBAAuB,CAAC,CAAC;AACrF,MAAM,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;AAClG,MAAM,QAAQ,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACpD,QAAQ,SAAS,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACvD,UAAU,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,yBAAyB;AACxG,SAAS,CAAC;AACV,QAAQ,MAAM,EAAE,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,2BAA2B,CAAC,CAAC;AACtF,OAAO,CAAC;AACR,MAAM,MAAM,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAClD,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU;AACpF,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC/D,SAAS,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC5B,QAAQ,SAAS,EAAE,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,uBAAuB,CAAC,CAAC;AACrF,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;AACjC,MAAM,OAAO,EAAE,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;AAC9E,MAAM,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAChD,QAAQ,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;AAC3G,QAAQ,EAAE,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAChD,UAAU,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,sBAAsB;AAC9E,SAAS,CAAC;AACV,QAAQ,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACrD,UAAU,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,sBAAsB;AACvF,SAAS,CAAC;AACV,OAAO,EAAE,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;AACtC,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,WAAW,CAAC,MAAM,EAAE;AAC7B,IAAI,cAAc,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AAC3C,IAAI,cAAc,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC/C,IAAI,cAAc,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAC5C,IAAI,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AACxC,IAAI,cAAc,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AAC1C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,eAAe,CAAC,MAAM,EAAE;AACjC,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC5E,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,mBAAmB,CAAC,MAAM,EAAE;AACrC,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC;AAC/E,SAAS,KAAK,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,GAAG,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;AAC1G,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,gBAAgB,CAAC,MAAM,EAAE;AAClC,IAAI,KAAK,EAAE,UAAU,IAAI,MAAM,CAAC,GAAG,OAAO;AAC1C,IAAI,KAAK,CAAC,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,MAAM,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,GAAG;AACjG,MAAM,SAAS,EAAE,IAAI;AACrB,MAAM,MAAM,EAAE,EAAE;AAChB,KAAK,CAAC;AACN,IAAI,KAAK,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE,CAAC;AACvE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,YAAY,CAAC,MAAM,EAAE;AAC9B,IAAI,KAAK,EAAE,MAAM,IAAI,MAAM,CAAC,GAAG,OAAO;AACtC,IAAI,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;AACvB,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,OAAO,KAAK,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACpE,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;AACjE,IAAI,KAAK,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,QAAQ,GAAG;AAC9C,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;AACzD,WAAW,KAAK,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC3F,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,cAAc,CAAC,MAAM,EAAE;AAChC,IAAI,KAAK,EAAE,QAAQ,IAAI,MAAM,CAAC,GAAG,OAAO;AACxC,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,CAAC;AACzB,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE,CAAC;AAC/B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,UAAU,GAAG;AACnB,IAAI,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,eAAe,IAAI;AACnD,MAAM,IAAI,EAAE,KAAK;AACjB,MAAM,IAAI,EAAE,KAAK;AACjB,MAAM,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,YAAY,IAAI,KAAK;AACvE,MAAM,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,YAAY,IAAI,KAAK;AACvE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;AAC/B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,eAAe,GAAG;AACxB,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,iBAAiB,GAAG;AAC1B,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,OAAO,IAAI,CAAC;AACvC,IAAI,IAAI,aAAa,GAAG,QAAQ,CAAC;AACjC,IAAI,KAAK,IAAI,CAAC,OAAO,EAAE,IAAI,KAAK,MAAM,GAAG;AACzC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC;AAC/G,KAAK;AACL,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,QAAQ,EAAE,IAAI,CAAC,sBAAsB,EAAE,aAAa,CAAC,CAAC;AAChH,IAAI,OAAO,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,EAAE,CAAC;AACjD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,sBAAsB,GAAG;AAC/B,IAAI,OAAO,QAAQ,CAAC;AACpB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,eAAe,GAAG;AACxB,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,KAAK,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;AAC1D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,SAAS,GAAG;AAClB,IAAI,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACtE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,SAAS,GAAG;AAClB,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC7D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,OAAO,GAAG;AAChB,IAAI,OAAO,IAAI,CAAC,UAAU,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACzE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,SAAS,GAAG;AAClB,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,KAAK,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC;AAC1D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,WAAW,GAAG;AACpB,IAAI,OAAO,IAAI,CAAC,UAAU,IAAI,CAAC,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAC1E,GAAG;AACH;AACA;;AC5PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,uBAAuB,SAAS,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;AAChF;AACA,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,OAAO;AACX,MAAM,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACtD,QAAQ,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,0BAA0B,CAAC,CAAC;AACnH,QAAQ,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,0BAA0B,CAAC,CAAC;AACtG,QAAQ,SAAS,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,+BAA+B,CAAC,CAAC;AAChH,OAAO,EAAE,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;AACzC,MAAM,QAAQ,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACpD,QAAQ,KAAK,EAAE,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC;AAC/F,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;AAC9G,OAAO,EAAE,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;AACnC,MAAM,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACjD,QAAQ,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,aAAa;AAC5E,OAAO,CAAC;AACR,MAAM,MAAM,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;AAC3E,MAAM,MAAM,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAClD,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC;AACxG,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC;AACxG,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC;AAC7G,QAAQ,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;AAC3G,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;AACjC,MAAM,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACjD,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC;AACxG,QAAQ,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;AACrG,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;AAC5G,OAAO,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;AAChC,MAAM,IAAI,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;AACpE,MAAM,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnD,QAAQ,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC;AAC5G,QAAQ,MAAM,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACpD,UAAU,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,qBAAqB;AACrF,SAAS,CAAC;AACV,QAAQ,MAAM,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,qBAAqB,CAAC,CAAC;AAClH,OAAO,EAAE,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;AACvC,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,aAAa,GAAG,MAAM,aAAa,SAAS,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACrF,IAAI,WAAW,CAAC,WAAW,EAAE,OAAO,EAAE;AACtC,MAAM,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC;AACxC,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnD,UAAU,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,4BAA4B;AACpF,SAAS,CAAC;AACV,QAAQ,GAAG,EAAE,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,sBAAsB,CAAC,CAAC;AACnG,QAAQ,GAAG,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACjD,UAAU,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,sBAAsB;AACpG,SAAS,CAAC;AACV,QAAQ,QAAQ,EAAE,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,uBAAuB,CAAC,CAAC;AACpF,OAAO,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;AAChC,KAAK;AACL,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,WAAW,CAAC,MAAM,EAAE;AAC7B,IAAI,uBAAuB,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAC1D,IAAI,uBAAuB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AACnD,IAAI,uBAAuB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AACpD,IAAI,uBAAuB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AACjD,IAAI,uBAAuB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AACpD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,qBAAqB,CAAC,MAAM,EAAE;AACvC,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;AAC1E,SAAS,KAAK,OAAO,MAAM,CAAC,IAAI,EAAE,GAAG,KAAK,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;AAClG,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;AACtF,SAAS,KAAK,OAAO,MAAM,CAAC,QAAQ,EAAE,KAAK,KAAK,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;AACpH,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,cAAc,CAAC,MAAM,EAAE;AAChC,IAAI,KAAK,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,OAAO;AACvC,IAAI,MAAM,CAAC,KAAK,KAAK,EAAE,CAAC;AACxB,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;AAC/D,IAAI,KAAK,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,GAAG;AACjD,MAAM,KAAK,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;AAC/D,WAAW,KAAK,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACpG,KAAK;AACL,IAAI,KAAK,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,QAAQ,GAAG,OAAO;AACzD,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,GAAG;AACrC,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;AAChC,MAAM,OAAO;AACb,KAAK;AACL,IAAI,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACxD,IAAI,KAAK,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AACtE,IAAI,KAAK,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AACnE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,eAAe,CAAC,MAAM,EAAE;AACjC,IAAI,KAAK,EAAE,QAAQ,IAAI,MAAM,CAAC,GAAG,OAAO;AACxC,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,CAAC;AACzB,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AACjE,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;AACjE,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;AAC/D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,YAAY,CAAC,MAAM,EAAE;AAC9B,IAAI,KAAK,EAAE,MAAM,IAAI,MAAM,CAAC,GAAG,OAAO;AACtC,IAAI,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;AACvB,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AACpC,IAAI,KAAK,OAAO,KAAK,KAAK,QAAQ,GAAG;AACrC,MAAM,KAAK,KAAK,KAAK,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AACnD,WAAW,KAAK,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxF,KAAK;AACL,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACxE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,eAAe,CAAC,MAAM,EAAE;AACjC,IAAI,KAAK,EAAE,SAAS,IAAI,MAAM,CAAC,GAAG,OAAO;AACzC,IAAI,MAAM,CAAC,OAAO,KAAK,EAAE,CAAC;AAC1B,IAAI,KAAK,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;AACjE,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;AACzC,IAAI,KAAK,OAAO,MAAM,KAAK,QAAQ,GAAG;AACtC,MAAM,KAAK,MAAM,KAAK,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;AACxD,WAAW,KAAK,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AAClF,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,6BAA6B,GAAG;AACtC,IAAI,OAAO;AACX,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AAC1G,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM;AAC/B,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK;AAC9B,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ;AACjC,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,aAAa,GAAG;AACtB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC;AAC5D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,mBAAmB,GAAG;AAC5B,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC;AAClE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,cAAc,GAAG;AACvB,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAClD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,iBAAiB,GAAG;AAC1B,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC;AACjE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,cAAc,GAAG;AACvB,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC;AAC1D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,eAAe,GAAG;AACxB,IAAI,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC1D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,SAAS,GAAG;AAClB,IAAI,OAAO,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAClD,GAAG;AACH;AACA;;ACxRA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,sBAAsB,SAAS,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;AAC/E;AACA,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,OAAO;AACX,MAAM,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACtD,QAAQ,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,kBAAkB;AAC5G,OAAO,CAAC;AACR,MAAM,QAAQ,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC;AAC/F,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,WAAW,CAAC,MAAM,EAAE;AAC7B,IAAI,sBAAsB,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;AACtD,IAAI,sBAAsB,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACpD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,kBAAkB,CAAC,MAAM,EAAE;AACpC,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,MAAM,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,GAAG,OAAO;AACtF,IAAI,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC;AAClH,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,gBAAgB,CAAC,MAAM,EAAE;AAClC,IAAI,KAAK,EAAE,UAAU,IAAI,MAAM,CAAC,GAAG,OAAO;AAC1C,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK,IAAI,MAAM,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,GAAG,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;AACjG,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,4BAA4B,GAAG;AACrC,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC;AACtD,IAAI,OAAO;AACX,MAAM,IAAI,CAAC,UAAU,KAAK,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI;AACpE,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,GAAG,gBAAgB,GAAG,kBAAkB,CAAC;AAC/E,MAAM,CAAC,YAAY,IAAI,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI;AAC7F,KAAK,CAAC;AACN,GAAG;AACH;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,oBAAoB,SAAS,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;AAC7E;AACA,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,OAAO;AACX,MAAM,QAAQ,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACpD,QAAQ,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,gBAAgB;AACnG,OAAO,CAAC;AACR,MAAM,MAAM,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAClD,QAAQ,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,cAAc;AAClF,OAAO,CAAC;AACR,MAAM,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACjD,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnD,UAAU,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,aAAa;AACnF,SAAS,CAAC;AACV,QAAQ,YAAY,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAC1D,UAAU,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,gBAAgB;AAC9E,SAAS,CAAC;AACV,OAAO,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;AAChC,MAAM,MAAM,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;AACvG,MAAM,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;AAClH,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,WAAW,CAAC,MAAM,EAAE;AAC7B,IAAI,oBAAoB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AAC/C,IAAI,oBAAoB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AAChD,IAAI,oBAAoB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AAChD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,aAAa,CAAC,MAAM,EAAE;AAC/B,IAAI,KAAK,EAAE,OAAO,IAAI,MAAM,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,QAAQ,GAAG,OAAO;AAC3F,IAAI,MAAM,CAAC,KAAK,GAAG;AACnB,MAAM,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;AACtE,MAAM,YAAY,EAAE,IAAI;AACxB,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,cAAc,CAAC,MAAM,EAAE;AAChC,IAAI,KAAK,EAAE,QAAQ,IAAI,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,OAAO;AAClF,IAAI,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG;AACjE,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE;AAChF,KAAK,IAAI,EAAE,CAAC;AACZ,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,cAAc,CAAC,MAAM,EAAE;AAChC,IAAI,KAAK,EAAE,QAAQ,IAAI,MAAM,CAAC,GAAG,OAAO;AACxC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,MAAM,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AACvF,GAAG;AACH;;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,cAAc,SAAS,eAAe,CAAC,KAAK;AACjE,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,cAAc;AAChH,CAAC,CAAC;AACF;AACA,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE;AAClD,MAAM,cAAc,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAC1D,QAAQ,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,0BAA0B;AAC5E,OAAO,CAAC;AACR,MAAM,IAAI,EAAE,IAAI,uBAAuB,CAAC,aAAa,CAAC;AACtD,QAAQ,WAAW,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,wBAAwB,CAAC,CAAC;AAC5G,OAAO,EAAE,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;AACtC,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,cAAc,GAAG;AACvB,IAAI,OAAO;AACX,MAAM,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC;AACvD,MAAM,IAAI,CAAC,cAAc,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI;AAC/G,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,eAAe,GAAG;AACxB,IAAI,KAAK,IAAI,CAAC,cAAc,KAAK,QAAQ,GAAG,OAAO,IAAI,CAAC;AACxD,IAAI,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,YAAY,IAAI,KAAK,CAAC;AACvE,GAAG;AACH;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,aAAa,SAAS,eAAe,CAAC,KAAK;AAChE,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,gBAAgB;AACzF,CAAC,CAAC;AACF;AACA,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE;AAClD,MAAM,QAAQ,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACpD,QAAQ,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAClD,UAAU,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,iCAAiC;AACnG,SAAS,CAAC;AACV,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnD,UAAU,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,gCAAgC;AACzE,SAAS,CAAC;AACV,QAAQ,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,+BAA+B,CAAC,CAAC;AAClH,OAAO,EAAE,CAAC,KAAK,EAAE,6BAA6B,CAAC,CAAC;AAChD,KAAK,CAAC,CAAC;AACP,GAAG;AACH;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,iBAAiB,SAAS,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;AAC1E;AACA,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,OAAO;AACX,MAAM,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACjD,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnD,UAAU,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,kBAAkB;AAC1E,SAAS,CAAC;AACV,OAAO,EAAE,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;AACrC,MAAM,EAAE,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAC9C,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnD,UAAU,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,wBAAwB;AAChF,SAAS,CAAC;AACV,QAAQ,GAAG,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACjD,UAAU,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,oBAAoB;AAC5E,SAAS,CAAC;AACV,QAAQ,EAAE,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAChD,UAAU,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,uBAAuB;AAC/E,SAAS,CAAC;AACV,QAAQ,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,wBAAwB,CAAC,CAAC;AAC1G,OAAO,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;AACpC,KAAK,CAAC;AACN,GAAG;AACH;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,aAAa,SAAS,eAAe,CAAC,KAAK;AAChE,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,sBAAsB;AACvE,EAAE,uBAAuB,EAAE,cAAc,EAAE,iBAAiB;AAC5D,CAAC,CAAC;AACF;AACA,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE;AAClD,MAAM,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACjD,QAAQ,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAClD,UAAU,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,yBAAyB;AAC5E,SAAS,CAAC;AACV,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;AACtH,QAAQ,GAAG,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,2BAA2B,CAAC,CAAC;AACrH,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACrB,MAAM,QAAQ,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,yBAAyB,CAAC,CAAC;AACvG,MAAM,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACjD,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;AAClG,QAAQ,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,uBAAuB,CAAC,CAAC;AACzG,OAAO,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;AAChC,MAAM,QAAQ,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACpD,QAAQ,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,uBAAuB;AAC7E,OAAO,CAAC;AACR,MAAM,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,iCAAiC,CAAC,CAAC;AAC/G,MAAM,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;AAClH,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,WAAW,CAAC,MAAM,EAAE;AAC7B,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC9B,IAAI,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AACxC,IAAI,aAAa,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAC3C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,aAAa,CAAC,MAAM,EAAE;AAC/B,IAAI,KAAK,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,OAAO;AACvC,IAAI,MAAM,CAAC,KAAK,KAAK,EAAE,CAAC;AACxB,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC;AACvE,IAAI,MAAM,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI;AAClD,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;AACnC,MAAM,KAAK,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC;AAChD,WAAW,KAAK,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AACvE,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,gBAAgB,CAAC,MAAM,EAAE;AAClC,IAAI,KAAK,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,GAAG,OAAO;AACtD,IAAI,KAAK,MAAM,CAAC,QAAQ,KAAK,EAAE,GAAG,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;AACzD,IAAI,KAAK,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACvF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,cAAc,GAAG;AACvB,IAAI,OAAO;AACX,MAAM,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAClD,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,IAAI;AACvC,MAAM,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,2BAA2B,CAAC,GAAG,IAAI;AAC3E,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,OAAO,GAAG;AAChB,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;AACtD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,WAAW,GAAG;AACpB,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC;AACzC,GAAG;AACH;AACA;;ACjIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,QAAQ,SAAS,eAAe,CAAC,KAAK;AAC3D,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,cAAc;AAClE,CAAC,CAAC;AACF;AACA,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE;AAClD,MAAM,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAChD,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;AACzF,QAAQ,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;AAC9F,OAAO,EAAE,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;AAC1C,MAAM,YAAY,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;AACtH,MAAM,QAAQ,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACpD,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnD,UAAU,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,yBAAyB;AACjF,SAAS,CAAC;AACV,QAAQ,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;AAC/F,OAAO,EAAE,CAAC,KAAK,EAAE,6BAA6B,CAAC,CAAC;AAChD,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,WAAW,CAAC,MAAM,EAAE;AAC7B,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC9B,IAAI,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAClC,IAAI,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACtC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,YAAY,CAAC,MAAM,EAAE;AAC9B,IAAI,KAAK,EAAE,MAAM,IAAI,MAAM,CAAC,GAAG,OAAO;AACtC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;AAC/D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,gBAAgB,CAAC,MAAM,EAAE;AAClC,IAAI,KAAK,EAAE,UAAU,IAAI,MAAM,CAAC,GAAG,OAAO;AAC1C,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;AACxC,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC;AACxE,SAAS,KAAK,CAAC,OAAO,KAAK,KAAK,QAAQ,KAAK,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAC7G,IAAI,KAAK,MAAM,CAAC,QAAQ,CAAC,OAAO,KAAK,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;AAC5E,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,cAAc,GAAG;AACvB,IAAI,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC/B,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,cAAc,GAAG;AACvB,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,KAAK,CAAC,cAAc,CAAC;AACzD,GAAG;AACH;;ACzFA;AACA;AACA;AACA;AACA;AACe,MAAM,QAAQ,SAAS,eAAe,CAAC,KAAK,CAAC,uBAAuB,EAAE,oBAAoB,CAAC,CAAC;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,cAAc,GAAG;AACvB,IAAI,OAAO;AACX,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AACrD,MAAM,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC,GAAG,IAAI;AAC1F,KAAK,CAAC;AACN,GAAG;AACH;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,SAAS,SAAS,eAAe,CAAC,KAAK;AAC5D,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,cAAc;AAClE,CAAC,CAAC;AACF;AACA,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE;AAClD,MAAM,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACjD,QAAQ,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,kBAAkB;AACpF,OAAO,CAAC;AACR,MAAM,MAAM,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC;AAC/F,MAAM,UAAU,EAAE,IAAI,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE;AAC3E,QAAQ,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,uBAAuB;AACtD,QAAQ,WAAW,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC3G,OAAO,CAAC;AACR,MAAM,SAAS,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACrD,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,iCAAiC,CAAC,CAAC;AAC9G,QAAQ,QAAQ,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,8BAA8B,CAAC,CAAC;AAC/G,QAAQ,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAClD,UAAU,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,0BAA0B;AAC/E,SAAS,CAAC;AACV,QAAQ,MAAM,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACpD,UAAU,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,4BAA4B;AACjF,SAAS,CAAC;AACV,OAAO,EAAE,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;AACzC,MAAM,WAAW,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACvD,QAAQ,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAClD,UAAU,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,4BAA4B;AAClF,SAAS,CAAC;AACV,QAAQ,QAAQ,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,qBAAqB,CAAC,CAAC;AACtG,OAAO,EAAE,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;AAC3C,MAAM,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnD,QAAQ,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC;AAChH,QAAQ,OAAO,EAAE,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,sBAAsB,CAAC,CAAC;AACjH,OAAO,EAAE,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;AACvC,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,WAAW,CAAC,MAAM,EAAE;AAC7B,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC9B,IAAI,SAAS,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAC5C,IAAI,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AACtC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,qBAAqB,CAAC,MAAM,EAAE;AACvC,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,GAAG,OAAO;AACrC,IAAI,MAAM,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG;AACpE,MAAM,KAAK,OAAO,KAAK,KAAK,SAAS,GAAG,OAAO,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACtE,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,eAAe,CAAC,MAAM,EAAE;AACjC,IAAI,KAAK,EAAE,SAAS,IAAI,MAAM,CAAC,GAAG,OAAO;AACzC,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,EAAE,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC;AACvG,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,cAAc,GAAG;AACvB,IAAI,OAAO;AACX,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK;AAC9B,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACpH,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI;AAC3C,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,eAAe,GAAG;AACxB,IAAI,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,YAAY,IAAI,KAAK,CAAC;AACvE,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,sBAAsB,GAAG;AAC/B,IAAI,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,sBAAsB,IAAI,QAAQ,CAAC;AAC/E,GAAG;AACH;AACA;;AClIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,YAAY,SAAS,eAAe,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;AACzF;AACA,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE;AAClD,MAAM,UAAU,EAAE,IAAI,eAAe,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;AAClF,MAAM,eAAe,EAAE,IAAI,eAAe,CAAC;AAC3C,QAAQ,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,uBAAuB,EAAE,IAAI,EAAE,2BAA2B;AACzF,OAAO,CAAC;AACR,MAAM,WAAW,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,gBAAgB,EAAE,EAAE,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;AAChH,MAAM,YAAY,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACxD,QAAQ,WAAW,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACzD,UAAU,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,wBAAwB;AACxF,SAAS,CAAC;AACV,QAAQ,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;AACnG,OAAO,EAAE,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;AACvC,KAAK,CAAC,CAAC;AACP,GAAG;AACH;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,QAAQ,SAAS,eAAe,CAAC,KAAK;AAC3D,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,sBAAsB;AACvE,CAAC,CAAC;AACF;AACA,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE;AAClD,MAAM,QAAQ,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;AAClG,MAAM,QAAQ,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;AAClG,MAAM,OAAO,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnD,QAAQ,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,2BAA2B;AACvE,OAAO,CAAC;AACR,MAAM,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;AAClG,MAAM,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACtD,QAAQ,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,2BAA2B;AAC/F,OAAO,CAAC;AACR,MAAM,KAAK,EAAE,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,qBAAqB,CAAC,CAAC;AAC7E,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,WAAW,CAAC,MAAM,EAAE;AAC7B,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC9B,IAAI,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AACrC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,eAAe,CAAC,MAAM,EAAE;AACjC,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC5E,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,cAAc,GAAG;AACvB,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;AACzD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,UAAU,GAAG;AACnB,IAAI,OAAO,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC;AACjC,GAAG;AACH;;ACtEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,UAAU,SAAS,eAAe,CAAC,KAAK;AAC7D,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,sBAAsB;AACvE,EAAE,uBAAuB,EAAE,cAAc,EAAE,iBAAiB;AAC5D,CAAC,CAAC;AACF;AACA,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE;AAClD,MAAM,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACtD,QAAQ,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,sBAAsB;AACzE,OAAO,CAAC;AACR,MAAM,QAAQ,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,sBAAsB,CAAC,CAAC;AACjH,MAAM,UAAU,EAAE,IAAI,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE;AAC3E,QAAQ,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,EAAE,4BAA4B;AACvG,OAAO,CAAC;AACR,MAAM,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;AAClH,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,WAAW,CAAC,MAAM,EAAE;AAC7B,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC9B,IAAI,UAAU,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;AAC9C,IAAI,UAAU,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAC1C,IAAI,UAAU,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAC1C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,sBAAsB,CAAC,MAAM,EAAE;AACxC,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,GAAG,OAAO;AACrC,IAAI,MAAM,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG;AACpE,MAAM,KAAK,OAAO,KAAK,KAAK,SAAS,GAAG,OAAO,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACtE,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,kBAAkB,CAAC,MAAM,EAAE;AACpC,IAAI,KAAK,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,GAAG,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAChG,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,kBAAkB,CAAC,MAAM,EAAE;AACpC,IAAI,KAAK,MAAM,CAAC,UAAU,KAAK,IAAI,GAAG,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;AACpE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,cAAc,GAAG;AACvB,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AACvD,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,eAAe,GAAG;AACxB,IAAI,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,OAAO,KAAK,CAAC;AAC1E;AACA,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC;AAC3D,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,SAAS,GAAG;AAC5C,MAAM,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,SAAS,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC;AACpF,KAAK;AACL;AACA,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,sBAAsB,GAAG;AAC/B,IAAI,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,uBAAuB,IAAI,QAAQ,CAAC;AAChF,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,WAAW,GAAG;AACpB,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,OAAO,CAAC;AACvC,GAAG;AACH;;ACjGO,MAAMD,QAAM,GAAG;AACtB,EAAE,UAAU,EAAE,cAAc;AAC5B,EAAE,QAAQ,EAAE,aAAa;AACzB,EAAE,KAAK,EAAE,SAAS;AAClB,EAAE,UAAU,EAAE,cAAc;AAC5B,EAAE,SAAS,EAAE,aAAa;AAC1B,EAAE,IAAI,EAAE,QAAQ;AAChB,EAAE,IAAI,EAAE,QAAQ;AAChB,EAAE,KAAK,EAAE,SAAS;AAClB,EAAE,QAAQ,EAAE,YAAY;AACxB,EAAE,IAAI,EAAE,QAAQ;AAChB,EAAE,MAAM,EAAE,UAAU;AACpB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;AC5CD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,oBAAoB,SAAS,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;AAC7E,EAAE,OAAO,YAAY,GAAG;AACxB,IAAI,OAAO;AACX,MAAM,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,mCAAmC,CAAC,CAAC;AAC7G,MAAM,WAAW,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACvD,QAAQ,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;AACjD,UAAU,KAAK,EAAE,0CAA0C;AAC3D,UAAU,IAAI,EAAE,8CAA8C;AAC9D,SAAS,CAAC;AACV,QAAQ,mBAAmB,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;AAC/D,UAAU,KAAK,EAAE,kDAAkD;AACnE,UAAU,IAAI,EAAE,sDAAsD;AACtE,SAAS,CAAC;AACV,QAAQ,gBAAgB,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;AAC5D,UAAU,KAAK,EAAE,+CAA+C;AAChE,UAAU,IAAI,EAAE,mDAAmD;AACnE,SAAS,CAAC;AACV,QAAQ,mBAAmB,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;AAC/D,UAAU,KAAK,EAAE,kDAAkD;AACnE,UAAU,IAAI,EAAE,sDAAsD;AACtE,SAAS,CAAC;AACV,QAAQ,QAAQ,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;AACpD,UAAU,KAAK,EAAE,kDAAkD;AACnE,UAAU,IAAI,EAAE,sDAAsD;AACtE,SAAS,CAAC;AACV,OAAO,CAAC;AACR,MAAM,cAAc,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAC1D,QAAQ,KAAK,EAAE,6CAA6C;AAC5D,OAAO,CAAC;AACR,MAAM,aAAa,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE;AAC7F,QAAQ,KAAK,EAAE,4CAA4C;AAC3D,OAAO,CAAC;AACR,KAAK,CAAC;AACN,GAAG;AACH;;ACzCO,MAAM,MAAM,GAAG;AACtB,EAAE,KAAK,EAAE,oBAAoB;AAC7B,CAAC;;;;;;;;;;;;;;;;;;;;;;;;ACRD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,OAAO,SAAS,IAAI,CAAC;AAC1C,EAAE,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;AACtC,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAClC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC9D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,QAAQ,CAAC,IAAI,EAAE;AACxB,IAAI,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AACpE,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACjC,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,sBAAsB,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,EAAE,EAAE;AAC9F,IAAI,MAAM,IAAI,GAAG,WAAW,KAAK,KAAK,EAAE,QAAQ,IAAI,KAAK,EAAE,MAAM,IAAI,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,OAAO,CAAC,CAAC;AACvG,IAAI,IAAI,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC7C,IAAI,KAAK,SAAS,IAAI,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;AAC9E,SAAS,KAAK,YAAY,IAAI,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;AAC5G,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AACzC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,QAAQ,GAAG;AACpB,IAAI,MAAM,EAAE,CAAC;AACb,IAAI,SAAS,EAAE,CAAC;AAChB,IAAI,YAAY,EAAE,CAAC,CAAC;AACpB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,mBAAmB,GAAG,8CAA8C,CAAC;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,YAAY,GAAG;AACrB,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;AAC1E,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,YAAY,GAAG;AACrB,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,KAAK,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;AACrE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,eAAe,GAAG;AACxB,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,KAAK,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;AACxE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,UAAU,GAAG;AACnB,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,OAAO,SAAS,CAAC;AACnE,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,KAAK,CAAC;AACjE,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;AACvD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,QAAQ,GAAG;AACjB,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,OAAO,SAAS,CAAC;AACnE,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,KAAK,CAAC;AAC/D,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AACrD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,GAAG;AACvB,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,GAAG,OAAO;AACrC;AACA,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,IAAI,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC;AACvB;AACA;AACA,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjE;AACA;AACA,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnE;AACA;AACA,IAAI,KAAK,IAAI,CAAC,YAAY,GAAG;AAC7B,MAAM,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,CAAC,GAAG,CAAC,CAAC;AACtD,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,MAAM,GAAG,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;AACnC,KAAK;AACL,SAAS,KAAK,IAAI,CAAC,eAAe,GAAG;AACrC,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;AACrB,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,MAAM,GAAG,CAAC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;AACtC,KAAK;AACL,SAAS,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;AACxB;AACA;AACA,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;AAC9E,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AACxE,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AAClF;AACA;AACA,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5D;AACA;AACA,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;AACnC,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,SAAS,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE;AAC9C;AACA;AACA,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AAC/D;AACA;AACA,IAAI,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AACnE,IAAI,KAAK,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,MAAM,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;AACjG,SAAS,KAAK,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,MAAM,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5G;AACA;AACA,IAAI,KAAK,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG;AAC5D,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/B,MAAM,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;AACxE,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3E,MAAM,KAAK,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AACvG,KAAK;AACL;AACA;AACA,IAAI,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;AACjE,IAAI,OAAO,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AACjD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,eAAe,CAAC,CAAC,KAAK,EAAE,eAAe,EAAE,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,KAAK;AAC5G,IAAI,cAAc,EAAE,QAAQ,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE;AAC9C;AACA;AACA,IAAI,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,mBAAmB,EAAE;AAC3F,MAAM,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;AACzC,MAAM,eAAe;AACrB,MAAM,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS;AACtC,MAAM,cAAc;AACpB,MAAM,cAAc;AACpB,MAAM,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS;AACvC,KAAK,CAAC,CAAC;AACP;AACA,IAAI,IAAI,aAAa,GAAG,QAAQ,CAAC;AACjC,IAAI,SAAS,aAAa;AAC1B,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,aAAa,GAAG,WAAW,CAAC,CAAC,MAAM;AAC1E,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAE,aAAa,GAAG,cAAc,CAAC,CAAC,MAAM;AAChF,KAAK;AACL;AACA;AACA,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI;AAClC,MAAM,IAAI,MAAM,CAAC;AACjB,QAAQ,KAAK;AACb,QAAQ,OAAO;AACf,QAAQ,OAAO,EAAE;AACjB,UAAU,SAAS,EAAE;AACrB,YAAY,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;AACxD,YAAY,QAAQ,EAAE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC7F,WAAW;AACX,UAAU,MAAM,EAAE;AAClB,YAAY,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;AACrD,YAAY,QAAQ,EAAE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC1F,WAAW;AACX,UAAU,YAAY,EAAE;AACxB,YAAY,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC;AAC3D,YAAY,QAAQ,EAAE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAChG,WAAW;AACX,SAAS;AACT,QAAQ,OAAO,EAAE,aAAa;AAC9B,QAAQ,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC;AAClC,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC/B,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,CAAC,IAAI,EAAE,aAAa,EAAE;AACvC,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AAC/C;AACA;AACA,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG;AAC5B,MAAM,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1D,MAAM,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,YAAY,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1G,MAAM,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAClD,KAAK;AACL;AACA;AACA,IAAI,KAAK,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG;AAC/B,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC1D,MAAM,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI;AAC3C,QAAQ,KAAK,CAAC,CAAC,IAAI,KAAK,MAAM,GAAG,OAAO,IAAI,WAAW,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3E,QAAQ,KAAK,CAAC,CAAC,IAAI,KAAK,oBAAoB,GAAG;AAC/C,UAAU,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;AAC3C,UAAU,KAAK,KAAK,GAAG,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;AAC/D,UAAU,OAAO,IAAI,WAAW,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9C,SAAS;AACT,QAAQ,OAAO,CAAC,CAAC;AACjB,OAAO,CAAC,CAAC;AACT,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7F,KAAK;AACL;AACA;AACA,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,aAAa,CAAC;AAC/C,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAChD,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC9B,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;;AC5SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM,UAAU,SAAS,IAAI,CAAC;AAC7C,EAAE,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;AACtC,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAClC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC/D;AACA,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AACpG,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,QAAQ,CAAC,IAAI,EAAE;AACxB,IAAI,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AACpE,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACjC,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,mBAAmB,GAAG,8CAA8C,CAAC;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,UAAU,GAAG;AACnB,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;AACjC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,GAAG;AACtB,IAAI,MAAM,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG;AAClD,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzC,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzC;AACA;AACA,MAAM,KAAK,CAAC,IAAI,YAAY,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,YAAY,iBAAiB,CAAC,GAAG;AACjH,QAAQ,MAAM,OAAO,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACxC,QAAQ,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnD,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;AACzC,QAAQ,IAAI,GAAG,OAAO,CAAC;AACvB,OAAO;AACP;AACA;AACA,WAAW,KAAK,CAAC,IAAI,YAAY,iBAAiB,MAAM,QAAQ,YAAY,UAAU,CAAC;AACvF,WAAW,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;AAC7C,QAAQ,KAAK,IAAI,CAAC,eAAe,GAAG;AACpC,UAAU,IAAI,UAAU,GAAG,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AACtE,UAAU,IAAI,WAAW,GAAG,CAAC,CAAC;AAC9B;AACA;AACA,UAAU,KAAK,QAAQ,YAAY,UAAU,GAAG;AAChD,YAAY,UAAU,IAAI,QAAQ,CAAC,IAAI,CAAC;AACxC,YAAY,WAAW,IAAI,CAAC,CAAC;AAC7B,WAAW;AACX;AACA,UAAU,MAAM,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1D,UAAU,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;AACzD,UAAU,IAAI,GAAG,OAAO,CAAC;AACzB,SAAS;AACT,OAAO;AACP;AACA;AACA,WAAW,KAAK,CAAC,IAAI,YAAY,iBAAiB,IAAI,IAAI,YAAY,QAAQ,MAAM,QAAQ,YAAY,UAAU,CAAC;AACnH,WAAW,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;AAC7C,QAAQ,KAAK,IAAI,CAAC,eAAe,GAAG;AACpC,UAAU,MAAM,UAAU,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACxE,UAAU,MAAM,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1D,UAAU,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;AAC3C,UAAU,IAAI,GAAG,OAAO,CAAC;AACzB,SAAS;AACT,OAAO;AACP,KAAK;AACL;AACA;AACA,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5D;AACA;AACA,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;AACrC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,GAAG;AACpB,IAAI,IAAI,SAAS,GAAG,CAAC,CAAC;AACtB,IAAI,MAAM,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG;AAClD;AACA,MAAM,KAAK,IAAI,YAAY,QAAQ,GAAG;AACtC,QAAQ,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC;AACzE,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;AAC9C,QAAQ,KAAK,IAAI,CAAC,UAAU,GAAG;AAC/B,UAAU,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,IAAI,CAAC,CAAC;AACxD;AACA;AACA,UAAU,KAAK,IAAI,CAAC,OAAO,CAAC,gBAAgB,GAAG;AAC/C,YAAY,SAAS,KAAK,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;AACpD,YAAY,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AACnC,WAAW;AACX;AACA;AACA,UAAU,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,GAAG,CAAC,CAAC;AACtG,UAAU,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC7B,UAAU,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;AACvC,SAAS;AACT,OAAO;AACP;AACA;AACA,WAAW,KAAK,IAAI,CAAC,OAAO,CAAC,eAAe,KAAK,IAAI,YAAY,WAAW,CAAC,GAAG;AAChF,QAAQ,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC;AACzE,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;AAC9C,QAAQ,KAAK,IAAI,CAAC,UAAU,GAAG;AAC/B,UAAU,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,kBAAkB,IAAI,CAAC,CAAC,CAAC;AAChE,UAAU,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;AACvC,SAAS;AACT,OAAO;AACP,KAAK;AACL;AACA;AACA,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,gBAAgB,KAAK,SAAS,GAAG,CAAC,CAAC,GAAG;AAC5D,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACzD,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC;AACpH,KAAK;AACL;AACA;AACA,IAAI,KAAK,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,mBAAmB,GAAG;AAC/D,MAAM,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1E,MAAM,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,YAAY,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1G,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;AACtC,KAAK;AACL;AACA;AACA,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5D;AACA;AACA,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;AACnC,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE;AACxC,IAAI,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AACnE,IAAI,KAAK,IAAI,CAAC,UAAU,GAAG;AAC3B,MAAM,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;AAC5D,MAAM,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AAC3F,KAAK;AACL,IAAI,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;AACjE,IAAI,OAAO,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AACjD,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,eAAe,CAAC,CAAC,KAAK,EAAE,eAAe,EAAE,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE;AACtH;AACA;AACA,IAAI,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,mBAAmB,EAAE;AAC3F,MAAM,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;AACzC,MAAM,eAAe;AACrB,MAAM,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS;AACtC,KAAK,CAAC,CAAC;AACP;AACA;AACA,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI;AAClC,MAAM,IAAI,MAAM,CAAC;AACjB,QAAQ,KAAK;AACb,QAAQ,OAAO;AACf,QAAQ,OAAO,EAAE;AACjB,UAAU,QAAQ,EAAE;AACpB,YAAY,SAAS,EAAE,aAAa;AACpC,YAAY,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;AAC1D,YAAY,QAAQ,EAAE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACvE,WAAW;AACX,UAAU,MAAM,EAAE;AAClB,YAAY,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,cAAc,GAAG,YAAY,CAAC;AACpF,YAAY,QAAQ,EAAE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACxE,WAAW;AACX,SAAS;AACT,QAAQ,OAAO,EAAE,eAAe,GAAG,UAAU,GAAG,QAAQ;AACxD,QAAQ,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC;AAClC,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC/B,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE;AACpC,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AAC/C;AACA;AACA,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG;AAC5B,MAAM,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AAChE,MAAM,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,YAAY,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1G,MAAM,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAClD,KAAK;AACL;AACA;AACA,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,UAAU,CAAC;AACvC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAChD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;AAC3B,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,QAAQ,CAAC,IAAI,EAAE;AACxB,IAAI,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACtC,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChD,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;;;;;;;;;;;ACrQA;AACA;AACA;AACe,MAAM,eAAe,SAAS,aAAa,CAAC;AAC3D;AACA;AACA,EAAE,eAAe,CAAC,GAAG,IAAI,EAAE;AAC3B,IAAI,MAAM,IAAI,GAAG,KAAK,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,CAAC;AAChD,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC,SAAS,KAAK,eAAe,CAAC,GAAG;AACxD,MAAM,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC;AACvD,MAAM,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;AACnC,MAAM,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3D,KAAK;AACL,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;AAC9C,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,KAAK,CAAC,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC5E,IAAI,KAAK,IAAI,YAAY,OAAO,CAAC,QAAQ,CAAC,SAAS,GAAG,OAAO,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACtH,IAAI,MAAM,UAAU,GAAG,KAAK,CAAC,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC/D,IAAI,KAAK,KAAK,CAAC,MAAM,GAAG,OAAO,UAAU,CAAC;AAC1C,IAAI,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC;AACrD,IAAI,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAClG,IAAI,OAAO,UAAU,CAAC;AACtB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,+BAA+B,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE;AAC3D,IAAI,MAAM,QAAQ,GAAG,KAAK,IAAI,KAAK,YAAY,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAC/E,IAAI,MAAM,OAAO,GAAG,KAAK,IAAI,KAAK,YAAY,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC;AACpF,IAAI,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;AAC5C,IAAI,MAAM,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG;AACjE,MAAM,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACrC,MAAM,KAAK,KAAK,YAAY,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACvF,MAAM,KAAK,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG;AAC/C,QAAQ,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;AACnE,QAAQ,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC/D,QAAQ,KAAK,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5C,aAAa;AACb,UAAU,MAAM,KAAK,GAAG,IAAI,CAAC,+BAA+B,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACxE,UAAU,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;AAC5C,UAAU,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;AAChD,SAAS;AACT,OAAO;AACP,MAAM,KAAK,EAAE,KAAK,YAAY,YAAY,CAAC,GAAG,SAAS;AACvD,MAAM,KAAK,CAAC,KAAK,CAAC,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,SAAS;AACrF,MAAM,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,SAAS;AACtE,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AACzG,MAAM,MAAM,MAAM,GAAG,IAAI,IAAI,GAAG;AAChC,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,+BAA+B,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzF,QAAQ,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;AAC1C,QAAQ,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;AAC9C,OAAO;AACP,KAAK;AACL,IAAI,OAAO,UAAU,CAAC;AACtB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,qBAAqB,CAAC,IAAI,EAAE;AACrC,IAAI,MAAM,UAAU,GAAG,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;AACxD,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACrG,IAAI,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC;AACrD,IAAI,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAClG,IAAI,OAAO,UAAU,CAAC;AACtB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,mBAAmB,CAAC,OAAO,EAAE,KAAK,EAAE;AAC7C,IAAI,IAAI,KAAK,GAAG,OAAO,CAAC;AACxB,IAAI,MAAM,MAAM,IAAI,IAAI,KAAK,GAAG;AAChC,MAAM,KAAK,KAAK,KAAK,SAAS,GAAG,OAAO,KAAK,CAAC;AAC9C,MAAM,KAAK,KAAK,KAAK,IAAI,GAAG,OAAO,IAAI,CAAC;AACxC,MAAM,KAAK,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;AACzD,WAAW,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;AAC/B,KAAK;AACL,IAAI,OAAO,KAAK,KAAK,SAAS,CAAC;AAC/B,GAAG;AACH;;AClGA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,+BAA+B,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE;AACrE,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO;AACtF;AACA;AACA,EAAE,IAAI,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI;AACxC,IAAI,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACzB,IAAI,OAAO,CAAC,EAAE,EAAE,KAAK,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;AAC3D,GAAG,CAAC,CAAC;AACL,EAAE,KAAK,CAAC,OAAO,GAAG,OAAO;AACzB,EAAE,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACjD,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5B;AACA,EAAE,MAAM,cAAc,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;AAC3G,EAAE,KAAK,cAAc,GAAG,OAAO;AAC/B;AACA;AACA,EAAE,KAAK,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAC1E,OAAO,KAAK,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC3E,OAAO,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG;AAC/B,IAAI,KAAK,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC1F,SAAS,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACtD,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,wBAAwB,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE;AAC9D,EAAE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACjD,EAAE,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG;AAC7B,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAC7C,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AAC5E;AACA;AACA,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC5D,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,OAAO,GAAG,OAAO;AACzC,SAAS,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO;AAC1E;AACA;AACA,IAAI,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;AACzD,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK;AAC7B,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,GAAG,OAAO;AAClD,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;AACjC,KAAK,CAAC,CAAC;AACP,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,4BAA4B,CAAC,IAAI,EAAE,OAAO,EAAE;AAC5D,EAAE,IAAI,QAAQ,GAAG,EAAE,IAAI;AACvB,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AAC5D,IAAI,OAAO,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC;AAC5F,GAAG,CAAC;AACJ,EAAE,OAAO,CAAC,IAAI;AACd,IAAI;AACJ,MAAM,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC;AACzD,MAAM,IAAI,EAAE,mCAAmC;AAC/C,MAAM,SAAS,EAAE,QAAQ;AACzB,MAAM,QAAQ,EAAE,EAAE,IAAI,mBAAmB,CAAC,EAAE,EAAE,CAAC,CAAC;AAChD,KAAK;AACL,IAAI;AACJ,MAAM,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC;AAC1D,MAAM,IAAI,EAAE,kCAAkC;AAC9C,MAAM,SAAS,EAAE,QAAQ;AACzB,MAAM,QAAQ,EAAE,EAAE,IAAI,mBAAmB,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACjD,KAAK;AACL,IAAI;AACJ,MAAM,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC;AACzD,MAAM,IAAI,EAAE,mCAAmC;AAC/C,MAAM,SAAS,EAAE,QAAQ;AACzB,MAAM,QAAQ,EAAE,EAAE,IAAI,iBAAiB,CAAC,EAAE,CAAC;AAC3C,KAAK;AACL,IAAI;AACJ,MAAM,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,+BAA+B,CAAC;AAC/D,MAAM,IAAI,EAAE,qCAAqC;AACjD,MAAM,SAAS,EAAE,QAAQ;AACzB,MAAM,QAAQ,EAAE,EAAE,IAAI,mBAAmB,CAAC,EAAE,EAAE,CAAC,CAAC;AAChD,KAAK;AACL,IAAI;AACJ,MAAM,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,6BAA6B,CAAC;AAC7D,MAAM,IAAI,EAAE,oCAAoC;AAChD,MAAM,SAAS,EAAE,QAAQ;AACzB,MAAM,QAAQ,EAAE,EAAE,IAAI,mBAAmB,CAAC,EAAE,EAAE,GAAG,CAAC;AAClD,KAAK;AACL,GAAG,CAAC;AACJ,EAAE,OAAO,OAAO,CAAC;AACjB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,mBAAmB,CAAC,EAAE,EAAE,UAAU,EAAE;AAC7C,EAAE,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AAC1D,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAChC,EAAE,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI;AACvD,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;AACtB,IAAI,OAAO,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AACjD,GAAG,CAAC,CAAC,CAAC;AACN,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,iBAAiB,CAAC,EAAE,EAAE;AAC/B,EAAE,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AAC1D,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAChC,EAAE,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI;AACvD,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;AACtB,IAAI,OAAO,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrC,GAAG,CAAC,CAAC,CAAC;AACN,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,mBAAmB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE;AACrD,EAAE,wBAAwB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC5C,EAAE,+BAA+B,CAAC,GAAG,EAAE,IAAU,CAAC,CAAC;AACnD,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,uBAAuB,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,EAAE,CAAC;AAC7F;;;;;;;;;;AC5JA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,iBAAiB,CAAC,OAAO,CAAC,MAAM,EAAE;AAClD,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;AAC3E,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;AACxC;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACO,eAAe,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE;AACpD,EAAE,MAAM,SAAS,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AACvD,EAAE,SAAS,QAAQ,CAAC,IAAI;AACxB,IAAI,KAAK,MAAM;AACf,MAAM,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AACxE,MAAM,KAAK,CAAC,QAAQ,GAAG,OAAO,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;AAC/F,MAAM,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE;AAC3C,QAAQ,IAAI,EAAE,QAAQ,CAAC,IAAI;AAC3B,QAAQ,GAAG,EAAE,QAAQ,CAAC,GAAG;AACzB,QAAQ,OAAO,EAAE,CAAC,gCAAgC,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;AACrE,QAAQ,KAAK,EAAE,CAAC,iBAAiB,EAAE,IAAI,CAAC;AACxC,OAAO,CAAC,CAAC;AACT,MAAM,MAAM;AACZ,IAAI,KAAK,cAAc;AACvB,MAAM,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,cAAc,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AAClF,MAAM,KAAK,CAAC,UAAU,GAAG,OAAO,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;AACjG,MAAM,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE;AAC3C,QAAQ,IAAI,EAAE,UAAU,CAAC,KAAK;AAC9B,QAAQ,GAAG,EAAE,UAAU,CAAC,IAAI;AAC5B,QAAQ,OAAO,EAAE,CAAC,oCAAoC,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;AAC5E,QAAQ,KAAK,EAAE,CAAC,mBAAmB,EAAE,IAAI,CAAC;AAC1C,OAAO,CAAC,CAAC;AACT,MAAM,MAAM;AACZ,IAAI;AACJ,MAAM,OAAO;AACb,GAAG;AACH;AACA;AACA,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,MAAM,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,OAAO,CAAC;AACtG,OAAO,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACzD,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC3C,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE;AAC5C,EAAE,IAAI,KAAK,CAAC;AACZ,EAAE,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,EAAE,CAAC;AAC3C,EAAE,KAAK,OAAO,CAAC,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACjE,EAAE,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC3C,EAAE,KAAK,CAAC,KAAK,GAAG,OAAO,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAC;AAC5F;AACA,EAAE,MAAM,UAAU,GAAG,CAAC,YAAY,KAAK,MAAM,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC;AAC7E,EAAE,MAAM,WAAW,GAAG,CAAC,YAAY,KAAK,MAAM,IAAI,MAAM,GAAG,OAAO,CAAC;AACnE;AACA;AACA,EAAE,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,KAAK,IAAI,CAAC,CAAC;AAC/F,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;AAC9D,EAAE,KAAK,SAAS,CAAC,MAAM,KAAK,CAAC,GAAG;AAChC,IAAI,OAAO,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,2BAA2B,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACnH,GAAG;AACH,EAAE,KAAK,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG;AAC9B,IAAI,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,6BAA6B,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC9G,GAAG;AACH,EAAE,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;AACtB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,QAAQ,CAAC,QAAQ,EAAE;AACnC,EAAE,OAAO,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;AACjD,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,YAAY,CAAC,UAAU,EAAE;AACzC,EAAE,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;AAC5D,EAAE,OAAO,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AACtD;;;;;;;;;ACzFA;;;;;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACO,MAAM,YAAY,GAAG,iBAAiB;AAC7C,EAAE,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;AACtC,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;AAC7F;AACA,EAAE,MAAM,aAAa,GAAG,MAAM,gBAAgB,EAAE,CAAC;AACjD;AACA;AACA,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAChD,KAAK,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACvG,EAAE,MAAM,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,GAAG;AACzC,IAAI,IAAI;AACR,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;AAC/F,MAAM,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AACjE,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG;AAChD,QAAQ,OAAO,CAAC,GAAG,CAAC,CAAC,yBAAyB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC9D,QAAQ,MAAM,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAC3E,OAAO;AACP,KAAK,CAAC,MAAM,GAAG,EAAE;AACjB,MAAM,GAAG,CAAC,OAAO,GAAG,CAAC,wCAAwC,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5F,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACzB,KAAK;AACL,GAAG;AACH;AACA;AACA,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC9C,KAAK,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACrG,EAAE,MAAM,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,GAAG;AACvC,IAAI,IAAI;AACR,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;AAC5F,MAAM,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAChE,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG;AAChD,QAAQ,OAAO,CAAC,GAAG,CAAC,CAAC,wBAAwB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5D,QAAQ,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAC1E,OAAO;AACP,KAAK,CAAC,MAAM,GAAG,EAAE;AACjB,MAAM,GAAG,CAAC,OAAO,GAAG,CAAC,uCAAuC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1F,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACzB,KAAK;AACL,GAAG;AACH;AACA;AACA,EAAE,MAAM,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG;AACjC,IAAI,IAAI;AACR,MAAM,MAAM,UAAU,GAAG,gBAAgB,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,CAAC;AACvE,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG;AAChD,QAAQ,OAAO,CAAC,GAAG,CAAC,CAAC,yBAAyB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC1D,QAAQ,MAAM,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;AAC1D,OAAO;AACP,KAAK,CAAC,MAAM,GAAG,EAAE;AACjB,MAAM,GAAG,CAAC,OAAO,GAAG,CAAC,wCAAwC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AACxF,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACzB,KAAK;AACL,GAAG;AACH;AACA;AACA,EAAE,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG;AAC/B,IAAI,IAAI;AACR,MAAM,MAAM,UAAU,GAAG,gBAAgB,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;AAC5D,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG;AAChD,QAAQ,OAAO,CAAC,GAAG,CAAC,CAAC,yBAAyB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC1D,QAAQ,MAAM,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;AAC1D;AACA;AACA,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AAC/C,OAAO;AACP,KAAK,CAAC,MAAM,GAAG,EAAE;AACjB,MAAM,GAAG,CAAC,OAAO,GAAG,CAAC,wCAAwC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AACxF,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACzB,KAAK;AACL,GAAG;AACH;AACA;AACA,EAAE,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG;AAC9B,IAAI,KAAK,CAAC,CAAC,QAAQ,CAAC,WAAW,KAAK,OAAO,GAAG,SAAS;AACvD,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,SAAS;AACzE,IAAI,MAAM,iBAAiB,CAAC,CAAC,CAAC,CAAC;AAC/B,GAAG;AACH;AACA;AACA,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,wBAAwB,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC5E,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;AAChG,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,iBAAiB,GAAG,eAAe,IAAI,EAAE;AACtD,EAAE,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;AACzC,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,OAAO;AACnE;AACA,EAAE,MAAM,aAAa,GAAG,MAAM,gBAAgB,EAAE,CAAC;AACjD;AACA;AACA,EAAE,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;AAChC,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AACxC;AACA;AACA,EAAE,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;AACvB,EAAE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;AAC9C;AACA;AACA,EAAE,MAAM,IAAI,GAAG,IAAI,SAAS,GAAG;AAC/B,IAAI,IAAI,UAAU,GAAG,EAAE,CAAC;AACxB,IAAI,IAAI;AACR,MAAM,QAAQ,YAAY;AAC1B,QAAQ,KAAK,OAAO;AACpB,UAAU,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,CAAC;AACvE,UAAU,MAAM;AAChB,QAAQ,KAAK,MAAM;AACnB,UAAU,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,CAAC;AACtE,UAAU,MAAM;AAChB,QAAQ,KAAK,OAAO;AACpB,UAAU,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,CAAC;AACvE,UAAU,MAAM;AAChB,OAAO;AACP;AACA;AACA,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,SAAS;AACxD,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACnC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACpG,KAAK;AACL;AACA;AACA,IAAI,MAAM,GAAG,EAAE;AACf,MAAM,GAAG,CAAC,OAAO,GAAG,CAAC,2CAA2C,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AACxH,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACzB,KAAK;AACL,GAAG;AACH;AACA;AACA,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAC5C,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,YAAY,CAAC,2BAA2B,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC3F,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,qBAAqB,GAAG;AAC9C,EAAE,MAAM,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG;AACnC,IAAI,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAClC,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,iBAAiB,CAAC,IAAI,EAAE;AAC9C,EAAE,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO;AACpC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC;AACrC,EAAE,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,aAAa,CAAC;AAChE,EAAE,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;AAChC,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AACxC,EAAE,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;AACvB;AACA,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,gCAAgC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC9E,EAAE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;AAC9C,EAAE,MAAM,MAAM,GAAG,IAAI,SAAS,GAAG;AACjC,IAAI,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;AAChC,IAAI,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;AACvB,IAAI,MAAM,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AACnG,GAAG;AACH,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAC5C,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,KAAK,CAAC;AACtC,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,wCAAwC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACtF,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,iBAAiB,GAAG,eAAe,IAAI,EAAE;AACtD,EAAE,KAAK,OAAO,IAAI,KAAK,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC9D,EAAE,KAAK,IAAI,CAAC,YAAY,KAAK,OAAO,GAAG,OAAO;AAC9C,EAAE,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;AAChC,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AACxC,EAAE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;AAC3C,EAAE,MAAM,OAAO,GAAG,EAAE,CAAC;AACrB,EAAE,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;AAC9D;AACA,EAAE,MAAM,MAAM,KAAK,IAAI,MAAM,GAAG;AAChC,IAAI,IAAI;AACR,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAChD,MAAM,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;AACnC,MAAM,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;AACrC;AACA;AACA,MAAM,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AACnC;AACA,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC3B;AACA;AACA,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI;AACnE,QAAQ,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;AACpE,OAAO,CAAC,CAAC;AACT,MAAM,KAAK,gBAAgB,GAAG,MAAM,CAAC,2BAA2B,CAAC,GAAG,SAAS,CAAC;AAC9E;AACA;AACA,WAAW,KAAK,GAAG,CAAC,IAAI,KAAK,KAAK,GAAG,MAAM,CAAC,2BAA2B,CAAC,GAAG,SAAS,CAAC;AACrF,KAAK,CAAC,MAAM,CAAC,EAAE;AACf,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,wCAAwC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/E,KAAK;AACL,GAAG;AACH;AACA,EAAE,MAAM,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/E,EAAE,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;AAC5B,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAC5C,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,8CAA8C,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAClF,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,gBAAgB,GAAG,SAAS,KAAK,EAAE,aAAa,EAAE;AAC/D,EAAE,MAAM,UAAU,GAAG,EAAE,CAAC;AACxB,EAAE,kBAAkB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AACxC,EAAE,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AACrC;AACA;AACA,EAAE,KAAK,KAAK,CAAC,OAAO,GAAG;AACvB,IAAI,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;AACzD,IAAI,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;AAC3D,GAAG;AACH;AACA;AACA,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,UAAU,CAAC;AACxC,EAAE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK;AAC/C;AACA,IAAI,MAAM,QAAQ,GAAG,CAAC,YAAY,MAAM,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC/E,IAAI,IAAI,UAAU,GAAG,eAAe,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;AAC9D;AACA;AACA,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,GAAG;AAChC,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC,KAAK,KAAK,EAAE,UAAU,CAAC,6BAA6B,CAAC,GAAG,IAAI,CAAC;AACzI,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC;AACjH,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,KAAK,KAAK,EAAE,UAAU,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC;AACrH,KAAK;AACL;AACA;AACA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG;AAC9C,MAAM,UAAU,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;AACpC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;AACvD,KAAK;AACL;AACA;AACA,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG;AAC9B,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;AACzE,MAAM,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,MAAM,MAAM,QAAQ,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,WAAW,GAAG;AAC3F,QAAQ,UAAU,CAAC,CAAC,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC;AAClG,OAAO;AACP,KAAK;AACL;AACA,IAAI,OAAO,GAAG,CAAC;AACf,GAAG,EAAE,EAAE,CAAC,CAAC;AACT,EAAE,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC;AACnD;AACA,EAAE,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,eAAe,CAAC,IAAI,EAAE,aAAa,EAAE;AACrD,EAAE,MAAM,UAAU,GAAG,EAAE,CAAC;AACxB,EAAE,oBAAoB,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;AACxD;AACA;AACA,EAAE,KAAK,IAAI,CAAC,OAAO,GAAG;AACtB,IAAI,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AACxD,IAAI,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;AAC3D,GAAG;AACH;AACA,EAAE,OAAO,UAAU,CAAC;AACpB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,cAAc,GAAG,SAAS,MAAM,EAAE,aAAa,EAAE;AAC9D,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,OAAO,EAAE,CAAC;AACnC,EAAE,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK;AAC3C,IAAI,MAAM,UAAU,GAAG,CAAC,YAAY,MAAM,CAAC,YAAY,CAAC,aAAa,GAAG,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACzF,IAAI,IAAI,YAAY,GAAG,iBAAiB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AACpE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG;AAChD,MAAM,YAAY,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC;AACxC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC;AACzD,KAAK;AACL,IAAI,OAAO,GAAG,CAAC;AACf,GAAG,EAAE,EAAE,CAAC,CAAC;AACT,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,iBAAiB,GAAG,SAAS,MAAM,EAAE,aAAa,EAAE;AACjE,EAAE,MAAM,UAAU,GAAG,EAAE,CAAC;AACxB,EAAE,oBAAoB,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,GAAG,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAC9E,EAAE,wBAAwB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAC/C,EAAE,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,gBAAgB,GAAG,SAAS,KAAK,EAAE,aAAa,EAAE;AAC/D,EAAE,MAAM,UAAU,GAAG,EAAE,CAAC;AACxB,EAAE,oBAAoB,CAAC,KAAK,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;AACzD,EAAE,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AAC3C,EAAE,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,gBAAgB,GAAG,SAAS,KAAK,EAAE,aAAa,EAAE;AAC/D,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI;AAC3C,IAAI,MAAM,CAAC,GAAG,KAAK,YAAY,OAAO,CAAC,QAAQ,CAAC,SAAS,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC;AACrF,IAAI,MAAM,MAAM,GAAG,EAAE,CAAC;AACtB,IAAI,kBAAkB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAClC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAC3E,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;AACxD,IAAI,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC;AACtD,SAAS,KAAK,CAAC,CAAC,CAAC,SAAS,GAAG;AAC7B,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AACxF,MAAM,SAAS,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC;AACzC,MAAM,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AAChE,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG;AAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,OAAO,CAAC,YAAY,IAAI;AACrD,UAAU,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO;AACtD,UAAU,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7E,UAAU,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI;AACxD,YAAY,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACrD,YAAY,KAAK,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AACtE,WAAW,CAAC,CAAC;AACb,UAAU,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC;AACtC,SAAS,CAAC,CAAC;AACX,QAAQ,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AACvD,OAAO;AACP,WAAW,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC;AAC5B,KAAK;AACL,IAAI,OAAO,CAAC,CAAC;AACb,GAAG,CAAC,CAAC;AACL,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,gBAAgB,GAAG,iBAAiB;AACjD,EAAE,MAAM,IAAI,GAAG,EAAE,CAAC;AAClB,EAAE,IAAI;AACN,IAAI,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,wCAAwC,CAAC,CAAC;AACxE,IAAI,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,8CAA8C,CAAC,CAAC;AACnF,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,EAAE,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;AACvE,GAAG,CAAC,MAAM,GAAG,EAAE;AACf,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,wCAAwC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC3E,GAAG;AACH,EAAE,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,eAAe,CAAC,SAAS,EAAE,UAAU,EAAE;AAChD,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC;AAC9C;AACA,EAAE,KAAK,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG;AACrC,IAAI,UAAU,CAAC,2BAA2B,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACjE,IAAI,UAAU,CAAC,2BAA2B,CAAC,GAAG,SAAS,CAAC,IAAI,KAAK,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;AAC5F,IAAI,UAAU,CAAC,8BAA8B,CAAC,GAAG,IAAI,CAAC;AACtD,IAAI,OAAO,UAAU,CAAC;AACtB,GAAG;AACH;AACA;AACA,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,KAAK,QAAQ,KAAK,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,GAAG;AAC1F,IAAI,UAAU,CAAC,8BAA8B,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,sBAAsB,CAAC,CAAC;AACtH,GAAG;AACH;AACA;AACA,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,KAAK,QAAQ,KAAK,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;AACrE,IAAI,UAAU,CAAC,2BAA2B,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AAChE,GAAG;AACH;AACA;AACA,EAAE,KAAK,EAAE,EAAE,OAAO,GAAG;AACrB,IAAI,IAAI;AACR,MAAM,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;AACxC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAClC,KAAK,CAAC,OAAO,CAAC,GAAG;AACjB,MAAM,UAAU,CAAC,8BAA8B,CAAC,GAAG,EAAE,CAAC;AACtD,KAAK;AACL,GAAG;AACH;AACA,EAAE,OAAO,UAAU,CAAC;AACpB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,kBAAkB,CAAC,SAAS,EAAE,UAAU,EAAE;AACnD,EAAE,MAAM,YAAY,GAAG,kDAAkD,CAAC;AAC1E,EAAE,MAAM,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,4BAA4B,CAAC,GAAG;AACtE,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACzD,IAAI,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG;AAChC,MAAM,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9D,MAAM,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzE,KAAK;AACL,GAAG;AACH,EAAE,OAAO,UAAU,CAAC;AACpB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oBAAoB,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE;AAC/E,EAAE,IAAI,IAAI,GAAG,QAAQ,GAAG,KAAK,CAAC,CAAC;AAC/B,EAAE,KAAK,IAAI,IAAI,OAAO,GAAG;AACzB,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAClF,IAAI,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AACjC,IAAI,KAAK,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;AAC7C,GAAG;AACH,EAAE,OAAO,UAAU,CAAC;AACpB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,wBAAwB,CAAC,MAAM,EAAE,UAAU,EAAE;AACtD,EAAE,IAAI,eAAe,GAAG,KAAK,CAAC;AAC9B,EAAE,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI;AAClD,IAAI,KAAK,CAAC,CAAC,GAAG,KAAK,2BAA2B,GAAG,OAAO,CAAC,CAAC;AAC1D,IAAI,CAAC,CAAC,GAAG,GAAG,4BAA4B,CAAC;AACzC,IAAI,eAAe,GAAG,IAAI,CAAC;AAC3B,IAAI,OAAO,CAAC,CAAC;AACb,GAAG,CAAC,CAAC;AACL,EAAE,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;AACtD,EAAE,OAAO,UAAU,CAAC;AACpB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,qBAAqB,CAAC,KAAK,EAAE,UAAU,EAAE;AAClD,EAAE,KAAK,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAC,GAAG;AAC5D,IAAI,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,0BAA0B,EAAE,gCAAgC,CAAC,CAAC;AAChH,GAAG,MAAM,KAAK,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,GAAG;AAC7D,IAAI,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,wBAAwB,CAAC,CAAC;AAClG,GAAG;AACH,EAAE,OAAO,UAAU,CAAC;AACpB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,UAAU,CAAC,IAAI,EAAE;AACvC,EAAE,MAAM,UAAU,GAAG,KAAK,IAAI;AAC9B,IAAI,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC;AACxC,IAAI,OAAO,OAAO,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;AAC3C,GAAG,CAAC;AACJ,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AACxC,EAAE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;AAC5C,EAAE,MAAM,IAAI,GAAG,IAAI,OAAO,GAAG;AAC7B,IAAI,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAClD,IAAI,KAAK,IAAI,CAAC,YAAY,KAAK,OAAO,GAAG;AACzC,MAAM,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI;AACxC,QAAQ,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACtC,QAAQ,OAAO,CAAC,CAAC;AACjB,OAAO,CAAC,CAAC;AACT,KAAK;AACL,IAAI,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;AACjD,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,kBAAkB,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjD,GAAG;AACH,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AACvC;;;;;;;;;;;;;;;;;;;ACpjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAeA;AACA;AACA;AACA;AACA;AACA,UAAU,CAAC,KAAK,GAAG;AACnB,EAAE,YAAY;AACd,UAAEE,QAAM;AACR,EAAE,MAAM,EAAE,KAAK;AACf,EAAE,UAAU;AACZ,EAAE,IAAI;AACN,EAAE,SAAS;AACX,EAAE,UAAU;AACZ,EAAE,KAAK;AACP,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW;AAC9B,EAAE,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;AAC/E,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,qDAAqD,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACvG;AACA;AACA,EAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;AACvB,EAAE,MAAM,CAAC,YAAY,CAAC,aAAa,GAAGC,cAAwB,CAAC;AAC/D,EAAE,MAAM,CAAC,KAAK,CAAC,aAAa,GAAGC,OAAiB,CAAC;AACjD,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,GAAGC,MAAgB,CAAC;AAC/C,EAAE,MAAM,CAAC,KAAK,CAAC,aAAa,GAAGC,eAAyB,CAAC;AACzD,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,GAAGC,OAAc,CAAC;AAC5C,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;AAC5B,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,GAAGC,UAAe,CAAC;AAC3C,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,GAAGC,OAAY,CAAC;AACrC,EAAE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;AACjD,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,GAAGC,eAAmC,CAAC;AACzD,EAAE,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;AACxE,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE,CAAC;AAClD;AACA;AACA,EAAE,6BAA6B,EAAE,CAAC;AAClC;AACA;AACA,EAAE,sBAAsB,EAAE,CAAC;AAC3B;AACA;AACA,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,8BAA8B,EAAE,CAAC;AAC3D;AACA;AACA,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;AACzC;AACA;AACA,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG,OAAO,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC;AAC9E,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,GAAG,OAAO,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC;AAC/E;AACA;AACA,EAAE,SAAS,CAAC,SAAS,CAAC,iBAAiB,GAAGC,iBAAkC,CAAC;AAC7E;AACA;AACA,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAACF,OAAY,CAAC,CAAC;AACvC,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAACD,UAAe,CAAC,CAAC;AAC1C;AACA;AACA,EAAE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,kBAAkB,GAAG,YAAY,CAAC;AACzE,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAGI,QAAuB,CAAC;AACpD,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAGC,QAAsB,CAAC;AAClD,EAAE,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAGC,MAAyB,CAAC;AACjE;AACA;AACA,EAAE,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAC7C,EAAE,MAAM,CAAC,aAAa,CAAC,OAAO,EAAEC,qBAAwC,EAAE;AAC1E,IAAI,KAAK,EAAE,CAAC,WAAW,CAAC;AACxB,IAAI,WAAW,EAAE,IAAI;AACrB,IAAI,KAAK,EAAE,2BAA2B;AACtC,GAAG,CAAC,CAAC;AACL,EAAE,MAAM,CAAC,aAAa,CAAC,OAAO,EAAEC,eAAkC,EAAE;AACpE,IAAI,KAAK,EAAE,CAAC,KAAK,CAAC;AAClB,IAAI,WAAW,EAAE,IAAI;AACrB,IAAI,KAAK,EAAE,qBAAqB;AAChC,GAAG,CAAC,CAAC;AACL,EAAE,MAAM,CAAC,aAAa,CAAC,OAAO,EAAEC,mBAAsC,EAAE;AACxE,IAAI,KAAK,EAAE,CAAC,SAAS,CAAC;AACtB,IAAI,WAAW,EAAE,IAAI;AACrB,IAAI,KAAK,EAAE,yBAAyB;AACpC,GAAG,CAAC,CAAC;AACL,EAAE,MAAM,CAAC,aAAa,CAAC,OAAO,EAAEC,eAAkC,EAAE;AACpE,IAAI,KAAK,EAAE,CAAC,OAAO,CAAC;AACpB,IAAI,WAAW,EAAE,IAAI;AACrB,IAAI,KAAK,EAAE,uBAAuB;AAClC,GAAG,CAAC,CAAC;AACL;AACA,EAAE,KAAK,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAC3C,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,EAAEC,WAA6B,EAAE;AAC9D,IAAI,WAAW,EAAE,IAAI;AACrB,IAAI,KAAK,EAAE,sBAAsB;AACjC,GAAG,CAAC,CAAC;AACL,EAAE,mBAAmB,CAAC,aAAa,CAAC,gBAAgB,EAAE,OAAO,EAAEC,qBAA0C,EAAE;AAC3G,IAAI,KAAK,EAAE,8BAA8B;AACzC,IAAI,KAAK,EAAE,CAAC,OAAO,CAAC;AACpB,GAAG,CAAC,CAAC;AACL;AACA;AACA,EAAEC,yBAA+B,EAAE,CAAC;AACpC,EAAEC,0BAAgC,EAAE,CAAC;AACrC,CAAC,CAAC,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,SAAS,8BAA8B,GAAG;AAC1C,EAAEC,eAA0B,CAAC,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;AACnG,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,eAAe,8BAA8B,GAAG;AAChD,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO;AAChC,EAAE,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI;AACnG,MAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC;AAC1C,EAAE,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;AAC1E,EAAE,KAAK,gBAAgB,IAAI,gBAAgB,GAAG;AAC9C,IAAI,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,kBAAkB,EAAE,KAAK,CAAC,CAAC;AAChE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC/B,IAAI,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;AACpC,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,SAAS,6BAA6B,GAAG;AACzC,EAAE,MAAM,MAAM,GAAG;AACjB,IAAI,GAAG,EAAE,EAAE;AACX,IAAI,KAAK,EAAE;AACX,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AAClF,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC5F,MAAM,qBAAqB,EAAE,uBAAuB;AACpD,KAAK;AACL,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,QAAQ,GAAG;AACnB,IAAI,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC;AACzC,IAAI,KAAK,EAAE;AACX,MAAM,GAAG,MAAM,CAAC,KAAK;AACrB,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC1E,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC,CAAC;AAC7E,MAAM,oBAAoB;AAC1B,KAAK;AACL,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,CAAC,KAAK,CAAC,mBAAmB,GAAG;AACrC,IAAI,SAAS,EAAE;AACf,MAAM,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,YAAY,CAAC;AAC5G,MAAM,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;AAChC,KAAK;AACL,IAAI,GAAG,EAAE;AACT,MAAM,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,kBAAkB,EAAE,kBAAkB,CAAC;AACpE,MAAM,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,oBAAoB,EAAE,kBAAkB,CAAC;AACxF,KAAK;AACL,IAAI,OAAO,EAAE;AACb,MAAM,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC;AAC3C,MAAM,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;AAC9B,KAAK;AACL,IAAI,KAAK,EAAE;AACX,MAAM,GAAG,EAAE,EAAE;AACb,MAAM,KAAK,EAAE,EAAE;AACf,KAAK;AACL,GAAG,CAAC;AACJ,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW;AAC/B,EAAE,MAAM,CAAC,KAAK,CAAC,mBAAmB,GAAG,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;AAC3F,EAAE,MAAM,CAAC,KAAK,CAAC,mBAAmB,GAAG,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;AAC3F,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAC;AAC3C;AACA;AACA,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG;AAC3B,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAChD,IAAI,KAAK,CAAC,gBAAgB,GAAGC,aAAkC,CAAC;AAChE,GAAG;AACH,CAAC,CAAC,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,mBAAmB,CAAC,UAAU,EAAE;AACzC,EAAE,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK;AAC1C,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC/C,IAAI,OAAO,GAAG,CAAC;AACf,GAAG,EAAE,EAAE,CAAC,CAAC;AACT,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,MAAMC,sBAA4B,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW;AAC/B,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG;AAC1B;AACA,IAAI,8BAA8B,EAAE,CAAC;AACrC;AACA;AACA,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAChD,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,IAAID,aAAkC,CAAC,KAAK,CAAC,CAAC,CAAC;AACjE,GAAG;AACH;AACA;AACA,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,KAAK;AAC9C,IAAI,KAAK,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;AACxD,MAAME,aAA6B,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAChD,MAAM,OAAO,KAAK,CAAC;AACnB,KAAK;AACL,GAAG,CAAC,CAAC;AACL;AACA;AACA,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO;AAChC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,wBAAwB,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC;AACrG,EAAE,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAC/E,EAAE,KAAK,CAAC,EAAE,IAAI,cAAc,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,wBAAwB,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACtH,EAAE,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,CAAC,GAAG,OAAO;AACnF;AACA;AACA,EAAE,KAAK,EAAE,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,EAAE,CAAC,GAAG;AAChF,IAAI,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,kCAAkC,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;AACtG,GAAG;AACH,EAAEC,YAAuB,EAAE,CAAC;AAC5B,CAAC,CAAC,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,UAAU,IAAI;AACrC,EAAE,UAAU,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;AAChF,EAAE,UAAU,CAAC,SAAS,CAAC,gBAAgB,GAAGC,gBAAuB,CAAC;AAClE,CAAC,CAAC,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC,EAAE,CAAC,mBAAmB,EAAEC,mBAAkC,CAAC,CAAC;AAClE,KAAK,CAAC,EAAE,CAAC,wBAAwB,EAAEC,4BAA2C,CAAC,CAAC;AAChF;AACA,KAAK,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,KAAKzB,MAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;AACrF,KAAK,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,KAAKA,MAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;AACxF,KAAK,CAAC,EAAE,CAAC,+BAA+B,EAAED,OAAiB,CAAC,0BAA0B,CAAC;;;;"}